diff --git a/README.html b/README.html
index 38861e74b30d03a3cf20f80ef5645c221c1da245..5fa6156a9959091376985378717e584a3c2efeac 100644
--- a/README.html
+++ b/README.html
@@ -14,8 +14,9 @@
 
 <h2>Runtime Requirements</h2>
 <ul>
-<li>python2.5 or higher</li>
-<li>pygtk2.22 or higher</li>
+<li>python2.7 or higher</li>
+<li>python-gi</li>
+<li>gir1.2-gtk-3.0</li>
 <li>python-nbxmpp</li>
 </ul>
 
@@ -28,7 +29,7 @@
 <li>For zeroconf (bonjour), the "enable link-local messaging" checkbox, you need dbus-glib, python-avahi</li>
 <li>dnsutils (or whatever package provides the nslookup binary) for SRV support</li>
 <li>gtkspell and aspell-LANG where lang is your locale eg. en, fr etc</li>
-<li>gnome-python-desktop (for GnomeKeyring support as password storage)</li>
+<li>gir1.2-gnomekeyring-1.0 for GnomeKeyring support as password storage</li>
 <li>kwalletcli (for support of KDE Wallet as password storage)</li>
 <li>notification-daemon or notify-python (and D-Bus) to get cooler popups</li>
 <li>D-Bus running to have gajim-remote working. Some distributions split dbus-x11, which is needed for dbus to work with Gajim. Version >= 0.80 is required.</li>
diff --git a/build.bat b/build.bat
index f3e8c7113b0c29712bfa8137c0a0c77893c6120c..e427d8ab33b0e2ad9273c9bc8d03fa08b4725fd9 100644
--- a/build.bat
+++ b/build.bat
@@ -22,6 +22,9 @@ rename exe.win32-2.7 bin
 copy ..\LIBEAY32.dll bin
 copy ..\SSLEAY32.dll bin
 
+REM for snarl plugin
+xcopy ..\win32com bin\win32com /e /i
+
 mkdir bin\gtk
 cd ../src/gtk
 hg archive ..\..\gajim_built\bin\gtk
diff --git a/data/Makefile.am b/data/Makefile.am
index 827882796f6fb4f08f82c60f49aadea1e22f90db..81c1c2967901a60f8af97ae8e9af4fc539bbaabf 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -12,7 +12,9 @@ soundsdir = $(pkgdatadir)/data/sounds
 sounds_DATA = $(srcdir)/sounds/*.wav
 
 otherdir = $(pkgdatadir)/data/other
-other_DATA = other/servers.xml other/cacerts.pem
+other_DATA = other/servers.xml other/dh4096.pem
+# other/cacert.pem is used only on Windows. On Unix platforms
+# use CA certificates installed in /etc/ssl/certs
 
 man_MANS = gajim.1 gajim-remote.1 gajim-history-manager.1
 
diff --git a/data/gui/account_context_menu.ui b/data/gui/account_context_menu.ui
index a2840e785a7beff852427df8a18eeee917babe16..0924fb7de7c3b66ba8cb7aafa14f78c63a12a714 100644
--- a/data/gui/account_context_menu.ui
+++ b/data/gui/account_context_menu.ui
@@ -40,7 +40,7 @@
     </child>
     <child>
       <object class="GtkImageMenuItem" id="join_group_chat_menuitem">
-        <property name="label" translatable="yes">Join _Group Chat...</property>
+        <property name="label" translatable="yes">Join _Group Chat</property>
         <property name="visible">True</property>
         <property name="use_underline">True</property>
         <property name="image">image4</property>
@@ -93,7 +93,7 @@
     </child>
     <child>
       <object class="GtkImageMenuItem" id="edit_account_menuitem">
-        <property name="label" translatable="yes">_Modify Account</property>
+        <property name="label" translatable="yes">_Modify Account...</property>
         <property name="visible">True</property>
         <property name="use_underline">True</property>
         <property name="image">image8</property>
diff --git a/data/gui/account_creation_wizard_window.ui b/data/gui/account_creation_wizard_window.ui
index 41b6a87a9e230f87c4a6ddc202893116f276dbad..1fa4294d0f8c18c8bc96891583abc594ab296653 100644
--- a/data/gui/account_creation_wizard_window.ui
+++ b/data/gui/account_creation_wizard_window.ui
@@ -1,31 +1,54 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-preferences</property>
+  </object>
+  <object class="GtkImage" id="image3">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-apply</property>
+  </object>
+  <object class="GtkListStore" id="liststore1">
+    <columns>
+      <!-- column-name item -->
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes">None</col>
+      </row>
+    </data>
+  </object>
   <object class="GtkWindow" id="account_creation_wizard_window">
+    <property name="can_focus">False</property>
     <property name="border_width">12</property>
     <property name="title" translatable="yes">Gajim: Account Creation Wizard</property>
     <property name="resizable">False</property>
     <property name="type_hint">dialog</property>
-    <signal name="destroy" handler="on_wizard_window_destroy"/>
+    <signal name="destroy" handler="on_wizard_window_destroy" swapped="no"/>
     <child>
       <object class="GtkVBox" id="vbox77">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <property name="spacing">6</property>
         <child>
           <object class="GtkNotebook" id="notebook">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="show_tabs">False</property>
             <property name="show_border">False</property>
             <child>
               <object class="GtkVBox" id="vbox78">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkLabel" id="label256">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">You need to have an account in order to connect
 to the Jabber network.</property>
@@ -39,18 +62,20 @@ to the Jabber network.</property>
                 <child>
                   <object class="GtkFrame" id="frame33">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment68">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="top_padding">5</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkVBox" id="vbox83">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="border_width">6</property>
-                            <property name="orientation">vertical</property>
                             <property name="spacing">6</property>
                             <child>
                               <object class="GtkRadioButton" id="use_existing_account_radiobutton">
@@ -59,6 +84,7 @@ to the Jabber network.</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
                               </object>
                               <packing>
@@ -74,6 +100,7 @@ to the Jabber network.</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
                                 <property name="group">use_existing_account_radiobutton</property>
                               </object>
@@ -90,6 +117,7 @@ to the Jabber network.</property>
                     <child type="label">
                       <object class="GtkLabel" id="label269">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Please choose one of the options below:&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
@@ -106,6 +134,7 @@ to the Jabber network.</property>
             <child type="tab">
               <object class="GtkLabel" id="label259">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
               </object>
               <packing>
                 <property name="tab_fill">False</property>
@@ -114,12 +143,13 @@ to the Jabber network.</property>
             <child>
               <object class="GtkVBox" id="register_vbox">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="border_width">6</property>
-                <property name="orientation">vertical</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkLabel" id="label270">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">&lt;b&gt;Please fill in the data for your existing account&lt;/b&gt;</property>
                     <property name="use_markup">True</property>
@@ -133,25 +163,30 @@ to the Jabber network.</property>
                 <child>
                   <object class="GtkTable" id="table27">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="n_rows">3</property>
                     <property name="n_columns">4</property>
                     <property name="column_spacing">12</property>
                     <property name="row_spacing">6</property>
+                    <child>
+                      <placeholder/>
+                    </child>
                     <child>
                       <object class="GtkEntry" id="username_entry">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <signal name="key_press_event" handler="on_username_entry_key_press_event"/>
+                        <signal name="key-press-event" handler="on_username_entry_key_press_event" swapped="no"/>
                       </object>
                       <packing>
                         <property name="left_attach">1</property>
                         <property name="right_attach">2</property>
-                        <property name="y_options"></property>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkLabel" id="label263">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="xalign">0</property>
                         <property name="label" translatable="yes">_Password:</property>
                         <property name="use_underline">True</property>
@@ -161,7 +196,7 @@ to the Jabber network.</property>
                         <property name="top_attach">2</property>
                         <property name="bottom_attach">3</property>
                         <property name="x_options">GTK_FILL</property>
-                        <property name="y_options"></property>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
@@ -173,9 +208,10 @@ to the Jabber network.</property>
                         <property name="tooltip_text" translatable="yes">If checked, Gajim will remember the password for this account</property>
                         <property name="use_underline">True</property>
                         <property name="focus_on_click">False</property>
+                        <property name="xalign">0.5</property>
                         <property name="active">True</property>
                         <property name="draw_indicator">True</property>
-                        <signal name="toggled" handler="on_save_password_checkbutton_toggled"/>
+                        <signal name="toggled" handler="on_save_password_checkbutton_toggled" swapped="no"/>
                       </object>
                       <packing>
                         <property name="left_attach">2</property>
@@ -183,7 +219,7 @@ to the Jabber network.</property>
                         <property name="top_attach">2</property>
                         <property name="bottom_attach">3</property>
                         <property name="x_options">GTK_FILL</property>
-                        <property name="y_options"></property>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
@@ -198,12 +234,13 @@ to the Jabber network.</property>
                         <property name="right_attach">2</property>
                         <property name="top_attach">2</property>
                         <property name="bottom_attach">3</property>
-                        <property name="y_options"></property>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkLabel" id="label262">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="xalign">0</property>
                         <property name="label" translatable="yes">_Jabber ID:</property>
                         <property name="use_underline">True</property>
@@ -211,30 +248,20 @@ to the Jabber network.</property>
                       </object>
                       <packing>
                         <property name="x_options">GTK_FILL</property>
-                        <property name="y_options"></property>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkLabel" id="label1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="xalign">0</property>
                         <property name="label">@</property>
                       </object>
                       <packing>
                         <property name="left_attach">2</property>
                         <property name="right_attach">3</property>
-                        <property name="x_options"></property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkComboBoxEntry" id="server_comboboxentry">
-                        <property name="visible">True</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">3</property>
-                        <property name="right_attach">4</property>
-                        <property name="x_options">GTK_FILL</property>
-                        <property name="y_options">GTK_FILL</property>
+                        <property name="x_options"/>
                       </packing>
                     </child>
                     <child>
@@ -244,8 +271,9 @@ to the Jabber network.</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
                         <property name="use_underline">True</property>
+                        <property name="xalign">0</property>
                         <property name="draw_indicator">True</property>
-                        <signal name="toggled" handler="on_anonymous_checkbutton1_toggled"/>
+                        <signal name="toggled" handler="on_anonymous_checkbutton1_toggled" swapped="no"/>
                       </object>
                       <packing>
                         <property name="left_attach">1</property>
@@ -260,6 +288,7 @@ to the Jabber network.</property>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
@@ -271,6 +300,7 @@ to the Jabber network.</property>
             <child type="tab">
               <object class="GtkLabel" id="label261">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
               </object>
               <packing>
                 <property name="position">1</property>
@@ -280,12 +310,13 @@ to the Jabber network.</property>
             <child>
               <object class="GtkVBox" id="vbox105">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="border_width">6</property>
-                <property name="orientation">vertical</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkLabel" id="label368">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">&lt;b&gt;Please select a server&lt;/b&gt;</property>
                     <property name="use_markup">True</property>
@@ -299,10 +330,12 @@ to the Jabber network.</property>
                 <child>
                   <object class="GtkHBox" id="hbox2997">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="spacing">6</property>
                     <child>
                       <object class="GtkLabel" id="label369">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="xalign">0</property>
                         <property name="label" translatable="yes">_Server:</property>
                         <property name="use_underline">True</property>
@@ -313,14 +346,6 @@ to the Jabber network.</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
-                    <child>
-                      <object class="GtkComboBoxEntry" id="server_comboboxentry1">
-                        <property name="visible">True</property>
-                      </object>
-                      <packing>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -335,10 +360,12 @@ to the Jabber network.</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">False</property>
                     <property name="use_underline">True</property>
+                    <property name="xalign">0</property>
                     <property name="draw_indicator">True</property>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">2</property>
                   </packing>
                 </child>
@@ -349,6 +376,7 @@ to the Jabber network.</property>
                     <child>
                       <object class="GtkTable" id="table32">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="border_width">5</property>
                         <property name="n_rows">3</property>
                         <property name="n_columns">3</property>
@@ -357,18 +385,20 @@ to the Jabber network.</property>
                         <child>
                           <object class="GtkLabel" id="label381">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="label" translatable="yes">Prox_y:</property>
                             <property name="use_underline">True</property>
                           </object>
                           <packing>
                             <property name="x_options">GTK_FILL</property>
-                            <property name="y_options"></property>
+                            <property name="y_options"/>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkComboBox" id="proxies_combobox">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="model">liststore1</property>
                             <child>
                               <object class="GtkCellRendererText" id="cellrenderertext1"/>
@@ -390,13 +420,13 @@ to the Jabber network.</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
                             <property name="use_underline">True</property>
-                            <signal name="clicked" handler="on_manage_proxies_button_clicked"/>
+                            <signal name="clicked" handler="on_manage_proxies_button_clicked" swapped="no"/>
                           </object>
                           <packing>
                             <property name="left_attach">2</property>
                             <property name="right_attach">3</property>
-                            <property name="x_options"></property>
-                            <property name="y_options"></property>
+                            <property name="x_options"/>
+                            <property name="y_options"/>
                           </packing>
                         </child>
                         <child>
@@ -406,24 +436,27 @@ to the Jabber network.</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
                             <property name="use_underline">True</property>
+                            <property name="xalign">0</property>
                             <property name="draw_indicator">True</property>
-                            <signal name="toggled" handler="on_custom_host_port_checkbutton_toggled"/>
+                            <signal name="toggled" handler="on_custom_host_port_checkbutton_toggled" swapped="no"/>
                           </object>
                           <packing>
                             <property name="right_attach">3</property>
                             <property name="top_attach">1</property>
                             <property name="bottom_attach">2</property>
-                            <property name="y_options"></property>
+                            <property name="y_options"/>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkHBox" id="custom_host_hbox">
                             <property name="visible">True</property>
                             <property name="sensitive">False</property>
+                            <property name="can_focus">False</property>
                             <property name="spacing">6</property>
                             <child>
                               <object class="GtkLabel" id="label380">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">_Hostname:</property>
                                 <property name="use_underline">True</property>
@@ -441,12 +474,15 @@ to the Jabber network.</property>
                                 <property name="can_focus">True</property>
                               </object>
                               <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
                                 <property name="position">1</property>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkLabel" id="label379">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">_Port:</property>
                                 <property name="use_underline">True</property>
@@ -467,6 +503,7 @@ to the Jabber network.</property>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
+                                <property name="fill">True</property>
                                 <property name="position">3</property>
                               </packing>
                             </child>
@@ -484,12 +521,15 @@ to the Jabber network.</property>
                     <child type="label">
                       <object class="GtkLabel" id="label378">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Advanced</property>
                         <property name="use_underline">True</property>
                       </object>
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">3</property>
                   </packing>
                 </child>
@@ -501,6 +541,7 @@ to the Jabber network.</property>
             <child type="tab">
               <object class="GtkLabel" id="label367">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
               </object>
               <packing>
                 <property name="position">2</property>
@@ -510,34 +551,41 @@ to the Jabber network.</property>
             <child>
               <object class="GtkVBox" id="ssl_vbox">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <child>
                   <object class="GtkHBox" id="hbox1">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <child>
                       <object class="GtkImage" id="image1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="stock">gtk-dialog-warning</property>
                         <property name="icon-size">5</property>
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkLabel" id="ssl_label">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                       </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
                     <property name="fill">False</property>
                     <property name="position">0</property>
                   </packing>
@@ -551,9 +599,11 @@ SHA1 fingerprint of the certificate:
                     <property name="can_focus">True</property>
                     <property name="receives_default">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="xalign">0</property>
                     <property name="draw_indicator">True</property>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
                     <property name="fill">False</property>
                     <property name="position">1</property>
                   </packing>
@@ -566,6 +616,7 @@ SHA1 fingerprint of the certificate:
             <child type="tab">
               <object class="GtkLabel" id="label482">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
               </object>
               <packing>
                 <property name="position">3</property>
@@ -575,7 +626,7 @@ SHA1 fingerprint of the certificate:
             <child>
               <object class="GtkVBox" id="form_vbox">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <child>
                   <placeholder/>
                 </child>
@@ -587,6 +638,7 @@ SHA1 fingerprint of the certificate:
             <child type="tab">
               <object class="GtkLabel" id="label382">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
               </object>
               <packing>
                 <property name="position">4</property>
@@ -596,10 +648,11 @@ SHA1 fingerprint of the certificate:
             <child>
               <object class="GtkVBox" id="vbox104">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <child>
                   <object class="GtkLabel" id="progressbar_label">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label" translatable="yes">&lt;b&gt;Connecting to server&lt;/b&gt;
 
 Please wait...</property>
@@ -607,6 +660,7 @@ Please wait...</property>
                     <property name="justify">center</property>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
                     <property name="fill">False</property>
                     <property name="position">0</property>
                   </packing>
@@ -614,6 +668,7 @@ Please wait...</property>
                 <child>
                   <object class="GtkProgressBar" id="progressbar">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="pulse_step">0.10000000149</property>
                   </object>
                   <packing>
@@ -630,6 +685,7 @@ Please wait...</property>
             <child type="tab">
               <object class="GtkLabel" id="label365">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
               </object>
               <packing>
                 <property name="position">5</property>
@@ -639,14 +695,16 @@ Please wait...</property>
             <child>
               <object class="GtkVBox" id="vbox103">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <child>
                   <object class="GtkHBox" id="hbox2986">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="spacing">12</property>
                     <child>
                       <object class="GtkImage" id="finish_image">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="stock">gtk-missing-image</property>
                       </object>
                       <packing>
@@ -658,16 +716,21 @@ Please wait...</property>
                     <child>
                       <object class="GtkLabel" id="finish_label">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="xalign">0.10000000149011612</property>
                         <property name="use_markup">True</property>
                         <property name="wrap">True</property>
                       </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
@@ -678,6 +741,7 @@ Please wait...</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">False</property>
                     <property name="use_underline">True</property>
+                    <property name="xalign">0</property>
                     <property name="active">True</property>
                     <property name="draw_indicator">True</property>
                   </object>
@@ -694,6 +758,7 @@ Please wait...</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">False</property>
                     <property name="use_underline">True</property>
+                    <property name="xalign">0</property>
                     <property name="active">True</property>
                     <property name="draw_indicator">True</property>
                   </object>
@@ -711,6 +776,7 @@ Please wait...</property>
             <child type="tab">
               <object class="GtkLabel" id="label286">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
               </object>
               <packing>
                 <property name="position">6</property>
@@ -719,12 +785,15 @@ Please wait...</property>
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">0</property>
           </packing>
         </child>
         <child>
           <object class="GtkHButtonBox" id="hbuttonbox19">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="spacing">12</property>
             <property name="layout_style">end</property>
             <child>
@@ -735,7 +804,7 @@ Please wait...</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_cancel_button_clicked"/>
+                <signal name="clicked" handler="on_cancel_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -752,7 +821,7 @@ Please wait...</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_back_button_clicked"/>
+                <signal name="clicked" handler="on_back_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -769,7 +838,7 @@ Please wait...</property>
                 <property name="has_default">True</property>
                 <property name="receives_default">False</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_forward_button_clicked"/>
+                <signal name="clicked" handler="on_forward_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -779,47 +848,14 @@ Please wait...</property>
             </child>
             <child>
               <object class="GtkButton" id="advanced_button">
+                <property name="label" translatable="yes">_Advanced</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
                 <property name="no_show_all">True</property>
-                <signal name="clicked" handler="on_advanced_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment96">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox2996">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image1265">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-preferences</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label364">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">_Advanced</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
+                <property name="image">image2</property>
+                <property name="use_underline">True</property>
+                <signal name="clicked" handler="on_advanced_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -829,47 +865,14 @@ Please wait...</property>
             </child>
             <child>
               <object class="GtkButton" id="finish_button">
+                <property name="label" translatable="yes">_Finish</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
                 <property name="no_show_all">True</property>
-                <signal name="clicked" handler="on_finish_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment87">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox2989">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image1112">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-apply</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label352">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">_Finish</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
+                <property name="image">image3</property>
+                <property name="use_underline">True</property>
+                <signal name="clicked" handler="on_finish_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -880,21 +883,25 @@ Please wait...</property>
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
       </object>
     </child>
   </object>
-  <object class="GtkListStore" id="liststore1">
+  <object class="GtkListStore" id="server_liststore">
     <columns>
-      <!-- column-name item -->
+      <!-- column-name gchararray1 -->
       <column type="gchararray"/>
     </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes">None</col>
-      </row>
-    </data>
+  </object>
+  <object class="GtkEntryCompletion" id="server_entrycompletion">
+    <property name="model">server_liststore</property>
+    <property name="text_column">0</property>
+  </object>
+  <object class="GtkEntryCompletion" id="server_entrycompletion1">
+    <property name="model">server_liststore</property>
+    <property name="text_column">0</property>
   </object>
 </interface>
diff --git a/data/gui/accounts_window.ui b/data/gui/accounts_window.ui
index 1d37004b2fb43ddc4c0840ff8ad945d3b2e64354..ff23dadd5ea936fd84ab8ae8fed2d135fd9e7606 100644
--- a/data/gui/accounts_window.ui
+++ b/data/gui/accounts_window.ui
@@ -63,42 +63,14 @@
                 </child>
                 <child>
                   <object class="GtkButton" id="add_button">
+                    <property name="label" translatable="yes">Add</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="image">image1</property>
+                    <property name="use_underline">True</property>
                     <signal name="clicked" handler="on_add_button_clicked"/>
-                    <child>
-                      <object class="GtkAlignment" id="alignment5">
-                        <property name="visible">True</property>
-                        <property name="xscale">0</property>
-                        <property name="yscale">0</property>
-                        <child>
-                          <object class="GtkHBox" id="hbox4">
-                            <property name="visible">True</property>
-                            <property name="spacing">2</property>
-                            <child>
-                              <object class="GtkImage" id="image1">
-                                <property name="visible">True</property>
-                                <property name="stock">gtk-add</property>
-                              </object>
-                              <packing>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="label29">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">Add</property>
-                              </object>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -107,42 +79,14 @@
                 </child>
                 <child>
                   <object class="GtkButton" id="remove_button">
+                    <property name="label" translatable="yes">Delete</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="image">image2</property>
+                    <property name="use_underline">True</property>
                     <signal name="clicked" handler="on_remove_button_clicked"/>
-                    <child>
-                      <object class="GtkAlignment" id="alignment7">
-                        <property name="visible">True</property>
-                        <property name="xscale">0</property>
-                        <property name="yscale">0</property>
-                        <child>
-                          <object class="GtkHBox" id="hbox7">
-                            <property name="visible">True</property>
-                            <property name="spacing">2</property>
-                            <child>
-                              <object class="GtkImage" id="image2">
-                                <property name="visible">True</property>
-                                <property name="stock">gtk-remove</property>
-                              </object>
-                              <packing>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="label26">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">Delete</property>
-                              </object>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -151,46 +95,14 @@
                 </child>
                 <child>
                   <object class="GtkButton" id="rename_button">
+                    <property name="label" translatable="yes">Re_name</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="image">rename_image</property>
+                    <property name="use_underline">True</property>
                     <signal name="clicked" handler="on_rename_button_clicked"/>
-                    <child>
-                      <object class="GtkAlignment" id="alignment6">
-                        <property name="visible">True</property>
-                        <property name="xscale">0</property>
-                        <property name="yscale">0</property>
-                        <child>
-                          <object class="GtkHBox" id="hbox8">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="spacing">2</property>
-                            <child>
-                              <object class="GtkImage" id="rename_image">
-                                <property name="visible">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="stock">gtk-missing-image</property>
-                              </object>
-                              <packing>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="label25">
-                                <property name="visible">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="label" translatable="yes">Re_name</property>
-                                <property name="use_underline">True</property>
-                              </object>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -225,7 +137,7 @@
                     <property name="orientation">vertical</property>
                     <child>
                       <object class="GtkCheckButton" id="enable_checkbutton1">
-                        <property name="label" translatable="yes">_Enable</property>
+                        <property name="label" translatable="yes">Active</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
@@ -520,6 +432,7 @@
                                             <property name="visible">True</property>
                                             <property name="can_focus">True</property>
                                             <property name="invisible_char">&#x25CF;</property>
+                                            <signal name="focus_out_event" handler="on_cert_entry1_focus_out_event"/>
                                           </object>
                                           <packing>
                                             <property name="position">1</property>
@@ -531,6 +444,7 @@
                                             <property name="visible">True</property>
                                             <property name="can_focus">True</property>
                                             <property name="receives_default">True</property>
+                                            <property name="use_underline">True</property>
                                             <signal name="clicked" handler="on_browse_for_client_cert_button_clicked"/>
                                           </object>
                                           <packing>
@@ -1120,7 +1034,7 @@
                     <property name="orientation">vertical</property>
                     <child>
                       <object class="GtkCheckButton" id="enable_zeroconf_checkbutton2">
-                        <property name="label" translatable="yes">_Enable</property>
+                        <property name="label" translatable="yes">Active</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
@@ -1552,4 +1466,16 @@ You might consider to change possible firewall settings.</property>
     <property name="step_increment">1</property>
     <property name="page_increment">5</property>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-add</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="stock">gtk-remove</property>
+  </object>
+  <object class="GtkImage" id="rename_image">
+    <property name="visible">True</property>
+    <property name="stock">gtk-missing-image</property>
+  </object>
 </interface>
diff --git a/data/gui/add_new_contact_window.ui b/data/gui/add_new_contact_window.ui
index e9f713f1e8803e76a53273a0718aaccd53ce6067..cee67a0bbfeb45033b1355cbbac16cbbbaf2a4e6 100644
--- a/data/gui/add_new_contact_window.ui
+++ b/data/gui/add_new_contact_window.ui
@@ -1,22 +1,23 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkWindow" id="add_new_contact_window">
+    <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes">Add New Contact</property>
     <property name="resizable">False</property>
     <property name="type_hint">dialog</property>
-    <signal name="destroy" handler="on_add_new_contact_window_destroy"/>
-    <signal name="key_press_event" handler="on_add_new_contact_window_key_press_event"/>
+    <signal name="destroy" handler="on_add_new_contact_window_destroy" swapped="no"/>
+    <signal name="key-press-event" handler="on_add_new_contact_window_key_press_event" swapped="no"/>
     <child>
       <object class="GtkVBox" id="vbox8">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <property name="spacing">6</property>
         <child>
           <object class="GtkLabel" id="prompt_label">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -27,10 +28,12 @@
         <child>
           <object class="GtkHBox" id="account_hbox">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="spacing">6</property>
             <child>
               <object class="GtkLabel" id="account_label">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">A_ccount:</property>
                 <property name="use_underline">True</property>
@@ -44,8 +47,9 @@
             <child>
               <object class="GtkComboBox" id="account_combobox">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="model">liststore3</property>
-                <signal name="changed" handler="on_account_combobox_changed"/>
+                <signal name="changed" handler="on_account_combobox_changed" swapped="no"/>
                 <child>
                   <object class="GtkCellRendererText" id="cellrenderertext3"/>
                   <attributes>
@@ -64,16 +68,20 @@
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkHBox" id="protocol_hbox">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="spacing">6</property>
             <child>
               <object class="GtkLabel" id="protocol_label">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">_Protocol:</property>
                 <property name="use_underline">True</property>
@@ -88,7 +96,8 @@
             <child>
               <object class="GtkComboBox" id="protocol_combobox">
                 <property name="visible">True</property>
-                <signal name="changed" handler="on_protocol_combobox_changed"/>
+                <property name="can_focus">False</property>
+                <signal name="changed" handler="on_protocol_combobox_changed" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -99,9 +108,10 @@
             <child>
               <object class="GtkComboBox" id="protocol_jid_combobox">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="no_show_all">True</property>
                 <property name="model">liststore2</property>
-                <signal name="changed" handler="on_protocol_jid_combobox_changed"/>
+                <signal name="changed" handler="on_protocol_jid_combobox_changed" swapped="no"/>
                 <child>
                   <object class="GtkCellRendererText" id="cellrenderertext2"/>
                   <attributes>
@@ -110,17 +120,22 @@
                 </child>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">2</property>
               </packing>
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">2</property>
           </packing>
         </child>
         <child>
           <object class="GtkTable" id="subscription_table">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="no_show_all">True</property>
             <property name="border_width">6</property>
             <property name="n_rows">3</property>
@@ -130,6 +145,7 @@
             <child>
               <object class="GtkLabel" id="uid_label">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">_User ID:</property>
                 <property name="use_underline">True</property>
@@ -137,7 +153,7 @@
               </object>
               <packing>
                 <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
@@ -145,16 +161,18 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="activates_default">True</property>
+                <property name="placeholder_text">Type User ID</property>
               </object>
               <packing>
                 <property name="left_attach">1</property>
                 <property name="right_attach">2</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label188">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">_Nickname:</property>
                 <property name="use_underline">True</property>
@@ -164,7 +182,7 @@
                 <property name="top_attach">1</property>
                 <property name="bottom_attach">2</property>
                 <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
@@ -172,18 +190,20 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="activates_default">True</property>
+                <property name="placeholder_text">Type Nickname</property>
               </object>
               <packing>
                 <property name="left_attach">1</property>
                 <property name="right_attach">2</property>
                 <property name="top_attach">1</property>
                 <property name="bottom_attach">2</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label223">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">_Group:</property>
                 <property name="use_underline">True</property>
@@ -192,37 +212,48 @@
                 <property name="top_attach">2</property>
                 <property name="bottom_attach">3</property>
                 <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
-              <object class="GtkComboBoxEntry" id="group_comboboxentry">
+              <object class="GtkComboBoxText" id="group_comboboxentry">
                 <property name="visible">True</property>
-                <property name="model">groups_liststore</property>
-                <property name="text_column">0</property>
+                <property name="can_focus">False</property>
+                <property name="has_entry">True</property>
+                <property name="entry_text_column">0</property>
+                <property name="id_column">1</property>
+                <child internal-child="entry">
+                  <object class="GtkEntry" id="comboboxtext-entry">
+                    <property name="can_focus">True</property>
+                    <property name="placeholder_text">Choose a group of type a new group</property>
+                  </object>
+                </child>
               </object>
               <packing>
                 <property name="left_attach">1</property>
                 <property name="right_attach">2</property>
                 <property name="top_attach">2</property>
                 <property name="bottom_attach">3</property>
-                <property name="x_options">GTK_FILL</property>
               </packing>
             </child>
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">3</property>
           </packing>
         </child>
         <child>
           <object class="GtkCheckButton" id="auto_authorize_checkbutton">
             <property name="label" translatable="yes">A_llow this contact to view my status</property>
+            <property name="use_action_appearance">False</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">False</property>
             <property name="no_show_all">True</property>
+            <property name="use_action_appearance">False</property>
             <property name="use_underline">True</property>
+            <property name="xalign">0</property>
             <property name="active">True</property>
             <property name="draw_indicator">True</property>
           </object>
@@ -238,9 +269,8 @@
             <property name="can_focus">True</property>
             <property name="no_show_all">True</property>
             <property name="border_width">6</property>
-            <property name="hscrollbar_policy">automatic</property>
-            <property name="vscrollbar_policy">automatic</property>
             <property name="shadow_type">etched-in</property>
+            <property name="min_content_height">5</property>
             <child>
               <object class="GtkTextView" id="message_textview">
                 <property name="visible">True</property>
@@ -251,30 +281,39 @@
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">5</property>
           </packing>
         </child>
         <child>
           <object class="GtkCheckButton" id="save_message_checkbutton">
             <property name="label" translatable="yes">_Save subscription message</property>
+            <property name="use_action_appearance">False</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">False</property>
+            <property name="use_action_appearance">False</property>
             <property name="use_underline">True</property>
+            <property name="xalign">0</property>
             <property name="draw_indicator">True</property>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">6</property>
           </packing>
         </child>
         <child>
           <object class="GtkHBox" id="register_hbox">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="no_show_all">True</property>
             <property name="spacing">6</property>
             <child>
               <object class="GtkLabel" id="label224">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">You have to register with this transport
 to be able to add a contact from this
@@ -283,18 +322,22 @@ proceed.</property>
                 <property name="wrap">True</property>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
             <child>
               <object class="GtkButton" id="register_button">
                 <property name="label" translatable="yes">_Register</property>
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="use_underline">True</property>
-                <signal name="clicked" handler="on_register_button_clicked"/>
+                <signal name="clicked" handler="on_register_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -304,12 +347,15 @@ proceed.</property>
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">7</property>
           </packing>
         </child>
         <child>
           <object class="GtkLabel" id="connected_label">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="no_show_all">True</property>
             <property name="label" translatable="yes">You must be connected to the transport to be able
 to add a contact from this protocol.</property>
@@ -323,18 +369,21 @@ to add a contact from this protocol.</property>
         <child>
           <object class="GtkHButtonBox" id="hbuttonbox1">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="border_width">5</property>
             <property name="spacing">12</property>
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="cancel_button">
                 <property name="label">gtk-cancel</property>
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_cancel_button_clicked"/>
+                <signal name="clicked" handler="on_cancel_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -345,13 +394,15 @@ to add a contact from this protocol.</property>
             <child>
               <object class="GtkButton" id="add_button">
                 <property name="label">gtk-add</property>
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="has_default">True</property>
                 <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_add_button_clicked"/>
+                <signal name="clicked" handler="on_add_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -369,9 +420,6 @@ to add a contact from this protocol.</property>
       </object>
     </child>
   </object>
-  <object class="GtkTextBuffer" id="textbuffer1">
-    <property name="text" translatable="yes">I would like to add you to my contact list.</property>
-  </object>
   <object class="GtkListStore" id="groups_liststore">
     <columns>
       <!-- column-name item -->
@@ -390,4 +438,7 @@ to add a contact from this protocol.</property>
       <column type="gchararray"/>
     </columns>
   </object>
+  <object class="GtkTextBuffer" id="textbuffer1">
+    <property name="text" translatable="yes">I would like to add you to my contact list.</property>
+  </object>
 </interface>
diff --git a/data/gui/advanced_configuration_window.ui b/data/gui/advanced_configuration_window.ui
index 52df66599d40ac2a0eaa0b25b1cfa313c001391b..72c058b157fa69ae1cba45c71a831bd677663a4c 100644
--- a/data/gui/advanced_configuration_window.ui
+++ b/data/gui/advanced_configuration_window.ui
@@ -5,6 +5,7 @@
     <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes">Advanced Configuration Editor</property>
+    <property name="window_position">center-on-parent</property>
     <property name="role">ace</property>
     <property name="default_width">650</property>
     <property name="default_height">540</property>
diff --git a/data/gui/blocked_contacts_window.ui b/data/gui/blocked_contacts_window.ui
index 2f9f371273b065b0570e34af6f0b582c9c1af9e0..5f84a9b7c230ce34b82981b4689d71fe5d2b219c 100644
--- a/data/gui/blocked_contacts_window.ui
+++ b/data/gui/blocked_contacts_window.ui
@@ -38,47 +38,14 @@
         </child>
         <child>
           <object class="GtkButton" id="remove_button">
+            <property name="label" translatable="yes">_Unblock</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">False</property>
             <property name="border_width">3</property>
+            <property name="image">image1</property>
+            <property name="use_underline">True</property>
             <signal name="clicked" handler="on_remove_button_clicked"/>
-            <child>
-              <object class="GtkAlignment" id="alignment1">
-                <property name="visible">True</property>
-                <property name="xscale">0</property>
-                <property name="yscale">0</property>
-                <child>
-                  <object class="GtkHBox" id="hbox1">
-                    <property name="visible">True</property>
-                    <property name="spacing">2</property>
-                    <child>
-                      <object class="GtkImage" id="image1">
-                        <property name="visible">True</property>
-                        <property name="stock">gtk-remove</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label1">
-                        <property name="visible">True</property>
-                        <property name="label" translatable="yes">_Unblock</property>
-                        <property name="use_underline">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                  </object>
-                </child>
-              </object>
-            </child>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -89,4 +56,8 @@
       </object>
     </child>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-remove</property>
+  </object>
 </interface>
diff --git a/data/gui/change_status_message_dialog.ui b/data/gui/change_status_message_dialog.ui
index c7c350cdfba2b205c92575c815fa4cafb3d6a71b..e4aa969706695e0b42eddd9bc0af72b3fedc52c8 100644
--- a/data/gui/change_status_message_dialog.ui
+++ b/data/gui/change_status_message_dialog.ui
@@ -1,39 +1,88 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkDialog" id="change_status_message_dialog">
+    <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="default_width">270</property>
-    <property name="default_height">175</property>
+    <property name="default_height">330</property>
     <property name="type_hint">dialog</property>
-    <signal name="key_press_event" handler="on_change_status_message_dialog_key_press_event"/>
+    <signal name="key-press-event" handler="on_change_status_message_dialog_key_press_event" swapped="no"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox5">
+      <object class="GtkBox" id="dialog-vbox5">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="cancel_button">
+                <property name="label">gtk-cancel</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="ok_button">
+                <property name="label">gtk-ok</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkFrame" id="frame38">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="label_xalign">0</property>
             <property name="shadow_type">none</property>
             <child>
               <object class="GtkAlignment" id="alignment107">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="left_padding">12</property>
                 <child>
                   <object class="GtkVBox" id="vbox112">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="border_width">6</property>
-                    <property name="orientation">vertical</property>
                     <property name="spacing">6</property>
                     <child>
                       <object class="GtkScrolledWindow" id="scrolledwindow24">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="hscrollbar_policy">automatic</property>
-                        <property name="vscrollbar_policy">automatic</property>
                         <property name="shadow_type">in</property>
                         <child>
                           <object class="GtkTextView" id="message_textview">
@@ -45,33 +94,41 @@
                         </child>
                       </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkHButtonBox" id="hbuttonbox33">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="layout_style">end</property>
                         <child>
                           <object class="GtkButton" id="save_as_preset_button">
+                            <property name="use_action_appearance">False</property>
                             <property name="visible">True</property>
                             <property name="sensitive">False</property>
                             <property name="can_focus">True</property>
                             <property name="can_default">True</property>
                             <property name="receives_default">False</property>
-                            <signal name="clicked" handler="on_save_as_preset_button_clicked"/>
+                            <property name="use_action_appearance">False</property>
+                            <signal name="clicked" handler="on_save_as_preset_button_clicked" swapped="no"/>
                             <child>
                               <object class="GtkAlignment" id="alignment106">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xscale">0</property>
                                 <property name="yscale">0</property>
                                 <child>
                                   <object class="GtkHBox" id="hbox3021">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="spacing">2</property>
                                     <child>
                                       <object class="GtkImage" id="image1369">
                                         <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
                                         <property name="stock">gtk-save-as</property>
                                       </object>
                                       <packing>
@@ -83,6 +140,7 @@
                                     <child>
                                       <object class="GtkLabel" id="label380">
                                         <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
                                         <property name="label" translatable="yes">Save as Preset...</property>
                                         <property name="use_underline">True</property>
                                       </object>
@@ -106,44 +164,53 @@
                       </object>
                       <packing>
                         <property name="expand">False</property>
-                        <property name="fill">False</property>
+                        <property name="fill">True</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkTable" id="under_table">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="n_rows">3</property>
                         <property name="n_columns">2</property>
                         <property name="column_spacing">6</property>
                         <property name="row_spacing">6</property>
                         <child>
                           <object class="GtkButton" id="mood_button">
+                            <property name="use_action_appearance">False</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">True</property>
-                            <signal name="clicked" handler="on_mood_button_clicked"/>
+                            <property name="use_action_appearance">False</property>
+                            <signal name="clicked" handler="on_mood_button_clicked" swapped="no"/>
                             <child>
                               <object class="GtkHBox" id="hbox2">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="spacing">6</property>
                                 <child>
                                   <object class="GtkImage" id="mood_image">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="stock">gtk-missing-image</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="position">0</property>
                                   </packing>
                                 </child>
                                 <child>
                                   <object class="GtkLabel" id="mood_button_label">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="xalign">0</property>
                                     <property name="wrap">True</property>
                                   </object>
                                   <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
@@ -155,35 +222,44 @@
                             <property name="right_attach">2</property>
                             <property name="top_attach">2</property>
                             <property name="bottom_attach">3</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkButton" id="activity_button">
+                            <property name="use_action_appearance">False</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">True</property>
-                            <signal name="clicked" handler="on_activity_button_clicked"/>
+                            <property name="use_action_appearance">False</property>
+                            <signal name="clicked" handler="on_activity_button_clicked" swapped="no"/>
                             <child>
                               <object class="GtkHBox" id="hbox1">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="spacing">6</property>
                                 <child>
                                   <object class="GtkImage" id="activity_image">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="stock">gtk-missing-image</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="position">0</property>
                                   </packing>
                                 </child>
                                 <child>
                                   <object class="GtkLabel" id="activity_button_label">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="xalign">0</property>
                                     <property name="wrap">True</property>
                                   </object>
                                   <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
@@ -195,11 +271,13 @@
                             <property name="right_attach">2</property>
                             <property name="top_attach">1</property>
                             <property name="bottom_attach">2</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkLabel" id="mood_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="label" translatable="yes">Mood:</property>
                           </object>
@@ -207,11 +285,13 @@
                             <property name="top_attach">2</property>
                             <property name="bottom_attach">3</property>
                             <property name="x_options">GTK_FILL</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkLabel" id="activity_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="label" translatable="yes">Activity:</property>
                           </object>
@@ -219,31 +299,37 @@
                             <property name="top_attach">1</property>
                             <property name="bottom_attach">2</property>
                             <property name="x_options">GTK_FILL</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkComboBox" id="message_combobox">
                             <property name="visible">True</property>
-                            <signal name="changed" handler="on_message_combobox_changed"/>
+                            <property name="can_focus">False</property>
+                            <signal name="changed" handler="on_message_combobox_changed" swapped="no"/>
                           </object>
                           <packing>
                             <property name="left_attach">1</property>
                             <property name="right_attach">2</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkLabel" id="label165">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="label" translatable="yes">Preset messages:</property>
                           </object>
                           <packing>
                             <property name="x_options">GTK_FILL</property>
+                            <property name="y_options">GTK_FILL</property>
                           </packing>
                         </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">2</property>
                       </packing>
                     </child>
@@ -254,63 +340,19 @@
             <child type="label">
               <object class="GtkLabel" id="label383">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">&lt;b&gt;Type your new status message&lt;/b&gt;</property>
                 <property name="use_markup">True</property>
               </object>
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">2</property>
           </packing>
         </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="cancel_button">
-                <property name="label">gtk-cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="ok_button">
-                <property name="label">gtk-ok</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="has_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
       </object>
     </child>
-    <action-widgets>
-      <action-widget response="-6">cancel_button</action-widget>
-      <action-widget response="-5">ok_button</action-widget>
-    </action-widgets>
   </object>
 </interface>
diff --git a/data/gui/chat_control.ui b/data/gui/chat_control.ui
index d4ac9498024e62769c312036c540fc74589fa9cf..b9eae0f67e78cd5f6dc040e28399bb401f3b191e 100644
--- a/data/gui/chat_control.ui
+++ b/data/gui/chat_control.ui
@@ -1,7 +1,18 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy project-wide -->
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkAdjustment" id="adjustment1">
+    <property name="upper">110</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+    <property name="page_size">10</property>
+  </object>
+  <object class="GtkAdjustment" id="adjustment2">
+    <property name="upper">110</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+    <property name="page_size">10</property>
+  </object>
   <object class="GtkHBox" id="chat_control_hbox">
     <property name="can_focus">True</property>
     <property name="spacing">1</property>
@@ -9,159 +20,119 @@
       <object class="GtkVBox" id="chat_control_vbox">
         <property name="can_focus">True</property>
         <property name="border_width">3</property>
-        <property name="orientation">vertical</property>
         <property name="spacing">1</property>
         <child>
-          <object class="GtkHPaned" id="hpaned1">
+          <object class="GtkVBox" id="vbox2">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
+            <property name="can_focus">False</property>
             <child>
-              <object class="GtkVBox" id="vbox2">
+              <object class="GtkAlignment" id="alignment">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
+                <property name="left_padding">3</property>
+                <property name="right_padding">3</property>
                 <child>
-                  <object class="GtkAlignment" id="alignment">
+                  <object class="GtkEventBox" id="banner_eventbox">
                     <property name="visible">True</property>
-                    <property name="left_padding">3</property>
-                    <property name="right_padding">3</property>
+                    <property name="can_focus">False</property>
                     <child>
-                      <object class="GtkEventBox" id="banner_eventbox">
+                      <object class="GtkHBox" id="hbox3004">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <child>
-                          <object class="GtkHBox" id="hbox3004">
+                          <object class="GtkImage" id="banner_status_image">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="ypad">5</property>
+                            <property name="stock">gtk-missing-image</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="padding">5</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkVBox" id="banner_vbox">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="border_width">5</property>
+                            <child>
+                              <object class="GtkLabel" id="banner_name_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label">&lt;span weight="heavy" size="large"&gt;Contact name&lt;/span&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
                             <child>
-                              <object class="GtkImage" id="banner_status_image">
+                              <object class="GtkLabel" id="banner_label">
                                 <property name="visible">True</property>
-                                <property name="ypad">5</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label">label</property>
+                                <property name="use_markup">True</property>
+                                <property name="selectable">True</property>
+                                <signal name="populate-popup" handler="on_banner_label_populate_popup" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkHBox" id="hbox2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">4</property>
+                            <child>
+                              <object class="GtkImage" id="mood_image">
+                                <property name="can_focus">False</property>
+                                <property name="no_show_all">True</property>
                                 <property name="stock">gtk-missing-image</property>
+                                <property name="icon-size">1</property>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
                                 <property name="fill">False</property>
-                                <property name="padding">5</property>
                                 <property name="position">0</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkVBox" id="banner_vbox">
-                                <property name="visible">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="border_width">5</property>
-                                <property name="orientation">vertical</property>
-                                <child>
-                                  <object class="GtkLabel" id="banner_name_label">
-                                    <property name="visible">True</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label">&lt;span weight="heavy" size="large"&gt;Contact name&lt;/span&gt;</property>
-                                    <property name="use_markup">True</property>
-                                  </object>
-                                  <packing>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkLabel" id="banner_label">
-                                    <property name="visible">True</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label">label</property>
-                                    <property name="use_markup">True</property>
-                                    <property name="selectable">True</property>
-                                    <signal name="populate_popup" handler="on_banner_label_populate_popup"/>
-                                  </object>
-                                  <packing>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
+                              <object class="GtkImage" id="activity_image">
+                                <property name="can_focus">False</property>
+                                <property name="no_show_all">True</property>
+                                <property name="stock">gtk-missing-image</property>
+                                <property name="icon-size">1</property>
                               </object>
                               <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
                                 <property name="position">1</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox2">
-                                <property name="visible">True</property>
-                                <property name="spacing">4</property>
-                                <child>
-                                  <object class="GtkImage" id="mood_image">
-                                    <property name="no_show_all">True</property>
-                                    <property name="stock">None</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                  <packing>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkImage" id="activity_image">
-                                    <property name="no_show_all">True</property>
-                                    <property name="stock">None</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                  <packing>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkImage" id="tune_image">
-                                    <property name="no_show_all">True</property>
-                                    <property name="stock">None</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                  <packing>
-                                    <property name="position">2</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkEventBox" id="location_eventbox">
-                                    <property name="visible">True</property>
-                                    <property name="visible_window">False</property>
-                                    <child>
-                                      <object class="GtkImage" id="location_image">
-                                        <property name="no_show_all">True</property>
-                                        <property name="stock">None</property>
-                                        <property name="icon-size">1</property>
-                                      </object>
-                                    </child>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">3</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkImage" id="audio_banner_image">
-                                    <property name="visible">True</property>
-                                    <property name="stock">None</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                  <packing>
-                                    <property name="position">4</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkImage" id="video_banner_image">
-                                    <property name="visible">True</property>
-                                    <property name="stock">None</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                  <packing>
-                                    <property name="position">5</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkAlignment" id="alignment3">
-                                    <property name="width_request">11</property>
-                                    <property name="visible">True</property>
-                                    <child>
-                                      <placeholder/>
-                                    </child>
-                                  </object>
-                                  <packing>
-                                    <property name="position">6</property>
-                                  </packing>
-                                </child>
+                              <object class="GtkImage" id="tune_image">
+                                <property name="can_focus">False</property>
+                                <property name="no_show_all">True</property>
+                                <property name="stock">gtk-missing-image</property>
+                                <property name="icon-size">1</property>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -170,13 +141,16 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkEventBox" id="avatar_eventbox">
+                              <object class="GtkEventBox" id="location_eventbox">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="visible_window">False</property>
                                 <child>
-                                  <object class="GtkImage" id="avatar_image">
-                                    <property name="visible">True</property>
-                                    <property name="stock">None</property>
+                                  <object class="GtkImage" id="location_image">
+                                    <property name="can_focus">False</property>
+                                    <property name="no_show_all">True</property>
+                                    <property name="stock">gtk-missing-image</property>
+                                    <property name="icon-size">1</property>
                                   </object>
                                 </child>
                               </object>
@@ -186,572 +160,581 @@
                                 <property name="position">3</property>
                               </packing>
                             </child>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkVBox" id="vbox106">
-                    <property name="visible">True</property>
-                    <property name="orientation">vertical</property>
-                    <child>
-                      <object class="GtkScrolledWindow" id="conversation_scrolledwindow">
-                        <property name="height_request">60</property>
-                        <property name="can_focus">True</property>
-                        <property name="border_width">3</property>
-                        <property name="hscrollbar_policy">automatic</property>
-                        <property name="vscrollbar_policy">automatic</property>
-                        <property name="shadow_type">in</property>
-                        <child>
-                          <placeholder/>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkHBox" id="hbox">
-                        <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <child>
-                          <object class="GtkButton" id="authentication_button">
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="no_show_all">True</property>
-                            <property name="relief">none</property>
-                            <property name="focus_on_click">False</property>
                             <child>
-                              <object class="GtkImage" id="lock_image">
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="stock">gtk-dialog-authentication</property>
+                              <object class="GtkImage" id="audio_banner_image">
+                                <property name="can_focus">False</property>
+                                <property name="no_show_all">True</property>
+                                <property name="stock">gtk-missing-image</property>
                                 <property name="icon-size">1</property>
                               </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">4</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="video_banner_image">
+                                <property name="can_focus">False</property>
+                                <property name="no_show_all">True</property>
+                                <property name="stock">gtk-missing-image</property>
+                                <property name="icon-size">1</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">5</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkAlignment" id="alignment3">
+                                <property name="width_request">11</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">6</property>
+                              </packing>
                             </child>
                           </object>
                           <packing>
                             <property name="expand">False</property>
-                            <property name="position">0</property>
+                            <property name="fill">False</property>
+                            <property name="position">2</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkScrolledWindow" id="message_scrolledwindow">
+                          <object class="GtkEventBox" id="avatar_eventbox">
                             <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="border_width">3</property>
-                            <property name="hscrollbar_policy">never</property>
-                            <property name="vscrollbar_policy">never</property>
-                            <property name="shadow_type">in</property>
+                            <property name="can_focus">False</property>
+                            <property name="visible_window">False</property>
                             <child>
-                              <placeholder/>
+                              <object class="GtkImage" id="avatar_image">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="stock">gtk-missing-image</property>
+                              </object>
                             </child>
                           </object>
                           <packing>
-                            <property name="position">1</property>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">3</property>
                           </packing>
                         </child>
                       </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="position">1</property>
-                      </packing>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVBox" id="vbox106">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkScrolledWindow" id="conversation_scrolledwindow">
+                    <property name="height_request">60</property>
+                    <property name="can_focus">True</property>
+                    <property name="border_width">3</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <placeholder/>
                     </child>
                   </object>
                   <packing>
-                    <property name="position">1</property>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkHBox" id="actions_hbox">
+                  <object class="GtkHBox" id="hbox">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <child>
-                      <object class="GtkButton" id="emoticons_button">
-                        <property name="visible">True</property>
+                      <object class="GtkButton" id="authentication_button">
                         <property name="can_focus">True</property>
                         <property name="receives_default">True</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="tooltip_text" translatable="yes">Show a list of emoticons (Alt+M)</property>
+                        <property name="no_show_all">True</property>
                         <property name="relief">none</property>
                         <property name="focus_on_click">False</property>
                         <child>
-                          <object class="GtkImage" id="emoticons_button_image">
-                            <property name="visible">True</property>
+                          <object class="GtkImage" id="lock_image">
+                            <property name="can_focus">False</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="stock">gtk-missing-image</property>
+                            <property name="stock">gtk-dialog-authentication</property>
                             <property name="icon-size">1</property>
                           </object>
                         </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkButton" id="formattings_button">
+                      <object class="GtkScrolledWindow" id="message_scrolledwindow">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="relief">none</property>
-                        <property name="focus_on_click">False</property>
+                        <property name="border_width">3</property>
+                        <property name="hscrollbar_policy">never</property>
+                        <property name="vscrollbar_policy">never</property>
+                        <property name="shadow_type">in</property>
                         <child>
-                          <object class="GtkImage" id="image10">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-bold</property>
-                            <property name="icon-size">1</property>
-                          </object>
+                          <placeholder/>
                         </child>
                       </object>
                       <packing>
-                        <property name="expand">False</property>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHBox" id="actions_hbox">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkButton" id="emoticons_button">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="has_tooltip">True</property>
+                    <property name="tooltip_text" translatable="yes">Show a list of emoticons (Alt+M)</property>
+                    <property name="relief">none</property>
+                    <property name="focus_on_click">False</property>
                     <child>
-                      <object class="GtkVSeparator" id="vseparator1">
+                      <object class="GtkImage" id="emoticons_button_image">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="orientation">vertical</property>
+                        <property name="stock">gtk-missing-image</property>
+                        <property name="icon-size">1</property>
                       </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="position">2</property>
-                      </packing>
                     </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="formattings_button">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="has_tooltip">True</property>
+                    <property name="relief">none</property>
+                    <property name="focus_on_click">False</property>
                     <child>
-                      <object class="GtkButton" id="add_to_roster_button">
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
+                      <object class="GtkImage" id="image10">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="stock">gtk-bold</property>
+                        <property name="icon-size">1</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkVSeparator" id="vseparator1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="add_to_roster_button">
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="no_show_all">True</property>
+                    <property name="has_tooltip">True</property>
+                    <property name="tooltip_text" translatable="yes">Add this contact to roster (Ctrl+D)</property>
+                    <property name="relief">none</property>
+                    <child>
+                      <object class="GtkImage" id="image9">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="no_show_all">True</property>
-                        <property name="tooltip_text" translatable="yes">Add this contact to roster (Ctrl+D)</property>
-                        <property name="relief">none</property>
-                        <child>
-                          <object class="GtkImage" id="image9">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="stock">gtk-add</property>
-                            <property name="icon-size">1</property>
-                          </object>
-                        </child>
+                        <property name="stock">gtk-add</property>
+                        <property name="icon-size">1</property>
                       </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">3</property>
-                      </packing>
                     </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="send_file_button">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="relief">none</property>
+                    <property name="focus_on_click">False</property>
                     <child>
-                      <object class="GtkButton" id="send_file_button">
+                      <object class="GtkImage" id="image3">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="relief">none</property>
-                        <property name="focus_on_click">False</property>
-                        <child>
-                          <object class="GtkImage" id="image3">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="icon-size">1</property>
-                          </object>
-                        </child>
+                        <property name="icon-size">1</property>
                       </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="position">4</property>
-                      </packing>
                     </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">4</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkToggleButton" id="audio_togglebutton">
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="has_tooltip">True</property>
+                    <property name="relief">none</property>
                     <child>
-                      <object class="GtkToggleButton" id="audio_togglebutton">
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="relief">none</property>
-                        <child>
-                          <object class="GtkImage" id="audio_image">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-missing-image</property>
-                            <property name="icon-size">1</property>
-                          </object>
-                        </child>
+                      <object class="GtkImage" id="audio_image">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="stock">gtk-missing-image</property>
+                        <property name="icon-size">1</property>
                       </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="position">5</property>
-                      </packing>
                     </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">5</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkToggleButton" id="video_togglebutton">
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="has_tooltip">True</property>
+                    <property name="relief">none</property>
                     <child>
-                      <object class="GtkToggleButton" id="video_togglebutton">
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="relief">none</property>
-                        <child>
-                          <object class="GtkImage" id="video_image">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-missing-image</property>
-                            <property name="icon-size">1</property>
-                          </object>
-                        </child>
+                      <object class="GtkImage" id="video_image">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="stock">gtk-missing-image</property>
+                        <property name="icon-size">1</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">6</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="convert_to_gc_button">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="has_tooltip">True</property>
+                    <property name="tooltip_text" translatable="yes">Invite contacts to the conversation (Ctrl+G)</property>
+                    <property name="relief">none</property>
+                    <property name="focus_on_click">False</property>
+                    <child>
+                      <object class="GtkImage" id="convert_to_gc_button_image">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="stock">gtk-missing-image</property>
+                        <property name="icon-size">1</property>
                       </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="position">6</property>
-                      </packing>
                     </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">7</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="contact_information_button">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="has_tooltip">True</property>
+                    <property name="tooltip_text" translatable="yes">Show the contact's profile (Ctrl+I)</property>
+                    <property name="relief">none</property>
+                    <property name="focus_on_click">False</property>
                     <child>
-                      <object class="GtkButton" id="convert_to_gc_button">
+                      <object class="GtkImage" id="image2">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="tooltip_text" translatable="yes">Invite contacts to the conversation (Ctrl+G)</property>
-                        <property name="relief">none</property>
-                        <property name="focus_on_click">False</property>
-                        <child>
-                          <object class="GtkImage" id="convert_to_gc_button_image">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="stock">gtk-missing-image</property>
-                            <property name="icon-size">1</property>
-                          </object>
-                        </child>
+                        <property name="stock">gtk-info</property>
+                        <property name="icon-size">1</property>
                       </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="position">7</property>
-                      </packing>
                     </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">8</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="history_button">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="has_tooltip">True</property>
+                    <property name="tooltip_text" translatable="yes">Browse the chat history (Ctrl+H)</property>
+                    <property name="relief">none</property>
+                    <property name="focus_on_click">False</property>
                     <child>
-                      <object class="GtkButton" id="contact_information_button">
+                      <object class="GtkImage" id="history_image">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="tooltip_text" translatable="yes">View contact information (Ctrl+I)</property>
-                        <property name="relief">none</property>
-                        <property name="focus_on_click">False</property>
-                        <child>
-                          <object class="GtkImage" id="image2">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="stock">gtk-info</property>
-                            <property name="icon-size">1</property>
-                          </object>
-                        </child>
+                        <property name="stock">gtk-justify-fill</property>
+                        <property name="icon-size">1</property>
                       </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="position">8</property>
-                      </packing>
                     </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">9</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkVSeparator" id="vseparator3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">10</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="message_window_actions_button">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="has_tooltip">True</property>
+                    <property name="tooltip_text" translatable="yes">Show advanced functions (Alt+D)</property>
+                    <property name="relief">none</property>
+                    <property name="focus_on_click">False</property>
                     <child>
-                      <object class="GtkButton" id="history_button">
+                      <object class="GtkImage" id="image1">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="tooltip_text" translatable="yes">Browse the chat history (Ctrl+H)</property>
-                        <property name="relief">none</property>
-                        <property name="focus_on_click">False</property>
-                        <child>
-                          <object class="GtkImage" id="image5">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="stock">gtk-justify-fill</property>
-                            <property name="icon-size">1</property>
-                          </object>
-                        </child>
+                        <property name="stock">gtk-execute</property>
+                        <property name="icon-size">1</property>
                       </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="position">9</property>
-                      </packing>
                     </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">11</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHBox" id="audio_buttons_hbox">
+                    <property name="can_focus">False</property>
+                    <property name="no_show_all">True</property>
                     <child>
-                      <object class="GtkVSeparator" id="vseparator3">
+                      <object class="GtkVSeparator" id="vseparator2">
                         <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="orientation">vertical</property>
+                        <property name="can_focus">False</property>
                       </object>
                       <packing>
                         <property name="expand">False</property>
-                        <property name="position">10</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkButton" id="message_window_actions_button">
+                      <object class="GtkVolumeButton" id="sound_hscale">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="tooltip_text" translatable="yes">Show advanced functions (Alt+D)</property>
                         <property name="relief">none</property>
                         <property name="focus_on_click">False</property>
-                        <child>
-                          <object class="GtkImage" id="image1">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="stock">gtk-execute</property>
-                            <property name="icon-size">1</property>
-                          </object>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="position">11</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkHBox" id="audio_buttons_hbox">
-                        <property name="no_show_all">True</property>
-                        <child>
-                          <object class="GtkVSeparator" id="vseparator2">
-                            <property name="visible">True</property>
-                            <property name="orientation">vertical</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkVolumeButton" id="sound_hscale">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="use_action_appearance">True</property>
-                            <property name="relief">none</property>
-                            <property name="focus_on_click">False</property>
-                            <property name="orientation">vertical</property>
-                            <property name="size">menu</property>
-                            <property name="adjustment">adjustment1</property>
-                            <property name="icons">audio-volume-muted
+                        <property name="orientation">vertical</property>
+                        <property name="size">menu</property>
+                        <property name="adjustment">adjustment1</property>
+                        <property name="icons">audio-volume-muted
 audio-volume-high
 audio-volume-low
 audio-volume-medium</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkVolumeButton" id="mic_hscale">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="use_action_appearance">True</property>
-                            <property name="relief">none</property>
-                            <property name="focus_on_click">False</property>
-                            <property name="yalign">0.4699999988079071</property>
-                            <property name="orientation">vertical</property>
-                            <property name="size">menu</property>
-                            <property name="adjustment">adjustment2</property>
-                            <property name="icons">audio-mic-volume-muted
-audio-mic-volume-high
-audio-mic-volume-medium
-audio-mic-volume-low</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="position">2</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkButton" id="dtmf_button">
-                            <property name="label" translatable="yes">#</property>
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="relief">none</property>
-                          </object>
-                          <packing>
-                            <property name="position">3</property>
-                          </packing>
-                        </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
-                        <property name="position">12</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkComboBox" id="label_selector">
-                        <property name="visible">True</property>
-                      </object>
-                      <packing>
-                        <property name="position">13</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkAlignment" id="alignment1">
+                      <object class="GtkVolumeButton" id="mic_hscale">
                         <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <child>
-                          <placeholder/>
-                        </child>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="relief">none</property>
+                        <property name="focus_on_click">False</property>
+                        <property name="yalign">0.4699999988079071</property>
+                        <property name="orientation">vertical</property>
+                        <property name="size">menu</property>
+                        <property name="adjustment">adjustment2</property>
+                        <property name="icons">audio-mic-volume-muted
+audio-mic-volume-high
+audio-mic-volume-medium
+audio-mic-volume-low</property>
                       </object>
                       <packing>
-                        <property name="position">14</property>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">2</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkButton" id="send_button">
+                      <object class="GtkButton" id="dtmf_button">
+                        <property name="label" translatable="yes">#</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">True</property>
-                        <property name="tooltip_text" translatable="yes">Send message</property>
-                        <child>
-                          <object class="GtkAlignment" id="alignment102">
-                            <property name="visible">True</property>
-                            <property name="xscale">0</property>
-                            <property name="yscale">0</property>
-                            <child>
-                              <object class="GtkHBox" id="hbox3010">
-                                <property name="visible">True</property>
-                                <property name="spacing">2</property>
-                                <child>
-                                  <object class="GtkImage" id="image1339">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-jump-to</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkLabel" id="label373">
-                                    <property name="visible">True</property>
-                                    <property name="label" translatable="yes" comments="Make sure the character after &quot;_&quot; is not M/m (conflicts with Alt+M that is supposed to show the Emoticon Selector)">_Send</property>
-                                    <property name="use_underline">True</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
+                        <property name="relief">none</property>
                       </object>
                       <packing>
-                        <property name="expand">False</property>
-                        <property name="position">15</property>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">3</property>
                       </packing>
                     </child>
                   </object>
                   <packing>
                     <property name="expand">False</property>
-                    <property name="position">2</property>
+                    <property name="fill">True</property>
+                    <property name="position">12</property>
                   </packing>
                 </child>
-              </object>
-              <packing>
-                <property name="resize">False</property>
-                <property name="shrink">True</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkHBox" id="video_hbox">
-                <property name="no_show_all">True</property>
-                <property name="spacing">6</property>
                 <child>
-                  <object class="GtkFixed" id="outgoing_fixed">
-                    <property name="no_show_all">True</property>
-                    <child>
-                      <object class="GtkViewport" id="viewport1">
-                        <property name="width_request">160</property>
-                        <property name="height_request">120</property>
-                        <property name="visible">True</property>
-                        <property name="resize_mode">queue</property>
-                        <child>
-                          <object class="GtkDrawingArea" id="outgoing_drawingarea">
-                            <property name="width_request">160</property>
-                            <property name="height_request">120</property>
-                            <property name="visible">True</property>
-                            <property name="double_buffered">False</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
+                  <object class="GtkComboBox" id="label_selector">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                   </object>
                   <packing>
-                    <property name="expand">False</property>
-                    <property name="position">0</property>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">13</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkVBox" id="vbox1">
+                  <object class="GtkAlignment" id="alignment1">
                     <property name="visible">True</property>
-                    <property name="orientation">vertical</property>
-                    <child>
-                      <object class="GtkViewport" id="viewport2">
-                        <property name="visible">True</property>
-                        <property name="resize_mode">queue</property>
-                        <child>
-                          <object class="GtkDrawingArea" id="incoming_drawingarea">
-                            <property name="width_request">320</property>
-                            <property name="height_request">240</property>
-                            <property name="visible">True</property>
-                            <property name="double_buffered">False</property>
-                          </object>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
+                    <property name="can_focus">False</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <child>
                       <placeholder/>
                     </child>
                   </object>
                   <packing>
-                    <property name="position">1</property>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">14</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="send_button">
+                    <property name="label" translatable="yes">_Send</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="tooltip_text" translatable="yes">Send message</property>
+                    <property name="image">image4</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">15</property>
                   </packing>
                 </child>
               </object>
               <packing>
-                <property name="resize">True</property>
-                <property name="shrink">True</property>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
               </packing>
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">0</property>
           </packing>
         </child>
       </object>
       <packing>
+        <property name="expand">True</property>
+        <property name="fill">True</property>
         <property name="position">0</property>
       </packing>
     </child>
   </object>
-  <object class="GtkAdjustment" id="adjustment2">
-    <property name="upper">110</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
-    <property name="page_size">10</property>
-  </object>
-  <object class="GtkAdjustment" id="adjustment1">
-    <property name="upper">110</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
-    <property name="page_size">10</property>
-  </object>
   <object class="GtkWindow" id="dtmf_window">
+    <property name="can_focus">False</property>
     <property name="resizable">False</property>
     <property name="modal">True</property>
     <property name="window_position">mouse</property>
@@ -763,200 +746,297 @@ audio-mic-volume-low</property>
     <child>
       <object class="GtkTable" id="table2">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="n_rows">4</property>
         <property name="n_columns">3</property>
-        <property name="homogeneous">True</property>
         <child>
           <object class="GtkButton" id="1_button">
-            <property name="label" translatable="yes">1</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="relief">none</property>
+            <child>
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">&lt;b&gt;1&lt;/b&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
-            <property name="x_options"/>
+            <property name="x_options">GTK_FILL</property>
             <property name="y_options"/>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="2_button">
-            <property name="label" translatable="yes">2</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <child>
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;b&gt;2&lt;/b&gt; abc</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="left_attach">1</property>
             <property name="right_attach">2</property>
-            <property name="x_options"/>
+            <property name="x_options">GTK_FILL</property>
             <property name="y_options"/>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="3_button">
-            <property name="label" translatable="yes">3</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <child>
+              <object class="GtkLabel" id="label3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;b&gt;3&lt;/b&gt; def</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="left_attach">2</property>
             <property name="right_attach">3</property>
-            <property name="x_options"/>
+            <property name="x_options">GTK_FILL</property>
             <property name="y_options"/>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="4_button">
-            <property name="label" translatable="yes">4</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <child>
+              <object class="GtkLabel" id="label4">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;b&gt;4&lt;/b&gt; def</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="top_attach">1</property>
             <property name="bottom_attach">2</property>
-            <property name="x_options"/>
+            <property name="x_options">GTK_FILL</property>
             <property name="y_options"/>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="5_button">
-            <property name="label" translatable="yes">5</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <child>
+              <object class="GtkLabel" id="label5">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;b&gt;5&lt;/b&gt; jkl</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="left_attach">1</property>
             <property name="right_attach">2</property>
             <property name="top_attach">1</property>
             <property name="bottom_attach">2</property>
-            <property name="x_options"/>
+            <property name="x_options">GTK_FILL</property>
             <property name="y_options"/>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="6_button">
-            <property name="label" translatable="yes">6</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <child>
+              <object class="GtkLabel" id="label6">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;b&gt;6&lt;/b&gt; mno</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="left_attach">2</property>
             <property name="right_attach">3</property>
             <property name="top_attach">1</property>
             <property name="bottom_attach">2</property>
-            <property name="x_options"/>
+            <property name="x_options">GTK_FILL</property>
             <property name="y_options"/>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="7_button">
-            <property name="label" translatable="yes">7</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="relief">none</property>
+            <child>
+              <object class="GtkLabel" id="label7">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;b&gt;7&lt;/b&gt; pqrs</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="top_attach">2</property>
             <property name="bottom_attach">3</property>
-            <property name="x_options"/>
+            <property name="x_options">GTK_FILL</property>
             <property name="y_options"/>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="8_button">
-            <property name="label" translatable="yes">8</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <child>
+              <object class="GtkLabel" id="label8">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;b&gt;8&lt;/b&gt; tuv</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="left_attach">1</property>
             <property name="right_attach">2</property>
             <property name="top_attach">2</property>
             <property name="bottom_attach">3</property>
-            <property name="x_options"/>
+            <property name="x_options">GTK_FILL</property>
             <property name="y_options"/>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="9_button">
-            <property name="label" translatable="yes">9</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <child>
+              <object class="GtkLabel" id="label9">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;b&gt;9&lt;/b&gt; wxyz</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="left_attach">2</property>
             <property name="right_attach">3</property>
             <property name="top_attach">2</property>
             <property name="bottom_attach">3</property>
-            <property name="x_options"/>
+            <property name="x_options">GTK_FILL</property>
             <property name="y_options"/>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="*_button">
-            <property name="label" translatable="yes">*</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="relief">none</property>
+            <child>
+              <object class="GtkLabel" id="label10">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;b&gt;*&lt;/b&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="top_attach">3</property>
             <property name="bottom_attach">4</property>
-            <property name="x_options"/>
+            <property name="x_options">GTK_FILL</property>
             <property name="y_options"/>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="0_button">
-            <property name="label" translatable="yes">0</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="relief">none</property>
+            <child>
+              <object class="GtkLabel" id="label11">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;b&gt;0&lt;/b&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="left_attach">1</property>
             <property name="right_attach">2</property>
             <property name="top_attach">3</property>
             <property name="bottom_attach">4</property>
-            <property name="x_options"/>
+            <property name="x_options">GTK_FILL</property>
             <property name="y_options"/>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="#_button">
-            <property name="label" translatable="yes">#</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
             <property name="relief">none</property>
+            <child>
+              <object class="GtkLabel" id="label12">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;b&gt;#&lt;/b&gt;</property>
+                <property name="use_markup">True</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="left_attach">2</property>
             <property name="right_attach">3</property>
             <property name="top_attach">3</property>
             <property name="bottom_attach">4</property>
-            <property name="x_options"/>
+            <property name="x_options">GTK_FILL</property>
             <property name="y_options"/>
           </packing>
         </child>
       </object>
     </child>
   </object>
+  <object class="GtkImage" id="image4">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-jump-to</property>
+  </object>
 </interface>
diff --git a/data/gui/chat_to_muc_window.ui b/data/gui/chat_to_muc_window.ui
index 0c0c36e7e1ab57660aefd6adf91b172db414eb78..4a8f30d8a4178ce40a36dacd8eb83bb2925cd434 100644
--- a/data/gui/chat_to_muc_window.ui
+++ b/data/gui/chat_to_muc_window.ui
@@ -75,7 +75,7 @@ Select the contacts you want to invite</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkComboBoxEntry" id="server_list_comboboxentry">
+                  <object class="GtkComboBox" id="server_list_comboboxentry">
                     <property name="visible">True</property>
                   </object>
                   <packing>
@@ -122,46 +122,13 @@ Select the contacts you want to invite</property>
             </child>
             <child>
               <object class="GtkButton" id="invite_button">
+                <property name="label" translatable="yes">In_vite</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
+                <property name="image">image1</property>
+                <property name="use_underline">True</property>
                 <signal name="clicked" handler="on_invite_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment1">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox2">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image1">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-jump-to</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label1">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">In_vite</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -179,4 +146,8 @@ Select the contacts you want to invite</property>
       </object>
     </child>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-jump-to</property>
+  </object>
 </interface>
diff --git a/data/gui/dubbleinput_dialog.ui b/data/gui/dubbleinput_dialog.ui
index 1599394684e04a169f20ab5a5c0ba46435b2d5ee..8770d27df0fb36256e9aaa1328aa109427bcf948 100644
--- a/data/gui/dubbleinput_dialog.ui
+++ b/data/gui/dubbleinput_dialog.ui
@@ -1,50 +1,105 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkDialog" id="dubbleinput_dialog">
+    <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="type_hint">dialog</property>
-    <property name="has_separator">False</property>
-    <signal name="destroy" handler="on_dubbleinput_dialog_destroy"/>
+    <signal name="destroy" handler="on_dubbleinput_dialog_destroy" swapped="no"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox10">
+      <object class="GtkBox" id="dialog-vbox10">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area9">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="cancelbutton">
+                <property name="label">gtk-cancel</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="okbutton">
+                <property name="label">gtk-ok</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkVBox" id="vbox76">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="border_width">6</property>
-            <property name="orientation">vertical</property>
             <property name="spacing">6</property>
             <child>
               <object class="GtkHBox" id="hbox2960">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkImage" id="image507">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="stock">gtk-dialog-question</property>
                     <property name="icon-size">6</property>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkLabel" id="label1">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="use_markup">True</property>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
@@ -63,6 +118,7 @@
             <child>
               <object class="GtkLabel" id="label2">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -82,50 +138,10 @@
               </packing>
             </child>
           </object>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area9">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="cancelbutton">
-                <property name="label">gtk-cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="okbutton">
-                <property name="label">gtk-ok</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="has_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
           <packing>
             <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
           </packing>
         </child>
       </object>
diff --git a/data/gui/edit_groups_dialog.ui b/data/gui/edit_groups_dialog.ui
index d53d5257b78e6200edfa417810d00d62775bde2f..fab50a505ef5d389c9e2a66daadda2e62720f0d4 100644
--- a/data/gui/edit_groups_dialog.ui
+++ b/data/gui/edit_groups_dialog.ui
@@ -1,41 +1,77 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkDialog" id="edit_groups_dialog">
+    <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes">Edit Groups</property>
     <property name="modal">True</property>
     <property name="default_height">290</property>
     <property name="type_hint">dialog</property>
-    <signal name="response" handler="on_edit_groups_dialog_response"/>
+    <signal name="response" handler="on_edit_groups_dialog_response" swapped="no"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox6">
+      <object class="GtkBox" id="dialog-vbox6">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area5">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="close_button">
+                <property name="label">gtk-close</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkLabel" id="nickname_label">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">2</property>
           </packing>
         </child>
         <child>
           <object class="GtkLabel" id="jid_label">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="use_markup">True</property>
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">3</property>
           </packing>
         </child>
         <child>
           <object class="GtkHBox" id="hbox2926">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="spacing">6</property>
             <child>
               <object class="GtkEntry" id="group_entry">
@@ -44,19 +80,23 @@
                 <property name="activates_default">True</property>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
             <child>
               <object class="GtkButton" id="add_button">
                 <property name="label">gtk-add</property>
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="has_default">True</property>
                 <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_add_button_clicked"/>
+                <signal name="clicked" handler="on_add_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -75,47 +115,24 @@
           <object class="GtkScrolledWindow" id="scrolledwindow32">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">automatic</property>
-            <property name="vscrollbar_policy">automatic</property>
             <property name="shadow_type">in</property>
             <child>
               <object class="GtkTreeView" id="groups_treeview">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="headers_visible">False</property>
+                <child internal-child="selection">
+                  <object class="GtkTreeSelection" id="treeview-selection1"/>
+                </child>
               </object>
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">5</property>
           </packing>
         </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area5">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="close_button">
-                <property name="label">gtk-close</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
       </object>
     </child>
     <action-widgets>
diff --git a/data/gui/esession_info_window.ui b/data/gui/esession_info_window.ui
index 9e6dee5b26a0b591733288a39b6053d0db2f2b74..bd6489024a0ff5053d3b2bbfb4090bdd1b8dcb86 100644
--- a/data/gui/esession_info_window.ui
+++ b/data/gui/esession_info_window.ui
@@ -1,93 +1,46 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkDialog" id="esession_info_window">
+    <property name="can_focus">False</property>
     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
     <property name="border_width">5</property>
     <property name="window_position">center-on-parent</property>
     <property name="type_hint">dialog</property>
-    <property name="has_separator">False</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox1">
+      <object class="GtkBox" id="dialog-vbox1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
-        <child>
-          <object class="GtkHBox" id="title-hbox">
-            <property name="visible">True</property>
-            <child>
-              <object class="GtkImage" id="security_image">
-                <property name="width_request">32</property>
-                <property name="height_request">32</property>
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="verification_status_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-              </object>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkHBox" id="hbox4">
-            <property name="visible">True</property>
-            <property name="spacing">4</property>
-            <child>
-              <object class="GtkLabel" id="info_display">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">(&lt;b&gt;ESession&lt;/b&gt; info)</property>
-                <property name="use_markup">True</property>
-                <property name="wrap">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="padding">10</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
+          <object class="GtkButtonBox" id="dialog-action_area1">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="verify_now_button">
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
-                <signal name="clicked" handler="on_verify_now_button_clicked"/>
+                <property name="use_action_appearance">False</property>
+                <signal name="clicked" handler="on_verify_now_button_clicked" swapped="no"/>
                 <child>
                   <object class="GtkAlignment" id="alignment2">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xscale">0</property>
                     <property name="yscale">0</property>
                     <child>
                       <object class="GtkHBox" id="hbox3">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="spacing">2</property>
                         <child>
                           <object class="GtkImage" id="image2">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="stock">gtk-apply</property>
                           </object>
                           <packing>
@@ -99,6 +52,7 @@
                         <child>
                           <object class="GtkLabel" id="button_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="label" translatable="yes">_Verify</property>
                             <property name="use_underline">True</property>
                           </object>
@@ -122,11 +76,13 @@
             <child>
               <object class="GtkButton" id="close_button3">
                 <property name="label">gtk-close</property>
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_close_button_clicked"/>
+                <signal name="clicked" handler="on_close_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -137,10 +93,74 @@
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="pack_type">end</property>
             <property name="position">0</property>
           </packing>
         </child>
+        <child>
+          <object class="GtkHBox" id="title-hbox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkImage" id="security_image">
+                <property name="width_request">32</property>
+                <property name="height_request">32</property>
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="verification_status_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkHBox" id="hbox4">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="spacing">4</property>
+            <child>
+              <object class="GtkLabel" id="info_display">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label">(&lt;b&gt;ESession&lt;/b&gt; info)</property>
+                <property name="use_markup">True</property>
+                <property name="wrap">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="padding">10</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
       </object>
     </child>
     <action-widgets>
diff --git a/data/gui/filetransfers.ui b/data/gui/filetransfers.ui
index 8933b714d07cec144004367b10f29a028d270017..201d8e7c38c161ab8c76432091773817bf52437e 100644
--- a/data/gui/filetransfers.ui
+++ b/data/gui/filetransfers.ui
@@ -41,11 +41,11 @@
                   </object>
                 </child>
                 <signal name="button_press_event" handler="on_transfers_list_button_press_event"/>
+                <signal name="row_activated" handler="on_transfers_list_row_activated"/>
                 <signal name="button_release_event" handler="on_transfers_list_button_release_event"/>
                 <signal name="key_press_event" handler="on_transfers_list_key_press_event"/>
-                <signal name="leave_notify_event" handler="on_transfers_list_leave_notify_event"/>
                 <signal name="motion_notify_event" handler="on_transfers_list_motion_notify_event"/>
-                <signal name="row_activated" handler="on_transfers_list_row_activated"/>
+                <signal name="leave_notify_event" handler="on_transfers_list_leave_notify_event"/>
               </object>
             </child>
           </object>
@@ -81,12 +81,15 @@
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="cleanup_button">
+                <property name="label" translatable="yes">Clean _up</property>
                 <property name="visible">True</property>
                 <property name="sensitive">False</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
                 <property name="tooltip_text" translatable="yes">Removes completed, cancelled and failed file transfers from the list</property>
+                <property name="image">image1</property>
+                <property name="use_underline">True</property>
                 <child internal-child="accessible">
                   <object class="AtkObject" id="cleanup_button-atkobject">
                     <property name="AtkObject::accessible-name" translatable="yes">Remove file transfer from the list.</property>
@@ -94,42 +97,6 @@
                   </object>
                 </child>
                 <signal name="clicked" handler="on_cleanup_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment91">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox2992">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image1143">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-clear</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label358">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">Clean _up</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -139,48 +106,15 @@
             </child>
             <child>
               <object class="GtkButton" id="pause_restore_button">
+                <property name="label" translatable="yes">_Pause</property>
                 <property name="visible">True</property>
                 <property name="sensitive">False</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
+                <property name="image">image2</property>
+                <property name="use_underline">True</property>
                 <signal name="clicked" handler="on_pause_restore_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment92">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox2993">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image1147">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-media-pause</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label359">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">_Pause</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -252,7 +186,7 @@
     </child>
     <child>
       <object class="GtkImageMenuItem" id="continue_menuitem">
-        <property name="label" translatable="yes">_Continue</property>
+        <property name="label">_Continue</property>
         <property name="no_show_all">True</property>
         <property name="use_underline">True</property>
         <property name="use_stock">True</property>
@@ -262,7 +196,7 @@
     </child>
     <child>
       <object class="GtkImageMenuItem" id="pause_menuitem">
-        <property name="label" translatable="yes">_Pause</property>
+        <property name="label">_Pause</property>
         <property name="use_underline">True</property>
         <property name="use_stock">True</property>
         <property name="accel_group">accelgroup1</property>
@@ -285,7 +219,7 @@
     </child>
     <child>
       <object class="GtkImageMenuItem" id="open_folder_menuitem">
-        <property name="label" translatable="yes">_Open Containing Folder</property>
+        <property name="label">_Open Containing Folder</property>
         <property name="use_underline">True</property>
         <property name="use_stock">True</property>
         <property name="accel_group">accelgroup1</property>
@@ -294,4 +228,12 @@
     </child>
   </object>
   <object class="GtkAccelGroup" id="accelgroup1"/>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-clear</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="stock">gtk-media-pause</property>
+  </object>
 </interface>
diff --git a/data/gui/gajim_themes_window.ui b/data/gui/gajim_themes_window.ui
index 9b45b421ed689a0bbe8db389ab4dcdcb3ee67d3e..184bf47273f673f2b1d7723aa7ce89fb0dfa69ad 100644
--- a/data/gui/gajim_themes_window.ui
+++ b/data/gui/gajim_themes_window.ui
@@ -25,6 +25,7 @@
   <object class="GtkWindow" id="gajim_themes_window">
     <property name="border_width">12</property>
     <property name="title" translatable="yes">Gajim Themes Customization</property>
+    <property name="window_position">center-on-parent</property>
     <property name="type_hint">dialog</property>
     <child>
       <object class="GtkVBox" id="vbox97">
@@ -64,6 +65,7 @@
                   <object class="GtkHButtonBox" id="hbuttonbox27">
                     <property name="visible">True</property>
                     <property name="spacing">6</property>
+                    <property name="layout_style">center</property>
                     <child>
                       <object class="GtkButton" id="add_button">
                         <property name="label">gtk-add</property>
@@ -148,7 +150,7 @@
                       </object>
                       <packing>
                         <property name="x_options">GTK_FILL</property>
-                        <property name="y_options"></property>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
@@ -165,7 +167,7 @@
                         <property name="top_attach">1</property>
                         <property name="bottom_attach">2</property>
                         <property name="x_options">GTK_FILL</property>
-                        <property name="y_options"></property>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
@@ -182,7 +184,7 @@
                         <property name="top_attach">2</property>
                         <property name="bottom_attach">3</property>
                         <property name="x_options">GTK_FILL</property>
-                        <property name="y_options"></property>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
@@ -197,7 +199,7 @@
                         <property name="top_attach">3</property>
                         <property name="bottom_attach">4</property>
                         <property name="x_options">GTK_FILL</property>
-                        <property name="y_options"></property>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
@@ -211,8 +213,8 @@
                       <packing>
                         <property name="left_attach">2</property>
                         <property name="right_attach">3</property>
-                        <property name="x_options"></property>
-                        <property name="y_options"></property>
+                        <property name="x_options"/>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
@@ -228,8 +230,8 @@
                         <property name="right_attach">3</property>
                         <property name="top_attach">1</property>
                         <property name="bottom_attach">2</property>
-                        <property name="x_options"></property>
-                        <property name="y_options"></property>
+                        <property name="x_options"/>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
@@ -247,7 +249,7 @@
                         <property name="right_attach">3</property>
                         <property name="top_attach">2</property>
                         <property name="bottom_attach">3</property>
-                        <property name="y_options"></property>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
@@ -269,8 +271,8 @@
                         <property name="right_attach">2</property>
                         <property name="top_attach">3</property>
                         <property name="bottom_attach">4</property>
-                        <property name="x_options"></property>
-                        <property name="y_options"></property>
+                        <property name="x_options"/>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
@@ -292,8 +294,8 @@
                         <property name="right_attach">3</property>
                         <property name="top_attach">3</property>
                         <property name="bottom_attach">4</property>
-                        <property name="x_options"></property>
-                        <property name="y_options"></property>
+                        <property name="x_options"/>
+                        <property name="y_options"/>
                       </packing>
                     </child>
                     <child>
@@ -348,7 +350,7 @@
                     <property name="top_attach">4</property>
                     <property name="bottom_attach">5</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -364,7 +366,7 @@
                     <property name="top_attach">4</property>
                     <property name="bottom_attach">5</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -380,7 +382,7 @@
                     <property name="top_attach">3</property>
                     <property name="bottom_attach">4</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -393,7 +395,7 @@
                     <property name="top_attach">3</property>
                     <property name="bottom_attach">4</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -406,7 +408,7 @@
                     <property name="top_attach">2</property>
                     <property name="bottom_attach">3</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -422,7 +424,7 @@
                     <property name="top_attach">2</property>
                     <property name="bottom_attach">3</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -435,7 +437,7 @@
                   <packing>
                     <property name="right_attach">2</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -448,7 +450,7 @@
                     <property name="top_attach">5</property>
                     <property name="bottom_attach">6</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -464,7 +466,7 @@
                     <property name="top_attach">5</property>
                     <property name="bottom_attach">6</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -478,7 +480,7 @@ Messages</property>
                     <property name="top_attach">7</property>
                     <property name="bottom_attach">8</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -494,7 +496,7 @@ Messages</property>
                     <property name="top_attach">7</property>
                     <property name="bottom_attach">8</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -520,7 +522,7 @@ Messages</property>
                     <property name="top_attach">8</property>
                     <property name="bottom_attach">9</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -536,7 +538,7 @@ Messages</property>
                     <property name="top_attach">8</property>
                     <property name="bottom_attach">9</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
diff --git a/data/gui/groupchat_control.ui b/data/gui/groupchat_control.ui
index d32b6b023912b9769921e9fd610233f3f8e9046a..e316267490e53cd551af0e4e1b46967b67c3b985 100644
--- a/data/gui/groupchat_control.ui
+++ b/data/gui/groupchat_control.ui
@@ -1,29 +1,31 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy project-wide -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkHBox" id="groupchat_control_hbox">
     <property name="can_focus">True</property>
     <child>
       <object class="GtkVBox" id="groupchat_control_vbox">
         <property name="can_focus">True</property>
         <property name="border_width">3</property>
-        <property name="orientation">vertical</property>
         <child>
           <object class="GtkAlignment" id="alignment">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="bottom_padding">1</property>
             <property name="left_padding">3</property>
             <property name="right_padding">3</property>
             <child>
               <object class="GtkEventBox" id="banner_eventbox">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <child>
                   <object class="GtkHBox" id="hbox3024">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkImage" id="gc_banner_status_image">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="stock">gtk-missing-image</property>
                       </object>
                       <packing>
@@ -36,34 +38,42 @@
                     <child>
                       <object class="GtkVBox" id="banner_vbox">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="border_width">5</property>
-                        <property name="orientation">vertical</property>
                         <child>
                           <object class="GtkLabel" id="banner_name_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="label">&lt;span weight="heavy" size="large"&gt;room jid&lt;/span&gt;</property>
                             <property name="use_markup">True</property>
                           </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkLabel" id="banner_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="label">label</property>
                             <property name="use_markup">True</property>
                             <property name="selectable">True</property>
                           </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
                       </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
@@ -85,12 +95,12 @@
             <property name="border_width">3</property>
             <property name="position">495</property>
             <property name="position_set">True</property>
-            <signal name="notify" handler="on_hpaned_notify"/>
+            <signal name="notify" handler="on_hpaned_notify" swapped="no"/>
             <child>
               <object class="GtkVBox" id="gc_textviews_vbox">
                 <property name="width_request">0</property>
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkScrolledWindow" id="conversation_scrolledwindow">
@@ -98,14 +108,14 @@
                     <property name="height_request">60</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
-                    <property name="hscrollbar_policy">automatic</property>
-                    <property name="vscrollbar_policy">automatic</property>
                     <property name="shadow_type">in</property>
                     <child>
                       <placeholder/>
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
@@ -122,6 +132,7 @@
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
@@ -137,7 +148,6 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="hscrollbar_policy">never</property>
-                <property name="vscrollbar_policy">automatic</property>
                 <property name="shadow_type">in</property>
                 <child>
                   <object class="GtkTreeView" id="list_treeview">
@@ -155,15 +165,19 @@
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkHBox" id="actions_hbox">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
               <object class="GtkHBox" id="hbox3023">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <child>
                   <object class="GtkButton" id="emoticons_button">
                     <property name="visible">True</property>
@@ -176,6 +190,7 @@
                     <child>
                       <object class="GtkImage" id="emoticons_button_image">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="stock">gtk-missing-image</property>
                         <property name="icon-size">1</property>
                       </object>
@@ -190,6 +205,7 @@
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
@@ -206,6 +222,7 @@
                 <child>
                   <object class="GtkImage" id="image11">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="stock">gtk-bold</property>
                     <property name="icon-size">1</property>
                   </object>
@@ -213,16 +230,19 @@
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
             <child>
               <object class="GtkVSeparator" id="vseparator2">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">2</property>
               </packing>
             </child>
@@ -238,6 +258,7 @@
                 <child>
                   <object class="GtkImage" id="image4">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="stock">gtk-edit</property>
                     <property name="icon-size">1</property>
@@ -262,6 +283,7 @@
                 <child>
                   <object class="GtkImage" id="image6">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="stock">gtk-properties</property>
                     <property name="icon-size">1</property>
@@ -287,6 +309,7 @@
                 <child>
                   <object class="GtkImage" id="image7">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="stock">gtk-add</property>
                     <property name="icon-size">1</property>
@@ -309,8 +332,9 @@
                 <property name="tooltip_text" translatable="yes">Browse the chat history (Ctrl+H)</property>
                 <property name="relief">none</property>
                 <child>
-                  <object class="GtkImage" id="image8">
+                  <object class="GtkImage" id="history_image">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="stock">gtk-justify-fill</property>
                     <property name="icon-size">1</property>
@@ -326,10 +350,12 @@
             <child>
               <object class="GtkVSeparator" id="vseparator4">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">7</property>
               </packing>
             </child>
@@ -346,11 +372,13 @@
                 <child>
                   <object class="GtkAlignment" id="alignment104">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xscale">0</property>
                     <property name="yscale">0</property>
                     <child>
                       <object class="GtkImage" id="image1344">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="stock">gtk-execute</property>
                         <property name="icon-size">1</property>
                       </object>
@@ -367,65 +395,38 @@
             <child>
               <object class="GtkComboBox" id="label_selector">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">9</property>
               </packing>
             </child>
             <child>
               <object class="GtkAlignment" id="alignment2">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                 <child>
                   <placeholder/>
                 </child>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">10</property>
               </packing>
             </child>
             <child>
               <object class="GtkButton" id="send_button">
+                <property name="label" translatable="yes">_Send</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
                 <property name="tooltip_text" translatable="yes">Send message</property>
-                <child>
-                  <object class="GtkAlignment" id="alignment105">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox3016">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image1345">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-jump-to</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label377">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes" comments="Make sure the character after &quot;_&quot; is not M/m (conflicts with Alt+M that is supposed to show the Emoticon Selector)">_Send</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
+                <property name="image">image1</property>
+                <property name="use_underline">True</property>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -436,13 +437,21 @@
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">2</property>
           </packing>
         </child>
       </object>
       <packing>
+        <property name="expand">True</property>
+        <property name="fill">True</property>
         <property name="position">0</property>
       </packing>
     </child>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-jump-to</property>
+  </object>
 </interface>
diff --git a/data/gui/history_manager.ui b/data/gui/history_manager.ui
index 1f206ecb48fbdf263d39b1513650327ae0ff16c7..27ad1d61407537f9706f72e28d5e6c9ce96b31e4 100644
--- a/data/gui/history_manager.ui
+++ b/data/gui/history_manager.ui
@@ -212,48 +212,16 @@ If you plan to do massive deletions, please make sure Gajim is not running. Gene
             </child>
             <child>
               <object class="GtkButton" id="search_db_button">
+                <property name="label" translatable="yes">_Search Database</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="has_default">True</property>
                 <property name="receives_default">False</property>
+                <property name="image">image1</property>
+                <property name="use_underline">True</property>
+                <property name="image_position">bottom</property>
                 <signal name="clicked" handler="on_search_db_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment1">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox1">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image1">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-find</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label1">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">_Search Database</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -345,4 +313,8 @@ If you plan to do massive deletions, please make sure Gajim is not running. Gene
       <action-widget response="-5">save_button</action-widget>
     </action-widgets>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-find</property>
+  </object>
 </interface>
diff --git a/data/gui/history_window.ui b/data/gui/history_window.ui
index 7000914ae7c8d7d194224a9a17a2436bd7ccd010..37994d07ed6529e8f88a6e7728b2ee22612b2707 100644
--- a/data/gui/history_window.ui
+++ b/data/gui/history_window.ui
@@ -1,63 +1,49 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
-  <object class="GtkListStore" id="liststore1">
-    <columns>
-      <!-- column-name item -->
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes">Enter JID or Contact name</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Groupchat Histories</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">All Chat Histories</col>
-      </row>
-    </data>
-  </object>
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkWindow" id="history_window">
+    <property name="can_focus">False</property>
     <property name="title" translatable="yes">Conversation History</property>
     <property name="role">history</property>
     <property name="default_width">650</property>
     <property name="default_height">450</property>
-    <signal name="destroy" handler="on_history_window_destroy"/>
-    <signal name="key_press_event" handler="on_history_window_key_press_event"/>
+    <signal name="destroy" handler="on_history_window_destroy" swapped="no"/>
+    <signal name="key-press-event" handler="on_history_window_key_press_event" swapped="no"/>
     <child>
       <object class="GtkVBox" id="vbox">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="border_width">12</property>
-        <property name="orientation">vertical</property>
         <property name="spacing">6</property>
         <child>
           <object class="GtkVBox" id="vbox1">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-            <property name="orientation">vertical</property>
             <property name="spacing">6</property>
             <child>
               <object class="GtkHBox" id="hbox1">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                 <property name="spacing">6</property>
                 <child>
-                  <object class="GtkComboBoxEntry" id="query_combobox">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <property name="model">liststore1</property>
-                    <property name="text_column">0</property>
-                    <signal name="changed" handler="on_query_combobox_changed"/>
+                  <object class="GtkEntry" id="query_entry">
+                    <property name="can_focus">True</property>
+                    <property name="invisible_char">●</property>
+                    <property name="invisible_char_set">True</property>
+                    <property name="placeholder_text">Enter name / JID of contact or groupchat</property>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkLabel" id="label3">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="label" translatable="yes">Search:</property>
                   </object>
@@ -68,26 +54,30 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkEntry" id="query_entry">
+                  <object class="GtkEntry" id="search_entry">
                     <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="activates_default">True</property>
-                    <signal name="activate" handler="on_query_entry_activate"/>
+                    <signal name="activate" handler="on_search_entry_activate" swapped="no"/>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">2</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkCheckButton" id="search_in_date">
                     <property name="label" translatable="yes">_In date search</property>
+                    <property name="use_action_appearance">False</property>
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="receives_default">False</property>
                     <property name="tooltip_text" translatable="yes">Searching only in the selected day </property>
+                    <property name="use_action_appearance">False</property>
                     <property name="use_underline">True</property>
+                    <property name="xalign">0.5</property>
                     <property name="draw_indicator">True</property>
                   </object>
                   <packing>
@@ -99,6 +89,7 @@
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
@@ -114,17 +105,18 @@
                     <child>
                       <object class="GtkVBox" id="vbox2">
                         <property name="visible">True</property>
-                        <property name="orientation">vertical</property>
+                        <property name="can_focus">False</property>
                         <property name="spacing">6</property>
                         <child>
                           <object class="GtkCalendar" id="calendar">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <signal name="month_changed" handler="on_calendar_month_changed"/>
-                            <signal name="day_selected" handler="on_calendar_day_selected"/>
+                            <signal name="month-changed" handler="on_calendar_month_changed" swapped="no"/>
+                            <signal name="day-selected" handler="on_calendar_day_selected" swapped="no"/>
                           </object>
                           <packing>
                             <property name="expand">False</property>
+                            <property name="fill">True</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
@@ -141,8 +133,6 @@
                       <object class="GtkScrolledWindow" id="scrolledwindow">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="hscrollbar_policy">automatic</property>
-                        <property name="vscrollbar_policy">automatic</property>
                         <property name="shadow_type">etched-in</property>
                         <child>
                           <placeholder/>
@@ -163,15 +153,16 @@
                   <object class="GtkScrolledWindow" id="results_scrolledwindow">
                     <property name="can_focus">True</property>
                     <property name="no_show_all">True</property>
-                    <property name="hscrollbar_policy">automatic</property>
-                    <property name="vscrollbar_policy">automatic</property>
                     <property name="shadow_type">in</property>
                     <child>
                       <object class="GtkTreeView" id="results_treeview">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="rules_hint">True</property>
-                        <signal name="row_activated" handler="on_results_treeview_row_activated"/>
+                        <signal name="row-activated" handler="on_results_treeview_row_activated" swapped="no"/>
+                        <child internal-child="selection">
+                          <object class="GtkTreeSelection" id="treeview-selection1"/>
+                        </child>
                       </object>
                     </child>
                   </object>
@@ -182,25 +173,33 @@
                 </child>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">0</property>
           </packing>
         </child>
         <child>
           <object class="GtkHBox" id="hbox2">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
             <child>
               <object class="GtkCheckButton" id="log_history_checkbutton">
                 <property name="label" translatable="yes">_Log conversation history</property>
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="use_underline">True</property>
+                <property name="xalign">0.5</property>
                 <property name="active">True</property>
                 <property name="draw_indicator">True</property>
               </object>
@@ -230,23 +229,27 @@
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkHButtonBox" id="hbuttonbox">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="spacing">6</property>
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="close_button">
                 <property name="label">gtk-close</property>
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_close_button_clicked"/>
+                <signal name="clicked" handler="on_close_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
diff --git a/data/gui/input_dialog.ui b/data/gui/input_dialog.ui
index 1e475eb2b435077e3baad0402aa0ee670fdc0bcb..64c7269c1382cd5f68ead07d091e5fd0581ad6f9 100644
--- a/data/gui/input_dialog.ui
+++ b/data/gui/input_dialog.ui
@@ -1,51 +1,106 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkDialog" id="input_dialog">
+    <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="type_hint">dialog</property>
-    <property name="has_separator">False</property>
-    <signal name="destroy" handler="on_input_dialog_destroy"/>
-    <signal name="delete_event" handler="on_input_dialog_delete_event"/>
+    <signal name="destroy" handler="on_input_dialog_destroy" swapped="no"/>
+    <signal name="delete-event" handler="on_input_dialog_delete_event" swapped="no"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox10">
+      <object class="GtkBox" id="dialog-vbox10">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area9">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="cancelbutton">
+                <property name="label">gtk-cancel</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="okbutton">
+                <property name="label">gtk-ok</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkVBox" id="vbox">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="border_width">6</property>
-            <property name="orientation">vertical</property>
             <property name="spacing">6</property>
             <child>
               <object class="GtkHBox" id="hbox2960">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkImage" id="image507">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="stock">gtk-dialog-question</property>
                     <property name="icon-size">6</property>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkLabel" id="label">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="use_markup">True</property>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
@@ -62,50 +117,10 @@
               </packing>
             </child>
           </object>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area9">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="cancelbutton">
-                <property name="label">gtk-cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="okbutton">
-                <property name="label">gtk-ok</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="has_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
           <packing>
             <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
           </packing>
         </child>
       </object>
diff --git a/data/gui/input_text_dialog.ui b/data/gui/input_text_dialog.ui
index 68fc57979e6a29b9973135a1b167bd18c1e81ca8..c8584f696a296a78a01b4d85488a26a2bfa06d2b 100644
--- a/data/gui/input_text_dialog.ui
+++ b/data/gui/input_text_dialog.ui
@@ -1,51 +1,106 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkDialog" id="input_dialog">
+    <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="default_width">400</property>
     <property name="type_hint">dialog</property>
-    <property name="has_separator">False</property>
-    <signal name="destroy" handler="on_input_dialog_destroy"/>
+    <signal name="destroy" handler="on_input_dialog_destroy" swapped="no"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox10">
+      <object class="GtkBox" id="dialog-vbox10">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area9">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="cancelbutton">
+                <property name="label">gtk-cancel</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="okbutton">
+                <property name="label">gtk-ok</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkVBox" id="vbox76">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="border_width">6</property>
-            <property name="orientation">vertical</property>
             <property name="spacing">6</property>
             <child>
               <object class="GtkHBox" id="hbox2960">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkImage" id="image507">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="stock">gtk-dialog-question</property>
                     <property name="icon-size">6</property>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkLabel" id="label">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="use_markup">True</property>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
@@ -53,7 +108,6 @@
               <object class="GtkScrolledWindow" id="scrolledwindow1">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">automatic</property>
                 <property name="vscrollbar_policy">never</property>
                 <property name="shadow_type">in</property>
                 <child>
@@ -65,54 +119,16 @@
                 </child>
               </object>
               <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area9">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="cancelbutton">
-                <property name="label">gtk-cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="okbutton">
-                <property name="label">gtk-ok</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="has_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
           </object>
           <packing>
             <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
           </packing>
         </child>
       </object>
diff --git a/data/gui/join_groupchat_window.ui b/data/gui/join_groupchat_window.ui
index c2db0bc174c167681c50498f9881f6479a519aba..9e018f731bdbff138c2f89bcdeaffdf4e6369210 100644
--- a/data/gui/join_groupchat_window.ui
+++ b/data/gui/join_groupchat_window.ui
@@ -1,21 +1,32 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-find</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-apply</property>
+  </object>
   <object class="GtkWindow" id="join_groupchat_window">
+    <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes">Join Group Chat</property>
     <property name="type_hint">dialog</property>
-    <signal name="destroy" handler="on_join_groupchat_window_destroy"/>
-    <signal name="key_press_event" handler="on_join_groupchat_window_key_press_event"/>
+    <signal name="destroy" handler="on_join_groupchat_window_destroy" swapped="no"/>
+    <signal name="key-press-event" handler="on_join_groupchat_window_key_press_event" swapped="no"/>
     <child>
       <object class="GtkVBox" id="vbox28">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <property name="spacing">12</property>
         <child>
           <object class="GtkTable" id="table15">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="n_rows">8</property>
             <property name="n_columns">2</property>
             <property name="column_spacing">12</property>
@@ -26,14 +37,14 @@
                 <property name="can_focus">True</property>
                 <property name="has_focus">True</property>
                 <property name="activates_default">True</property>
-                <signal name="changed" handler="on_required_entry_changed"/>
+                <signal name="changed" handler="on_required_entry_changed" swapped="no"/>
               </object>
               <packing>
                 <property name="left_attach">1</property>
                 <property name="right_attach">2</property>
                 <property name="top_attach">3</property>
                 <property name="bottom_attach">4</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
@@ -41,19 +52,20 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="activates_default">True</property>
-                <signal name="changed" handler="on_required_entry_changed"/>
+                <signal name="changed" handler="on_required_entry_changed" swapped="no"/>
               </object>
               <packing>
                 <property name="left_attach">1</property>
                 <property name="right_attach">2</property>
                 <property name="top_attach">2</property>
                 <property name="bottom_attach">3</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label143">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">Room:</property>
               </object>
@@ -61,12 +73,13 @@
                 <property name="top_attach">3</property>
                 <property name="bottom_attach">4</property>
                 <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label142">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">Nickname:</property>
               </object>
@@ -74,12 +87,13 @@
                 <property name="top_attach">2</property>
                 <property name="bottom_attach">3</property>
                 <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label225">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">Recently:</property>
               </object>
@@ -87,13 +101,14 @@
                 <property name="top_attach">1</property>
                 <property name="bottom_attach">2</property>
                 <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
               <object class="GtkComboBox" id="recently_combobox">
                 <property name="visible">True</property>
-                <signal name="changed" handler="on_recently_combobox_changed"/>
+                <property name="can_focus">False</property>
+                <signal name="changed" handler="on_recently_combobox_changed" swapped="no"/>
               </object>
               <packing>
                 <property name="left_attach">1</property>
@@ -107,6 +122,7 @@
             <child>
               <object class="GtkLabel" id="label145">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">Password:</property>
               </object>
@@ -114,7 +130,7 @@
                 <property name="top_attach">5</property>
                 <property name="bottom_attach">6</property>
                 <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
@@ -129,7 +145,7 @@
                 <property name="right_attach">2</property>
                 <property name="top_attach">5</property>
                 <property name="bottom_attach">6</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
@@ -140,6 +156,7 @@
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
                 <property name="use_underline">True</property>
+                <property name="xalign">0</property>
                 <property name="draw_indicator">True</property>
               </object>
               <packing>
@@ -147,24 +164,26 @@
                 <property name="top_attach">7</property>
                 <property name="bottom_attach">8</property>
                 <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
               <object class="GtkLabel" id="account_label">
+                <property name="can_focus">False</property>
                 <property name="no_show_all">True</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">Account</property>
               </object>
               <packing>
                 <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
               <object class="GtkComboBox" id="account_combobox">
+                <property name="can_focus">False</property>
                 <property name="no_show_all">True</property>
-                <signal name="changed" handler="on_account_combobox_changed"/>
+                <signal name="changed" handler="on_account_combobox_changed" swapped="no"/>
               </object>
               <packing>
                 <property name="left_attach">1</property>
@@ -180,20 +199,22 @@
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
                 <property name="use_underline">True</property>
+                <property name="xalign">0</property>
                 <property name="draw_indicator">True</property>
-                <signal name="toggled" handler="on_bookmark_checkbutton_toggled"/>
+                <signal name="toggled" handler="on_bookmark_checkbutton_toggled" swapped="no"/>
               </object>
               <packing>
                 <property name="right_attach">2</property>
                 <property name="top_attach">6</property>
                 <property name="bottom_attach">7</property>
                 <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label1">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">Server:</property>
               </object>
@@ -205,16 +226,10 @@
             <child>
               <object class="GtkHBox" id="hbox1">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">6</property>
                 <child>
-                  <object class="GtkComboBoxEntry" id="server_comboboxentry">
-                    <property name="visible">True</property>
-                    <property name="model">liststore1</property>
-                    <property name="text_column">0</property>
-                  </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
+                  <placeholder/>
                 </child>
                 <child>
                   <object class="GtkButton" id="browse_rooms_button">
@@ -224,9 +239,12 @@
                     <property name="receives_default">True</property>
                     <property name="image">image1</property>
                     <property name="use_underline">True</property>
-                    <signal name="clicked" handler="on_browse_rooms_button_clicked"/>
+                    <signal name="clicked" handler="on_browse_rooms_button_clicked" swapped="no"/>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="pack_type">end</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
@@ -242,12 +260,14 @@
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">0</property>
           </packing>
         </child>
         <child>
           <object class="GtkHButtonBox" id="hbuttonbox12">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="spacing">12</property>
             <property name="layout_style">end</property>
             <child>
@@ -258,7 +278,7 @@
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_cancel_button_clicked"/>
+                <signal name="clicked" handler="on_cancel_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -268,48 +288,15 @@
             </child>
             <child>
               <object class="GtkButton" id="join_button">
+                <property name="label" translatable="yes">_Join</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="has_default">True</property>
                 <property name="receives_default">False</property>
-                <signal name="clicked" handler="on_join_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment25">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox37">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image148">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-apply</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label146">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">_Join</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
+                <property name="image">image2</property>
+                <property name="use_underline">True</property>
+                <signal name="clicked" handler="on_join_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -320,6 +307,7 @@
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="pack_type">end</property>
             <property name="position">1</property>
           </packing>
@@ -327,14 +315,4 @@
       </object>
     </child>
   </object>
-  <object class="GtkListStore" id="liststore1">
-    <columns>
-      <!-- column-name gchararray1 -->
-      <column type="gchararray"/>
-    </columns>
-  </object>
-  <object class="GtkImage" id="image1">
-    <property name="visible">True</property>
-    <property name="stock">gtk-find</property>
-  </object>
 </interface>
diff --git a/data/gui/manage_bookmarks_window.ui b/data/gui/manage_bookmarks_window.ui
index 752aeaa30d4cd8b9c217cd0c76f11ed2c334ae25..f61987d6cee97fd711829b6fdf3ebd84a91c04cc 100644
--- a/data/gui/manage_bookmarks_window.ui
+++ b/data/gui/manage_bookmarks_window.ui
@@ -51,7 +51,7 @@
                   <object class="GtkHButtonBox" id="hbuttonbox25">
                     <property name="visible">True</property>
                     <property name="spacing">6</property>
-                    <property name="layout_style">end</property>
+                    <property name="layout_style">center</property>
                     <child>
                       <object class="GtkButton" id="add_bookmark_button">
                         <property name="label">gtk-add</property>
@@ -113,7 +113,7 @@
                     <property name="top_attach">4</property>
                     <property name="bottom_attach">5</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -128,7 +128,7 @@
                     <property name="right_attach">2</property>
                     <property name="top_attach">4</property>
                     <property name="bottom_attach">5</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -142,7 +142,7 @@
                     <property name="right_attach">2</property>
                     <property name="top_attach">3</property>
                     <property name="bottom_attach">4</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -156,7 +156,7 @@
                     <property name="top_attach">3</property>
                     <property name="bottom_attach">4</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -170,7 +170,7 @@
                     <property name="top_attach">2</property>
                     <property name="bottom_attach">3</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -184,7 +184,7 @@
                     <property name="right_attach">2</property>
                     <property name="top_attach">2</property>
                     <property name="bottom_attach">3</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -198,7 +198,7 @@
                     <property name="right_attach">2</property>
                     <property name="top_attach">1</property>
                     <property name="bottom_attach">2</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -212,7 +212,7 @@
                     <property name="top_attach">1</property>
                     <property name="bottom_attach">2</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -224,7 +224,7 @@
                   </object>
                   <packing>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -236,7 +236,7 @@
                   <packing>
                     <property name="left_attach">1</property>
                     <property name="right_attach">2</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
@@ -250,7 +250,7 @@
                     <property name="top_attach">6</property>
                     <property name="bottom_attach">7</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
+                    <property name="y_options"/>
                   </packing>
                 </child>
                 <child>
diff --git a/data/gui/manage_pep_services_window.ui b/data/gui/manage_pep_services_window.ui
index e73aaea323db3f45a2479fa6d040de17ee62749b..778a99775733d30cbfcb93e0ac21218c336d4608 100644
--- a/data/gui/manage_pep_services_window.ui
+++ b/data/gui/manage_pep_services_window.ui
@@ -55,38 +55,14 @@
             </child>
             <child>
               <object class="GtkButton" id="configure_button">
+                <property name="label" translatable="yes">_Configure</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="image">image1</property>
+                <property name="use_underline">True</property>
                 <signal name="clicked" handler="on_configure_button_clicked"/>
-                <child>
-                  <object class="GtkHBox" id="hbox1">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <child>
-                      <object class="GtkImage" id="image1">
-                        <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="stock">gtk-preferences</property>
-                      </object>
-                      <packing>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label1">
-                        <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="label" translatable="yes">_Configure</property>
-                        <property name="use_underline">True</property>
-                      </object>
-                      <packing>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                  </object>
-                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -120,4 +96,8 @@
       </object>
     </child>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-preferences</property>
+  </object>
 </interface>
diff --git a/data/gui/manage_proxies_window.ui b/data/gui/manage_proxies_window.ui
index 0fe8109e5b7e046ca59161755c89ce0f8b84f679..ce1b419a2dd4c71be845810d34a45a6c8c07c9e5 100644
--- a/data/gui/manage_proxies_window.ui
+++ b/data/gui/manage_proxies_window.ui
@@ -22,6 +22,7 @@
   <object class="GtkWindow" id="manage_proxies_window">
     <property name="border_width">12</property>
     <property name="title" translatable="yes">Manage Proxy Profiles</property>
+    <property name="window_position">center-on-parent</property>
     <property name="type_hint">dialog</property>
     <signal name="destroy" handler="on_manage_proxies_window_destroy"/>
     <child>
@@ -63,7 +64,7 @@
                   <object class="GtkHButtonBox" id="hbuttonbox21">
                     <property name="visible">True</property>
                     <property name="spacing">6</property>
-                    <property name="layout_style">end</property>
+                    <property name="layout_style">center</property>
                     <child>
                       <object class="GtkButton" id="add_proxy_button">
                         <property name="label">gtk-add</property>
@@ -137,7 +138,7 @@
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">2</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -172,7 +173,7 @@
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
                                 <property name="x_options">GTK_FILL</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -185,7 +186,7 @@
                               </object>
                               <packing>
                                 <property name="x_options">GTK_FILL</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                           </object>
@@ -237,7 +238,7 @@
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
                                 <property name="x_options">GTK_FILL</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -249,7 +250,7 @@
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">2</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -262,7 +263,7 @@
                               </object>
                               <packing>
                                 <property name="x_options">GTK_FILL</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -280,7 +281,7 @@
                                 <property name="top_attach">4</property>
                                 <property name="bottom_attach">5</property>
                                 <property name="x_options">GTK_FILL</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -294,7 +295,7 @@
                                 <property name="right_attach">2</property>
                                 <property name="top_attach">5</property>
                                 <property name="bottom_attach">6</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -309,7 +310,7 @@
                                 <property name="right_attach">2</property>
                                 <property name="top_attach">6</property>
                                 <property name="bottom_attach">7</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -324,7 +325,7 @@
                                 <property name="top_attach">5</property>
                                 <property name="bottom_attach">6</property>
                                 <property name="x_options">GTK_FILL</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -339,7 +340,7 @@
                                 <property name="top_attach">6</property>
                                 <property name="bottom_attach">7</property>
                                 <property name="x_options">GTK_FILL</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -354,7 +355,7 @@
                                 <property name="top_attach">2</property>
                                 <property name="bottom_attach">3</property>
                                 <property name="x_options">GTK_FILL</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -368,7 +369,7 @@
                                 <property name="right_attach">2</property>
                                 <property name="top_attach">3</property>
                                 <property name="bottom_attach">4</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -382,7 +383,7 @@
                                 <property name="right_attach">2</property>
                                 <property name="top_attach">2</property>
                                 <property name="bottom_attach">3</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -397,7 +398,7 @@
                                 <property name="top_attach">3</property>
                                 <property name="bottom_attach">4</property>
                                 <property name="x_options">GTK_FILL</property>
-                                <property name="y_options"></property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                           </object>
diff --git a/data/gui/manage_sounds_window.ui b/data/gui/manage_sounds_window.ui
index b1243a1eb4f26606383a0a76e5506b5736b689e9..798413880ca18ebae7ab9972ba125e1c2d0cd494 100644
--- a/data/gui/manage_sounds_window.ui
+++ b/data/gui/manage_sounds_window.ui
@@ -7,6 +7,7 @@
     <property name="height_request">350</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes">Manage sounds</property>
+    <property name="window_position">center-on-parent</property>
     <property name="type_hint">dialog</property>
     <signal name="delete_event" handler="on_manage_sounds_window_delete_event"/>
     <child>
diff --git a/data/gui/message_window.ui b/data/gui/message_window.ui
index b801f82906eb13ec701468abdea682dc3ed8f836..da9982ba491ef842be43da160bbb08d997f96b78 100644
--- a/data/gui/message_window.ui
+++ b/data/gui/message_window.ui
@@ -1,34 +1,19 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
-  <object class="GtkWindow" id="message_window">
-    <property name="default_width">480</property>
-    <property name="default_height">440</property>
-    <child>
-      <object class="GtkAlignment" id="msg_window_alignment">
-        <property name="visible">True</property>
-        <property name="top_padding">2</property>
-        <child>
-          <object class="GtkNotebook" id="notebook">
-            <property name="visible">True</property>
-            <property name="scrollable">True</property>
-            <property name="tab_border">0</property>
-          </object>
-        </child>
-      </object>
-    </child>
-  </object>
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkEventBox" id="chat_tab_ebox">
     <property name="visible">True</property>
+    <property name="can_focus">False</property>
     <property name="visible_window">False</property>
     <child>
       <object class="GtkHBox" id="tab_hbox">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="spacing">4</property>
         <child>
           <object class="GtkImage" id="tab_image">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="stock">gtk-missing-image</property>
           </object>
           <packing>
@@ -39,25 +24,32 @@
         </child>
         <child>
           <object class="GtkLabel" id="tab_label">
+            <property name="width_request">70</property>
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="xalign">0</property>
             <property name="use_markup">True</property>
             <property name="ellipsize">end</property>
             <property name="max_width_chars">9</property>
           </object>
           <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
             <property name="position">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="tab_close_button">
+            <property name="use_action_appearance">False</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
+            <property name="use_action_appearance">False</property>
             <property name="relief">none</property>
             <child>
               <object class="GtkImage" id="image1329">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="stock">gtk-close</property>
                 <property name="icon-size">1</property>
               </object>
@@ -72,4 +64,23 @@
       </object>
     </child>
   </object>
+  <object class="GtkWindow" id="message_window">
+    <property name="can_focus">False</property>
+    <property name="default_width">480</property>
+    <property name="default_height">440</property>
+    <child>
+      <object class="GtkAlignment" id="msg_window_alignment">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="top_padding">2</property>
+        <child>
+          <object class="GtkNotebook" id="notebook">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="scrollable">True</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
 </interface>
diff --git a/data/gui/plugins_window.ui b/data/gui/plugins_window.ui
index 357815983829a2666b1d8c1a67bf2d0807106136..2ddcd5efa5615454852fbf2d09c68dbd27a29f05 100644
--- a/data/gui/plugins_window.ui
+++ b/data/gui/plugins_window.ui
@@ -1,39 +1,55 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-apply</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-cancel</property>
+  </object>
+  <object class="GtkImage" id="image3">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-preferences</property>
+  </object>
   <object class="GtkWindow" id="plugins_window">
     <property name="width_request">650</property>
     <property name="height_request">500</property>
+    <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes">Plugins</property>
     <property name="default_width">650</property>
     <property name="default_height">500</property>
     <property name="type_hint">dialog</property>
-    <signal name="destroy" handler="on_plugins_window_destroy"/>
+    <signal name="destroy" handler="on_plugins_window_destroy" swapped="no"/>
     <child>
       <object class="GtkVBox" id="vbox1">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <property name="spacing">6</property>
         <child>
           <object class="GtkNotebook" id="plugins_notebook">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <signal name="switch_page" handler="on_plugins_notebook_switch_page"/>
+            <signal name="switch-page" handler="on_plugins_notebook_switch_page" swapped="no"/>
             <child>
               <object class="GtkHPaned" id="hpaned1">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="position">250</property>
+                <property name="position_set">True</property>
                 <child>
                   <object class="GtkAlignment" id="alignment1">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <child>
                       <object class="GtkVBox" id="vbox6">
                         <property name="visible">True</property>
-                        <property name="orientation">vertical</property>
+                        <property name="can_focus">False</property>
                         <child>
                           <object class="GtkScrolledWindow" id="scrolledwindow1">
                             <property name="visible">True</property>
@@ -48,50 +64,32 @@
                             </child>
                           </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkAspectFrame" id="aspectframe1">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="label_xalign">0</property>
                             <property name="shadow_type">none</property>
                             <property name="xalign">0</property>
                             <child>
                               <object class="GtkButton" id="install_plugin_button">
+                                <property name="label" translatable="yes">Install from zip</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="clicked" handler="on_install_plugin_button_clicked"/>
-                                <child>
-                                  <object class="GtkHBox" id="hbox8">
-                                    <property name="visible">True</property>
-                                    <child>
-                                      <object class="GtkImage" id="image2">
-                                        <property name="visible">True</property>
-                                        <property name="stock">gtk-apply</property>
-                                      </object>
-                                      <packing>
-                                        <property name="position">0</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <object class="GtkLabel" id="configure_plugin_button_label2">
-                                        <property name="visible">True</property>
-                                        <property name="xalign">0</property>
-                                        <property name="label" translatable="yes">Install from zip</property>
-                                      </object>
-                                      <packing>
-                                        <property name="position">1</property>
-                                      </packing>
-                                    </child>
-                                  </object>
-                                </child>
+                                <property name="image">image1</property>
+                                <signal name="clicked" handler="on_install_plugin_button_clicked" swapped="no"/>
                               </object>
                             </child>
                           </object>
                           <packing>
                             <property name="expand">False</property>
+                            <property name="fill">True</property>
                             <property name="padding">5</property>
                             <property name="position">1</property>
                           </packing>
@@ -107,104 +105,125 @@
                 <child>
                   <object class="GtkVBox" id="vbox2">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="border_width">6</property>
-                    <property name="orientation">vertical</property>
                     <property name="spacing">6</property>
                     <child>
                       <object class="GtkLabel" id="plugin_name_label">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="xalign">0</property>
                         <property name="label" translatable="yes">&amp;lt;empty&amp;gt;</property>
-                        <property name="use_markup">True</property>
                         <property name="selectable">True</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkHBox" id="hbox1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="spacing">6</property>
                         <child>
                           <object class="GtkLabel" id="label5">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="label" translatable="yes">Version:</property>
                           </object>
                           <packing>
                             <property name="expand">False</property>
+                            <property name="fill">True</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkLabel" id="plugin_version_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
-                            <property name="label" translatable="yes">&lt;empty&gt;</property>
+                            <property name="label">&lt;empty&gt;</property>
                             <property name="selectable">True</property>
                           </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkHBox" id="hbox2">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="spacing">6</property>
                         <child>
                           <object class="GtkLabel" id="label4">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="yalign">0</property>
                             <property name="label" translatable="yes">Authors:</property>
                           </object>
                           <packing>
                             <property name="expand">False</property>
+                            <property name="fill">True</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkLabel" id="plugin_authors_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="yalign">0</property>
-                            <property name="label" translatable="yes">&lt;empty&gt;</property>
+                            <property name="label">&lt;empty&gt;</property>
                             <property name="wrap_mode">word-char</property>
                             <property name="selectable">True</property>
                             <property name="ellipsize">end</property>
                           </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">2</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkHBox" id="hbox3">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <child>
                           <object class="GtkLabel" id="label6">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="label" translatable="yes">Homepage:</property>
                           </object>
                           <packing>
                             <property name="expand">False</property>
+                            <property name="fill">True</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkLinkButton" id="plugin_homepage_linkbutton">
-                            <property name="label" translatable="yes">homepage url</property>
+                            <property name="label">homepage url</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">True</property>
@@ -213,28 +232,35 @@
                             <property name="xalign">0</property>
                           </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">3</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkVBox" id="vbox3">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <child>
                           <object class="GtkHBox" id="hbox5">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <child>
                               <object class="GtkLabel" id="label7">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="label" translatable="yes">Description:</property>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
+                                <property name="fill">True</property>
                                 <property name="position">0</property>
                               </packing>
                             </child>
@@ -244,6 +270,7 @@
                           </object>
                           <packing>
                             <property name="expand">False</property>
+                            <property name="fill">True</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
@@ -251,56 +278,38 @@
                           <object class="GtkScrolledWindow" id="scrolledwindow2">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="hscrollbar_policy">automatic</property>
-                            <property name="vscrollbar_policy">automatic</property>
+                            <property name="shadow_type">in</property>
                             <child>
                               <placeholder/>
                             </child>
                           </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
                       </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">4</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkHButtonBox" id="hbuttonbox3">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="spacing">5</property>
                         <property name="layout_style">end</property>
                         <child>
                           <object class="GtkButton" id="uninstall_plugin_button">
+                            <property name="label" translatable="yes">Uninstall</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">True</property>
-                            <signal name="clicked" handler="on_uninstall_plugin_button_clicked"/>
-                            <child>
-                              <object class="GtkHBox" id="hbox6">
-                                <property name="visible">True</property>
-                                <child>
-                                  <object class="GtkImage" id="image5">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-cancel</property>
-                                  </object>
-                                  <packing>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkLabel" id="uninstall_plugin_button_label1">
-                                    <property name="visible">True</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">Uninstall</property>
-                                  </object>
-                                  <packing>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </object>
-                            </child>
+                            <property name="image">image2</property>
+                            <signal name="clicked" handler="on_uninstall_plugin_button_clicked" swapped="no"/>
                           </object>
                           <packing>
                             <property name="expand">False</property>
@@ -310,34 +319,12 @@
                         </child>
                         <child>
                           <object class="GtkButton" id="configure_plugin_button">
+                            <property name="label" translatable="yes">Configure</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">True</property>
-                            <signal name="clicked" handler="on_configure_plugin_button_clicked"/>
-                            <child>
-                              <object class="GtkHBox" id="hbox7">
-                                <property name="visible">True</property>
-                                <child>
-                                  <object class="GtkImage" id="image6">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-preferences</property>
-                                  </object>
-                                  <packing>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkLabel" id="configure_plugin_button_label1">
-                                    <property name="visible">True</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">Configure</property>
-                                  </object>
-                                  <packing>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </object>
-                            </child>
+                            <property name="image">image3</property>
+                            <signal name="clicked" handler="on_configure_plugin_button_clicked" swapped="no"/>
                           </object>
                           <packing>
                             <property name="expand">False</property>
@@ -348,13 +335,14 @@
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">5</property>
                       </packing>
                     </child>
                   </object>
                   <packing>
                     <property name="resize">True</property>
-                    <property name="shrink">True</property>
+                    <property name="shrink">False</property>
                   </packing>
                 </child>
               </object>
@@ -362,6 +350,7 @@
             <child type="tab">
               <object class="GtkLabel" id="label1">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">Installed</property>
               </object>
               <packing>
@@ -376,12 +365,15 @@
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">0</property>
           </packing>
         </child>
         <child>
           <object class="GtkHButtonBox" id="hbuttonbox1">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="spacing">15</property>
             <property name="layout_style">end</property>
             <child>
@@ -391,7 +383,7 @@
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_close_button_clicked"/>
+                <signal name="clicked" handler="on_close_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -402,6 +394,7 @@
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
diff --git a/data/gui/preferences_window.ui b/data/gui/preferences_window.ui
index d9ea88655ee2e0a05df56ca738bfba4bbd2595c0..43068b2136a73c9de67d7ed4d03af01521b55a0f 100644
--- a/data/gui/preferences_window.ui
+++ b/data/gui/preferences_window.ui
@@ -1,21 +1,30 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkAdjustment" id="adjustment1">
-    <property name="value">20</property>
     <property name="lower">1</property>
     <property name="upper">1440</property>
+    <property name="value">20</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
   <object class="GtkAdjustment" id="adjustment2">
-    <property name="value">12</property>
     <property name="lower">1</property>
     <property name="upper">720</property>
+    <property name="value">12</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-revert-to-saved</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-open</property>
+  </object>
   <object class="GtkListStore" id="liststore1">
     <columns>
       <!-- column-name item -->
@@ -149,47 +158,68 @@
       </row>
     </data>
   </object>
+  <object class="GtkListStore" id="status_message_liststore">
+    <columns>
+      <!-- column-name name -->
+      <column type="gchararray"/>
+      <!-- column-name text -->
+      <column type="gchararray"/>
+      <!-- column-name activity -->
+      <column type="gchararray"/>
+      <!-- column-name sub_activity -->
+      <column type="gchararray"/>
+      <!-- column-name activity_text -->
+      <column type="gchararray"/>
+      <!-- column-name mood -->
+      <column type="gchararray"/>
+      <!-- column-name mood_text -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
   <object class="GtkWindow" id="preferences_window">
+    <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes">Preferences</property>
     <property name="role">preferences</property>
     <property name="type_hint">dialog</property>
-    <signal name="destroy" handler="on_preferences_window_destroy"/>
-    <signal name="key_press_event" handler="on_preferences_window_key_press_event"/>
+    <signal name="destroy" handler="on_preferences_window_destroy" swapped="no"/>
+    <signal name="key-press-event" handler="on_preferences_window_key_press_event" swapped="no"/>
     <child>
       <object class="GtkVBox" id="vbox13">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <property name="spacing">6</property>
         <child>
           <object class="GtkNotebook" id="preferences_notebook">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="show_border">False</property>
-            <signal name="switch_page" handler="on_preferences_notebook_switch_page"/>
+            <signal name="switch-page" handler="on_preferences_notebook_switch_page" swapped="no"/>
             <child>
               <object class="GtkVBox" id="vbox41">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="border_width">12</property>
-                <property name="orientation">vertical</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkFrame" id="frame1">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkVBox" id="vbox1">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="orientation">vertical</property>
                             <property name="spacing">6</property>
                             <child>
                               <object class="GtkCheckButton" id="show_avatars_in_roster_checkbutton">
@@ -199,8 +229,9 @@
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">If checked, Gajim will display avatars of contacts in roster window and in group chats</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_show_avatars_in_roster_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_show_avatars_in_roster_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -216,8 +247,9 @@
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">If checked, Gajim will display status messages of contacts under the contact name in roster window and in group chats</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_show_status_msgs_in_roster_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_show_status_msgs_in_roster_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -227,14 +259,15 @@
                             </child>
                             <child>
                               <object class="GtkCheckButton" id="show_pep_in_roster_checkbutton">
-                                <property name="label" translatable="yes">Display e_xtra information of contacts in roster (mood, activity, ...)</property>
+                                <property name="label" translatable="yes">Display e_xtra information of contacts in roster (mood, activity, ...)m_ood of contacts in roster</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">If checked, Gajim will display the mood of contacts in the roster window</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_show_pep_in_roster_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_show_pep_in_roster_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -245,14 +278,17 @@
                             <child>
                               <object class="GtkHBox" id="hbox3">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="spacing">6</property>
                                 <child>
                                   <object class="GtkLabel" id="label10">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="label" translatable="yes">Sort contacts by status</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="position">0</property>
                                   </packing>
                                 </child>
@@ -263,11 +299,13 @@
                                     <property name="can_focus">True</property>
                                     <property name="receives_default">False</property>
                                     <property name="use_underline">True</property>
+                                    <property name="xalign">0</property>
                                     <property name="draw_indicator">True</property>
-                                    <signal name="toggled" handler="on_sort_by_show_in_roster_checkbutton_toggled"/>
+                                    <signal name="toggled" handler="on_sort_by_show_in_roster_checkbutton_toggled" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
@@ -278,15 +316,20 @@
                                     <property name="can_focus">True</property>
                                     <property name="receives_default">False</property>
                                     <property name="use_underline">True</property>
+                                    <property name="xalign">0</property>
                                     <property name="draw_indicator">True</property>
-                                    <signal name="toggled" handler="on_sort_by_show_in_muc_checkbutton_toggled"/>
+                                    <signal name="toggled" handler="on_sort_by_show_in_muc_checkbutton_toggled" swapped="no"/>
                                   </object>
                                   <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
                                     <property name="position">2</property>
                                   </packing>
                                 </child>
                               </object>
                               <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
                                 <property name="position">3</property>
                               </packing>
                             </child>
@@ -297,6 +340,7 @@
                     <child type="label">
                       <object class="GtkLabel" id="label1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="label" translatable="yes">&lt;b&gt;Roster Appearance&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
@@ -305,24 +349,28 @@
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkFrame" id="frame2">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment2">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkTable" id="table1">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                             <property name="n_rows">7</property>
                             <property name="n_columns">2</property>
@@ -331,6 +379,7 @@
                             <child>
                               <object class="GtkLabel" id="label379">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="xpad">1</property>
                                 <property name="label" translatable="yes">_Window behavior:</property>
@@ -346,7 +395,8 @@
                             <child>
                               <object class="GtkComboBox" id="emoticons_combobox">
                                 <property name="visible">True</property>
-                                <signal name="changed" handler="on_emoticons_combobox_changed"/>
+                                <property name="can_focus">False</property>
+                                <signal name="changed" handler="on_emoticons_combobox_changed" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -356,10 +406,12 @@
                             <child>
                               <object class="GtkEventBox" id="eventbox5">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="tooltip_text" translatable="yes">If not disabled, Gajim will replace ascii smilies like ':)' with equivalent animated or static graphical emoticons</property>
                                 <child>
                                   <object class="GtkLabel" id="label381">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="xalign">0</property>
                                     <property name="xpad">1</property>
                                     <property name="label" translatable="yes">_Emoticons:</property>
@@ -378,8 +430,9 @@
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">Hide all buttons in chat windows</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_compact_view_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_compact_view_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="right_attach">2</property>
@@ -396,8 +449,9 @@
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">Some messages may include rich content (formatting, colors etc). If checked, Gajim will just display the raw message text.</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_xhtml_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_xhtml_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="right_attach">2</property>
@@ -413,8 +467,9 @@
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">If checked, Gajim will highlight spelling errors in input fields of chat windows. If no language is explicitly set via right click on the input field, the default language will be used for this contact or group chat.</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_speller_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_speller_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="right_attach">2</property>
@@ -427,8 +482,9 @@
                               <object class="GtkComboBox" id="one_window_type_combobox">
                                 <property name="width_request">50</property>
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="model">liststore6</property>
-                                <signal name="changed" handler="on_one_window_type_combo_changed"/>
+                                <signal name="changed" handler="on_one_window_type_combo_changed" swapped="no"/>
                                 <child>
                                   <object class="GtkCellRendererText" id="cellrenderertext6"/>
                                   <attributes>
@@ -446,6 +502,7 @@
                             <child>
                               <object class="GtkLabel" id="label28">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="xpad">1</property>
                                 <property name="label" translatable="yes">_Show roster on startup:</property>
@@ -462,8 +519,9 @@
                               <object class="GtkComboBox" id="show_roster_on_startup">
                                 <property name="width_request">50</property>
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="model">liststore7</property>
-                                <signal name="changed" handler="on_show_roster_on_startup_changed"/>
+                                <signal name="changed" handler="on_show_roster_on_startup_changed" swapped="no"/>
                                 <child>
                                   <object class="GtkCellRendererText" id="cellrenderertext7"/>
                                   <attributes>
@@ -484,8 +542,9 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_positive_184_ack_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_positive_184_ack_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="right_attach">2</property>
@@ -500,6 +559,7 @@
                     <child type="label">
                       <object class="GtkLabel" id="label2">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="label" translatable="yes">&lt;b&gt;Chat Appearance&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
@@ -508,6 +568,7 @@
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
@@ -516,6 +577,7 @@
             <child type="tab">
               <object class="GtkLabel" id="label74">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">General</property>
               </object>
               <packing>
@@ -525,47 +587,53 @@
             <child>
               <object class="GtkVBox" id="vbox42">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="border_width">12</property>
-                <property name="orientation">vertical</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkFrame" id="frame29">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment58">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkVBox" id="vbox67">
                             <property name="visible">True</property>
-                            <property name="orientation">vertical</property>
+                            <property name="can_focus">False</property>
                             <property name="spacing">6</property>
                             <child>
                               <object class="GtkHBox" id="hbox1">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                                 <property name="spacing">6</property>
                                 <child>
                                   <object class="GtkLabel" id="label7">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                                     <property name="xalign">0</property>
                                     <property name="label" translatable="yes">When new event is received:</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="position">0</property>
                                   </packing>
                                 </child>
                                 <child>
                                   <object class="GtkComboBox" id="on_event_combobox">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                                     <property name="model">liststore5</property>
-                                    <signal name="changed" handler="on_on_event_combobox_changed"/>
+                                    <signal name="changed" handler="on_on_event_combobox_changed" swapped="no"/>
                                     <child>
                                       <object class="GtkCellRendererText" id="cellrenderertext5"/>
                                       <attributes>
@@ -574,11 +642,15 @@
                                     </child>
                                   </object>
                                   <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
                               </object>
                               <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
                                 <property name="position">0</property>
                               </packing>
                             </child>
@@ -590,10 +662,13 @@
                                 <property name="receives_default">False</property>
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_notify_on_signin_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_notify_on_signin_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
                                 <property name="position">1</property>
                               </packing>
                             </child>
@@ -605,8 +680,9 @@
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">Gajim will notify you via a popup window in the bottom right of the screen about contacts that just signed out</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_notify_on_signout_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_notify_on_signout_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -621,8 +697,9 @@
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_auto_popup_away_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_auto_popup_away_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -634,17 +711,19 @@
                               <object class="GtkFrame" id="frame_gmail">
                                 <property name="visible">True</property>
                                 <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
                                 <property name="no_show_all">True</property>
                                 <property name="label_xalign">0</property>
                                 <property name="shadow_type">none</property>
                                 <child>
                                   <object class="GtkAlignment" id="alignment_gmail">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="left_padding">12</property>
                                     <child>
                                       <object class="GtkVBox" id="vbox_gmail">
                                         <property name="visible">True</property>
-                                        <property name="orientation">vertical</property>
+                                        <property name="can_focus">False</property>
                                         <property name="spacing">6</property>
                                         <child>
                                           <object class="GtkCheckButton" id="notify_gmail_checkbutton">
@@ -654,8 +733,9 @@
                                             <property name="receives_default">False</property>
                                             <property name="tooltip_text" translatable="yes">If checked, Gajim will show a notification when a new e-mail is received via GMail</property>
                                             <property name="use_underline">True</property>
+                                            <property name="xalign">0</property>
                                             <property name="draw_indicator">True</property>
-                                            <signal name="toggled" handler="on_notify_gmail_checkbutton_toggled"/>
+                                            <signal name="toggled" handler="on_notify_gmail_checkbutton_toggled" swapped="no"/>
                                           </object>
                                           <packing>
                                             <property name="expand">False</property>
@@ -671,8 +751,9 @@
                                             <property name="receives_default">False</property>
                                             <property name="tooltip_text" translatable="yes">If checked, Gajim will also include information about the sender of new emails</property>
                                             <property name="use_underline">True</property>
+                                            <property name="xalign">0</property>
                                             <property name="draw_indicator">True</property>
-                                            <signal name="toggled" handler="on_notify_gmail_extra_checkbutton_toggled"/>
+                                            <signal name="toggled" handler="on_notify_gmail_extra_checkbutton_toggled" swapped="no"/>
                                           </object>
                                           <packing>
                                             <property name="expand">False</property>
@@ -687,6 +768,7 @@
                                 <child type="label">
                                   <object class="GtkLabel" id="gmail_options_label">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="label" translatable="yes">&lt;b&gt;GMail Options&lt;/b&gt;</property>
                                     <property name="use_markup">True</property>
                                   </object>
@@ -701,22 +783,26 @@
                             <child>
                               <object class="GtkHBox" id="hbox5">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="spacing">6</property>
                                 <child>
                                   <object class="GtkLabel" id="label11">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="label" translatable="yes">Show notification area icon:</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="position">0</property>
                                   </packing>
                                 </child>
                                 <child>
                                   <object class="GtkComboBox" id="systray_combobox">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="model">liststore4</property>
-                                    <signal name="changed" handler="on_systray_combobox_changed"/>
+                                    <signal name="changed" handler="on_systray_combobox_changed" swapped="no"/>
                                     <child>
                                       <object class="GtkCellRendererText" id="cellrenderertext4"/>
                                       <attributes>
@@ -725,12 +811,15 @@
                                     </child>
                                   </object>
                                   <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
+                                <property name="fill">True</property>
                                 <property name="position">5</property>
                               </packing>
                             </child>
@@ -741,6 +830,7 @@
                     <child type="label">
                       <object class="GtkLabel" id="label240">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Visual Notifications&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
@@ -748,29 +838,33 @@
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkFrame" id="frame5">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment5">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkVBox" id="vbox3">
                             <property name="visible">True</property>
-                            <property name="orientation">vertical</property>
+                            <property name="can_focus">False</property>
                             <property name="spacing">6</property>
                             <child>
                               <object class="GtkHBox" id="hbox4">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="spacing">6</property>
                                 <child>
                                   <object class="GtkCheckButton" id="play_sounds_checkbutton">
@@ -779,11 +873,13 @@
                                     <property name="can_focus">True</property>
                                     <property name="receives_default">False</property>
                                     <property name="use_underline">True</property>
+                                    <property name="xalign">0</property>
                                     <property name="draw_indicator">True</property>
-                                    <signal name="toggled" handler="on_play_sounds_checkbutton_toggled"/>
+                                    <signal name="toggled" handler="on_play_sounds_checkbutton_toggled" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="position">0</property>
                                   </packing>
                                 </child>
@@ -794,15 +890,18 @@
                                     <property name="can_focus">True</property>
                                     <property name="receives_default">True</property>
                                     <property name="use_underline">True</property>
-                                    <signal name="clicked" handler="on_manage_sounds_button_clicked"/>
+                                    <signal name="clicked" handler="on_manage_sounds_button_clicked" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
                               </object>
                               <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
                                 <property name="position">0</property>
                               </packing>
                             </child>
@@ -813,10 +912,13 @@
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_sound_dnd_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_sound_dnd_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
                                 <property name="position">1</property>
                               </packing>
                             </child>
@@ -827,6 +929,7 @@
                     <child type="label">
                       <object class="GtkLabel" id="label8">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="label" translatable="yes">&lt;b&gt;Sounds&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
@@ -835,6 +938,7 @@
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
@@ -846,6 +950,7 @@
             <child type="tab">
               <object class="GtkLabel" id="label76">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="no_show_all">True</property>
                 <property name="label" translatable="yes">Notifications</property>
               </object>
@@ -857,24 +962,31 @@
             <child>
               <object class="GtkVBox" id="vbox11">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="border_width">12</property>
-                <property name="orientation">vertical</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkFrame" id="frame13">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="label_xalign">0</property>
+                    <property name="label_yalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment19">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="border_width">6</property>
+                        <property name="xalign">0</property>
+                        <property name="yalign">0</property>
+                        <property name="yscale">0</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkTable" id="table7">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                             <property name="n_rows">2</property>
                             <property name="n_columns">2</property>
@@ -883,8 +995,9 @@
                             <child>
                               <object class="GtkComboBox" id="displayed_chat_states_combobox">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="model">liststore3</property>
-                                <signal name="changed" handler="on_displayed_chat_states_combobox_changed"/>
+                                <signal name="changed" handler="on_displayed_chat_states_combobox_changed" swapped="no"/>
                                 <child>
                                   <object class="GtkCellRendererText" id="cellrenderertext3"/>
                                   <attributes>
@@ -897,15 +1010,18 @@
                                 <property name="right_attach">2</property>
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkEventBox" id="eventbox8">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="tooltip_text" translatable="yes">Gajim can send and receive meta-information related to a conversation you may have with a contact. Here you can specify which chatstates you want to display in chat windows.</property>
                                 <child>
                                   <object class="GtkLabel" id="label33">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="xalign">0</property>
                                     <property name="label" translatable="yes">_Display chat state notifications:</property>
                                     <property name="use_underline">True</property>
@@ -921,10 +1037,12 @@
                             <child>
                               <object class="GtkEventBox" id="eventbox9">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="tooltip_text" translatable="yes">Gajim can send and receive meta-information related to a conversation you may have with a contact. Here you can specify which chatstates you want to send to the other party.</property>
                                 <child>
                                   <object class="GtkLabel" id="label34">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="xalign">0</property>
                                     <property name="label" translatable="yes">_Send chat state notifications:</property>
                                     <property name="use_underline">True</property>
@@ -938,8 +1056,9 @@
                             <child>
                               <object class="GtkComboBox" id="outgoing_chat_states_combobox">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="model">liststore2</property>
-                                <signal name="changed" handler="on_outgoing_chat_states_combobox_changed"/>
+                                <signal name="changed" handler="on_outgoing_chat_states_combobox_changed" swapped="no"/>
                                 <child>
                                   <object class="GtkCellRendererText" id="cellrenderertext2"/>
                                   <attributes>
@@ -950,6 +1069,7 @@
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">2</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                           </object>
@@ -959,6 +1079,7 @@
                     <child type="label">
                       <object class="GtkLabel" id="label35">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="label" translatable="yes">&lt;b&gt;Chat state notifications&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
@@ -967,17 +1088,23 @@
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
+                <child>
+                  <placeholder/>
+                </child>
               </object>
               <packing>
                 <property name="position">2</property>
+                <property name="tab_fill">False</property>
               </packing>
             </child>
             <child type="tab">
               <object class="GtkLabel" id="label9">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                 <property name="label" translatable="yes">Personal Events</property>
               </object>
@@ -989,23 +1116,26 @@
             <child>
               <object class="GtkVBox" id="status_vbox">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="border_width">12</property>
-                <property name="orientation">vertical</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkFrame" id="frame81">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="no_show_all">True</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment_gmail1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkTable" id="autoaway_table">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="n_rows">2</property>
                             <property name="n_columns">4</property>
                             <property name="column_spacing">12</property>
@@ -1018,8 +1148,9 @@
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">If checked, Gajim will change status to Away when the computer is unused.</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_auto_away_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_auto_away_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="x_options">GTK_FILL</property>
@@ -1034,8 +1165,9 @@
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">If checked, Gajim will change status to Not Available when the computer has not been used even longer</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_auto_xa_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_auto_xa_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="top_attach">1</property>
@@ -1047,6 +1179,7 @@
                             <child>
                               <object class="GtkLabel" id="label77">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">minutes</property>
                               </object>
@@ -1060,6 +1193,7 @@
                             <child>
                               <object class="GtkLabel" id="label78">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">minutes</property>
                               </object>
@@ -1075,6 +1209,7 @@
                             <child>
                               <object class="GtkAlignment" id="alignment33">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">1</property>
                                 <property name="xscale">0</property>
                                 <child>
@@ -1084,7 +1219,7 @@
                                     <property name="can_focus">True</property>
                                     <property name="adjustment">adjustment2</property>
                                     <property name="climb_rate">1</property>
-                                    <signal name="value_changed" handler="on_auto_away_time_spinbutton_value_changed"/>
+                                    <signal name="value-changed" handler="on_auto_away_time_spinbutton_value_changed" swapped="no"/>
                                   </object>
                                 </child>
                               </object>
@@ -1098,6 +1233,7 @@
                             <child>
                               <object class="GtkAlignment" id="alignment34">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">1</property>
                                 <property name="xscale">0</property>
                                 <child>
@@ -1107,7 +1243,7 @@
                                     <property name="can_focus">True</property>
                                     <property name="adjustment">adjustment1</property>
                                     <property name="climb_rate">1</property>
-                                    <signal name="value_changed" handler="on_auto_xa_time_spinbutton_value_changed"/>
+                                    <signal name="value-changed" handler="on_auto_xa_time_spinbutton_value_changed" swapped="no"/>
                                   </object>
                                 </child>
                               </object>
@@ -1127,7 +1263,7 @@
                                 <property name="tooltip_text" translatable="yes">The auto away status message. If empty, Gajim will not change the current status message
 $S will be replaced by previous status message
 $T will be replaced by auto-away timeout</property>
-                                <signal name="changed" handler="on_auto_away_message_entry_changed"/>
+                                <signal name="changed" handler="on_auto_away_message_entry_changed" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">3</property>
@@ -1142,7 +1278,7 @@ $T will be replaced by auto-away timeout</property>
                                 <property name="tooltip_text" translatable="yes">The auto not available status message. If empty, Gajim will not change the current status message
 $S will be replaced by previous status message
 $T will be replaced by auto-not-available timeout</property>
-                                <signal name="changed" handler="on_auto_xa_message_entry_changed"/>
+                                <signal name="changed" handler="on_auto_xa_message_entry_changed" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">3</property>
@@ -1159,6 +1295,7 @@ $T will be replaced by auto-not-available timeout</property>
                     <child type="label">
                       <object class="GtkLabel" id="label81">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Auto Status&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
@@ -1173,26 +1310,30 @@ $T will be replaced by auto-not-available timeout</property>
                 <child>
                   <object class="GtkFrame" id="frame8">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment8">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkVBox" id="vbox2">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="orientation">vertical</property>
                             <property name="spacing">6</property>
                             <child>
                               <object class="GtkHBox" id="hbox2934">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="spacing">6</property>
                                 <child>
                                   <object class="GtkLabel" id="label214">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="label" translatable="yes">Ask status message when I:</property>
                                   </object>
                                   <packing>
@@ -1204,6 +1345,7 @@ $T will be replaced by auto-not-available timeout</property>
                                 <child>
                                   <object class="GtkHBox" id="hbox6">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="spacing">14</property>
                                     <child>
                                       <object class="GtkCheckButton" id="prompt_online_status_message_checkbutton">
@@ -1212,8 +1354,9 @@ $T will be replaced by auto-not-available timeout</property>
                                         <property name="can_focus">True</property>
                                         <property name="receives_default">False</property>
                                         <property name="use_underline">True</property>
+                                        <property name="xalign">0</property>
                                         <property name="draw_indicator">True</property>
-                                        <signal name="toggled" handler="on_prompt_online_status_message_checkbutton_toggled"/>
+                                        <signal name="toggled" handler="on_prompt_online_status_message_checkbutton_toggled" swapped="no"/>
                                       </object>
                                       <packing>
                                         <property name="expand">False</property>
@@ -1228,8 +1371,9 @@ $T will be replaced by auto-not-available timeout</property>
                                         <property name="can_focus">True</property>
                                         <property name="receives_default">False</property>
                                         <property name="use_underline">True</property>
+                                        <property name="xalign">0</property>
                                         <property name="draw_indicator">True</property>
-                                        <signal name="toggled" handler="on_prompt_offline_status_message_checkbutton_toggled"/>
+                                        <signal name="toggled" handler="on_prompt_offline_status_message_checkbutton_toggled" swapped="no"/>
                                       </object>
                                       <packing>
                                         <property name="expand">False</property>
@@ -1256,8 +1400,6 @@ $T will be replaced by auto-not-available timeout</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="tooltip_text" translatable="yes">If enabled, Gajim will not ask for a status message. The specified default message will be used instead.</property>
-                                <property name="hscrollbar_policy">automatic</property>
-                                <property name="vscrollbar_policy">automatic</property>
                                 <property name="shadow_type">in</property>
                                 <child>
                                   <object class="GtkTreeView" id="default_msg_treeview">
@@ -1267,6 +1409,8 @@ $T will be replaced by auto-not-available timeout</property>
                                 </child>
                               </object>
                               <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
                                 <property name="position">1</property>
                               </packing>
                             </child>
@@ -1277,36 +1421,46 @@ $T will be replaced by auto-not-available timeout</property>
                     <child type="label">
                       <object class="GtkLabel" id="label12">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Status Messages&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkFrame" id="frame22">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment49">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkTable" id="table4">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                             <property name="n_rows">2</property>
                             <property name="n_columns">2</property>
                             <property name="column_spacing">6</property>
                             <property name="row_spacing">6</property>
+                            <child>
+                              <placeholder/>
+                            </child>
                             <child>
                               <object class="GtkVButtonBox" id="vbuttonbox3">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="spacing">5</property>
                                 <property name="layout_style">start</property>
                                 <child>
@@ -1317,7 +1471,7 @@ $T will be replaced by auto-not-available timeout</property>
                                     <property name="can_default">True</property>
                                     <property name="receives_default">False</property>
                                     <property name="use_stock">True</property>
-                                    <signal name="clicked" handler="on_new_msg_button_clicked"/>
+                                    <signal name="clicked" handler="on_new_msg_button_clicked" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -1333,7 +1487,7 @@ $T will be replaced by auto-not-available timeout</property>
                                     <property name="can_default">True</property>
                                     <property name="receives_default">False</property>
                                     <property name="use_stock">True</property>
-                                    <signal name="clicked" handler="on_delete_msg_button_clicked"/>
+                                    <signal name="clicked" handler="on_delete_msg_button_clicked" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -1353,16 +1507,16 @@ $T will be replaced by auto-not-available timeout</property>
                               <object class="GtkScrolledWindow" id="scrolledwindow22">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="hscrollbar_policy">automatic</property>
-                                <property name="vscrollbar_policy">automatic</property>
                                 <property name="shadow_type">in</property>
                                 <child>
                                   <object class="GtkTreeView" id="msg_treeview">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
+                                    <property name="model">status_message_liststore</property>
                                     <property name="headers_visible">False</property>
-                                    <signal name="cursor_changed" handler="on_msg_treeview_cursor_changed"/>
-                                    <signal name="key_press_event" handler="on_msg_treeview_key_press_event"/>
+                                    <property name="headers_clickable">False</property>
+                                    <signal name="cursor-changed" handler="on_msg_treeview_cursor_changed" swapped="no"/>
+                                    <signal name="key-press-event" handler="on_msg_treeview_key_press_event" swapped="no"/>
                                   </object>
                                 </child>
                               </object>
@@ -1376,6 +1530,7 @@ $T will be replaced by auto-not-available timeout</property>
                                 <property name="shadow_type">in</property>
                                 <child>
                                   <object class="GtkTextView" id="msg_textview">
+                                    <property name="height_request">21</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="border_width">3</property>
@@ -1389,9 +1544,6 @@ $T will be replaced by auto-not-available timeout</property>
                                 <property name="y_options">GTK_FILL</property>
                               </packing>
                             </child>
-                            <child>
-                              <placeholder/>
-                            </child>
                           </object>
                         </child>
                       </object>
@@ -1399,12 +1551,15 @@ $T will be replaced by auto-not-available timeout</property>
                     <child type="label">
                       <object class="GtkLabel" id="label213">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Preset Status Messages&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">2</property>
                   </packing>
                 </child>
@@ -1416,6 +1571,7 @@ $T will be replaced by auto-not-available timeout</property>
             <child type="tab">
               <object class="GtkLabel" id="label80">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">Status</property>
               </object>
               <packing>
@@ -1426,33 +1582,39 @@ $T will be replaced by auto-not-available timeout</property>
             <child>
               <object class="GtkVBox" id="vbox58">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="border_width">12</property>
-                <property name="orientation">vertical</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkFrame" id="frame9">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment10">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkTable" id="table5">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                             <property name="n_rows">2</property>
                             <property name="n_columns">2</property>
                             <property name="column_spacing">6</property>
                             <property name="row_spacing">6</property>
+                            <child>
+                              <placeholder/>
+                            </child>
                             <child>
                               <object class="GtkFontButton" id="conversation_fontbutton">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
-                                <signal name="font_set" handler="on_conversation_fontbutton_font_set"/>
+                                <signal name="font-set" handler="on_conversation_fontbutton_font_set" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -1466,8 +1628,9 @@ $T will be replaced by auto-not-available timeout</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_default_chat_font_toggled"/>
+                                <signal name="toggled" handler="on_default_chat_font_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -1479,6 +1642,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkLabel" id="label4">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                                 <property name="label" translatable="yes">Chat message:</property>
                               </object>
@@ -1487,9 +1651,6 @@ $T will be replaced by auto-not-available timeout</property>
                                 <property name="y_options">GTK_FILL</property>
                               </packing>
                             </child>
-                            <child>
-                              <placeholder/>
-                            </child>
                           </object>
                         </child>
                       </object>
@@ -1497,6 +1658,7 @@ $T will be replaced by auto-not-available timeout</property>
                     <child type="label">
                       <object class="GtkLabel" id="label23">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Font&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
@@ -1511,23 +1673,32 @@ $T will be replaced by auto-not-available timeout</property>
                 <child>
                   <object class="GtkFrame" id="frame3">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment3">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkTable" id="table2">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                             <property name="n_rows">3</property>
                             <property name="n_columns">3</property>
                             <property name="column_spacing">6</property>
                             <property name="row_spacing">6</property>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
                             <child>
                               <object class="GtkCheckButton" id="transports_iconsets_checkbutton">
                                 <property name="label" translatable="yes">Use _transports icons</property>
@@ -1536,20 +1707,23 @@ $T will be replaced by auto-not-available timeout</property>
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">If checked, Gajim will use protocol-specific status icons. (e.g. A contact from MSN will have the equivalent msn icon for status online, away, busy, etc...)</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_transports_iconsets_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_transports_iconsets_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">3</property>
                                 <property name="top_attach">2</property>
                                 <property name="bottom_attach">3</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkComboBox" id="iconset_combobox">
                                 <property name="visible">True</property>
-                                <signal name="changed" handler="on_iconset_combobox_changed"/>
+                                <property name="can_focus">False</property>
+                                <signal name="changed" handler="on_iconset_combobox_changed" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -1563,6 +1737,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkLabel" id="label174">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Status _iconset:</property>
                                 <property name="use_underline">True</property>
@@ -1578,11 +1753,13 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkComboBox" id="theme_combobox">
                                 <property name="visible">True</property>
-                                <signal name="changed" handler="on_theme_combobox_changed"/>
+                                <property name="can_focus">False</property>
+                                <signal name="changed" handler="on_theme_combobox_changed" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">2</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -1593,18 +1770,18 @@ $T will be replaced by auto-not-available timeout</property>
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">Configure color and font of the interface</property>
                                 <property name="use_underline">True</property>
-                                <signal name="clicked" handler="on_manage_theme_button_clicked"/>
+                                <signal name="clicked" handler="on_manage_theme_button_clicked" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">2</property>
                                 <property name="right_attach">3</property>
-                                <property name="x_options">GTK_FILL</property>
-                                <property name="y_options">GTK_FILL</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkLabel" id="label249">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">T_heme:</property>
                                 <property name="use_underline">True</property>
@@ -1615,12 +1792,6 @@ $T will be replaced by auto-not-available timeout</property>
                                 <property name="y_options">GTK_FILL</property>
                               </packing>
                             </child>
-                            <child>
-                              <placeholder/>
-                            </child>
-                            <child>
-                              <placeholder/>
-                            </child>
                           </object>
                         </child>
                       </object>
@@ -1628,6 +1799,7 @@ $T will be replaced by auto-not-available timeout</property>
                     <child type="label">
                       <object class="GtkLabel" id="label3">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="label" translatable="yes">&lt;b&gt;Themes&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
@@ -1636,29 +1808,40 @@ $T will be replaced by auto-not-available timeout</property>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkFrame" id="frame24">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment53">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkTable" id="table25">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="n_rows">5</property>
                             <property name="n_columns">4</property>
                             <property name="column_spacing">12</property>
                             <property name="row_spacing">6</property>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
                             <child>
                               <object class="GtkLabel" id="label72">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Contact's nickname:</property>
                                 <property name="use_underline">True</property>
@@ -1672,6 +1855,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkLabel" id="label70">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Your nickname:</property>
                                 <property name="use_underline">True</property>
@@ -1687,6 +1871,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkLabel" id="label71">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">_Status message:</property>
                                 <property name="use_underline">True</property>
@@ -1702,6 +1887,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkLabel" id="label371">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">_URL highlight:</property>
                                 <property name="use_underline">True</property>
@@ -1718,58 +1904,28 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkHBox" id="hbox3022">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <child>
                                   <object class="GtkLabel" id="label383">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                   </object>
                                   <packing>
+                                    <property name="expand">True</property>
                                     <property name="fill">False</property>
                                     <property name="position">0</property>
                                   </packing>
                                 </child>
                                 <child>
                                   <object class="GtkButton" id="reset_colors_button">
+                                    <property name="label" translatable="yes">_Reset to Default Colors</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="receives_default">False</property>
+                                    <property name="image">image1</property>
+                                    <property name="use_underline">True</property>
                                     <property name="focus_on_click">False</property>
-                                    <signal name="clicked" handler="on_reset_colors_button_clicked"/>
-                                    <child>
-                                      <object class="GtkAlignment" id="alignment52">
-                                        <property name="visible">True</property>
-                                        <property name="xscale">0</property>
-                                        <property name="yscale">0</property>
-                                        <child>
-                                          <object class="GtkHBox" id="hbox2936">
-                                            <property name="visible">True</property>
-                                            <property name="spacing">2</property>
-                                            <child>
-                                              <object class="GtkImage" id="image439">
-                                                <property name="visible">True</property>
-                                                <property name="stock">gtk-revert-to-saved</property>
-                                              </object>
-                                              <packing>
-                                                <property name="expand">False</property>
-                                                <property name="fill">False</property>
-                                                <property name="position">0</property>
-                                              </packing>
-                                            </child>
-                                            <child>
-                                              <object class="GtkLabel" id="label217">
-                                                <property name="visible">True</property>
-                                                <property name="label" translatable="yes">_Reset to Default Colors</property>
-                                                <property name="use_underline">True</property>
-                                              </object>
-                                              <packing>
-                                                <property name="expand">False</property>
-                                                <property name="fill">False</property>
-                                                <property name="position">1</property>
-                                              </packing>
-                                            </child>
-                                          </object>
-                                        </child>
-                                      </object>
-                                    </child>
+                                    <signal name="clicked" handler="on_reset_colors_button_clicked" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -1788,6 +1944,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkLabel" id="label13">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Contact's message:</property>
                               </object>
@@ -1801,6 +1958,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkLabel" id="label14">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Your message:</property>
                               </object>
@@ -1816,15 +1974,19 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkHBox" id="hbox8">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <child>
                                   <object class="GtkCheckButton" id="incoming_msg_checkbutton">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="receives_default">False</property>
+                                    <property name="xalign">0.5</property>
                                     <property name="draw_indicator">True</property>
-                                    <signal name="toggled" handler="on_incoming_msg_checkbutton_toggled"/>
+                                    <signal name="toggled" handler="on_incoming_msg_checkbutton_toggled" swapped="no"/>
                                   </object>
                                   <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
                                     <property name="position">0</property>
                                   </packing>
                                 </child>
@@ -1835,10 +1997,11 @@ $T will be replaced by auto-not-available timeout</property>
                                     <property name="receives_default">True</property>
                                     <property name="xalign">0</property>
                                     <property name="color">#000000000000</property>
-                                    <signal name="color_set" handler="on_incoming_msg_colorbutton_color_set"/>
+                                    <signal name="color-set" handler="on_incoming_msg_colorbutton_color_set" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">False</property>
                                     <property name="pack_type">end</property>
                                     <property name="position">1</property>
                                   </packing>
@@ -1849,22 +2012,26 @@ $T will be replaced by auto-not-available timeout</property>
                                 <property name="right_attach">2</property>
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
-                                <property name="x_options"/>
+                                <property name="x_options">GTK_FILL</property>
                                 <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkHBox" id="hbox9">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <child>
                                   <object class="GtkCheckButton" id="outgoing_msg_checkbutton">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="receives_default">False</property>
+                                    <property name="xalign">0.5</property>
                                     <property name="draw_indicator">True</property>
-                                    <signal name="toggled" handler="on_outgoing_msg_checkbutton_toggled"/>
+                                    <signal name="toggled" handler="on_outgoing_msg_checkbutton_toggled" swapped="no"/>
                                   </object>
                                   <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
                                     <property name="position">0</property>
                                   </packing>
                                 </child>
@@ -1875,10 +2042,11 @@ $T will be replaced by auto-not-available timeout</property>
                                     <property name="receives_default">True</property>
                                     <property name="xalign">0</property>
                                     <property name="color">#000000000000</property>
-                                    <signal name="color_set" handler="on_outgoing_msg_colorbutton_color_set"/>
+                                    <signal name="color-set" handler="on_outgoing_msg_colorbutton_color_set" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">False</property>
                                     <property name="pack_type">end</property>
                                     <property name="position">1</property>
                                   </packing>
@@ -1889,13 +2057,14 @@ $T will be replaced by auto-not-available timeout</property>
                                 <property name="right_attach">4</property>
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
-                                <property name="x_options"/>
+                                <property name="x_options">GTK_FILL</property>
                                 <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkHBox" id="hbox10">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <child>
                                   <placeholder/>
                                 </child>
@@ -1906,10 +2075,11 @@ $T will be replaced by auto-not-available timeout</property>
                                     <property name="receives_default">True</property>
                                     <property name="xalign">0</property>
                                     <property name="color">#000000000000</property>
-                                    <signal name="color_set" handler="on_incoming_nick_colorbutton_color_set"/>
+                                    <signal name="color-set" handler="on_incoming_nick_colorbutton_color_set" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="pack_type">end</property>
                                     <property name="position">1</property>
                                   </packing>
@@ -1925,9 +2095,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkHBox" id="hbox11">
                                 <property name="visible">True</property>
-                                <child>
-                                  <placeholder/>
-                                </child>
+                                <property name="can_focus">False</property>
                                 <child>
                                   <object class="GtkColorButton" id="status_msg_colorbutton">
                                     <property name="visible">True</property>
@@ -1935,12 +2103,13 @@ $T will be replaced by auto-not-available timeout</property>
                                     <property name="receives_default">True</property>
                                     <property name="xalign">0</property>
                                     <property name="color">#000000000000</property>
-                                    <signal name="color_set" handler="on_status_msg_colorbutton_color_set"/>
+                                    <signal name="color-set" handler="on_status_msg_colorbutton_color_set" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="pack_type">end</property>
-                                    <property name="position">1</property>
+                                    <property name="position">0</property>
                                   </packing>
                                 </child>
                               </object>
@@ -1956,6 +2125,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkHBox" id="hbox12">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <child>
                                   <placeholder/>
                                 </child>
@@ -1966,10 +2136,11 @@ $T will be replaced by auto-not-available timeout</property>
                                     <property name="receives_default">True</property>
                                     <property name="xalign">0</property>
                                     <property name="color">#000000000000</property>
-                                    <signal name="color_set" handler="on_outgoing_nick_colorbutton_color_set"/>
+                                    <signal name="color-set" handler="on_outgoing_nick_colorbutton_color_set" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="pack_type">end</property>
                                     <property name="position">1</property>
                                   </packing>
@@ -1985,6 +2156,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkHBox" id="hbox13">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <child>
                                   <placeholder/>
                                 </child>
@@ -1995,10 +2167,11 @@ $T will be replaced by auto-not-available timeout</property>
                                     <property name="receives_default">True</property>
                                     <property name="xalign">0</property>
                                     <property name="color">#000000000000</property>
-                                    <signal name="color_set" handler="on_url_msg_colorbutton_color_set"/>
+                                    <signal name="color-set" handler="on_url_msg_colorbutton_color_set" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="pack_type">end</property>
                                     <property name="position">1</property>
                                   </packing>
@@ -2016,6 +2189,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkHBox" id="hbox2">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <child>
                                   <placeholder/>
                                 </child>
@@ -2026,10 +2200,11 @@ $T will be replaced by auto-not-available timeout</property>
                                     <property name="receives_default">True</property>
                                     <property name="xalign">0</property>
                                     <property name="color">#000000000000</property>
-                                    <signal name="color_set" handler="on_muc_highlight_colorbutton_color_set"/>
+                                    <signal name="color-set" handler="on_muc_highlight_colorbutton_color_set" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="pack_type">end</property>
                                     <property name="position">1</property>
                                   </packing>
@@ -2047,6 +2222,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkLabel" id="label30">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Group chat highlight:</property>
                                 <property name="use_underline">True</property>
@@ -2058,12 +2234,6 @@ $T will be replaced by auto-not-available timeout</property>
                                 <property name="y_options"/>
                               </packing>
                             </child>
-                            <child>
-                              <placeholder/>
-                            </child>
-                            <child>
-                              <placeholder/>
-                            </child>
                           </object>
                         </child>
                       </object>
@@ -2071,6 +2241,7 @@ $T will be replaced by auto-not-available timeout</property>
                     <child type="label">
                       <object class="GtkLabel" id="label228">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Chat Line Colors&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
@@ -2090,6 +2261,7 @@ $T will be replaced by auto-not-available timeout</property>
             <child type="tab">
               <object class="GtkLabel" id="label218">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">Style</property>
               </object>
               <packing>
@@ -2100,21 +2272,28 @@ $T will be replaced by auto-not-available timeout</property>
             <child>
               <object class="GtkVBox" id="vbox4">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="border_width">12</property>
-                <property name="orientation">vertical</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkFrame" id="audio_frame">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label_xalign">0</property>
+                    <property name="label_yalign">1</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment6">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="yalign">0</property>
+                        <property name="yscale">0</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkTable" id="table6">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="n_rows">2</property>
                             <property name="n_columns">2</property>
                             <property name="column_spacing">6</property>
@@ -2122,28 +2301,33 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkComboBox" id="audio_input_combobox">
                                 <property name="visible">True</property>
-                                <signal name="changed" handler="on_audio_input_combobox_changed"/>
+                                <property name="can_focus">False</property>
+                                <signal name="changed" handler="on_audio_input_combobox_changed" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">2</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkComboBox" id="audio_output_combobox">
                                 <property name="visible">True</property>
-                                <signal name="changed" handler="on_audio_output_combobox_changed"/>
+                                <property name="can_focus">False</property>
+                                <signal name="changed" handler="on_audio_output_combobox_changed" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">2</property>
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkLabel" id="label18">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Audio input device</property>
                               </object>
@@ -2154,6 +2338,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkLabel" id="label19">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Audio output device</property>
                               </object>
@@ -2170,6 +2355,7 @@ $T will be replaced by auto-not-available timeout</property>
                     <child type="label">
                       <object class="GtkLabel" id="label16">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Audio&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
@@ -2177,28 +2363,37 @@ $T will be replaced by auto-not-available timeout</property>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkFrame" id="frame6">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label_xalign">0</property>
+                    <property name="label_yalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment7">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="yalign">0</property>
+                        <property name="yscale">0</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkTable" id="table8">
                             <property name="visible">True</property>
-                            <property name="n_rows">5</property>
+                            <property name="can_focus">False</property>
+                            <property name="n_rows">4</property>
                             <property name="n_columns">2</property>
                             <property name="column_spacing">6</property>
                             <property name="row_spacing">6</property>
                             <child>
                               <object class="GtkLabel" id="label20">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Video input device</property>
                               </object>
@@ -2209,6 +2404,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkLabel" id="label21">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Video output device</property>
                               </object>
@@ -2221,28 +2417,33 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkComboBox" id="video_input_combobox">
                                 <property name="visible">True</property>
-                                <signal name="changed" handler="on_video_input_combobox_changed"/>
+                                <property name="can_focus">False</property>
+                                <signal name="changed" handler="on_video_input_combobox_changed" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">2</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkComboBox" id="video_output_combobox">
                                 <property name="visible">True</property>
-                                <signal name="changed" handler="on_video_output_combobox_changed"/>
+                                <property name="can_focus">False</property>
+                                <signal name="changed" handler="on_video_output_combobox_changed" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">2</property>
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkLabel" id="label26">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Video framerate</property>
                               </object>
@@ -2255,6 +2456,7 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkLabel" id="label27">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Video size</property>
                               </object>
@@ -2267,40 +2469,29 @@ $T will be replaced by auto-not-available timeout</property>
                             <child>
                               <object class="GtkComboBox" id="video_framerate_combobox">
                                 <property name="visible">True</property>
-                                <signal name="changed" handler="on_video_framerate_combobox_changed"/>
+                                <property name="can_focus">False</property>
+                                <signal name="changed" handler="on_video_framerate_combobox_changed" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">2</property>
                                 <property name="top_attach">2</property>
                                 <property name="bottom_attach">3</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkComboBox" id="video_size_combobox">
                                 <property name="visible">True</property>
-                                <signal name="changed" handler="on_video_size_combobox_changed"/>
+                                <property name="can_focus">False</property>
+                                <signal name="changed" handler="on_video_size_combobox_changed" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">2</property>
                                 <property name="top_attach">3</property>
                                 <property name="bottom_attach">4</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkCheckButton" id="video_see_self_checkbutton">
-                                <property name="label" translatable="yes">View own video source</property>
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">False</property>
-                                <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_video_see_self_checkbutton_toggled"/>
-                              </object>
-                              <packing>
-                                <property name="right_attach">2</property>
-                                <property name="top_attach">4</property>
-                                <property name="bottom_attach">5</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                           </object>
@@ -2310,6 +2501,7 @@ $T will be replaced by auto-not-available timeout</property>
                     <child type="label">
                       <object class="GtkLabel" id="label17">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Video&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
@@ -2317,37 +2509,48 @@ $T will be replaced by auto-not-available timeout</property>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">False</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkFrame" id="frame7">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label_xalign">0</property>
+                    <property name="label_yalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment9">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="yalign">0</property>
+                        <property name="yscale">0</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkTable" id="table9">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="n_columns">4</property>
                             <property name="column_spacing">6</property>
                             <property name="row_spacing">6</property>
                             <child>
                               <object class="GtkLabel" id="label24">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">STUN server:</property>
                               </object>
                               <packing>
                                 <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkLabel" id="label25">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="label" translatable="yes">&lt;i&gt;(example: stunserver.org)&lt;/i&gt;</property>
                                 <property name="use_markup">True</property>
                               </object>
@@ -2363,12 +2566,13 @@ $T will be replaced by auto-not-available timeout</property>
                                 <property name="can_focus">True</property>
                                 <property name="tooltip_text" translatable="yes">STUN server hostname. If none given, Gajim will try
 to discover one from server.</property>
-                                <property name="invisible_char">&#x25CF;</property>
-                                <signal name="changed" handler="stun_server_entry_changed"/>
+                                <property name="invisible_char">●</property>
+                                <signal name="changed" handler="stun_server_entry_changed" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">2</property>
                                 <property name="right_attach">3</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                             <child>
@@ -2376,13 +2580,15 @@ to discover one from server.</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
+                                <property name="xalign">0.5</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_stun_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_stun_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">2</property>
                                 <property name="x_options">GTK_FILL</property>
+                                <property name="y_options"/>
                               </packing>
                             </child>
                           </object>
@@ -2392,24 +2598,31 @@ to discover one from server.</property>
                     <child type="label">
                       <object class="GtkLabel" id="label22">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Connection&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
                     </child>
                   </object>
                   <packing>
-                    <property name="expand">False</property>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">2</property>
                   </packing>
                 </child>
+                <child>
+                  <placeholder/>
+                </child>
               </object>
               <packing>
                 <property name="position">5</property>
+                <property name="tab_fill">False</property>
               </packing>
             </child>
             <child type="tab">
               <object class="GtkLabel" id="label15">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">Audio / Video</property>
               </object>
               <packing>
@@ -2420,29 +2633,32 @@ to discover one from server.</property>
             <child>
               <object class="GtkVBox" id="vbox45">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="border_width">12</property>
-                <property name="orientation">vertical</property>
                 <property name="spacing">12</property>
                 <child>
                   <object class="GtkFrame" id="applications_frame">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment89">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkVBox" id="vbox50">
                             <property name="visible">True</property>
-                            <property name="orientation">vertical</property>
+                            <property name="can_focus">False</property>
                             <property name="spacing">6</property>
                             <child>
                               <object class="GtkComboBox" id="applications_combobox">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="model">liststore1</property>
-                                <signal name="changed" handler="on_applications_combobox_changed"/>
+                                <signal name="changed" handler="on_applications_combobox_changed" swapped="no"/>
                                 <child>
                                   <object class="GtkCellRendererText" id="cellrenderertext1"/>
                                   <attributes>
@@ -2451,21 +2667,26 @@ to discover one from server.</property>
                                 </child>
                               </object>
                               <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
                                 <property name="position">0</property>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkFrame" id="custom_apps_frame">
+                                <property name="can_focus">False</property>
                                 <property name="label_xalign">0</property>
                                 <property name="shadow_type">none</property>
                                 <child>
                                   <object class="GtkAlignment" id="alignment43">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="border_width">6</property>
                                     <property name="left_padding">12</property>
                                     <child>
                                       <object class="GtkTable" id="table22">
                                         <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
                                         <property name="n_rows">3</property>
                                         <property name="n_columns">2</property>
                                         <property name="column_spacing">12</property>
@@ -2474,7 +2695,7 @@ to discover one from server.</property>
                                           <object class="GtkEntry" id="custom_file_manager_entry">
                                             <property name="visible">True</property>
                                             <property name="can_focus">True</property>
-                                            <signal name="changed" handler="on_custom_file_manager_entry_changed"/>
+                                            <signal name="changed" handler="on_custom_file_manager_entry_changed" swapped="no"/>
                                           </object>
                                           <packing>
                                             <property name="left_attach">1</property>
@@ -2487,6 +2708,7 @@ to discover one from server.</property>
                                         <child>
                                           <object class="GtkLabel" id="label355">
                                             <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
                                             <property name="xalign">0</property>
                                             <property name="label" translatable="yes">_File manager:</property>
                                             <property name="use_underline">True</property>
@@ -2503,7 +2725,7 @@ to discover one from server.</property>
                                           <object class="GtkEntry" id="custom_browser_entry">
                                             <property name="visible">True</property>
                                             <property name="can_focus">True</property>
-                                            <signal name="changed" handler="on_custom_browser_entry_changed"/>
+                                            <signal name="changed" handler="on_custom_browser_entry_changed" swapped="no"/>
                                           </object>
                                           <packing>
                                             <property name="left_attach">1</property>
@@ -2515,7 +2737,7 @@ to discover one from server.</property>
                                           <object class="GtkEntry" id="custom_mail_client_entry">
                                             <property name="visible">True</property>
                                             <property name="can_focus">True</property>
-                                            <signal name="changed" handler="on_custom_mail_client_entry_changed"/>
+                                            <signal name="changed" handler="on_custom_mail_client_entry_changed" swapped="no"/>
                                           </object>
                                           <packing>
                                             <property name="left_attach">1</property>
@@ -2528,6 +2750,7 @@ to discover one from server.</property>
                                         <child>
                                           <object class="GtkLabel" id="label200">
                                             <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
                                             <property name="xalign">0</property>
                                             <property name="label" translatable="yes">_Mail client:</property>
                                             <property name="use_underline">True</property>
@@ -2543,6 +2766,7 @@ to discover one from server.</property>
                                         <child>
                                           <object class="GtkLabel" id="label199">
                                             <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
                                             <property name="xalign">0</property>
                                             <property name="label" translatable="yes">_Browser:</property>
                                             <property name="use_underline">True</property>
@@ -2560,12 +2784,15 @@ to discover one from server.</property>
                                 <child type="label">
                                   <object class="GtkLabel" id="label198">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="label" translatable="yes" comments="a header for custom browser/client/file manager. so translate sth like: Custom Settings">&lt;b&gt;Custom&lt;/b&gt;</property>
                                     <property name="use_markup">True</property>
                                   </object>
                                 </child>
                               </object>
                               <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
                                 <property name="position">1</property>
                               </packing>
                             </child>
@@ -2576,6 +2803,7 @@ to discover one from server.</property>
                     <child type="label">
                       <object class="GtkLabel" id="label5">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Applications&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
@@ -2590,18 +2818,21 @@ to discover one from server.</property>
                 <child>
                   <object class="GtkFrame" id="frame4">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment4">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkTable" id="table3">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                             <property name="n_rows">6</property>
                             <property name="column_spacing">6</property>
@@ -2614,8 +2845,9 @@ to discover one from server.</property>
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">If checked, Gajim will ignore incoming events from unauthorized contacts. Use with caution, because it blocks all messages from any contact that is not in the roster</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_ignore_events_from_unknown_contacts_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_ignore_events_from_unknown_contacts_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="x_options">GTK_FILL</property>
@@ -2629,8 +2861,9 @@ to discover one from server.</property>
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">If checked, Gajim will allow others to detect the operation system you are using</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_send_os_info_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_send_os_info_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="top_attach">1</property>
@@ -2645,8 +2878,9 @@ to discover one from server.</property>
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">If checked, Gajim will allow others to detect the time on your system</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_send_time_info_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_send_time_info_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="top_attach">2</property>
@@ -2661,8 +2895,9 @@ to discover one from server.</property>
                                 <property name="receives_default">False</property>
                                 <property name="tooltip_text" translatable="yes">If checked, Gajim will keep logs for encrypted messages. Please note that when using E2E encryption the remote party has to agree on logging, else the messages will not be logged.</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_log_encrypted_chats_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_log_encrypted_chats_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="top_attach">3</property>
@@ -2676,8 +2911,9 @@ to discover one from server.</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_send_idle_time_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_send_idle_time_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="top_attach">4</property>
@@ -2687,22 +2923,26 @@ to discover one from server.</property>
                             <child>
                               <object class="GtkHBox" id="box1">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="spacing">6</property>
                                 <child>
                                   <object class="GtkLabel" id="label29">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="label" translatable="yes">Global proxy:</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="position">0</property>
                                   </packing>
                                 </child>
                                 <child>
                                   <object class="GtkComboBox" id="proxies_combobox">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="model">liststore8</property>
-                                    <signal name="changed" handler="on_proxies_combobox_changed"/>
+                                    <signal name="changed" handler="on_proxies_combobox_changed" swapped="no"/>
                                     <child>
                                       <object class="GtkCellRendererText" id="cellrenderertext8"/>
                                       <attributes>
@@ -2711,6 +2951,8 @@ to discover one from server.</property>
                                     </child>
                                   </object>
                                   <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
@@ -2721,10 +2963,11 @@ to discover one from server.</property>
                                     <property name="can_focus">True</property>
                                     <property name="receives_default">True</property>
                                     <property name="use_underline">True</property>
-                                    <signal name="clicked" handler="on_manage_proxies_button_clicked"/>
+                                    <signal name="clicked" handler="on_manage_proxies_button_clicked" swapped="no"/>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
+                                    <property name="fill">True</property>
                                     <property name="position">2</property>
                                   </packing>
                                 </child>
@@ -2741,6 +2984,7 @@ to discover one from server.</property>
                     <child type="label">
                       <object class="GtkLabel" id="label6">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="label" translatable="yes">&lt;b&gt;Privacy&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
@@ -2749,23 +2993,26 @@ to discover one from server.</property>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkFrame" id="frame27">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment56">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="border_width">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkVBox" id="vbox66">
                             <property name="visible">True</property>
-                            <property name="orientation">vertical</property>
+                            <property name="can_focus">False</property>
                             <property name="spacing">6</property>
                             <child>
                               <object class="GtkCheckButton" id="log_show_changes_checkbutton">
@@ -2774,8 +3021,9 @@ to discover one from server.</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_log_show_changes_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_log_show_changes_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -2790,8 +3038,9 @@ to discover one from server.</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="on_check_default_client_checkbutton_toggled"/>
+                                <signal name="toggled" handler="on_check_default_client_checkbutton_toggled" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -2806,6 +3055,7 @@ to discover one from server.</property>
                     <child type="label">
                       <object class="GtkLabel" id="label235">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Miscellaneous&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
@@ -2820,57 +3070,26 @@ to discover one from server.</property>
                 <child>
                   <object class="GtkFrame" id="frame31">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
                       <object class="GtkAlignment" id="alignment64">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="border_width">6</property>
                         <property name="yscale">0</property>
                         <property name="left_padding">12</property>
                         <property name="right_padding">335</property>
                         <child>
                           <object class="GtkButton" id="open_advanced_editor_button">
+                            <property name="label" translatable="yes">_Open...</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
-                            <signal name="clicked" handler="on_open_advanced_editor_button_clicked"/>
-                            <child>
-                              <object class="GtkAlignment" id="alignment70">
-                                <property name="visible">True</property>
-                                <property name="xscale">0</property>
-                                <property name="yscale">0</property>
-                                <child>
-                                  <object class="GtkHBox" id="hbox2962">
-                                    <property name="visible">True</property>
-                                    <property name="spacing">2</property>
-                                    <child>
-                                      <object class="GtkImage" id="image597">
-                                        <property name="visible">True</property>
-                                        <property name="stock">gtk-open</property>
-                                      </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                        <property name="position">0</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <object class="GtkLabel" id="label296">
-                                        <property name="visible">True</property>
-                                        <property name="label" translatable="yes">_Open...</property>
-                                        <property name="use_underline">True</property>
-                                      </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                        <property name="position">1</property>
-                                      </packing>
-                                    </child>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
+                            <property name="image">image2</property>
+                            <property name="use_underline">True</property>
+                            <signal name="clicked" handler="on_open_advanced_editor_button_clicked" swapped="no"/>
                           </object>
                         </child>
                       </object>
@@ -2878,6 +3097,7 @@ to discover one from server.</property>
                     <child type="label">
                       <object class="GtkLabel" id="label247">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">&lt;b&gt;Advanced Configuration Editor&lt;/b&gt;</property>
                         <property name="use_markup">True</property>
                       </object>
@@ -2897,6 +3117,7 @@ to discover one from server.</property>
             <child type="tab">
               <object class="GtkLabel" id="label169">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">Advanced</property>
               </object>
               <packing>
@@ -2906,12 +3127,15 @@ to discover one from server.</property>
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">0</property>
           </packing>
         </child>
         <child>
           <object class="GtkHButtonBox" id="hbuttonbox7">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="spacing">15</property>
             <property name="layout_style">end</property>
             <child>
@@ -2922,7 +3146,7 @@ to discover one from server.</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_close_button_clicked"/>
+                <signal name="clicked" handler="on_close_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -2933,6 +3157,7 @@ to discover one from server.</property>
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
diff --git a/data/gui/profile_window.ui b/data/gui/profile_window.ui
index 88ba214e4799d19271db273cb88a2b355f6ad106..005668f3c6b17e489857c813c38ff03f41c7703a 100644
--- a/data/gui/profile_window.ui
+++ b/data/gui/profile_window.ui
@@ -531,6 +531,7 @@
                   <object class="GtkEventBox" id="eventbox1">
                     <property name="visible">True</property>
                     <property name="tooltip_text" translatable="yes">Format: YYYY-MM-DD</property>
+                    <property name="visible_window">False</property>
                     <child>
                       <object class="GtkLabel" id="label13">
                         <property name="visible">True</property>
@@ -1152,7 +1153,6 @@
         <child>
           <object class="GtkStatusbar" id="statusbar">
             <property name="visible">True</property>
-            <property name="has_resize_grip">False</property>
           </object>
           <packing>
             <property name="expand">False</property>
diff --git a/data/gui/remove_account_window.ui b/data/gui/remove_account_window.ui
index a84a3012e3728774f74be16136f29aaf4f43541d..e0130c5a352b57baca5b9aa912a35461066101ac 100644
--- a/data/gui/remove_account_window.ui
+++ b/data/gui/remove_account_window.ui
@@ -123,47 +123,14 @@
             </child>
             <child>
               <object class="GtkButton" id="remove_button">
+                <property name="label" translatable="yes">_Remove</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
+                <property name="image">image1</property>
+                <property name="use_underline">True</property>
                 <signal name="clicked" handler="on_remove_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment62">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox2954">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image501">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-delete</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label245">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">_Remove</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -181,4 +148,8 @@
       </object>
     </child>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-delete</property>
+  </object>
 </interface>
diff --git a/data/gui/roster_window.ui b/data/gui/roster_window.ui
index a0fd915e24ae010426db9e810d22fc9dc2bd3f2c..f47bbb26cc1ddb2785e240d14d76178acfe31fc5 100644
--- a/data/gui/roster_window.ui
+++ b/data/gui/roster_window.ui
@@ -1,10 +1,95 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkAccelGroup" id="accelgroup1"/>
+  <object class="GtkImage" id="image10">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-help</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image11">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-dialog-question</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image12">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-properties</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image9">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-justify-fill</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-jump-to</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image13">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-disconnect</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image14">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-info</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-new</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image3">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-connect</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image4">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-add</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image5">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-find</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image6">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-network</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image7">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-properties</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image8">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-save</property>
+    <property name="icon-size">1</property>
+  </object>
   <object class="GtkWindow" id="roster_window">
     <property name="width_request">85</property>
     <property name="height_request">200</property>
+    <property name="can_focus">False</property>
     <property name="title" translatable="yes">Gajim</property>
     <property name="role">roster</property>
     <property name="default_width">250</property>
@@ -12,30 +97,34 @@
     <accel-groups>
       <group name="accelgroup1"/>
     </accel-groups>
-    <signal name="key_press_event" handler="on_roster_window_key_press_event"/>
-    <signal name="delete_event" handler="on_roster_window_delete_event"/>
-    <signal name="focus_in_event" handler="on_roster_window_focus_in_event"/>
-    <signal name="focus_out_event" handler="on_roster_window_focus_out_event"/>
-    <signal name="popup_menu" handler="on_roster_window_popup_menu"/>
+    <signal name="key-press-event" handler="on_roster_window_key_press_event" swapped="no"/>
+    <signal name="delete-event" handler="on_roster_window_delete_event" swapped="no"/>
+    <signal name="focus-in-event" handler="on_roster_window_focus_in_event" swapped="no"/>
+    <signal name="focus-out-event" handler="on_roster_window_focus_out_event" swapped="no"/>
+    <signal name="popup-menu" handler="on_roster_window_popup_menu" swapped="no"/>
     <child>
       <object class="GtkVBox" id="roster_vbox">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <child>
           <object class="GtkMenuBar" id="menubar">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
               <object class="GtkMenuItem" id="actions_menu">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_Actions</property>
                 <property name="use_underline">True</property>
-                <signal name="activate" handler="on_actions_menuitem_activate"/>
+                <signal name="activate" handler="on_actions_menuitem_activate" swapped="no"/>
                 <child type="submenu">
                   <object class="GtkMenu" id="actions_menu_menu">
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkImageMenuItem" id="new_chat_menuitem">
                         <property name="label" translatable="yes">_Start Chat...</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="image">image1</property>
                         <property name="use_stock">False</property>
@@ -45,6 +134,7 @@
                     <child>
                       <object class="GtkImageMenuItem" id="send_single_message_menuitem">
                         <property name="label" translatable="yes">Send Single _Message...</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="image">image2</property>
                         <property name="use_stock">False</property>
@@ -53,8 +143,9 @@
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="join_gc_menuitem">
-                        <property name="label" translatable="yes">Join _Group Chat...</property>
+                        <property name="label" translatable="yes">Join _Group Chat</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="image">image3</property>
                         <property name="use_stock">False</property>
@@ -64,12 +155,14 @@
                     <child>
                       <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="add_new_contact_menuitem">
                         <property name="label" translatable="yes">Add _Contact...</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="image">image4</property>
                         <property name="use_stock">False</property>
@@ -80,6 +173,7 @@
                       <object class="GtkImageMenuItem" id="service_disco_menuitem">
                         <property name="label" translatable="yes">_Discover Services</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="image">image5</property>
                         <property name="use_stock">False</property>
@@ -89,6 +183,7 @@
                     <child>
                       <object class="GtkMenuItem" id="advanced_menuitem">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Advanced</property>
                         <property name="use_underline">True</property>
                       </object>
@@ -96,17 +191,19 @@
                     <child>
                       <object class="GtkSeparatorMenuItem" id="separator1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="quit_menuitem">
                         <property name="label">gtk-quit</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <property name="accel_group">accelgroup1</property>
                         <accelerator key="Q" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_quit_request"/>
+                        <signal name="activate" handler="on_quit_request" swapped="no"/>
                       </object>
                     </child>
                   </object>
@@ -116,27 +213,31 @@
             <child>
               <object class="GtkMenuItem" id="edit_menu">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_Edit</property>
                 <property name="use_underline">True</property>
-                <signal name="activate" handler="on_edit_menuitem_activate"/>
+                <signal name="activate" handler="on_edit_menuitem_activate" swapped="no"/>
                 <child type="submenu">
                   <object class="GtkMenu" id="edit_menu_menu">
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkImageMenuItem" id="accounts_menuitem">
                         <property name="label" translatable="yes">_Accounts</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="image">image6</property>
                         <property name="use_stock">False</property>
                         <property name="accel_group">accelgroup1</property>
                         <accelerator key="A" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_accounts_menuitem_activate"/>
+                        <signal name="activate" handler="on_accounts_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="profile_avatar_menuitem">
                         <property name="label" translatable="yes">Profile, A_vatar</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="image">image7</property>
                         <property name="use_stock">False</property>
@@ -146,27 +247,30 @@
                     <child>
                       <object class="GtkSeparatorMenuItem" id="separator2">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="preferences_menuitem">
                         <property name="label">gtk-preferences</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <property name="accel_group">accelgroup1</property>
                         <accelerator key="P" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_preferences_menuitem_activate"/>
+                        <signal name="activate" handler="on_preferences_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="plugins_menuitem">
                         <property name="label" translatable="yes">P_lugins</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="image">image13</property>
                         <property name="use_stock">False</property>
-                        <signal name="activate" handler="on_plugins_menuitem_activate"/>
+                        <signal name="activate" handler="on_plugins_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                   </object>
@@ -176,75 +280,84 @@
             <child>
               <object class="GtkMenuItem" id="view_menu">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_View</property>
                 <property name="use_underline">True</property>
-                <signal name="activate" handler="on_view_menu_activate"/>
+                <signal name="activate" handler="on_view_menu_activate" swapped="no"/>
                 <child type="submenu">
                   <object class="GtkMenu" id="view_menu_menu">
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkCheckMenuItem" id="show_offline_contacts_menuitem">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">Show _Offline Contacts</property>
                         <property name="use_underline">True</property>
                         <accelerator key="O" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_show_offline_contacts_menuitem_activate"/>
+                        <signal name="activate" handler="on_show_offline_contacts_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkCheckMenuItem" id="show_only_active_contacts_menuitem">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">Show Only _Active Contacts</property>
                         <property name="use_underline">True</property>
                         <accelerator key="Y" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_show_only_active_contacts_menuitem_activate"/>
+                        <signal name="activate" handler="on_show_only_active_contacts_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkCheckMenuItem" id="show_transports_menuitem">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">Show T_ransports</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="on_show_transports_menuitem_activate"/>
+                        <signal name="activate" handler="on_show_transports_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkCheckMenuItem" id="show_roster_menuitem">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="label" translatable="yes">Show _Roster</property>
                         <property name="use_underline">True</property>
                         <property name="active">True</property>
                         <accelerator key="R" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="toggled" handler="on_show_roster_menuitem_toggled"/>
+                        <signal name="toggled" handler="on_show_roster_menuitem_toggled" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkSeparatorMenuItem" id="separator3">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="file_transfers_menuitem">
                         <property name="label" translatable="yes">File _Transfers</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="image">image8</property>
                         <property name="use_stock">False</property>
                         <property name="accel_group">accelgroup1</property>
                         <accelerator key="T" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_file_transfers_menuitem_activate"/>
+                        <signal name="activate" handler="on_file_transfers_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="history_menuitem">
                         <property name="label" translatable="yes">_History</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="use_underline">True</property>
                         <property name="image">image9</property>
                         <property name="use_stock">False</property>
                         <property name="accel_group">accelgroup1</property>
-                        <signal name="activate" handler="on_history_menuitem_activate"/>
+                        <signal name="activate" handler="on_history_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                   </object>
@@ -254,69 +367,77 @@
             <child>
               <object class="GtkMenuItem" id="help_menu">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_Help</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
                   <object class="GtkMenu" id="help_menu_menu">
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkImageMenuItem" id="contents_menuitem">
                         <property name="label" translatable="yes">_Contents</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" translatable="yes">Help online</property>
                         <property name="use_underline">True</property>
                         <property name="image">image10</property>
                         <property name="use_stock">False</property>
                         <property name="accel_group">accelgroup1</property>
-                        <signal name="activate" handler="on_contents_menuitem_activate"/>
+                        <signal name="activate" handler="on_contents_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="faq_menuitem">
                         <property name="label" translatable="yes">_FAQ</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" translatable="yes">Frequently Asked Questions (online)</property>
                         <property name="use_underline">True</property>
                         <property name="image">image11</property>
                         <property name="use_stock">False</property>
                         <property name="accel_group">accelgroup1</property>
-                        <signal name="activate" handler="on_faq_menuitem_activate"/>
+                        <signal name="activate" handler="on_faq_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="keyboard_shortcuts_menuitem">
                         <property name="label" translatable="yes">Keyboard Shortcuts</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="image">image14</property>
                         <property name="use_stock">False</property>
-                        <signal name="activate" handler="on_keyboard_shortcuts_menuitem_activate"/>
+                        <signal name="activate" handler="on_keyboard_shortcuts_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkSeparatorMenuItem" id="menuitem1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="features_menuitem">
                         <property name="label" translatable="yes">Fea_tures</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="use_underline">True</property>
                         <property name="image">image12</property>
                         <property name="use_stock">False</property>
                         <property name="accel_group">accelgroup1</property>
-                        <signal name="activate" handler="on_features_menuitem_activate"/>
+                        <signal name="activate" handler="on_features_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="about_menuitem">
                         <property name="label">gtk-about</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <property name="accel_group">accelgroup1</property>
-                        <signal name="activate" handler="on_about_menuitem_activate"/>
+                        <signal name="activate" handler="on_about_menuitem_activate" swapped="no"/>
                       </object>
                     </child>
                   </object>
@@ -335,24 +456,24 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-            <signal name="notify" handler="on_roster_hpaned_notify"/>
+            <signal name="notify" handler="on_roster_hpaned_notify" swapped="no"/>
             <child>
               <object class="GtkVBox" id="roster_vbox2">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="orientation">vertical</property>
                 <child>
                   <object class="GtkEntry" id="rfilter_entry">
                     <property name="can_focus">True</property>
                     <property name="no_show_all">True</property>
                     <property name="editable">False</property>
                     <property name="primary_icon_stock">gtk-clear</property>
-                    <property name="primary_icon_activatable">True</property>
-                    <signal name="changed" handler="on_rfilter_entry_changed"/>
-                    <signal name="icon_press" handler="on_rfilter_entry_icon_press"/>
+                    <signal name="changed" handler="on_rfilter_entry_changed" swapped="no"/>
+                    <signal name="icon-press" handler="on_rfilter_entry_icon_press" swapped="no"/>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
@@ -361,36 +482,40 @@
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="hscrollbar_policy">never</property>
-                    <property name="vscrollbar_policy">automatic</property>
                     <child>
                       <object class="GtkTreeView" id="roster_treeview">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
+                        <property name="has_tooltip">True</property>
                         <property name="headers_visible">False</property>
                         <property name="reorderable">True</property>
-                        <signal name="row_expanded" handler="on_roster_treeview_row_expanded"/>
-                        <signal name="key_press_event" handler="on_roster_treeview_key_press_event"/>
-                        <signal name="scroll_event" handler="on_roster_treeview_scroll_event"/>
-                        <signal name="leave_notify_event" handler="on_roster_treeview_leave_notify_event"/>
-                        <signal name="button_press_event" handler="on_roster_treeview_button_press_event"/>
-                        <signal name="row_activated" handler="on_roster_treeview_row_activated"/>
-                        <signal name="row_collapsed" handler="on_roster_treeview_row_collapsed"/>
-                        <signal name="motion_notify_event" handler="on_roster_treeview_motion_notify_event"/>
-                        <signal name="button_release_event" handler="on_roster_treeview_button_release_event"/>
+                        <signal name="row-expanded" handler="on_roster_treeview_row_expanded" swapped="no"/>
+                        <signal name="key-press-event" handler="on_roster_treeview_key_press_event" swapped="no"/>
+                        <signal name="scroll-event" handler="on_roster_treeview_scroll_event" swapped="no"/>
+                        <signal name="leave-notify-event" handler="on_roster_treeview_leave_notify_event" swapped="no"/>
+                        <signal name="button-press-event" handler="on_roster_treeview_button_press_event" swapped="no"/>
+                        <signal name="row-activated" handler="on_roster_treeview_row_activated" swapped="no"/>
+                        <signal name="row-collapsed" handler="on_roster_treeview_row_collapsed" swapped="no"/>
+                        <signal name="motion-notify-event" handler="on_roster_treeview_motion_notify_event" swapped="no"/>
+                        <signal name="button-release-event" handler="on_roster_treeview_button_release_event" swapped="no"/>
                       </object>
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkComboBox" id="status_combobox">
                     <property name="visible">True</property>
-                    <signal name="changed" handler="on_status_combobox_changed"/>
+                    <property name="can_focus">False</property>
+                    <signal name="changed" handler="on_status_combobox_changed" swapped="no"/>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">2</property>
                   </packing>
                 </child>
@@ -405,81 +530,12 @@
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
       </object>
     </child>
   </object>
-  <object class="GtkAccelGroup" id="accelgroup1"/>
-  <object class="GtkImage" id="image1">
-    <property name="visible">True</property>
-    <property name="stock">gtk-jump-to</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image2">
-    <property name="visible">True</property>
-    <property name="stock">gtk-new</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image3">
-    <property name="visible">True</property>
-    <property name="stock">gtk-connect</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image4">
-    <property name="visible">True</property>
-    <property name="stock">gtk-add</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image5">
-    <property name="visible">True</property>
-    <property name="stock">gtk-find</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image6">
-    <property name="visible">True</property>
-    <property name="stock">gtk-network</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image7">
-    <property name="visible">True</property>
-    <property name="stock">gtk-properties</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image8">
-    <property name="visible">True</property>
-    <property name="stock">gtk-save</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image9">
-    <property name="visible">True</property>
-    <property name="stock">gtk-justify-fill</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image10">
-    <property name="visible">True</property>
-    <property name="stock">gtk-help</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image11">
-    <property name="visible">True</property>
-    <property name="stock">gtk-dialog-question</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image12">
-    <property name="visible">True</property>
-    <property name="stock">gtk-properties</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image13">
-    <property name="visible">True</property>
-    <property name="stock">gtk-disconnect</property>
-    <property name="icon-size">1</property>
-  </object>
-  <object class="GtkImage" id="image14">
-    <property name="visible">True</property>
-    <property name="stock">gtk-info</property>
-    <property name="icon-size">1</property>
-  </object>
 </interface>
diff --git a/data/gui/search_window.ui b/data/gui/search_window.ui
index dc23bda21e4b46aabbfc8b08f1ff77883b9f9050..6af2ca9aae64bc734bfdc4389ce2337a964b23ae 100644
--- a/data/gui/search_window.ui
+++ b/data/gui/search_window.ui
@@ -52,50 +52,15 @@
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="add_contact_button">
+                <property name="label" translatable="yes">_Add contact</property>
                 <property name="sensitive">False</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                 <property name="no_show_all">True</property>
+                <property name="image">image1</property>
+                <property name="use_underline">True</property>
                 <signal name="clicked" handler="on_add_contact_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment2">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox1">
-                        <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image2">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="stock">gtk-add</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label1">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="label" translatable="yes">_Add contact</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -105,50 +70,15 @@
             </child>
             <child>
               <object class="GtkButton" id="information_button">
+                <property name="label" translatable="yes">_Information</property>
                 <property name="sensitive">False</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                 <property name="no_show_all">True</property>
+                <property name="image">image3</property>
+                <property name="use_underline">True</property>
                 <signal name="clicked" handler="on_information_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment3">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox2">
-                        <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image3">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="stock">gtk-info</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label2">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="label" translatable="yes">_Information</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -158,47 +88,14 @@
             </child>
             <child>
               <object class="GtkButton" id="search_button">
+                <property name="label" translatable="yes">_Search</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
+                <property name="image">image2</property>
+                <property name="use_underline">True</property>
                 <signal name="clicked" handler="on_search_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment1">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox5">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image1">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-find</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label58">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">_Search</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -231,4 +128,16 @@
       </object>
     </child>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-add</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="stock">gtk-find</property>
+  </object>
+  <object class="GtkImage" id="image3">
+    <property name="visible">True</property>
+    <property name="stock">gtk-dialog-info</property>
+  </object>
 </interface>
diff --git a/data/gui/service_discovery_window.ui b/data/gui/service_discovery_window.ui
index 46c83e4d048766eaec0a91190cd525446f6b833f..0aa547cc2c2dc12ce2e9156921bcd4ea806b3bda 100644
--- a/data/gui/service_discovery_window.ui
+++ b/data/gui/service_discovery_window.ui
@@ -1,7 +1,11 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-jump-to</property>
+  </object>
   <object class="GtkListStore" id="liststore1">
     <columns>
       <!-- column-name item -->
@@ -9,27 +13,31 @@
     </columns>
   </object>
   <object class="GtkWindow" id="service_discovery_window">
+    <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="role">Service Discovery</property>
     <property name="default_width">550</property>
     <property name="default_height">420</property>
     <property name="type_hint">dialog</property>
-    <signal name="destroy" handler="on_service_discovery_window_destroy"/>
+    <signal name="destroy" handler="on_service_discovery_window_destroy" swapped="no"/>
     <child>
       <object class="GtkVBox" id="vbox11">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <property name="spacing">6</property>
         <child>
           <object class="GtkEventBox" id="banner_agent_eventbox">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
               <object class="GtkHBox" id="banner_agent_hbox">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkLabel" id="banner_agent_label">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0.05000000074505806</property>
                     <property name="ypad">6</property>
                     <property name="label">&lt;span weight="heavy" size="large"&gt;Agent name&lt;/span&gt;
@@ -37,18 +45,22 @@ Agent JID - node</property>
                     <property name="use_markup">True</property>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkImage" id="banner_agent_icon">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xpad">6</property>
                     <property name="ypad">6</property>
                     <property name="stock">gtk-missing-image</property>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
@@ -64,99 +76,56 @@ Agent JID - node</property>
         <child>
           <object class="GtkTable" id="address_table">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="n_rows">3</property>
             <property name="n_columns">3</property>
             <property name="column_spacing">6</property>
             <child>
-              <object class="GtkComboBoxEntry" id="address_comboboxentry">
-                <property name="visible">True</property>
-                <property name="model">liststore1</property>
-                <property name="text_column">0</property>
-                <signal name="changed" handler="on_address_comboboxentry_changed"/>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="y_options">GTK_FILL</property>
-              </packing>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
             </child>
             <child>
               <object class="GtkButton" id="browse_button">
+                <property name="label" translatable="yes">G_o</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="has_default">True</property>
                 <property name="receives_default">False</property>
-                <signal name="clicked" handler="on_go_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment93">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox2995">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image1148">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-jump-to</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label362">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">G_o</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
+                <property name="image">image1</property>
+                <property name="use_underline">True</property>
+                <signal name="clicked" handler="on_go_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="left_attach">2</property>
                 <property name="right_attach">3</property>
                 <property name="bottom_attach">3</property>
                 <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label224">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_Address:</property>
                 <property name="use_underline">True</property>
-                <property name="mnemonic_widget">address_comboboxentry</property>
               </object>
               <packing>
                 <property name="bottom_attach">3</property>
                 <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="y_options"/>
               </packing>
             </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
@@ -164,29 +133,31 @@ Agent JID - node</property>
           <object class="GtkScrolledWindow" id="services_scrollwin">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">automatic</property>
-            <property name="vscrollbar_policy">automatic</property>
             <property name="shadow_type">etched-in</property>
             <child>
               <object class="GtkTreeView" id="services_treeview">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="headers_visible">False</property>
-                <signal name="row_activated" handler="on_services_treeview_row_activated"/>
+                <signal name="row-activated" handler="on_services_treeview_row_activated" swapped="no"/>
               </object>
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">2</property>
           </packing>
         </child>
         <child>
           <object class="GtkHBox" id="hbox2994">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="spacing">12</property>
             <child>
               <object class="GtkProgressBar" id="services_progressbar">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="no_show_all">True</property>
                 <property name="pulse_step">0.10000000149</property>
               </object>
@@ -199,14 +170,18 @@ Agent JID - node</property>
             <child>
               <object class="GtkLabel" id="label363">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
             <child>
               <object class="GtkHBox" id="action_buttonbox">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkButton" id="close_button">
@@ -217,7 +192,7 @@ Agent JID - node</property>
                     <property name="can_default">True</property>
                     <property name="receives_default">False</property>
                     <property name="use_stock">True</property>
-                    <signal name="clicked" handler="on_close_button_clicked"/>
+                    <signal name="clicked" handler="on_close_button_clicked" swapped="no"/>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -229,12 +204,14 @@ Agent JID - node</property>
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">2</property>
               </packing>
             </child>
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="padding">2</property>
             <property name="position">3</property>
           </packing>
diff --git a/data/gui/service_registration_window.ui b/data/gui/service_registration_window.ui
index 3c6d275dc0784b2a2418312f488d3287bc3b761c..f2980291957ebd42af3f822a7d08e0e2964c1c1a 100644
--- a/data/gui/service_registration_window.ui
+++ b/data/gui/service_registration_window.ui
@@ -35,47 +35,14 @@
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="cancel_button">
+                <property name="label" translatable="yes">_Cancel</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
+                <property name="image">image2</property>
+                <property name="use_underline">True</property>
                 <signal name="clicked" handler="on_cancel_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment18">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox22">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image107">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-cancel</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label34">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">_Cancel</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -85,48 +52,15 @@
             </child>
             <child>
               <object class="GtkButton" id="ok_button">
+                <property name="label" translatable="yes">_OK</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="has_default">True</property>
                 <property name="receives_default">False</property>
+                <property name="image">image1</property>
+                <property name="use_underline">True</property>
                 <signal name="clicked" handler="on_ok_button_clicked"/>
-                <child>
-                  <object class="GtkAlignment" id="alignment17">
-                    <property name="visible">True</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox21">
-                        <property name="visible">True</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image106">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-ok</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label33">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">_OK</property>
-                            <property name="use_underline">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -143,4 +77,12 @@
       </object>
     </child>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-apply</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="stock">gtk-cancel</property>
+  </object>
 </interface>
diff --git a/data/gui/systray_context_menu.ui b/data/gui/systray_context_menu.ui
index f502dbcdbabd087c37172f01a434bdef50466c86..c2cc6ae12f45c737797162fc740c50bbea17ec73 100644
--- a/data/gui/systray_context_menu.ui
+++ b/data/gui/systray_context_menu.ui
@@ -15,7 +15,7 @@
     </child>
     <child>
       <object class="GtkImageMenuItem" id="chat_with_menuitem">
-        <property name="label" translatable="yes">_Start Chat</property>
+        <property name="label" translatable="yes">_Start Chat...</property>
         <property name="visible">True</property>
         <property name="use_underline">True</property>
         <property name="image">image2</property>
@@ -25,7 +25,7 @@
     </child>
     <child>
       <object class="GtkImageMenuItem" id="join_gc_menuitem">
-        <property name="label" translatable="yes">_Group Chat</property>
+        <property name="label" translatable="yes">Join _Group Chat</property>
         <property name="visible">True</property>
         <property name="use_underline">True</property>
         <property name="image">image3</property>
@@ -35,7 +35,7 @@
     </child>
     <child>
       <object class="GtkImageMenuItem" id="single_message_menuitem">
-        <property name="label" translatable="yes">Send Single _Message</property>
+        <property name="label" translatable="yes">Send Single _Message...</property>
         <property name="visible">True</property>
         <property name="use_underline">True</property>
         <property name="image">image4</property>
diff --git a/data/gui/vcard_information_window.ui b/data/gui/vcard_information_window.ui
index 71a2f1e281027ca39c47e20023c454052a5c2cfe..b36fe93f581f8cb769e4865b50247efcafe86c5e 100644
--- a/data/gui/vcard_information_window.ui
+++ b/data/gui/vcard_information_window.ui
@@ -201,6 +201,7 @@
                         <child>
                           <object class="GtkEventBox" id="status_label_eventbox">
                             <property name="visible">True</property>
+                            <property name="visible_window">False</property>
                             <child>
                               <object class="GtkLabel" id="status_label">
                                 <property name="visible">True</property>
@@ -942,6 +943,7 @@
                   <object class="GtkEventBox" id="eventbox1">
                     <property name="visible">True</property>
                     <property name="tooltip_text" translatable="yes">Format: YYYY-MM-DD</property>
+                    <property name="visible_window">False</property>
                     <child>
                       <object class="GtkLabel" id="label13">
                         <property name="visible">True</property>
diff --git a/data/gui/xml_console_window.ui b/data/gui/xml_console_window.ui
index 96dff7add46158861472806061a61f5ba0e5360b..350037124ae17ff4e65101e0896a82140e3939e7 100644
--- a/data/gui/xml_console_window.ui
+++ b/data/gui/xml_console_window.ui
@@ -1,20 +1,26 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-apply</property>
+  </object>
   <object class="GtkWindow" id="xml_console_window">
+    <property name="can_focus">False</property>
     <property name="border_width">12</property>
     <property name="default_width">550</property>
     <property name="default_height">450</property>
-    <signal name="destroy" handler="on_xml_console_window_destroy"/>
+    <signal name="destroy" handler="on_xml_console_window_destroy" swapped="no"/>
     <child>
       <object class="GtkVBox" id="vbox">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <property name="spacing">6</property>
         <child>
           <object class="GtkLabel" id="label342">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="xalign">0</property>
             <property name="label" translatable="yes">&lt;b&gt;Jabber Traffic&lt;/b&gt;</property>
             <property name="use_markup">True</property>
@@ -29,8 +35,6 @@
           <object class="GtkScrolledWindow" id="scrolledwindow43">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">automatic</property>
-            <property name="vscrollbar_policy">automatic</property>
             <property name="shadow_type">in</property>
             <child>
               <object class="GtkTextView" id="stanzas_log_textview">
@@ -42,12 +46,15 @@
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkHBox" id="hbox2988">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
               <object class="GtkCheckButton" id="enable_checkbutton">
                 <property name="label" translatable="yes" comments="XML Console enable checkbutton">_Enable</property>
@@ -55,23 +62,16 @@
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
                 <property name="use_underline">True</property>
+                <property name="xalign">0</property>
                 <property name="draw_indicator">True</property>
-                <signal name="toggled" handler="on_enable_checkbutton_toggled"/>
+                <signal name="toggled" handler="on_enable_checkbutton_toggled" swapped="no"/>
               </object>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
-            <child>
-              <object class="GtkLabel" id="label351">
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
             <child>
               <object class="GtkButton" id="clear_button">
                 <property name="label">gtk-clear</property>
@@ -79,12 +79,12 @@
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
+                <signal name="clicked" handler="on_clear_button_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">False</property>
-                <property name="position">2</property>
+                <property name="position">1</property>
               </packing>
             </child>
           </object>
@@ -102,21 +102,25 @@
             <child>
               <object class="GtkVBox" id="input_vbox1">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkHBox" id="hbox1">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkCheckButton" id="in_stanza_checkbutton">
                         <property name="label" translatable="yes">Hide IN stanzas</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
+                        <property name="xalign">0.5</property>
                         <property name="draw_indicator">True</property>
-                        <signal name="toggled" handler="on_in_stanza_checkbutton_toggled"/>
+                        <signal name="toggled" handler="on_in_stanza_checkbutton_toggled" swapped="no"/>
                       </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
@@ -126,10 +130,13 @@
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
+                        <property name="xalign">0.5</property>
                         <property name="draw_indicator">True</property>
-                        <signal name="toggled" handler="on_out_stanza_checkbutton_toggled"/>
+                        <signal name="toggled" handler="on_out_stanza_checkbutton_toggled" swapped="no"/>
                       </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
@@ -139,10 +146,13 @@
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
+                        <property name="xalign">0.5</property>
                         <property name="draw_indicator">True</property>
-                        <signal name="toggled" handler="on_presence_stanza_checkbutton_toggled"/>
+                        <signal name="toggled" handler="on_presence_stanza_checkbutton_toggled" swapped="no"/>
                       </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">2</property>
                       </packing>
                     </child>
@@ -152,10 +162,13 @@
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
+                        <property name="xalign">0.5</property>
                         <property name="draw_indicator">True</property>
-                        <signal name="toggled" handler="on_iq_stanza_checkbutton_toggled"/>
+                        <signal name="toggled" handler="on_iq_stanza_checkbutton_toggled" swapped="no"/>
                       </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">3</property>
                       </packing>
                     </child>
@@ -165,21 +178,27 @@
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
+                        <property name="xalign">0.5</property>
                         <property name="draw_indicator">True</property>
-                        <signal name="toggled" handler="on_message_stanza_checkbutton_toggled"/>
+                        <signal name="toggled" handler="on_message_stanza_checkbutton_toggled" swapped="no"/>
                       </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">4</property>
                       </packing>
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkHBox" id="hbox2">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
                       <placeholder/>
                     </child>
@@ -188,6 +207,8 @@
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
@@ -196,6 +217,7 @@
             <child type="label">
               <object class="GtkLabel" id="label2">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">&lt;b&gt;Filter&lt;/b&gt;</property>
                 <property name="use_markup">True</property>
@@ -204,6 +226,7 @@
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">3</property>
           </packing>
         </child>
@@ -212,18 +235,17 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="spacing">6</property>
-            <signal name="activate" handler="on_expander_activate"/>
+            <signal name="activate" handler="on_expander_activate" swapped="no"/>
             <child>
               <object class="GtkVBox" id="input_vbox">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkScrolledWindow" id="scrolledwindow42">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="hscrollbar_policy">never</property>
-                    <property name="vscrollbar_policy">automatic</property>
                     <property name="shadow_type">in</property>
                     <child>
                       <object class="GtkTextView" id="input_textview">
@@ -235,12 +257,15 @@
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkHButtonBox" id="hbuttonbox31">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="spacing">6</property>
                     <property name="layout_style">end</property>
                     <child>
@@ -251,7 +276,7 @@
                         <property name="receives_default">False</property>
                         <property name="tooltip_text" translatable="yes">Info/Query</property>
                         <property name="use_underline">True</property>
-                        <signal name="clicked" handler="on_iq_button_clicked"/>
+                        <signal name="clicked" handler="on_iq_button_clicked" swapped="no"/>
                       </object>
                       <packing>
                         <property name="expand">False</property>
@@ -266,7 +291,7 @@
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
                         <property name="use_underline">True</property>
-                        <signal name="clicked" handler="on_presence_button_clicked"/>
+                        <signal name="clicked" handler="on_presence_button_clicked" swapped="no"/>
                       </object>
                       <packing>
                         <property name="expand">False</property>
@@ -281,7 +306,7 @@
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
                         <property name="use_underline">True</property>
-                        <signal name="clicked" handler="on_message_button_clicked"/>
+                        <signal name="clicked" handler="on_message_button_clicked" swapped="no"/>
                       </object>
                       <packing>
                         <property name="expand">False</property>
@@ -291,47 +316,14 @@
                     </child>
                     <child>
                       <object class="GtkButton" id="send_button">
+                        <property name="label" translatable="yes">_Send</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="can_default">True</property>
                         <property name="receives_default">False</property>
-                        <signal name="clicked" handler="on_send_button_clicked"/>
-                        <child>
-                          <object class="GtkAlignment" id="alignment80">
-                            <property name="visible">True</property>
-                            <property name="xscale">0</property>
-                            <property name="yscale">0</property>
-                            <child>
-                              <object class="GtkHBox" id="hbox2980">
-                                <property name="visible">True</property>
-                                <property name="spacing">2</property>
-                                <child>
-                                  <object class="GtkImage" id="image833">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-apply</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkLabel" id="label341">
-                                    <property name="visible">True</property>
-                                    <property name="label" translatable="yes">_Send</property>
-                                    <property name="use_underline">True</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
+                        <property name="image">image1</property>
+                        <property name="use_underline">True</property>
+                        <signal name="clicked" handler="on_send_button_clicked" swapped="no"/>
                       </object>
                       <packing>
                         <property name="expand">False</property>
@@ -351,6 +343,7 @@
             <child type="label">
               <object class="GtkLabel" id="label343">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="xalign">0</property>
                 <property name="label" translatable="yes">&lt;b&gt;XML Input&lt;/b&gt;</property>
                 <property name="use_markup">True</property>
@@ -359,6 +352,7 @@
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">4</property>
           </packing>
         </child>
diff --git a/data/other/cacerts.pem b/data/other/cacerts.pem
index cdcbc425e1c959930ab9208847714ef621a0c32b..b84848519e13b73978c2fa2fbb15a962c0a560e0 100644
--- a/data/other/cacerts.pem
+++ b/data/other/cacerts.pem
@@ -1,439 +1,47 @@
-ABAecom_=sub.__Am._Bankers_Assn.=_Root_CA
------BEGIN CERTIFICATE-----
-MIIDtTCCAp2gAwIBAgIRANAeQJAAAEZSAAAAAQAAAAQwDQYJKoZIhvcNAQEF
-BQAwgYkxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJEQzETMBEGA1UEBxMKV2Fz
-aGluZ3RvbjEXMBUGA1UEChMOQUJBLkVDT00sIElOQy4xGTAXBgNVBAMTEEFC
-QS5FQ09NIFJvb3QgQ0ExJDAiBgkqhkiG9w0BCQEWFWFkbWluQGRpZ3NpZ3Ry
-dXN0LmNvbTAeFw05OTA3MTIxNzMzNTNaFw0wOTA3MDkxNzMzNTNaMIGJMQsw
-CQYDVQQGEwJVUzELMAkGA1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24x
-FzAVBgNVBAoTDkFCQS5FQ09NLCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBS
-b290IENBMSQwIgYJKoZIhvcNAQkBFhVhZG1pbkBkaWdzaWd0cnVzdC5jb20w
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx0xHgeVVDBwhMywVC
-AOINg0Y95JO6tgbTDVm9PsHOQ2cBiiGo77zM0KLMsFWWU4RmBQDaREmA2FQK
-pSWGlO1jVv9wbKOhGdJ4vmgqRF4vz8wYXke8OrFGPR7wuSw0X4x8TAgpnUBV
-6zx9g9618PeKgw6hTLQ6pbNfWiKX7BmbwQVo/ea3qZGULOR4SCQaJRk665Wc
-OQqKz0Ky8BzVX/tr7WhWezkscjiw7pOp03t3POtxA6k4ShZsiSrK2jMTecJV
-jO2cu/LLWxD4LmE1xilMKtAqY9FlWbT4zfn0AIS2V0KFnTKo+SpU+/94Qby9
-cSj0u5C8/5Y0BONFnqFGKECBAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYBAf8C
-AQgwDQYJKoZIhvcNAQEFBQADggEBAARvJYbk5pYntNlCwNDJALF/VD6Hsm0k
-qS8Kfv2kRLD4VAe9G52dyntQJHsRW0mjpr8SdNWJt7cvmGQlFLdh6X9ggGvT
-ZOirvRrWUfrAtF13Gn9kCF55xgVM8XrdTX3O5kh7VNJhkoHWG9YA8A6eKHeg
-TYjHInYZw8eeG6Z3ePhfm1bR8PIXrI6dWeYf/le22V7hXZ9F7GFoGUHhsiAm
-/lowdiT/QHI8eZ98IkirRs3bs4Ysj78FQdPB4xTjQRcm0HyncUwZ6EoPclgx
-fexgeqMiKL0ZJGA/O4dzwGvky663qyVDslUte6sGDnVdNOVdc22esnVApVnJ
-TzFxiNmIf1Q=
------END CERTIFICATE-----
-
-AddTrust_External_Root
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4
-dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5h
-bCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzEL
-MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1B
-ZGRUcnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1
-c3QgRXh0ZXJuYWwgQ0EgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALf3GjPm8gAELTngTlvtH7xsD821+iO2zt6bETOXpClMfZOfvUq8
-k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfwTz/oMp50
-ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504
-B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDez
-eWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5
-aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0WicCAwEAAaOB
-3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0PBAQD
-AgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6
-xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdv
-cmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJ
-KoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
-j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5R
-xNKWt9x+Tu5w/Rw56wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjT
-K3rMUUKhemPR5ruhxSvCNr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1
-n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHx
-REzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49O
-hgQ=
------END CERTIFICATE-----
-
-AddTrust_Low-Value_Services_Root
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRU
-UCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3Qw
-HhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRU
-UCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3Qw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwze
-xODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY654eyNAbFvAWlA3yCyykQruGI
-gb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWroulpOj0O
-M3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1Lc
-sRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5
-mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG
-9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0OBBYEFJWxtPCU
-tr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
-MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQsw
-CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
-ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAx
-IENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0
-MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
-iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9
-tTEv2dB8Xfjea4MYeDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL
-/bscVjby/rK25Xa71SJlpz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlV
-g3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6
-tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
-
-AddTrust_Public_Services_Root
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRU
-UCBOZXR3b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAe
-Fw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNF
-MRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
-IE5ldHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+
-A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c
-+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1id9NEHif2
-P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKX
-C1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8R
-s3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9
-BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQWBBSBPjfYkrAf
-d59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zCB
-jgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkG
-A1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
-cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmu
-G7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
-+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbj
-PGsye/Kf8Lb93/AoGEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bY
-GozH7ZxOmuASu7VqTITh4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6
-NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9HEufOX1362Kqx
-My3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
-
-AddTrust_Qualified_Certificates_Root
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRU
-UCBOZXR3b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9v
-dDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYT
-AlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3Qg
-VFRQIE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBS
-b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoek
-n0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKk
-IhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3KP0q6p6z
-sLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1t
-UvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R
-+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvES
-a0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0GA1UdDgQWBBQ5
-lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkw
-ZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
-ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVh
-bGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2Vh
-lRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
-GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx9
-5dr6h+sNNVJn0J6XdgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKF
-Yqa0p9m9N5xotS1WfbC3P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVA
-wRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQw
-dOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
------END CERTIFICATE-----
-
-America_Online_Root_Certification_Authority_1
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJV
-UzEcMBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1l
-cmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4X
-DTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMx
-HDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJp
-Y2EgT25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCa
-xlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CGv2BlnEtUiMJIxUo5vxTjWVXl
-GbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44zDyL9Hy7n
-BzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145Lcx
-VR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiE
-mf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCu
-JKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
-HQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Zo/Z5
-9m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUA
-A4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
-Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOM
-IOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTI
-dGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
-Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j
-8uB9Gr784N/Xx6dssPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
-
-America_Online_Root_Certification_Authority_2
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJV
-UzEcMBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1l
-cmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4X
-DTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMx
-HDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJp
-Y2EgT25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssN
-t79Hc9PwVU3dxgz6sWYFas14tNwC206B89enfHG8dWOgXeMHDEjsJcQDIPT/
-DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8f3SkWq7x
-uhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE
-18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxr
-kJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMD
-bi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8BPeraunzgWGcX
-uVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn6KVu
-Y8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9
-W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
-o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48
-ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124Hhn
-AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
-aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNee
-MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypL
-M7PmG2tZTiLMubekJcmnxPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qf
-tIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjR
-Ywu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R
-+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr
-+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVM
-nNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMADjMSW7yV5TKQqLPGbIOt
-d+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh1NolNscI
-WC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZ
-ZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y
-3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz
-2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
-RY8mkaKO/qk=
------END CERTIFICATE-----
-
-AOL_Time_Warner_Root_Certification_Authority_1
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMC
-VVMxHTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNB
-bWVyaWNhIE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAw
-MFoXDTM3MTEyMDE1MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRB
-T0wgVGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUg
-SW5jLjE3MDUGA1UEAxMuQU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U0pPlLYnKhHw/EEMbjIt8hFj4JHxI
-zyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItITuLCxFlpMGK2MKKMCxGZYTVt
-fu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAfRC+iYkGzuxgh28pxPIzs
-trkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqFzQ6axOAAsNUl6twr
-5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqhBC4aMqiaILGc
-LCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEAAaNjMGEw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jYPXy+
-XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/
-BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNM
-eUWn9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7
-CegCgTXTCt8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77Bf
-WgDrvq2g+EQFZ7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oT
-LW4jYYehY0KswsuXn2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCz
-vhGbRWeDhhmH05i9CBoWH1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmw
-X7A5KGgOc90lmt4S
------END CERTIFICATE-----
-
-AOL_Time_Warner_Root_Certification_Authority_2
------BEGIN CERTIFICATE-----
-MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMC
-VVMxHTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNB
-bWVyaWNhIE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAw
-MFoXDTM3MDkyODIzNDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRB
-T0wgVGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUg
-SW5jLjE3MDUGA1UEAxMuQU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
-ggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ7ouZzU9AhqS2TcnZsdw8TQ2FTBVs
-RotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilbm2BPJoPRYxJWSXakFsKlnUWs
-i4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOYxFSMFkpBd4aVdQxHAWZg
-/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZYYCLqJV+FNwSbKTQ
-2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbqJS5Gr42whTg0
-ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fxI2rSAG2X
-+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETzkxml
-J85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh
-EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNo
-Kk/SBtc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJ
-Kg71ZDIMgtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1Ex
-MVCgyhwn2RAurda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMB
-Af8wHQYDVR0OBBYEFE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaA
-FE9pbQN+nZ8HGEO8txBO1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAO/Ouyuguh4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0
-cnAxa8cZmIDJgt43d15Ui47y6mdPyXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRF
-ASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q7C+qPBR7V8F+GBRn7iTGvboVsNIY
-vbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKTRuidDV29rs4prWPVVRaAMCf/
-drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/ClTluUI8JPu3B5wwn3la
-5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyBM5kYJRF3p+v9WAks
-mWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQmy8YJPamTQr5
-O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xOAU++CrYD
-062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT9Y41
-xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H
-hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOL
-Z8/5fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
------END CERTIFICATE-----
-
-Baltimore_CyberTrust_Root
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQG
-EwJJRTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0
-MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUx
-MjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNV
-BAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZ
-QmFsdGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKMEuyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+h
-Xe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gR
-QKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/CG9VwcPCP
-wBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1
-pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNT
-Px8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkC
-AwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1BE3wMBIGA1Ud
-EwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUA
-A4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkT
-I7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
-jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/
-oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67
-G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
-RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
-
-beTRUSTed_Root_CA-Baltimore_Implementation
------BEGIN CERTIFICATE-----
-MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQK
-EwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEG
-A1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0EtQmFsdGltb3JlIEltcGxlbWVudGF0
-aW9uMB4XDTAyMDQxMTA3Mzg1MVoXDTIyMDQxMTA3Mzg1MVowZjESMBAGA1UE
-ChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAx
-BgNVBAMTKmJlVFJVU1RlZCBSb290IENBLUJhbHRpbW9yZSBJbXBsZW1lbnRh
-dGlvbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALx+xDmcjOPW
-HIb/ymKt4H8wRXqOGrO4x/nRNv8i805qX4QQ+2aBw5R5MdKR4XeOGCrDFN5R
-9U+jK7wYFuK13XneIviCfsuBH/0nLI/6l2Qijvj/YaOcGx6Sj8CoCd8JEey3
-fTGaGuqDIQY8n7pc/5TqarjDa1U0Tz0yH92BFODEPM2dMPgwqZfT7syj0B9f
-HBOB1BirlNFjw55/NZKeX0Tq7PQiXLfoPX2k+YmpkbIq2eszh+6l/ePazIjm
-iSZuxyuC0F6dWdsU7JGDBcNeDsYq0ATdcT0gTlgn/FP7eHgZFLL8kFKJOGJg
-B7Sg7KxrUNb9uShr71ItOrL/8QFArDcCAwEAAaOCAh4wggIaMA8GA1UdEwEB
-/wQFMAMBAf8wggG1BgNVHSAEggGsMIIBqDCCAaQGDysGAQQBsT4AAAEJKIOR
-MTCCAY8wggFIBggrBgEFBQcCAjCCAToaggE2UmVsaWFuY2Ugb24gb3IgdXNl
-IG9mIHRoaXMgQ2VydGlmaWNhdGUgY3JlYXRlcyBhbiBhY2tub3dsZWRnbWVu
-dCBhbmQgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5k
-YXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgdGhlIENlcnRpZmlj
-YXRpb24gUHJhY3RpY2UgU3RhdGVtZW50IGFuZCB0aGUgUmVseWluZyBQYXJ0
-eSBBZ3JlZW1lbnQsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdCB0aGUgYmVUUlVT
-VGVkIHdlYiBzaXRlLCBodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVj
-dHNfc2VydmljZXMvaW5kZXguaHRtbDBBBggrBgEFBQcCARY1aHR0cDovL3d3
-dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWww
-HQYDVR0OBBYEFEU9w6nR3D8kVpgccxiIav+DR+22MB8GA1UdIwQYMBaAFEU9
-w6nR3D8kVpgccxiIav+DR+22MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0B
-AQUFAAOCAQEASZK8o+6svfoNyYt5hhwjdrCAWXf82n+0S9/DZEtqTg6t8n1Z
-dwWtColzsPq8y9yNAIiPpqCy6qxSJ7+hSHyXEHu67RMdmgduyzFiEuhjA6p9
-beP4G3YheBufS0OM00mG9htc9i5gFdPp43t1P9ACg9AYgkHNZTfqjjJ+vWuZ
-XTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb4cV97yHgjQ5d
-UX2xZ/2jvTg2xvI4hocalmhgRvsoFEdV4aeADGvi6t9NfJBIoDa9CReJf8Py
-05yc493EG931t3GzUwWJBtDLSoDByFOQtTwxiBdQn8nEDovYqAJjDQ==
------END CERTIFICATE-----
-
-beTRUSTed_Root_CA
------BEGIN CERTIFICATE-----
-MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQG
-EwJXVzESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQg
-Um9vdCBDQXMxGjAYBgNVBAMTEWJlVFJVU1RlZCBSb290IENBMB4XDTAwMDYy
-MDE0MjEwNFoXDTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMCV1cxEjAQBgNV
-BAoTCWJlVFJVU1RlZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRow
-GAYDVQQDExFiZVRSVVNUZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBANS0c3oTCjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4
-SP+00PpeQY1hRIfo7clY+vyTmt9P6j41ffgzeubx181vSUs9Ty1uDoM6GHh3
-o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwMjmVZxXH/YgmPqsWPzGCgc0rXOD8V
-cr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX2P8ZDoMbjNx4RWc0PfSvHI3k
-bWvtILNnmrRhyxdviTX/507AMhLn7uzf/5cwdO2NR47rtMNE5qdMf1ZD6Li8
-tr76g5fmu/vEtpO+GRg+jIG5c4gW9JZDnGdzF5DYCW5jrEq2I8QBoa2k5MUC
-AwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8wggFZBgNVHSAEggFQMIIB
-TDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQagfFSZWxp
-YW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVz
-IGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0
-ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9u
-IHByYWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IGJl
-VFJVU1RlZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29t
-L3ZhdWx0L3Rlcm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNU
-ZWQuY29tL3ZhdWx0L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYD
-VQQKEwliZVRSVVNUZWQxCzAJBgNVBAYTAldXMB0GA1UdDgQWBBQquZtpLjub
-2M3eKjEENGvKBxirZzAfBgNVHSMEGDAWgBQquZtpLjub2M3eKjEENGvKBxir
-ZzAOBgNVHQ8BAf8EBAMCAf4wDQYJKoZIhvcNAQEFBQADggEBAHlh26Nebhax
-6nZR+csVm8tpvuaBa58oH2U+3RGFktToQb9+M70j5/Egv6S0phkBxoyNNXxl
-pE8JpNbYIxUFE6dDea/bow6be3ga8wSGWsb2jCBHOElQBp1yZzrwmAOtlmdE
-/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ1gMe1lMBzW1MaFVA4e5rxyoA
-AEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5mlWXKWWuGVUlBXJH
-0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYctmBjRYoQtLpG
-EK5BV2VsPyMQPyEQWbfkQN0mDCP2qq4=
------END CERTIFICATE-----
-
-beTRUSTed_Root_CA_-_Entrust_Implementation
------BEGIN CERTIFICATE-----
-MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQK
-EwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEG
-A1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0EgLSBFbnRydXN0IEltcGxlbWVudGF0
-aW9uMB4XDTAyMDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1owZjESMBAGA1UE
-ChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAx
-BgNVBAMTKmJlVFJVU1RlZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRh
-dGlvbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1
-Q+xVkrYwfTVXDNvzDSduTPdQqJtOK2/b9a0cS12zqcH+e0TrW6MFDR/FNCsw
-ACnxeECypP869AGIF37m1CbTukzqMvtDd5eHI8XbQ6P1KqNRXuE70mVpflUV
-m3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdjDheT389Lrm5zdeDzqrmkwAkb
-hepxKYhBMvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCeyv78IZTuEyhL11xeDGbu
-6bsPwTSxfwh28z0mcMmLJR1iJAzqHHVOwBLkuhMdMCktVjMFu5dZfsZJT4nX
-LySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOCAwUwggMBMIIBtwYDVR0g
-BIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYIKwYBBQUH
-AgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRpZmlj
-YXRlIGNyZWF0ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ug
-b2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29u
-ZGl0aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0
-YXRlbWVudCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGlj
-aCBjYW4gYmUgZm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0
-cHM6Ly93d3cuYmV0cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRl
-eC5odG1sMEIGCCsGAQUFBwIBFjZodHRwczovL3d3dy5iZXRydXN0ZWQuY29t
-L3Byb2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWwwEQYJYIZIAYb4QgEBBAQD
-AgAHMIGJBgNVHR8EgYEwfzB9oHugeaR3MHUxEjAQBgNVBAoTCWJlVFJVU1Rl
-ZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMTMwMQYDVQQDEypiZVRS
-VVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1wbGVtZW50YXRpb24xDTALBgNV
-BAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0MTEwODI0MjdagQ8yMDIyMDQx
-MTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFH1w5a44iwY/qhwa
-j/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQwqoSEFjAMBgNV
-HRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkq
-hkiG9w0BAQUFAAOCAQEAKrgXzh8QlOu4mre5X+za95IkrNySO8cgjfKZ5V04
-ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevdkObRVlTa4y0MnxEylCIB
-evZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/T220
-Y/ozADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2
-KjiS2d2kXgClzMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFi
-aDrmLzfzgYYhxKlkqu9FNtEaZnz46TfW1mG+oq1I59/mdP7TbX3SJdysYlep
-9w==
------END CERTIFICATE-----
-
-beTRUSTed_Root_CA_-_RSA_Implementation
------BEGIN CERTIFICATE-----
-MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUF
-ADBiMRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBS
-b290IENBczEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1w
-bGVtZW50YXRpb24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEyMTEwNzI1WjBi
-MRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290
-IENBczEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVt
-ZW50YXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQw
-CY5X0LkGLG9uJIAiv11DpvpPrILnHGhwhRujbrWqeNluB0s/6d/16uhUoWGK
-Di9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I1DpAa5LxmZZk3tv/ePTulh1HiXzU
-vrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPktPDgaTuID0GQ+NRxQyTBjyZL
-O1bp/4xsN+lFrYWMU8NghpBKlsmzVLC7F/AcRdnUGxlkVgoZ98zh/4avflhe
-rHqQH8koOUV7orbHnB/ahdQhhlkwk75TMzf270HPM8ercmsl9fNTGwxMLvF1
-S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMBAAGjggIYMIICFDAMBgNV
-HRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+AAADCSiD
-kTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20v
-cHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIB
-OhqCATZSZWxpYW5jZSBvbiBvciB1c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBj
-cmVhdGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2NlcHRhbmNlIG9mIHRo
-ZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlv
-bnMgb2YgdXNlLCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1l
-bnQgYW5kIHRoZSBSZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2Fu
-IGJlIGZvdW5kIGF0IHRoZSBiZVRSVVNUZWQgd2ViIHNpdGUsIGh0dHA6Ly93
-d3cuYmV0cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1s
-MAsGA1UdDwQEAwIBBjAfBgNVHSMEGDAWgBSp7BR++dlDzFMrFK3P9/BZiUHN
-GTAdBgNVHQ4EFgQUqewUfvnZQ8xTKxStz/fwWYlBzRkwDQYJKoZIhvcNAQEF
-BQADggEBANuXsHXqDMTBmMpWBcCorSZIry0g6IHHtt9DwSwddUvUQo3neqh0
-3GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05pmuKmET7m9cqg5c0Lcd9NUwt
-NLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbdLrML3kqNWz2rDcI1
-UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28BbJ1zTcwfBwvNM
-m2+fG8oeqqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3SK41ty8y
-mmFei74pnykkiFY5LKjSq5YDWtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
------END CERTIFICATE-----
-
-CAcert_org_-_root_CA
+cacert.org/cacert.org_class3.crt
+-----BEGIN CERTIFICATE-----
+MIIHWTCCBUGgAwIBAgIDCkGKMA0GCSqGSIb3DQEBCwUAMHkxEDAOBgNVBAoTB1Jv
+b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
+Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y
+dEBjYWNlcnQub3JnMB4XDTExMDUyMzE3NDgwMloXDTIxMDUyMDE3NDgwMlowVDEU
+MBIGA1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0
+Lm9yZzEcMBoGA1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdDCCAiIwDQYJKoZIhvcN
+AQEBBQADggIPADCCAgoCggIBAKtJNRFIfNImflOUz0Op3SjXQiqL84d4GVh8D57a
+iX3h++tykA10oZZkq5+gJJlz2uJVdscXe/UErEa4w75/ZI0QbCTzYZzA8pD6Ueb1
+aQFjww9W4kpCz+JEjCUoqMV5CX1GuYrz6fM0KQhF5Byfy5QEHIGoFLOYZcRD7E6C
+jQnRvapbjZLQ7N6QxX8KwuPr5jFaXnQ+lzNZ6MMDPWAzv/fRb0fEze5ig1JuLgia
+pNkVGJGmhZJHsK5I6223IeyFGmhyNav/8BBdwPSUp2rVO5J+TJAFfpPBLIukjmJ0
+FXFuC3ED6q8VOJrU0gVyb4z5K+taciX5OUbjchs+BMNkJyIQKopPWKcDrb60LhPt
+XapI19V91Cp7XPpGBFDkzA5CW4zt2/LP/JaT4NsRNlRiNDiPDGCbO5dWOK3z0luL
+oFvqTpa4fNfVoIZwQNORKbeiPK31jLvPGpKK5DR7wNhsX+kKwsOnIJpa3yxdUly6
+R9Wb7yQocDggL9V/KcCyQQNokszgnMyXS0XvOhAKq3A6mJVwrTWx6oUrpByAITGp
+rmB6gCZIALgBwJNjVSKRPFbnr9s6JfOPMVTqJouBWfmh0VMRxXudA/Z0EeBtsSw/
+LIaRmXGapneLNGDRFLQsrJ2vjBDTn8Rq+G8T/HNZ92ZCdB6K4/jc0m+YnMtHmJVA
+BfvpAgMBAAGjggINMIICCTAdBgNVHQ4EFgQUdahxYEyIE/B42Yl3tW3Fid+8sXow
+gaMGA1UdIwSBmzCBmIAUFrUyG9TH8+DmjvO90rA67rI5GNGhfaR7MHkxEDAOBgNV
+BAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAG
+A1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
+c3VwcG9ydEBjYWNlcnQub3JnggEAMA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUH
+AQEEUTBPMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggr
+BgEFBQcwAoYcaHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBB
+MD8GCCsGAQQBgZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9y
+Zy9pbmRleC5waHA/aWQ9MTAwNAYJYIZIAYb4QgEIBCcWJWh0dHA6Ly93d3cuQ0Fj
+ZXJ0Lm9yZy9pbmRleC5waHA/aWQ9MTAwUAYJYIZIAYb4QgENBEMWQVRvIGdldCB5
+b3VyIG93biBjZXJ0aWZpY2F0ZSBmb3IgRlJFRSwgZ28gdG8gaHR0cDovL3d3dy5D
+QWNlcnQub3JnMA0GCSqGSIb3DQEBCwUAA4ICAQApKIWuRKm5r6R5E/CooyuXYPNc
+7uMvwfbiZqARrjY3OnYVBFPqQvX56sAV2KaC2eRhrnILKVyQQ+hBsuF32wITRHhH
+Va9Y/MyY9kW50SD42CEH/m2qc9SzxgfpCYXMO/K2viwcJdVxjDm1Luq+GIG6sJO4
+D+Pm1yaMMVpyA4RS5qb1MyJFCsgLDYq4Nm+QCaGrvdfVTi5xotSu+qdUK+s1jVq3
+VIgv7nSf7UgWyg1I0JTTrKSi9iTfkuO960NAkW4cGI5WtIIS86mTn9S8nK2cde5a
+lxuV53QtHA+wLJef+6kzOXrnAzqSjiL2jA3k2X4Ndhj3AfnvlpaiVXPAPHG0HRpW
+Q7fDCo1y/OIQCQtBzoyUoPkD/XFzS4pXM+WOdH4VAQDmzEoc53+VGS3FpQyLu7Xt
+hbNc09+4ufLKxw0BFKxwWMWMjTPUnWajGlCVI/xI4AZDEtnNp4Y5LzZyo4AQ5OHz
+0ctbGsDkgJp8E3MGT9ujayQKurMcvEp4u+XjdTilSKeiHq921F73OIZWWonO1sOn
+ebJSoMbxhbQljPI/lrMQ2Y1sVzufb4Y6GIIiNsiwkTjbKqGTqoQ/9SdlrnPVyNXT
+d+pLncdBu8fA46A/5H2kjXPmEkvfoXNzczqA6NXLji/L6hOn1kGLrPo8idck9U60
+4GGSt/M3mMS+lqO3ig==
+-----END CERTIFICATE-----
+cacert.org/cacert.org_root.crt
 -----BEGIN CERTIFICATE-----
 MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
 IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
@@ -475,2044 +83,250 @@ GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
 zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
 omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
 -----END CERTIFICATE-----
-
-CAcert_org_-_class3_CA
------BEGIN CERTIFICATE-----
-MIIGCDCCA/CgAwIBAgIBATANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wNTEwMTQwNzM2NTVaFw0zMzAzMjgwNzM2NTVaMFQxFDAS
-BgNVBAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5v
-cmcxHDAaBgNVBAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwggIiMA0GCSqGSIb3DQEB
-AQUAA4ICDwAwggIKAoICAQCrSTURSHzSJn5TlM9Dqd0o10Iqi/OHeBlYfA+e2ol9
-4fvrcpANdKGWZKufoCSZc9riVXbHF3v1BKxGuMO+f2SNEGwk82GcwPKQ+lHm9WkB
-Y8MPVuJKQs/iRIwlKKjFeQl9RrmK8+nzNCkIReQcn8uUBByBqBSzmGXEQ+xOgo0J
-0b2qW42S0OzekMV/CsLj6+YxWl50PpczWejDAz1gM7/30W9HxM3uYoNSbi4ImqTZ
-FRiRpoWSR7CuSOtttyHshRpocjWr//AQXcD0lKdq1TuSfkyQBX6TwSyLpI5idBVx
-bgtxA+qvFTia1NIFcm+M+SvrWnIl+TlG43IbPgTDZCciECqKT1inA62+tC4T7V2q
-SNfVfdQqe1z6RgRQ5MwOQluM7dvyz/yWk+DbETZUYjQ4jwxgmzuXVjit89Jbi6Bb
-6k6WuHzX1aCGcEDTkSm3ojyt9Yy7zxqSiuQ0e8DYbF/pCsLDpyCaWt8sXVJcukfV
-m+8kKHA4IC/VfynAskEDaJLM4JzMl0tF7zoQCqtwOpiVcK01seqFK6QcgCExqa5g
-eoAmSAC4AcCTY1UikTxW56/bOiXzjzFU6iaLgVn5odFTEcV7nQP2dBHgbbEsPyyG
-kZlxmqZ3izRg0RS0LKydr4wQ05/EavhvE/xzWfdmQnQeiuP43NJvmJzLR5iVQAX7
-6QIDAQABo4G/MIG8MA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUHAQEEUTBPMCMG
-CCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggrBgEFBQcwAoYc
-aHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBBMD8GCCsGAQQB
-gZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9pbmRleC5w
-aHA/aWQ9MTAwDQYJKoZIhvcNAQEEBQADggIBAH8IiKHaGlBJ2on7oQhy84r3HsQ6
-tHlbIDCxRd7CXdNlafHCXVRUPIVfuXtCkcKZ/RtRm6tGpaEQU55tiKxzbiwzpvD0
-nuB1wT6IRanhZkP+VlrRekF490DaSjrxC1uluxYG5sLnk7mFTZdPsR44Q4Dvmw2M
-77inYACHV30eRBzLI++bPJmdr7UpHEV5FpZNJ23xHGzDwlVks7wU4vOkHx4y/CcV
-Bc/dLq4+gmF78CEQGPZE6lM5+dzQmiDgxrvgu1pPxJnIB721vaLbLmINQjRBvP+L
-ivVRIqqIMADisNS8vmW61QNXeZvo3MhN+FDtkaVSKKKs+zZYPumUK5FQhxvWXtaM
-zPcPEAxSTtAWYeXlCmy/F8dyRlecmPVsYGN6b165Ti/Iubm7aoW8mA3t+T6XhDSU
-rgCvoeXnkm5OvfPi2RSLXNLrAWygF6UtEOucekq9ve7O/e0iQKtwOIj1CodqwqsF
-YMlIBdpTwd5Ed2qz8zw87YC8pjhKKSRf/lk7myV6VmMAZLldpGJ9VzZPrYPvH5JT
-oI53V93lYRE9IwCQTDz6o2CTBKOvNfYOao9PSmCnhQVsRqGP9Md246FZV/dxssRu
-FFxtbUFm3xuTsdQAw+7Lzzw9IYCpX2Nl/N3gX6T0K/CFcUHUZyX7GrGXrtaZghNB
-0m6lG5kngOcLqagA
------END CERTIFICATE-----
-
-
-Certum_Root_CA
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYT
-AlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNl
-cnR1bSBDQTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJ
-BgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNV
-BAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AM6xwS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYV
-M42sLQnFdvkrOYCJ5JdLkKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/Ox
-LjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE
-7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/KUz/iDsaW
-VhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu
-/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYD
-VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESS
-bLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQaTOs9qmdvLdTN
-/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvgGrZg
-FCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqT
-E5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
-O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYV
-IZQs6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
-
-Comodo_AAA_Services_root
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJH
-QjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxm
-b3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFB
-IENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIz
-MTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
-Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENB
-IExpbWl0ZWQxITAfBgNVBAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL5AnfRu4ep2hxxNRUSO
-vkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhGC1Pqy0wk
-wLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfH
-dr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf04
-9vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULi
-mAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cmez6KJcfA3Z3m
-NWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEKIz6W
-8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB
-Af8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
-QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwu
-Y29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG
-9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
-7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHC
-v8S5dIa2LX1rzNLzRt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdV
-CYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAV
-GI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C12yxow+ev+to
-51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
-
-Comodo_Secure_Services_root
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJH
-QjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxm
-b3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2Vj
-dXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4
-MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIg
-TWFuY2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2Rv
-IENBIExpbWl0ZWQxJDAiBgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2
-aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMBxM4KK0HDr
-c4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP9nQ95IDC
-+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8
-j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWC
-iIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtG
-Cd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz6YiO/O1R65Nx
-Tq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4EFgQU
-PNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB
-/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
-Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNo
-dHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNl
-cy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
-4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiF
-Gv45jN5bBAS0VPmjZ55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXG
-De+X3EyrEeFryzHRbPtIgKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsF
-Vy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfU
-a7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6s
-Cx1HRR3B7Hzs/Sk=
------END CERTIFICATE-----
-
-Comodo_Trusted_Services_root
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJH
-QjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxm
-b3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1
-c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0y
-ODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVy
-IE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9k
-byBDQSBMaW1pdGVkMSUwIwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNl
-cnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhT
-WvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh73TkVvFVI
-xO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9
-C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/
-oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW1O24zG71++IsWL1/
-T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7kUlcsutT6vif
-R4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1UdDgQW
-BBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
-ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2
-hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2Vy
-dmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
-uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdT
-mw7pSqBYaWcOrp32pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+C
-l5EfKNsYEYwq5GWDVxISjBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/g
-hhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVF
-wL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOj
-GM9O9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
-
-Digital_Signature_Trust_Co._Global_CA_1
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQG
-EwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREw
-DwYDVQQLEwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQw
-MjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVy
-ZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEB
-AQUAA4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlR
-EmlvMVW5SXIACH7TpWJENySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+Lth
-zfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2io74CTADKAqjuAQIxZA9SLRN0
-dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBoBgNVHR8E
-YTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwg
-U2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNV
-BAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIx
-MDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5fpFpRhgTCgJ3
-pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAMBgNV
-HRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3
-DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
-QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomA
-sH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6
-w4pl
------END CERTIFICATE-----
-
-Digital_Signature_Trust_Co._Global_CA_2
------BEGIN CERTIFICATE-----
-MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGp
-MQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBM
-YWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENv
-LjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx
-ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDEx
-ODE4NTVaFw0wODExMjgxODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UE
-CBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0Rp
-Z2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDEx
-FjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0BCQEWEmNhQGRp
-Z3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdfWvnTLnUv2Chi0ZMv/E3U
-q4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uKxBmd9LIO/BZsubEF
-koPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBEzUNKcI5YhZXh
-TizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F5X5yP4Wd
-lGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMvOnNn
-7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG
-9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+
-LegzZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvV
-WlHG4VMElo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX
-8ngvYzZAOONGDx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn8
-6Oawde3uPclwx12qgUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsT
-F7ANUkz+/m9c4pFuHf2kYtdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A==
------END CERTIFICATE-----
-
-Digital_Signature_Trust_Co._Global_CA_3
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQG
-EwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREw
-DwYDVQQLEwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3
-MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVy
-ZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEB
-AQUAA4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fB
-w18DW9Fvrn5C6mYjuGODVvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87e
-ZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd
-55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBoBgNVHR8E
-YTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwg
-U2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNV
-BAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIw
-OTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6CTShlgDzJQW6s
-NS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAMBgNV
-HRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3
-DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
-xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLb
-dHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlih
-w6ID
------END CERTIFICATE-----
-
-Digital_Signature_Trust_Co._Global_CA_4
------BEGIN CERTIFICATE-----
-MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGp
-MQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBM
-YWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENv
-LjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx
-ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAy
-MjQ2MTZaFw0wODExMjcyMjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UE
-CBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0Rp
-Z2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDIx
-FjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0BCQEWEmNhQGRp
-Z3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbVp9oaBBg5kkp4o4HC9Xd6
-ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWwBZoPFflrWXJW8vo5
-/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl5WJp3OXuAFK9
-MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi3sOP17ih
-YqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+QVCv
-bK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG
-9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWog
-WxyQ2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6
-HE3K1GjNI3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV
-6YyDfFk/xPEL553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8
-PzGn0EdzMzkbzE5q10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30
-sPDst2yC7S8xmUJMqbINuBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg==
------END CERTIFICATE-----
-
-Entrust.net_Global_Secure_Personal_CA
------BEGIN CERTIFICATE-----
-MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NB
-X0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsT
-HChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1
-c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAy
-MDcxNjE2NDBaFw0yMDAyMDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0
-Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29y
-cC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg
-RW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xp
-ZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7NySpj10InJrWPNTTVRaoTU
-rcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0iJBeAZfv6lOm3fzB
-3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn5JVn1j+SgF7y
-NH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHdBgNVHR8E
-gdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUAw
-PgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy
-ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0
-Lm5ldCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2Vy
-dGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
-IoAPMjAwMDAyMDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQD
-AgEGMB8GA1UdIwQYMBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQW
-BBSEi3T9xY3A/ydtIDdFfP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2
-fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWA
-O9GK9Q6nIMstZVXQkvTnhLUGJoMShAusO7JE7r3PQNsgDrpuFOow4DtifH+L
-a3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/GpsKkMWr2tGzhtQvJFJcem3G8v7l
-TRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKdzmVml64mXg==
------END CERTIFICATE-----
-
-Entrust.net_Global_Secure_Server_CA
------BEGIN CERTIFICATE-----
-MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xf
-Q1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVz
-dC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wMDAyMDQxNzIwMDBaFw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtF
-bnRydXN0Lm5ldDE/MD0GA1UECxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMg
-aW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykg
-MjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5l
-dCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0G
-CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO8GCGD9JYf9Mzly0XonUw
-tZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaBbL3+qPZ1V1eMkGxK
-wz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2dWcTC5/oVzbI
-XQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4QgEBBAQD
-AgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoTC0Vu
-dHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAy
-MDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0
-IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNV
-BAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIw
-NDE3NTAwMFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc
-/vuLkpyw8m4iMB0GA1UdDgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNV
-HRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkq
-hkiG9w0BAQQFAAOBgQBi24GRzsiad0Iv7L0no1MPUBvqTpLwqa+poLpIYcvv
-yQbvH9X07t9WLebKahlzqlO+krNQAraFJnJj2HVQYnUUt7NQGj/KEQALhUVp
-bbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1UyrrJzOCE98g+EZfTYAkYvAX/
-bIkz8OwVDw==
------END CERTIFICATE-----
-
-Entrust.net_Premium_2048_Secure_Server_CA
------BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNf
-MjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsT
-HChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1
-c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEy
-MjQxNzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0
-Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29y
-cC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkg
-RW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2Vy
-dGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4
-QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/EC
-DNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuXMlBvPci6Zgzj
-/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzWnLLP
-KQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZd
-enoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
-4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB
-0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJ
-FrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
-AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFh
-fGPjK50xA3B20qMooPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVU
-KcgF7bISKo30Axv/55IQh7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaoho
-wXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2
-+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof888
-6ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
-
-Entrust.net_Secure_Personal_CA
------BEGIN CERTIFICATE-----
-MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UE
-BhMCVVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50
-cnVzdC5uZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBs
-aW1pdHMgbGlhYi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExp
-bWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0
-aW9uIEF1dGhvcml0eTAeFw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBa
-MIHJMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNV
-BAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5mby9DUFMgaW5jb3Jw
-LiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMpIDE5OTkgRW50
-cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GL
-ADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo6oT9n3V5z8GKUZSv
-x1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux5zDeg7K6PvHV
-iTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zmAqTmT173
-iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSCARkw
-ggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
-cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0Ff
-SW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UE
-CxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50
-cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYD
-VQQDEwRDUkwxMCygKqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9D
-bGllbnQxLmNybDArBgNVHRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkx
-MDEyMTkyNDMwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW
-/O5bs8qZdIuV6kwwHQYDVR0OBBYEFMT7nCl7l81MlvzuW7PKmXSLlepMMAwG
-A1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
-hvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7pFuPeJoSSJn59DXeDDYHAmsQ
-OokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzzwy5E97BnRqqS5TvaHBkU
-ODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/aEkP/TOYGJqibGapE
-PHayXOw=
------END CERTIFICATE-----
-
-Entrust.net_Secure_Server_CA
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UE
-BhMCVVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50
-cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UE
-AxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQsw
-CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3
-dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlh
-Yi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVkMTow
-OAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0
-VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHIN
-iC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3wkrYKZImZNHk
-mGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcwggHT
-MBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHY
-pIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
-BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChs
-aW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBM
-aW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNo
-dHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAi
-gA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMC
-AQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYE
-FPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9
-B0EABAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKn
-CqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2Zcgx
-xufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd2cNgQ4xYDiKWL2KjLB+6
-rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
-
-Equifax_Secure_CA
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQG
-EwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1
-cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4
-MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgx
-LTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0
-eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2R
-FGiYCh7+2gRvE4RiIcPRfM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO
-/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuv
-K9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAGA1UdHwRp
-MGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEt
-MCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
-MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjAL
-BgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gjIBBPM5iQn9Qw
-HQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMBAf8w
-GgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GB
-AFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2u
-FHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
-
-Equifax_Secure_eBusiness_CA_1
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJV
-UzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1
-aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcN
-MjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZh
-eCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2lu
-ZXNzIENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fe
-k6lfWg0XTzQaDJj0ItlZ1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5
-/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4aIZX5UkxVWsUPOE9G+m34LjXW
-HXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBkMBEGCWCG
-SAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4
-MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBq
-R3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnm
-JXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+WB5Hh1Q+WKG1
-tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+KpYr
-tWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
-
-Equifax_Secure_eBusiness_CA_2
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQG
-EwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlm
-YXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5
-MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXgg
-U2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0Et
-MjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF
-7Y6yEb3+6+e0dMKP/wXn2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKD
-pkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HM
-HMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAGA1UdHwRp
-MGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBT
-ZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
-MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjAL
-BgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBqy/3YIHqngnYw
-HQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMBAf8w
-GgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GB
-AAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
-0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkt
-y3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
------END CERTIFICATE-----
-
-Equifax_Secure_Global_eBusiness_CA
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJV
-UzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1
-aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0
-MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoT
-E0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJl
-IEdsb2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
-gYkCgYEAuucXkAJlsTRVPEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQy
-td4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORR
-OhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxnhcXIw2EC
-AwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8w
-HwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6o
-oHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf
-2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkAZ70Br83gcfxa
-z2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIYNMR1
-pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
-
-GeoTrust_Global_CA
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYT
-AlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVz
-dCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBC
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
-AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEH
-CIjaWC9mOSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlC
-GDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7
-csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAj
-Nvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdRe
-JivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQAB
-o1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9
-qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1luMrMTjANBgkq
-hkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Qzxpe
-R+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWV
-Yrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot
-2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeX
-xx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
-Mw==
------END CERTIFICATE-----
-
-GlobalSign_Root_CA
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzEL
-MAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNV
-BAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05
-ODA5MDExMjAwMDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkw
-FwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRsw
-GQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQDaDuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR
-4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc
-71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4
-bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgK
-OOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMW
-ea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DP
-AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQUYHtmGkUNl8qJ
-UC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOC
-AQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq75bCd
-PTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q
-gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT
-2iHRrH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlD
-NPYPhyk7ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBg
-Hcl5JLL2bP2oZg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w==
------END CERTIFICATE-----
-
-GTE_CyberTrust_Global_Root
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgw
-FgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRy
-dXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3Qg
-R2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1
-MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYD
-VQQLEx5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMT
-GkdURSBDeWJlclRydXN0IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4usJTQGz0O9pTAipTHBsiQl8i4
-ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcqlHHK6XALn
-ZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8F
-LztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh3
-46B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq
-81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0PlZPvy5TYnh+d
-XIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
-
-GTE_CyberTrust_Root_CA
------BEGIN CERTIFICATE-----
-MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgw
-FgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRy
-dXN0IFJvb3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQsw
-CQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQD
-ExNHVEUgQ3liZXJUcnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
-iQKBgQC45k+625h8cXyvRLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8K
-DPufpz+iCWaEVh43KRuH6X4MypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPw
-KfWVWgkWYXcKIiXUT0Wqx73llt/51KiOQswkwB6RJ0q1bQaAYznEol44AwID
-AQABMA0GCSqGSIb3DQEBBAUAA4GBABKzdcZfHeFhVYAA1IFLezEPI2PnPfMD
-+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWlIjeaY8JIILTbcuPI9tl8vrGv
-U9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9ApybW1EDp3zdHSo1TRJ6V6e
-6bR64eVaH4QwnNOfpSXY
------END CERTIFICATE-----
-
-IPS_Chained_CAs_root
------BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYT
-AkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEu
-MCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5s
-LjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1
-MjEzMDEGA1UECxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MTMwMQYDVQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlw
-cy5lczAeFw0wMTEyMjkwMDUzNThaFw0yNTEyMjcwMDUzNThaMIIBHDELMAkG
-A1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vs
-b25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNl
-cyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYw
-OTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFpbmVkIENBcyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1h
-aWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcVpJJspQg
-vJhPUOtopKdJC7/SMejHT8KGC/po/UNaivNgkjWZOLtNA1IhW/A3mTXhQSCB
-hYEFcYGdtJUZqV92NC5jNzVXjrQfQj8VXOF6wV8TGDIxya2+o8eDZh65nAQT
-y2nBBt4wBrszo7Uf8I9vzv+W6FS+ZoCua9tBhDaiPQIDAQABo4IEQzCCBD8w
-HQYDVR0OBBYEFKGtMbH5PuEXpsirNPxShwkeYlJBMIIBTgYDVR0jBIIBRTCC
-AUGAFKGtMbH5PuEXpsirNPxShwkeYlJBoYIBJKSCASAwggEcMQswCQYDVQQG
-EwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmEx
-LjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMu
-bC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0
-NTIxMzAxBgNVBAsTKklQUyBDQSBDaGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9u
-IEF1dGhvcml0eTEzMDEGA1UEAxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p
-cHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRk
-MGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggr
-BgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYK
-KwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBz
-QG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglg
-hkgBhvhCAQ0ENRYzQ2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg
-aHR0cDovL3d3dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3
-Lmlwcy5lcy9pcHMyMDAyLzA3BglghkgBhvhCAQQEKhYoaHR0cDovL3d3dy5p
-cHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA8BglghkgBhvhCAQMELxYt
-aHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0aW9uQ0FDLmh0bWw/
-MDkGCWCGSAGG+EIBBwQsFipodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jl
-bmV3YWxDQUMuaHRtbD8wNwYJYIZIAYb4QgEIBCoWKGh0dHA6Ly93d3cuaXBz
-LmVzL2lwczIwMDIvcG9saWN5Q0FDLmh0bWwwbQYDVR0fBGYwZDAuoCygKoYo
-aHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAyoDCg
-LoYsaHR0cDovL3d3d2JhY2suaXBzLmVzL2lwczIwMDIvaXBzMjAwMkNBQy5j
-cmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5p
-cHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAERyMJ1WWKJBGyi3leGmGpVfp3hA
-K+/blkr8THFj2XOVvQLiogbHvpcqk4A0hgP63Ng9HgfNHnNDJGD1HWHc3Jag
-vPsd4+cSACczAsDAK1M92GsDgaPb1pOVIO/Tln4mkImcJpvNb2ar7QMiRDjM
-Wb2f2/YHogF/JsRj9SVCXmK9
------END CERTIFICATE-----
-
-IPS_CLASE1_root
------BEGIN CERTIFICATE-----
-MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYT
-AkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEu
-MCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5s
-LjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1
-MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAx
-MTIyOTAwNTkzOFoXDTI1MTIyNzAwNTkzOFowggESMQswCQYDVQQGEwJFUzES
-MBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNV
-BAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzAp
-BgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAs
-BgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-LjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG
-9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywSzHb5
-BlmvXSHU0lq4oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBS
-YmL9Yzt9fuzuOOpi9GyocY3h6YvJP8a1zZRCb92CRTzo3wno7wpVqVZHYUxJ
-ZHMQKD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBTrsxl588GlHKzc
-uh9morKbadB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKb
-adB4CKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl
-bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJu
-ZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFp
-bC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0Eg
-Q0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMg
-Q0EgQ0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcN
-AQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E
-BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUH
-AwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB
-FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw
-GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0Bt
-YWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRpZmlj
-YXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
-BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQt
-FitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3Js
-MD8GCWCGSAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jl
-dm9jYXRpb25DTEFTRTEuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93
-d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMS5odG1sPzA6BglghkgB
-hvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT
-RTEuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9p
-cHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFj
-ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0UxLmNybDAvBggrBgEFBQcB
-AQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZI
-hvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuKYn4VLenZMdMu9Ccj/1ur
-xUq2ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpjV4F1Wo7ojPsCwJTG
-Kbqz3Bzosq/SLmJbGqmODszFV0VRFOlOHIilkfSj945RyKm+hjM+5i9Ibq9U
-kE6tsSU=
------END CERTIFICATE-----
-
-IPS_CLASE3_root
------BEGIN CERTIFICATE-----
-MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYT
-AkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEu
-MCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5s
-LjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1
-MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAx
-MTIyOTAxMDE0NFoXDTI1MTIyNzAxMDE0NFowggESMQswCQYDVQQGEwJFUzES
-MBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNV
-BAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzAp
-BgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAs
-BgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-LjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG
-9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZH49N
-zjaY2uQARIwo2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY
-8jjsbJ0gA8DvqqPGZARRLXgNo9KoOtYkTOmWehisEyMiG3zoMRGzXwmqMHBx
-RiVrSXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBS4k/8uy9wsjqLn
-ev42USGjmFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGj
-mFsMNKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl
-bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJu
-ZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFp
-bC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0Eg
-Q0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMg
-Q0EgQ0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcN
-AQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E
-BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUH
-AwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB
-FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw
-GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0Bt
-YWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRpZmlj
-YXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
-BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQt
-FitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3Js
-MD8GCWCGSAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jl
-dm9jYXRpb25DTEFTRTMuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93
-d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMy5odG1sPzA6BglghkgB
-hvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT
-RTMuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9p
-cHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFj
-ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0UzLmNybDAvBggrBgEFBQcB
-AQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZI
-hvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dDqsfwfewPxqmurpYPdikc
-4gYtfibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9D6eSb9ijBmgpjnn1
-/7/5p6/ksc7C0YBCJwUENPjDfxZ4IwwHJPJGR607VNCv1TGyr33I6unUVtkO
-E7LFRVA=
------END CERTIFICATE-----
-
-IPS_CLASEA1_root
------BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYT
-AkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEu
-MCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5s
-LjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1
-MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcN
-MDExMjI5MDEwNTMyWhcNMjUxMjI3MDEwNTMyWjCCARQxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwG
-A1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjEr
-MCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEv
-MC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8m2md
-d81u4D/u6zJfX5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4Wwd
-ByOgF9H5fahGRpEiqLJpxq339fWUoTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1
-e+J8eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUZyaW56G/
-2LUDnf473P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf47
-3P7yiuYV3TChggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlC
-YXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIElu
-dGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBz
-QG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBT
-IENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
-JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ
-KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM
-BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYI
-KwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB
-BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEE
-BAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
-D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBDQSBD
-ZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
-SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgB
-hvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xB
-U0VBMS5jcmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lw
-czIwMDIvcmV2b2NhdGlvbkNMQVNFQTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAW
-Lmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTEuaHRt
-bD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv
-cG9saWN5Q0xBU0VBMS5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93
-d3cuaXBzLmVzL2lwczIwMDIvaXBzMjAwMkNMQVNFQTEuY3JsMDagNKAyhjBo
-dHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5j
-cmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5p
-cHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyAAIQVCtWYUQxkxZwCWINm
-yq0eB81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeFaQoO42Hu6r4okzPV
-7Oi+xNtff6j5YzHIa5biKcJboOeXNp13XjFr/tOn2yrb25aLH2betgPAK7N4
-1lUH5Y85UN4HI3LmvSAUS7SG
------END CERTIFICATE-----
-
-IPS_CLASEA3_root
------BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYT
-AkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEu
-MCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5s
-LjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1
-MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcN
-MDExMjI5MDEwNzUwWhcNMjUxMjI3MDEwNzUwWjCCARQxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwG
-A1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjEr
-MCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEv
-MC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvNG7uG
-BiJ2MwwSbUhWYdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHU
-VqLyjRGZ/fZ98cfEXgIqmuJKtROKAP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4
-Ninn6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUHp9XUEe2
-YZM50yz82l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz8
-2l09BXW3mQKhggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlC
-YXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIElu
-dGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBz
-QG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBT
-IENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
-JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ
-KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM
-BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYI
-KwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB
-BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEE
-BAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
-D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBDQSBD
-ZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
-SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgB
-hvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xB
-U0VBMy5jcmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lw
-czIwMDIvcmV2b2NhdGlvbkNMQVNFQTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAW
-Lmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTMuaHRt
-bD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv
-cG9saWN5Q0xBU0VBMy5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93
-d3cuaXBzLmVzL2lwczIwMDIvaXBzMjAwMkNMQVNFQTMuY3JsMDagNKAyhjBo
-dHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5j
-cmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5p
-cHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca2on0eisxeewBwMwB9dbB
-/MjD81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI3y2s6Q73nMify5NF
-8bpqxmdRSmlPa/59Cy9SKcJQrSRE7SOzSMtEQMEDlQwKeAYSAfWRMS1Jjbs/
-RU4s4OjNtckUFQzjB4ObJnXv
------END CERTIFICATE-----
-
-IPS_Servidores_root
------BEGIN CERTIFICATE-----
-MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIw
-EAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UE
-ChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVz
-MRcwFQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBz
-QG1haWwuaXBzLmVzMB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1ow
-gaMxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcT
-CUJBUkNFTE9OQTEZMBcGA1UEChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UE
-CxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQDEw5JUFMgU0VSVklET1JFUzEe
-MBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyYXZhkJAk8IbPMGbWOlI6H0fg3
-PqHILVikgDVboXVsHUUMH2Fjal5vmwpMwci4YSM1gf/+rHhwLWjhOgeYlQJU
-3c0jt4BT18g3RXIGJBK6E2Ehim51KODFDzT9NthFf+G4Nu+z4cYgjui0OLzh
-PvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACzzw3lYJN7GO9HgQmm4
-7mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsUdx+2/iU9
-4aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14cJ58
-GNCr+Lh3B0Zx8coLY1xq+XKU1QFPoNtC
------END CERTIFICATE-----
-
-IPS_Timestamping_root
------BEGIN CERTIFICATE-----
-MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYT
-AkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEu
-MCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5s
-LjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1
-MjE0MDIGA1UECxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9u
-IEF1dGhvcml0eTE0MDIGA1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwu
-aXBzLmVzMB4XDTAxMTIyOTAxMTAxOFoXDTI1MTIyNzAxMTAxOFowggEeMQsw
-CQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJj
-ZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZp
-Y2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEIt
-NjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3RhbXBpbmcgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBUaW1lc3RhbXBp
-bmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lw
-c0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLju
-VqWajOY2ycJioGaBjRrVetJznw6EZLqVtJCneK/K/lRhW86yIFcBrkSSQxA4
-Efdo/BdApWgnMjvEp+ZCccWZ73b/K5Uk9UmSGGjKALWkWi9uy9YbLA1UZ2t6
-KaFYq6JaANZbuxjC3/YeE1Z2m6Vo4pjOxgOKNNtMg0GmqaMCAwEAAaOCBIAw
-ggR8MB0GA1UdDgQWBBSL0BBQCYHynQnVDmB4AyKiP8jKZjCCAVAGA1UdIwSC
-AUcwggFDgBSL0BBQCYHynQnVDmB4AyKiP8jKZqGCASakggEiMIIBHjELMAkG
-A1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vs
-b25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNl
-cyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYw
-OTI5NDUyMTQwMgYDVQQLEytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MTQwMgYDVQQDEytJUFMgQ0EgVGltZXN0YW1waW5n
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNA
-bWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsG
-A1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUF
-BwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGC
-NwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw
-EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5l
-czBHBglghkgBhvhCAQ0EOhY4VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl
-IGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgECBBwW
-Gmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMEAGCWCGSAGG+EIBBAQzFjFo
-dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcu
-Y3JsMEUGCWCGSAGG+EIBAwQ4FjZodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAy
-L3Jldm9jYXRpb25UaW1lc3RhbXBpbmcuaHRtbD8wQgYJYIZIAYb4QgEHBDUW
-M2h0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbFRpbWVzdGFtcGlu
-Zy5odG1sPzBABglghkgBhvhCAQgEMxYxaHR0cDovL3d3dy5pcHMuZXMvaXBz
-MjAwMi9wb2xpY3lUaW1lc3RhbXBpbmcuaHRtbDB/BgNVHR8EeDB2MDegNaAz
-hjFodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBp
-bmcuY3JsMDugOaA3hjVodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9p
-cHMyMDAyVGltZXN0YW1waW5nLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYB
-BQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEA
-ZbrBzAAalZHK6Ww6vzoeFAh8+4Pua2JR0zORtWB5fgTYXXk36MNbsMRnLWha
-sl8OCvrNPzpFoeo2zyYepxEoxZSPhExTCMWTs/zif/WN87GphV+I3pGW7hdb
-rqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=
------END CERTIFICATE-----
-
-QuoVadis_Root_CA
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQG
-EwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9v
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNa
-Fw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9W
-YWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1
-lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMukJ0KX0J+D
-isPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj18
-2d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Sp
-x2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZ
-yH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospUxbF6lR1xHkop
-igPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4wPQYI
-KwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFk
-aXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
-ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlh
-bmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBw
-YXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
-ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRp
-ZmljYXRpb24gcHJhY3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmlj
-YXRlIFBvbGljeS4wIgYIKwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMu
-Ym0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYw
-gaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJN
-MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCLMA4GA1UdDwEB/wQEAwIB
-BjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lofFIk3Wdv
-OXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10
-buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe
-/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6
-isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
-xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQ
-NiOKSnQ2+Q==
------END CERTIFICATE-----
-
-RSA_Root_Certificate_1
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlD
-ZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
-Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRp
-b24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNv
-bS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYy
-NjAwMjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4x
-NTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24g
-QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8x
-IDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2f
-NUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChM
-MFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqYJJgpp0lZpd34
-t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs3x/b
-e0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0Wu
-PIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
-PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
------END CERTIFICATE-----
-
-RSA_Security_1024_v3
------BEGIN CERTIFICATE-----
-MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUF
-ADA6MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0Eg
-U2VjdXJpdHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAx
-NDlaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJT
-QSBTZWN1cml0eSAxMDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
-gQDV3f5mCc8kPD6ugU5OisRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dY
-rIMKo1W1exeQFYRMiu4mmdxY78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYt
-bzZUaMjShFbuklNhCbM/OZuoyZu9zp9+1BlqFikYvtc6adwlWzMaUQIDAQAB
-o2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSME
-GDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAdBgNVHQ4EFgQUxMAcpAeU/c1N
-AdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEAPy1q4yZDlX2Jl2X7deRy
-HUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdNT1+nr6JGFLkM88y9
-am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgDmMrzVcydro7B
-qkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
------END CERTIFICATE-----
-
-RSA_Security_2048_v3
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUF
-ADA6MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0Eg
-U2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5
-MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJT
-QSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37
-RqtBaB4Y6lXIL5F4iSj7Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E
-0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J
-6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iHKrtjEAMq
-s6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzD
-uvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2Mw
-YTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAW
-gBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NRMKSq6UWuNST6
-/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmYv/3V
-EhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5g
-EydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
-f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJq
-aHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEk
-llgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
-pKnXwiJPZ9d37CAFYd4=
------END CERTIFICATE-----
-
-Security_Communication_Root_CA
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJK
-UDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0
-eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMw
-OTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1
-c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RD
-QTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8
-V6UMbXaKL0u/ZPtM7orw8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpx
-xpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uMDPpVmDvY6CKhS3E4eayXkmmz
-iX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX5HA49LY6
-tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819
-uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/L
-TX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZ
-aNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g0dNq
-/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94
-nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
-Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNn
-PaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfci
-oU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
-FL39vmwLAw==
------END CERTIFICATE-----
-
-Sonera_Class_1_Root_CA
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJG
-STEPMA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENB
-MB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMC
-RkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue
-+H887dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mX
-y47vPxVnqIJyY1MPQYx9EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNY
-wBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JF
-hfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF6452F/NM8Ec
-yonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW
-1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB
-/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuXZfsSZ9gqXLar
-5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxVyhbM
-p6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2
-nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
-kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2y
-Ix4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
------END CERTIFICATE-----
-
-Sonera_Class_2_Root_CA
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJG
-STEPMA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENB
-MB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMC
-RkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE
-+hY3/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gX
-GM2RX/uJ4+q/Tl18GybTdXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQ
-TiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMGf+dJQMjFAbJUWmYdPfz56TwK
-noG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8PtOFCx4j1
-P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURr
-BGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB
-/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zilzqsWuasvfDXL
-rNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEIcbCd
-jdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr4
-50kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkeja
-nZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
------END CERTIFICATE-----
-
-Staat_der_Nederlanden_Root_CA
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG
-EwJOTDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQD
-Ex1TdGFhdCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIz
-NDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVT
-dGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRl
-cmxhbmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAmNK1URF6gaYUmHFtvsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rF
-DBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02PjLwYdjeFnejKScfST5gTCaI+
-Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGcaC1Hoi6Ce
-UJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7l
-r7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4Zl
-kuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGO
-MAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDwwOgYIKwYBBQUH
-AgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9vdC1w
-b2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg
-0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
-/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVF
-IGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0
-C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
-nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBp
-IzlWYGeQiy52OfsRiJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYV
-wSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
-
-StartCom_Ltd__Free_SSL_Certification_Authority
------BEGIN CERTIFICATE-----
-MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx
-DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0
-Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG
-cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoXDTM1MDMxMDE3Mzc0
-OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVp
-bGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3Jp
-dHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG
-9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x
-18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5
-yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYI
-LzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0G
-A1UdDgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOW
-zL3+MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
-BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4x
-GjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3Rh
-cnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV
-HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8G
-CWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAy
-BglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5j
-cmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJ
-YIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/
-YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1
-ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p
-00UOpO6wNnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLb
-cCOxgN8aIDjnfg==
------END CERTIFICATE-----
-
-TC_TrustCenter__Germany__Class_2_CA
------BEGIN CERTIFICATE-----
-MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYT
-AkRFMRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYD
-VQQKEzFUQyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3
-b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAyIENB
-MSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAe
-Fw05ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJE
-RTEQMA4GA1UECBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UE
-ChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3VyaXR5IGluIERhdGEgTmV0d29y
-a3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTEp
-MCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8w
-DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANo46O0yAClxgwENv4wB3NrGrTmk
-qYov1YtcaF9QxmL1Zr3KkSLsqh1R1z2zUbKDTl3LSbDwTFXlay3HhQswHJJO
-gtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5Nu6hLVxa8/vhYnvgpjbB7
-zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQFMAMBAf8w
-DgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G
-CSqGSIb3DQEBBAUAA4GBAIRS+yjf/x91AbwBvgRWl2p0QiQxg/lGsQaKic+W
-LDO/jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ29ELw+HkuCkhcq8xR
-T3h2oNmsGb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/Ac
-ASZ4smZHcFFk
------END CERTIFICATE-----
-
-TC_TrustCenter__Germany__Class_3_CA
------BEGIN CERTIFICATE-----
-MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYT
-AkRFMRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYD
-VQQKEzFUQyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3
-b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAzIENB
-MSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAe
-Fw05ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJE
-RTEQMA4GA1UECBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UE
-ChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3VyaXR5IGluIERhdGEgTmV0d29y
-a3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTEp
-MCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8w
-DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALa0wTUFLg2N7KBAahwOJ6ZQkmtQ
-GwfeLud2zODa/ISoXoxjaitN2U4CdhHBC/KNecoAtvGwDtf7pBc9r6tpepYn
-v68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+77uMMfTDWw1Krj10nnGvA
-o+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQFMAMBAf8w
-DgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G
-CSqGSIb3DQEBBAUAA4GBABY9xs3Bu4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4
-iJIETb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm5gZOngylerpuw3yC
-GdHHsbHD2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQS
-CdS7kjXvD9s0
------END CERTIFICATE-----
-
-TDC_Internet_Root_CA
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQG
-EwJESzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50
-ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTda
-MEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNV
-BAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4Nr
-XceO+YQwzho7+vvOi20jxsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaq
-HF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5
-Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc5IogCSEW
-Vmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8n
-mHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwID
-AQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBY
-oFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIEludGVybmV0MR0w
-GwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JMMTAr
-BgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjAL
-BgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
-HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8w
-HQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
-gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKs
-LtB9KOy282A4aW8+2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7T
-mHnaCB4Mb7j4Fifvwm899qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE
-64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQ
-V0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
-
-TDC_OCES_Root_CA
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQG
-EwJESzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0w
-MzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQww
-CgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSj
-hFuHnEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8
-z3sM8W9Hpg1DTeLpHTk0zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJH
-hNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvViGjaXbXqzRowwYCDdlCqT9HU
-3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBdedObaE+3p
-Hx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTw
-tyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
-Af8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYB
-BQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBvc2l0b3J5MIGd
-BggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBmcmEg
-ZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
-LiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
-T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEG
-A1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERD
-MRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
-aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0Q
-BCQwIoAPMjAwMzAyMTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0j
-BBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4S
-GSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDAN
-BgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBu
-o7E4A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjND
-fZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8Aqt
-FxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoBmbgGglGBTvH1tJFUuSN6
-AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1AoLbrIyi
-gfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2Lq
-L19iUw==
------END CERTIFICATE-----
-
-Thawte_Personal_Basic_CA
------BEGIN CERTIFICATE-----
-MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMC
-WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3du
-MRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlm
-aWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBl
-cnNvbmFsIEJhc2ljIENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNp
-Y0B0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVow
-gcsxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNV
-BAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAm
-BgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xITAfBgNV
-BAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBDQTEoMCYGCSqGSIb3DQEJARYZ
-cGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53dXLdjUmbllegeNTK
-P1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdKwPQIcOk8RHtQ
-fmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7G1sY0b8j
-kyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOB
-gQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
-c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95
-B21P9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
------END CERTIFICATE-----
-
-Thawte_Personal_Freemail_CA
------BEGIN CERTIFICATE-----
-MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMC
-WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3du
-MRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlm
-aWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBl
-cnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1m
-cmVlbWFpbEB0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIz
-NTk1OVowgdExCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUx
-EjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRp
-bmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24x
-JDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqG
-SIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhhd3RlLmNvbTCBnzANBgkq
-hkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfYDFG26nKRsIRefS0N
-j3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5ErHzmj+hND3Ef
-QDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVquzgkCGqY
-x7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
-hkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
-MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgC
-neSa/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr
-5PjRzneigQ==
------END CERTIFICATE-----
-
-Thawte_Personal_Premium_CA
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMC
-WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3du
-MRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlm
-aWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBl
-cnNvbmFsIFByZW1pdW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXBy
-ZW1pdW1AdGhhd3RlLmNvbTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5
-NTlaMIHPMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIw
-EAYDVQQHEwlDYXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5n
-MSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMSMw
-IQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJlbWl1bSBDQTEqMCgGCSqGSIb3
-DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUuY29tMIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0VsBd/eJxZRNkERbGw7
-7f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWIEt12TfIa/G8j
-Hnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYDZicRFTuq
-W/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
-DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
-b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVx
-eTBhKXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1
-KzGJ
------END CERTIFICATE-----
-
-Thawte_Premium_Server_CA
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMC
-WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3du
-MR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2Vy
-dGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3Rl
-IFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNl
-cnZlckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1
-OVowgc4xCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQ
-BgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENvbnN1bHRpbmcg
-Y2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24x
-ITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3
-DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhI
-NTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQug2SBhRz1JPL
-lyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/qgeN
-9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
-AQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
-hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZ
-a4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcU
-Qg==
------END CERTIFICATE-----
-
-Thawte_Server_CA
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMC
-WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3du
-MR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2Vy
-dGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3Rl
-IFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
-ZS5jb20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkG
-A1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2Fw
-ZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UE
-CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQ
-VGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRz
-QHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I
-/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC
-6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCXL+eQbcAoQpnX
-TEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzARMA8G
-A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWD
-TSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
-QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdni
-TCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
-
-Thawte_Time_Stamping_CA
------BEGIN CERTIFICATE-----
-MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMC
-WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmls
-bGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmlj
-YXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcw
-MTAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTAT
-BgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
-BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24x
-HzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBANYrWHhhRYZT6jR7UZztsOYuGA7+4F+oJ9O0yeB8
-WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQaWt9MevPZQx08EHp5JduQ/vBR
-5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL8vg7ij5FrHGSALSQQZj7
-X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN
-AQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC9RAIDb/LogWK
-0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQpgCed/r8
-zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZCayJ
-SdM=
------END CERTIFICATE-----
-
-UTN_DATACorp_SGC_Root_CA
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUF
-ADCBkzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEw
-HwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVU
-TiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2
-MzBaMIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNh
-bHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
-ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTEbMBkGA1UEAxMS
-VVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+O
-GQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrr
-U0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrL
-Z9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykqlXvY8qdOD1R8
-oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv33i+
-Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4Gr
-MIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8v
-Y3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUE
-IzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
-DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHc
-rpY6CiM+iVnJowftGzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuM
-FrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1
-+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdO
-jtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jF
-VkwPDPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
-
-UTN_USERFirst_Email_Root_CA
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUF
-ADCBrjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEw
-HwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVU
-Ti1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAe
-Fw05OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJV
-UzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93
-d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJzdC1DbGll
-bnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxq
-mNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqk
-kqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6lL8/K2m2qL+us
-obNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHGTPNp
-saguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZU
-Ot4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
-6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0G
-A1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJ
-hkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
-bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEF
-BQcDAgYIKwYBBQUHAwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rk
-MPxTbyUkxsrt4jFcKw7u7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK
-2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/
-bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJR
-warVNZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf
-6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQ
-jvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
-
-UTN_USERFirst_Hardware_Root_CA
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUF
-ADCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEw
-HwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVU
-Ti1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5
-MTgxOTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQH
-Ew5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3
-b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNV
-BAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZ
-FvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6N
-q9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEH
-OG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNdoI6yqqr2jmmI
-BsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjfPe58
-BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhb
-AgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWG
-M2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3
-YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
-BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0o
-XnWO6y1n7k57K9cM//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjA
-bPLPSbtNk28GpgoiskliCE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59
-Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4f
-Fm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchq
-J/kniCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0q
-UZ6B+dQ7XnASfxAynB67nfhmqA==
------END CERTIFICATE-----
-
-UTN-USER_First-Network_Applications
------BEGIN CERTIFICATE-----
-MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUF
-ADCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEw
-HwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVU
-Ti1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0
-ODM5WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgT
-AlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVT
-RVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVz
-dC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNh
-dGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZV
-hawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAb
-GHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZ
-NaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hAReYFmnjDRy7rh4
-xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwiP8vv
-/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7i
-gEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD
-AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf
-8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0
-LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
-CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXh
-i6r/fWRRzwr/vH3YIWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUq
-f9FuVSTiuwL7MT++6LzsQCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAf
-hZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvP
-NximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+
-FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjis
-H8SE
------END CERTIFICATE-----
-
-UTN_USERFirst_Object_Root_CA
------BEGIN CERTIFICATE-----
-MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUF
-ADCBlTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEw
-HwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVU
-Ti1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4
-NDAzNlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMO
-U2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29y
-azEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR0wGwYDVQQD
-ExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r55
-96Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc
-/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2
-yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+pKvEHDHd17bR
-5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7RwvC
-bNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEA
-AaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0
-cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNy
-bDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
-DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXF
-wfNfLEzIR1pp6ujwNTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T
-7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85
-dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U
-+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCA
-GKCGhU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2o
-Ps0AH8g=
------END CERTIFICATE-----
-
-ValiCert_Class_1_VA
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlD
-ZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
-Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRp
-b24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNv
-bS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYy
-NTIyMjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4x
-NTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24g
-QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8x
-IDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw
-8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m
-+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8YTfwggtFzVXSN
-dnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwGlN+V
-YH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8so
-gTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
-nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
------END CERTIFICATE-----
-
-ValiCert_Class_2_VA
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlD
-ZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
-Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRp
-b24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNv
-bS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYy
-NjAwMTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4x
-NTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
-QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8x
-IDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc
-65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQ
-b7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QSv4dk+NoS/zcn
-wbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZSWI4
-OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZ
-oDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
------END CERTIFICATE-----
-
-Verisign_Class_1_Public_Primary_Certification_Authority
------BEGIN CERTIFICATE-----
-MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8x
-CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UE
-CxMuQ2xhc3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTAeFw05NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNV
-BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3
-noaACpEO+jglr0aIguVzqKCbJF0NH8xlbgyw0FaEGIeaBpsQoXPftFg5a27B
-9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR4k5FVmkfeAKA2txHkSm7NsljXMXg
-1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATANBgkqhkiG9w0BAQIFAAOBgQBM
-P7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZoEWx8QszznC7EBz8UsA9P
-/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5FvjqBUuUfx3CHMjj
-t/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89FxlA==
------END CERTIFICATE-----
-
-Verisign_Class_1_Public_Primary_Certification_Authority_-_G2
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcEx
-CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UE
-CxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAt
-IEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
-gcExCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoG
-A1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5j
-LiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq
-0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9
-Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSmFc/IReumXY6c
-PvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9Zr
-bWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
-uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4i
-P/68DzFc6PLZ
------END CERTIFICATE-----
-
-Verisign_Class_1_Public_Primary_Certification_Authority_-_G3
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHK
-MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNV
-BAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5
-IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBD
-BgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3
-MTYyMzU5NTlaMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24s
-IEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNV
-BAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQg
-dXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFBy
-aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRR
-ZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO8ESlV8dAWB6j
-Rx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJrKsh
-JlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7P
-oBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
-6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHh
-v2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQ
-BfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
-y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUf
-xJM8/XmPBNQ+T+r3ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFM
-DSZl4kSAHsef493oCtrspSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5
-SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXV
-OBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
-
-Verisign_Class_1_Public_Primary_OCSP_Responder
------BEGIN CERTIFICATE-----
-MIIDnjCCAwegAwIBAgIQK2jUo0aexTsoCas4XX8nIDANBgkqhkiG9w0BAQUF
-ADBfMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1
-BgNVBAsTLkNsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDAwODA0MDAwMDAwWhcNMDQwODAzMjM1OTU5WjCBpzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczov
-L3d3dy52ZXJpc2lnbi5jb20vUlBBIChjKTAwMS4wLAYDVQQDEyVDbGFzcyAx
-IFB1YmxpYyBQcmltYXJ5IE9DU1AgUmVzcG9uZGVyMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQC57V56Ondfzl86UvzNZPdxtW9qlsZZklWUXS9bLsER
-6iaKy6eBPPZaRN56Ey/9WlHZezcmSsAnPwQDalbBgyzhb1upVFAkSsYuekyh
-WzdUJCExH6F4GHansXDaItBq/gdiQMb39pt9DAa4S8co5GYjhFHvRreT2IEz
-y+U2rMboBQIDAQABo4IBEDCCAQwwIAYDVR0RBBkwF6QVMBMxETAPBgNVBAMT
-CE9DU1AgMS0xMDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwudmVyaXNp
-Z24uY29tL3BjYTEuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMJMEIGCCsGAQUF
-BwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRwOi8vb2NzcC52ZXJpc2lnbi5j
-b20vb2NzcC9zdGF0dXMwRAYDVR0gBD0wOzA5BgtghkgBhvhFAQcBATAqMCgG
-CCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vUlBBMAkGA1Ud
-EwQCMAAwCwYDVR0PBAQDAgeAMA0GCSqGSIb3DQEBBQUAA4GBAHCQ3bjkvlMX
-fH8C6dX3i5mTMWCNfuZgayTvYKzSzpHegG0JpNO4OOVEynJeDS3Bd5y9LAN4
-KY2kpXeH9fErJq3MB2w6VFoo4AnzTQoEytRYaQuns/XdAaXn3PAfusFdkI2z
-6k/BEVmXarIrE7HarZehs7GgIFvKMquNzxPwHynD
------END CERTIFICATE-----
-
-Verisign_Class_2_Public_Primary_Certification_Authority
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQL
-Ey5DbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGf
-MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZM
-JaLtVRKXxaeAufqDwSCg+i8VDXyhYGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvE
-erf4Zh+AVPy3wo5ZShRXRtGak75BkQO7FYCTXOvnzAhsPz6zSvz/S2wj1VCC
-JkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBAIob
-K/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxgJ8pFUs4W7z8GZOeUaHxg
-MxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Ncr6Pc5iaAIzy4RHT3
-Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
------END CERTIFICATE-----
-
-Verisign_Class_2_Public_Primary_Certification_Authority_-_G2
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHB
-MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNV
-BAsTM0NsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4g
-LSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24g
-VHJ1c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTla
-MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6
-BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNp
-Z24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-p4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkf
-rbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjwDqL7MWzJ5m+Z
-Jwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEAATAN
-BgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/
-7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
-rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6x
-RnInjBJ7xUS0rg==
------END CERTIFICATE-----
-
-Verisign_Class_2_Public_Primary_Certification_Authority_-_G3
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcox
-CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UE
-CxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkg
-VmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMG
-A1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcx
-NjIzNTk1OVowgcoxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwg
-SW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UE
-CxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1
-c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJp
-bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY8
-1nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDOJxOeBUebMXoT
-2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7C9UT
-AJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQ
-HgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
-qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVC
-YQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekh
-ktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
-0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydE
-p85EXdQbkJgNHkKUsQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377B
-MnMiIYtYgXsVkXq642RIsH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab
-5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//jGHyJizNdrDPX
-p/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
-
-Verisign_Class_2_Public_Primary_OCSP_Responder
------BEGIN CERTIFICATE-----
-MIIDnjCCAwegAwIBAgIQCUYX5h3Y1BygDKBi6HmKpzANBgkqhkiG9w0BAQUF
-ADBfMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1
-BgNVBAsTLkNsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDAwODAxMDAwMDAwWhcNMDQwNzMxMjM1OTU5WjCBpzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczov
-L3d3dy52ZXJpc2lnbi5jb20vUlBBIChjKTAwMS4wLAYDVQQDEyVDbGFzcyAy
-IFB1YmxpYyBQcmltYXJ5IE9DU1AgUmVzcG9uZGVyMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDQymMxYX9ENHwFfQs9apDLeUt3Cj9LxyPlwGItfpx+
-PoiHkdCs6E1Jh6KWkIrdBKUCP4yb6Yn+YqDiWr3I3bR45qVCkwhnAcAgTddc
-9F3as+M3plIaLExlTYqH2aij8UlUuzxcgFFoxvtJ/wtVqxXd+5rBuR10DbKM
-RF2J/J/5gwIDAQABo4IBEDCCAQwwIAYDVR0RBBkwF6QVMBMxETAPBgNVBAMT
-CE9DU1AgMS0yMDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwudmVyaXNp
-Z24uY29tL3BjYTIuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMJMEIGCCsGAQUF
-BwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRwOi8vb2NzcC52ZXJpc2lnbi5j
-b20vb2NzcC9zdGF0dXMwRAYDVR0gBD0wOzA5BgtghkgBhvhFAQcBATAqMCgG
-CCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vUlBBMAkGA1Ud
-EwQCMAAwCwYDVR0PBAQDAgeAMA0GCSqGSIb3DQEBBQUAA4GBAB99CW4kRnUE
-nPMmm+M5bhfvvL2iG9IChIar0ECXLMRDiDcZayKoA3FQnSDcNmAgmnMtc1Vs
-WJsswrQ0LHozQsqR2elDr88e4PXEeqs/cmMeqTfhWzuIsxOGgpBXy1f/9Fa+
-It3jl6jhvCJDwt1N2/aBnpIUnjkPE1TegtjAXjSN
------END CERTIFICATE-----
-
-Verisign_Class_3_Public_Primary_Certification_Authority
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQL
-Ey5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGf
-MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69q
-RUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94f56TuZoAqiN91qyFomNFx3In
-zPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Olhec9vn2a
-/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtM
-EivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPw
-TtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzk
-uxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
------END CERTIFICATE-----
-
-Verisign_Class_3_Public_Primary_Certification_Authority_-_G2
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcEx
-CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UE
-CxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAt
-IEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
-gcExCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoG
-A1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5j
-LiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDM
-XtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXX
-wc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg013gfqLptQ5GV
-j0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01U
-bSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
-F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo
-1KpYoJ2daZH9
------END CERTIFICATE-----
-
-Verisign_Class_3_Public_Primary_Certification_Authority_-_G3
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHK
-MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNV
-BAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5
-IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBD
-BgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3
-MTYyMzU5NTlaMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24s
-IEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNV
-BAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQg
-dXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFBy
-aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2
-R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2tKmFZpGcmTNDo
-vFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUccLwg
-TS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+V
-k7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJ
-OxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my
-/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
-j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoA
-Wii/gt/4uhMdUIaC/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8S
-GhJouPtmmRQURVyu565pF4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbb
-o27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh
-/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
-
-Verisign_Class_3_Public_Primary_OCSP_Responder
------BEGIN CERTIFICATE-----
-MIIDojCCAwugAwIBAgIQLpaev7ZibOx76XPM42zBhDANBgkqhkiG9w0BAQUF
-ADBfMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1
-BgNVBAsTLkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDAwODA0MDAwMDAwWhcNMDQwODAzMjM1OTU5WjCBpzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczov
-L3d3dy52ZXJpc2lnbi5jb20vUlBBIChjKTAwMS4wLAYDVQQDEyVDbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IE9DU1AgUmVzcG9uZGVyMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDx5AgOg7t140jluNum8Lmr6Txix141W9ACVBHYydFW
-uXZLuat65s269gwE1n7WsAplrE454/H3LaMlOe+wi8++2wxdbnD0B81w9zrA
-PjUW7XiMQ8/CJi5H1oZ9nPG+1mcMIiWkymXmH3p4KC8/BdsEIb/hRWb+PLeC
-7Vq4FhW5VQIDAQABo4IBFDCCARAwIAYDVR0RBBkwF6QVMBMxETAPBgNVBAMT
-CE9DU1AgMS0zMDUGA1UdHwQuMCwwKqAooCaGJGh0dHA6Ly9jcmwudmVyaXNp
-Z24uY29tL3BjYTMuMS4xLmNybDATBgNVHSUEDDAKBggrBgEFBQcDCTBCBggr
-BgEFBQcBAQQ2MDQwMgYIKwYBBQUHMAGmJhYkaHR0cDovL29jc3AudmVyaXNp
-Z24uY29tL29jc3Avc3RhdHVzMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEHAQEw
-KjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL1JQQTAJ
-BgNVHRMEAjAAMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0BAQUFAAOBgQAC9lNj
-wKke8tCLMzCPSJtMsFa0g3FKvtxQ2PW24AvbvXhP6c8JNNopSZ0Bc1qRkYJU
-LBMK03cjzzf8Y96n4/a3tWlFKEnDkdyqRxypiJksBSqNjYr6YuJatwAgXTnE
-KMLL/J6oia5bPY4S6jKy/OsU1wkVGsDNG9W1FU5B1ZbjTg==
------END CERTIFICATE-----
-
-Verisign_Class_4_Public_Primary_Certification_Authority_-_G2
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcEx
-CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UE
-CxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAt
-IEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
-gcExCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoG
-A1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5j
-LiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6
-8OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDMHO0oW369atyzkSTK
-QWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtKqsGgtG7rL+VX
-xbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwjcSGI
-L4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
-cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckzt
-ImRPT8qAkbYp
------END CERTIFICATE-----
-
-Verisign_Class_4_Public_Primary_Certification_Authority_-_G3
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHK
-MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNV
-BAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5
-IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBD
-BgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3
-MTYyMzU5NTlaMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24s
-IEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNV
-BAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQg
-dXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFBy
-aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYl
-S+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ+mGuqPKljYXC
-KtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM8BDc
-VHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdL
-MEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDD
-Zq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1Wr
-IhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
-mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csK
-vE+MW8VLADsfKoKmfjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluP
-QSjA1egtTaRezarZ7c7c2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kP
-mF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr
-9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
-
-Verisign_RSA_Secure_Server_CA
------BEGIN CERTIFICATE-----
-MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzEL
-MAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMu
-MS4wLAYDVQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5MB4XDTk0MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UE
-BhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
-VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGb
-MA0GCSqGSIb3DQEBAQUAA4GJADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6O
-LDfO6zV4ZFQD5YRAUcm/jwjiioII0haGN1XpsSECrXZogZoFokvJSyVmIlZs
-iAeP94FZbYQHZXATcXY+m3dM41CJVphIuR2nKRoTLkoRWZweFdVJVCxzOmmC
-sZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZIhvcNAQECBQADfgBl3X7hsuyw
-4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3YQO2WxZpO8ZECAyIUwxr
-l0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc1/p3yjkWWW8O6tO1
-g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
------END CERTIFICATE-----
-
-Verisign_Secure_Server_OCSP_Responder
------BEGIN CERTIFICATE-----
-MIIDnzCCAwygAwIBAgIRAP9F1SddJPuzwjkkU1fhT94wDQYJKoZIhvcNAQEF
-BQAwXzELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5
-LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MB4XDTAwMDgwNDAwMDAwMFoXDTA0MDgwMzIzNTk1OVowgZ4x
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6
-Ly93d3cudmVyaXNpZ24uY29tL1JQQSAoYykwMDElMCMGA1UEAxMcU2VjdXJl
-IFNlcnZlciBPQ1NQIFJlc3BvbmRlcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
-gYkCgYEAuFGZZIUO7rMKaPC/Y3YdU/X8oXiMM+6f9L452psPTUepjyDoS0S9
-zs17kNEw6JDEJXuJKN699pMd/7n/krWpjeSuzOLDB4Nqo3IQASdiIqY1Jjkt
-ns9gDPxHpNfQQninHWzQy08VpykKtJVFxLHnWgnXOZXYHTWewr2zXcEMSx8C
-AwEAAaOCAR0wggEZMCAGA1UdEQQZMBekFTATMREwDwYDVQQDEwhPQ1NQIDEt
-NDA+BgNVHR8ENzA1MDOgMaAvhi1odHRwOi8vY3JsLnZlcmlzaWduLmNvbS9S
-U0FTZWN1cmVTZXJ2ZXItcC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwkwQgYI
-KwYBBQUHAQEENjA0MDIGCCsGAQUFBzABpiYWJGh0dHA6Ly9vY3NwLnZlcmlz
-aWduLmNvbS9vY3NwL3N0YXR1czBEBgNVHSAEPTA7MDkGC2CGSAGG+EUBBwEB
-MCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9SUEEw
-CQYDVR0TBAIwADALBgNVHQ8EBAMCB4AwDQYJKoZIhvcNAQEFBQADfgAAsxBT
-ZpxJky4xoAJC0lhXfmah/huKYRhQQCweK0Gl1tv/rAgcWgVtAlwqtpZPR9u+
-TtvOzLqGuBjOsRKRX2P380g+zPFNE+RtCZR4AJLLoyCdBgtqoEMHztEZbI8Y
-dZqfFzP9qSa44+LewqjEWop/mNYHBmvMVp6GcM7U7w==
------END CERTIFICATE-----
-
-Verisign_Time_Stamping_Authority_CA
------BEGIN CERTIFICATE-----
-MIIDzTCCAzagAwIBAgIQU2GyYK7bcY6nlLMTM/QHCTANBgkqhkiG9w0BAQUF
-ADCBwTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTww
-OgYDVQQLEzNDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmswHhcNMDAwOTI2MDAwMDAwWhcNMTAwOTI1MjM1
-OTU5WjCBpTEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBh
-dCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTAwMSwwKgYDVQQD
-EyNWZXJpU2lnbiBUaW1lIFN0YW1waW5nIEF1dGhvcml0eSBDQTCBnzANBgkq
-hkiG9w0BAQEFAAOBjQAwgYkCgYEA0hmdZ8IAIVlizrQJIkRpivglWtvtDbc2
-fk7gu5Q+kCWHwmFHKdm9VLhjzCx9abQzNvQ3B5rB3UBU/OB4naCTuQk9I1F/
-RMIUdNsKvsvJMDRAmD7Q1yUQgZS9B0+c1lQn3y6ov8uQjI11S7zi6ESHzeZB
-CiVu6PQkAsVSD27smHUCAwEAAaOB3zCB3DAPBgNVHRMECDAGAQH/AgEAMEUG
-A1UdIAQ+MDwwOgYMYIZIAYb4RQEHFwEDMCowKAYIKwYBBQUHAgEWHGh0dHBz
-Oi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0
-cDovL2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwCwYDVR0PBAQDAgEGMEIG
-CCsGAQUFBwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRwOi8vb2NzcC52ZXJp
-c2lnbi5jb20vb2NzcC9zdGF0dXMwDQYJKoZIhvcNAQEFBQADgYEAgnBold+2
-DcIBcBlK0lRWHqzyRUyHuPU163hLBanInTsZIS5wNEqi9YngFXVF5yg3ADQn
-Keg3S/LvRJdrF1Eaw1adPBqK9kpGRjeM+sv1ZFo4aC4cw+9wzrhGBha/937n
-tag+RaypJXUie28/sJyU58dzq6wf7iWbwBbtt8pb8BQ=
------END CERTIFICATE-----
-
-Visa_eCommerce_Root
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUF
-ADBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlz
-YSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMT
-E1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0
-MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UE
-CxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAa
-BgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh
-28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8bRaVK7362
-rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81
-q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtF
-Wsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0
-lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaLdXe6YJ2E5/4t
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOC
-AQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
-zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKht
-cbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGI
-xHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
-YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/
-hC3euiInlhBx6yLt398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
-
-Visa_International_Global_Root_2
------BEGIN CERTIFICATE-----
-MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMC
-VVMxDTALBgNVBAoTBFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25h
-bCBTZXJ2aWNlIEFzc29jaWF0aW9uMRIwEAYDVQQDEwlHUCBSb290IDIwHhcN
-MDAwODE2MjI1MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYDVQQGEwJVUzEN
-MAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNl
-cnZpY2UgQXNzb2NpYXRpb24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZ
-DK9vZBv42pWUJGkzEXDK41Z0ohdXZFwgBuHW73G3O/erwWnQSaSxBNf0V2KJ
-XLB1LRckaeNCYOTudNargFbYiCjh+20i/SN8RnNPflRzHqgsVVh1t0zzWkWl
-Ahr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU58fy+pmjIlC++QU3o63tmsPm
-7IgbthknGziLgE3sucfFicv8GjLtI/C1AVj59o/ghalMCXI5Etuz9c9OYmTa
-xhkVOmMd6RdVoUwiPDQyRvhlV7or7zaMavrZ2UT0qt2E1w0cslSsMoW0ZA3e
-QbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYEFJ59SzS/ca3CBfYDdYDO
-qU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqG
-SIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHbmQdp
-NSYx/scuhMKZYdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQ
-kIqUs38oW26sTTMs7WXcFsziza6kPWKSBpUmv9+55CCmc2rBvveURNZNbyoL
-axhNdBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOeyti12HvOdUVmB/Rt
-Ldh6yumJivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8
-ofyrEK9ca3CnB+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
------END CERTIFICATE-----
-
-ICA XSF
------BEGIN CERTIFICATE-----
-MIIHADCCBmmgAwIBAgIBFDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCSUwx
-DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0
-Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG
-cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA2MTIwMjIzNTUyMVoXDTExMTIwMjIzNTUy
-MVowgdgxCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhDb2xvcmFkbzEjMCEGA1UECgwa
-SmFiYmVyIFNvZnR3YXJlIEZvdW5kYXRpb24xIzAhBgNVBAsMGlNlY3VyZSBDZXJ0
-aWZpY2F0ZSBTaWduaW5nMUYwRAYDVQQDDD1TdGFydENvbSBDbGFzcyAxIEludGVy
-bWVkaWF0ZSBDQSAtIEphYmJlciBTb2Z0d2FyZSBGb3VuZGF0aW9uMSQwIgYJKoZI
-hvcNAQkBFhVjZXJ0bWFzdGVyQGphYmJlci5vcmcwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCeju/E54r6cwRmEzkGwBIq5anE2IHM10iYIeqOjTnN2WMM
-XERxgmuSpwJays/BaMATh1/QFnMHjXiTICmeyXbJ2fKrxTHPCJ+DUeLbFvVX3bOO
-SxAffkCLwZuUw9RyZ9zDLBNpR1FsdiSD9mV9DEH4T3sNU79Mjy+o83jFojTg39R7
-nH8B6z7VLmlC+ENxsMqjdwRv7HtY595VBLwK/gejblT8kCVFFA/WjmiOVoZ4aMGd
-OOvsSgEZ9LaejB4xZdq+PP40DjxqhMQw89uzhWnCxxh0h+4PNfxhbPqJxZ9UMUWg
-uPLYPAoj9U5p3YgmRvEaKdrijOkhODeNVkV/a57jAgMBAAGjggN6MIIDdjAMBgNV
-HRMEBTADAQH/MAsGA1UdDwQEAwIBJjAdBgNVHQ4EFgQUe47EZ9BGIRcR/6F6QnWf
-6sSrcuQwgd0GA1UdIwSB1TCB0oAUHInDlsy9/jLVDYyBMbaYnY0oZI2hgbakgbMw
-gbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVpbGF0
-MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3JpdHkg
-RGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-ITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZ4IBADAgBgNVHREEGTAX
-gRVjZXJ0bWFzdGVyQGphYmJlci5vcmcwHQYDVR0SBBYwFIESYWRtaW5Ac3RhcnRj
-b20ub3JnMBEGCWCGSAGG+EIBAQQEAwIABzBUBglghkgBhvhCAQ0ERxZFU3RhcnRD
-b20gQ2xhc3MgMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEphYmJlciBTb2Z0
-d2FyZSBGb3VuZGF0aW9uMGIGA1UdHwRbMFkwKaAnoCWGI2h0dHA6Ly9jZXJ0LnN0
-YXJ0Y29tLm9yZy9jYS1jcmwuY3JsMCygKqAohiZodHRwOi8vY3JsLnN0YXJ0Y29t
-Lm9yZy9jcmwvY2EtY3JsLmNybDCCAUoGA1UdIASCAUEwggE9MIIBOQYLKwYBBAGB
-tTcBAQEwggEoMC8GCCsGAQUFBwIBFiNodHRwOi8vY2VydC5zdGFydGNvbS5vcmcv
-cG9saWN5LnBkZjA1BggrBgEFBQcCARYpaHR0cDovL2NlcnQuc3RhcnRjb20ub3Jn
-L2ludGVybWVkaWF0ZS5wZGYwgb0GCCsGAQUFBwICMIGwMBQWDVN0YXJ0Q29tIEx0
-ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpM
-ZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRj
-b20ub3JnL3BvbGljeS5wZGYwDQYJKoZIhvcNAQEFBQADgYEAtOq85Q1lf8PjsJCg
-uQ6TL3TJ1rSadfOwEyHJqIjR5LYpxdcJ5WxSEM3DxdrFnTaPBC6RQ7v836i9DdW3
-FS5/y1Et5gKksLNPQqaYEVFuvB4AGTp2HkdUGo8Oz9Dd4zTcvTSTeo/9mVxqdxKa
-lhMZMHD/ivqg8faZSQNYMg6xq7I=
------END CERTIFICATE-----
-
-StartCom_root_Certificate
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
+mozilla/Security_Communication_EV_RootCA1.crt
+-----BEGIN CERTIFICATE-----
+MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl
+MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh
+U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz
+MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N
+IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11
+bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE
+RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO
+zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5
+bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF
+MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1
+VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC
+OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
+CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW
+tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ
+q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb
+EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+
+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O
+VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
+-----END CERTIFICATE-----
+mozilla/DST_ACES_CA_X6.crt
+-----BEGIN CERTIFICATE-----
+MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
+ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
+MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
+VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
+FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
+ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
+gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
+fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
+ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
+ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
+MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
+c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
+dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
+aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
+hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
+QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
+h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
+nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
+rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
+9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
+-----END CERTIFICATE-----
+mozilla/Swisscom_Root_EV_CA_2.crt
+-----BEGIN CERTIFICATE-----
+MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAw
+ZzELMAkGA1UEBhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdp
+dGFsIENlcnRpZmljYXRlIFNlcnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290
+IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcNMzEwNjI1MDg0NTA4WjBnMQswCQYD
+VQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2Vy
+dGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYgQ0Eg
+MjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7Bx
+UglgRCgzo3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD
+1ycfMQ4jFrclyxy0uYAyXhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPH
+oCE2G3pXKSinLr9xJZDzRINpUKTk4RtiGZQJo/PDvO/0vezbE53PnUgJUmfANykR
+HvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8LiqG12W0OfvrSdsyaGOx9/
+5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaHZa0zKcQv
+idm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHL
+OdAGalNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaC
+NYGu+HuB5ur+rPQam3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f
+46Fq9mDU5zXNysRojddxyNMkM3OxbPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCB
+UWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDixzgHcgplwLa7JSnaFp6LNYth
+7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/BAQDAgGGMB0G
+A1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
+MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWB
+bj2ITY1x0kbBbkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6x
+XCX5145v9Ydkn+0UjrgEjihLj6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98T
+PLr+flaYC/NUn81ETm484T4VvwYmneTwkLbUwp4wLh/vx3rEUMfqe9pQy3omywC0
+Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7XwgiG/W9mR4U9s70
+WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH59yL
+Gn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm
+7JFe3VE/23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4S
+nr8PyQUQ3nqjsTzyP6WqJ3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VN
+vBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyAHmBR3NdUIR7KYndP+tiPsys6DXhyyWhB
+WkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/giuMod89a2GQ+fYWVq6nTI
+fI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuWl8PVP3wb
+I+2ksx0WckNLIOFZfsLorSa/ovc=
+-----END CERTIFICATE-----
+mozilla/D-TRUST_Root_Class_3_CA_2_EV_2009.crt
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF
+MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD
+bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw
+NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV
+BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn
+ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0
+3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z
+qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR
+p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8
+HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw
+ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea
+HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw
+Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh
+c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E
+RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt
+dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku
+Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp
+3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
+nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF
+CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na
+xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX
+KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1
+-----END CERTIFICATE-----
+mozilla/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.crt
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
+U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
+SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
+biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
+GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
+fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
+aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
+aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
+kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
+4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
+FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
+-----END CERTIFICATE-----
+mozilla/CA_Disig.crt
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET
+MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE
+AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw
+CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg
+YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE
+Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX
+mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD
+XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW
+S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp
+FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD
+AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu
+ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z
+ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv
+Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw
+DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6
+yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq
+EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
+CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB
+EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN
+PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag=
+-----END CERTIFICATE-----
+mozilla/VeriSign_Universal_Root_Certification_Authority.crt
+-----BEGIN CERTIFICATE-----
+MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
+vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
+ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
+IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
+IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
+bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
+9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
+H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
+LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
+/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
+rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
+WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
+exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
+DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
+sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
+seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
+4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
+lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
+7M2CYfE45k+XmCpajQ==
+-----END CERTIFICATE-----
+mozilla/GeoTrust_Global_CA_2.crt
+-----BEGIN CERTIFICATE-----
+MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
+IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
+R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
+PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
+Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
+TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
+5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
+S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
+2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
+EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
+EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
+/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
+A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
+abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
+I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
+4iIprn2DQKi6bA==
+-----END CERTIFICATE-----
+mozilla/EC-ACC.crt
+-----BEGIN CERTIFICATE-----
+MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB
+8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy
+dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1
+YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3
+dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh
+IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD
+LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG
+EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g
+KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD
+ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu
+bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg
+ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R
+85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm
+4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV
+HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd
+QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t
+lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB
+o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4
+opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo
+dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW
+ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN
+AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y
+/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k
+SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy
+Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS
+Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl
+nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI=
+-----END CERTIFICATE-----
+mozilla/StartCom_Certification_Authority.crt
+-----BEGIN CERTIFICATE-----
+MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
 MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
 Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9
+dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
 MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
 U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
 cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
@@ -2527,32 +341,3023 @@ Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
 Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
 Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
 26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
-AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
-FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j
-ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js
-LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM
-BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0
-Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy
-dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh
-cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh
-YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg
-dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp
-bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ
-YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
-TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ
-9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8
-jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW
-FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz
-ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1
-ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L
-EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu
-L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
-yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC
-O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V
-um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
-NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
------END CERTIFICATE-----
-Deutsche Telekom Root CA 2
+AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
+VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
+F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
+ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
+ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
+aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
+YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
+c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
+d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
+CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
+dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
+wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
+Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
+0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
+pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
+CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
+P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
+1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
+KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
+JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
+8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
+fyWl8kgAwKQB2j8=
+-----END CERTIFICATE-----
+mozilla/WellsSecure_Public_Root_Certificate_Authority.crt
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
+IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
+cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v
+dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0
+MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl
+bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD
+DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r
+WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU
+Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs
+HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj
+z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf
+SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl
+AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG
+KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P
+AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j
+BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC
+VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX
+ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
+Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB
+ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd
+/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB
+A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn
+k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9
+iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
+2G0xffX8oRAHh84vWdw+WNs=
+-----END CERTIFICATE-----
+mozilla/Entrust_Root_Certification_Authority.crt
+-----BEGIN CERTIFICATE-----
+MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
+Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
+KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
+NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
+NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
+ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
+BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
+Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
+4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
+KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
+rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
+94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
+sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
+gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
+kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
+vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
+A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
+O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
+AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
+9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
+eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
+0vdXcDazv/wor3ElhVsT/h5/WrQ8
+-----END CERTIFICATE-----
+mozilla/Staat_der_Nederlanden_Root_CA_-_G2.crt
+-----BEGIN CERTIFICATE-----
+MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
+TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX
+DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
+ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
+b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291
+qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp
+uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU
+Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE
+pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp
+5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M
+UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN
+GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy
+5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv
+6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK
+eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6
+B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/
+BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov
+L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG
+SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS
+CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen
+5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897
+IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK
+gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL
++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL
+vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm
+bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk
+N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC
+Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z
+ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==
+-----END CERTIFICATE-----
+mozilla/thawte_Primary_Root_CA_-_G2.crt
+-----BEGIN CERTIFICATE-----
+MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
+IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
+BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
+MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
+d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
+YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
+dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
+BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
+papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
+DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
+KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
+XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
+-----END CERTIFICATE-----
+mozilla/ACEDICOM_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE
+AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x
+CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW
+MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF
+RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
+AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7
+09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7
+XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P
+Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK
+t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb
+X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28
+MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU
+fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI
+2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH
+K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae
+ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP
+BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ
+MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw
+RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
+bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm
+fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3
+gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe
+I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i
+5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi
+ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn
+MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ
+o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6
+zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN
+GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt
+r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK
+Z05phkOTOPu220+DkdRgfks+KzgHVZhepA==
+-----END CERTIFICATE-----
+mozilla/ePKI_Root_Certification_Authority.crt
+-----BEGIN CERTIFICATE-----
+MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe
+MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0
+ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw
+IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL
+SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH
+SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh
+ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X
+DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1
+TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ
+fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA
+sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU
+WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS
+nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH
+dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip
+NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC
+AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF
+MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
+ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB
+uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl
+PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP
+JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/
+gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2
+j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6
+5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB
+o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS
+/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z
+Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE
+W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D
+hNQ+IIX3Sj0rnP0qCglN6oH4EZw=
+-----END CERTIFICATE-----
+mozilla/GeoTrust_Primary_Certification_Authority_-_G2.crt
+-----BEGIN CERTIFICATE-----
+MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
+MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
+KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
+MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
+BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
+NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
+BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
+MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
+So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
+tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
+CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
+qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
+rD6ogRLQy7rQkgu2npaqBA+K
+-----END CERTIFICATE-----
+mozilla/Taiwan_GRCA.crt
+-----BEGIN CERTIFICATE-----
+MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
+MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
+PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
+AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
+IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
+gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
+yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
+F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
+jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
+ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
+VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
+YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
+EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
+Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
+DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
+MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
+UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
+TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
+qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
+ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
+JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
+hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
+EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
+nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
+udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
+ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
+LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
+pYYsfPQS
+-----END CERTIFICATE-----
+mozilla/AffirmTrust_Networking.crt
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
+BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
+dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
+MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
+cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
+YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
+kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
+QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
+6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
+yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
+QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
+KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
+tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
+QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
+Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
+olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
+x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
+-----END CERTIFICATE-----
+mozilla/Sonera_Class_2_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
+MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
+MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
+BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
+Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
+5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
+3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
+vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
+8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
+DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
+MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
+zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
+3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
+FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
+Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
+ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
+-----END CERTIFICATE-----
+mozilla/Juur-SK.crt
+-----BEGIN CERTIFICATE-----
+MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN
+AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp
+dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw
+MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw
+CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ
+MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB
+SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz
+ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH
+LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP
+PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL
+2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w
+ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC
+MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk
+AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0
+AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz
+AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz
+AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f
+BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
+FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY
+P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi
+CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g
+kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95
+HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS
+na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q
+qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z
+TbvGRNs2yyqcjg==
+-----END CERTIFICATE-----
+mozilla/Baltimore_CyberTrust_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
+RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
+VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
+DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
+ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
+VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
+mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
+IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
+mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
+XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
+dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
+jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
+BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
+DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
+9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
+jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
+Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
+ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
+R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
+-----END CERTIFICATE-----
+mozilla/Trustis_FPS_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
+MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
+ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx
+MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc
+MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+
+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH
+iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj
+vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA
+0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB
+OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/
+BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E
+FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01
+GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW
+zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4
+1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE
+f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F
+jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN
+ZetX2fNXlrtIzYE=
+-----END CERTIFICATE-----
+mozilla/UTN_USERFirst_Email_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
+rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
+Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
+Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
+BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
+dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
+AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
+YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
+hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
+L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
+SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
+1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
+6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
+DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
+Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
+aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
+AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
+7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
+xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
+rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
+eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
+USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
+-----END CERTIFICATE-----
+mozilla/Swisscom_Root_CA_1.crt
+-----BEGIN CERTIFICATE-----
+MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk
+MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
+YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
+Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT
+AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
+Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN
+BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9
+m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih
+FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/
+TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F
+EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco
+kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu
+HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF
+vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo
+19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC
+L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW
+bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX
+JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
+FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
+BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc
+K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf
+ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik
+Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB
+sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e
+3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR
+ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip
+mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH
+b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf
+rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms
+hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y
+zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
+MBr1mmz0DlP5OlvRHA==
+-----END CERTIFICATE-----
+mozilla/QuoVadis_Root_CA_3.crt
+-----BEGIN CERTIFICATE-----
+MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
+GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
+b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
+BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
+YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
+V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
+4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
+H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
+8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
+vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
+mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
+btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
+T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
+WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
+c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
+4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
+VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
+CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
+aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
+aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
+dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
+czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
+A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
+TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
+Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
+7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
+d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
+4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
+t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
+DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
+k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
+zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
+Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
+mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
+4SVhM7JZG+Ju1zdXtg2pEto=
+-----END CERTIFICATE-----
+mozilla/GeoTrust_Primary_Certification_Authority.crt
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
+R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
+MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
+Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
+AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
+ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
+7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
+kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
+mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
+KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
+6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
+4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
+oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
+UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
+AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
+-----END CERTIFICATE-----
+mozilla/Cybertrust_Global_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
+A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
+bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE
+ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS
+b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5
+7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS
+J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y
+HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP
+t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz
+FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY
+XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
+MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw
+hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js
+MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA
+A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj
+Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx
+XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o
+omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc
+A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
+WL1WMRJOEcgh4LMRkWXbtKaIOM5V
+-----END CERTIFICATE-----
+mozilla/SwissSign_Silver_CA_-_G2.crt
+-----BEGIN CERTIFICATE-----
+MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
+BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu
+IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow
+RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY
+U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv
+Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br
+YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF
+nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH
+6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt
+eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/
+c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ
+MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH
+HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf
+jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6
+5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB
+rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
+F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c
+wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
+cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB
+AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp
+WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9
+xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ
+2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ
+IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8
+aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X
+em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR
+dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/
+OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+
+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy
+tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
+-----END CERTIFICATE-----
+mozilla/Hellenic_Academic_and_Research_Institutions_RootCA_2011.crt
+-----BEGIN CERTIFICATE-----
+MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix
+RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1
+dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p
+YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw
+NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK
+EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl
+cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl
+c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz
+dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ
+fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns
+bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD
+75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP
+FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV
+HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp
+5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu
+b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA
+A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p
+6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
+TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7
+dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys
+Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI
+l7WdmplNsDz4SgCbZN2fOUvRJ9e4
+-----END CERTIFICATE-----
+mozilla/GlobalSign_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
+MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
+aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
+jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
+xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
+1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
+snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
+U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
+9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
+AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
+yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
+38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
+AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
+DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
+HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
+-----END CERTIFICATE-----
+mozilla/EE_Certification_Centre_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
+MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
+czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
+CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
+MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
+ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
+b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
+euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
+bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
+WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
+MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
+1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
+VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
+zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
+BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
+BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
+v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
+E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
+uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
+iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
+GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
+-----END CERTIFICATE-----
+mozilla/America_Online_Root_Certification_Authority_1.crt
+-----BEGIN CERTIFICATE-----
+MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
+bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
+MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
+ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
+hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
+1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
+OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
+2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
+O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
+AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
+BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
+Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
+LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
+oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
+MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
+sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
+-----END CERTIFICATE-----
+mozilla/Starfield_Services_Root_Certificate_Authority_-_G2.crt
+-----BEGIN CERTIFICATE-----
+MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
+HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
+ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
+MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
+VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
+ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
+dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
+OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
+8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
+Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
+hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
+6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
+DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
+AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
+bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
+ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
+qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
+iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
+0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
+sSi6
+-----END CERTIFICATE-----
+mozilla/DigiCert_Assured_ID_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
+b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
+cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
+JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
+mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
+VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
+AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
+AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
+pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
+dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
+fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
+NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
+H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
+-----END CERTIFICATE-----
+mozilla/GeoTrust_Universal_CA_2.crt
+-----BEGIN CERTIFICATE-----
+MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
+c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
+VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
+c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
+WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
+FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
+XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
+se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
+KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
+IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
+y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
+hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
+QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
+Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
+HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
+KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
+dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
+L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
+Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
+ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
+T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
+GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
+1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
+OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
+6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
+QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
+-----END CERTIFICATE-----
+mozilla/GeoTrust_Global_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
+MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
+YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
+R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
+9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
+fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
+iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
+1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
+MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
+ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
+uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
+Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
+tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
+PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
+hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
+5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
+-----END CERTIFICATE-----
+mozilla/QuoVadis_Root_CA_2.crt
+-----BEGIN CERTIFICATE-----
+MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
+GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
+b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
+BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
+YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
+GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
+Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
+WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
+rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
+ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
+Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
+PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
+/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
+oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
+yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
+EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
+A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
+MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
+ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
+BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
+g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
+fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
+WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
+B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
+hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
+TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
+mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
+ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
+4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
+8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
+-----END CERTIFICATE-----
+mozilla/AffirmTrust_Commercial.crt
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
+BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
+dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
+MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
+cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
+Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
+ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
+MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
+yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
+VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
+nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
+KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
+XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
+vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
+Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
+N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
+nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
+-----END CERTIFICATE-----
+mozilla/certSIGN_ROOT_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT
+AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD
+QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP
+MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do
+0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ
+UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d
+RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ
+OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv
+JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C
+AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O
+BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ
+LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY
+MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ
+44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I
+Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw
+i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN
+9u6wWk5JRFRYX0KD
+-----END CERTIFICATE-----
+mozilla/GlobalSign_Root_CA_-_R3.crt
+-----BEGIN CERTIFICATE-----
+MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
+MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
+A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
+RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
+gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
+KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
+QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
+XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
+DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
+LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
+RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
+jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
+6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
+mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
+Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
+WD9f
+-----END CERTIFICATE-----
+mozilla/QuoVadis_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
+TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
+MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
+IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
+dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
+li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
+rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
+WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
+F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
+xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
+Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
+dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
+ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
+IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
+c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
+ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
+Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
+KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
+KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
+y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
+dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
+VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
+MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
+fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
+7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
+cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
+mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
+xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
+SnQ2+Q==
+-----END CERTIFICATE-----
+mozilla/XRamp_Global_CA_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
+gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
+MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
+UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
+NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
+dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
+dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
+38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
+KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
+DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
+qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
+JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
+PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
+BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
+jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
+eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
+ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
+vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
+qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
+IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
+i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
+O+7ETPTsJ3xCwnR8gooJybQDJbw=
+-----END CERTIFICATE-----
+mozilla/StartCom_Certification_Authority_G2.crt
+-----BEGIN CERTIFICATE-----
+MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW
+MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm
+aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1
+OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG
+A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G
+CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ
+JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD
+vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo
+D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/
+Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW
+RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK
+HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN
+nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM
+0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i
+UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9
+Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg
+TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
+AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL
+BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
+2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX
+UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl
+6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK
+9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ
+HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI
+wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY
+XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l
+IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo
+hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr
+so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI
+-----END CERTIFICATE-----
+mozilla/Go_Daddy_Class_2_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
+MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
+YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
+MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
+ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
+MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
+ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
+PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
+wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
+EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
+avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
+sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
+/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
+IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
+OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
+TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
+HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
+dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
+ReYNnyicsbkqWletNw+vHX/bvZ8=
+-----END CERTIFICATE-----
+mozilla/GeoTrust_Primary_Certification_Authority_-_G3.crt
+-----BEGIN CERTIFICATE-----
+MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
+mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
+MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
+eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
+cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
+BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
+MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
+BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
+hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
+5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
+JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
+DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
+huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
+HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
+AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
+zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
+kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
+AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
+SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
+spki4cErx5z481+oghLrGREt
+-----END CERTIFICATE-----
+mozilla/AddTrust_Public_Services_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
+MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
+ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
+BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
+6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
+GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
+dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
+1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
+62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
+BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
+AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
+MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
+cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
+b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
+IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
+iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
+GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
+4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
+XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
+-----END CERTIFICATE-----
+mozilla/A-Trust-nQual-03.crt
+-----BEGIN CERTIFICATE-----
+MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB
+VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
+bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R
+dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw
+MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy
+dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52
+ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM
+EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj
+lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ
+znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH
+2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1
+k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs
+2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD
+VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
+AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG
+KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+
+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R
+FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
+mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE
+DNuxUCAKGkq6ahq97BvIxYSazQ==
+-----END CERTIFICATE-----
+mozilla/TDC_OCES_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
+SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw
+ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU
+REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr
+2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s
+2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU
+GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj
+dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r
+TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/
+BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB
+AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv
+c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl
+ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu
+MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
+T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud
+HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD
+VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny
+bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
+MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ
+J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG
+SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom
+JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO
+inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y
+caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB
+mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ
+YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
+BKNDLdr8C2LqL19iUw==
+-----END CERTIFICATE-----
+mozilla/Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.crt
+-----BEGIN CERTIFICATE-----
+MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
+aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
+IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
+Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
+BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
+Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
+Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
+Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
+IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
+J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
+JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
+wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
+koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
+qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
+Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
+xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
+7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
+sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
+sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
+cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
+-----END CERTIFICATE-----
+mozilla/SecureSign_RootCA11.crt
+-----BEGIN CERTIFICATE-----
+MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr
+MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG
+A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0
+MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp
+Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD
+QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz
+i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8
+h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV
+MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9
+UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni
+8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC
+h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD
+VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
+AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm
+KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ
+X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr
+QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5
+pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN
+QSdJQO7e5iNEOdyhIta6A/I=
+-----END CERTIFICATE-----
+mozilla/ComSign_Secured_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw
+PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu
+MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx
+GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL
+MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf
+HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh
+gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW
+v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue
+Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr
+9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt
+6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7
+MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl
+Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58
+ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq
+hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p
+iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC
+dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL
+kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL
+hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
+OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
+-----END CERTIFICATE-----
+mozilla/DigiCert_Global_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
+CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
+nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
+43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
+T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
+gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
+TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
+DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
+hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
+06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
+PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
+YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
+mozilla/Buypass_Class_3_CA_1.crt
+-----BEGIN CERTIFICATE-----
+MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
+MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
+Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL
+MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
+VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg
+isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z
+NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI
++MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R
+hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+
+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD
+AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP
+Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s
+EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2
+mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC
+e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow
+dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
+-----END CERTIFICATE-----
+mozilla/Comodo_Secure_Services_root.crt
+-----BEGIN CERTIFICATE-----
+MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
+ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
+fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
+BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
+cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
+HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
+CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
+3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
+6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
+HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
+EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
+Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
+Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
+DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
+5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
+Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
+gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
+aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
+izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
+-----END CERTIFICATE-----
+mozilla/Microsec_e-Szigno_Root_CA_2009.crt
+-----BEGIN CERTIFICATE-----
+MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD
+VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0
+ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G
+CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y
+OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx
+FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp
+Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
+dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP
+kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc
+cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U
+fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7
+N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC
+xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1
++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM
+Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG
+SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h
+mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk
+ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
+tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c
+2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t
+HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW
+-----END CERTIFICATE-----
+mozilla/Go_Daddy_Root_Certificate_Authority_-_G2.crt
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
+EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
+ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
+NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
+EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
+AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
+E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
+/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
+DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
+GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
+tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
+AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
+FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
+WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
+9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
+gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
+2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
+LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
+4uJEvlz36hz1
+-----END CERTIFICATE-----
+mozilla/Certum_Trusted_Network_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM
+MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
+ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
+cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3
+WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg
+Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw
+IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH
+UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM
+TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU
+BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM
+kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x
+AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV
+HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y
+sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL
+I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8
+J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY
+VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
+03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
+-----END CERTIFICATE-----
+mozilla/TC_TrustCenter_Class_2_CA_II.crt
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
+BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
+Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1
+OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
+SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc
+VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf
+tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg
+uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J
+XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK
+8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99
+5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3
+kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
+dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6
+Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
+JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
+Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS
+GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt
+ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8
+au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV
+hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI
+dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
+-----END CERTIFICATE-----
+mozilla/Chambers_of_Commerce_Root_-_2008.crt
+-----BEGIN CERTIFICATE-----
+MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD
+VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
+IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
+MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz
+IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz
+MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj
+dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw
+EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp
+MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G
+CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9
+28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq
+VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q
+DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR
+5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL
+ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a
+Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl
+UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s
++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5
+Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
+ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx
+hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV
+HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1
++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN
+YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t
+L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy
+ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt
+IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV
+HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w
+DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW
+PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF
+5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1
+glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH
+FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2
+pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD
+xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG
+tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq
+jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De
+fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
+OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ
+d0jQ
+-----END CERTIFICATE-----
+mozilla/S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.crt
+-----BEGIN CERTIFICATE-----
+MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCB
+rjELMAkGA1UEBhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcp
+MRIwEAYDVQQHEwlTdHV0dGdhcnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fz
+c2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVTLVRSVVNUIEF1dGhlbnRpY2F0aW9u
+IGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0wNTA2MjIwMDAwMDBa
+Fw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFkZW4t
+V3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMg
+RGV1dHNjaGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJV
+U1QgQXV0aGVudGljYXRpb24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBO
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1
+toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob4QSwI7+Vio5bG0F/WsPo
+TUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXLg3KSwlOy
+ggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1
+XgqfeN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteF
+hy+S8dF2g08LOlk3KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm
+7QIDAQABo4GSMIGPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG
+MCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJvbmxpbmUxLTIwNDgtNTAdBgNV
+HQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAUD8oeXHngovMp
+ttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
+pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFo
+LtU96G7m1R08P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersF
+iXOMy6ZNwPv2AtawB6MDwidAnwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0y
+h9WUUpY6RsZxlj33mA6ykaqP2vROJAA5VeitF7nTNCtKqUDMFypVZUF0Qn71wK/I
+k63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8bHz2eBIPdltkdOpQ=
+-----END CERTIFICATE-----
+mozilla/Swisscom_Root_CA_2.crt
+-----BEGIN CERTIFICATE-----
+MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBk
+MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
+YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
+Q0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2MjUwNzM4MTRaMGQxCzAJBgNVBAYT
+AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
+Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIICIjAN
+BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvEr
+jw0DzpPMLgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r
+0rk0X2s682Q2zsKwzxNoysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f
+2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJwDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVP
+ACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpHWrumnf2U5NGKpV+GY3aF
+y6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1aSgJA/MTA
+tukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL
+6yxSNLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0
+uPoTXGiTOmekl9AbmbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrAL
+acywlKinh/LTSlDcX3KwFnUey7QYYpqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velh
+k6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3qPyZ7iVNTA6z00yPhOgpD/0Q
+VAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
+FDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
+BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqh
+b97iEoHF8TwuMA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4R
+fbgZPnm3qKhyN2abGu2sEzsOv2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv
+/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ82YqZh6NM4OKb3xuqFp1mrjX2lhI
+REeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLzo9v/tdhZsnPdTSpx
+srpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcsa0vv
+aGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciAT
+woCqISxxOQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99n
+Bjx8Oto0QuFmtEYE3saWmA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5W
+t6NlUe07qxS/TFED6F+KBZvuim6c779o+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N
+8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TCrvJcwhbtkj6EPnNgiLx2
+9CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX5OfNeOI5
+wSsSnqaeG8XmDtkx2Q==
+-----END CERTIFICATE-----
+mozilla/Secure_Global_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
+GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
+MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
+Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
+iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
+/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
+jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
+HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
+sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
+gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
+KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
+AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
+URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
+H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
+I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
+iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
+f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
+-----END CERTIFICATE-----
+mozilla/UTN_USERFirst_Hardware_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
+lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
+SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
+A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
+MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
+d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
+cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
+0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
+M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
+MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
+oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
+DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
+oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
+dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
+bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
+BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
+//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
+CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
+CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
+3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
+KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
+-----END CERTIFICATE-----
+mozilla/E-Guven_Kok_Elektronik_Sertifika_Hizmet_Saglayicisi.crt
+-----BEGIN CERTIFICATE-----
+MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1
+MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp
+Z2kgQS5TLjE8MDoGA1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZp
+a2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDEx
+MzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kg
+R3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9uaWsg
+U2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdU
+MZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT
+L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H
+5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC
+90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1
+c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/
+BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoE
+VtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLP
+qk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S
+/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzlvBNbCNvj
+/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X
+KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
+fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
+-----END CERTIFICATE-----
+mozilla/Camerfirma_Global_Chambersign_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
+MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
+ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
+YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
+MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
+NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
+A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
+A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
+Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
+QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
+eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
+B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
+z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
+AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
+ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
+TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
+MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
+VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
+VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
+bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
+AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
+bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
+ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
+VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
+ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
+AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
+-----END CERTIFICATE-----
+mozilla/NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG
+EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3
+MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl
+cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR
+dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB
+pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM
+b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm
+aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz
+IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT
+lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz
+AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5
+VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG
+ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2
+BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG
+AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M
+U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh
+bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C
++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
+bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F
+uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2
+XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
+-----END CERTIFICATE-----
+mozilla/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
+N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
+KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
+kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
+CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
+Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
+imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
+2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
+DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
+F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
+TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
+mozilla/Security_Communication_RootCA2.crt
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl
+MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe
+U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX
+DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy
+dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj
+YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV
+OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr
+zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM
+VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ
+hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO
+ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw
+awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs
+OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
+DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF
+coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc
+okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8
+t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy
+1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/
+SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
+-----END CERTIFICATE-----
+mozilla/thawte_Primary_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
+qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
+MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
+BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
+NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
+LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
+A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
+W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
+3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
+6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
+Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
+NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
+r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
+DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
+YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
+xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
+/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
+LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
+jVaMaA==
+-----END CERTIFICATE-----
+mozilla/OISTE_WISeKey_Global_Root_GA_CA.crt
+-----BEGIN CERTIFICATE-----
+MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
+ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
+aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
+ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w
+NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G
+A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD
+VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX
+SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR
+VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2
+w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF
+mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg
+4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9
+4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw
+DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw
+EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx
+SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2
+ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8
+vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
+hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi
+Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
+/L7fCg0=
+-----END CERTIFICATE-----
+mozilla/AC_Raíz_Certicámara_S.A..crt
+-----BEGIN CERTIFICATE-----
+MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx
+CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp
+ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa
+QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw
+NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft
+ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu
+QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq
+hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG
+qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL
+fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ
+Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4
+Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ
+54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b
+MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j
+ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej
+YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt
+A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF
+rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ
+pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
+AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB
+lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy
+YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50
+7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs
+YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6
+xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc
+unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/
+Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp
+ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42
+gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0
+jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+
+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD
+W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/
+RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r
+MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk
+BYn8eNZcLCZDqQ==
+-----END CERTIFICATE-----
+mozilla/SecureTrust_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
+FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
+MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
+cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
+Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
+0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
+wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
+7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
+8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
+BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
+/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
+JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
+NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
+6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
+3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
+D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
+CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
+3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
+-----END CERTIFICATE-----
+mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt
+-----BEGIN CERTIFICATE-----
+MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE
+BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h
+cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy
+MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg
+Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi
+MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9
+thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM
+cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG
+L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i
+NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h
+X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b
+m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy
+Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja
+EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T
+KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF
+6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh
+OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD
+VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD
+VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
+cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv
+ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl
+AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF
+661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9
+am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1
+ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481
+PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS
+3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k
+SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF
+3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM
+ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g
+StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz
+Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB
+jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
+-----END CERTIFICATE-----
+mozilla/GeoTrust_Universal_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
+c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
+BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
+IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
+VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
+cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
+QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
+F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
+c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
+mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
+VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
+teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
+f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
+Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
+nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
+/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
+MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
+9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
+aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
+IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
+ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
+uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
+Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
+QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
+koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
+ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
+DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
+bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
+-----END CERTIFICATE-----
+mozilla/D-TRUST_Root_Class_3_CA_2_2009.crt
+-----BEGIN CERTIFICATE-----
+MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF
+MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD
+bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha
+ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM
+HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03
+UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42
+tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R
+ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM
+lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp
+/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G
+A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G
+A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj
+dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy
+MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl
+cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js
+L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL
+BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni
+acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
+o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K
+zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8
+PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y
+Johw1+qRzT65ysCQblrGXnRl11z+o+I=
+-----END CERTIFICATE-----
+mozilla/Visa_eCommerce_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
+MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
+cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
+bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
+CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
+dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
+cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
+2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
+lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
+ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
+299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
+vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
+dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
+AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
+AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
+zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
+LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
+7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
+++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
+398znM/jra6O1I7mT1GvFpLgXPYHDw==
+-----END CERTIFICATE-----
+mozilla/TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.crt
+-----BEGIN CERTIFICATE-----
+MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS
+MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp
+bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw
+VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy
+YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy
+dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2
+ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe
+Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx
+GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls
+aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU
+QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh
+xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0
+aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr
+IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h
+gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK
+O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO
+fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw
+lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
+hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID
+AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/
+BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP
+NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t
+wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM
+7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh
+gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n
+oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs
+yZyQ2uypQjyttgI=
+-----END CERTIFICATE-----
+mozilla/AddTrust_External_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
+mozilla/Comodo_Trusted_Services_root.crt
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
+aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
+MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
+BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
+VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
+fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
+TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
+fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
+1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
+kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
+A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
+ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
+dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
+Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
+HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
+pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
+jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
+xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
+dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
+-----END CERTIFICATE-----
+mozilla/RSA_Security_2048_v3.crt
+-----BEGIN CERTIFICATE-----
+MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
+MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
+dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
+BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
+MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
+eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
+/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
+wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
+AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
+PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
+AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
+BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
+MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
+HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
+Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
+f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
+rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
+6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
+7CAFYd4=
+-----END CERTIFICATE-----
+mozilla/DST_Root_CA_X3.crt
+-----BEGIN CERTIFICATE-----
+MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
+MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
+DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
+PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
+Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
+rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
+OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
+xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
+7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
+aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
+SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
+ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
+AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
+R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
+JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
+Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
+-----END CERTIFICATE-----
+mozilla/Verisign_Class_4_Public_Primary_Certification_Authority_-_G3.crt
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
+GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
++mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
+U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
+NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
+ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
+ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
+CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
+g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
+fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
+2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
+bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
+-----END CERTIFICATE-----
+mozilla/Global_Chambersign_Root_-_2008.crt
+-----BEGIN CERTIFICATE-----
+MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD
+VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
+IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
+MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
+aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx
+MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy
+cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG
+A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl
+BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI
+hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed
+KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7
+G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2
+zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4
+ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG
+HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2
+Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V
+yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e
+beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r
+6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
+wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog
+zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW
+BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr
+ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp
+ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk
+cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt
+YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC
+CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow
+KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI
+hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ
+UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz
+X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x
+fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz
+a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd
+Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd
+SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O
+AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso
+M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge
+v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
+09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
+-----END CERTIFICATE-----
+mozilla/Buypass_Class_2_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
+MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
+Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow
+TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
+HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
+BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr
+6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV
+L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91
+1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx
+MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ
+QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB
+arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr
+Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi
+FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS
+P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN
+9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP
+AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz
+uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h
+9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
+A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t
+OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo
++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7
+KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2
+DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us
+H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ
+I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7
+5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h
+3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz
+Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA=
+-----END CERTIFICATE-----
+mozilla/America_Online_Root_Certification_Authority_2.crt
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
+bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
+MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
+ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
+206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
+KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
+JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
+BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
+Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
+PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
+Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
+Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
+o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
++L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
+YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
+FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
+AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
+xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
+LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
+obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
+CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
+IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
+DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
+AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
+Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
+AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
+Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
+RY8mkaKO/qk=
+-----END CERTIFICATE-----
+mozilla/CA_Disig_Root_R1.crt
+-----BEGIN CERTIFICATE-----
+MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV
+BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu
+MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQy
+MDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx
+EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjEw
+ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy3QRk
+D2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/o
+OI7bm+V8u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3A
+fQ+lekLZWnDZv6fXARz2m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJe
+IgpFy4QxTaz+29FHuvlglzmxZcfe+5nkCiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8n
+oc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTaYVKvJrT1cU/J19IG32PK
+/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6vpmumwKj
+rckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD
+3AjLLhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE
+7cderVC6xkGbrPAXZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkC
+yC2fg69naQanMVXVz0tv/wQFx1isXxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLd
+qvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
+DwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ04IwDQYJKoZI
+hvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
+xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaA
+SfX8MPWbTx9BLxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXo
+HqJPYNcHKfyyo6SdbhWSVhlMCrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpB
+emOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5GfbVSUZP/3oNn6z4eGBrxEWi1CXYBmC
+AMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85YmLLW1AL14FABZyb
+7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKSds+x
+DzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvk
+F7mGnjixlAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqF
+a3qdnom2piiZk4hA9z7NUaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsT
+Q6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJa7+h89n07eLw4+1knj0vllJPgFOL
+-----END CERTIFICATE-----
+mozilla/TC_TrustCenter_Class_3_CA_II.crt
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
+BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
+Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
+OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
+SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
+VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
+Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
+Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
+1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
+ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
+Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
+XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
+dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
+Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
+JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
+Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
+irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
+TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
+g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
+95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
+S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
+-----END CERTIFICATE-----
+mozilla/TDC_Internet_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
+SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
+Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
+BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
+cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
+vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
+Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
+0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
+4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
+eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
+R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
+A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
+dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
+Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
+WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
+HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
+KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
+Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
+wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
+2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
+9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
+jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
+aQNiuJkFBT1reBK9sG9l
+-----END CERTIFICATE-----
+mozilla/Network_Solutions_Certificate_Authority.crt
+-----BEGIN CERTIFICATE-----
+MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
+MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
+MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
+dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
+UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
+ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
+c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
+OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
+mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
+BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
+qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
+gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
+BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
+bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
+dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
+6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
+h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
+/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
+wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
+pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
+-----END CERTIFICATE-----
+mozilla/Buypass_Class_3_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
+MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
+Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow
+TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
+HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
+BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y
+ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E
+N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9
+tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX
+0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c
+/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X
+KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY
+zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS
+O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D
+34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP
+K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3
+AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv
+Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj
+QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
+cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS
+IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2
+HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa
+O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv
+033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u
+dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE
+kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41
+3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD
+u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq
+4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc=
+-----END CERTIFICATE-----
+mozilla/UTN_DATACorp_SGC_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
+kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
+IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
+EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
+VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
+dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
+E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
+D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
+4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
+lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
+bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
+o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
+MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
+LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
+BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
+AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
+Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
+j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
+KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
+2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
+mfnGV/TJVTl4uix5yaaIK/QI
+-----END CERTIFICATE-----
+mozilla/NetLock_Notary_=Class_A=_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
+MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
+TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
+dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
+KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
+N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
+dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
+MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
+b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
+zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
+3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
+WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
+Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
+NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
+ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
+QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
+YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
+aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
+IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
+ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
+ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
+amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
+IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
+Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
+ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
+YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
+dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
+b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
+CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
+xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
+0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
+QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
+f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
+8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
+-----END CERTIFICATE-----
+mozilla/Microsec_e-Szigno_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw
+cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy
+b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z
+ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4
+NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN
+TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p
+Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u
+uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+
+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA
+vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770
+Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx
+62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB
+AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw
+LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP
+BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB
+AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov
+MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5
+ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
+AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT
+AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh
+ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo
+AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa
+AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln
+bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p
+Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP
+PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv
+Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB
+EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu
+w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj
+cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV
+HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI
+VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS
+BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS
+b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS
+8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds
+ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl
+7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
+86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR
+hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/
+MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
+-----END CERTIFICATE-----
+mozilla/AffirmTrust_Premium.crt
+-----BEGIN CERTIFICATE-----
+MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
+BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
+dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
+A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
+cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
+qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
+JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
+s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
+HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
+70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
+V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
+qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
+5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
+C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
+OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
+FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
+BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
+KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
+Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
+8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
+MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
+0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
+u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
+u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
+YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
+GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
+RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
+KeC2uAloGRwYQw==
+-----END CERTIFICATE-----
+mozilla/Certplus_Class_2_Primary_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
+PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
+cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
+MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
+IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
+ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
+VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
+kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
+EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
+H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
+HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
+DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
+QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
+Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
+AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
+yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
+FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
+ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
+kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
+l7+ijrRU
+-----END CERTIFICATE-----
+mozilla/Entrust.net_Premium_2048_Secure_Server_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3
+MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
+K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
+sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
+MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
+XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
+HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
+4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
+HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub
+j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo
+U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
+zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b
+u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+
+bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er
+fF6adulZkMV8gzURZVE=
+-----END CERTIFICATE-----
+mozilla/Sonera_Class_1_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
+MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx
+MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV
+BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG
+29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk
+oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk
+3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL
+qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN
+nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw
+DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG
+MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX
+ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H
+DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO
+TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
+kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
+zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
+-----END CERTIFICATE-----
+mozilla/Starfield_Class_2_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
+MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
+U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
+NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
+ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
+ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
+DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
+8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
+X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
+K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
+1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
+A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
+zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
+YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
+bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
+DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
+L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
+eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
+xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
+VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
+WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
+-----END CERTIFICATE-----
+mozilla/SwissSign_Gold_CA_-_G2.crt
+-----BEGIN CERTIFICATE-----
+MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
+BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
+biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
+MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
+d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
+76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
+bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
+6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
+emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
+MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
+MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
+MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
+FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
+aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
+gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
+qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
+lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
+8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
+L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
+45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
+UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
+O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
+bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
+GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
+77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
+hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
+92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
+Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
+ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
+Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
+-----END CERTIFICATE-----
+mozilla/China_Internet_Network_Information_Center_EV_Certificates_Root.crt
+-----BEGIN CERTIFICATE-----
+MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
+Q04xMjAwBgNVBAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24g
+Q2VudGVyMUcwRQYDVQQDDD5DaGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0
+aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMgUm9vdDAeFw0xMDA4MzEwNzExMjVa
+Fw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAGA1UECgwpQ2hpbmEg
+SW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMMPkNo
+aW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRp
+ZmljYXRlcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z
+7r07eKpkQ0H1UN+U8i6yjUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//
+DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV98YPjUesWgbdYavi7NifFy2cyjw1l1Vx
+zUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2HklY0bBoQCxfVWhyXWIQ8
+hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23KzhmBsUs
+4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54u
+gQEC7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oY
+NJKiyoOCWTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
+FgQUfHJLOcfA22KlT5uqGDSSosqDglkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3
+j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd50XPFtQO3WKwMVC/GVhMPMdoG
+52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM7+czV0I664zB
+echNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
+ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrI
+zo9uoV1/A3U05K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATy
+wy39FCqQmbkHzJ8=
+-----END CERTIFICATE-----
+mozilla/Certum_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
+MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
+QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
+MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
+QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
+jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
+ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
+ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
+Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
+AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
+HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
+uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
+TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
+xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
+CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
+O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
+6GAqm4VKQPNriiTsBhYscw==
+-----END CERTIFICATE-----
+mozilla/CA_Disig_Root_R2.crt
+-----BEGIN CERTIFICATE-----
+MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV
+BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu
+MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy
+MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx
+EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw
+ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe
+NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH
+PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I
+x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe
+QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR
+yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO
+QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912
+H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ
+QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD
+i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs
+nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1
+rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
+DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI
+hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
+tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf
+GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb
+lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka
++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal
+TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i
+nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3
+gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr
+G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os
+zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x
+L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL
+-----END CERTIFICATE-----
+mozilla/TWCA_Root_Certification_Authority.crt
+-----BEGIN CERTIFICATE-----
+MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES
+MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU
+V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz
+WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO
+LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm
+aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE
+AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH
+K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX
+RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z
+rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx
+3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq
+hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC
+MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls
+XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D
+lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn
+aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ
+YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
+-----END CERTIFICATE-----
+mozilla/thawte_Primary_Root_CA_-_G3.crt
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
+rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
+MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
+BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
+Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
+LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
+MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
+ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
+gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
+YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
+b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
+9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
+zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
+OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
+HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
+2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
+oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
+t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
+KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
+m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
+MdRAGmI0Nj81Aa6sY6A=
+-----END CERTIFICATE-----
+mozilla/AddTrust_Low-Value_Services_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
+MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
+VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
+CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
+tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
+dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
+PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
++Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
+BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
+MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
+ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
+IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
+7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
+43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
+eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
+pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
+WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
+-----END CERTIFICATE-----
+mozilla/Starfield_Root_Certificate_Authority_-_G2.crt
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
+HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
+ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
+MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
+b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
+aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
+Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
+nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
+HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
+Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
+dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
+HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
+CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
+sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
+4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
+8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
+pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
+mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
+-----END CERTIFICATE-----
+mozilla/IGC_A.crt
+-----BEGIN CERTIFICATE-----
+MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
+AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
+TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
+9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
+MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
+BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
+MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
+LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
+s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
+xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
+u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
+F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
+Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
+PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
+HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
+NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
+AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
+L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
+YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
+Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
+NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
+0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
+-----END CERTIFICATE-----
+mozilla/Comodo_AAA_Services_root.crt
+-----BEGIN CERTIFICATE-----
+MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
+YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
+MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
+BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
+GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
+BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
+3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
+YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
+rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
+ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
+oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
+MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
+QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
+b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
+AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
+GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
+Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
+G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
+l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
+smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
+-----END CERTIFICATE-----
+mozilla/DigiCert_High_Assurance_EV_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
+ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
+LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
+RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
+PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
+xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
+Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
+hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
+EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
+FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
+nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
+eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
+hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
+Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
+vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
++OkuE6N36B9K
+-----END CERTIFICATE-----
+mozilla/PSCProcert.crt
+-----BEGIN CERTIFICATE-----
+MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1
+dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9s
+YW5vMQswCQYDVQQGEwJWRTEQMA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlz
+dHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0
+aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBlcmludGVuZGVuY2lh
+IGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUwIwYJ
+KoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEw
+MFoXDTIwMTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHBy
+b2NlcnQubmV0LnZlMQ8wDQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGEx
+KjAoBgNVBAsTIVByb3ZlZWRvciBkZSBDZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQG
+A1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9u
+aWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIwDQYJKoZI
+hvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo9
+7BVCwfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74
+BCXfgI8Qhd19L3uA3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38G
+ieU89RLAu9MLmV+QfI4tL3czkkohRqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9
+JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmOEO8GqQKJ/+MMbpfg353bIdD0
+PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG20qCZyFSTXai2
+0b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
+0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/
+6mnbVSKVUyqUtd+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1m
+v6JpIzi4mWCZDlZTOpx+FIywBm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7
+K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvpr2uKGcfLFFb14dq12fy/czja+eev
+bqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/AgEBMDcGA1UdEgQw
+MC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAzNi0w
+MB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFD
+gBStuyIdxuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0
+b3JpZGFkIGRlIENlcnRpZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xh
+bm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQHEwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0
+cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5hY2lvbmFsIGRlIENlcnRp
+ZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5kZW5jaWEg
+ZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkq
+hkiG9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQD
+AgEGME0GA1UdEQRGMESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0w
+MDAwMDKgGwYFYIZeAgKgEgwQUklGLUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEag
+RKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9sY3IvQ0VSVElGSUNBRE8t
+UkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNyYWl6LnN1c2Nl
+cnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
+Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsG
+AQUFBwIBFh5odHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcN
+AQELBQADggIBACtZ6yKZu4SqT96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS
+1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmNg7+mvTV+LFwxNG9s2/NkAZiqlCxB
+3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4quxtxj7mkoP3Yldmv
+Wb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1n8Gh
+HVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHm
+pHmJWhSnFFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXz
+sOfIt+FTvZLm8wyWuevo5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bE
+qCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq3TNWOByyrYDT13K9mmyZY+gAu0F2Bbdb
+mRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5poLWccret9W6aAjtmcz9
+opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3YeMLEYC/H
+YvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
+-----END CERTIFICATE-----
+mozilla/Certinomis_-_Autorité_Racine.crt
+-----BEGIN CERTIFICATE-----
+MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET
+MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk
+BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4
+Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl
+cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0
+aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY
+F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N
+8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe
+rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K
+/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu
+7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC
+28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6
+lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E
+nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB
+0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09
+5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj
+WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN
+jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
+KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s
+ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM
+OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q
+619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn
+2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj
+o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v
+nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG
+5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq
+pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb
+dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0
+BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5
+-----END CERTIFICATE-----
+mozilla/Security_Communication_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
+MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
+dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
+WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
+VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
+9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
+DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
+Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
+QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
+xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
+A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
+kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
+Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
+Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
+JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
+RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
+-----END CERTIFICATE-----
+mozilla/Izenpe.com.crt
+-----BEGIN CERTIFICATE-----
+MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4
+MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6
+ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD
+VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j
+b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq
+scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO
+xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H
+LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX
+uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD
+yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+
+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q
+rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN
+BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L
+hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB
+QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+
+HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu
+Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg
+QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB
+BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
+MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA
+A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb
+laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56
+awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo
+JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw
+LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT
+VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk
+LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb
+UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/
+QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+
+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls
+QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
+-----END CERTIFICATE-----
+mozilla/AddTrust_Qualified_Certificates_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
+MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
+EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
+BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
+xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
+87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
+2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
+WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
+0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
+A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
+pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
+ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
+aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
+hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
+hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
+dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
+P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
+iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
+xqE=
+-----END CERTIFICATE-----
+mozilla/NetLock_Qualified_=Class_QA=_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
+ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
+b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
+EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
+aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
+MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
+A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
+Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
+dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
+bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
+eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
+r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
+3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
+vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
+mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
+wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
+hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
+TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
+biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
+ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
+dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
+b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
+c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
+ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
+dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
+ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
+bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
+ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
+Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
+ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
+A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
+MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
+NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
+VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
+83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
+macqaJVmlaut74nLYKkGEsaUR+ko
+-----END CERTIFICATE-----
+mozilla/COMODO_ECC_Certification_Authority.crt
+-----BEGIN CERTIFICATE-----
+MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
+MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
+BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
+IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
+MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
+ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
+T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
+FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
+cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
+BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
+fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
+GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
+-----END CERTIFICATE-----
+mozilla/SwissSign_Platinum_CA_-_G2.crt
+-----BEGIN CERTIFICATE-----
+MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
+BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
+IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
+WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
+ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
+IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
+IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
+6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
+jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
+izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
++zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
+zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
+pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
+KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
+ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
+AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
+BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
+ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
+IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
+A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
+uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
+jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
+u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
+YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
+puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
+icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
+DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
+kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
+Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
+-----END CERTIFICATE-----
+mozilla/TC_TrustCenter_Universal_CA_I.crt
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
+BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1
+c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx
+MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg
+R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD
+VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR
+JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T
+fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu
+jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z
+wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ
+fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD
+VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G
+CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1
+7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn
+8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs
+ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
+ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
+2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
+-----END CERTIFICATE-----
+mozilla/Deutsche_Telekom_Root_CA_2.crt
 -----BEGIN CERTIFICATE-----
 MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
 MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
@@ -2575,3 +3380,486 @@ IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
 xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
 Cm26OWMohpLzGITY+9HPBVZkVw==
 -----END CERTIFICATE-----
+mozilla/ComSign_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0
+MRMwEQYDVQQDEwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQG
+EwJJTDAeFw0wNDAzMjQxMTMyMThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMT
+CkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNpZ24xCzAJBgNVBAYTAklMMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49qROR+WCf4C9DklBKK
+8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTyP2Q2
+98CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb
+2CEJKHxNGGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxC
+ejVb7Us6eva1jsz/D3zkYDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7Kpi
+Xd3DTKaCQeQzC6zJMw9kglcq/QytNuEMrkvF7zuZ2SOzW120V+x0cAwqTwIDAQAB
+o4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Zl
+ZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0PAQH/BAQD
+AgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRL
+AZs+VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWd
+foPPbrxHbvUanlR2QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0M
+cXS6hMTXcpuEfDhOZAYnKuGntewImbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq
+8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb/627HOkthIDYIb6FUtnUdLlp
+hbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VGzT2ouvDzuFYk
+Res3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
+AGegcQCCSA==
+-----END CERTIFICATE-----
+mozilla/Staat_der_Nederlanden_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
+TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
+MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
+ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
+ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
+9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
+hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
+tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
+BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
+SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
+OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
+cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
+7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
+/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
+eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
+u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
+7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
+iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
+-----END CERTIFICATE-----
+mozilla/Root_CA_Generalitat_Valenciana.crt
+-----BEGIN CERTIFICATE-----
+MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF
+UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ
+R1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcN
+MDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0G
+A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScw
+JQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+
+WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKj
+SgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl
+u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOy
+A8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxk
+Hl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7
+MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBr
+aS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIIC
+IwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8A
+cgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIA
+YQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQAIABWAGEA
+bABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA
+bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
+aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMA
+aQBvAG4AYQBtAGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQA
+ZQAgAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA
+YwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBuAHQAcgBhACAAZQBuACAAbABhACAA
+ZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAAOgAvAC8AdwB3AHcA
+LgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0dHA6
+Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+y
+eAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw
+CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0G
+A1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVu
+Y2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3Fbcrn
+lD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLt
+b8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg
+9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XF
+ducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmC
+IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
+-----END CERTIFICATE-----
+mozilla/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt
+-----BEGIN CERTIFICATE-----
+MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV
+BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt
+ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4
+MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg
+SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl
+a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi
+MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h
+4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk
+tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s
+tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL
+dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4
+c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um
+TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z
++kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O
+Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW
+OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW
+fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2
+l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw
+FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+
+8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI
+6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO
+TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME
+wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY
+Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn
+xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q
+DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q
+Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t
+hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4
+7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7
+QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
+-----END CERTIFICATE-----
+mozilla/Wells_Fargo_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
+dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
+MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
+KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
+A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
+5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
+SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
+JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
+ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
+AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
+AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
+CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
+b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
+7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
+0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
+nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
+x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
+33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
+-----END CERTIFICATE-----
+mozilla/Hongkong_Post_Root_CA_1.crt
+-----BEGIN CERTIFICATE-----
+MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
+FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
+Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
+A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
+b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
+jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
+PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
+ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
+nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
+q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
+MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
+mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
+7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
+oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
+EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
+fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
+AmvZWg==
+-----END CERTIFICATE-----
+mozilla/GlobalSign_Root_CA_-_R2.crt
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
+MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
+A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
+v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
+eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
+tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
+C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
+zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
+mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
+V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
+bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
+3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
+J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
+291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
+ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
+AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
+TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
+-----END CERTIFICATE-----
+mozilla/Firmaprofesional_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
+IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
+dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
+HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
+IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
+dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
+Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
+rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
+hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
+BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
+iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
+AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
+bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
+MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
+FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
+VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
+u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
+hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
+ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
+QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
+quGnM/b9Sh/22WA=
+-----END CERTIFICATE-----
+mozilla/T-TeleSec_GlobalRoot_Class_3.crt
+-----BEGIN CERTIFICATE-----
+MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx
+KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd
+BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl
+YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1
+OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy
+aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50
+ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN
+8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/
+RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4
+hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5
+ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM
+EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj
+QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1
+A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy
+WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ
+1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30
+6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT
+91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
+e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p
+TpPDpFQUWw==
+-----END CERTIFICATE-----
+mozilla/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.crt
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
+nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
+t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
+SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
+BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
+NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
+BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
+BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
+MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
+p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
+5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
+WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
+4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
+hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
+mozilla/ApplicationCA_-_Japanese_Government.crt
+-----BEGIN CERTIFICATE-----
+MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc
+MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp
+b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT
+AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs
+aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H
+j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K
+f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55
+IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw
+FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht
+QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm
+/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ
+k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ
+MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC
+seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ
+hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+
+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U
+DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj
+B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
+rosot4LKGAfmt1t06SAZf7IbiVQ=
+-----END CERTIFICATE-----
+mozilla/Actalis_Authentication_Root_CA.crt
+-----BEGIN CERTIFICATE-----
+MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE
+BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w
+MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
+IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC
+SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1
+ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB
+MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv
+UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX
+4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9
+KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/
+gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb
+rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ
+51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F
+be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe
+KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F
+v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn
+fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7
+jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz
+ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
+ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL
+e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70
+jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz
+WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V
+SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j
+pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX
+X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok
+fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R
+K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU
+ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU
+LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT
+LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
+-----END CERTIFICATE-----
+mozilla/COMODO_Certification_Authority.crt
+-----BEGIN CERTIFICATE-----
+MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
+MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
+UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
+2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
+Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
+nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
+/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
+PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
+QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
+SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
+IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
+RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
+zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
+BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
+ZQ==
+-----END CERTIFICATE-----
+mozilla/Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.crt
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
+nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
+8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
+ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
+PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
+6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
+n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
+qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
+wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
+ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
+pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
+E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
+-----END CERTIFICATE-----
+mozilla/CNNIC_ROOT.crt
+-----BEGIN CERTIFICATE-----
+MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD
+TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2
+MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF
+Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh
+IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6
+dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO
+V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC
+GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN
+v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB
+AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB
+Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO
+76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK
+OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH
+ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi
+yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL
+buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj
+2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE=
+-----END CERTIFICATE-----
+mozilla/AffirmTrust_Premium_ECC.crt
+-----BEGIN CERTIFICATE-----
+MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
+VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
+cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
+BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
+VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
+0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
+ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
+A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
+aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
+flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
+-----END CERTIFICATE-----
+mozilla/Buypass_Class_2_CA_1.crt
+-----BEGIN CERTIFICATE-----
+MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
+MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
+Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL
+MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
+VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0
+ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX
+l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB
+HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B
+5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3
+WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD
+AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP
+gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+
+DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu
+BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs
+h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk
+LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
+-----END CERTIFICATE-----
+mozilla/Certigna.crt
+-----BEGIN CERTIFICATE-----
+MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV
+BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X
+DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ
+BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4
+QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny
+gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw
+zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q
+130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2
+JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw
+DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw
+ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT
+AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj
+AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG
+9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h
+bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc
+fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu
+HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w
+t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
+WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
+-----END CERTIFICATE-----
+mozilla/Camerfirma_Chambers_of_Commerce_Root.crt
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
+MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
+ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
+b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
+MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
+ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
+IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
+AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
+unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
+BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
+7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
+0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
+roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
+A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
+aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
+26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
+BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
+EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
+BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
+aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
+AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
+p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
+1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
+XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
+eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
+tGWaIZDgqtCYvDi1czyL+Nw=
+-----END CERTIFICATE-----
diff --git a/data/other/dh4096.pem b/data/other/dh4096.pem
new file mode 100644
index 0000000000000000000000000000000000000000..90ef682834262dde0f8335a3e28252aa587eed64
--- /dev/null
+++ b/data/other/dh4096.pem
@@ -0,0 +1,21 @@
+-----BEGIN DH PARAMETERS-----
+MIICCAKCAgEA///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxOb
+IlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjft
+awv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXT
+mmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhgh
+fDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq
+5RXSJhiY+gUQFXKOWoqqxC2tMxcNBFB6M6hVIavfHLpk7PuFBFjb7wqK6nFXXQYM
+fbOXD4Wm4eTHq/WujNsJM9cejJTgSiVhnc7j0iYa0u5r8S/6BtmKCGTYdgJzPshq
+ZFIfKxgXeyAMu+EXV3phXWx3CYjAutlG4gjiT6B05asxQ9tb/OD9EI5LgtEgqSEI
+ARpyPBKnh+bXiHGaEL26WyaZwycYavTiPBqUaDS2FQvaJYPpyirUTOjbu8LbBN6O
++S6O/BQfvsqmKHxZR05rwF2ZspZPoJDDoiM7oYZRW+ftH2EpcM7i16+4G912IXBI
+HNAGkSfVsFqpk7TqmI2P3cGG/7fckKbAj030Nck0BjGZ//////////8CAQI=
+-----END DH PARAMETERS-----
+
+"4096-bit MODP Group" from RFC3526, Section 5.
+
+The prime is: 2^4096 - 2^4032 - 1 + 2^64 * { [2^3966 pi] + 240904 }
+
+RFC3526 specifies a generator of 2.
+
+The generation of the group is described in RFC 2412.
diff --git a/gajim.nsi b/gajim.nsi
index 8bef329f9133b93e022ed7baa15574059d132c21..fa050c518799537b0cea1f4a4eba04a4a598eca3 100644
--- a/gajim.nsi
+++ b/gajim.nsi
@@ -182,8 +182,10 @@ Section "Gajim" SecGajim
 	File "bin\library.zip"
 	File "bin\pangocairo.pyd"
 	File "bin\pango.pyd"
+	File "bin\pycurl.pyd"
 	File "bin\pyexpat.pyd"
 	File "bin\python27.dll"
+	File "bin\pythoncom27.dll"
 	File "bin\pywintypes27.dll"
 	File "bin\OpenSSL.rand.pyd"
 	File "bin\select.pyd"
@@ -194,8 +196,10 @@ Section "Gajim" SecGajim
 	File "bin\win32api.pyd"
 	File "bin\win32file.pyd"
 	File "bin\win32pipe.pyd"
+	File "bin\win32ui.pyd"
 	File "bin\winsound.pyd"
     File "msvcr90.dll"
+	File /r "bin\win32com"
 
 	WriteRegStr HKCU "Software\Gajim" "" $INSTDIR
 	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayName" "Gajim"
@@ -530,6 +534,7 @@ Section "Uninstall"
 	RMDir /r "$INSTDIR\bin\gtk\lib"
 	RMDir /r "$INSTDIR\bin\gtk\share"
 	RMDir "$INSTDIR\bin\gtk"
+	RMDir "$INSTDIR\bin\win32com"
 	Delete "$INSTDIR\bin\_bsddb.pyd"
 	Delete "$INSTDIR\bin\_ctypes.pyd"
 	Delete "$INSTDIR\bin\_hashlib.pyd"
@@ -558,8 +563,10 @@ Section "Uninstall"
 	Delete "$INSTDIR\bin\OpenSSL.SSL.pyd"
 	Delete "$INSTDIR\bin\pango.pyd"
 	Delete "$INSTDIR\bin\pangocairo.pyd"
+	Delete "$INSTDIR\bin\pycurl.pyd"
 	Delete "$INSTDIR\bin\pyexpat.pyd"
 	Delete "$INSTDIR\bin\python27.dll"
+	Delete "$INSTDIR\bin\pythoncom27.dll"
 	Delete "$INSTDIR\bin\pywintypes27.dll"
 	Delete "$INSTDIR\bin\select.pyd"
 	Delete "$INSTDIR\bin\sqlite3.dll"
@@ -568,6 +575,7 @@ Section "Uninstall"
 	Delete "$INSTDIR\bin\win32api.pyd"
 	Delete "$INSTDIR\bin\win32file.pyd"
 	Delete "$INSTDIR\bin\win32pipe.pyd"
+	Delete "$INSTDIR\bin\win32ui.pyd"
 	Delete "$INSTDIR\bin\winsound.pyd"
 	Delete "$INSTDIR\bin\msvcr90.dll"
 	RMDir /r "$INSTDIR\bin"
diff --git a/icons/hicolor/16x16/status/gajim-muc_separator.png b/icons/hicolor/16x16/status/gajim-muc_separator.png
deleted file mode 100644
index f54797c8e98839147e55d954f46b08d25f442aa4..0000000000000000000000000000000000000000
Binary files a/icons/hicolor/16x16/status/gajim-muc_separator.png and /dev/null differ
diff --git a/launch.sh b/launch.sh
index 69c923d7b53f135394010bf7bd551976496aecf8..ad7265660b9ab413c236b5ebc1b0f5a6efda38ae 100755
--- a/launch.sh
+++ b/launch.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 if [ ! $PYTHON ]; then
-       PYTHON="python";
+       PYTHON="python3";
 fi
 cd "$(dirname $0)/src"
 exec $PYTHON -OOt gajim.py "$@"
diff --git a/plugins/acronyms_expander/__init__.py b/plugins/acronyms_expander/__init__.py
index 25280942c4608c821fe3ae68a36d4419dfec1131..6b85dc73587f328ad8d9db5ba5250fbc4a0b8721 100644
--- a/plugins/acronyms_expander/__init__.py
+++ b/plugins/acronyms_expander/__init__.py
@@ -1 +1 @@
-from acronyms_expander import AcronymsExpanderPlugin
+from .acronyms_expander import AcronymsExpanderPlugin
diff --git a/plugins/acronyms_expander/acronyms.py b/plugins/acronyms_expander/acronyms
similarity index 100%
rename from plugins/acronyms_expander/acronyms.py
rename to plugins/acronyms_expander/acronyms
diff --git a/plugins/acronyms_expander/acronyms_expander.py b/plugins/acronyms_expander/acronyms_expander.py
index 153b3784997fa52bd104dc2ca2f23aa8959ab59b..834cc4f9aadabd1a829a2342e04e2e16ad0b820f 100644
--- a/plugins/acronyms_expander/acronyms_expander.py
+++ b/plugins/acronyms_expander/acronyms_expander.py
@@ -26,8 +26,8 @@ Acronyms expander plugin.
 
 import sys
 
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import GObject
 
 from plugins import GajimPlugin
 from plugins.helpers import log, log_calls
@@ -62,7 +62,7 @@ class AcronymsExpanderPlugin(GajimPlugin):
 
     @log_calls('AcronymsExpanderPlugin')
     def get_own_acronyms_list(self):
-        data_file = self.local_file_path('acronyms.py')
+        data_file = self.local_file_path('acronyms')
         data = open(data_file, 'r')
         acronyms = eval(data.read())
         data.close()
@@ -76,7 +76,7 @@ class AcronymsExpanderPlugin(GajimPlugin):
         #assert isinstance(tb,gtk.TextBuffer)
         ACRONYMS = self.config['ACRONYMS']
         INVOKER = self.config['INVOKER']
-        t = tb.get_text(tb.get_start_iter(), tb.get_end_iter())
+        t = tb.get_text(tb.get_start_iter(), tb.get_end_iter(), True)
         #log.debug('%s %d'%(t, len(t)))
         if t and t[-1] == INVOKER:
             #log.debug('changing msg text')
@@ -87,7 +87,7 @@ class AcronymsExpanderPlugin(GajimPlugin):
                 #log.debug('head: %s'%(head))
                 t = ''.join((base, sep, head, INVOKER))
                 #log.debug("setting text: '%s'"%(t))
-                gobject.idle_add(tb.set_text, t)
+                GObject.idle_add(tb.set_text, t)
 
     @log_calls('AcronymsExpanderPlugin')
     def connect_with_chat_control_base(self, chat_control):
diff --git a/plugins/dbus_plugin/plugin.py b/plugins/dbus_plugin/plugin.py
index 43f3840e81823f0ff23218e70f3947d65c660609..a3dcae62e790287abdf0ab9403a6b03ca4de2c14 100644
--- a/plugins/dbus_plugin/plugin.py
+++ b/plugins/dbus_plugin/plugin.py
@@ -407,7 +407,7 @@ if dbus_support.supported:
                     return DBUS_DICT_SV()
                 jid = self._get_real_jid(jid)
 
-                cached_vcard = gajim.connections.values()[0].get_cached_vcard(jid)
+                cached_vcard = list(gajim.connections.values())[0].get_cached_vcard(jid)
                 if cached_vcard:
                     return get_dbus_struct(cached_vcard)
 
@@ -428,7 +428,7 @@ if dbus_support.supported:
             def account_info(self, account):
                 '''show info on account: resource, jid, nick, prio, message'''
                 result = DBUS_DICT_SS()
-                if gajim.connections.has_key(account):
+                if account in gajim.connections:
                     # account is valid
                     con = gajim.connections[account]
                     index = con.connected
@@ -508,7 +508,7 @@ if dbus_support.supported:
             def prefs_store(self):
                 try:
                     gajim.interface.save_config()
-                except Exception, e:
+                except Exception:
                     return DBUS_BOOLEAN(False)
                 return DBUS_BOOLEAN(True)
 
diff --git a/po/he.po b/po/he.po
index 35213b1a0247848b9fdfc4a686f81a4579b51df5..ec9daa729043ddd27a51d59d1db0ab9c3e3d1851 100644
--- a/po/he.po
+++ b/po/he.po
@@ -1,15 +1,14 @@
 # Hebrew translations for gajim
-# Copyright (C) Copyright © 2003-2013 Gajim Team
+# Copyright (C) Copyright © 2003-2012 Gajim Team
 # This file is distributed under the same license as the gajim package.
-# Darlan <xmpp:israeli@failar.nu>, 2012 - 2013.
-# Isratine Citizen <genghiskhan@gmx.ca>, 2012 - 2013.
+# Darlan <xmpp:israeli@failar.nu>, 2012.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: gajim 0.15\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-08-30 14:12+0300\n"
-"PO-Revision-Date: 2013-08-30 14:13+0200\n"
+"POT-Creation-Date: 2012-11-15 14:27+0400\n"
+"PO-Revision-Date: 2012-12-09 10:07+0200\n"
 "Last-Translator: Isratine Citizen <genghiskhan@gmx.ca>\n"
 "Language-Team: Rahut\n"
 "Language: he\n"
@@ -22,7 +21,7 @@ msgstr ""
 #: ../data/gui/account_context_menu.ui.h:1
 #: ../data/gui/zeroconf_context_menu.ui.h:1
 msgid "_Status"
-msgstr "_מצב חיבור"
+msgstr "_מצב־חיבור"
 
 #: ../data/gui/account_context_menu.ui.h:2
 msgid "_Personal Events"
@@ -30,7 +29,7 @@ msgstr "_אירועים אישיים"
 
 #: ../data/gui/account_context_menu.ui.h:3 ../data/gui/roster_window.ui.h:3
 msgid "_Start Chat..."
-msgstr "התחלת _שיחה..."
+msgstr "התחל _שיחה..."
 
 # הצטרפות אך/ל
 # שיחה מרובת משתתפים
@@ -42,7 +41,7 @@ msgstr "שיחת _קבוצה..."
 
 #: ../data/gui/account_context_menu.ui.h:5
 msgid "_Add Contact..."
-msgstr "הוספת _איש קשר..."
+msgstr "הוסף _איש קשר..."
 
 # איתור
 #: ../data/gui/account_context_menu.ui.h:6 ../data/gui/roster_window.ui.h:7
@@ -51,7 +50,7 @@ msgstr "מצא _שירותים"
 
 #: ../data/gui/account_context_menu.ui.h:7
 msgid "_Execute Command..."
-msgstr "הרצת _פקודה..."
+msgstr "הרץ _פקודה..."
 
 #: ../data/gui/account_context_menu.ui.h:8
 msgid "_Open Gmail Inbox"
@@ -73,17 +72,22 @@ msgstr ""
 "יש צורך בחשבון בכדי להתחבר\n"
 "אל רשת התקשורת Jabber."
 
+# בו אני רוצה לעשות
 #: ../data/gui/account_creation_wizard_window.ui.h:4
 msgid "I already have an account I want to _use"
-msgstr "כבר קיים ברשותי _חשבון אשר ברצוני לעשות בו שימוש"
+msgstr "כבר קיים ברשותי _חשבון שברצוני לעשות שימוש בו"
 
+# I want to _register a new account
+# אני רוצה _לרשום חשבון חדש
+# I want to _register for a new account
+# אני רוצה _להירשם לחשבון חדש
 #: ../data/gui/account_creation_wizard_window.ui.h:5
 msgid "I want to _register for a new account"
 msgstr "ברצוני ל_רשום חשבון חדש"
 
 #: ../data/gui/account_creation_wizard_window.ui.h:6
 msgid "<b>Please choose one of the options below:</b>"
-msgstr "<b>אנא בחר באחת מתוך האפשרויות מטה:</b>"
+msgstr "<b>נא לבחור באחת מן האפשרויות מטה:</b>"
 
 # credentials
 #: ../data/gui/account_creation_wizard_window.ui.h:7
@@ -102,6 +106,11 @@ msgid "Save pass_word"
 msgstr "שמו_ר סיסמה"
 
 # BUG: a dot at the end
+# From: Clipman
+# If checked, this option allows to store one image inside the history
+# במידה והמשבצת/והאפשרות מסומנת
+# במידה ומשבצת/ואפשרות זו מסומנת
+# בבוחרך באפשרות זו, Wicd
 #: ../data/gui/account_creation_wizard_window.ui.h:10
 #: ../data/gui/accounts_window.ui.h:21
 msgid "If checked, Gajim will remember the password for this account"
@@ -110,7 +119,7 @@ msgstr "במידה ואפשרות זו מסומנת, Gajim יזכור את הס
 #: ../data/gui/account_creation_wizard_window.ui.h:11
 #: ../data/gui/accounts_window.ui.h:23
 msgid "_Jabber ID:"
-msgstr "מזהה _Jabber:"
+msgstr "‫_JID:"
 
 #: ../data/gui/account_creation_wizard_window.ui.h:12
 msgid "Anon_ymous authentication"
@@ -118,7 +127,7 @@ msgstr "אימות _אלמוני"
 
 #: ../data/gui/account_creation_wizard_window.ui.h:13
 msgid "<b>Please select a server</b>"
-msgstr "<b>אנא בחר שרת</b>"
+msgstr "<b>נא לבחור שרת</b>"
 
 #: ../data/gui/account_creation_wizard_window.ui.h:14
 #: ../data/gui/manage_bookmarks_window.ui.h:3
@@ -132,7 +141,7 @@ msgstr "_פרוקסי:"
 # BUG: _underline
 #: ../data/gui/account_creation_wizard_window.ui.h:16
 msgid "Manage..."
-msgstr "  ניהול...  "
+msgstr "  נהל...  "
 
 # BUG: _underline
 #: ../data/gui/account_creation_wizard_window.ui.h:17
@@ -152,6 +161,8 @@ msgstr "_פורט:"
 msgid "_Advanced"
 msgstr "_מתקדם"
 
+# הוספת אישור זה לרשימת האישורים המהימנים.\n
+# טביעת אצבע (מסוג) SHA1 של האישור:\n
 #: ../data/gui/account_creation_wizard_window.ui.h:21
 msgid ""
 "Add this certificate to the list of trusted certificates.\n"
@@ -168,11 +179,12 @@ msgid ""
 msgstr ""
 "<b>מתחבר כעת אל שרת</b>\n"
 "\n"
-"אנא המתן..."
+"נא להמתין..."
 
+# מיידית לאחר ש
 #: ../data/gui/account_creation_wizard_window.ui.h:27
 msgid "Connect when I press Finish"
-msgstr "התחבר כאשר אני אלחץ על סיים"
+msgstr "התחבר מיידית כאשר אני אלחץ על סיום"
 
 #: ../data/gui/account_creation_wizard_window.ui.h:28
 msgid "Set my profile when I connect"
@@ -180,17 +192,30 @@ msgstr "הגדר את הדיוקן שלי בעת התחברותי"
 
 #: ../data/gui/account_creation_wizard_window.ui.h:29
 msgid "_Finish"
-msgstr "_סיים"
+msgstr "_סיום"
 
 #: ../data/gui/account_creation_wizard_window.ui.h:30
-#: ../data/gui/accounts_window.ui.h:1 ../data/gui/change_mood_dialog.ui.h:1
-#: ../src/config.py:1253 ../src/config.py:1267 ../src/config.py:1272
-#: ../src/config.py:1320 ../src/config.py:1423 ../src/config.py:1742
-#: ../src/config.py:1747 ../src/config.py:2339 ../src/config.py:2420
-#: ../src/config.py:2435 ../src/config.py:3716 ../src/config.py:3791
-#: ../src/dialogs.py:315 ../src/dialogs.py:317 ../src/dialogs.py:523
-#: ../src/dialogs.py:536 ../src/roster_window.py:3147
-#: ../src/roster_window.py:3153 ../src/roster_window.py:3158
+#: ../data/gui/accounts_window.ui.h:1
+#: ../data/gui/change_mood_dialog.ui.h:1
+#: ../src/config.py:1254
+#: ../src/config.py:1268
+#: ../src/config.py:1273
+#: ../src/config.py:1321
+#: ../src/config.py:1424
+#: ../src/config.py:1739
+#: ../src/config.py:1744
+#: ../src/config.py:2320
+#: ../src/config.py:2399
+#: ../src/config.py:2412
+#: ../src/config.py:3698
+#: ../src/config.py:3773
+#: ../src/dialogs.py:313
+#: ../src/dialogs.py:315
+#: ../src/dialogs.py:521
+#: ../src/dialogs.py:534
+#: ../src/roster_window.py:3214
+#: ../src/roster_window.py:3220
+#: ../src/roster_window.py:3225
 msgid "None"
 msgstr "ללא"
 
@@ -199,19 +224,22 @@ msgid "Accounts"
 msgstr "חשבונות"
 
 #. Change label for accept_button to action name instead of 'OK'.
-#: ../data/gui/accounts_window.ui.h:3 ../src/dialogs.py:3524
-#: ../src/dialogs.py:3570
+#: ../data/gui/accounts_window.ui.h:3
+#: ../src/dialogs.py:3426
+#: ../src/dialogs.py:3472
 msgid "Add"
-msgstr "הוסף"
+msgstr "הוספה"
 
 #. Change label for accept_button to action name instead of 'OK'.
-#: ../data/gui/accounts_window.ui.h:4 ../src/dialogs.py:3528
-#: ../src/dialogs.py:3625
+#: ../data/gui/accounts_window.ui.h:4
+#: ../src/dialogs.py:3430
+#: ../src/dialogs.py:3527
 msgid "Delete"
-msgstr "מחק"
+msgstr "מחיקה"
 
 #. Rename
-#: ../data/gui/accounts_window.ui.h:5 ../src/roster_window.py:5792
+#: ../data/gui/accounts_window.ui.h:5
+#: ../src/roster_window.py:5844
 msgid "Re_name"
 msgstr "_שנה שם"
 
@@ -220,9 +248,10 @@ msgstr "_שנה שם"
 msgid "_Enable"
 msgstr "א_פשר"
 
+# אימות אלמוני
 #: ../data/gui/accounts_window.ui.h:7
 msgid "Anonymous authentication"
-msgstr "אימות אלמוני"
+msgstr "התאמתות אלמונית"
 
 #: ../data/gui/accounts_window.ui.h:8
 msgid ""
@@ -260,6 +289,7 @@ msgstr "לחץ בכדי לבקש הרשאות עבור כל אנשי קשר של
 msgid "Chan_ge Password"
 msgstr "ש_נה סיסמה"
 
+# Omitted: Click to
 #: ../data/gui/accounts_window.ui.h:13
 msgid "Click to change account's password"
 msgstr "שנה סיסמת חשבון"
@@ -272,22 +302,17 @@ msgstr "פעולות הנהלת מערכת"
 # BUG: from a jabber "the"
 # שני לקוחות ומעלה
 #: ../data/gui/accounts_window.ui.h:15
-msgid ""
-"Priority is used in Jabber to determine who gets the events from the jabber "
-"server when two or more clients are connected using the same account; The "
-"client with the highest priority gets the events"
-msgstr ""
-"עדיפת משמשת את Jabber כדי לקבוע מי מקבל את האירועים מתוך שרת jabber כאשר שני "
-"לקוחות או יותר מחוברים באמצעות אותו החשבון; הלקוח בעל העדיפות הגבוהה ביותר "
-"יקבל את האירועים"
+msgid "Priority is used in Jabber to determine who gets the events from the jabber server when two or more clients are connected using the same account; The client with the highest priority gets the events"
+msgstr "עדיפת משמשת אצל Jabber כדי לקבוע מי מקבל את האירועים מן שרת jabber כאשר שני לקוחות או יותר מחוברים באמצעות אותו החשבון; הלקוח בעל העדיפות הגבוהה ביותר יקבל את האירועים"
 
 #: ../data/gui/accounts_window.ui.h:16
 msgid "A_djust to status"
-msgstr "_התאם אל מצב חיבור"
+msgstr "_התאם למצב־חיבור"
 
+# תשונה
 #: ../data/gui/accounts_window.ui.h:17
 msgid "Priority will change automatically according to your status."
-msgstr "העדיפות תשתנה אוטומטית בהתאם אל מצב החיבור שלך."
+msgstr "העדיפות תשתנה אוטומטית בהתאם למצב־חיבורך."
 
 #: ../data/gui/accounts_window.ui.h:18
 msgid "Priori_ty:"
@@ -318,12 +343,13 @@ msgstr "תעודת לקוח"
 msgid "Account"
 msgstr "חשבון"
 
+# אתחול
 #: ../data/gui/accounts_window.ui.h:29
 msgid "C_onnect on Gajim startup"
 msgstr "התחבר בעת ה_פעלת Gajim"
 
 # BUG: a dot at the end
-# כאשר משוגר
+# כאשר ישוגר
 #: ../data/gui/accounts_window.ui.h:30
 msgid ""
 "If checked, Gajim, when launched, will automatically connect to jabber using "
@@ -333,17 +359,20 @@ msgstr ""
 "חשבון זה"
 
 # BUG: _underline
+# במידה והחיבור
 #: ../data/gui/accounts_window.ui.h:31
 msgid "Auto-reconnect when connection is lost"
 msgstr "התחבר אוטומטית כאשר החיבור אובד"
 
+# יו_מני שיחות
 #: ../data/gui/accounts_window.ui.h:32
 msgid "Save conversation _logs for all contacts"
 msgstr "שמור רשו_מות שיחה עבור כל אנשי קשר"
 
+# כוללני
 #: ../data/gui/accounts_window.ui.h:33
 msgid "Synch_ronize account status with global status"
-msgstr "סנכרן מצב חשבון עם מצב חיבור _גלובלי"
+msgstr "סנכרן מצב חשבון עם מצב־חיבור _גלובלי"
 
 # BUG: a dot at the end
 # תיבת אפשרויות
@@ -352,37 +381,32 @@ msgstr "סנכרן מצב חשבון עם מצב חיבור _גלובלי"
 # תיבת קומבינה (קומבינציה)
 # תיבת שיח
 #: ../data/gui/accounts_window.ui.h:34
-msgid ""
-"If checked, any change to the global status (handled by the combobox at the "
-"bottom of the roster window) will change the status of this account "
-"accordingly"
-msgstr ""
-"במידה ואפשרות זו מסומנת, כל שינוי אל מצב החיבור הגלובלי (מטופל על ידי תיבת "
-"הבחירה שמצויה בתחתית חלון הרשימה) ישנה את המצב של חשבון זה בהתאמה"
+msgid "If checked, any change to the global status (handled by the combobox at the bottom of the roster window) will change the status of this account accordingly"
+msgstr "במידה ואפשרות זו מסומנת, כל שינוי אל מצב־החיבור הגלובלי (מטופל על ידי תיבת־הבחירה שמצויה בתחתית חלון הרשימה) ישנה את המצב של חשבון זה בהתאמה"
 
 # BUG: _underline
 #: ../data/gui/accounts_window.ui.h:35
 msgid "Use file transfer proxies"
 msgstr "השתמש במתווכי העברת קובץ"
 
+# שיהיו סיכויים גדולים יותר להעברת קובץ לעבוד
 #: ../data/gui/accounts_window.ui.h:36
-msgid ""
-"If checked, Gajim will also broadcast some more IPs except from just your "
-"IP, so file transfer has higher chances of working."
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim ישדר, בנוסף לכתובת פרוטוקול המרשתת (IP; ‏"
-"Internet Protocol) שלך, מספר כתובות IP נוספות, כך שלפעולת העברת קובץ יהיו "
-"סיכויים גדולים יותר לעבוד."
+msgid "If checked, Gajim will also broadcast some more IPs except from just your IP, so file transfer has higher chances of working."
+msgstr "במידה ואפשרות זו מסומנת, Gajim ישדר, בנוסף לכתובת פרוטוקול המרשתת (IP) שלך, מספר כתובות IP נוספות, כך שלהעברת קובץ יהיו סיכויים גדולים יותר לעבוד."
 
-# (קבוצה כללית)
+# אכן, זוהי קבוצה כללית.  נא לא להפוך זאת באופן שרירותי ל"רישום" כללי או לכל מילה אחר שלא קשורה אל התוכנית
 #. FIXME: Ugly workaround.
 #. FIXME: Ugly workaround.
 #. Maybe we haven't been in any group (defaults to General)
 #. General group cannot be changed
-#: ../data/gui/accounts_window.ui.h:37 ../data/gui/preferences_window.ui.h:41
-#: ../src/common/contacts.py:135 ../src/dialogs.py:115 ../src/dialogs.py:127
-#: ../src/roster_window.py:3089 ../src/roster_window.py:4215
-#: ../src/roster_window.py:5842
+#: ../data/gui/accounts_window.ui.h:37
+#: ../data/gui/preferences_window.ui.h:46
+#: ../src/common/contacts.py:135
+#: ../src/dialogs.py:113
+#: ../src/dialogs.py:125
+#: ../src/roster_window.py:3156
+#: ../src/roster_window.py:4284
+#: ../src/roster_window.py:5894
 msgid "General"
 msgstr "כללית"
 
@@ -390,9 +414,10 @@ msgstr "כללית"
 msgid "_use HTTP__PROXY environment variable"
 msgstr "השתמש במשת_ני סביבת HTTP__PROXY"
 
-#: ../data/gui/accounts_window.ui.h:39 ../data/gui/preferences_window.ui.h:134
+#: ../data/gui/accounts_window.ui.h:39
+#: ../data/gui/preferences_window.ui.h:137
 msgid "_Manage..."
-msgstr "  ניהו_ל...  "
+msgstr "  נה_ל...  "
 
 #: ../data/gui/accounts_window.ui.h:40
 msgid "<b>Proxy</b>"
@@ -400,7 +425,7 @@ msgstr "<b>פרוקסי</b>"
 
 #: ../data/gui/accounts_window.ui.h:41
 msgid "_Warn before using an insecure connection"
-msgstr "ה_זהר אותי טרם שימוש בחיבור לא מאובטח"
+msgstr "ה_זהר אותי לפני שימוש בחיבור לא מאובטח"
 
 #: ../data/gui/accounts_window.ui.h:42
 msgid ""
@@ -410,6 +435,7 @@ msgstr ""
 "סמן את אפשרות זו כדי ש־Gajim ישאל אותך טרם שליחת סיסמתך על פני חיבור לא "
 "מאובטח."
 
+# חבילות נתונים מסוג
 #: ../data/gui/accounts_window.ui.h:43
 msgid "Send _keep-alive packets"
 msgstr "ש_לח חבילות keep-alive"
@@ -423,6 +449,7 @@ msgstr ""
 "במידה ואפשרות זו מסומנת, Gajim ישלח חבילות keep-alive כדי למנוע פקיעת זמן של "
 "חיבור (connection timeout) המביאה לידי ניתוק"
 
+# התאמה של שם
 #: ../data/gui/accounts_window.ui.h:45
 msgid "Use cust_om hostname/port"
 msgstr "השתמש בשם מארח\\פורט מו_תאמים"
@@ -436,7 +463,8 @@ msgstr "שם מ_ארח: "
 msgid "_Port: "
 msgstr "_פורט: "
 
-#: ../data/gui/accounts_window.ui.h:48 ../data/gui/preferences_window.ui.h:138
+#: ../data/gui/accounts_window.ui.h:48
+#: ../data/gui/preferences_window.ui.h:141
 msgid "<b>Miscellaneous</b>"
 msgstr "<b>שונות</b>"
 
@@ -444,8 +472,9 @@ msgstr "<b>שונות</b>"
 msgid "Connection"
 msgstr "חיבור"
 
-#: ../data/gui/accounts_window.ui.h:50 ../src/config.py:1840
-#: ../src/config.py:2436
+#: ../data/gui/accounts_window.ui.h:50
+#: ../src/config.py:1835
+#: ../src/config.py:2413
 msgid "No key selected"
 msgstr "לא נבחר מפתח"
 
@@ -460,16 +489,16 @@ msgstr "השתמש בסוכן G_PG"
 # BUG: a dot at the end
 #: ../data/gui/accounts_window.ui.h:53
 msgid "If checked, Gajim will get the password from a GPG agent like seahorse"
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim יאחזר את הסיסמה מתוך סוכן GPG כגון seahorse"
+msgstr "במידה ואפשרות זו מסומנת, Gajim יאחזר את הסיסמה מן סוכן GPG כגון seahorse"
 
+# OpenPGP
 #: ../data/gui/accounts_window.ui.h:54
 msgid "<b>OpenPGP</b>"
-msgstr "<b>‏OpenPGP</b>"
+msgstr "‫<b>OpenPGP</b>"
 
 #: ../data/gui/accounts_window.ui.h:55
 msgid "_Edit Personal Information..."
-msgstr "_עריכת מידע אישי..."
+msgstr "_ערוך מידע אישי..."
 
 #: ../data/gui/accounts_window.ui.h:56
 msgid "Information about you, as stored in the server"
@@ -489,7 +518,7 @@ msgstr "התחבר בעת ה_פעלת Gajim"
 
 #: ../data/gui/accounts_window.ui.h:60
 msgid "Synchroni_ze account status with global status"
-msgstr "סנכרן מצב חשבון עם מצב חיבור _גלובלי"
+msgstr "סנכרן מצב חשבון עם מצב־חיבור _גלובלי"
 
 #: ../data/gui/accounts_window.ui.h:61
 msgid "Use cust_om port:"
@@ -502,9 +531,8 @@ msgid ""
 "setup you can select another one here.\n"
 "You might consider to change possible firewall settings."
 msgstr ""
-"במידה והפורט המשתמט שמצוי בשימוש עבור הודעות נכנסות איננו מתאים עבור התקנתך "
-"באפשרותך לבחור פורט אחר כאן.\n"
-"ייתכן כי יהיה ברצונך לשקול לשנות הגדרות חומת אש אפשריות."
+"במידה והפורט המשתמט שמצוי בשימוש עבור הודעות נכנסות איננו מתאים עבור התקנתך ביכולתך לבחור פורטאחר כאן.\n"
+"ייתכן שיהיה ברצונך לשקול לשנות הגדרות חומת־אש אפשריות."
 
 #: ../data/gui/accounts_window.ui.h:64
 #: ../data/gui/zeroconf_information_window.ui.h:10
@@ -516,20 +544,25 @@ msgstr "שם פרטי:"
 msgid "Last Name:"
 msgstr "שם משפחה:"
 
+# ×´
+# "
+# דוא\"ל:
+# דוא״ל:
 #: ../data/gui/accounts_window.ui.h:66
 #: ../data/gui/zeroconf_information_window.ui.h:8
 msgid "E-Mail:"
 msgstr "דוא״ל:"
 
 #: ../data/gui/accounts_window.ui.h:67
-#: ../data/gui/zeroconf_information_window.ui.h:7 ../src/config.py:1867
-#: ../src/dialogs.py:841
+#: ../data/gui/zeroconf_information_window.ui.h:7
+#: ../src/config.py:1862
+#: ../src/dialogs.py:839
 msgid "Jabber ID:"
-msgstr "מזהה Jabber:"
+msgstr "‫JID:"
 
 #: ../data/gui/accounts_window.ui.h:68
 msgid "Mer_ge accounts"
-msgstr "מזג _חשבונות"
+msgstr "מיזוג _חשבונות"
 
 #: ../data/gui/add_new_contact_window.ui.h:1
 msgid "Add New Contact"
@@ -543,9 +576,10 @@ msgstr "_חשבון:"
 msgid "_Protocol:"
 msgstr "_פרוטוקול:"
 
+# זהות
 #: ../data/gui/add_new_contact_window.ui.h:4
 msgid "_User ID:"
-msgstr "מזהה _משתמש:"
+msgstr "‫ID _משתמש:"
 
 #: ../data/gui/add_new_contact_window.ui.h:5
 #: ../data/gui/manage_bookmarks_window.ui.h:5
@@ -574,10 +608,10 @@ msgid ""
 "protocol. Click on register button to\n"
 "proceed."
 msgstr ""
-"עליך להירשם באמצעות מוביל זה\n"
-"כדי שתהיה באפשרותך להוסיף איש\n"
-"קשר מתוך פרוטוקול זה. הקלק על\n"
-"לחצן רישום כדי להמשיך."
+"נרשמת באמצעות מוביל זה\n"
+"כדי שתהיה ביכולתך להוסיף איש קשר\n"
+"מפרוטוקול זה. נא להקיש על לחצן\n"
+"הרשמה כדי להמשיך."
 
 #: ../data/gui/add_new_contact_window.ui.h:13
 msgid "_Register"
@@ -590,20 +624,22 @@ msgid ""
 "to add a contact from this protocol."
 msgstr ""
 "עליך להתחבר אל מוביל בכדי שתעמוד לרשותך\n"
-"האפשרות להוסיף איש קשר מתוך פרוטוקול זה."
+"היכולת להוסיף איש קשר מן פרוטוקול זה."
 
-#: ../data/gui/add_new_contact_window.ui.h:16 ../src/common/helpers.py:1366
+#: ../data/gui/add_new_contact_window.ui.h:16
+#: ../src/common/helpers.py:1363
 msgid "I would like to add you to my contact list."
 msgstr "ברצוני להוסיפך אל רשימת הקשר שלי."
 
 #. displaying the window
-#: ../data/gui/adhoc_commands_window.ui.h:1 ../src/adhoc_commands.py:104
+#: ../data/gui/adhoc_commands_window.ui.h:1
+#: ../src/adhoc_commands.py:102
 msgid "Ad-hoc Commands - Gajim"
 msgstr "פקודות ייעודיות (‫Ad-hoc) - ‫Gajim"
 
 #: ../data/gui/adhoc_commands_window.ui.h:2
 msgid "Please wait while retrieving command list..."
-msgstr "אנא המתן בעת אחזרת רשימת פקודה..."
+msgstr "נא להמתין בעת אחזרת רשימת פקודות..."
 
 #: ../data/gui/adhoc_commands_window.ui.h:3
 msgid "<b>Choose command to execute:</b>"
@@ -613,13 +649,14 @@ msgstr "<b>בחר פקודה להרצה:</b>"
 msgid "Check once more"
 msgstr "בדוק פעם נוספת"
 
+# "Please wait while the command is sending..." has been turned to "Please wait while the command is being sent..."
 #: ../data/gui/adhoc_commands_window.ui.h:5
-msgid "Please wait while the command is being sent..."
-msgstr "אנא המתן בזמן שהפקודה נשלחת..."
+msgid "Please wait while the command is sending..."
+msgstr "נא להמתין בזמן שהפקודה נשלחת..."
 
 #: ../data/gui/adhoc_commands_window.ui.h:6
 msgid "Please wait..."
-msgstr "אנא המתן..."
+msgstr "נא להמתין..."
 
 # BUG: commands or command
 #: ../data/gui/adhoc_commands_window.ui.h:7
@@ -628,7 +665,7 @@ msgstr "ישות jabber זו לא חושפת שום פקודה."
 
 #: ../data/gui/adhoc_commands_window.ui.h:8
 msgid "<b>An error has occurred:</b>"
-msgstr "<b>אירעה שגיאה:</b>"
+msgstr "<b>ארעה שגיאה:</b>"
 
 #: ../data/gui/adhoc_commands_window.ui.h:9
 msgid "Error description..."
@@ -636,7 +673,7 @@ msgstr "תיאור שגיאה..."
 
 #: ../data/gui/adhoc_commands_window.ui.h:10
 msgid "F_inish"
-msgstr "_סיים"
+msgstr "_סיום"
 
 #: ../data/gui/advanced_configuration_window.ui.h:1
 msgid "Advanced Configuration Editor"
@@ -651,6 +688,7 @@ msgstr "סינון:"
 msgid "<b>Description</b>"
 msgstr "<b>תיאור</b>"
 
+# יש צורך לאתחל
 #: ../data/gui/advanced_configuration_window.ui.h:4
 msgid "<b>NOTE:</b> You should restart Gajim for some settings to take effect"
 msgstr "<b>הערה:</b> עליך לאתחל את Gajim כדי שהגדרות מסוימות ייכנסו לתוקף"
@@ -663,13 +701,15 @@ msgstr "_אפס אל ברירת מחדל"
 msgid "Show _XML Console"
 msgstr "הצג _מסוף XML"
 
+# management of archives
+# נא למצוא תרגום מוצלח יותר
 #: ../data/gui/advanced_menuitem_menu.ui.h:2
 msgid "Edit Archi_ving Preferences"
 msgstr "ערוך העדפות _ארכיונאות"
 
 #: ../data/gui/advanced_menuitem_menu.ui.h:3
 msgid "Edit _Privacy Lists..."
-msgstr "עריכת _רשימות פרטיות..."
+msgstr "ערוך _רשימות פרטיות..."
 
 # Administration
 #: ../data/gui/advanced_menuitem_menu.ui.h:4
@@ -678,7 +718,7 @@ msgstr "ה_נהלה"
 
 #: ../data/gui/advanced_menuitem_menu.ui.h:5
 msgid "_Send Server Message..."
-msgstr "_שליחת הודעת שרת..."
+msgstr "_שלח הודעת שרת..."
 
 #: ../data/gui/advanced_menuitem_menu.ui.h:6
 msgid "Sends a message to users currently connected to this server"
@@ -690,7 +730,7 @@ msgstr "הגדרת הודעת היום (Message of the Day)"
 
 #: ../data/gui/advanced_menuitem_menu.ui.h:8
 msgid "Set MOTD..."
-msgstr "הגדרת MOTD..."
+msgstr "הגדר MOTD..."
 
 #: ../data/gui/advanced_menuitem_menu.ui.h:9
 msgid "Updates Message of the Day"
@@ -698,12 +738,13 @@ msgstr "עדכון הודעת היום (Message of the Day)"
 
 #: ../data/gui/advanced_menuitem_menu.ui.h:10
 msgid "Update MOTD..."
-msgstr "עדכון MOTD..."
+msgstr "עדכן MOTD..."
 
 #: ../data/gui/advanced_menuitem_menu.ui.h:11
 msgid "Delete MOTD"
 msgstr "מחק MOTD"
 
+# הודעה יומית
 #: ../data/gui/advanced_menuitem_menu.ui.h:12
 msgid "Deletes Message of the Day"
 msgstr "מחיקת הודעת היום (Message of the Day)"
@@ -726,6 +767,7 @@ msgstr "העדף"
 msgid "Concede"
 msgstr "וותר"
 
+# אסירה
 #: ../data/gui/archiving_preferences_window.ui.h:5
 msgid "Forbid"
 msgstr "אסור"
@@ -777,10 +819,12 @@ msgstr "אנשי קשר חסומים"
 
 #: ../data/gui/blocked_contacts_window.ui.h:2
 #: ../data/gui/contact_context_menu.ui.h:20
-#: ../data/gui/gc_occupants_menu.ui.h:14 ../src/roster_window.py:5811
-#: ../src/roster_window.py:5938 ../src/roster_window.py:6071
+#: ../data/gui/gc_occupants_menu.ui.h:14
+#: ../src/roster_window.py:5863
+#: ../src/roster_window.py:5990
+#: ../src/roster_window.py:6123
 msgid "_Unblock"
-msgstr "_בטל חסימה"
+msgstr "_ביטול חסימה"
 
 #: ../data/gui/change_activity_dialog.ui.h:1
 msgid "Set Activity"
@@ -810,14 +854,14 @@ msgstr "שנה סיסמה"
 msgid "Enter new password:"
 msgstr "הזן סיסמה חדשה:"
 
+# לשם
 #: ../data/gui/change_password_dialog.ui.h:3
 msgid "Enter it again for confirmation:"
-msgstr "הזן את הסיסמה, פעם נוספת, לשם אימות:"
+msgstr "הזן את הסיסמה, פעם נוספת, לאימות:"
 
-# ערוך מראש
 #: ../data/gui/change_status_message_dialog.ui.h:1
 msgid "Save as Preset..."
-msgstr "שמירה כמצב מותאם..."
+msgstr "שמירה כמצב ערוך מראש..."
 
 #: ../data/gui/change_status_message_dialog.ui.h:2
 msgid "Mood:"
@@ -827,17 +871,19 @@ msgstr "מצב רוח:"
 msgid "Activity:"
 msgstr "פעילות:"
 
+# מוכנות מראש
 #: ../data/gui/change_status_message_dialog.ui.h:4
 msgid "Preset messages:"
-msgstr "הודעות מותאמות:"
+msgstr "הודעות שמורות:"
 
 #: ../data/gui/change_status_message_dialog.ui.h:5
 msgid "<b>Type your new status message</b>"
 msgstr "<b>הקלד הודעת מצב חדשה</b>"
 
+# Changed: Location to Destination
 #: ../data/gui/chat_context_menu.ui.h:1
 msgid "_Copy Link Location"
-msgstr "ה_עתק כתובת מיקום"
+msgstr "ה_עתק כתובת יעד"
 
 #: ../data/gui/chat_context_menu.ui.h:2
 msgid "_Open Link in Browser"
@@ -864,88 +910,116 @@ msgstr "הצטרף אל שיחת _קבוצה"
 #: ../data/gui/chat_context_menu.ui.h:7
 #: ../data/gui/contact_context_menu.ui.h:24
 msgid "_Add to Roster..."
-msgstr "הו_ספה אל רשימה..."
+msgstr "הו_סף אל הרשימה..."
 
 #: ../data/gui/chat_control.ui.h:1 ../data/gui/groupchat_control.ui.h:1
 msgid "Show a list of emoticons (Alt+M)"
 msgstr "הצגת רשימת רגשונים (Alt+M)"
 
 #: ../data/gui/chat_control.ui.h:2
-msgid "Add this contact to roster (Ctrl+D)"
-msgstr "הוספת איש קשר זה לרשימה (Ctrl+D)"
+#: ../data/gui/groupchat_control.ui.h:2
+msgid "Show a list of formattings"
+msgstr "הצגת רשימת עיצובים"
 
 #: ../data/gui/chat_control.ui.h:3
+msgid "Add this contact to roster (Ctrl+D)"
+msgstr "הוספת איש קשר זה אל הרשימה (Ctrl+D)"
+
+#. change tooltip text for audio and video buttons if python-farstream is
+#. not installed
+#: ../data/gui/chat_control.ui.h:4
+#: ../src/chat_control.py:1724
+#: ../src/command_system/implementation/standard.py:214
+msgid "Toggle audio session"
+msgstr "הפעלת סשן שמע"
+
+#: ../data/gui/chat_control.ui.h:5
+#: ../src/chat_control.py:1725
+#: ../src/command_system/implementation/standard.py:224
+msgid "Toggle video session"
+msgstr "הפעלת סשן וידאו"
+
+#: ../data/gui/chat_control.ui.h:6
 msgid "Invite contacts to the conversation (Ctrl+G)"
 msgstr "הזמנת אנשי קשר אל הדיון (Ctrl+G)"
 
-#: ../data/gui/chat_control.ui.h:4
-msgid "View contact information (Ctrl+I)"
-msgstr "צפייה במידע איש קשר (Ctrl+I)"
+#: ../data/gui/chat_control.ui.h:7
+msgid "Show the contact's profile (Ctrl+I)"
+msgstr "הצגת דיוקן איש קשר (Ctrl+I)"
 
-#: ../data/gui/chat_control.ui.h:5 ../data/gui/groupchat_control.ui.h:6
+#: ../data/gui/chat_control.ui.h:8
+#: ../data/gui/groupchat_control.ui.h:6
 msgid "Browse the chat history (Ctrl+H)"
 msgstr "עיון בהיסטוריית השיחה (Ctrl+H)"
 
-#: ../data/gui/chat_control.ui.h:6 ../data/gui/groupchat_control.ui.h:7
-msgid "Show advanced functions (Alt+D)"
-msgstr "הצגת פקדים מתקדמים (Alt+D)"
+# תפקודיות
+#: ../data/gui/chat_control.ui.h:9
+#: ../data/gui/groupchat_control.ui.h:7
+msgid "Show a menu of advanced functions (Alt+D)"
+msgstr "הצגת תפריט פקדים מתקדמים (Alt+D)"
 
-#: ../data/gui/chat_control.ui.h:7
+#: ../data/gui/chat_control.ui.h:10
 msgid "#"
 msgstr ""
 
-#: ../data/gui/chat_control.ui.h:8 ../data/gui/groupchat_control.ui.h:8
-#: ../data/gui/single_message_window.ui.h:6
-msgid "Send message"
-msgstr "שליחת הודעה"
-
 #. Make sure the character after "_" is not M/m (conflicts with Alt+M that is supposed to show the Emoticon Selector)
-#: ../data/gui/chat_control.ui.h:10 ../data/gui/groupchat_control.ui.h:10
-#: ../data/gui/xml_console_window.ui.h:15 ../src/filetransfers_window.py:322
+#: ../data/gui/chat_control.ui.h:12
+#: ../data/gui/groupchat_control.ui.h:9
+#: ../data/gui/xml_console_window.ui.h:15
+#: ../src/filetransfers_window.py:322
 msgid "_Send"
 msgstr "_שלח"
 
-#: ../data/gui/chat_control.ui.h:11
+#: ../data/gui/chat_control.ui.h:13
 msgid "1"
 msgstr ""
 
-#: ../data/gui/chat_control.ui.h:12
+#: ../data/gui/chat_control.ui.h:14
+#, fuzzy
 msgid "2"
-msgstr ""
+msgstr "2 (דהו)"
 
-#: ../data/gui/chat_control.ui.h:13
+#: ../data/gui/chat_control.ui.h:15
+#, fuzzy
 msgid "3"
-msgstr ""
+msgstr "3 (אבג)"
 
-#: ../data/gui/chat_control.ui.h:14
+#: ../data/gui/chat_control.ui.h:16
+#, fuzzy
 msgid "4"
-msgstr ""
+msgstr "4 (מנ)"
 
-#: ../data/gui/chat_control.ui.h:15
+#: ../data/gui/chat_control.ui.h:17
+#, fuzzy
 msgid "5"
-msgstr ""
+msgstr "5 (יכל)"
 
-#: ../data/gui/chat_control.ui.h:16
+#: ../data/gui/chat_control.ui.h:18
+#, fuzzy
 msgid "6"
-msgstr ""
+msgstr "6 (זחט)"
 
-#: ../data/gui/chat_control.ui.h:17
+#: ../data/gui/chat_control.ui.h:19
+#, fuzzy
 msgid "7"
-msgstr ""
+msgstr "7 (רשת)"
 
-#: ../data/gui/chat_control.ui.h:18
+#: ../data/gui/chat_control.ui.h:20
+#, fuzzy
 msgid "8"
-msgstr ""
+msgstr "8 (צק)"
 
-#: ../data/gui/chat_control.ui.h:19
+#: ../data/gui/chat_control.ui.h:21
+#, fuzzy
 msgid "9"
-msgstr ""
+msgstr "9 (סעפ)"
 
-#: ../data/gui/chat_control.ui.h:20
+#: ../data/gui/chat_control.ui.h:22
 msgid "*"
 msgstr ""
 
-#: ../data/gui/chat_control.ui.h:21 ../data/gui/single_message_window.ui.h:3
+#: ../data/gui/chat_control.ui.h:23
+#: ../data/gui/single_message_window.ui.h:3
 msgid "0"
 msgstr ""
 
@@ -979,17 +1053,18 @@ msgstr "התחל _שיחה"
 
 #: ../data/gui/contact_context_menu.ui.h:2 ../data/gui/roster_window.ui.h:4
 msgid "Send Single _Message..."
-msgstr "שליחת הודעה _בודדת..."
+msgstr "שלח הודעה _בודדת..."
 
 #: ../data/gui/contact_context_menu.ui.h:3
 msgid "Send _File..."
-msgstr "שליחת _קובץ..."
+msgstr "שלח _קובץ..."
 
 #. Invite to
 #. Invite to Groupchat
 #: ../data/gui/contact_context_menu.ui.h:4
-#: ../data/gui/gc_occupants_menu.ui.h:11 ../src/roster_window.py:5747
-#: ../src/roster_window.py:5906
+#: ../data/gui/gc_occupants_menu.ui.h:11
+#: ../src/roster_window.py:5799
+#: ../src/roster_window.py:5958
 msgid "In_vite to"
 msgstr "ה_זמן אל"
 
@@ -999,21 +1074,25 @@ msgstr "הזמן _אנשי קשר"
 
 #: ../data/gui/contact_context_menu.ui.h:6
 msgid "Toggle Open_PGP Encryption"
-msgstr "הפעל הצפנת Open_PGP"
+msgstr "הפעלת הצפנת Open_PGP"
 
 # BUG: No _underline
+# I need another word for Toggle
+# [ x ] Activate
+# קצה אל קצה
 #: ../data/gui/contact_context_menu.ui.h:7
 msgid "Toggle End to End Encryption"
-msgstr "הפעל הצפנת קצה אל קצה"
+msgstr "הפעלת הצפנת E2E"
 
-#: ../data/gui/contact_context_menu.ui.h:8 ../src/roster_window.py:5757
-#: ../src/roster_window.py:5995
+#: ../data/gui/contact_context_menu.ui.h:8
+#: ../src/roster_window.py:5809
+#: ../src/roster_window.py:6047
 msgid "Send Cus_tom Status"
-msgstr "שלח מצב חיבור מו_תאם"
+msgstr "שלח מצב־חיבור מו_תאם"
 
 #: ../data/gui/contact_context_menu.ui.h:9
 msgid "E_xecute Command..."
-msgstr "הרצת _פקודה..."
+msgstr "הרץ _פקודה..."
 
 #: ../data/gui/contact_context_menu.ui.h:10
 msgid "M_anage Contact"
@@ -1021,49 +1100,55 @@ msgstr "_נהל איש קשר"
 
 #: ../data/gui/contact_context_menu.ui.h:11
 msgid "_Rename..."
-msgstr "_שינוי שם..."
+msgstr "_שנה שם..."
 
 #: ../data/gui/contact_context_menu.ui.h:12
 msgid "Edit _Groups..."
-msgstr "עריכת _קבוצות..."
+msgstr "ערוך _קבוצות..."
 
 #: ../data/gui/contact_context_menu.ui.h:13
 msgid "Assign Open_PGP Key..."
-msgstr "הקצאת מפתח Open_PGP..."
+msgstr "הקצה מפתח Open_PGP..."
 
 #: ../data/gui/contact_context_menu.ui.h:14
 msgid "Set Custom _Avatar..."
-msgstr "הגדרת _אווטאר מותאם..."
+msgstr "הגדר _אווטאר מותאם..."
 
 #: ../data/gui/contact_context_menu.ui.h:15
 msgid "Add Special _Notification..."
-msgstr "הוספת ה_תראה מיוחדת..."
+msgstr "הוסף ה_תראה מיוחדת..."
 
 #: ../data/gui/contact_context_menu.ui.h:16
 msgid "_Subscription"
 msgstr "ה_רשמה"
 
+# Changed to: Allow this contact to view my status
+# לאיש קשר זה
 #: ../data/gui/contact_context_menu.ui.h:17
-msgid "_Allow contact to see my status"
-msgstr "הת_ר לאיש קשר לראות את המצב שלי"
+msgid "_Allow him/her to see my status"
+msgstr "_התר לאיש קשר זה לראות את מצב־חיבורי"
 
+# לראות
+# שלה/שלו
 #: ../data/gui/contact_context_menu.ui.h:18
-msgid "A_sk to see contact status"
-msgstr "_בקש להציג מצב איש קשר"
+msgid "A_sk to see his/her status"
+msgstr "_בקש להציג את מצב־החיבור של איש קשר זה"
 
 #: ../data/gui/contact_context_menu.ui.h:19
-msgid "_Forbid contact to see my status"
-msgstr "_מנע מאיש קשר מלראות את המצב שלי"
+msgid "_Forbid him/her to see my status"
+msgstr "_מנע מאיש קשר זה מלראות את מצב־חיבורי"
 
 #: ../data/gui/contact_context_menu.ui.h:21
-#: ../data/gui/gc_occupants_menu.ui.h:13 ../src/roster_window.py:5819
-#: ../src/roster_window.py:5944 ../src/roster_window.py:6074
+#: ../data/gui/gc_occupants_menu.ui.h:13
+#: ../src/roster_window.py:5871
+#: ../src/roster_window.py:5996
+#: ../src/roster_window.py:6126
 msgid "_Block"
 msgstr "_חסום"
 
 #: ../data/gui/contact_context_menu.ui.h:22
 msgid "_Unignore"
-msgstr "_בטל התעלמות"
+msgstr "_אי־התעלמות"
 
 #: ../data/gui/contact_context_menu.ui.h:23
 msgid "_Ignore"
@@ -1075,8 +1160,9 @@ msgstr "הס_ר"
 
 #: ../data/gui/contact_context_menu.ui.h:26
 #: ../data/gui/gc_control_popup_menu.ui.h:9
-#: ../data/gui/gc_occupants_menu.ui.h:15 ../data/gui/roster_window.ui.h:19
-#: ../src/roster_window.py:6145
+#: ../data/gui/gc_occupants_menu.ui.h:15
+#: ../data/gui/roster_window.ui.h:19
+#: ../src/roster_window.py:6197
 msgid "_History"
 msgstr "_היסטוריה"
 
@@ -1084,14 +1170,16 @@ msgstr "_היסטוריה"
 msgid "Room Configuration"
 msgstr "תצורת חדר"
 
+# טופס
 #: ../data/gui/data_form_window.ui.h:2
 msgid "Fill in the form."
-msgstr "מלא את הטופס."
+msgstr "נא למלא את התבנית."
 
 #: ../data/gui/edit_groups_dialog.ui.h:1
 msgid "Edit Groups"
 msgstr "עריכת קבוצות"
 
+# סשן E
 #: ../data/gui/esession_info_window.ui.h:1
 msgid "(<b>ESession</b> info)"
 msgstr "(מידע <b>ESession</b>)"
@@ -1106,7 +1194,7 @@ msgstr "תכונות"
 
 #: ../data/gui/features_window.ui.h:2
 msgid "<b>List of possible features in Gajim:</b>"
-msgstr "<b>רשימה של תכונות אפשריות בתוך Gajim:</b>"
+msgstr "<b>רשימה של תכונות אפשריות אצל Gajim:</b>"
 
 #: ../data/gui/filetransfers.ui.h:1
 msgid "File Transfers"
@@ -1135,19 +1223,15 @@ msgstr "הצג התראה מוקפצת כאשר העברת קובץ הושלמה
 
 #: ../data/gui/filetransfers.ui.h:7
 msgid "Removes completed, cancelled and failed file transfers from the list"
-msgstr "הסרת העברות קבצים שלמות, מבוטלות וכושלות מתוך הרשימה"
+msgstr "הסרת העברות קבצים שלמות, מבוטלות וכושלות מן הרשימה"
 
 #: ../data/gui/filetransfers.ui.h:8
 msgid "Remove file transfer from the list."
-msgstr "הסר העברת קובץ מתוך הרשימה."
+msgstr "הסר העברת קובץ מן הרשימה."
 
 #: ../data/gui/filetransfers.ui.h:9
-msgid ""
-"This action removes single file transfer from the list. If the transfer is "
-"active, it is first stopped and then removed"
-msgstr ""
-"פעולה זו מסירה העברת קובץ בודדת מתוך הרשימה. במידה וההעברה פעילה, היא תיעצר "
-"תחילה ולאחר מכן היא תוסר"
+msgid "This action removes single file transfer from the list. If the transfer is active, it is first stopped and then removed"
+msgstr "פעולה זו מסירה העברת קובץ בודדת מן הרשימה. במידה וההעברה פעילה, ראשית היא תיעצר ולאחר מכן היא תוסר"
 
 #: ../data/gui/filetransfers.ui.h:10
 msgid "Clean _up"
@@ -1157,8 +1241,9 @@ msgstr "_נקה"
 msgid "_Pause"
 msgstr "ה_שהה"
 
+# Changed to: Cancels the selected file transfer and removes incomplete files (notice the letter s for plural in the second "file")
 #: ../data/gui/filetransfers.ui.h:12
-msgid "Cancels the selected file transfer and removes incomplete files"
+msgid "Cancels the selected file transfer and removes incomplete file"
 msgstr "ביטול העברת הקובץ הנבחר והסרת קבצים לא שלמים"
 
 #: ../data/gui/filetransfers.ui.h:13
@@ -1169,6 +1254,7 @@ msgstr "ביטול העברת קובץ"
 msgid "Cancels the selected file transfer"
 msgstr "ביטול העברת קובץ הנבחרת"
 
+# Hide window
 #: ../data/gui/filetransfers.ui.h:15
 msgid "Hides the window"
 msgstr "הסתרת החלון"
@@ -1177,10 +1263,11 @@ msgstr "הסתרת החלון"
 msgid "_Continue"
 msgstr "ה_משך"
 
-#: ../data/gui/filetransfers.ui.h:17 ../src/chat_control.py:3351
+#: ../data/gui/filetransfers.ui.h:17
+#: ../src/chat_control.py:3256
 #: ../src/filetransfers_window.py:213
 msgid "_Open Containing Folder"
-msgstr "_פתח תיקיה מכילה"
+msgstr "_פתיחת תיקיה מכילה"
 
 #: ../data/gui/gajim_themes_window.ui.h:1
 msgid "Account row"
@@ -1218,17 +1305,19 @@ msgstr "_גופן תמליל:"
 msgid "Font style:"
 msgstr "סגנון גופן:"
 
-#: ../data/gui/gajim_themes_window.ui.h:10 ../src/chat_control.py:1045
+#: ../data/gui/gajim_themes_window.ui.h:10
+#: ../src/chat_control.py:1049
 msgid "Bold"
-msgstr "מובלט"
+msgstr "מודגש"
 
-#: ../data/gui/gajim_themes_window.ui.h:11 ../src/chat_control.py:1046
+#: ../data/gui/gajim_themes_window.ui.h:11
+#: ../src/chat_control.py:1050
 msgid "Italic"
 msgstr "נטוי"
 
 #: ../data/gui/gajim_themes_window.ui.h:12
 msgid "Paused"
-msgstr "השהיה"
+msgstr "הופסקה"
 
 #: ../data/gui/gajim_themes_window.ui.h:13
 msgid "Composing"
@@ -1241,11 +1330,12 @@ msgstr "לא פעיל"
 # Chat-state?
 #: ../data/gui/gajim_themes_window.ui.h:15
 msgid "<b>Chatstate Tab Colors</b>"
-msgstr "<b>צבעי כרטיסייה מצב שיחה</b>"
+msgstr "<b>צבעי לשונית מצב שיחה</b>"
 
+# נעזב
 #: ../data/gui/gajim_themes_window.ui.h:16
 msgid "Gone"
-msgstr "נטישה"
+msgstr "עזוב"
 
 #: ../data/gui/gajim_themes_window.ui.h:17
 msgid ""
@@ -1265,7 +1355,7 @@ msgstr ""
 
 #: ../data/gui/gc_control_popup_menu.ui.h:1
 msgid "Change _Nickname..."
-msgstr "שינוי שם _כינוי..."
+msgstr "שנה שם _כינוי..."
 
 #: ../data/gui/gc_control_popup_menu.ui.h:2
 msgid "_Manage Room"
@@ -1273,11 +1363,11 @@ msgstr "נהל _חדר"
 
 #: ../data/gui/gc_control_popup_menu.ui.h:3
 msgid "Change _Subject..."
-msgstr "שינוי _נושא..."
+msgstr "שנה _נושא..."
 
 #: ../data/gui/gc_control_popup_menu.ui.h:4
 msgid "Configure _Room..."
-msgstr "ה_גדרת חדר..."
+msgstr "ה_גדר חדר..."
 
 #: ../data/gui/gc_control_popup_menu.ui.h:5
 msgid "_Destroy Room"
@@ -1287,11 +1377,16 @@ msgstr "ה_חרב חדר"
 msgid "_Minimize on close"
 msgstr "_מזער בעת סגירה"
 
+# שליחת בקשה ל
+# השמעת קולי
+# השמעתי
+# להתבטא
 #: ../data/gui/gc_control_popup_menu.ui.h:7
 msgid "_Request Voice"
-msgstr "_בקש ביטוי"
+msgstr "_בקש/י שקולך ישמע"
 
-#: ../data/gui/gc_control_popup_menu.ui.h:8 ../src/disco.py:1843
+#: ../data/gui/gc_control_popup_menu.ui.h:8
+#: ../src/disco.py:1799
 msgid "_Bookmark"
 msgstr "_סמן"
 
@@ -1303,13 +1398,16 @@ msgstr "_שלח הודעה פרטית"
 msgid "Send _File"
 msgstr "שלח _קובץ"
 
+# Other word for Occupant (please)
+# FOUND! Attendee
 #: ../data/gui/gc_occupants_menu.ui.h:3
 msgid "Occupant Actions"
 msgstr "פעולות נוכח"
 
+# _קול
 #: ../data/gui/gc_occupants_menu.ui.h:4
 msgid "_Voice"
-msgstr "ה_שמע"
+msgstr "ה_שמעה"
 
 #: ../data/gui/gc_occupants_menu.ui.h:5
 msgid "Mo_derator"
@@ -1329,28 +1427,26 @@ msgstr "_בעלים"
 
 #: ../data/gui/gc_occupants_menu.ui.h:9
 msgid "_Kick"
-msgstr "ב_עט"
+msgstr "ב_עיטה"
 
+# א_סירה
 #: ../data/gui/gc_occupants_menu.ui.h:10
 msgid "_Ban"
-msgstr "א_סור"
+msgstr "ח_סימה"
 
 #: ../data/gui/gc_occupants_menu.ui.h:12
 msgid "_Add to Roster"
-msgstr "הו_סף אל רשימה"
-
-#: ../data/gui/groupchat_control.ui.h:2 ../src/chat_control.py:1723
-msgid "Show a list of formattings"
-msgstr "הצגת רשימת עיצובים"
+msgstr "הו_ספה אל הרשימה"
 
 #: ../data/gui/groupchat_control.ui.h:3
 msgid "Change your nickname (Ctrl+N)"
-msgstr "שינוי שם כינוי (Ctrl+N)"
+msgstr "שינוי שם כינוייך (Ctrl+N)"
 
 #: ../data/gui/groupchat_control.ui.h:4
 msgid "Change the room's subject (Alt+T)"
 msgstr "שינוי הנושא של חדר זה (Alt+T)"
 
+# הוספת חדר זה אל הסימניות
 #: ../data/gui/groupchat_control.ui.h:5
 msgid "Bookmark this room (Ctrl+B)"
 msgstr "סימון חדר זה (Ctrl+B)"
@@ -1378,7 +1474,6 @@ msgid "<big><b>Welcome to Gajim History Logs Manager</b></big>"
 msgstr "<big><b>ברוך בואך אל מנהל רשומות ההיסטוריה של Gajim</b></big>"
 
 # BUG: or is better than and/or
-# אינו מהווה כלי לשם/לצורך צפיה
 #: ../data/gui/history_manager.ui.h:3
 msgid ""
 "This log manager is not intended for log viewing. If you are looking for "
@@ -1387,12 +1482,11 @@ msgid ""
 "Use this program to delete or export logs. You can select logs from the left "
 "and/or search database from below."
 msgstr ""
-"מנהל רשומות זה אינו מיועד לצורך צפייה ברשומות. אם רצונך בתפקודיות שכזו, "
-"לרשותך עומד חלון ההיסטוריה במקום.\n"
+"מנהל רשומות זה אינו מיועד עבור צפיה ברשומות. אם רצונך בתפקודיות שכזו, לרשותך עומד חלון ההיסטוריה במקום.\n"
 "\n"
-"באפשרותך לעשות שימוש בתוכנית זו למחיקה ו/או לייצוא רשומות. באפשרותך לבחור "
-"רשומות מימין ו/או לחפש בתוך מסד הנתונים למטה."
+"באפשרותך לעשות שימוש בתוכנית זו למחיקה או לייצוא רשומות. ביכולתך לבחור רשומות מימין ו/או לחפש במסד הנתונים למטה."
 
+# BUG: הפסקה צרה יותר מן המקורי
 #: ../data/gui/history_manager.ui.h:6
 msgid ""
 "<b>WARNING:</b>\n"
@@ -1400,16 +1494,15 @@ msgid ""
 "Generally avoid deletions with contacts you currently chat with."
 msgstr ""
 "<b>אזהרה:</b>\n"
-"אם בכוונתך לבצע מחיקה בקנה מידה גדול, אנא ודא כי Gajim אינו מורץ. באופן כללי "
-"מוטב להימנע ממחיקות עם אנשי קשר אשר משוחחים עמך כעת."
+"אם בכוונתך לבצע מחיקה בקנה מידה גדול, נא לוודא שהיישום Gajim אינו מורץ. באופן כללי מוטב להימנע ממחיקות עם אנשי קשר שמשוחחים עמך כעת."
 
 #: ../data/gui/history_manager.ui.h:8
 msgid "_Search Database"
-msgstr "_חפש בתוך מסד נתונים"
+msgstr "_חיפוש במסד נתונים"
 
 #: ../data/gui/history_manager.ui.h:9
 msgid "Export"
-msgstr "יצא"
+msgstr "יצוא"
 
 #: ../data/gui/history_window.ui.h:1
 msgid "Enter JID or Contact name"
@@ -1423,7 +1516,8 @@ msgstr "היסטוריות שיחת קבוצה"
 msgid "All Chat Histories"
 msgstr "כל היסטוריות שיחה"
 
-#: ../data/gui/history_window.ui.h:4 ../src/history_window.py:326
+#: ../data/gui/history_window.ui.h:4
+#: ../src/history_window.py:324
 msgid "Conversation History"
 msgstr "היסטוריית שיחה"
 
@@ -1431,29 +1525,27 @@ msgstr "היסטוריית שיחה"
 msgid "Search:"
 msgstr "חיפוש:"
 
-# יום _נבחר
 #: ../data/gui/history_window.ui.h:6
 msgid "_In date search"
-msgstr "חפש בתוך _תאריך"
+msgstr "חיפוש _בתאריך"
 
 #: ../data/gui/history_window.ui.h:7
-msgid "Searching only in the selected day "
-msgstr "חיפוש בתוך היום הנבחר בלבד"
+msgid "searching only in the selected day "
+msgstr "חיפוש ביום הנבחר בלבד"
 
 #: ../data/gui/history_window.ui.h:8
 #: ../data/gui/zeroconf_information_window.ui.h:5
 msgid "_Log conversation history"
 msgstr "_רשום היסטוריית שיחה"
 
-#: ../data/gui/history_window.ui.h:9
-msgid "_Show status changes"
-msgstr "הצג _הודעות מצב"
-
+# פג, נפקע
 #: ../data/gui/item_archiving_preferences_window.ui.h:1
+#, fuzzy
 msgid "expire"
-msgstr "פוקעת"
+msgstr "פגה"
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:2
+#, fuzzy
 msgid "save"
 msgstr "שמור"
 
@@ -1463,55 +1555,74 @@ msgstr ""
 
 # gajim-remote
 #: ../data/gui/item_archiving_preferences_window.ui.h:4
-#: ../src/gajim-remote.py:230
+#: ../src/gajim-remote.py:229
 msgid "jid"
 msgstr ""
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:5
+#, fuzzy
 msgid "body"
 msgstr "גוף"
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:6
+#, fuzzy
 msgid "false"
-msgstr "שווא"
+msgstr "false"
 
+# gajim-remote
 #: ../data/gui/item_archiving_preferences_window.ui.h:7
+#: ../src/gajim-remote.py:110
+#: ../src/gajim-remote.py:133
+#: ../src/gajim-remote.py:144
+#: ../src/gajim-remote.py:158
+#: ../src/gajim-remote.py:169
+#: ../src/gajim-remote.py:282
+#, fuzzy
 msgid "message"
 msgstr "הודעה"
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:8
+#, fuzzy
 msgid "stream"
 msgstr "זרם"
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:9
+#, fuzzy
 msgid "approve"
 msgstr "אשר"
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:10
+#, fuzzy
 msgid "concede"
 msgstr "וותר"
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:11
+#, fuzzy
 msgid "forbid"
 msgstr "אסור"
 
 # להימנע
 # conflict?
 #: ../data/gui/item_archiving_preferences_window.ui.h:12
+#, fuzzy
 msgid "oppose"
 msgstr "התנגד"
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:13
+#, fuzzy
 msgid "prefer"
 msgstr "העדף"
 
+# נדרש
 #: ../data/gui/item_archiving_preferences_window.ui.h:14
+#, fuzzy
 msgid "require"
 msgstr "דרוש"
 
-#: ../data/gui/join_groupchat_window.ui.h:1 ../src/dialogs.py:2416
+#: ../data/gui/join_groupchat_window.ui.h:1
+#: ../src/dialogs.py:2372
 msgid "Join Group Chat"
-msgstr "הצטרף אל שיחת קבוצה"
+msgstr "הצטרפות אל שיחת קבוצה"
 
 #: ../data/gui/join_groupchat_window.ui.h:2
 msgid "Room:"
@@ -1532,15 +1643,18 @@ msgstr "אחרונים:"
 msgid "Password:"
 msgstr "סיסמה:"
 
+# כאשר אני מתחבר
 #: ../data/gui/join_groupchat_window.ui.h:6
 msgid "Join this room _automatically when I connect"
 msgstr "הצטרף אל חדר זה באופן _אוטומטי בעת התחברותי"
 
+# Translated to: Create a bookmark for this room
 #: ../data/gui/join_groupchat_window.ui.h:8
 msgid "_Bookmark this room"
 msgstr "_סמן את חדר זה"
 
-#: ../data/gui/join_groupchat_window.ui.h:9 ../src/config.py:1857
+#: ../data/gui/join_groupchat_window.ui.h:9
+#: ../src/config.py:1852
 msgid "Server:"
 msgstr "שרת:"
 
@@ -1548,8 +1662,10 @@ msgstr "שרת:"
 msgid "Bro_wse Rooms"
 msgstr "_עיון ברשימת חדרים"
 
-#: ../data/gui/join_groupchat_window.ui.h:11 ../src/chat_control.py:3386
-#: ../src/disco.py:1396 ../src/disco.py:1847
+#: ../data/gui/join_groupchat_window.ui.h:11
+#: ../src/chat_control.py:3291
+#: ../src/disco.py:1360
+#: ../src/disco.py:1803
 msgid "_Join"
 msgstr "_כנס"
 
@@ -1572,7 +1688,7 @@ msgstr "ה_דפס מצב:"
 
 #: ../data/gui/manage_bookmarks_window.ui.h:8
 msgid "A_uto join"
-msgstr "ה_צטרף אוטומטית"
+msgstr "ה_צטרפות אוטומטית"
 
 # BUG: a dot at the end
 # אתחול
@@ -1606,7 +1722,7 @@ msgstr ""
 
 #: ../data/gui/manage_proxies_window.ui.h:4
 msgid "Manage Proxy Profiles"
-msgstr "ניהול דיוקני Proxy"
+msgstr "ניהול דיוקני פרוקסי"
 
 #: ../data/gui/manage_proxies_window.ui.h:5
 msgid "_Type:"
@@ -1622,16 +1738,16 @@ msgstr "<b>מאפיינים</b>"
 
 #: ../data/gui/manage_proxies_window.ui.h:8
 msgid "Use HTTP prox_y"
-msgstr "השתמש בציר _HTTP"
+msgstr "השתמש במתווך _HTTP"
 
 # כתובת _BOSH:
 #: ../data/gui/manage_proxies_window.ui.h:9
 msgid "_BOSH URL:"
-msgstr "‏_BOSH URL:"
+msgstr "‫_BOSH URL:"
 
 #: ../data/gui/manage_proxies_window.ui.h:10
 msgid "Use proxy auth_entication"
-msgstr "השתמש באימות _ציר"
+msgstr "השתמש באימות מ_תווך"
 
 #: ../data/gui/manage_proxies_window.ui.h:11
 msgid "_Username:"
@@ -1643,26 +1759,22 @@ msgstr "ס_יסמה:"
 
 #: ../data/gui/manage_proxies_window.ui.h:13
 msgid "Proxy _Host:"
-msgstr "מ_ארח ציר:"
+msgstr "מ_ארח מתווך:"
 
 #: ../data/gui/manage_proxies_window.ui.h:14
 msgid "Proxy _Port:"
-msgstr "פו_רט ציר:"
+msgstr "פו_רט מתווך:"
 
 #: ../data/gui/manage_proxies_window.ui.h:15
 msgid "<b>Settings</b>"
 msgstr "<b>הגדרות</b>"
 
-#: ../data/gui/manage_sounds_window.ui.h:1
-msgid "Manage sounds"
-msgstr "ניהול צלילים"
-
 # צירוף־מעבר
 # משפט/צירוף
 # אישור/מעבר/מפתח
 #: ../data/gui/passphrase_dialog.ui.h:1
 msgid "Passphrase"
-msgstr "מימרת סיסמה"
+msgstr "מימרת־סיסמה"
 
 #: ../data/gui/plugins_window.ui.h:1
 msgid "Plugins"
@@ -1670,8 +1782,9 @@ msgstr "תוספות"
 
 #: ../data/gui/plugins_window.ui.h:2
 msgid "Install from zip"
-msgstr "התקן מתוך ארכיון zip"
+msgstr "התקנה מתוך ארכיון zip"
 
+# ריק מתוכן
 #: ../data/gui/plugins_window.ui.h:3
 msgid "&lt;empty&gt;"
 msgstr "&lt;ריק&gt;"
@@ -1701,6 +1814,7 @@ msgstr "כתובת עמוד בית"
 msgid "Description:"
 msgstr "תיאור:"
 
+# אי־התקנה
 #: ../data/gui/plugins_window.ui.h:10
 msgid "Uninstall"
 msgstr "הסרה"
@@ -1723,7 +1837,7 @@ msgstr ""
 
 #: ../data/gui/popup_notification_window.ui.h:1
 msgid "Event Type"
-msgstr "טיפוס אירוע"
+msgstr "סוג אירוע"
 
 #: ../data/gui/popup_notification_window.ui.h:2
 msgid "Event desc"
@@ -1731,12 +1845,13 @@ msgstr "תיאור אירוע"
 
 #: ../data/gui/preferences_window.ui.h:1
 msgid "Use default applications"
-msgstr "השתמש ביישומים משתמטים"
+msgstr "שימוש ביישומים משתמטים"
 
 #: ../data/gui/preferences_window.ui.h:2
 msgid "Custom"
 msgstr "מותאם"
 
+# In any/every chat state
 #: ../data/gui/preferences_window.ui.h:3
 msgid "All chat states"
 msgstr "בכל מצב שיחה"
@@ -1745,8 +1860,10 @@ msgstr "בכל מצב שיחה"
 msgid "Composing only"
 msgstr "הלחנה בלבד"
 
-#: ../data/gui/preferences_window.ui.h:5 ../src/config.py:164
-#: ../src/config.py:677
+# (ההעדפה) מנוטרלת
+#: ../data/gui/preferences_window.ui.h:5
+#: ../src/config.py:173
+#: ../src/config.py:689
 msgid "Disabled"
 msgstr "מנוטרלת"
 
@@ -1762,6 +1879,7 @@ msgstr "רק כאשר קיימים אירועים ממתינים"
 msgid "Always"
 msgstr "תמיד"
 
+# הקפץ זאת
 #: ../data/gui/preferences_window.ui.h:9
 msgid "Pop it up"
 msgstr "הצג התראה מוקפצת"
@@ -1786,6 +1904,7 @@ msgstr "רשימה מנותקת עם שיחה יחידה"
 msgid "Single window for everything"
 msgstr "חלון בודד עבור כל החלונות"
 
+# ניתוק רשימה
 #: ../data/gui/preferences_window.ui.h:15
 msgid "Detached roster with chat grouped by account"
 msgstr "רשימה מנותקת עם שיחות מאוגדות לפי חשבון"
@@ -1809,12 +1928,8 @@ msgstr "הצג _אווטארים של אנשי קשר ברשימה"
 
 # BUG: a dot at the end
 #: ../data/gui/preferences_window.ui.h:20
-msgid ""
-"If checked, Gajim will display avatars of contacts in roster window and in "
-"group chats"
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim יציג אווטארים של אנשי קשר בחלון הרשימה ובתוך "
-"שיחות קבוצה"
+msgid "If checked, Gajim will display avatars of contacts in roster window and in group chats"
+msgstr "במידה ואפשרות זו מסומנת, Gajim יציג אווטארים של אנשי קשר בחלון הרשימה ובשיחות קבוצה"
 
 #: ../data/gui/preferences_window.ui.h:21
 msgid "Display status _messages of contacts in roster"
@@ -1823,16 +1938,13 @@ msgstr "הצג הו_דעות מצב של אנשי קשר ברשימה"
 # BUG: a dot at the end
 # BUG: under [the] contact - remove "the"
 #: ../data/gui/preferences_window.ui.h:22
-msgid ""
-"If checked, Gajim will display status messages of contacts under the contact "
-"name in roster window and in group chats"
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim יציג את הודעות המצב של אנשי קשר תחת שם איש "
-"קשר בתוך חלון הרשימה וגם בתוך שיחות קבוצה"
+msgid "If checked, Gajim will display status messages of contacts under the contact name in roster window and in group chats"
+msgstr "במידה ואפשרות זו מסומנת, Gajim יציג את הודעות המצב של אנשי קשר תחת שם איש קשר בחלון הרשימה ובשיחות קבוצה"
 
+# מ_צבי הרוח
 #: ../data/gui/preferences_window.ui.h:23
-msgid "Display e_xtra information of contacts in roster (mood, activity, ...)"
-msgstr "הצג _מידע נוסף של אנשי קשר ברשימה (מצב רוח, פעילות, ...)"
+msgid "Display m_ood of contacts in roster"
+msgstr "הצג מצ_בי רוח של אנשי קשר ברשימה"
 
 # BUG: a dot at the end
 #: ../data/gui/preferences_window.ui.h:24
@@ -1841,245 +1953,248 @@ msgid ""
 msgstr ""
 "במידה ואפשרות זו מסומנת, Gajim יציג את מצבי הרוח של אנשי קשר בחלון הרשימה"
 
+# Changed "activity" with "activities"
+# שברשימה
 #: ../data/gui/preferences_window.ui.h:25
-msgid "Sort contacts by status"
-msgstr "מיין אנשי קשר לפי מצב חיבור"
+msgid "Display _activity of contacts in roster"
+msgstr "הצג _פעילויות של אנשי קשר ברשימה"
 
+# BUG: a dot at the end
 #: ../data/gui/preferences_window.ui.h:26
-msgid "in _roster"
-msgstr "בתוך _רשימה"
+msgid "If checked, Gajim will display the activity of contacts in the roster window"
+msgstr "במידה ואפשרות זו מסומנת, Gajim יציג את הפעילויות של אנשי קשר בחלון הרשימה"
 
+# נעימות, לחן, מנגינה
 #: ../data/gui/preferences_window.ui.h:27
-msgid "in _group chats"
-msgstr "בתוך _שיחות קבוצה"
+msgid "Display _tunes of contacts in roster"
+msgstr "הצג לח_נים של אנשי קשר ברשימה"
 
+# BUG: a dot at the end
 #: ../data/gui/preferences_window.ui.h:28
-msgid "<b>Roster Appearance</b>"
-msgstr "<b>הופעת רשימה</b>"
+msgid "If checked, Gajim will display the tunes of contacts in the roster window"
+msgstr "במידה ואפשרות זו מסומנת, Gajim יציג את הלחנים של אנשי קשר בחלון הרשימה"
 
+# Changed "location" with "locations"
 #: ../data/gui/preferences_window.ui.h:29
+msgid "Display _location of contacts in roster"
+msgstr "הצג _מיקומים של אנשי קשר ברשימה"
+
+# BUG: a dot at the end
+#: ../data/gui/preferences_window.ui.h:30
+msgid "If checked, Gajim will display the location of contacts in the roster window"
+msgstr "במידה ואפשרות זו מסומנת, Gajim יציג את המיקומים של אנשי קשר בחלון הרשימה"
+
+# מיון
+#: ../data/gui/preferences_window.ui.h:31
+msgid "Sort contacts by status"
+msgstr "סדר אנשי קשר לפי מצב־חיבור"
+
+#: ../data/gui/preferences_window.ui.h:32
+msgid "in _roster"
+msgstr "ב_רשימה"
+
+#: ../data/gui/preferences_window.ui.h:33
+msgid "in _group chats"
+msgstr "ב_שיחות קבוצה"
+
+# <b>Roster Display</b>
+#: ../data/gui/preferences_window.ui.h:34
+msgid "<b>Roster Appearance</b>"
+msgstr "<b>מראה רשימה</b>"
+
+#: ../data/gui/preferences_window.ui.h:35
 msgid "_Window behavior:"
 msgstr "התנהגות _חלונות:"
 
 # תרשימיים, נייחים
-#: ../data/gui/preferences_window.ui.h:30
-msgid ""
-"If not disabled, Gajim will replace ascii smilies like ':)' with equivalent "
-"animated or static graphical emoticons"
-msgstr ""
-"במידה ואפשרות זו לא מנוטרלת, Gajim יחליף סמיילים אשר מורכבים מתווי ascii "
-"כגון ':)' עם רגשונים ציוריים תואמים (מונפשים או סטטיים)"
+#: ../data/gui/preferences_window.ui.h:36
+msgid "If not disabled, Gajim will replace ascii smilies like ':)' with equivalent animated or static graphical emoticons"
+msgstr "במידה ואפשרות זו לא מנוטרלת, Gajim יחליף סמיילים המורכבים מתווי ascii כגון ':)' עם רגשונים ציוריים תואמים (מונפשים או סטטיים)"
 
-#: ../data/gui/preferences_window.ui.h:31
+#: ../data/gui/preferences_window.ui.h:37
 msgid "_Emoticons:"
 msgstr "_רגשונים:"
 
-#: ../data/gui/preferences_window.ui.h:32
+# דחוסים, מקוצרים
+#: ../data/gui/preferences_window.ui.h:38
 msgid "Ma_ke message windows compact"
 msgstr "השתמש בחלונות שיחה צ_פופים"
 
-#: ../data/gui/preferences_window.ui.h:33
+#: ../data/gui/preferences_window.ui.h:39
 msgid "Hide all buttons in chat windows"
 msgstr "הסתרת כל הלחצנים בחלונות שיחה"
 
-#: ../data/gui/preferences_window.ui.h:34
+# עם עיצובים
+# עם תבנית טקסט עשירה
+#: ../data/gui/preferences_window.ui.h:40
 msgid "_Ignore rich content in incoming messages"
 msgstr "הת_עלם מן תוכן עשיר בהודעות נכנסות"
 
 # הודעות מסוימות עשויות להכיל
-#: ../data/gui/preferences_window.ui.h:35
-msgid ""
-"Some messages may include rich content (formatting, colors etc). If checked, "
-"Gajim will just display the raw message text."
-msgstr ""
-"ייתכן כי הודעות מסוימות יכילו תוכן עשיר (עיצוב, צבעים וכו׳). במידה ואפשרות "
-"זו מסומנת, Gajim יציג רק את התמליל הגולמי אשר מצוי בהודעה."
+#: ../data/gui/preferences_window.ui.h:41
+msgid "Some messages may include rich content (formatting, colors etc). If checked, Gajim will just display the raw message text."
+msgstr "ייתכן שהודעות מסוימות יכילו תוכן עשיר (עיצוב, צבעים וכו׳). במידה ואפשרות זו מסומנת, Gajim יציג רק את התמליל הגולמי שבהודעה."
 
-#: ../data/gui/preferences_window.ui.h:36
+#: ../data/gui/preferences_window.ui.h:42
 msgid "_Highlight misspelled words"
 msgstr "הדגש שגיאות _כתיב"
 
-#: ../data/gui/preferences_window.ui.h:37
-msgid ""
-"If checked, Gajim will highlight spelling errors in input fields of chat "
-"windows. If no language is explicitly set via right click on the input "
-"field, the default language will be used for this contact or group chat."
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim יבליט שגיאות כתיב בשדות קלט של חלונות שיחה. "
-"במידה ולא צוינה במפורש באמצעות מקש ימני על שדה הקלט, השפה המשתמטת תהיה "
-"בשימוש עבור איש קשר זה או שיחת קבוצה."
+# הוגדרה
+#: ../data/gui/preferences_window.ui.h:43
+msgid "If checked, Gajim will highlight spelling errors in input fields of chat windows. If no language is explicitly set via right click on the input field, the default language will be used for this contact or group chat."
+msgstr "במידה ואפשרות זו מסומנת, Gajim יבליט שגיאות כתיב בשדות קלט של חלונות שיחה. במידה ולא צוינה במפורש באמצעות מקש ימני על שדה הקלט, השפה המשתמטת תהיה בשימוש עבור איש קשר זה או שיחת קבוצה."
 
-#: ../data/gui/preferences_window.ui.h:38
+#: ../data/gui/preferences_window.ui.h:44
 msgid "_Show roster on startup:"
 msgstr "ה_צג רשימה בעת הפעלה:"
 
-#: ../data/gui/preferences_window.ui.h:39
-msgid "Show icon when your messages are received"
-msgstr "הצג צלמית כאשר הודעותיך מתקבלות"
-
-#: ../data/gui/preferences_window.ui.h:40
+#: ../data/gui/preferences_window.ui.h:45
 msgid "<b>Chat Appearance</b>"
-msgstr "<b>הופעת שיחה</b>"
+msgstr "<b>מראה שיחה</b>"
 
-#: ../data/gui/preferences_window.ui.h:42
+#: ../data/gui/preferences_window.ui.h:47
 msgid "When new event is received:"
 msgstr "כאשר אירוע חדש מתקבל:"
 
-#: ../data/gui/preferences_window.ui.h:43
+#: ../data/gui/preferences_window.ui.h:48
 msgid "Notify me about contacts that sign _in"
-msgstr "הודע לי אודות אנשי קשר אשר מת_חברים"
+msgstr "הודע לי אודות אנשי קשר שמת_חברים"
 
-#: ../data/gui/preferences_window.ui.h:44
+#: ../data/gui/preferences_window.ui.h:49
 msgid "Notify me about contacts that sign _out"
-msgstr "הודע לי אודות אנשי קשר אשר מת_נתקים"
+msgstr "הודע לי אודות אנשי קשר שמת_נתקים"
 
-#: ../data/gui/preferences_window.ui.h:45
-msgid ""
-"Gajim will notify you via a popup window in the bottom right of the screen "
-"about contacts that just signed out"
-msgstr ""
-"‏Gajim יידע אותך באמצעות חלון מוקפץ בצד הימני התחתון של המסך, אודות אנשי קשר "
-"אשר התנתקו זה עתה"
+# signed out
+# יידעך
+# שהתנתקו זה עתה
+#: ../data/gui/preferences_window.ui.h:50
+msgid "Gajim will notify you via a popup window in the bottom right of the screen about contacts that just signed out"
+msgstr "‫Gajim יידע אותך באמצעות חלון מוקפץ בצד הימני התחתון של המסך, אודות אנשי קשר שזה עתה התנתקו"
 
-#: ../data/gui/preferences_window.ui.h:46
+#: ../data/gui/preferences_window.ui.h:51
 msgid "Allow popup/notifications when I'm _away/na/busy/invisible"
 msgstr "התר התראות מוקפצות כאשר אני במצב נעדר/_לא זמין/עסוק/בלתי נראה"
 
-#: ../data/gui/preferences_window.ui.h:47
+# הודע לי
+#: ../data/gui/preferences_window.ui.h:52
 msgid "Notify on new _GMail email"
-msgstr "הודע על _דוא״ל GMail חדש"
+msgstr "הודע אודות _דוא״ל GMail"
 
 # BUG: a dot at the end
 # דרך
-#: ../data/gui/preferences_window.ui.h:48
-msgid ""
-"If checked, Gajim will show a notification when a new e-mail is received via "
-"GMail"
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim יציג התראה כאשר דוא״ל חדש מתקבל דרך GMail"
+#: ../data/gui/preferences_window.ui.h:53
+msgid "If checked, Gajim will show a notification when a new e-mail is received via GMail"
+msgstr "במידה ואפשרות זו מסומנת, Gajim יציג התראה כאשר דוא״ל חדש מתקבל באמצעות GMail"
 
-#: ../data/gui/preferences_window.ui.h:49
+# Does extra means special?
+#: ../data/gui/preferences_window.ui.h:54
 msgid "Display _extra email details"
 msgstr "הצג _פרטי דוא״ל נוספים"
 
 # BUG: a dot at the end
-#: ../data/gui/preferences_window.ui.h:50
-msgid ""
-"If checked, Gajim will also include information about the sender of new "
-"emails"
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim יכיל גם מידע אודות הממען של ההודעות "
-"האלקטרוניות החדשות."
+# BUG: of the new emails > of new emails
+#: ../data/gui/preferences_window.ui.h:55
+msgid "If checked, Gajim will also include information about the sender of the new emails"
+msgstr "במידה ואפשרות זו מסומנת, Gajim יכיל גם מידע אודות הממען של ההודאות האלקטרוניות החדשות."
 
-#: ../data/gui/preferences_window.ui.h:51
+#: ../data/gui/preferences_window.ui.h:56
 msgid "<b>GMail Options</b>"
 msgstr "<b>אפשרויות GMail</b>"
 
-#: ../data/gui/preferences_window.ui.h:52
+#: ../data/gui/preferences_window.ui.h:57
 msgid "Show notification area icon:"
 msgstr "הצג צלמית אזור התראה:"
 
-#: ../data/gui/preferences_window.ui.h:53
+#: ../data/gui/preferences_window.ui.h:58
 msgid "<b>Visual Notifications</b>"
 msgstr "<b>התראות חזותיות</b>"
 
-#: ../data/gui/preferences_window.ui.h:54
+#: ../data/gui/preferences_window.ui.h:59
 msgid "Play _sounds"
 msgstr "נגן _צלילים"
 
-#: ../data/gui/preferences_window.ui.h:55
+# Manage sound events
+# ניהול _אירועי צליל...
+#: ../data/gui/preferences_window.ui.h:60
 msgid "Ma_nage..."
-msgstr "  ניהו_ל...  "
+msgstr "  נה_ל...  "
 
 # בהיותי
-#: ../data/gui/preferences_window.ui.h:56
+#: ../data/gui/preferences_window.ui.h:61
 msgid "Allow sound when I'm _busy"
 msgstr "התר צלילים כאשר אני במצב _עסוק"
 
-#: ../data/gui/preferences_window.ui.h:57
+#: ../data/gui/preferences_window.ui.h:62
 msgid "<b>Sounds</b>"
 msgstr "<b>צלילים</b>"
 
-#: ../data/gui/preferences_window.ui.h:58
+#: ../data/gui/preferences_window.ui.h:63
 msgid "Notifications"
 msgstr "התראות"
 
-#: ../data/gui/preferences_window.ui.h:59
-msgid ""
-"Gajim can send and receive meta-information related to a conversation you "
-"may have with a contact. Here you can specify which chatstates you want to "
-"display in chat windows."
-msgstr ""
-"ביכולתו של Gajim לשלוח ולקבל מידע-מוצמד (meta-information) הקשור אל דיון אשר "
-"עשוי להיות לך עם איש קשר. כאן נתונה לך האפשרות לציין אילו מצבי שיחה ברצונך "
-"להציג בחלון שיחה."
+#: ../data/gui/preferences_window.ui.h:64
+msgid "Gajim can send and receive meta-information related to a conversation you may have with a contact. Here you can specify which chatstates you want to display in chat windows."
+msgstr "ביכולתו של Gajim לשלוח ולקבל מידע-מוצמד (meta-information) הקשור אל דיון שעשוי להיות לך עם איש קשר. כאן נתונה לך היכולת לציין אילו מצבי שיחה ברצונך להציג בחלון שיחה."
 
-#: ../data/gui/preferences_window.ui.h:60
+#: ../data/gui/preferences_window.ui.h:65
 msgid "_Display chat state notifications:"
 msgstr "ה_צג התראות מצב שיחה:"
 
-#: ../data/gui/preferences_window.ui.h:61
-msgid ""
-"Gajim can send and receive meta-information related to a conversation you "
-"may have with a contact. Here you can specify which chatstates you want to "
-"send to the other party."
-msgstr ""
-"ביכולתו של Gajim לשלוח ולקבל מידע-מוצמד (meta-information) הקשור אל דיון אשר "
-"עשוי להיות לך עם איש קשר. כאן נתונה לך האפשרות לציין אילו מצבי שיחה ברצונך "
-"לשלוח אל הקצה האחר."
+# אל הקצה האחר
+#: ../data/gui/preferences_window.ui.h:66
+msgid "Gajim can send and receive meta-information related to a conversation you may have with a contact. Here you can specify which chatstates you want to send to the other party."
+msgstr "ביכולתו של Gajim לשלוח ולקבל מידע-מוצמד (meta-information) הקשור אל דיון שעשוי להיות לך עם איש קשר. כאן נתונה לך היכולת לציין אילו מצבי שיחה ברצונך לשלוח אל הצד האחר."
 
-#: ../data/gui/preferences_window.ui.h:62
+#: ../data/gui/preferences_window.ui.h:67
 msgid "_Send chat state notifications:"
 msgstr "_שלח התראות מצב שיחה:"
 
-#: ../data/gui/preferences_window.ui.h:63
+#: ../data/gui/preferences_window.ui.h:68
 msgid "<b>Chat state notifications</b>"
 msgstr "<b>התראות מצב שיחה</b>"
 
-#: ../data/gui/preferences_window.ui.h:64
+#: ../data/gui/preferences_window.ui.h:69
 msgid "Personal Events"
 msgstr "אירועים אישיים"
 
-#: ../data/gui/preferences_window.ui.h:65
+#: ../data/gui/preferences_window.ui.h:70
 msgid "_Away after:"
 msgstr "נ_עדר כעבור:"
 
-#: ../data/gui/preferences_window.ui.h:66
-msgid ""
-"If checked, Gajim will change status to Away when the computer is unused."
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim ישנה מצב אל נעדר כאשר המחשב לא מצוי בשימוש."
+#: ../data/gui/preferences_window.ui.h:71
+msgid "If checked, Gajim will change status to Away when the computer is unused."
+msgstr "במידה ואפשרות זו מסומנת, Gajim ישנה מצב אל נעדר כאשר המחשב לא מצוי בשימוש."
 
-#: ../data/gui/preferences_window.ui.h:67
+#: ../data/gui/preferences_window.ui.h:72
 msgid "_Not available after:"
 msgstr "לא _זמין כעבור:"
 
 # BUG: a dot at the end
-#: ../data/gui/preferences_window.ui.h:68
-msgid ""
-"If checked, Gajim will change status to Not Available when the computer has "
-"not been used even longer"
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim ישנה מצב אל לא זמין כאשר המחשב לא מצוי בשימוש "
-"לזמן ממושך עוד יותר."
+# אפילו לזמן ממושך יותר
+# אפילו לזמן ממושך עוד יותר
+#: ../data/gui/preferences_window.ui.h:73
+msgid "If checked, Gajim will change status to Not Available when the computer has not been used even longer"
+msgstr "במידה ואפשרות זו מסומנת, Gajim ישנה מצב אל לא זמין כאשר המחשב לא מצוי בשימוש לזמן ממושך עוד יותר."
 
-#: ../data/gui/preferences_window.ui.h:69
+#: ../data/gui/preferences_window.ui.h:74
 msgid "minutes"
 msgstr "דקות"
 
-#: ../data/gui/preferences_window.ui.h:70
+# על ידי
+# היה ושדה זה
+# זמן התפוגה שמצוין בערך
+#: ../data/gui/preferences_window.ui.h:75
 msgid ""
 "The auto away status message. If empty, Gajim will not change the current "
 "status message\n"
 "$S will be replaced by previous status message\n"
 "$T will be replaced by auto-away timeout"
 msgstr ""
-"הודעת מצב נעדרות אוטומטית. אם שדה זה ריק, Gajim לא ישנה את הודעת המצב "
-"הנוכחית\n"
+"הודעת מצב הנעדרות האוטומטית. במידה ושדה זה ריק, Gajim לא ישנה את הודעת המצב הנוכחית\n"
 "התווים $S יוחלפו בהודעת מצב קודמת\n"
-"התווים $T יוחלפו על פי זמן תפוגה אשר מצוין עבור auto-away"
+"התווים $T יוחלפו על פי זמן תפוגה של auto-away"
 
-#: ../data/gui/preferences_window.ui.h:73
+#: ../data/gui/preferences_window.ui.h:78
 msgid ""
 "The auto not available status message. If empty, Gajim will not change the "
 "current status message\n"
@@ -2091,297 +2206,277 @@ msgstr ""
 "התווים $S יוחלפו בהודעת מצב קודמת\n"
 "התווים $T יוחלפו על פי זמן תפוגה של auto-not-available"
 
-#: ../data/gui/preferences_window.ui.h:76
+#: ../data/gui/preferences_window.ui.h:81
 msgid "<b>Auto Status</b>"
-msgstr "<b>מצב חיבור אוטומטי</b>"
+msgstr "<b>מצב־חיבור אוטומטי</b>"
 
 # Sign in
 # Sign out
-#: ../data/gui/preferences_window.ui.h:77
+#: ../data/gui/preferences_window.ui.h:82
 msgid "Ask status message when I:"
-msgstr "שאל אותי עבור הודעת מצב חיבור בעת:"
+msgstr "שאל אותי עבור הודעת מצב־חיבור בעת:"
 
-#: ../data/gui/preferences_window.ui.h:78
+#: ../data/gui/preferences_window.ui.h:83
 msgid "Sign _in"
 msgstr "התח_ברות"
 
-#: ../data/gui/preferences_window.ui.h:79
+#: ../data/gui/preferences_window.ui.h:84
 msgid "Sign _out"
 msgstr "הת_נתקות"
 
-#: ../data/gui/preferences_window.ui.h:80
-msgid ""
-"If enabled, Gajim will not ask for a status message. The specified default "
-"message will be used instead."
-msgstr ""
-"במידה ואפשרות זו מופעלת, Gajim לא ישאל עבור הודעת מצב. ההודעה המשתמטת אשר "
-"תצוין תהיה זו שתיכנס לתוקף במקום."
+# שתיכנס לתוקף
+#: ../data/gui/preferences_window.ui.h:85
+msgid "If enabled, Gajim will not ask for a status message. The specified default message will be used instead."
+msgstr "במידה ואפשרות זו מופעלת, Gajim לא ישאל עבור הודעת מצב. ההודעה המשתמטת שתצוין תהיה זו שתיכנס לשימוש במקום."
 
-#: ../data/gui/preferences_window.ui.h:81
+#: ../data/gui/preferences_window.ui.h:86
 msgid "<b>Status Messages</b>"
 msgstr "<b>הודעות מצב</b>"
 
-#: ../data/gui/preferences_window.ui.h:82
+# שמורות
+#: ../data/gui/preferences_window.ui.h:87
 msgid "<b>Preset Status Messages</b>"
-msgstr "<b>הודעות מצב מותאמות</b>"
+msgstr "<b>הודעות מצב ערוכות מראש</b>"
 
-#: ../data/gui/preferences_window.ui.h:83 ../src/config.py:398
+#: ../data/gui/preferences_window.ui.h:88
+#: ../src/config.py:403
 msgid "Status"
-msgstr "מצב חיבור"
+msgstr "מצב־חיבור"
 
-#: ../data/gui/preferences_window.ui.h:84
+#: ../data/gui/preferences_window.ui.h:89
 msgid "Use system _default"
-msgstr "השתמש בברירת מ_חדל מערכת"
+msgstr "השתמש בברירת מ_חדל של מערכת"
 
-#: ../data/gui/preferences_window.ui.h:85
+#: ../data/gui/preferences_window.ui.h:90
 msgid "Chat message:"
 msgstr "הודעת שיחה:"
 
-#: ../data/gui/preferences_window.ui.h:86
+#: ../data/gui/preferences_window.ui.h:91
 msgid "<b>Font</b>"
 msgstr "<b>גופן</b>"
 
-#: ../data/gui/preferences_window.ui.h:87
+#: ../data/gui/preferences_window.ui.h:92
 msgid "Use _transports icons"
 msgstr "השתמש בצלמיות של מו_בילים"
 
-#: ../data/gui/preferences_window.ui.h:88
-msgid ""
-"If checked, Gajim will use protocol-specific status icons. (e.g. A contact "
-"from MSN will have the equivalent msn icon for status online, away, busy, "
-"etc...)"
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim יעשה שימוש בצלמיות מצב אשר אופייניות לכל "
-"פרוטוקול בהתאמה (למשל: עבור איש קשר אשר מצוי אצל MSN תהיה צלמית מצב msn "
-"שקילה עבור מצב מקוון, נעדר, עסוק, וכו׳)"
+# BUG: e.g.
+# BUG: A dot > see >> . (see below)
+#: ../data/gui/preferences_window.ui.h:93
+msgid "If checked, Gajim will use protocol-specific status icons. (eg. A contact from MSN will have the equivalent msn icon for status online, away, busy, etc...)"
+msgstr "במידה ואפשרות זו מסומנת, Gajim יעשה שימוש בצלמיות מצב שאופייניות לכל פרוטוקול בהתאמה (למשל: עבור איש קשר המצוי אצל MSN תהיה צלמית מצב msn שקילה עבור מצב מקוון, נעדר, עסוק, וכו׳)"
 
-#: ../data/gui/preferences_window.ui.h:89
+# סדרת _צלמיות מצב:
+#: ../data/gui/preferences_window.ui.h:94
 msgid "Status _iconset:"
 msgstr "_צלמיות:"
 
-#: ../data/gui/preferences_window.ui.h:90
+#: ../data/gui/preferences_window.ui.h:95
 msgid "Configure color and font of the interface"
 msgstr "עיצוב גופן וצבע של הממשק"
 
-#: ../data/gui/preferences_window.ui.h:91
+#: ../data/gui/preferences_window.ui.h:96
 msgid "T_heme:"
 msgstr "מו_טיב:"
 
-#: ../data/gui/preferences_window.ui.h:92
+# ערכאות נושא
+#: ../data/gui/preferences_window.ui.h:97
 msgid "<b>Themes</b>"
-msgstr "<b>ערכאות נושא</b>"
+msgstr "<b>מוטיבים</b>"
 
-#: ../data/gui/preferences_window.ui.h:93
+#: ../data/gui/preferences_window.ui.h:98
 msgid "Contact's nickname:"
 msgstr "שם כינוי של איש קשר:"
 
-#: ../data/gui/preferences_window.ui.h:94
+#: ../data/gui/preferences_window.ui.h:99
 msgid "Your nickname:"
-msgstr "שם כינוי:"
+msgstr "שם כינוייך:"
 
-#: ../data/gui/preferences_window.ui.h:95
+#: ../data/gui/preferences_window.ui.h:100
 msgid "_Status message:"
 msgstr "הודעת _מצב:"
 
-#: ../data/gui/preferences_window.ui.h:96
+#: ../data/gui/preferences_window.ui.h:101
 msgid "_URL highlight:"
 msgstr "הבלטת _URL:"
 
+# איפוס אל צבעי ברירת המחדל
 # צבעים משתמטים
-#: ../data/gui/preferences_window.ui.h:97
+#: ../data/gui/preferences_window.ui.h:102
 msgid "_Reset to Default Colors"
-msgstr "_אפס צבעים אל ברירת מחדל"
+msgstr "_איפוס צבעים"
 
-#: ../data/gui/preferences_window.ui.h:98
+#: ../data/gui/preferences_window.ui.h:103
 msgid "Contact's message:"
 msgstr "הודעת איש קשר:"
 
-#: ../data/gui/preferences_window.ui.h:99
+#: ../data/gui/preferences_window.ui.h:104
 msgid "Your message:"
 msgstr "הודעתך:"
 
-#: ../data/gui/preferences_window.ui.h:100
-msgid "Group chat highlight:"
-msgstr "הבלטת שיחת קבוצה:"
-
-#: ../data/gui/preferences_window.ui.h:101
+#: ../data/gui/preferences_window.ui.h:105
 msgid "<b>Chat Line Colors</b>"
 msgstr "<b>צבעי שורות שיחה</b>"
 
-#: ../data/gui/preferences_window.ui.h:102
+#: ../data/gui/preferences_window.ui.h:106
 msgid "Style"
 msgstr "סגנון"
 
-# התקן
-#: ../data/gui/preferences_window.ui.h:103
+#: ../data/gui/preferences_window.ui.h:107
 msgid "Audio input device"
-msgstr "מכשיר קלט שמע"
+msgstr "תקן קלט שמע"
 
-#: ../data/gui/preferences_window.ui.h:104
+#: ../data/gui/preferences_window.ui.h:108
 msgid "Audio output device"
-msgstr "מכשיר פלט שמע"
+msgstr "תקן פלט שמע"
 
-#: ../data/gui/preferences_window.ui.h:105
+#: ../data/gui/preferences_window.ui.h:109
 msgid "<b>Audio</b>"
 msgstr "<b>שמע</b>"
 
-#: ../data/gui/preferences_window.ui.h:106
+#: ../data/gui/preferences_window.ui.h:110
 msgid "Video input device"
-msgstr "מכשיר קלט וידאו"
+msgstr "תקן קלט וידאו"
 
-#: ../data/gui/preferences_window.ui.h:107
+#: ../data/gui/preferences_window.ui.h:111
 msgid "Video output device"
-msgstr "מכשיר פלט וידאו"
+msgstr "תקן פלט וידאו"
 
-#: ../data/gui/preferences_window.ui.h:108
+#: ../data/gui/preferences_window.ui.h:112
 msgid "Video framerate"
 msgstr "תדר וידאו"
 
-#: ../data/gui/preferences_window.ui.h:109
+#: ../data/gui/preferences_window.ui.h:113
 msgid "Video size"
 msgstr "גודל וידאו"
 
-#: ../data/gui/preferences_window.ui.h:110
-msgid "View own video source"
-msgstr "הצג מקור וידאו עצמי"
-
-#: ../data/gui/preferences_window.ui.h:111
+#: ../data/gui/preferences_window.ui.h:114
 msgid "<b>Video</b>"
 msgstr "<b>וידאו</b>"
 
-#: ../data/gui/preferences_window.ui.h:112
+#: ../data/gui/preferences_window.ui.h:115
 msgid "STUN server:"
 msgstr "שרת STUN:"
 
-#: ../data/gui/preferences_window.ui.h:113
+#: ../data/gui/preferences_window.ui.h:116
 msgid "<i>(example: stunserver.org)</i>"
 msgstr "<i>(דוגמא: stunserver.org)</i>"
 
-#: ../data/gui/preferences_window.ui.h:114
+#: ../data/gui/preferences_window.ui.h:117
 msgid ""
 "STUN server hostname. If none given, Gajim will try\n"
 "to discover one from server."
 msgstr ""
 "שם מארח של שרת STUN. במידה ולא ניתן, Gajim ינסה\n"
-"למצוא אחד מתוך שרת."
+"למצוא אחד מן שרת נתון."
 
-#: ../data/gui/preferences_window.ui.h:116
+#: ../data/gui/preferences_window.ui.h:119
 msgid "<b>Connection</b>"
 msgstr "<b>חיבור</b>"
 
-#: ../data/gui/preferences_window.ui.h:117 ../src/features_window.py:102
+#: ../data/gui/preferences_window.ui.h:120
+#: ../src/features_window.py:102
 msgid "Audio / Video"
 msgstr "שמע \\ וידאו"
 
-#: ../data/gui/preferences_window.ui.h:118
+#: ../data/gui/preferences_window.ui.h:121
 msgid "_File manager:"
 msgstr "מנהל _קבצים:"
 
-#: ../data/gui/preferences_window.ui.h:119
+#: ../data/gui/preferences_window.ui.h:122
 msgid "_Mail client:"
 msgstr "לקוח _דואר:"
 
-#: ../data/gui/preferences_window.ui.h:120
+#: ../data/gui/preferences_window.ui.h:123
 msgid "_Browser:"
 msgstr "דפדפן:"
 
 #. a header for custom browser/client/file manager. so translate sth like: Custom Settings
-#: ../data/gui/preferences_window.ui.h:122
+#: ../data/gui/preferences_window.ui.h:125
 msgid "<b>Custom</b>"
 msgstr "<b>התאמה אישית</b>"
 
-#: ../data/gui/preferences_window.ui.h:123
+#: ../data/gui/preferences_window.ui.h:126
 msgid "<b>Applications</b>"
 msgstr "<b>יישומים</b>"
 
-#: ../data/gui/preferences_window.ui.h:124
+#: ../data/gui/preferences_window.ui.h:127
 msgid "_Ignore events from contacts not in the roster"
-msgstr "הת_עלם מן אירועים מאת אנשי קשר אשר לא נוכחים ברשימה"
+msgstr "הת_עלם מן אירועים מאת אנשי קשר שלא נוכחים ברשימה"
 
 # BUG: a dot at the end
-#: ../data/gui/preferences_window.ui.h:125
-msgid ""
-"If checked, Gajim will ignore incoming events from unauthorized contacts. "
-"Use with caution, because it blocks all messages from any contact that is "
-"not in the roster"
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim יתעלם מן אירועים נכנסים מאת אנשי קשר לא "
-"מורשים. יש לעשות שימוש זהיר באפשרות זו, משום שזו חוסמת את כל ההודעות מכל איש "
-"קשר אשר לא מצוי ברשימה"
+#: ../data/gui/preferences_window.ui.h:128
+msgid "If checked, Gajim will ignore incoming events from unauthorized contacts. Use with caution, because it blocks all messages from any contact that is not in the roster"
+msgstr "במידה ואפשרות זו מסומנת, Gajim יתעלם מן אירועים נכנסים מאת אנשי קשר לא מורשים. יש לעשות שימוש זהיר באפשרות זו, משום שזו חוסמת את כל ההודעות מכל איש קשר שלא מצוי ברשימה"
 
-#: ../data/gui/preferences_window.ui.h:126
+#: ../data/gui/preferences_window.ui.h:129
 msgid "Allow client / _OS information to be sent"
 msgstr "התר שליחת _מידע לקוח \\ מערכת הפעלה"
 
 # BUG: a dot at the end
 # BUG: add Client too
-#: ../data/gui/preferences_window.ui.h:127
-msgid ""
-"If checked, Gajim will allow others to detect the operation system you are "
-"using"
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim יתיר לאחרים לאתר את מערכת ההפעלה אשר מצויה "
-"תחת שימושך"
+#: ../data/gui/preferences_window.ui.h:130
+msgid "If checked, Gajim will allow others to detect the operation system you are using"
+msgstr "במידה ואפשרות זו מסומנת, Gajim יתיר לאחרים לאתר את סוג הלקוח ואת סוג מערכת ההפעלה שבשימושך"
 
-#: ../data/gui/preferences_window.ui.h:128
+#: ../data/gui/preferences_window.ui.h:131
 msgid "Allow local system time information to be sent"
 msgstr "התר שליחת _זמן מערכת מקומי"
 
 # BUG: a dot at the end
-#: ../data/gui/preferences_window.ui.h:129
+#: ../data/gui/preferences_window.ui.h:132
 msgid "If checked, Gajim will allow others to detect the time on your system"
-msgstr "במידה ואפשרות זו מסומנת, Gajim יתיר לאחרים לאתר את הזמן של המערכת שלך"
+msgstr "במידה ואפשרות זו מסומנת, Gajim יתיר לאחרים לאתר את הזמן שבמערכת שלך"
 
-#: ../data/gui/preferences_window.ui.h:130
+#: ../data/gui/preferences_window.ui.h:133
 msgid "Log _encrypted chat session"
 msgstr "רשום סשן שיחה מו_צפן ברשומות ההיסטוריה"
 
 # BUG: encryption, the
 # אלמלא כן
-#: ../data/gui/preferences_window.ui.h:131
-msgid ""
-"If checked, Gajim will keep logs for encrypted messages. Please note that "
-"when using E2E encryption the remote party has to agree on logging, else the "
-"messages will not be logged."
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim ישמור רשומות עבור הודעות מוצפנות. אנא קח "
-"לתשומת לבך כי כאשר הצפנת E2E (קצה אל קצה) נמצאת בשימוש, הצד המרוחק מוכרח "
-"להסכים לרישום השיחה, אחרת ההודעות לא יירשמו."
+#: ../data/gui/preferences_window.ui.h:134
+msgid "If checked, Gajim will keep logs for encrypted messages. Please note that when using E2E encryption the remote party has to agree on logging, else the messages will not be logged."
+msgstr "במידה ואפשרות זו מסומנת, Gajim ישמור רשומות עבור הודעות מוצפנות. נא לקחת לתשומת לבך שכאשר הצפנת קצה אל קצה (E2E) נמצאת בשימוש, הצד המרוחק מוכרח להסכים לרישום השיחה, אחרת ההודעות לא ירשמו."
 
 # חוסר מעש
-#: ../data/gui/preferences_window.ui.h:132
+#: ../data/gui/preferences_window.ui.h:135
 msgid "Allow my _idle time to be sent"
 msgstr "התר שליחת משך זמן _חוסר פעילות"
 
-#: ../data/gui/preferences_window.ui.h:133
+#: ../data/gui/preferences_window.ui.h:136
 msgid "Global proxy:"
-msgstr "ציר גלובלי:"
+msgstr "מתווך גלובלי:"
 
-#: ../data/gui/preferences_window.ui.h:135
+#: ../data/gui/preferences_window.ui.h:138
 msgid "<b>Privacy</b>"
 msgstr "<b>פרטיות</b>"
 
-#: ../data/gui/preferences_window.ui.h:136
+#: ../data/gui/preferences_window.ui.h:139
 msgid "_Log status changes of contacts"
-msgstr "רשום _שינויים של מצב חיבור של אנשי קשר"
+msgstr "רשום _שינויים של מצב־חיבור של אנשי קשר"
 
-#: ../data/gui/preferences_window.ui.h:137
+# ברירת המחדל
+#: ../data/gui/preferences_window.ui.h:140
 msgid "Check on startup if Gajim is the _default Jabber client"
 msgstr "בדוק בעת הפעלה אם Gajim הינו לקוח _Jabber ברירת מחדל"
 
-#: ../data/gui/preferences_window.ui.h:139
+#: ../data/gui/preferences_window.ui.h:142
 msgid "_Open..."
 msgstr "_פתיחה..."
 
-#: ../data/gui/preferences_window.ui.h:140
+#: ../data/gui/preferences_window.ui.h:143
 msgid "<b>Advanced Configuration Editor</b>"
 msgstr "<b>עורך תצורה מתקדם</b>"
 
-#: ../data/gui/preferences_window.ui.h:141
+#: ../data/gui/preferences_window.ui.h:144
 msgid "Advanced"
 msgstr "מתקדם"
 
-#: ../data/gui/privacy_list_window.ui.h:1 ../src/dialogs.py:4121
+#: ../data/gui/privacy_lists_window.ui.h:1
+msgid "Privacy Lists:"
+msgstr "רשימות פרטיות:"
+
+#: ../data/gui/privacy_list_window.ui.h:1
+#: ../src/dialogs.py:4023
 msgid "Privacy List"
 msgstr "רשימת פרטיות"
 
@@ -2401,9 +2496,10 @@ msgstr "פעילה בכל אתחול"
 msgid "<b>List of rules</b>"
 msgstr "<b>רשימת כללים</b>"
 
+# הוספת / הסרת חוק
 #: ../data/gui/privacy_list_window.ui.h:6
 msgid "<b>Add / Edit a rule</b>"
-msgstr "<b>הוספת \\ הסרת כלל</b>"
+msgstr "<b>הוספה \\ הסרה של כלל</b>"
 
 # להתיר
 #: ../data/gui/privacy_list_window.ui.h:7
@@ -2416,9 +2512,8 @@ msgstr "לאסור"
 
 #: ../data/gui/privacy_list_window.ui.h:9
 msgid "JabberID"
-msgstr "מזהה Jabber"
+msgstr "‫JID"
 
-# אשר
 #: ../data/gui/privacy_list_window.ui.h:10
 msgid "all in the group"
 msgstr "כל מי שבקבוצה"
@@ -2447,6 +2542,7 @@ msgstr "לצפות במצב שלי"
 msgid "to send me status"
 msgstr "לשלוח אלי מצב"
 
+# Can I write subscriptions instead?
 #: ../data/gui/privacy_list_window.ui.h:17
 msgid "All (including subscription)"
 msgstr "הכל (כולל הרשמה)"
@@ -2471,10 +2567,6 @@ msgstr "מן"
 msgid "to"
 msgstr "אל"
 
-#: ../data/gui/privacy_lists_window.ui.h:1
-msgid "Privacy Lists:"
-msgstr "רשימות פרטיות:"
-
 #. Family Name
 #: ../data/gui/profile_window.ui.h:3
 #: ../data/gui/vcard_information_window.ui.h:17
@@ -2521,6 +2613,10 @@ msgstr "<b>רחוב:</b>"
 msgid "<b>City:</b>"
 msgstr "<b>עיר:</b>"
 
+# Changed to District instead of State.
+# Reason: Most of the Hebrew speakers, who probably going to be Israelis, would find the word District (the way the big parts of Israel are parted) more attractive.
+# State = מדינה
+# District = מחוז , אזור
 #: ../data/gui/profile_window.ui.h:15
 #: ../data/gui/vcard_information_window.ui.h:29
 msgid "<b>State:</b>"
@@ -2585,6 +2681,7 @@ msgstr "<b>דוא״ל:</b>"
 msgid "<b>Avatar:</b>"
 msgstr "<b>אווטאר:</b>"
 
+# לחץ כדי להגדיר אווטאר
 #: ../data/gui/profile_window.ui.h:28
 msgid "Click to set your avatar"
 msgstr "לחץ כדי לקבוע אווטאר"
@@ -2627,11 +2724,11 @@ msgstr "אודות"
 
 #: ../data/gui/remove_account_window.ui.h:1
 msgid "Remove account _only from Gajim"
-msgstr "להסיר חשבון מתוך Gajim _בלבד"
+msgstr "להסיר חשבון מן Gajim _בלבד"
 
 #: ../data/gui/remove_account_window.ui.h:2
 msgid "Remove account from Gajim and from _server"
-msgstr "להסיר חשבון מתוך Gajim וגם מתוך _שרת"
+msgstr "להסיר חשבון מן Gajim וגם מן _שרת"
 
 #: ../data/gui/remove_account_window.ui.h:3
 msgid "<b>What do you want to do?</b>"
@@ -2639,8 +2736,10 @@ msgstr "<b>מה ברצונך לעשות?</b>"
 
 #. Remove group
 #. Remove
-#: ../data/gui/remove_account_window.ui.h:4 ../src/roster_window.py:5829
-#: ../src/roster_window.py:5954 ../src/roster_window.py:6084
+#: ../data/gui/remove_account_window.ui.h:4
+#: ../src/roster_window.py:5881
+#: ../src/roster_window.py:6006
+#: ../src/roster_window.py:6136
 msgid "_Remove"
 msgstr "הס_ר"
 
@@ -2672,9 +2771,10 @@ msgstr "_פעולות"
 
 #: ../data/gui/roster_window.ui.h:6
 msgid "Add _Contact..."
-msgstr "הוספת _איש קשר..."
+msgstr "הוסף _איש קשר..."
 
-#: ../data/gui/roster_window.ui.h:9 ../src/disco.py:1558
+#: ../data/gui/roster_window.ui.h:9
+#: ../src/disco.py:1519
 msgid "_Edit"
 msgstr "ע_ריכה"
 
@@ -2682,6 +2782,7 @@ msgstr "ע_ריכה"
 msgid "_Accounts"
 msgstr "_חשבונות"
 
+# _מידע אישי
 #: ../data/gui/roster_window.ui.h:11
 msgid "Profile, A_vatar"
 msgstr "_דיוקן, אווטאר"
@@ -2750,29 +2851,32 @@ msgstr "חיפוש"
 # אחזור
 #: ../data/gui/search_window.ui.h:2
 msgid "Please wait while retrieving search form..."
-msgstr "אנא המתן בעת אחזרת טופס חיפוש..."
+msgstr "נא להמתין בעת אחזרת תבנית חיפוש..."
 
 #: ../data/gui/search_window.ui.h:3
 msgid "_Add contact"
 msgstr "הוסף _איש קשר"
 
 #. Information
-#: ../data/gui/search_window.ui.h:4 ../src/roster_window.py:6096
+#: ../data/gui/search_window.ui.h:4
+#: ../src/roster_window.py:6148
 msgid "_Information"
 msgstr "_מידע"
 
-#: ../data/gui/search_window.ui.h:5 ../src/disco.py:1408
+#: ../data/gui/search_window.ui.h:5
+#: ../src/disco.py:1372
 msgid "_Search"
 msgstr "_חפש"
 
 #: ../data/gui/service_discovery_window.ui.h:1
 msgid "G_o"
-msgstr "ה_משך"
+msgstr "מ_עבר"
 
 #: ../data/gui/service_discovery_window.ui.h:2
 msgid "_Address:"
 msgstr "_כתובת:"
 
+# הרשמה אל
 # Register = רישום
 # Subscribe = הרשמה
 #: ../data/gui/service_registration_window.ui.h:1
@@ -2789,7 +2893,11 @@ msgstr "אל:"
 
 #: ../data/gui/single_message_window.ui.h:5
 msgid "Sen_d"
-msgstr "של_ח"
+msgstr "שלי_ח"
+
+#: ../data/gui/single_message_window.ui.h:6
+msgid "Send message"
+msgstr "שלח הודעה"
 
 #: ../data/gui/single_message_window.ui.h:7
 msgid "_Reply"
@@ -2803,6 +2911,7 @@ msgstr "מענה להודעה"
 msgid "_Send & Close"
 msgstr "_שלח וסגור"
 
+# BUG: Sends ?
 #: ../data/gui/single_message_window.ui.h:10
 msgid "Send message and close window"
 msgstr "שליחת הודעה וסגירת החלון"
@@ -2821,7 +2930,6 @@ msgid ""
 "connected"
 msgstr "איסור הרשאות מן איש קשר כך שהוא או היא לא יוכלו לדעת מתי הינך מחובר"
 
-# הס_מך
 #: ../data/gui/subscription_request_window.ui.h:6
 msgid "Au_thorize"
 msgstr "אש_ר"
@@ -2834,9 +2942,10 @@ msgstr "הענקת הרשאה אל איש קשר זה כדי שהוא או הי
 msgid "Synchronise contacts"
 msgstr "סנכרן אנשי קשר"
 
+# שאיתו
 #: ../data/gui/synchronise_select_account_dialog.ui.h:2
 msgid "Select the account with which you want to synchronise"
-msgstr "בחירת החשבון אשר עמו ברצונך לסנכרן"
+msgstr "בחירת החשבון שעמו ברצונך להסתנכרן"
 
 #: ../data/gui/synchronise_select_contacts_dialog.ui.h:1
 msgid "Synchronise : select contacts"
@@ -2848,7 +2957,7 @@ msgstr "בחירת אנשי הקשר אותם ברצונך לסנכרן"
 
 #: ../data/gui/systray_context_menu.ui.h:1
 msgid "Sta_tus"
-msgstr "_מצב חיבור"
+msgstr "_מצב־חיבור"
 
 #: ../data/gui/systray_context_menu.ui.h:3
 msgid "_Group Chat"
@@ -2866,6 +2975,7 @@ msgstr "הצג _אירועים ממתינים"
 msgid "Mute Sounds"
 msgstr "דומם _צלילים"
 
+# מידע אישי
 #: ../data/gui/vcard_information_window.ui.h:1
 #: ../data/gui/zeroconf_information_window.ui.h:1
 msgid "Contact Information"
@@ -2873,7 +2983,7 @@ msgstr "מידע איש קשר"
 
 #: ../data/gui/vcard_information_window.ui.h:2
 msgid "<b>Jabber ID:</b>"
-msgstr "<b>מזהה Jabber:</b>"
+msgstr "‫<b>JID:</b>"
 
 #: ../data/gui/vcard_information_window.ui.h:3
 msgid "<b>Resource:</b>"
@@ -2891,6 +3001,7 @@ msgstr "<b>לקוח:</b>"
 msgid "<b>System:</b>"
 msgstr "<b>מערכת:</b>"
 
+# זמן איש קשר
 #: ../data/gui/vcard_information_window.ui.h:7
 msgid "<b>Contact time:</b>"
 msgstr "<b>זמן:</b>"
@@ -2899,9 +3010,10 @@ msgstr "<b>זמן:</b>"
 msgid "<b>User avatar:</b>"
 msgstr "<b>אווטאר משתמש:</b>"
 
+# Changed to: The avatar which has been set
 #: ../data/gui/vcard_information_window.ui.h:9
 msgid "<b>Configured avatar:</b>"
-msgstr "<b>אווטאר מוגדר:</b>"
+msgstr "<b>האווטאר שהוגדר:</b>"
 
 #. Family Name
 #: ../data/gui/vcard_information_window.ui.h:11
@@ -2932,25 +3044,26 @@ msgstr "הערות"
 msgid "<b>Jabber Traffic</b>"
 msgstr "<b>תעבורת Jabber</b>"
 
+# החבאת
 #: ../data/gui/xml_console_window.ui.h:4
 msgid "Hide IN stanzas"
-msgstr "הסתר סטנזות IN"
+msgstr "הסתרת סטנזות IN"
 
 #: ../data/gui/xml_console_window.ui.h:5
 msgid "Hide OUT stanzas"
-msgstr "הסתר סטנזות OUT"
+msgstr "הסתרת סטנזות OUT"
 
 #: ../data/gui/xml_console_window.ui.h:6
 msgid "Hide Presence stanzas"
-msgstr "הסתר סטנזות נוכחות"
+msgstr "הסתרת סטנזות נוכחות"
 
 #: ../data/gui/xml_console_window.ui.h:7
 msgid "Hide IQ stanzas"
-msgstr "הסתר סטנזות IQ"
+msgstr "הסתרת סטנזות IQ"
 
 #: ../data/gui/xml_console_window.ui.h:8
 msgid "Hide Message stanzas"
-msgstr "הסתר סטנזות הודעה"
+msgstr "הסתרת סטנזות הודעה"
 
 #: ../data/gui/xml_console_window.ui.h:9
 msgid "<b>Filter</b>"
@@ -2965,6 +3078,7 @@ msgstr ""
 msgid "Info/Query"
 msgstr "מידע/שאילתא"
 
+# הופעה
 #: ../data/gui/xml_console_window.ui.h:13
 msgid "_Presence"
 msgstr "_נוכחות"
@@ -2979,11 +3093,11 @@ msgstr "<b>קלט XML</b>"
 
 #: ../data/gui/zeroconf_context_menu.ui.h:2
 msgid "_Modify Account..."
-msgstr "ה_תאמת חשבון..."
+msgstr "ה_תאם חשבון..."
 
 #: ../data/gui/zeroconf_information_window.ui.h:2
 msgid "Local jid:"
-msgstr "‏JID מקומית:"
+msgstr "‫JID מקומית:"
 
 #: ../data/gui/zeroconf_information_window.ui.h:3
 msgid "Resource:"
@@ -2999,51 +3113,48 @@ msgstr "אישי"
 
 #: ../data/gajim.desktop.in.in.h:2
 msgid "Jabber IM Client"
-msgstr "לקוח מסרים מידיים Jabber"
+msgstr "לקוח מסרים מיידיים ג׳אבּר"
 
 #: ../data/gajim.desktop.in.in.h:3
 msgid "A GTK+ Jabber client"
-msgstr "לקוח ג׳אבּר GTK+‎"
+msgstr "לקוח ג׳אבּר ‭GTK+‬"
 
-#: ../data/gajim.desktop.in.in.h:4
-msgid "chat;messaging;im;jabber;xmpp;bonjour;voip"
-msgstr "צ'אט;מסרים;מסנג'ר;jabber;xmpp;bonjour;voip"
-
-#: ../src/adhoc_commands.py:325
+#: ../src/adhoc_commands.py:323
 msgid "Cancel confirmation"
 msgstr "אימות ביטול"
 
 # מצוי/ה במהלך
-#: ../src/adhoc_commands.py:326
-msgid ""
-"You are in process of executing command. Do you really want to cancel it?"
-msgstr "הינך בתוך עיצומו של תהליך הרצת פקודה. האם ברצונך לבטלו?"
+#: ../src/adhoc_commands.py:324
+msgid "You are in process of executing command. Do you really want to cancel it?"
+msgstr "הינך באמצע תהליך של הרצת פקודה. האם ברצונך לבטלו?"
 
-#: ../src/adhoc_commands.py:372
+#: ../src/adhoc_commands.py:370
 msgid "Invalid Form"
-msgstr "טופס שגוי"
+msgstr "תבנית שגויה"
 
-#: ../src/adhoc_commands.py:373
+#: ../src/adhoc_commands.py:371
 msgid "The form is not filled correctly."
-msgstr "הטופס אינו ממולא כראוי."
+msgstr "התבנית לא מולאה כראוי."
 
-#: ../src/adhoc_commands.py:392 ../src/adhoc_commands.py:416
+#: ../src/adhoc_commands.py:390
+#: ../src/adhoc_commands.py:414
 msgid "Service sent malformed data"
-msgstr "שירות שלח מידע פגום"
+msgstr "השירות שלח מידע פגום"
 
-#: ../src/adhoc_commands.py:401
+#: ../src/adhoc_commands.py:399
 msgid "Service changed the session identifier."
-msgstr "שירות שינה את מזהה הסשן."
+msgstr "השירות שינה את המזהה של הסשן."
 
-#: ../src/adhoc_commands.py:421
+# RTL, NEEDS
+#: ../src/adhoc_commands.py:419
 #, python-format
 msgid "%s - Ad-hoc Commands - Gajim"
 msgstr "‫%s - פקודות ייעודיות (‫Ad-hoc) - ‫Gajim"
 
 #. when stanza doesn't have error description
-#: ../src/adhoc_commands.py:516
+#: ../src/adhoc_commands.py:514
 msgid "Service returned an error."
-msgstr "שירות החזיר שגיאה."
+msgstr "השירות החזיר שגיאה."
 
 #. For i18n
 #: ../src/advanced_configuration_window.py:92
@@ -3066,7 +3177,8 @@ msgstr "ספרה"
 msgid "Text"
 msgstr "תמליל"
 
-#: ../src/advanced_configuration_window.py:97 ../src/chat_control.py:1065
+#: ../src/advanced_configuration_window.py:97
+#: ../src/chat_control.py:1069
 msgid "Color"
 msgstr "צבע"
 
@@ -3078,17 +3190,17 @@ msgstr "שם העדפה"
 msgid "Value"
 msgstr "ערך"
 
-#: ../src/advanced_configuration_window.py:124
+#: ../src/advanced_configuration_window.py:122
 msgid "Type"
 msgstr "טיפוס"
 
 #. we talk about option description in advanced configuration editor
-#: ../src/advanced_configuration_window.py:179
+#: ../src/advanced_configuration_window.py:177
 msgid "(None)"
-msgstr "(אין)"
+msgstr "(ללא)"
 
 # Needs to be tested
-#: ../src/advanced_configuration_window.py:305
+#: ../src/advanced_configuration_window.py:303
 msgid "Hidden"
 msgstr "מוסתר"
 
@@ -3096,181 +3208,292 @@ msgstr "מוסתר"
 #, python-format
 msgid "You have received new entries (and %d not displayed):"
 msgid_plural "You have received new entries (and %d not displayed):"
-msgstr[0] "קיבלת רשומות חדשות (ועוד %d אשר לא מוצגת):"
-msgstr[1] "קיבלת רשומות חדשות (ועוד %d אשר לא מוצגות):"
+msgstr[0] "קיבלת רשומות חדשות (ועוד %d שלא מוצגת):"
+msgstr[1] "קיבלת רשומות חדשות (ועוד %d שלא מוצגות):"
+
+#. the next script, executed in the "po" directory,
+#. generates the following list.
+#. #!/bin/sh
+#. LANG=$(for i in *.po; do j=${i/.po/}; echo -n "_('"$j"')":" '"$j"', " ; done)
+#. echo "{_('en'):'en'",$LANG"}"
+#: ../src/chat_control.py:86
+msgid "English"
+msgstr "אנגלית"
+
+#: ../src/chat_control.py:86
+msgid "Belarusian"
+msgstr "בלארוסית"
+
+#: ../src/chat_control.py:86
+msgid "Bulgarian"
+msgstr "בולגרית"
+
+#: ../src/chat_control.py:87
+msgid "Breton"
+msgstr "ברטונית"
+
+#: ../src/chat_control.py:87
+msgid "Czech"
+msgstr "צ׳כית"
+
+#: ../src/chat_control.py:87
+msgid "German"
+msgstr "גרמנית"
+
+#: ../src/chat_control.py:88
+msgid "Greek"
+msgstr "יוונית"
+
+#: ../src/chat_control.py:88
+msgid "British"
+msgstr "בריטית"
+
+#: ../src/chat_control.py:88
+msgid "Esperanto"
+msgstr "אספרנטו"
+
+#: ../src/chat_control.py:89
+msgid "Spanish"
+msgstr "ספרדית"
+
+#: ../src/chat_control.py:89
+msgid "Basque"
+msgstr "בסקית"
+
+#: ../src/chat_control.py:89
+msgid "French"
+msgstr "צרפתית"
+
+#: ../src/chat_control.py:90
+msgid "Croatian"
+msgstr "קרואטית"
+
+#: ../src/chat_control.py:90
+msgid "Italian"
+msgstr "איטלקית"
+
+# b = book language
+#: ../src/chat_control.py:90
+msgid "Norwegian (b)"
+msgstr "נורבגית (ס)"
+
+#: ../src/chat_control.py:91
+msgid "Dutch"
+msgstr "הולנדית"
+
+#: ../src/chat_control.py:91
+msgid "Norwegian"
+msgstr "נורבגית"
+
+#: ../src/chat_control.py:91
+msgid "Polish"
+msgstr "פולנית"
+
+#: ../src/chat_control.py:92
+msgid "Portuguese"
+msgstr "פורטוגזית"
+
+#: ../src/chat_control.py:92
+msgid "Brazilian Portuguese"
+msgstr "פורטוגזית ברזילאית"
+
+#: ../src/chat_control.py:93
+msgid "Russian"
+msgstr "רוסית"
+
+#: ../src/chat_control.py:93
+msgid "Serbian"
+msgstr "סרבית"
+
+#: ../src/chat_control.py:93
+msgid "Slovak"
+msgstr "סלובקית"
+
+#: ../src/chat_control.py:94
+msgid "Swedish"
+msgstr "שוודית"
+
+#: ../src/chat_control.py:94
+msgid "Chinese (Ch)"
+msgstr "סינית (Ch)"
 
-#: ../src/chat_control.py:209
+#: ../src/chat_control.py:94
+msgid "Hebrew"
+msgstr "עברית"
+
+#: ../src/chat_control.py:237
 msgid "Ping?"
 msgstr "פינג?"
 
-#: ../src/chat_control.py:214
+#: ../src/chat_control.py:242
 #, python-format
 msgid "Pong! (%s s.)"
-msgstr "פונג! (%s ש.)"
+msgstr "פונג! (%s s.)"
 
-#: ../src/chat_control.py:219
+#: ../src/chat_control.py:247
 msgid "Error."
 msgstr "שגיאה."
 
+#: ../src/chat_control.py:582
+msgid "Spelling language"
+msgstr "שפת איות"
+
 #. we are not connected
-#: ../src/chat_control.py:800
+#: ../src/chat_control.py:614
+#: ../src/chat_control.py:830
 msgid "A connection is not available"
 msgstr "חיבור אינו זמין"
 
-#: ../src/chat_control.py:801
+#: ../src/chat_control.py:615
+#: ../src/chat_control.py:831
 msgid "Your message can not be sent until you are connected."
-msgstr "הודעתך לא יכולה להישלח עד אשר תהיה מחובר."
+msgstr "ההודעה לא יכולה להישלח עד שתהיה מחובר."
 
-#: ../src/chat_control.py:1047
+#: ../src/chat_control.py:1051
 msgid "Underline"
 msgstr "קו תחתון"
 
-#: ../src/chat_control.py:1048
+#: ../src/chat_control.py:1052
 msgid "Strike"
 msgstr "קו חוצה"
 
-#: ../src/chat_control.py:1071
+#: ../src/chat_control.py:1075
 msgid "Font"
 msgstr "גופן"
 
 # Reset
-#: ../src/chat_control.py:1080
+#: ../src/chat_control.py:1084
 msgid "Clear formating"
 msgstr "איפוס עיצוב"
 
-#: ../src/chat_control.py:1157
+#: ../src/chat_control.py:1161
 msgid "Really send file?"
 msgstr "האם באמת לשלוח קובץ?"
 
-#: ../src/chat_control.py:1158
+#: ../src/chat_control.py:1162
 #, python-format
 msgid "If you send a file to %s, he/she will know your real Jabber ID."
-msgstr "אם תשלח קובץ אל %s, הוא/היא ידעו את כתובתך (מזהה Jabber) המלאה."
-
-#: ../src/chat_control.py:1665 ../src/chat_control.py:2249
-msgid "OpenPGP encryption enabled"
-msgstr "הצפנת OpenPGP מאופשרת"
-
-#: ../src/chat_control.py:1727
-msgid "Formattings are not available when GPG is active"
-msgstr "עיצובים אינם נתמכים כאשר GPG הינו פעיל"
+msgstr "אם תשלח קובץ אל %s, הוא/היא ידעו את כתובתך (JID) המלאה."
 
-#: ../src/chat_control.py:1730
-msgid "This contact does not support HTML"
-msgstr "איש קשר זה לא תומך HTML"
+# Changed enabled with activated
+# Enabled = מאופשרת
+# Activated = מופעלת
+#: ../src/chat_control.py:1645
+#: ../src/chat_control.py:2190
+msgid "GPG encryption enabled"
+msgstr "הצפנת GPG מופעלת"
 
 #. Add to roster
-#: ../src/chat_control.py:1735 ../src/common/contacts.py:152
-#: ../src/common/contacts.py:273 ../src/common/helpers.py:67
-#: ../src/common/helpers.py:261 ../src/dialogs.py:1105 ../src/dialogs.py:2310
-#: ../src/dialogs.py:2339 ../src/dialogs.py:3551 ../src/gui_interface.py:485
-#: ../src/gui_menu_builder.py:268 ../src/gui_menu_builder.py:423
-#: ../src/roster_window.py:771 ../src/roster_window.py:1732
-#: ../src/roster_window.py:1734 ../src/roster_window.py:2082
-#: ../src/roster_window.py:3618 ../src/roster_window.py:3645
+#: ../src/chat_control.py:1699
+#: ../src/common/contacts.py:152
+#: ../src/common/contacts.py:273
+#: ../src/common/helpers.py:67
+#: ../src/common/helpers.py:261
+#: ../src/dialogs.py:1101
+#: ../src/dialogs.py:2266
+#: ../src/dialogs.py:2295
+#: ../src/gui_interface.py:484
+#: ../src/gui_menu_builder.py:262
+#: ../src/gui_menu_builder.py:416
+#: ../src/roster_window.py:767
+#: ../src/roster_window.py:1722
+#: ../src/roster_window.py:1724
+#: ../src/roster_window.py:2072
+#: ../src/roster_window.py:3689
+#: ../src/roster_window.py:3716
 msgid "Not in Roster"
 msgstr "לא ברשימה"
 
-#. change tooltip text for audio and video buttons if python-farstream is
-#. not installed
-#: ../src/chat_control.py:1760
-#: ../src/command_system/implementation/standard.py:215
-msgid "Toggle audio session"
-msgstr "הפעלת סשן שמע"
-
-#: ../src/chat_control.py:1761
-#: ../src/command_system/implementation/standard.py:225
-msgid "Toggle video session"
-msgstr "הפעלת סשן וידאו"
-
-#: ../src/chat_control.py:1763
+#: ../src/chat_control.py:1727
 msgid "Feature not available, see Help->Features"
 msgstr "תכונה זו לא זמינה, ראו עזרה->תכונות."
 
-#: ../src/chat_control.py:1767
+#: ../src/chat_control.py:1731
 msgid "Feature not supported by remote client"
 msgstr "תכונה אינה נתמכת על ידי לקוח מרוחק"
 
-#: ../src/chat_control.py:1780
-msgid "Send files"
-msgstr "שליחת קבצים"
-
-#: ../src/chat_control.py:1785
+#: ../src/chat_control.py:1748
 msgid "This contact does not support file transfer."
 msgstr "איש קשר זה אינו תומך בהעברת קבצים."
 
-#: ../src/chat_control.py:1788
+#: ../src/chat_control.py:1751
 msgid "You need to know the real JID of the contact to send him or her a file."
-msgstr ""
-"יש צורך לדעת את הכתובת המממשת (JID) של איש הקשר כדי לשלוח אליו או אליה קובץ."
+msgstr "יש צורך לדעת את הכתובת (JID) של איש הקשר כדי לשלוח אליו או אליה קובץ."
 
-#: ../src/chat_control.py:1906
+#: ../src/chat_control.py:1869
 #, python-format
 msgid "%(type)s state : %(state)s, reason: %(reason)s"
-msgstr "%(type)s מצב : %(state)s, סיבה: %(reason)s"
+msgstr "‫%(type)s מצב : %(state)s, סיבה: %(reason)s"
 
-#: ../src/chat_control.py:2098
+# מן שיחת
+#: ../src/chat_control.py:2060
 #, python-format
 msgid "%(nickname)s from group chat %(room_name)s"
-msgstr "%(nickname)s מתוך שיחת קבוצה %(room_name)s"
+msgstr "‫%(nickname)s משיחת הקבוצה ‫%(room_name)s ‫"
 
 #. No key assigned nor a key is used by remote contact
-#: ../src/chat_control.py:2229 ../src/dialogs.py:5194
-msgid "No OpenPGP key assigned"
-msgstr "לא הוקצה מפתח OpenPGP"
-
-#: ../src/chat_control.py:2230
-msgid ""
-"No OpenPGP key is assigned to this contact. So you cannot encrypt messages "
-"with OpenPGP."
-msgstr ""
-"אין מפתח OpenPGP אשר מוקצה לאיש קשר זה. כך שאין אין באפשרותך להצפין הודעות "
-"באמצעות OpenPGP."
-
-#: ../src/chat_control.py:2239
-msgid "OpenPGP encryption disabled"
-msgstr "הצפנת OpenPGP מנוטרלת"
-
-#: ../src/chat_control.py:2265
+#: ../src/chat_control.py:2170
+#: ../src/dialogs.py:5092
+msgid "No GPG key assigned"
+msgstr "לא הוקצה מפתח GPG"
+
+# באפשרותך
+# כך שאין ב
+#: ../src/chat_control.py:2171
+msgid "No GPG key is assigned to this contact. So you cannot encrypt messages with GPG."
+msgstr "לא הוקצה מפתח GPG לאיש קשר זה. אי לכך אין ביכולתך להצפין הודעות באמצעות GPG."
+
+# Changed disabled with neutralized (which is pretty much the exact same)
+# Disable = נטרל
+# Neutralized = נוטרל
+#: ../src/chat_control.py:2180
+msgid "GPG encryption disabled"
+msgstr "הצפנת GPG מנוטרלת כעת"
+
+#: ../src/chat_control.py:2206
 msgid "Session WILL be logged"
 msgstr "הסשן יירשם"
 
-#: ../src/chat_control.py:2267
+#: ../src/chat_control.py:2208
 msgid "Session WILL NOT be logged"
 msgstr "הסשן לא יירשם"
 
+# Needs to be tested
 #. encryption %s active
-#: ../src/chat_control.py:2284
+#: ../src/chat_control.py:2225
 msgid "is"
 msgstr "×”×™× ×”"
 
-#: ../src/chat_control.py:2284
+# Needs to be tested
+#: ../src/chat_control.py:2225
 msgid "is NOT"
-msgstr "אינה"
+msgstr "*אינה*"
 
+# Needs to be tested
 #. chat session %s be logged
-#: ../src/chat_control.py:2286
+#: ../src/chat_control.py:2227
 msgid "will"
 msgstr "יירשם"
 
-#: ../src/chat_control.py:2286
+#: ../src/chat_control.py:2227
 msgid "will NOT"
 msgstr "לא יירשם"
 
+# Needs to be tested
 #. About encrypted chat session
-#: ../src/chat_control.py:2290
+#: ../src/chat_control.py:2231
 msgid "and authenticated"
 msgstr "והינה מאומת"
 
 #. About encrypted chat session
-#: ../src/chat_control.py:2294
+#: ../src/chat_control.py:2235
 msgid "and NOT authenticated"
 msgstr "ואינה מאומתת"
 
 #. status will become 'is' or 'is not', authentificaed will become
 #. 'and authentificated' or 'and not authentificated', logged will become
 #. 'will' or 'will not'
-#: ../src/chat_control.py:2301
+#: ../src/chat_control.py:2242
 #, python-format
 msgid ""
 "%(type)s encryption %(status)s active %(authenticated)s.\n"
@@ -3279,70 +3502,74 @@ msgstr ""
 "הצפנת %(type)s %(status)s מופעלת %(authenticated)s.\n"
 "סשן שיחתך %(logged)s ברשומות ההיסטוריה."
 
-#: ../src/chat_control.py:2439
+# הסדרת סשן בוטלה
+#: ../src/chat_control.py:2370
 msgid "Session negotiation cancelled"
 msgstr "משא ומתן סשן בוטל"
 
-#: ../src/chat_control.py:2449
+#: ../src/chat_control.py:2380
 msgid "This session WILL be archived on server"
 msgstr "סשן זה יושם בארכיון על שרת"
 
-#: ../src/chat_control.py:2451
+#: ../src/chat_control.py:2382
 msgid "This session WILL NOT be archived on server"
 msgstr "סשן זה לא יושם בארכיון על שרת"
 
-#: ../src/chat_control.py:2460
+#: ../src/chat_control.py:2391
 msgid "This session is encrypted"
 msgstr "סשן זה הינו מוצפן"
 
-#: ../src/chat_control.py:2463
+#: ../src/chat_control.py:2394
 msgid " and WILL be logged"
 msgstr " ויירשם"
 
-#: ../src/chat_control.py:2465
+#: ../src/chat_control.py:2396
 msgid " and WILL NOT be logged"
 msgstr " ולא יירשם"
 
-#: ../src/chat_control.py:2470
-msgid ""
-"Remote contact's identity not verified. Click the shield button for more "
-"details."
-msgstr "זהות איש קשר מרוחק לא מאומתת. לחץ על לחצן המגן עבור פרטים נוספים."
+#: ../src/chat_control.py:2401
+msgid "Remote contact's identity not verified. Click the shield button for more details."
+msgstr "זהות איש קשר מרוחק לא מאומתת. נא ללחוץ על כפתור המגן עבור פרטים נוספים."
 
-#: ../src/chat_control.py:2472
+#: ../src/chat_control.py:2403
 msgid "E2E encryption disabled"
-msgstr "הצפנת E2E מנוטרלת כעת"
+msgstr "הצפנת E2E (קצה אל קצה) מנוטרלת כעת"
 
-#: ../src/chat_control.py:2520 ../src/chat_control.py:2534
+#: ../src/chat_control.py:2451
+#: ../src/chat_control.py:2465
 msgid "The following message was NOT encrypted"
 msgstr "ההודעה הבאה לא הוצפנה"
 
-#: ../src/chat_control.py:2526
+#: ../src/chat_control.py:2457
 msgid "The following message was encrypted"
 msgstr "ההודעה הבאה הוצפנה"
 
+# זה עתה קיבלת
+# קיבלת זה עתה
+# קיבלת כעת
 #. %s is being replaced in the code with JID
-#: ../src/chat_control.py:2797
+#: ../src/chat_control.py:2728
 #, python-format
 msgid "You just received a new message from \"%s\""
 msgstr "זה עתה קיבלת הודעה חדשה מן \"%s\""
 
-#: ../src/chat_control.py:2799
-msgid ""
-"If you close this tab and you have history disabled, this message will be "
-"lost."
-msgstr ""
-"אם כרטיסייה זו תיסגר ובמידה ורשימת היסטוריה מנוטרלת אצלך. הודעה זו תאבד."
-
-#: ../src/chat_control.py:2967 ../src/common/connection.py:523
-#: ../src/common/connection_handlers.py:1145
-#: ../src/common/connection_handlers.py:1269
-#: ../src/common/connection_handlers_events.py:913
-#: ../src/common/logger.py:1161 ../src/gajim.py:229 ../src/session.py:98
+# תאובד
+#: ../src/chat_control.py:2729
+msgid "If you close this tab and you have history disabled, this message will be lost."
+msgstr "אם לשונית זו תיסגר ובמידה ורשימת היסטוריה מנוטרלת אצלך. הודעה זו תאבד."
+
+#: ../src/chat_control.py:2896
+#: ../src/common/connection_handlers_events.py:911
+#: ../src/common/connection_handlers.py:955
+#: ../src/common/connection_handlers.py:1077
+#: ../src/common/connection.py:462
+#: ../src/common/logger.py:1155
+#: ../src/gajim.py:208
+#: ../src/session.py:100
 msgid "Database Error"
 msgstr "שגיאת מסד נתונים"
 
-#: ../src/chat_control.py:2968
+#: ../src/chat_control.py:2897
 #, python-format
 msgid ""
 "The database file (%s) cannot be read. Try to repair it or remove it (all "
@@ -3351,64 +3578,76 @@ msgstr ""
 "קובץ מסד הנתונים (%s) לא ניתן לקריאה. נסה לתקנו או להסירו (כל ההיסטוריה "
 "תאבד)."
 
-#: ../src/chat_control.py:3205 ../src/gui_interface.py:1161
+#: ../src/chat_control.py:3134
+#: ../src/gui_interface.py:1151
 #, python-format
 msgid ""
 "Unable to decrypt message from %s\n"
 "It may have been tampered with."
 msgstr ""
-"אין אפשרות לפענח הודעה מאת %s\n"
-"ייתכן כי הודעה זו נפגמה."
+"לא ניתן לפענח את ההודעה מאת %s\n"
+"ייתכן שההודעה נפגמה."
 
-#: ../src/chat_control.py:3262
+# See: LRE string PDF
+#: ../src/chat_control.py:3167
 #, python-format
 msgid "%(name)s is now %(status)s"
-msgstr "%(name)s מצוי/ה כעת במצב %(status)s"
+msgstr "‫%(name)s מצוי/ה כעת במצב %(status)s "
 
-#: ../src/chat_control.py:3321
+#: ../src/chat_control.py:3226
 msgid "File transfer"
 msgstr "העברת קובץ"
 
-#: ../src/chat_control.py:3324
+#: ../src/chat_control.py:3229
 msgid "Size"
 msgstr "גודל"
 
-#: ../src/chat_control.py:3326
+# Would it be proper to translate to _Download?
+#: ../src/chat_control.py:3231
 msgid "_Accept"
-msgstr "_קבל"
+msgstr "_קבלה"
 
-#: ../src/chat_control.py:3347 ../src/filetransfers_window.py:211
+#: ../src/chat_control.py:3252
+#: ../src/filetransfers_window.py:211
 msgid "File transfer completed"
 msgstr "העברת קובץ הושלמה"
 
-#: ../src/chat_control.py:3383 ../src/dialogs.py:2927 ../src/dialogs.py:4614
-#: ../src/gui_interface.py:646 ../src/notify.py:278
+# הזמנת שיחת קבוצה
+#: ../src/chat_control.py:3288
+#: ../src/dialogs.py:2828
+#: ../src/gui_interface.py:645
+#: ../src/notify.py:278
 msgid "Groupchat Invitation"
 msgstr "הזמנה אל שיחת קבוצה"
 
-#: ../src/chat_control.py:3405 ../src/gui_interface.py:1019
-#: ../src/roster_window.py:1991
+#: ../src/chat_control.py:3310
+#: ../src/gui_interface.py:1009
+#: ../src/roster_window.py:1981
 msgid "Remote contact stopped transfer"
 msgstr "ההעברה הופסקה על ידי איש קשר מרוחק"
 
-#: ../src/chat_control.py:3407 ../src/gui_interface.py:1022
-#: ../src/roster_window.py:1993
+#: ../src/chat_control.py:3312
+#: ../src/gui_interface.py:1012
+#: ../src/roster_window.py:1983
 msgid "Error opening file"
 msgstr "שגיאה בפתיחת הקובץ"
 
-#: ../src/chat_control.py:3409 ../src/filetransfers_window.py:247
+#: ../src/chat_control.py:3314
+#: ../src/filetransfers_window.py:247
 msgid "File transfer stopped"
 msgstr "העברת קובץ נעצרה"
 
-#: ../src/chat_control.py:3412 ../src/filetransfers_window.py:226
+#: ../src/chat_control.py:3317
+#: ../src/filetransfers_window.py:226
 #: ../src/filetransfers_window.py:233
 msgid "File transfer cancelled"
 msgstr "העברת קובץ בוטלה"
 
-#: ../src/chat_control.py:3413 ../src/filetransfers_window.py:226
+#: ../src/chat_control.py:3318
+#: ../src/filetransfers_window.py:226
 #: ../src/filetransfers_window.py:234
 msgid "Connection with peer cannot be established."
-msgstr "חיבור עם עמית לא היה אפשרי לביסוס."
+msgstr "חיבור עם עמית לא היה ניתן לביסוס."
 
 #: ../src/command_system/implementation/custom.py:105
 msgid "The same as using a doc-string, except it supports translation"
@@ -3424,17 +3663,16 @@ msgstr "הרצת ביטוי בתוך מעטפת, שליחת פלט"
 
 #: ../src/command_system/implementation/middleware.py:74
 msgid "Error during command execution!"
-msgstr "שגיאה במהלך הוצאה לפועל של פקודה!"
+msgstr ""
 
+# השיחה
 #: ../src/command_system/implementation/standard.py:50
 msgid "Hide the chat buttons"
 msgstr "הסתרת לחצני שיחה"
 
 #: ../src/command_system/implementation/standard.py:56
-msgid ""
-"Show help on a given command or a list of available commands if -a is given"
-msgstr ""
-"הצגת עזרה על פקודה נתונה או רשימה של פקודות זמינות במידה והארגומנט ‎-a ניתן"
+msgid "Show help on a given command or a list of available commands if -a is given"
+msgstr "הצגת עזרה אודות פקודה נתונה או רשימה של פקודות זמינות במידה והארגומנט ‫‭-a‬ ניתן"
 
 #: ../src/command_system/implementation/standard.py:83
 msgid "Send a message to the contact"
@@ -3446,20 +3684,23 @@ msgstr "שליחת פעולה (בגוף שלישי) אל השיחה הנוכחי
 
 #: ../src/command_system/implementation/standard.py:93
 msgid "Show logged messages which mention given text"
-msgstr "הצגת הודעות רשומות אשר מאזכרות תמליל נתון"
+msgstr "הצגת הודעות רשומות שמאזכרות תמליל נתון"
 
 # gajim-remote?
 #: ../src/command_system/implementation/standard.py:99
 #, python-format
 msgid "%s: Nothing found"
-msgstr "‏%s: לא נמצא דבר"
+msgstr "‫%s: לא נמצא דבר"
 
 #: ../src/command_system/implementation/standard.py:105
 msgid "Limit must be an integer"
 msgstr "תחום מוכרח להיות ספרה"
 
-#. Do not translate online, away, chat, xa, dnd
-#: ../src/command_system/implementation/standard.py:130
+# BUG: move one line like שיוך and תפקיד
+#     Status can be given as one of the following values:\n
+#     online, away, chat, xa, dnd.\n
+#
+#: ../src/command_system/implementation/standard.py:129
 msgid ""
 "\n"
 "    Set the current status\n"
@@ -3471,126 +3712,130 @@ msgstr ""
 "\n"
 "    קביעת מצב החיבור הנוכחי\n"
 "\n"
-"    מצב יכול להיות נתון בתור אחד מתוך הערכים הבאים:\n"
-"    ‏online, away, chat, xa, dnd.\n"
+"    מצב יכול להיות נתון כאחד מן הערכים הבאים:\n"
+"    online, away, chat, xa, dnd.\n"
 "    "
 
-#: ../src/command_system/implementation/standard.py:148
+#: ../src/command_system/implementation/standard.py:147
 msgid "Set the current status to away"
 msgstr "קביעת מצב החיבור הנוכחי אל נעדר"
 
-#: ../src/command_system/implementation/standard.py:151
-#: ../src/common/commands.py:110 ../src/common/helpers.py:249
+# אני לא כאן
+# לא נמצא
+#: ../src/command_system/implementation/standard.py:150
+#: ../src/common/commands.py:109
+#: ../src/common/helpers.py:249
 #: ../src/tooltips.py:189
 msgid "Away"
 msgstr "נעדר"
 
-#: ../src/command_system/implementation/standard.py:162
+#: ../src/command_system/implementation/standard.py:161
 msgid "Set the current status to online"
 msgstr "קביעת מצב החיבור הנוכחי אל מקוון"
 
-#: ../src/command_system/implementation/standard.py:165
+#: ../src/command_system/implementation/standard.py:164
 msgid "Available"
 msgstr "זמין"
 
-#: ../src/command_system/implementation/standard.py:185
-#: ../src/command_system/implementation/standard.py:267
+#: ../src/command_system/implementation/standard.py:184
+#: ../src/command_system/implementation/standard.py:266
 msgid "Clear the text window"
 msgstr "טיהור תמליל החלון"
 
-#: ../src/command_system/implementation/standard.py:190
-msgid "Toggle the OpenPGP encryption"
-msgstr "הפעלת הצפנת OpenPGP"
+# BUG: should be> Toggle GPG encryption
+#: ../src/command_system/implementation/standard.py:189
+msgid "Toggle the GPG encryption"
+msgstr "הפעלת הצפנת ‫GPG"
 
-#: ../src/command_system/implementation/standard.py:195
+#: ../src/command_system/implementation/standard.py:194
 msgid "Send a ping to the contact"
 msgstr "שליחת פינג אל איש הקשר"
 
-#: ../src/command_system/implementation/standard.py:198
+#: ../src/command_system/implementation/standard.py:197
 msgid "Command is not supported for zeroconf accounts"
 msgstr "פקודה לא נתמכת עבור חשבונות zeroconf"
 
-#: ../src/command_system/implementation/standard.py:202
+#: ../src/command_system/implementation/standard.py:201
 msgid "Send DTMF sequence through an open audio session"
-msgstr "שליחת רצף טזמ״ת (DTMF) מבעד סשן שמע פתוח"
+msgstr "שליחת רצף טזמ״ת ‫(DTMF) מבעד סשן שמע פתוח"
 
 # סשנים של שמע
-#: ../src/command_system/implementation/standard.py:205
+#: ../src/command_system/implementation/standard.py:204
 msgid "No open audio sessions with the contact"
 msgstr "לא קיימים סשני שמע פתוחים עם איש הקשר"
 
-#: ../src/command_system/implementation/standard.py:208
+#: ../src/command_system/implementation/standard.py:207
 #, python-format
 msgid "%s is not a valid tone"
-msgstr "‏%s אינו טון (tone) תקף"
+msgstr "‫%s אינו טון (tone) תקף"
 
-#: ../src/command_system/implementation/standard.py:218
+#: ../src/command_system/implementation/standard.py:217
 msgid "Audio sessions are not available"
 msgstr "סשן שמע אינו זמין"
 
-#: ../src/command_system/implementation/standard.py:228
+#: ../src/command_system/implementation/standard.py:227
 msgid "Video sessions are not available"
 msgstr "סשן וידאו לא זמין"
 
-# תשומת לב , הקשב , צוּמִי
-#: ../src/command_system/implementation/standard.py:235
+# תשומת־לב , הקשב , צוּמִי
+#: ../src/command_system/implementation/standard.py:234
 msgid "Send a message to the contact that will attract his (her) attention"
-msgstr "שליחת הודעה אשר תסב את צומת ליבו של איש הקשר"
+msgstr "שליחת הודעה שתסב את צומת ליבו של איש הקשר"
 
-#: ../src/command_system/implementation/standard.py:274
+#: ../src/command_system/implementation/standard.py:273
 msgid "Change your nickname in a group chat"
-msgstr "שינוי שם הכינוי שלך בתוך שיחת קבוצה"
+msgstr "שינוי שם כינוייך בשיחת קבוצה"
 
 #. invalid char
-#: ../src/command_system/implementation/standard.py:279 ../src/config.py:3405
-#: ../src/dialogs.py:2154
+#: ../src/command_system/implementation/standard.py:278
+#: ../src/config.py:3387
+#: ../src/dialogs.py:2113
 msgid "Invalid nickname"
 msgstr "שם כינוי שגוי"
 
-#: ../src/command_system/implementation/standard.py:284
+# מתואר, נקוב
+#: ../src/command_system/implementation/standard.py:283
 msgid "Open a private chat window with a specified occupant"
 msgstr "פתיחת חלון שיחה פרטית עם נוכח מצוין"
 
-#: ../src/command_system/implementation/standard.py:290
-#: ../src/command_system/implementation/standard.py:299
-#: ../src/command_system/implementation/standard.py:353
-#: ../src/command_system/implementation/standard.py:365
-#: ../src/command_system/implementation/standard.py:377
+#: ../src/command_system/implementation/standard.py:289
+#: ../src/command_system/implementation/standard.py:298
+#: ../src/command_system/implementation/standard.py:352
+#: ../src/command_system/implementation/standard.py:363
+#: ../src/command_system/implementation/standard.py:374
 msgid "Nickname not found"
 msgstr "שם כינוי לא נמצא"
 
 # BUG: him or her or they
 # he she
-#: ../src/command_system/implementation/standard.py:293
-msgid ""
-"Open a private chat window with a specified occupant and send him a message"
+#: ../src/command_system/implementation/standard.py:292
+msgid "Open a private chat window with a specified occupant and send him a message"
 msgstr "פתיחת חלון שיחה פרטית עם נוכח מצוין ושליחת הודעה אליו"
 
-#: ../src/command_system/implementation/standard.py:302
+#: ../src/command_system/implementation/standard.py:301
 msgid "Display or change a group chat topic"
 msgstr "הצגה או שינוי נושא של שיחת קבוצה"
 
 # תכלית
-#: ../src/command_system/implementation/standard.py:310
+#: ../src/command_system/implementation/standard.py:309
 msgid "Invite a user to a room for a reason"
 msgstr "הזמנת משתמש אל חדר עם ציון סיבה"
 
-#: ../src/command_system/implementation/standard.py:313
+#: ../src/command_system/implementation/standard.py:312
 #, python-format
 msgid "Invited %s to %s"
 msgstr "ה_זמנת %s אל %s"
 
-#: ../src/command_system/implementation/standard.py:316
+#: ../src/command_system/implementation/standard.py:315
 msgid "Join a group chat given by a jid, optionally using given nickname"
-msgstr "הצטרפות אל שיחת קבוצה לפי jid, אפשרי לעשות שימוש בשם כינוי נתון"
+msgstr "הצטרפות אל שיחת קבוצה לפי כתובת ‫jid, אפשרי לעשות שימוש בשם כינוי נתון"
 
-#: ../src/command_system/implementation/standard.py:333
-msgid ""
-"Leave the groupchat, optionally giving a reason, and close tab or window"
-msgstr ""
-"עזיבת שיחת קבוצה, קיימת אפשרות לתת סיבה, ולסגור את הכרטיסייה או את החלון"
+# אפשרי לתת
+#: ../src/command_system/implementation/standard.py:332
+msgid "Leave the groupchat, optionally giving a reason, and close tab or window"
+msgstr "עזיבת שיחת קבוצה, קיימת אפשרות לתת סיבה, ולסגור את הלשונית או החלון"
 
-#: ../src/command_system/implementation/standard.py:338
+#: ../src/command_system/implementation/standard.py:337
 msgid ""
 "\n"
 "    Ban user by a nick or a jid from a groupchat\n"
@@ -3599,75 +3844,65 @@ msgid ""
 "    "
 msgstr ""
 "\n"
-"    חסימת משתמש מתוך שיחת קבוצה לפי כינוי או לפי jid\n"
+"    חסימת משתמש מן שיחת קבוצה לפי כינוי או לפי כתובת ‫jid\n"
 "\n"
-"    במידה ושם כינוי נתון לא נמצא זה ייוחס בתור jid.\n"
+"    במידה ושם כינוי נתון לא נמצא זה ייוחס ככתובת ‫jid.\n"
 "    "
 
-#: ../src/command_system/implementation/standard.py:350
+#: ../src/command_system/implementation/standard.py:349
 msgid "Kick user by a nick from a groupchat"
-msgstr "בעיטת משתמש מתוך שיחת קבוצה לפי כינוי"
+msgstr "בעיטת משתמש מן שיחת קבוצה לפי כינוי"
 
-#. Do not translate moderator, participant, visitor, none
-#: ../src/command_system/implementation/standard.py:358
+# אחראי, משתתף, מבקר, ללא
+#: ../src/command_system/implementation/standard.py:356
 msgid ""
 "Set occupant role in group chat.\n"
 "    Role can be given as one of the following values:\n"
 "    moderator, participant, visitor, none"
 msgstr ""
-"קביעת תפקיד נוכח בתוך שיחת קבוצה.\n"
-"    תפקיד יכול להיות נתון בתור אחד מתוך הערכים הבאים:\n"
-"    ‏moderator, participant, visitor, none"
+"הגדרת תפקיד נוכח בשיחת קבוצה.\n"
+"    תפקיד יכול להיות נתון כאחד מן הערכים הבאים:\n"
+"    ‫moderator, participant, visitor, none"
 
-#: ../src/command_system/implementation/standard.py:363
+#: ../src/command_system/implementation/standard.py:361
 msgid "Invalid role given"
 msgstr "ניתן תפקיד שגוי"
 
-#. Do not translate owner, admin, member, outcast, none
-#: ../src/command_system/implementation/standard.py:370
+# בעלים, מנהל, חבר, מוחרם, ללא
+#: ../src/command_system/implementation/standard.py:367
 msgid ""
 "Set occupant affiliation in group chat.\n"
 "    Affiliation can be given as one of the following values:\n"
 "    owner, admin, member, outcast, none"
 msgstr ""
-"קביעת שיוך נוכח בתוך שיחת קבוצה.\n"
-"    שיוך יכול להיות נתון בתור אחד מתוך הערכים הבאים:\n"
-"    ‏owner, admin, member, outcast, none"
+"הגדרת שיוך נוכח בשיחת קבוצה.\n"
+"    שיוך יכול להיות נתון כאחד מן הערכים הבאים:\n"
+"    ‫owner, admin, member, outcast, none"
 
-#: ../src/command_system/implementation/standard.py:375
+#: ../src/command_system/implementation/standard.py:372
 msgid "Invalid affiliation given"
 msgstr "ניתן שיוך שגוי"
 
-#: ../src/command_system/implementation/standard.py:383
+#: ../src/command_system/implementation/standard.py:380
 msgid "Display names of all group chat occupants"
-msgstr "הצגת שמות של כל הנוכחים בתוך שיחת קבוצה"
+msgstr "הצגת השמות של כל הנוכחים בשיחת קבוצה"
 
-#: ../src/command_system/implementation/standard.py:405
+#: ../src/command_system/implementation/standard.py:402
 msgid "Forbid an occupant to send you public or private messages"
 msgstr "אסירה על נוכח לשלוח אליך הודעות פומביות או פרטיות"
 
-#: ../src/command_system/implementation/standard.py:410
+#: ../src/command_system/implementation/standard.py:407
 msgid "Allow an occupant to send you public or private messages"
 msgstr "התרה לנוכח לשלוח לך הודעות פומביות או פרטיות"
 
-#: ../src/command_system/mapping.py:165 ../src/command_system/mapping.py:175
-#: ../src/command_system/mapping.py:195
-#, fuzzy
-msgid "Missing arguments"
-msgstr "cli?"
-
-#: ../src/command_system/mapping.py:262
-#, fuzzy
-msgid "Excessive arguments"
-msgstr "cli?"
-
 #: ../src/common/check_paths.py:39
 msgid "creating logs database"
-msgstr "יוצר כעת רשומות מסד נתונים"
+msgstr "רשומות מסד נתונים נוצרות כעת"
 
+# מתייצר
 #: ../src/common/check_paths.py:87
 msgid "creating cache database"
-msgstr "יוצר כעת מטמון מסד נתונים"
+msgstr "מטמון מסד נתונים נוצר כעת"
 
 #: ../src/common/check_paths.py:278 ../src/common/check_paths.py:285
 #: ../src/common/check_paths.py:292 ../src/common/check_paths.py:299
@@ -3675,153 +3910,171 @@ msgstr "יוצר כעת מטמון מסד נתונים"
 #: ../src/common/check_paths.py:320 ../src/common/check_paths.py:327
 #, python-format
 msgid "%s is a file but it should be a directory"
-msgstr "‏%s הינו קובץ אך אמור להיות מדור"
-
-#: ../src/common/check_paths.py:279 ../src/common/check_paths.py:286
-#: ../src/common/check_paths.py:293 ../src/common/check_paths.py:300
-#: ../src/common/check_paths.py:307 ../src/common/check_paths.py:314
-#: ../src/common/check_paths.py:321 ../src/common/check_paths.py:328
-#: ../src/common/check_paths.py:338 ../src/common/check_paths.py:346
-#, fuzzy
+msgstr "‫%s הינו קובץ אך אמור להיות מדור"
+
+# CLI?
+# The session of Gajim will end now
+# הסשן של Gajim יסויים כעת
+#: ../src/common/check_paths.py:279
+#: ../src/common/check_paths.py:286
+#: ../src/common/check_paths.py:293
+#: ../src/common/check_paths.py:300
+#: ../src/common/check_paths.py:307
+#: ../src/common/check_paths.py:314
+#: ../src/common/check_paths.py:321
+#: ../src/common/check_paths.py:328
+#: ../src/common/check_paths.py:338
+#: ../src/common/check_paths.py:346
 msgid "Gajim will now exit"
-msgstr "cli"
+msgstr ""
 
 #: ../src/common/check_paths.py:337 ../src/common/check_paths.py:345
 #, python-format
 msgid "%s is a directory but should be a file"
-msgstr "‏%s הינו מדור אך אמור להיות קובץ"
+msgstr "‫%s הינו מדור אך אמור להיות קובץ"
 
 #: ../src/common/check_paths.py:366
 #, python-format
 msgid "creating %s directory"
 msgstr "יוצר כעת מדור %s"
 
-#: ../src/common/commands.py:86
+#: ../src/common/commands.py:85
 msgid "Change status information"
 msgstr "שנה מידע מצב"
 
-#: ../src/common/commands.py:101
+#: ../src/common/commands.py:100
 msgid "Change status"
-msgstr "שנה מצב חיבור"
+msgstr "שנה מצב־חיבור"
 
-#: ../src/common/commands.py:102
+#: ../src/common/commands.py:101
 msgid "Set the presence type and description"
-msgstr "קביעת טיפוס ותיאור הנוכחות"
+msgstr "הגדרת טיפוס הנוכחות ותיאור"
 
 # BUG: Free for Chat
 # BUG: x2
-#: ../src/common/commands.py:108
+#: ../src/common/commands.py:107
 msgid "Free for chat"
 msgstr "חופשי לשיחה"
 
-#: ../src/common/commands.py:109
+#: ../src/common/commands.py:108
 msgid "Online"
 msgstr "מקוון"
 
-#: ../src/common/commands.py:111
+#: ../src/common/commands.py:110
 msgid "Extended away"
 msgstr "נעדר לזמן ארוך"
 
-#: ../src/common/commands.py:112
+#: ../src/common/commands.py:111
 msgid "Do not disturb"
 msgstr "נא לא להפריע"
 
 # Needs to be tested
-#: ../src/common/commands.py:113
+#: ../src/common/commands.py:112
 msgid "Offline - disconnect"
 msgstr "לא מקוון - מנותק"
 
 # BUG: Remove colon because it is appearing in Psi with two colons
 # תיאור נוכחות::
-#: ../src/common/commands.py:118
+#: ../src/common/commands.py:117
 msgid "Presence description:"
 msgstr "תיאור נוכחות:"
 
-#: ../src/common/commands.py:153 ../src/common/commands.py:330
+# The word השתנה is also urination so do not use it
+# המצב שונה.
+#: ../src/common/commands.py:152
+#: ../src/common/commands.py:324
 msgid "The status has been changed."
 msgstr "מצב החיבור השתנה."
 
-#: ../src/common/commands.py:185 ../src/common/commands.py:211
+#: ../src/common/commands.py:184
+#: ../src/common/commands.py:210
 msgid "Leave Groupchats"
 msgstr "עזיבת שיחות קבוצה"
 
-#: ../src/common/commands.py:201
+#: ../src/common/commands.py:200
 #, python-format
 msgid "%(nickname)s on %(room_jid)s"
-msgstr "%(nickname)s בחדר %(room_jid)s"
+msgstr "‫%(nickname)s בתוך החדר %(room_jid)s"
 
-#: ../src/common/commands.py:205
+#: ../src/common/commands.py:204
 msgid "You have not joined a groupchat."
 msgstr "לא הצטרפת אל שיחת קבוצה."
 
-#: ../src/common/commands.py:212
+#: ../src/common/commands.py:211
 msgid "Choose the groupchats you want to leave"
-msgstr "בחירת שיחות קבוצה אשר ברצונך לעזוב"
+msgstr "בחירת שיחות קבוצה שברצונך לעזוב"
 
 #. Make special context menu if group is Groupchats
-#: ../src/common/commands.py:216 ../src/common/contacts.py:131
-#: ../src/common/helpers.py:67 ../src/roster_window.py:824
-#: ../src/roster_window.py:1736 ../src/roster_window.py:1738
-#: ../src/roster_window.py:2621 ../src/roster_window.py:5714
+#: ../src/common/commands.py:215
+#: ../src/common/contacts.py:131
+#: ../src/common/helpers.py:67
+#: ../src/roster_window.py:820
+#: ../src/roster_window.py:1726
+#: ../src/roster_window.py:1728
+#: ../src/roster_window.py:2611
+#: ../src/roster_window.py:5766
 msgid "Groupchats"
 msgstr "שיחות קבוצה"
 
-#: ../src/common/commands.py:257
+#: ../src/common/commands.py:256
 msgid "You left the following groupchats:"
 msgstr "עזבת את שיחות הקבוצה הבאות:"
 
-#: ../src/common/commands.py:269
+# להעביר הלאה
+# שליחת
+#: ../src/common/commands.py:268
 msgid "Forward unread messages"
-msgstr "קדם הודעות אשר לא נקראו"
+msgstr "קידום הודעות שלא נקראו"
 
-#: ../src/common/commands.py:296
+#: ../src/common/commands.py:294
 msgid "All unread messages have been forwarded."
-msgstr "כל ההודעות אשר לא נקראו קודמו."
+msgstr "כל ההודעות שלא נקראו קודמו."
 
-#: ../src/common/commands.py:304
+# ולאחר מכן התנתק
+#: ../src/common/commands.py:302
 msgid "Forward unread message then disconnect"
-msgstr "קדם הודעות אשר לא נקראו והתנתק לאחר מכן"
+msgstr "קידום הודעות שלא נקראו והתנתקות לאלתר"
 
 #: ../src/common/config.py:76
 msgid "Play sound when user is busy"
-msgstr "נגן צלילים כאשר המשתמש עסוק"
+msgstr "השמעת צלילים כאשר המשתמש עסוק"
 
+# שדון
 #: ../src/common/config.py:77
 msgid "Use D-Bus and Notification-Daemon to show notifications"
 msgstr "השתמש באפיק D-Bus וגם Notification-Daemon כדי להציג התראות"
 
 #: ../src/common/config.py:79
 msgid "Show only online and free for chat contacts in roster."
-msgstr "הצגה בלעדית של אנשי קשר מקוונים וחופשיים לשיחה ברשימה."
+msgstr "הצגה של אנשי קשר מקוונים ופנויים לשיחה בלבד ברשימה."
 
 #: ../src/common/config.py:82
 msgid "Time in minutes, after which your status changes to away."
-msgstr "זמן בדקות, אשר לאחריו מצבך ישתנה אל נעדר."
+msgstr "זמן בדקות, שלאחריו מצבך ישתנה אל נעדר."
 
 # במצב סרק
 #: ../src/common/config.py:83
 msgid "$S (Away as a result of being idle more than $T min)"
-msgstr "$S (נעדר כתוצאה מהיותי בחוסר פעילות למשך של יותר מ־$T דקות)"
+msgstr "$S (נעדר כתוצאה מהיותי בחוסר פעילות למשך יותר מ־$T דקות)"
 
+# BUG: autoaway time or the ACE entry autoawaytime?
 #: ../src/common/config.py:83
-msgid "$S will be replaced by current status message, $T by autoawaytime."
-msgstr ""
-"התווים $S יוחלפו על ידי הודעת מצב נוכחית, והתווים $T יוחלפו בערך הנקוב "
-"ברשומה autoawaytime."
+msgid "$S will be replaced by current status message, $T by autoaway time."
+msgstr "התווים $S יוחלפו על ידי הודעת מצב נוכחית, והתווים $T יוחלפו בערך הנקוב ברשומה autoawaytime."
 
+# האם אפשר למחוק את הפסיק משום שקיימת ש אחרי?
 #: ../src/common/config.py:85
 msgid "Time in minutes, after which your status changes to not available."
-msgstr "זמן בדקות, אשר לאחריו מצבך ישתנה אל לא זמין."
+msgstr "זמן בדקות, שלאחריו מצבך ישתנה אל לא זמין."
 
 #: ../src/common/config.py:86
 msgid "$S (Not available as a result of being idle more than $T min)"
-msgstr "$S (לא זמין כתוצאה מהיותי בחוסר פעילות למשך של יותר מ־$T דקות)"
+msgstr "$S (לא זמין כתוצאה מהיותי בחוסר פעילות למשך יותר מ־$T דקות)"
 
+# BUG: autoxa time or autoxatime of ACE
 #: ../src/common/config.py:86
-msgid "$S will be replaced by current status message, $T by autoxatime."
-msgstr ""
-"התווים $S יוחלפו על ידי הודעת מצב נוכחית, והתווים $T יוחלפו בערך הנקוב "
-"ברשומה autoxatime."
+msgid "$S will be replaced by current status message, $T by autoxa time."
+msgstr "התווים $S יוחלפו על ידי הודעת מצב נוכחית, והתווים $T יוחלפו בערך הנקוב ברשומה autoxatime."
 
 # מגש המערכת
 #: ../src/common/config.py:89
@@ -3833,7 +4086,7 @@ msgstr ""
 
 #: ../src/common/config.py:90
 msgid "Allow to hide the roster window even if the tray icon is not shown."
-msgstr "אפשר הסתרת הרשימה אפילו כאשר צלמית המגש איננה מוצגת."
+msgstr "אפשר הסתרת הרשימה אפילו אם צלמית המגש איננה מוצגת."
 
 #: ../src/common/config.py:95
 msgid "Incoming nickname color."
@@ -3870,6 +4123,7 @@ msgstr "צבע התראה של התנתקות איש קשר"
 msgid "New message/email notification color."
 msgstr "צבע התראה של הודעה/דוא״ל חדש/ה."
 
+# בקשה להעברת קובץ
 #. dodgerblue
 #: ../src/common/config.py:105
 msgid "File transfer request notification color."
@@ -3897,12 +4151,13 @@ msgstr "צבע התראה של הזמנה אל שיחת קבוצה"
 #. tan1
 #: ../src/common/config.py:109
 msgid "Status changed notification background color"
-msgstr "צבע רקע אחורי של התראת שינוי מצב חיבור"
+msgstr "צבע רקע אחורי של התראת שינוי מצב־חיבור"
 
 #. thistle2
 #: ../src/common/config.py:110
+#, fuzzy
 msgid "Other dialogs color."
-msgstr "צבע של תיבות דו שיח אחרות."
+msgstr "צבע דו־שיח אחר."
 
 #. white
 #: ../src/common/config.py:111
@@ -3931,15 +4186,18 @@ msgid ""
 msgstr "רשימה (רווח מפריד) של שורות (חשבונות וקבוצות) מכווצות."
 
 #. sorted alphanum
-#: ../src/common/config.py:117 ../src/common/config.py:533
-#: ../src/common/optparser.py:295 ../src/common/optparser.py:491
-#: ../src/common/optparser.py:525 ../src/gui_interface.py:2795
+#: ../src/common/config.py:117
+#: ../src/common/config.py:528
+#: ../src/common/optparser.py:295
+#: ../src/common/optparser.py:491
+#: ../src/common/optparser.py:525
+#: ../src/gui_interface.py:2761
 msgid "default"
 msgstr "ברירת מחדל"
 
 #: ../src/common/config.py:123
 msgid "Language used by speller"
-msgstr "השפה אשר בשימוש על ידי מאיית"
+msgstr "השפה שבשימוש על ידי מאיית"
 
 #: ../src/common/config.py:124
 msgid ""
@@ -3951,409 +4209,295 @@ msgstr ""
 "‏'sometimes' - הדפסת זמן כל print_ichat_every_foo_minutes דקות.\n"
 "‏'never' - לא להדפיס זמן בכלל."
 
-# while the value 1 will
+# while the value 4 will
+# בעוד שהערך 4 יספק
 #: ../src/common/config.py:125
-msgid ""
-"Print time in chats using Fuzzy Clock. Value of fuzziness from 1 to 4, or 0 "
-"to disable fuzzyclock. 1 is the most precise clock, 4 the least precise one. "
-"This is used only if print_time is 'sometimes'."
-msgstr ""
-"הדפסת זמן בתוך שיחות באמצעות שעון מעורפל. ערך הערפול נע בין 1 אל 4, או 0 "
-"לנטרול שעון מעורפל. בעוד שהערך 1 יספק את השעה המדויקת ביותר, הערך 4 יספק את "
-"השעה הכי פחות מדויקת. אפשרות זו ניתנת לשימוש רק כאשר print_time מוגדר אל "
-"'sometimes'."
+msgid "Print time in chats using Fuzzy Clock. Value of fuzziness from 1 to 4, or 0 to disable fuzzyclock. 1 is the most precise clock, 4 the least precise one. This is used only if print_time is 'sometimes'."
+msgstr "הדפסת זמן בשיחות באמצעות שעון מעורפל. ערך הערפול נע בין 1 אל 4, או 0 לנטרול שעון מעורפל. הערך 1 יספק את השעה המדויקת ביותר, הערך 4 יספק את השעה הכי פחות מדויקת. אפשרות זו ניתנת לשימוש רק אם print_time מוגדר אל 'sometimes'."
 
 #: ../src/common/config.py:128
 msgid "Treat * / _ pairs as possible formatting characters."
-msgstr "התייחסות אל צמדים של * / _  בתור תווי עיצוב אפשריים."
+msgstr "התייחסות אל צמדים של * / _  כתווי עיצוב אפשריים."
 
+# מודגשות ובו בזמן עם הכוכביות * * לא מוסרות (תווים או כוכביות)
 #: ../src/common/config.py:129
-msgid ""
-"If True, do not remove */_ . So *abc* will be bold but with * * not removed."
-msgstr ""
-"במידה והעדפה זו מופעלת, אל תסיר */_ . כך שמחרוזת כגון *אבג* תהיה מובלטת כאשר "
-"* * לא מוסרים."
+msgid "If True, do not remove */_ . So *abc* will be bold but with * * not removed."
+msgstr "במידה והעדפה זו מופעלת, אל תסיר */_ . כך שמחרוזת כגון *אבג* יהיו מודגשות ביחד עם התווים * * לא מוסרים."
 
+# If you want to
+# אם אין ברצונך
+# אם יש ברצונך
 #: ../src/common/config.py:132
 msgid ""
 "Uses ReStructured text markup to send HTML, plus ascii formatting if "
 "selected. For syntax, see http://docutils.sourceforge.net/docs/ref/rst/"
 "restructuredtext.html (If you want to use this, install docutils)"
 msgstr ""
-"השתמש בשיטת קידוד ReStructured כדי לשלוח HTML, בנוסף גם עיצוב ascii במידה "
-"ונבחר. לתחביר, ראו http://docutils.sourceforge.net/docs/ref/rst/"
-"restructuredtext.html (אם רצונך להפיק מזה שימוש, יש להתקין docutils)"
 
+# בהשלמת כינוי אוטומטית
 #: ../src/common/config.py:141
-msgid ""
-"Character to add after nickname when using nick completion (tab) in group "
-"chat."
-msgstr ""
-"תו להוספה לאחר שם כינוי כאשר משתמשים בהשלמת כינוי (tab) בתוך שיחת קבוצה."
+msgid "Character to add after nickname when using nick completion (tab) in group chat."
+msgstr "תו להוספה לאחר שם כינוי כאשר משתמשים בהשלמת כינוי (tab) בשיחת קבוצה."
 
 # מוצע
 #: ../src/common/config.py:142
-msgid ""
-"Character to propose to add after desired nickname when desired nickname is "
-"used by someone else in group chat."
-msgstr ""
-"תו להציע להוספה לאחר שם הכינוי הרצוי כאשר זה בשימוש על ידי מישהו אחר בתוך "
-"שיחת קבוצה."
+msgid "Character to propose to add after desired nickname when desired nickname is used by someone else in group chat."
+msgstr "תו להציע להוספה לאחר שם הכינוי הרצוי כאשר זה בשימוש על ידי מישהו אחר בשיחת קבוצה."
 
+# BUG: TYPO: If True, (Case is 'T', not 't')
+# תנוחת
 #: ../src/common/config.py:160
-msgid ""
-"If True, Gajim will save roster position when hiding roster, and restore it "
-"when showing roster."
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim ישמור את מיקום הרשימה כאשר הרשימה מוסתרת, "
-"וישחזרה כאשר הרשימה מוצגת."
+msgid "If true, Gajim will save roster position when hiding roster, and restore it when showing roster."
+msgstr "במידה והעדפה זו מופעלת, Gajim ישמור את מיקום הרשימה כאשר הרשימה מוסתרת, וישחזרה כאשר הרשימה מוצגת."
 
 # ראה
-#: ../src/common/config.py:172
-msgid ""
-"This option let you customize timestamp that is printed in conversation. For "
-"exemple \"[%H:%M] \" will show \"[hour:minute] \". See python doc on "
-"strftime for full documentation: http://docs.python.org/lib/module-time.html"
-msgstr ""
-"אפשרות זו מאפשרת לך להתאים את חותמת הזמן המודפסת בתוך דיון. למשל \"[%H:%M] "
-"\" תציג \"[שעה:דקה] \". לרשותך קיים מסמך Python אודות strftime עבור תיעוד "
-"מלא בכתובת: http://docs.python.org/lib/module-time.html"
+#: ../src/common/config.py:171
+msgid "This option let you customize timestamp that is printed in conversation. For exemple \"[%H:%M] \" will show \"[hour:minute] \". See python doc on strftime for full documentation: http://docs.python.org/lib/module-time.html"
+msgstr "אפשרות זו מאפשרת לך להתאים את חותמת הזמן המודפסת בדיון. למשל \"[%H:%M] \" תראה \"[שעה:דקה] \". קיים לרשותך מסמך Python אודות strftime עבור תיעוד מלא בכתובת: http://docs.python.org/lib/module-time.html"
 
-#: ../src/common/config.py:173
+#: ../src/common/config.py:172
 msgid "Characters that are printed before the nickname in conversations"
-msgstr "תווים אשר מודפסים לפני שם כינוי בתוך דיונים"
+msgstr "תווים שמודפסים לפני שם כינוי בדיונים"
 
-#: ../src/common/config.py:174
+#: ../src/common/config.py:173
 msgid "Characters that are printed after the nickname in conversations"
-msgstr "תווים אשר מודפסים אחרי שם כינוי בתוך דיונים"
+msgstr "תווים שמודפסים אחרי שם כינוי בדיונים"
 
-#: ../src/common/config.py:177
-msgid ""
-"Specify the command to run when new mail arrives, e.g.: /usr/bin/getmail -q"
-msgstr ""
-"ציון הפקודה אשר ברצונך להריץ כאשר דואר חדש מגיעה, למשל: ‎/usr/bin/getmail -q"
+# LRO character has solved the problem!
+# Yann, we can also do this:
+# למשל:\n
+# /usr/bin/getmail -q
+#: ../src/common/config.py:176
+msgid "Specify the command to run when new mail arrives, e.g.: /usr/bin/getmail -q"
+msgstr "ציון הפקודה שברצונך להריץ כאשר דואר חדש מגיעה, למשל: ‭/usr/bin/getmail -q"
 
-#: ../src/common/config.py:179
+#: ../src/common/config.py:178
 msgid "Add * and [n] in roster title?"
 msgstr "האם להוסיף * וגם [n] בכותרת הרשימה?"
 
 # נפתחת שוב
-#: ../src/common/config.py:180
-msgid ""
-"How many lines to remember from previous conversation when a chat tab/window "
-"is reopened?"
-msgstr "כמה שורות לזכור מתוך דיון קודם כאשר חלון/כרטיסייה שיחה נפתחים מחדש."
+# BUG: Question mark ? at the end
+#: ../src/common/config.py:179
+msgid "How many lines to remember from previous conversation when a chat tab/window is reopened."
+msgstr "כמה שורות לזכור מן דיון קודם כאשר חלון/לשונית שיחה נפתחת מחדש."
 
-#: ../src/common/config.py:181
+#: ../src/common/config.py:180
 msgid "How many minutes should last lines from previous conversation last."
-msgstr "כמה דקות על שורות אחרונות מתוך דיון קודם להישאר."
+msgstr "כמה דקות על שורות אחרונות מן דיון קודם להישאר."
 
 # ללא גבול/סייג
+#: ../src/common/config.py:181
+msgid "How many lines to request from server when entering a groupchat. -1 means no limit"
+msgstr "כמה שורות לבקש מן שרת בעת כניסה אל שיחת קבוצה. הערך 1- מסמל אי הגבלה"
+
+# BUG: when ? entering
 #: ../src/common/config.py:182
-msgid ""
-"How many lines to request from server when entering a groupchat. -1 means no "
-"limit"
-msgstr "כמה שורות לבקש מתוך שרת בעת כניסה אל שיחת קבוצה. הערך 1- מסמל אי הגבלה"
+msgid "How many minutes back to request logs when a entering a groupchat. -1 means no limit"
+msgstr "כמה דקות לאחור לבקש רשומות בעת התחברות אל שיחת קבוצה. הערך 1- מסמל אי הגבלה"
 
+# ניסיון
 #: ../src/common/config.py:183
-msgid ""
-"How many minutes back to request logs when entering a groupchat. -1 means no "
-"limit"
-msgstr ""
-"כמה דקות לאחור לבקש רשומות בעת התחברות אל שיחת קבוצה. הערך 1- מסמל אי הגבלה"
+msgid "How many seconds to wait before trying to autorejoin to a conference you are being disconnected from. Set to 0 to disable autorejoining."
+msgstr "כמה שניות להמתין לפני שאנו מנסים להצטרף אוטומטית אל שיחת ועידה שממנה הינך מתנתק. הגדר אל 0 כדי לנטרל הצטרפות אוטומטית."
 
+# הצטרפות חוזרת אוטומטית
 #: ../src/common/config.py:184
-msgid ""
-"How many seconds to wait before trying to autorejoin to a conference you are "
-"being disconnected from. Set to 0 to disable autorejoining."
-msgstr ""
-"כמה שניות להמתין טרם ניסיון להצטרף אוטומטית אל שיחת ועידה אשר ממנה הינך "
-"מתנתק. הגדר אל 0 כדי לנטרל הצטרפות אוטומטית."
+msgid "Should autorejoin be activated when we are being kicked from a conference?"
+msgstr "האם הצטרפות אוטומטית צריכה להיות מופעלת כאשר אנחנו נבעטים מן שיחת ועידה?"
 
 #: ../src/common/config.py:185
-msgid ""
-"Should autorejoin be activated when we are being kicked from a conference?"
-msgstr ""
-"האם על הצטרפות חוזרת אוטומטית להיות מופעלת כאשר אנחנו נבעטים מתוך שיחת ועידה?"
-
-#: ../src/common/config.py:186
-msgid ""
-"Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ "
-"Client default behaviour)."
-msgstr ""
-"שליחת הודעה בלחיצה על Ctrl+Enter ויצירת שורה חדשה באמצעות המקש Enter "
-"(התנהגות משתמטת של Mirabilis לקוח ICQ)."
+msgid "Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ Client default behaviour)."
+msgstr "שליחת הודעה בלחיצה על Ctrl+Enter ויצירת שורה חדשה באמצעות המקש Enter (התנהגות משתמטת של Mirabilis לקוח ICQ)."
 
-# Ctrl+מעלה
-#: ../src/common/config.py:188
+# מקש־למעלה
+#: ../src/common/config.py:187
 msgid "How many lines to store for Ctrl+KeyUP."
 msgstr "כמה שורות לאחסן עבור Ctrl+KeyUP."
 
-#: ../src/common/config.py:191
+#: ../src/common/config.py:190
 #, python-format
-msgid ""
-"Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' "
-"which means use wiktionary."
-msgstr ""
-"או כתובת url מותאמת עם %s בתוכה כאשר הסימן %s הינו המילה/הצירוף או "
-"'WIKTIONARY' אשר משמעותו היא להשתמש בויקימילון."
+msgid "Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' which means use wiktionary."
+msgstr "או כתובת url מותאמת עם %s בתוכה כאשר הסימן %s הינו המילה/הצירוף או 'WIKTIONARY' שמשמעותו היא לעשות שימוש בויקימילון."
 
-#: ../src/common/config.py:194
+#: ../src/common/config.py:193
 msgid "If checked, Gajim can be controlled remotely using gajim-remote."
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim יכול לפעול באופן מרוחק באמצעות gajim-remote."
+msgstr "במידה ואפשרות זו מסומנת, ביכולתו של Gajim לפעול באופן מרוחק באמצעות gajim-remote."
 
 # they = signals?
 # מוגדרת אל מנוטרלת
+#: ../src/common/config.py:194
+msgid "If True, listen to D-Bus signals from NetworkManager and change the status of accounts (provided they do not have listen_to_network_manager set to False and they sync with global status) based upon the status of the network connection."
+msgstr "במידה והעדפה זו מופעלת, הקשב אל אותות D-Bus המשודרים מן NetworkManager ושנה את מצב החיבור של חשבונות (בתנאי שאין להם את ההעדפה listen_to_network_manager מנוטרלת והם מסונכרנים עם מצב־חיבור גלובלי) על סמך המצב של חיבור רשת העבודה."
+
+# What is: one of all?
 #: ../src/common/config.py:195
-msgid ""
-"If True, listen to D-Bus signals from NetworkManager and change the status "
-"of accounts (provided they do not have listen_to_network_manager set to "
-"False and they sync with global status) based upon the status of the network "
-"connection."
-msgstr ""
-"במידה והעדפה זו מופעלת, הקשב אל אותות D-Bus המשודרים מתוך NetworkManager "
-"ושנה את מצב החיבור של חשבונות (בתנאי שאין להם את ההעדפה "
-"listen_to_network_manager מנוטרלת והם מסונכרנים עם מצב חיבור גלובלי) על סמך "
-"המצב של חיבור רשת העבודה."
+#, fuzzy
+msgid "Sent chat state notifications. Can be one of all, composing_only, disabled."
+msgstr "שליחת התראות מצב שיחה בחלון שיחה. Can be one of all, composing_only, disabled."
 
+# What is: one of all?
 #: ../src/common/config.py:196
-msgid ""
-"Sent chat state notifications. Can be one of all, composing_only, disabled."
-msgstr ""
-"שלח התראות מצב שיחה בחלון שיחה. יכול להיות אחד מאלו all, composing_only, "
-"disabled."
+#, fuzzy
+msgid "Displayed chat state notifications in chat windows. Can be one of all, composing_only, disabled."
+msgstr "הצגת התראות מצב שיחה בחלון שיחה. Can be one of all, composing_only, disabled."
 
-#: ../src/common/config.py:197
-msgid ""
-"Displayed chat state notifications in chat windows. Can be one of all, "
-"composing_only, disabled."
-msgstr ""
-"הצגת התראות מצב שיחה בחלון שיחה. יכול להיות אחד מאלו all, composing_only, "
-"disabled."
+#: ../src/common/config.py:198
+msgid "When not printing time for every message (print_time==sometimes), print it every x minutes."
+msgstr "כאשר זמן לא מודפס עבור כל הודעה (print_time==sometimes), הזמן יודפס כל x דקות."
 
 #: ../src/common/config.py:199
-msgid ""
-"When not printing time for every message (print_time==sometimes), print it "
-"every x minutes."
-msgstr ""
-"כאשר זמן לא מודפס עבור כל הודעה (print_time==sometimes), הזמן יודפס כל x "
-"דקות."
+msgid "Ask before closing a group chat tab/window."
+msgstr "שאל לפני סגירת חלון/לשונית של שיחת קבוצה."
 
+# BUG: Make it JIDs
 #: ../src/common/config.py:200
-msgid "Ask before closing a group chat tab/window."
-msgstr "שאל טרם סגירת חלון/כרטיסייה של שיחת קבוצה."
+msgid "Always ask before closing group chat tab/window in this space separated list of group chat jids."
+msgstr "שאל תמיד לפני סגירת חלון/לשונית של שיחת קבוצה ברשימה זו שמופרדת עם רווח, של כתובות JID של שיחות קבוצה."
 
+# BUG: Make it JIDs
 #: ../src/common/config.py:201
-msgid ""
-"Always ask before closing group chat tab/window in this space separated list "
-"of group chat JIDs."
-msgstr ""
-"שאל תמיד טרם סגירת חלון/כרטיסייה של שיחת קבוצה ברשימה זו אשר מופרדת עם רווח, "
-"של כתובות JID של שיחות קבוצה."
+msgid "Never ask before closing group chat tab/window in this space separated list of group chat jids."
+msgstr "לעולם אל תשאל לפני סגירת חלון/לשונית של שיחת קבוצה ברשימה זו שמופרדת עם רווח, של כתובות JID של שיחות קבוצה."
 
+# there are control?
 #: ../src/common/config.py:202
-msgid ""
-"Never ask before closing group chat tab/window in this space separated list "
-"of group chat JIDs."
-msgstr ""
-"לעולם אל תשאל טרם סגירת חלון/כרטיסייה של שיחת קבוצה ברשימה זו אשר מופרדת עם "
-"רווח, של כתובות JID של שיחות קבוצה."
-
-#: ../src/common/config.py:203
-msgid ""
-"Ask before closing tabbed chat window if there are controls that can lose "
-"data (chat, private chat, groupchat that will not be minimized)"
-msgstr ""
-"שאל טרם סגירת חלון שיחה בעל סימניות כאשר קיימים בקרים אשר עלולים לאבד מידע "
-"(שיחה, שיחה פרטית, שיחת קבוצה אשר לא תמוזער)"
+#, fuzzy
+msgid "Ask before closing tabbed chat window if there are control that can loose data (chat, private chat, groupchat that will not be minimized)"
+msgstr "שאל לפני סגירת חלון שיחה tabbed אם "
 
-#: ../src/common/config.py:206
-msgid ""
-"Comma separated list of hosts that we send, in addition of local interfaces, "
-"for File Transfer in case of address translation/port forwarding."
-msgstr ""
-"רשימה אשר מופרדת עם פסיקים, של מארחים אשר אנו שולחים, בנוסף לממשק מקומי, "
-"עבור העברת קובץ במקרה של תרגום כתובת/תיעול שערים (port forwarding)."
+#: ../src/common/config.py:205
+msgid "Comma separated list of hosts that we send, in addition of local interfaces, for File Transfer in case of address translation/port forwarding."
+msgstr "רשימה שמופרדת עם פסיקים, של מארחים שאנו שולחים, בנוסף לממשק מקומי, עבור העברת קובץ במקרה של תרגום כתובת/תיעול שערים (port forwarding)."
 
 # לפי תקן IEC
-#: ../src/common/config.py:208
+#: ../src/common/config.py:207
 msgid "IEC standard says KiB = 1024 bytes, KB = 1000 bytes."
-msgstr "תקן IEC אומר KiB‏ = 1024 ביתים, KB‏ = 1000 ביתים."
+msgstr "תקן IEC אומר KiB = 1024 ביתים, KB = 1000 ביתים."
 
-#: ../src/common/config.py:210
+#: ../src/common/config.py:209
 msgid "Notify of events in the notification area."
-msgstr "הודע על אירועים באזור ההתראה."
+msgstr "הודע לי על אירועים באזור ההתראה."
 
 # המהבהבת
 # כאשר זה מתריע על אירוע
-#: ../src/common/config.py:211
-msgid ""
-"If False, Gajim will display a static event icon instead of the blinking "
-"status icon in the notification area when notifying on event."
-msgstr ""
-"במידה ואפשרות זו מנוטרלת, Gajim יציג צלמית אירוע סטטית במקום צלמית המצב אשר "
-"ממצמצת באזור ההתראה בעת יידוע על אירוע."
+#: ../src/common/config.py:210
+msgid "If False, Gajim will display a static event icon instead of the blinking status icon in the notification area when notifying on event."
+msgstr "במידה ואפשרות זו מנוטרלת, Gajim יציג צלמית אירוע סטטית במקום צלמית המצב הממצמצת באזור ההתראה בעת יידוע על אירוע."
 
-#: ../src/common/config.py:217
+# אם רק
+#: ../src/common/config.py:216
 msgid "Show tab when only one conversation?"
-msgstr "האם להציג כרטיסייה כאשר רק דיון אחד קיים?"
+msgstr "האם להציג לשונית כאשר רק דיון אחד קיים?"
 
-#: ../src/common/config.py:218
+#: ../src/common/config.py:217
 #, fuzzy
 msgid "Show tabbed notebook border in chat windows?"
-msgstr "להציג מסגרת tabbed notebook בחלון שיחה?"
+msgstr "הצגת מסגרת tabbed notebook בחלון שיחה?"
 
-#: ../src/common/config.py:219
+#: ../src/common/config.py:218
 msgid "Show close button in tab?"
-msgstr "האם להציג לחצן סגירה בתוך כרטיסייה?"
+msgstr "האם להציג כפתור סגירה בלשונית?"
 
-#: ../src/common/config.py:220
-msgid ""
-"A list of modp groups to use in a Diffie-Hellman, highest preference first, "
-"separated by commas. Valid groups are 1, 2, 5, 14, 15, 16, 17 and 18. Higher "
-"numbers are more secure, but take longer to calculate when you start a "
-"session."
-msgstr ""
-"רשימה של קבוצות modp לשימוש בתוך Diffie-Hellman, ההעדפה הרמה ביותר ראשונה, "
-"מופרדת בפסיקים. קבוצות תקפות הינן 1, 2, 5, 14, 15, 16, 17 וגם 18. ספרות "
-"גבוהות יותר הינן יותר מאובטחות, אולם לוקחות משך זמן ארוך יותר לחישוב בהתחילך "
-"סשן חדש."
+#: ../src/common/config.py:219
+#, fuzzy
+msgid "A list of modp groups to use in a Diffie-Hellman, highest preference first, separated by commas. Valid groups are 1, 2, 5, 14, 15, 16, 17 and 18. Higher numbers are more secure, but take longer to calculate when you start a session."
+msgstr "רשימה של קבוצות modp לשימוש בתוך Diffie-Hellman, highest preference first, מופרדת בפסיקים. קבוצות תקיפות הינן 1, 2, 5, 14, 15, 16, 17 וגם 18. ספרות גבוהות יותר הינן יותר מאובטחות, אולם לוקחות משך זמן ארוך יותר לחישוב בהתחילך סשן חדש."
 
-#: ../src/common/config.py:241
+#: ../src/common/config.py:240
 msgid "Preview new messages in notification popup?"
 msgstr "האם להראות תצוגה מוקדמת של הודעות חדשות בהתראה מוקפצת?"
 
+# Changed to: A list of words that will be highlighted in group chats (you will need to use semicolon ; to separate between words)
+# ### separated by \":\", ###
+#: ../src/common/config.py:245
+msgid "A semicolon-separated list of words that will be highlighted in group chats."
+msgstr "רשימה של מילים שיובלטו בשיחות קבוצה (יש לעשות שימוש בנקודה ופסיק ; כדי להפריד בין מילים)."
+
 #: ../src/common/config.py:246
-msgid ""
-"A semicolon-separated list of words that will be highlighted in group chats."
-msgstr ""
-"רשימה של מילים שיובלטו בתוך שיחות קבוצה (יש לעשות שימוש בנקודה ופסיק ; כדי "
-"להפריד בין מילים)."
+msgid "If True, quits Gajim when X button of Window Manager is clicked. This setting is taken into account only if notification icon is used."
+msgstr "במידה והעדפה זו מופעלת, Gajim יצא כאשר לחצן X של מנהל חלונות נלחץ. יש לקחת את הגדרה זו בחשבון רק במידה וצלמית התראה בשימוש."
 
 #: ../src/common/config.py:247
-msgid ""
-"If True, quits Gajim when X button of Window Manager is clicked. This "
-"setting is taken into account only if notification icon is used."
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim יצא כאשר לחצן X של מנהל חלונות נלחץ. הגדרה זו "
-"נלקחת בחשבון רק במידה וצלמית התראה מצויה בשימוש."
+msgid "If True, Gajim will check if it's the default jabber client on each startup."
+msgstr "במידה והעדפה זו מופעלת, Gajim יבדוק בכל הפעלה אם הוא לקוח Jabber המשתמט."
 
 #: ../src/common/config.py:248
-msgid ""
-"If True, Gajim will check if it's the default jabber client on each startup."
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim יבדוק בכל הפעלה אם הוא לקוח Jabber המשתמט."
+msgid "If True, Gajim will display an icon on each tab containing unread messages. Depending on the theme, this icon may be animated."
+msgstr "במידה והעדפה זו מופעלת, Gajim יציג צלמית על כל לשונית שמכילה הודעות שלא נקראו. תלוי במוטיב שבשימוש, צלמית זו יכולה להיות מונפשת."
 
 #: ../src/common/config.py:249
-msgid ""
-"If True, Gajim will display an icon on each tab containing unread messages. "
-"Depending on the theme, this icon may be animated."
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim יציג צלמית על כל כרטיסייה המכילה הודעות אשר לא "
-"נקראו. תלוי במוטיב אשר מצוי בשימוש, צלמית זו יכולה להיות מונפשת."
-
-#: ../src/common/config.py:250
-msgid ""
-"If True, Gajim will display the status message, if not empty, for every "
-"contact under the contact name in roster window."
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim יציג הודעת מצב, בתנאי שזו לא ריקה, עבור כל איש "
-"קשר תחת שם איש קשר בחלון הרשימה."
+msgid "If True, Gajim will display the status message, if not empty, for every contact under the contact name in roster window."
+msgstr "במידה והעדפה זו מופעלת, Gajim יציג הודעת מצב, בתנאי שזו לא ריקה, עבור כל איש קשר תחת שם איש קשר בחלון הרשימה."
 
 # right is left and left is right
-#: ../src/common/config.py:256
+#: ../src/common/config.py:255
 msgid "Define the position of the avatar in roster. Can be left or right"
 msgstr ""
 "הגדרת המיקום של האווטאר ברשימה. המיקום יכול להיות בצד ימין (left) או בצד "
 "שמאל (right)"
 
 # הטמון
-#: ../src/common/config.py:257
-msgid ""
-"If True, Gajim will ask for avatar each contact that did not have an avatar "
-"last time or has one cached that is too old."
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim יבקש עבור אווטאר מכל איש קשר אשר לא היה ברשותו "
-"אווטאר בפעם אחרונה או כאשר האווטאר המוטמן עבורו הינו ישן מדי."
+#: ../src/common/config.py:256
+msgid "If True, Gajim will ask for avatar each contact that did not have an avatar last time or has one cached that is too old."
+msgstr "במידה והעדפה זו מופעלת, Gajim יבקש עבור אווטאר מכל איש קשר שלא היה ברשותו אווטאר בפעם אחרונה או כאשר אווטאר מוטמן הינו ישן מידי."
 
 # BUG: or is better than and/or
-#: ../src/common/config.py:258
-msgid ""
-"If False, Gajim will no longer print status line in chats when a contact "
-"changes his or her status and/or his or her status message."
-msgstr ""
-"במידה ואפשרות זו מנוטרלת, Gajim לא ידפיס שורות מצב בתוך שיחות כאשר איש קשר "
-"משנה מצב חיבור או הודעת מצב."
+# no longer > not
+#: ../src/common/config.py:257
+msgid "If False, Gajim will no longer print status line in chats when a contact changes his or her status and/or his or her status message."
+msgstr "במידה ואפשרות זו מנוטרלת, Gajim לא ידפיס שורות מצב בתוך שיחות כאשר איש קשר משנה מצב־חיבור או הודעת מצב."
 
 # BUG: or is better than and/or
+# BUG: Can (capital letter)
+# FOO?
 # יוזן > ישובץ
-#: ../src/common/config.py:259
-msgid ""
-"Can be \"none\", \"all\" or \"in_and_out\". If \"none\", Gajim will no "
-"longer print status line in groupchats when a member changes his or her "
-"status and/or his or her status message. If \"all\" Gajim will print all "
-"status messages. If \"in_and_out\", Gajim will only print FOO enters/leaves "
-"group chat."
-msgstr ""
-"יכול להיות \"none\" (כלל לא), \"all\" (הכל) או \"in_and_out\" (כניסה "
-"ויציאה). במידה ויוזן \"none\", ‏Gajim לא ידפיס שורות מצב בתוך שיחות קבוצה "
-"כאשר חברים בשיחת קבוצה משנים את המצב שלהם או את הודעת המצב שלהם. במידה ויוזן "
-"\"all\" ‏Gajim ידפיס את כל הודעות המצב. במידה ויוזן \"in_and_out\", ‏Gajim "
-"ידפיס FOO כניסות/עזיבות של שיחות קבוצה בלבד."
+#: ../src/common/config.py:258
+msgid "can be \"none\", \"all\" or \"in_and_out\". If \"none\", Gajim will no longer print status line in groupchats when a member changes his or her status and/or his or her status message. If \"all\" Gajim will print all status messages. If \"in_and_out\", Gajim will only print FOO enters/leaves group chat."
+msgstr "יכול להיות \"none\" (כלל לא), \"all\" (הכל) או \"in_and_out\" (כניסה ויציאה). במידה ויוזן \"none\", ‏Gajim לא ידפיס שורות מצב בשיחות קבוצה כאשר חברים בקבוצה משנים את מצב־החיבור שלהם או את הודעת המצב שלהם. במידה ויוזן \"all\" ‏Gajim ידפיס את כל הודעות המצב. במידה ויוזן \"in_and_out\", ‏Gajim ידפיס FOO כניסות/עזיבות של שיחות קבוצה בלבד."
 
-#: ../src/common/config.py:261
+#: ../src/common/config.py:260
 msgid "Log XHTML messages instead of plain text messages."
 msgstr "רישום הודעות בתסדיר XHTML במקום הודעות בתמליל רגיל."
 
 # בזמן שהם מתחברים
 # שזה עתה
 # בעת שהם
-#: ../src/common/config.py:262
+#: ../src/common/config.py:261
 msgid "Background color of contacts when they just signed in."
 msgstr "צבע רקע אחורי של אנשי קשר כאשר הם מתחברים."
 
-#: ../src/common/config.py:263
+#: ../src/common/config.py:262
 msgid "Background color of contacts when they just signed out."
 msgstr "צבע רקע אחורי של אנשי קשר כאשר הם מתנתקים."
 
-#: ../src/common/config.py:265
-msgid ""
-"If True, restored messages will use a smaller font than the default one."
-msgstr ""
-"במידה והעדפה זו מופעלת, הודעות משוחזרות יעשו שימוש בגופנים קטנים יותר מהגופן "
-"המשתמט."
+#: ../src/common/config.py:264
+msgid "If True, restored messages will use a smaller font than the default one."
+msgstr "במידה והעדפה זו מופעלת, הודעות משוחזרות יעשו שימוש בגופנים קטנים יותר מהגופן המשתמט."
 
-#: ../src/common/config.py:266
+#: ../src/common/config.py:265
 msgid "Don't show avatar for the transport itself."
-msgstr "אל תציג אווטאר עבור המוביל עצמו."
+msgstr "לא להציג אווטאר עבור המוביל עצמו."
 
-#: ../src/common/config.py:267
+# שורת המשימות
+#: ../src/common/config.py:266
 msgid "Don't show roster in the system taskbar."
-msgstr "אל תציג את הרשימה בתוך שורת המשימות של המערכת."
+msgstr "לא להציג את הרשימה בסרגל המשימות."
 
 # להבהב
-#: ../src/common/config.py:268
-msgid ""
-"If True and installed GTK+ and PyGTK versions are at least 2.8, make the "
-"window flash (the default behaviour in most Window Managers) when holding "
-"pending events."
-msgstr ""
-"במידה והעדפה זו מופעלת, והגרסאות המותקנות של ‭GTK+‬ ושל PyGTK הן לפחות 2.8, "
-"גרום לחלון להבזיק (ההתנהגות המשתמטת ברוב מנהלי החלונות) כאשר קיימים אירועים "
-"ממתינים."
+#: ../src/common/config.py:267
+msgid "If True and installed GTK+ and PyGTK versions are at least 2.8, make the window flash (the default behaviour in most Window Managers) when holding pending events."
+msgstr "במידה והעדפה זו מופעלת, והגרסאות המותקנות של ‭GTK+‬ ושל PyGTK הן לפחות 2.8, גרום לחלון להבזיק (ההתנהגות המשתמטת ברוב מנהלי החלונות) כאשר קיימים אירועים ממתינים."
 
-#: ../src/common/config.py:270
-msgid ""
-"Jabberd1.4 does not like sha info when one join a password protected group "
-"chat. Turn this option to False to stop sending sha info in group chat "
-"presences."
-msgstr ""
-"‏Jabberd1.4 לא חפץ במידע sha כאשר מאן דהו מצטרף אל שיחת קבוצה המוגנת במילת "
-"מעבר. כדי להפסיק לשלוח מידע sha בנוכחויות שיחת קבוצה יש לנטרל את אפשרות זו."
+# keep מילת־מעבר
+#: ../src/common/config.py:269
+msgid "Jabberd1.4 does not like sha info when one join a password protected group chat. Turn this option to False to stop sending sha info in group chat presences."
+msgstr "‏Jabberd1.4 לא מחבב מידע sha כאשר מאן דהו מצטרף אל שיחת קבוצה המוגנת במילת־מעבר. כדי להפסיק לשלוח מידע sha בנוכחויות שיחת קבוצה יש לנטרל את אפשרות זו."
 
+# BUG: groupchats) s/are/is sent to
+# Is, not Are
+# היכן הודעות חדשות יושמו
 #. always, never, peracct, pertype should not be translated
-#: ../src/common/config.py:273
+#: ../src/common/config.py:272
 msgid ""
 "Controls the window where new messages are placed.\n"
 "'always' - All messages are sent to a single window.\n"
@@ -4361,8 +4505,7 @@ msgid ""
 "along with the roster.\n"
 "'never' - All messages get their own window.\n"
 "'peracct' - Messages for each account are sent to a specific window.\n"
-"'pertype' - Each message type (e.g. chats vs. groupchats) is sent to a "
-"specific window."
+"'pertype' - Each message type (e.g., chats vs. groupchats) are sent to a specific window."
 msgstr ""
 "בקרה על החלון בו הודעות חדשות מושמות.\n"
 "‏'always' - כל ההודעות נשלחות אל חלון בודד.\n"
@@ -4372,7 +4515,7 @@ msgstr ""
 "‏'peracct' - הודעות עבור כל חשבון נשלחות אל חלון מסוים.\n"
 "‏'pertype' - כל טיפוס הודעה (למשל, שיחות כנגד שיחות קבוצה) נשלח אל חלון מסוים."
 
-#: ../src/common/config.py:274
+#: ../src/common/config.py:273
 msgid ""
 "Show roster on startup.\n"
 "'always' - Always show roster.\n"
@@ -4384,408 +4527,298 @@ msgstr ""
 "‏'never' - לא להציג רשימה בכלל.\n"
 "‏'last_state' - שחזור המצב האחרון של הרשימה."
 
-#: ../src/common/config.py:275
+# deactivated, not false
+# ?
+#: ../src/common/config.py:274
 msgid "If False, you will no longer see the avatar in the chat window."
 msgstr ""
 "במידה ואפשרות זו מנוטרלת, לא תהיה לך האפשרות לראות את האווטאר בחלון השיחה."
 
-#: ../src/common/config.py:276
+#: ../src/common/config.py:275
 msgid "If True, pressing the escape key closes a tab/window."
-msgstr "במידה והעדפה זו מופעלת, לחיצה על המקש Esc תוביל לסגירת חלון/כרטיסייה."
+msgstr "במידה והעדפה זו מופעלת, לחיצה על המקש Esc תוביל לסגירת חלון/לשונית."
 
-#: ../src/common/config.py:277
+#: ../src/common/config.py:276
 msgid "Hides the buttons in chat windows."
 msgstr "הסתרת הלחצנים בחלונות שיחה."
 
-#: ../src/common/config.py:278
+#: ../src/common/config.py:277
 msgid "Hides the banner in a group chat window"
-msgstr "הסתרת הכרזה בחלון שיחת קבוצה"
+msgstr "הסתרת הכרזה בחלון של שיחת קבוצה"
 
 # עם שתי אישויות
-#: ../src/common/config.py:279
+#: ../src/common/config.py:278
 msgid "Hides the banner in two persons chat window"
 msgstr "הסתרת הכרזה בחלון שיחה עם שני נוכחים"
 
-# הסתרת רשימת הנוכחים בשיחת קבוצה בתוך חלון שיחת קבוצה
-#: ../src/common/config.py:280
+# הסתרת רשימת הנוכחים בשיחת קבוצה בחלון שיחת קבוצה
+#: ../src/common/config.py:279
 msgid "Hides the group chat occupants list in group chat window."
 msgstr "הסתרת רשימת הנוכחים בחלון שיחת קבוצה."
 
 # What does "than" mean?
-#: ../src/common/config.py:281
-msgid ""
-"In a chat, show the nickname at the beginning of a line only when it's not "
-"the same person talking than in previous message."
-msgstr ""
-"בשיחה, הצג את שם הכינוי בתחילת שורה רק כאשר אין זו אותה האישיות אשר מדברת "
-"מבהודעה קודמת."
+#: ../src/common/config.py:280
+#, fuzzy
+msgid "In a chat, show the nickname at the beginning of a line only when it's not the same person talking than in previous message."
+msgstr "בשיחה, הצג את שם הכינוי בתחילת שורה רק כאשר אין זו אותה האישיות מדברת מבהודעה קודמת."
 
-#: ../src/common/config.py:282
+#: ../src/common/config.py:281
+#, fuzzy
 msgid "Indentation when using merge consecutive nickname."
-msgstr "הזחה בעת שימוש בשם כינוי עוקב מובלע."
+msgstr "הזחה בעת שימוש במיזוג רציף של שם כינוי."
 
-#: ../src/common/config.py:283
+# גלילת הודעות באופן חלק בחלון שיחה
+#: ../src/common/config.py:282
 msgid "Smooth scroll message in conversation window"
 msgstr "גלילה חלקה של הודעות בחלון דיון"
 
-#: ../src/common/config.py:284
-msgid ""
-"List of colors, separated by \":\", that will be used to color nicknames in "
-"group chats."
-msgstr ""
-"רשימה של צבעים, מופרדים על ידי \":\", אשר ישמשו לצביעת שמות כינוי בתוך שיחות "
-"קבוצה."
+# ### separated by \":\", ###
+#: ../src/common/config.py:283
+msgid "List of colors, separated by \":\", that will be used to color nicknames in group chats."
+msgstr "רשימה של צבעים, המופרדים על ידי \":\", ושישמשו לצביעת שמות כינוי בשיחות קבוצה."
 
-#: ../src/common/config.py:285
+#: ../src/common/config.py:284
 msgid "Ctrl-Tab go to next composing tab when none is unread."
-msgstr ""
-"‏Ctrl-Tab כדי לעבור אל הכרטיסייה המולחנת הבאה כאשר אין כרטיסיות אשר לא נקראו."
+msgstr "‏Ctrl-Tab כדי לעבור אל הלשונית המולחנת הבאה כאשר אין לשוניות שלא נקראו."
 
 # אנשי־קשר-מוצמדים
 # Meta- (from the Greek preposition μετά = "after", "beyond", "adjacent", "self",
 # adjacent = adjoining = צמוד
+#: ../src/common/config.py:285
+msgid "Should we show the confirm metacontacts creation dialog or not? Empty string means we never show the dialog."
+msgstr "האם קיים הצורך שאנחנו נציג את דו־שיח וידוא יצירת אנשי־קשר-מוצמדים או שלא? המשמעות של מחרוזת ריקה תהיה שאנחנו לא נציג את הדו־שיח בכלל."
+
 #: ../src/common/config.py:286
-msgid ""
-"Should we show the confirm metacontacts creation dialog or not? Empty string "
-"means we never show the dialog."
-msgstr ""
-"האם עלינו להציג דו שיח וידוא יצירת אנשי־קשר-מוצמדים? המשמעות של מחרוזת ריקה "
-"תהיה שאנחנו לא נציג את הדו שיח בכלל."
+msgid "Should we show the confirm block contact dialog or not? Empty string means we never show the dialog."
+msgstr "האם קיים הצורך שאנחנו נציג את דו־שיח וידוא חסימת איש קשר או שלא? המשמעות של מחרוזת ריקה תהיה שאנחנו לא נציג את הדו־שיח בכלל."
 
 #: ../src/common/config.py:287
-msgid ""
-"Should we show the confirm block contact dialog or not? Empty string means "
-"we never show the dialog."
-msgstr ""
-"האם עלינו להציג דו שיח וידוא חסימת איש קשר? המשמעות של מחרוזת ריקה תהיה "
-"שאנחנו לא נציג את הדו שיח בכלל."
+msgid "Should we show the confirm custom status dialog or not? Empty string means we never show the dialog."
+msgstr "האם קיים הצורך שאנחנו נציג את דו־שיח וידוא מצב־חיבור מותאם או שלא? המשמעות של מחרוזת ריקה תהיה שאנחנו לא נציג את הדו־שיח בכלל."
 
 #: ../src/common/config.py:288
-msgid ""
-"Should we show the confirm custom status dialog or not? Empty string means "
-"we never show the dialog."
-msgstr ""
-"האם עלינו להציג דו שיח וידוא מצב חיבור מותאם? המשמעות של מחרוזת ריקה תהיה "
-"שאנחנו לא נציג את הדו שיח בכלל."
+msgid "If True, you will be able to set a negative priority to your account in account modification window. BE CAREFUL, when you are logged in with a negative priority, you will NOT receive any message from your server."
+msgstr "במידה והעדפה זו מופעלת, תהיה ביכולתך להגדיר עדיפות שלילית עבור חשבונך בתוך חלון התאמת חשבון. יש להיזהר, בעת התחברותך יחד עם עדיפות שלילית, לא תתקבלנה שום הודעה מן שרתך."
 
 #: ../src/common/config.py:289
-msgid ""
-"If True, you will be able to set a negative priority to your account in "
-"account modification window. BE CAREFUL, when you are logged in with a "
-"negative priority, you will NOT receive any message from your server."
-msgstr ""
-"במידה והעדפה זו מופעלת, תהיה באפשרותך להגדיר עדיפות שלילית עבור חשבונך בתוך "
-"חלון התאמת חשבון. יש להיזהר, בעת התחברותך יחד עם עדיפות שלילית, לא תתקבלנה "
-"שום הודעה מתוך שרתך."
+msgid "If True, Gajim will use Gnome Keyring (if available) to store account passwords."
+msgstr "במידה והעדפה זו מופעלת, Gajim יעשה שימוש ביישום Gnome Keyring (במידה והיישום זמין) כדי לאחסן סיסמאות חשבון."
 
 #: ../src/common/config.py:290
-msgid ""
-"If True, Gajim will use Gnome Keyring (if available) to store account "
-"passwords."
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim יעשה שימוש ביישום Gnome Keyring (במידה וזה "
-"זמין) כדי לאחסן סיסמאות חשבון."
+msgid "If True, Gajim will use KDE Wallet (if kwalletcli is available) to store account passwords."
+msgstr "במידה והעדפה זו מופעלת, Gajim יעשה שימוש ביישום KDE Wallet (אם kwalletcli הינו זמין) כדי לאחסן סיסמאות חשבון."
 
 #: ../src/common/config.py:291
-msgid ""
-"If True, Gajim will use KDE Wallet (if kwalletcli is available) to store "
-"account passwords."
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim יעשה שימוש ביישום KDE Wallet (כאשר kwalletcli "
-"הינו זמין) כדי לאחסן סיסמאות חשבון."
-
-#: ../src/common/config.py:292
-msgid ""
-"If True, Gajim will show number of online and total contacts in account and "
-"group rows."
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim יציג מספר של אנשי קשר מקוונים בשורות חשבון "
-"וקבוצה."
+msgid "If True, Gajim will show number of online and total contacts in account and group rows."
+msgstr "במידה והעדפה זו מופעלת, Gajim יציג מספר של אנשי קשר מקוונים בשורות חשבון וקבוצה."
 
 # what type?
 # אפשרי שיהיה
-#: ../src/common/config.py:293
-msgid ""
-"Can be empty, 'chat' or 'normal'. If not empty, treat all incoming messages "
-"as if they were of this type"
-msgstr ""
-"יכול להיות ריק, 'chat' (שיחה) או 'normal' (רגיל). במידה וערך זה אינו ריק, "
-"התייחס אל כל ההודעות הנכנסות כאילו היו מטיפוס זה"
+#: ../src/common/config.py:292
+msgid "Can be empty, 'chat' or 'normal'. If not empty, treat all incoming messages as if they were of this type"
+msgstr "יכול להיות ריק, 'chat' (שיחה) או 'normal' (רגיל). במידה וערך זה אינו ריק, התייחס אל כל ההודעות הנכנסות כאילו היו מטיפוס זה"
 
 # שממנו נשלחה
-#: ../src/common/config.py:294
-msgid ""
-"If True, Gajim will scroll and select the contact who sent you the last "
-"message, if chat window is not already opened."
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim יגולל ויבחר את איש הקשר אשר שלח לך את ההודעה "
-"האחרונה, אם וכאשר חלון שיחה אינו פתוח כבר."
+#: ../src/common/config.py:293
+#, fuzzy
+msgid "If True, Gajim will scroll and select the contact who sent you the last message, if chat window is not already opened."
+msgstr "במידה והעדפה זו מופעלת, Gajim יגולל ויבחר את איש הקשר ששלח לך את ההודעה האחרונה, אם חלון שיחה אינו פתוח כבר."
 
-#: ../src/common/config.py:295
+#: ../src/common/config.py:294
 msgid "Time of inactivity needed before the change status window closes down."
-msgstr "זמן חוסר פעילות אשר נחוץ לפני שחלון שינוי מצב נסגר."
+msgstr "זמן חוסר פעילות שנחוץ לפני שחלון שינוי המצב נסגר."
 
-#: ../src/common/config.py:296
-msgid ""
-"Maximum number of lines that are printed in conversations. Oldest lines are "
-"cleared."
-msgstr "מספר מרבי של שורות אשר יודפסו בתוך דיונים. השורות הכי ישנות יטוהרו."
+# מרבי של שורות
+#: ../src/common/config.py:295
+msgid "Maximum number of lines that are printed in conversations. Oldest lines are cleared."
+msgstr "מספר שורות מרבי שיודפסו בדיונים. השורות הכי ישנות יטוהרו."
 
 # יכרכו
 # BUG: the notification icon?
+#: ../src/common/config.py:296
+msgid "If True, notification windows from notification-daemon will be attached to notification icon."
+msgstr "במידה והעדפה זו מופעלת, חלונות התראה מן notification-daemon יסופחו אל צלמית התראה."
+
+# What is checks?
 #: ../src/common/config.py:297
-msgid ""
-"If True, notification windows from notification-daemon will be attached to "
-"notification icon."
-msgstr ""
-"במידה והעדפה זו מופעלת, חלונות התראה מן notification-daemon יסופחו אל צלמית "
-"התראה."
+#, fuzzy
+msgid "Choose interval between 2 checks of idleness."
+msgstr "בחירת תדירות עדכון בין 2 checks של חוסר פעילות."
 
-# חוסר
 #: ../src/common/config.py:298
-msgid "Choose interval between 2 checks of idleness."
-msgstr "בחר תדירות עדכון בין 2 בדיקות של העדר פעילות."
+msgid "Valid uri schemes. Only schemes in this list will be accepted as \"real\" uri. (mailto and xmpp are handled separately)"
+msgstr "תרשים uri תקף. תרשימים המצויים ברשימה בלבד יתקבלו כתרשים uri \"אמיתי\". (mailto וגם xmpp מטופלים בנפרד)"
 
+# שידור בקשות
 #: ../src/common/config.py:299
-msgid ""
-"Valid uri schemes. Only schemes in this list will be accepted as \"real\" "
-"uri. (mailto and xmpp are handled separately)"
-msgstr ""
-"תרשים uri תקף. תרשימים המצויים בתוך הרשימה בלבד יתקבלו בתור תרשים uri \"אמיתי"
-"\". (mailto וגם xmpp מטופלים בנפרד)"
+msgid "Ask offline status message to all offline contacts when connection to an accoutn is established. WARNING: This causes a lot of requests to be sent!"
+msgstr "בקש הודעות מצב לא מקוונות מכל אנשי קשר בלתי מקוונים כאשר חיבור אל חשבון מבוסס. אזהרה: זו עלולה לגרום לשליחת מספר רב של בקשות!"
 
-# שידור בקשות
-# עלולה לגרום could
 #: ../src/common/config.py:300
-msgid ""
-"Ask offline status message to all offline contacts when connection to an "
-"account is established. WARNING: This causes a lot of requests to be sent!"
-msgstr ""
-"בקש הודעות מצב לא מקוונות מכל אנשי קשר בלתי מקוונים כאשר חיבור אל חשבון "
-"מבוסס. אזהרה: זו גורמת לשליחת מספר רב של בקשות!"
-
-#: ../src/common/config.py:301
 msgid "If True, completion in groupchats will be like a shell auto-completion"
-msgstr ""
-"במידה והעדפה זו מופעלת, השלמה בתוך שיחות קבוצה תיעשה בדומה להשלמה אוטומטית "
-"במעטפת (shell) של מסוף."
+msgstr "במידה והעדפה זו מופעלת, השלמה בשיחת קבוצה תיעשה בדומה להשלמה אוטומטית במעטפת (shell) של מסוף."
 
-#: ../src/common/config.py:302
-msgid ""
-"When is self contact row displayed. Can be \"always\", \"when_other_resource"
-"\" or \"never\""
-msgstr ""
-"מתי שורת איש קשר עצמי תוצג. יכול להיות \"always\" (תמיד), "
-"\"when_other_resource\" (כאשר משאב אחר מחובר) או \"never\" (בכלל לא)"
+#: ../src/common/config.py:301
+msgid "When is self contact row displayed. Can be \"always\", \"when_other_resource\" or \"never\""
+msgstr "מתי שורת איש קשר עצמי תוצג. יכול להיות \"always\" (תמיד), \"when_other_resource\" (כאשר משאב אחר מחובר) או \"never\" (בכלל לא)"
 
-#: ../src/common/config.py:307
+# Any better word to mine for Optionally?
+# Does it mean: an option to?
+#: ../src/common/config.py:306
 msgid "Optionally fix jingle output video framerate. Example: 10/1 or 25/2"
 msgstr "אפשרות קיבוע פלט תדר וידאו של jingle. דוגמא: 10/1 או 25/2"
 
-#: ../src/common/config.py:308
+#: ../src/common/config.py:307
 msgid "Optionally resize jingle output video. Example: 320x240"
 msgstr "אפשרות שינוי מידת פלט הוידאו של jingle. דוגמא: 320x240"
 
-#: ../src/common/config.py:309
-msgid "If True, You will also see your webcam"
-msgstr "במידה והעדפה זו מופעלת, תהיה באפשרותך לראות גם את מצלמת הרשת שלך"
+# שהוגדר ברשומה
+#: ../src/common/config.py:310
+msgid "If True, Gajim will try to use a STUN server when using jingle. The one in \"stun_server\" option, or the one given by the jabber server."
+msgstr "במידה והעדפה זו מופעלת, Gajim ינסה לעשות שימש בשרת STUN כאשר jingle מצוי בשימוש. זה שהוזן בהעדפה \"stun_server\", או בזה שניתן בשרת jabber נתון."
 
+# שישמשך
+#: ../src/common/config.py:311
+msgid "STUN server to use when using jingle"
+msgstr "שרת STUN שישמש אותך בעת שימוש ב־jingle"
+
+# נוכחי שיחת קבוצה
+# נוכחים בשיחות קבוצה
 #: ../src/common/config.py:312
-msgid ""
-"If True, Gajim will try to use a STUN server when using jingle. The one in "
-"\"stun_server\" option, or the one given by the jabber server."
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim ינסה לעשות שימש בשרת STUN כאשר jingle מצוי "
-"בשימוש. זה אשר הוגדר בתוך \"stun_server\", או בזה אשר ניתן על ידי שרת jabber "
-"נתון."
+msgid "If True, Gajim will show affiliation of groupchat occupants by adding a colored square to the status icon"
+msgstr "במידה והעדפה זו מופעלת, Gajim יציג שיוך של נוכחים של שיחת קבוצה על ידי הוספת מרובע צבעוני לצלמית המצב"
 
 #: ../src/common/config.py:313
-msgid "STUN server to use when using jingle"
-msgstr "שרת STUN אשר ישמש אותך בעת שימוש ב־jingle"
+msgid "Proxy used for all outgoing connections if the account does not have a specific proxy configured"
+msgstr "מתווך שבשימוש עבור כל החיבורים היוצאים במידה ולחשבון אין מתווך מסוים מוגדר"
 
 #: ../src/common/config.py:314
-msgid ""
-"If True, Gajim will show affiliation of groupchat occupants by adding a "
-"colored square to the status icon"
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim יציג שיוך של נוכחים של שיחת קבוצה על ידי הוספת "
-"מרובע צבעוני לצלמית המצב"
-
-#: ../src/common/config.py:315
-msgid ""
-"Proxy used for all outgoing connections if the account does not have a "
-"specific proxy configured"
-msgstr ""
-"ציר אשר בשימוש עבור כל החיבורים היוצאים במידה ולחשבון אין ציר מסוים מוגדר"
-
-#: ../src/common/config.py:316
 msgid "If True, Gajim will ignore incoming attention requestd (\"wizz\")."
 msgstr "במידה והעדפה זו מופעלת, Gajim יתעלם מבקשות הקשב נכנסות (\"wizz\")."
 
-#: ../src/common/config.py:317
-msgid ""
-"If enabled, Gajim will reopen chat windows that were opened last time Gajim "
-"was closed."
-msgstr ""
-"במידה ואפשרות זו מופעלת, Gajim ייפתח מחדש חלונות שיחה שהיו פתוחים בפעם "
-"האחרונה בה Gajim נסגר."
-
-#: ../src/common/config.py:318
-msgid ""
-"If enabled, Gajim will show an icon to show that sent message has been "
-"received by your contact"
-msgstr ""
-"במידה ואפשרות זו מופעלת, Gajim יציג צלמית המעידה על כך שהודעה אשר נשלחה "
-"התקבלה על ידי איש הקשר שלך"
+#: ../src/common/config.py:315
+msgid "If enabled, Gajim will reopen chat windows that were opened last time Gajim was closed."
+msgstr "במידה ואפשרות זו מופעלת, Gajim ייפתח מחדש חלונות שיחה שהיו פתוחים בפעם האחרונה שהיישום נסגר."
 
-#: ../src/common/config.py:332
-msgid ""
-"Priority will change automatically according to your status. Priorities are "
-"defined in autopriority_* options."
-msgstr ""
-"עדיפות תשונה אוטומטית בהתאם אל מצב החיבור שלך. עדיפויות מוגדרות בתוך האפשרות "
-"autopriority_*."
+#: ../src/common/config.py:329
+msgid "Priority will change automatically according to your status. Priorities are defined in autopriority_* options."
+msgstr "עדיפות תשונה אוטומטית בהתאם למצב־חיבורך. עדיפויות מוגדרות בתוך האפשרות autopriority_*."
 
-#: ../src/common/config.py:340
-msgid ""
-"Status used to autoconnect as. Can be online, chat, away, xa, dnd, "
-"invisible. NOTE: this option is used only if restore_last_status is disabled"
-msgstr ""
-"מצב בשימוש להתחברות אוטומטית בתור . יכול להיות online (מקוון), chat (פנוי "
-"לשיחה), away (נעדר), xa (לא זמין), dnd (עסוק), invisible (בלתי נראה). הערה: "
-"אפשרות זו נכנסת לשימוש רק אם ההעדפה restore_last_status מנוטרלת"
+#: ../src/common/config.py:337
+msgid "Status used to autoconnect as. Can be online, chat, away, xa, dnd, invisible. NOTE: this option is used only if restore_last_status is disabled"
+msgstr "מצב בשימוש להתחברות אוטומטית כ-. יכול להיות online (מקוון), chat (פנוי לשיחה), away (נעדר), xa (לא זמין), dnd (עסוק), invisible (בלתי נראה). הערה: אפשרות זו נכנסת לשימוש רק אם ההעדפה restore_last_status מנוטרלת"
 
-#: ../src/common/config.py:341
+#: ../src/common/config.py:338
 msgid "If enabled, restore the last status that was used."
-msgstr "במידה והעדפה זו מופעלת, מצב החיבור האחרון אשר היה בשימוש ישוחזר."
+msgstr "במידה והעדפה זו מופעלת, מצב־החיבור האחרון שהיה בשימוש ישוחזר."
 
 # BUG: typo: the authorization of the contacts will get accepted, not the contacts themselves
 # הרשאות שיתבקשו על ידי אנשי קשר יתקבלו אוטומטית
-#: ../src/common/config.py:343
-msgid ""
-"If True, Contacts requesting authorization will be automatically accepted."
-msgstr "במידה והעדפה זו מופעלת, אנשי קשר אשר מבקשים הרשאה יתקבלו אוטומטית."
+#: ../src/common/config.py:340
+msgid "If True, Contacts requesting authorization will be automatically accepted."
+msgstr "במידה והעדפה זו מופעלת, אנשי קשר שמבקשים הרשאה יתקבלו אוטומטית."
 
-#: ../src/common/config.py:344
-msgid ""
-"If False, this account will be disabled and will not appear in roster window."
+# ייראה
+#: ../src/common/config.py:341
+msgid "If False, this account will be disabled and will not appear in roster window."
 msgstr "במידה ואפשרות זו מנוטרלת, חשבון זה ינוטרל ולא יופיע בחלון הרשימה."
 
-#: ../src/common/config.py:347
-msgid ""
-"If disabled, don't sign presences with GPG key, even if GPG is configured."
-msgstr ""
-"במידה ואפשרות זו מנוטרלת, אל תחתום נוכחות באמצעות מפתח GPG, אפילו אם GPG "
-"מוגדר."
+#: ../src/common/config.py:344
+msgid "If disabled, don't sign presences with GPG key, even if GPG is configured."
+msgstr "במידה ואפשרות זו מנוטרלת, אל תחתום נוכחות באמצעות מפתח GPG, אפילו אם GPG מוגדר."
 
-#: ../src/common/config.py:349
+#: ../src/common/config.py:346
 msgid "Enable ESessions encryption for this account."
 msgstr "אפשור הצפנת ESessions עבור חשבון זה."
 
 # באם/כאשר ניתן
-#: ../src/common/config.py:350
+#: ../src/common/config.py:347
 msgid "Should Gajim automatically start an encrypted session when possible?"
 msgstr "האם על Gajim להתחיל אוטומטית סשן מוצפן במידת האפשר?"
 
-#: ../src/common/config.py:351
-msgid ""
-"Ordered list (space separated) of connection type to try. Can contain tls, "
-"ssl or plain"
-msgstr ""
-"רשימה סדורה (רווח מפריד) של טיפוס חיבור לנסות. יכול להכיל tls, ssl או plain"
+#: ../src/common/config.py:348
+msgid "Ordered list (space separated) of connection type to try. Can contain tls, ssl or plain"
+msgstr "רשימה סדורה (רווח מפריד) של טיפוס חיבור לנסות. יכול להכיל tls, ssl או plain"
 
-#: ../src/common/config.py:352
-msgid ""
-"Show a warning dialog before sending password on an plaintext connection. "
-"Can be 'warn', 'connect', 'disconnect'"
-msgstr ""
-"הצגת דו שיח אזהרה טרם שליחת סיסמה על פני חיבור גלוי. יכול להיות "
-"'warn' (הזהר), 'connect' (התחבר), 'disconnect' (התנתק)"
+# בטרם
+# חיבור תמליל גלוי
+#: ../src/common/config.py:349
+msgid "Show a warning dialog before sending password on an plaintext connection. Can be 'warn', 'connect', 'disconnect'"
+msgstr "הצגת דו־שיח אזהרה טרם שליחת סיסמה על פני חיבור גלוי. יכול להיות 'warn' (הזהר), 'connect' (התחבר), 'disconnect' (התנתק)"
 
-#: ../src/common/config.py:353
+# What is standard?
+# (1) serving as a model, widely accepted
+# (2) normal, regular, typical
+#: ../src/common/config.py:350
+#, fuzzy
 msgid "Show a warning dialog before using standard SSL library."
-msgstr "הצג דו שיח אזהרה בטרם שימוש בספריית SSL סטנדרטית."
+msgstr "הצג דו־שיח אזהרה בטרם שימוש בספריית SSL רגילה."
 
-#: ../src/common/config.py:354
-msgid ""
-"Show a warning dialog before sending PLAIN password over a plain connection."
-msgstr "הצגת דו שיח אזהרה טרם שליחת סיסמה חשופה על פני חיבור גלוי."
+# גלויה
+# חיבור לא מאובטח
+#: ../src/common/config.py:351
+msgid "Show a warning dialog before sending PLAIN password over a plain connection."
+msgstr "הצגת דו־שיח אזהרה טרם שליחת סיסמה חשופה על פני חיבור גלוי."
 
-#: ../src/common/config.py:356
+#: ../src/common/config.py:353
 msgid "Space separated list of ssl errors to ignore."
-msgstr "רשימה אשר מופרדת עם רווח, של שגיאות ssl שיש להתעלם מהן."
+msgstr "רשימה שמופרדת עם רווח, של שגיאות ssl שיש להתעלם מהן."
 
-#: ../src/common/config.py:362
-msgid ""
-"Space separated list of JIDs for which you do not want to store logs. You "
-"can also add account name to log nothing for this account."
-msgstr ""
-"רשימה אשר מופרדת עם רווח, של כתובות JID עבורן אין ברצונך לאחסן רשומות. "
-"באפשרותך גם להוסיף שם חשבון כדי לא לרשום דבר עבור חשבון זה."
+#: ../src/common/config.py:359
+msgid "Space separated list of JIDs for which you do not want to store logs. You can also add account name to log nothing for this account."
+msgstr "רשימה שמופרדת עם רווח, של כתובות JID עבורן אין ברצונך לאחסן רשומות. ביכולתך גם להוסיף שם חשבון כדי לא לרשום דבר עבור חשבון זה."
 
 # BUG: he or she
-#: ../src/common/config.py:363
-msgid ""
-"Space separated list of JIDs for which you accept to not log conversations "
-"if he does not want to."
-msgstr ""
-"רשימה אשר מופרדת עם רווח, של כתובות JID עבורן הינך מביע הסכמה שלא לרושם "
-"דיונים במידה והקצה השני לא מעוניין בכך."
+#: ../src/common/config.py:360
+msgid "Space separated list of JIDs for which you accept to not log conversations if he does not want to."
+msgstr "רשימה שמופרדת עם רווח, של כתובות JID עבורן הינך מביע הסכמה שלא לרושם דיונים במידה והקצה השני לא מעוניין בכך."
 
 # חלל לבן, עקב
-#: ../src/common/config.py:366
+#: ../src/common/config.py:363
 msgid "Whitespace sent after inactivity"
 msgstr "סימן לבן נשלח לאחר חוסר פעילות"
 
-#: ../src/common/config.py:367
+#: ../src/common/config.py:364
 msgid "XMPP ping sent after inactivity"
 msgstr "פינג XMPP נשלח לאחר חוסר פעילות"
 
-#: ../src/common/config.py:371
-msgid ""
-"How many seconds to wait for the answer of ping alive packet before we try "
-"to reconnect?"
-msgstr ""
-"כמה שניות להמתין עבור תשובת חבילת פינג חי לפני שאנחנו מנסים להתחבר מחדש."
+# keep-alive?
+# BUG: Question mark ? at the end
+# לתשובת
+#: ../src/common/config.py:368
+msgid "How many seconds to wait for the answer of ping alive packet before we try to reconnect."
+msgstr "כמה שניות להמתין עבור תשובת חבילת פינג חי לפני שאנחנו מנסים להתחבר מחדש."
 
 #. yes, no, ask
-#: ../src/common/config.py:375
+#: ../src/common/config.py:372
 msgid "Jabberd2 workaround"
 msgstr "מעקף עבור Jabberd2"
 
 # INTERESTING!
 # option (אפשרות), not entry (רשומה)
-#: ../src/common/config.py:378
-msgid ""
-"If checked, Gajim will use your IP and proxies defined in "
-"file_transfer_proxies option for file transfer."
-msgstr ""
-"במידה ואפשרות זו מסומנת, Gajim יעשה שימוש בכתובת פרוטוקול המרשתת (IP; ‏"
-"Internet Protocol) ובמתווכים שהוגדרו על ידיך באפשרות file_transfer_proxies "
-"עבור העברת קובץ."
+#: ../src/common/config.py:375
+msgid "If checked, Gajim will use your IP and proxies defined in file_transfer_proxies option for file transfer."
+msgstr "במידה ואפשרות זו מסומנת, Gajim יעשה שימוש בכתובת פרוטוקול המרשתת (IP) ובמתווכים שהוגדרו על ידיך באפשרות file_transfer_proxies עבור העברת קובץ."
 
-#: ../src/common/config.py:379
-msgid ""
-"If True, Gajim will test file transfer proxies on startup to be sure it "
-"works. Openfire's proxies are known to fail this test even if they work."
-msgstr ""
-"במידה והעדפה זו מופעלת, Gajim יבחן מתווכי העברת קובץ בעת הפעלה כדי לוודא כי "
-"זו אכן פועלת. ידוע כי מתווכי Openfire נכשלים בבחינה זו אפילו אם אלו עובדים."
+# לוודא שהתכונה
+#: ../src/common/config.py:376
+msgid "If True, Gajim will test file transfer proxies on startup to be sure it works. Openfire's proxies are known to fail this test even if they work."
+msgstr "במידה והעדפה זו מופעלת, Gajim יבחן מתווכי העברת קובץ בעת הפעלה כדי לוודא שזו אכן פועלת. ידוע שמתווכי Openfire נכשלים בבחינה זו אפילו אם אלו עובדים."
 
-#: ../src/common/config.py:393
+#: ../src/common/config.py:390
 msgid "Answer to receipt requests"
 msgstr "מענה לבקשות קבלה"
 
-#: ../src/common/config.py:394
+#: ../src/common/config.py:391
 msgid "Sent receipt requests"
-msgstr "בקשות קבלה אשר נשלחו"
+msgstr "בקשות קבלה שנשלחו"
 
-#: ../src/common/config.py:403
-msgid ""
-"Allow Gajim to send information about the operating system you are running."
-msgstr "התר ל־Gajim לשלוח מידע אודות מערכת ההפעלה אשר בשימושך."
+# BUG: a dot at the end
+#: ../src/common/config.py:400
+msgid "Allow Gajim to send information about the operating system you are running."
+msgstr "התר ל־Gajim לשלוח מידע אודות מערכת ההפעלה שבשימושך"
 
-#: ../src/common/config.py:404
+#: ../src/common/config.py:401
 msgid "Allow Gajim to send your local time."
 msgstr "התר ל־Gajim לשלוח את הזמן המקומי שלך."
 
@@ -4793,236 +4826,418 @@ msgstr "התר ל־Gajim לשלוח את הזמן המקומי שלך."
 # מתקיימת הסדרה לסשן
 # מתקיימת הסדרת סשן
 # שרצונך הוא
-#: ../src/common/config.py:405
-msgid ""
-"When negotiating an encrypted session, should Gajim assume you want your "
-"messages to be logged?"
-msgstr ""
-"כאשר מתקיים משא ומתן עבור סשן מוצפן, האם על Gajim להניח כי ברצונך שהודעותיך "
-"ירשמו?"
+#: ../src/common/config.py:402
+msgid "When negotiating an encrypted session, should Gajim assume you want your messages to be logged?"
+msgstr "כאשר מתקיים משא ומתן עבור סשן מוצפן, האם על Gajim להניח שברצונך שהודעותיך ירשמו?"
 
-#: ../src/common/config.py:408
+#: ../src/common/config.py:405
 msgid "Message that is sent to contacts you want to add"
-msgstr "הודעה אשר תישלח אל אנשי קשר אותם ברצונך להוסיף"
+msgstr "הודעה שתישלח אל אנשי קשר אותם ברצונך להוסיף"
 
-#: ../src/common/config.py:409
+#: ../src/common/config.py:406
 msgid "Last time we syncronized with logs from server."
-msgstr "פעם אחרונה בה סנכרנו רשומות מתוך שרת."
+msgstr "פעם אחרונה בה סנכרנו רשומות מן שרת."
 
-#: ../src/common/config.py:410
-msgid ""
-"If enabled and if server supports this feature, Gajim will receive messages "
-"sent and received by other resources."
-msgstr ""
-"במידה ואפשרות זו מופעלת ושרת נתון תומך בתכונה זו, Gajim יקבל הודעות אשר "
-"מתקבלות ונשלחות על ידי משאבים אחרים."
+#: ../src/common/config.py:407
+msgid "If enabled and if server supports this feature, Gajim will receive messages sent and received by other resources."
+msgstr "במידה ואפשרות זו מופעלת ושרת נתון תומך בתכונה זו, Gajim יקבל הודעות שמתקבלות ונשלחות על ידי משאבים אחרים."
 
-#: ../src/common/config.py:411
-msgid ""
-"If enabled, Gajim will send your local IPs so your contact can connect to "
-"your machine to transfer files."
-msgstr ""
-"במידה ואפשרות זו מופעלת, Gajim ישלח את כתובות פרוטוקול המרשתת (IP; ‏Internet "
-"Protocol) המקומיות שלך וכך תעמוד לרשות איש הקשר שלך האפשרות להתחבר ישירות אל "
-"מחשבך כדי להעביר קבצים."
+#: ../src/common/config.py:408
+msgid "If enabled, Gajim will send your local IPs so your contact can connect to your machine to transfer files."
+msgstr "במידה ואפשרות זו מופעלת, Gajim ישלח את כתובות פרוטוקול המרשתת (IP) המקומיות שלך וכך תעמוד לרשות איש הקשר שלך האפשרות להתחבר ישירות אל מחשבך כדי להעביר קבצים."
 
-#: ../src/common/config.py:412
+#: ../src/common/config.py:409
 msgid "Latest token for Oauth2 authentication."
 msgstr "האות האחרון עבור אימות Oauth2."
 
-#: ../src/common/config.py:413
+#: ../src/common/config.py:410
 msgid "client_id for Oauth2 authentication."
 msgstr "‏client_id עבור אימות Oauth2."
 
-#: ../src/common/config.py:414
+#: ../src/common/config.py:411
 msgid "redirect_url for Oauth2 authentication."
 msgstr "‏redirect_url עבור אימות Oauth2."
 
-#: ../src/common/config.py:415
-msgid ""
-"Space separated list of JIDs for which we want to re-open a chat window on "
-"next startup."
-msgstr ""
-"רשימה אשר מופרדת עם רווח, של כתובות JID עבורן אנו רוצים לפתוח מחדש חלון שיחה "
-"בהפעלה הבאה."
+# BUG: jid > JIDs
+#: ../src/common/config.py:412
+msgid "Space separated list of jid for which we want to re-open a chat window on next startup."
+msgstr "רשימה שמופרדת עם רווח, של כתובות JID עבורן אנו רוצים לפתוח מחדש חלון שיחה בהפעלה הבאה."
 
-#: ../src/common/config.py:477
+#: ../src/common/config.py:474
 msgid "Is OpenPGP enabled for this contact?"
 msgstr "האם OpenPGP מאופשרת עבור איש קשר זה?"
 
 # thank you, rodensky
-#: ../src/common/config.py:478
-msgid ""
-"Should Gajim automatically start an encrypted session with this contact when "
-"possible?"
+#: ../src/common/config.py:475
+msgid "Should Gajim automatically start an encrypted session with this contact when possible?"
 msgstr "האם על Gajim להתחיל אוטומטית סשן מוצפן עם איש קשר זה במידת האפשר?"
 
-# אשר ברצוננו
-#: ../src/common/config.py:479 ../src/common/config.py:482
+# שברצוננו
+#: ../src/common/config.py:476
+#: ../src/common/config.py:479
 msgid "Language for which we want to check misspelled words"
-msgstr "שפה עבורה אנחנו רוצים לבדוק מילים אשר לא מאויתות כראוי"
-
-# ללא
-#: ../src/common/config.py:483
-msgid ""
-"How many lines to request from server when entering a groupchat. -1 means no "
-"limit, -2 means global value"
-msgstr ""
-"כמה שורות לבקש מתוך שרת בעת כניסה אל שיחת קבוצה. 1- מסמל אי הגבלה, 2- מסמל "
-"ערך גלובלי"
+msgstr "שפה עבורה אנחנו רוצים לבדוק מילים שלא מאויתות כראוי"
 
-#: ../src/common/config.py:484
-msgid ""
-"How many minutes back to request logs when entering a groupchat. -1 means no "
-"limit, -2 means global value"
+#: ../src/common/config.py:482
+msgid "State whether plugins should be activated on startup (this is saved on Gajim exit). This option SHOULD NOT be used to (de)activate plug-ins. Use GUI instead."
 msgstr ""
-"כמה דקות לאחור לבקש רשומות בעת התחברות אל שיחת קבוצה. 1- מסמל אי הגבלה, 2- "
-"מסמל ערך גלובלי"
 
 #: ../src/common/config.py:487
-msgid ""
-"State whether plugins should be activated on startup (this is saved on Gajim "
-"exit). This option SHOULD NOT be used to (de)activate plug-ins. Use GUI "
-"instead."
-msgstr ""
-"קבע האם על תוספות להיות מתופעלות בעת הפעלה (זוהי נשמרת בעת יציאה מתוך "
-"Gajim). אין להשתמש באפשרות זו כדי לשפעל או לנטרל תוספות. עליך להשתמש בממשק "
-"משתמש גרפי במקום."
-
-# יושן
-#: ../src/common/config.py:492 ../src/common/pep.py:157
+#: ../src/common/pep.py:157
 msgid "Sleeping"
-msgstr "ישן"
+msgstr "יושן"
 
-#: ../src/common/config.py:493
+#: ../src/common/config.py:488
 msgid "Back soon"
 msgstr "אשוב בקרוב"
 
-#: ../src/common/config.py:493
+#: ../src/common/config.py:488
 msgid "Back in some minutes."
 msgstr "אני אחזור בעוד כמה דקות."
 
-#: ../src/common/config.py:494 ../src/common/pep.py:127
+#: ../src/common/config.py:489
+#: ../src/common/pep.py:127
 msgid "Eating"
 msgstr "אוכל"
 
-#: ../src/common/config.py:494
+#: ../src/common/config.py:489
 msgid "I'm eating, so leave me a message."
 msgstr "אני בהפסקת אוכל, אז תשאירו לי הודעה."
 
-#: ../src/common/config.py:495
+#: ../src/common/config.py:490
 msgid "Movie"
 msgstr "סרט"
 
-#: ../src/common/config.py:495
+#: ../src/common/config.py:490
 msgid "I'm watching a movie."
 msgstr "אני צופה בסרט."
 
-#: ../src/common/config.py:496 ../src/common/pep.py:186
+#: ../src/common/config.py:491
+#: ../src/common/pep.py:185
 msgid "Working"
 msgstr "עובד"
 
-#: ../src/common/config.py:496
+#: ../src/common/config.py:491
 msgid "I'm working."
 msgstr "אני בעבודה."
 
-#: ../src/common/config.py:497
+#: ../src/common/config.py:492
 msgid "Phone"
 msgstr "טלפון"
 
 # בשיחת טלפון
-#: ../src/common/config.py:497
+#: ../src/common/config.py:492
 msgid "I'm on the phone."
 msgstr "אני בטלפון."
 
-#: ../src/common/config.py:498
+#: ../src/common/config.py:493
 msgid "Out"
 msgstr "בחוץ"
 
-#: ../src/common/config.py:498
+#: ../src/common/config.py:493
 msgid "I'm out enjoying life."
 msgstr "יצאתי החוצה ליהנות מן החיים."
 
 # מצבי זמין
-#: ../src/common/config.py:509
+#: ../src/common/config.py:504
 msgid "I'm available."
 msgstr "אני זמין."
 
-#: ../src/common/config.py:510
+#: ../src/common/config.py:505
 msgid "I'm free for chat."
 msgstr "אני פנוי/ה לשיחה."
 
 # אשוב מיד
 # מיד אשוב
-#: ../src/common/config.py:511 ../src/config.py:1646
+#: ../src/common/config.py:506
+#: ../src/config.py:1645
 msgid "Be right back."
 msgstr "אני כבר אשוב."
 
 # איני/אינני זמין.
-#: ../src/common/config.py:512
+#: ../src/common/config.py:507
 msgid "I'm not available."
 msgstr "אני לא זמין."
 
-#: ../src/common/config.py:513
+#: ../src/common/config.py:508
 msgid "Do not disturb."
 msgstr "נא לא להפריע."
 
-#: ../src/common/config.py:514 ../src/common/config.py:515
+#: ../src/common/config.py:509
+#: ../src/common/config.py:510
 msgid "Bye!"
 msgstr "להתראות!"
 
-#: ../src/common/config.py:526
-msgid ""
-"Sound to play when a group chat message contains one of the words in "
-"muc_highlight_words, or when a group chat message contains your nickname."
-msgstr ""
-"צליל לניגון כאשר הודעת שיחת קבוצה מכילה אחת מתוך המילים אשר מצוינות בתוך "
-"muc_highlight_words, או כאשר הודעת שיחת קבוצה מכילה אח שם הכינוי שלך."
+#: ../src/common/config.py:521
+msgid "Sound to play when a group chat message contains one of the words in muc_highlight_words, or when a group chat message contains your nickname."
+msgstr "צליל לניגון כאשר הודעת שיחת קבוצה מכילה אחת מן המילים שמצוינות בתוך muc_highlight_words, או כאשר הודעת שיחת קבוצה מכילה אח שם כינוייך."
 
-#: ../src/common/config.py:527
+#: ../src/common/config.py:522
 msgid "Sound to play when any MUC message arrives."
 msgstr "צליל לניגון כאשר הודעת שמ״מ מגיעה."
 
-#: ../src/common/config.py:536 ../src/common/optparser.py:309
+#: ../src/common/config.py:531
+#: ../src/common/optparser.py:309
 msgid "green"
 msgstr "ירוק"
 
-#: ../src/common/config.py:540 ../src/common/optparser.py:295
+#: ../src/common/config.py:535
+#: ../src/common/optparser.py:295
 msgid "grocery"
 msgstr "במכולת"
 
-#: ../src/common/config.py:544
+#: ../src/common/config.py:539
 msgid "human"
 msgstr "אנושי"
 
-#: ../src/common/config.py:548
+#: ../src/common/config.py:543
 msgid "marine"
 msgstr "ימי"
 
-#: ../src/common/config.py:555
+#: ../src/common/config.py:550
 msgid "Tor"
 msgstr ""
 
+# request for comments?
+# כתובת JID
+#: ../src/common/connection_handlers_events.py:369
+#, python-format
+msgid "JID %s is not RFC compliant. It will not be added to your roster. Use roster management tools such as http://jru.jabberstudio.org/ to remove it"
+msgstr "‫JID ‫%s אינה תואמת RFC. זו לא תוסף אל רשימתך. ניתן להשתמש בכלי רשימה (roster) כגון http://jru.jabberstudio.org כדי להסירה"
+
+#: ../src/common/connection_handlers_events.py:823
+#, python-format
+msgid "unsubscribe request from %s"
+msgstr "בקשת ביטול הרשמה מאת %s"
+
+# Write to Disk?
+#: ../src/common/connection_handlers_events.py:908
+#: ../src/common/connection_handlers.py:338
+#: ../src/common/connection_handlers.py:953
+#: ../src/common/connection_handlers.py:1075
+#: ../src/common/connection.py:459
+#: ../src/common/logger.py:1153
+#: ../src/gajim.py:390
+#: ../src/session.py:97
+#, fuzzy
+msgid "Disk Write Error"
+msgstr "שגיאת כתיבה אל כונן"
+
+#: ../src/common/connection_handlers_events.py:912
+#: ../src/common/connection_handlers.py:956
+#: ../src/common/connection_handlers.py:1078
+#: ../src/common/connection.py:463
+#: ../src/common/logger.py:1156
+#: ../src/gajim.py:209
+#: ../src/session.py:101
+#, python-format
+msgid "The database file (%s) cannot be read. Try to repair it (see http://trac.gajim.org/wiki/DatabaseBackup) or remove it (all history will be lost)."
+msgstr "קובץ מסד הנתונים (%s) לא ניתן לקריאה. נסו לתקנו (ראו http://trac.gajim.org/wiki/DatabaseBackup) או להסירו (כל ההיסטוריה תאבד)."
+
+#. Room has been destroyed. see
+#. http://www.xmpp.org/extensions/xep-0045.html#destroyroom
+#: ../src/common/connection_handlers_events.py:933
+msgid "Room has been destroyed"
+msgstr "החדר הוחרב"
+
+#: ../src/common/connection_handlers_events.py:941
+#, python-format
+msgid "You can join this room instead: %s"
+msgstr "יש באפשרותך להצטרף אל חדר זה במקום: %s"
+
+#: ../src/common/connection_handlers_events.py:1025
+#: ../src/common/connection_handlers_events.py:1062
+#: ../src/common/connection.py:263
+#: ../src/config.py:2142
+#: ../src/config.py:2151
+#: ../src/config.py:2219
+#: ../src/config.py:3662
+#: ../src/dataforms_widget.py:633
+#: ../src/dialogs.py:3133
+msgid "Invalid Jabber ID"
+msgstr "כתובת JID שגויה"
+
+# מן כתובת
+# זכתה להתעלמות מן הצד/הקצה שלך
+#: ../src/common/connection_handlers_events.py:1026
+#: ../src/common/connection_handlers_events.py:1063
+msgid "A message from a non-valid JID arrived, it has been ignored."
+msgstr "התקבלה הודעה מן כתובת JID שאיננה תקפה, Gajim התעלם מן הודעה זו."
+
+#. ('MSGNOTSENT', account, (jid, ierror_msg, msg, time, session))
+#: ../src/common/connection_handlers_events.py:1094
+#: ../src/gui_interface.py:432
+#: ../src/gui_interface.py:446
+#, python-format
+msgid "error while sending %(message)s ( %(error)s )"
+msgstr "שגיאה בעת שליחת ‫%(message)s ‫( %(error)s )"
+
+#: ../src/common/connection_handlers_events.py:1565
+#, python-format
+msgid "Unknown SSL error: %d"
+msgstr "שגיאת SSL לא ידועה: %d"
+
+#: ../src/common/connection_handlers_events.py:2157
+#: ../src/dialogs.py:2818
+#: ../src/notify.py:266
+msgid "New Single Message"
+msgstr "הודעה בודדת חדשה"
+
+#: ../src/common/connection_handlers_events.py:2159
+#, python-format
+msgid "New Single Message from %(nickname)s"
+msgstr "התקבלה הודעה בודדת חדשה מאת %(nickname)s"
+
+#: ../src/common/connection_handlers_events.py:2163
+#: ../src/dialogs.py:2819
+#: ../src/notify.py:267
+msgid "New Private Message"
+msgstr "הודעה פרטית חדשה"
+
+# מן שיחת
+#: ../src/common/connection_handlers_events.py:2165
+#, python-format
+msgid "New Private Message from group chat %s"
+msgstr "הודעה פרטית חדשה משיחת הקבוצה %s"
+
+#: ../src/common/connection_handlers_events.py:2168
+#, python-format
+msgid "%(nickname)s: %(message)s"
+msgstr "‫%(nickname)s: ‫%(message)s"
+
+# [09:02:34 PM] Rodensky: "התקבלה הודעה מ"
+# [09:08:28 PM] Myself: אני חושב שזה: המסר נשלח על-ידי...
+# [09:08:39 PM] Rodensky: לא
+# [09:08:46 PM] Rodensky: זה "התקבלה הודעה מ"
+#: ../src/common/connection_handlers_events.py:2171
+#, python-format
+msgid "Messaged by %(nickname)s"
+msgstr "התקבלה הודעה מאת %(nickname)s"
+
+#: ../src/common/connection_handlers_events.py:2175
+#: ../src/dialogs.py:2818
+#: ../src/notify.py:266
+msgid "New Message"
+msgstr "הודעה חדשה"
+
+#: ../src/common/connection_handlers_events.py:2177
+#, python-format
+msgid "New Message from %(nickname)s"
+msgstr "הודעה חדשה מאת %(nickname)s"
+
+# ‫%(nick)s שינה/תה מצב
+#: ../src/common/connection_handlers_events.py:2320
+#, python-format
+msgid "%(nick)s Changed Status"
+msgstr "המצב של %(nick)s שונה"
+
+# See: LRE string PDF
+#: ../src/common/connection_handlers_events.py:2322
+#: ../src/groupchat_control.py:205
+#: ../src/groupchat_control.py:1767
+#: ../src/history_window.py:448
+#, python-format
+msgid "%(nick)s is now %(status)s"
+msgstr "‫%(nick)s מצוי/ה כעת במצב %(status)s "
+
+#: ../src/common/connection_handlers_events.py:2327
+#: ../src/dialogs.py:2830
+#: ../src/notify.py:280
+msgid "Contact Changed Status"
+msgstr "איש קשר שינה מצב־חיבור"
+
+#: ../src/common/connection_handlers_events.py:2329
+#, python-format
+msgid "%(nickname)s Signed In"
+msgstr "‫%(nickname)s התחבר/ה"
+
+#. default value
+#: ../src/common/connection_handlers_events.py:2334
+#: ../src/dialogs.py:2814
+#: ../src/notify.py:262
+msgid "Contact Signed In"
+msgstr "איש קשר התחבר"
+
+#: ../src/common/connection_handlers_events.py:2336
+#, python-format
+msgid "%(nickname)s Signed Out"
+msgstr "‫%(nickname)s התנתק/ה"
+
+#: ../src/common/connection_handlers_events.py:2341
+#: ../src/dialogs.py:2816
+#: ../src/notify.py:264
+msgid "Contact Signed Out"
+msgstr "איש קשר התנתק"
+
+#: ../src/common/connection_handlers.py:89
+#: ../src/common/zeroconf/connection_handlers_zeroconf.py:54
+msgid "Unable to load idle module"
+msgstr "לא ניתן לטעון מודוּל חוסר פעילות"
+
+#: ../src/common/connection_handlers.py:122
+#, python-format
+msgid "Registration information for transport %s has not arrived in time"
+msgstr "מידע רישום עבור המוביל %s לא הגיע בזמן"
+
+#: ../src/common/connection_handlers.py:130
+msgid "Registration succeeded"
+msgstr "רישום בוצע בהצלחה"
+
+# BUG: agent>transport ?
+#: ../src/common/connection_handlers.py:131
+#, python-format
+msgid "Registration with agent %s succeeded"
+msgstr "רישום עם סוכן %s בוצע בהצלחה"
+
+#: ../src/common/connection_handlers.py:140
+msgid "Registration failed"
+msgstr "רישום נכשל"
+
+# BUG: with errors
+# BUG: with an error
+# Needs to be tested
+#: ../src/common/connection_handlers.py:141
+#, python-format
+msgid "Registration with agent %(agent)s failed with error %(error)s: %(error_msg)s"
+msgstr "רישום עם סוכן %(agent)s נכשל בליווי שגיאה ‫%(error)s: %(error_msg)s"
+
+#: ../src/common/connection_handlers.py:575
+#: ../src/common/connection.py:1576
+msgid "Invisibility not supported"
+msgstr "מצב בלתי נראה אינו נתמך"
+
+#: ../src/common/connection_handlers.py:576
+#: ../src/common/connection.py:1577
+#, python-format
+msgid "Account %s doesn't support invisibility."
+msgstr "חשבון %s לא תומך במצב בלתי נראה."
+
+#: ../src/common/connection_handlers.py:1742
+msgid "I would like to add you to my roster."
+msgstr "ברצוני להוסיפך אל הרשימה שלי."
+
 #: ../src/common/connection.py:70
 msgid "Unable to get issuer certificate"
-msgstr "אין אפשרות לקבל תעודת מנפיק"
+msgstr "לא ניתן לקבל תעודת מנפיק"
 
 #: ../src/common/connection.py:71
 msgid "Unable to get certificate CRL"
-msgstr "אין אפשרות לקבל תעודת CRL"
+msgstr "לא ניתן לקבל תעודת CRL"
 
 #: ../src/common/connection.py:72
 msgid "Unable to decrypt certificate's signature"
-msgstr "אין אפשרות לפענח את החתימה של התעודה"
+msgstr "לא ניתן לפענח את החתימה של התעודה"
 
 #: ../src/common/connection.py:73
 msgid "Unable to decrypt CRL's signature"
-msgstr "אין אפשרות לפענח חתימת CRL"
+msgstr "לא ניתן לפענח חתימת CRL"
 
+# Is decode different from decrypt?
 #: ../src/common/connection.py:74
 msgid "Unable to decode issuer public key"
-msgstr "אין אפשרות לפענח מפתח ציבורי של מנפיק"
+msgstr "לא ניתן לפענח מפתח ציבורי של מנפיק"
 
+# תעודת חתימה נכשל
 #: ../src/common/connection.py:75
 msgid "Certificate signature failure"
 msgstr "כשל תעודת חתימה"
@@ -5042,13 +5257,15 @@ msgstr "התעודה פקעה"
 # CRL what? (Certificate?)
 #: ../src/common/connection.py:79
 msgid "CRL is not yet valid"
-msgstr "‏CRL אינה תקפה עדיין"
+msgstr "‫CRL עדיין לא תקפה"
 
 # CRL what? (Certificate?)
 #: ../src/common/connection.py:80
 msgid "CRL has expired"
-msgstr "‏CRL פקעה"
+msgstr "‫CRL פקעה"
 
+# תבנית
+# שבתעודה
 #: ../src/common/connection.py:81
 msgid "Format error in certificate's notBefore field"
 msgstr "שגיאת תסדיר בשדה notBefore של התעודה"
@@ -5080,16 +5297,18 @@ msgstr "תעודה חתומה באופן עצמי בתוך שרשרת תעודה
 
 #: ../src/common/connection.py:88
 msgid "Unable to get local issuer certificate"
-msgstr "אין אפשרות לקבל תעודת מנפיק מקומית"
+msgstr "לא ניתן לקבל תעודת מנפיק מקומית"
 
 #: ../src/common/connection.py:89
 msgid "Unable to verify the first certificate"
-msgstr "אין אפשרות לאמת את התעודה הראשונה"
+msgstr "לא ניתן לאמת את התעודה הראשונה"
 
+# מחרוזת
 #: ../src/common/connection.py:90
 msgid "Certificate chain too long"
-msgstr "שרשרת תעודה ארוכה מדי"
+msgstr "שרשרת תעודה ארוכה מידי"
 
+# נפסלה
 #: ../src/common/connection.py:91
 msgid "Certificate revoked"
 msgstr "התעודה בוטלה"
@@ -5100,9 +5319,11 @@ msgstr "תעודת CA חסרת תוקף"
 
 #: ../src/common/connection.py:93
 msgid "Path length constraint exceeded"
-msgstr "מגבלת אורך נתיב מוצתה"
+msgstr ""
 
+# מטרת
 #: ../src/common/connection.py:94
+#, fuzzy
 msgid "Unsupported certificate purpose"
 msgstr "תכלית תעודה לא נתמכת"
 
@@ -5119,7 +5340,7 @@ msgstr "התעודה נדחתה"
 # קיימת אי תיאום עם/ב
 #: ../src/common/connection.py:97
 msgid "Subject issuer mismatch"
-msgstr "נושא מנפיק לא תואם"
+msgstr ""
 
 #: ../src/common/connection.py:98
 msgid "Authority and subject key identifier mismatch"
@@ -5132,43 +5353,35 @@ msgstr "רשות ומספר סידורי של מנפיק לא תואמים"
 
 #: ../src/common/connection.py:100
 msgid "Key usage does not include certificate signing"
-msgstr "שימוש מפתח לא כולל חתימת תעודה"
+msgstr ""
 
 #: ../src/common/connection.py:101
 #, fuzzy
 msgid "Application verification failure"
 msgstr "כשל אימות פניה"
 
-#: ../src/common/connection.py:270 ../src/common/connection.py:280
-#: ../src/common/connection_handlers_events.py:1027
-#: ../src/common/connection_handlers_events.py:1070 ../src/config.py:2157
-#: ../src/config.py:2166 ../src/config.py:2236 ../src/config.py:3680
-#: ../src/dataforms_widget.py:633 ../src/dialogs.py:3244
-msgid "Invalid Jabber ID"
-msgstr "מזהה Jabber שגוי"
-
-#: ../src/common/connection.py:271 ../src/common/connection.py:281
-#: ../src/dialogs.py:3245
+#: ../src/common/connection.py:264
+#: ../src/dialogs.py:3134
 #, python-format
 msgid "It is not possible to send a message to %s, this JID is not valid."
-msgstr "אין אפשרות לשלוח הודעה אל %s, כתובת JID זו אינה תקפה."
+msgstr "לא ניתן לשלוח הודעה אל %s, כתובת JID זו אינה תקפה."
 
-#: ../src/common/connection.py:304
+#: ../src/common/connection.py:286
 msgid "Neither the remote presence is signed, nor a key was assigned."
 msgstr "אף לא הנוכחות המרוחקת חתומה, וגם לא הוקצה מפתח."
 
-#: ../src/common/connection.py:307
+#: ../src/common/connection.py:289
 #, python-format
 msgid "The contact's key (%s) does not match the key assigned in Gajim."
-msgstr "המפתח של איש קשר (%s) לא תואם את המפתח שמוקצה בתוך Gajim."
+msgstr "המפתח של איש קשר (%s) לא תואם את המפתח שמוקצה אצל Gajim."
 
 # Needs to be tested
 #. we're not english: one in locale and one en
-#: ../src/common/connection.py:363
+#: ../src/common/connection.py:343
 msgid "[This message is *encrypted* (See :XEP:`27`]"
 msgstr "[הודעה זו הינה *מוצפנת* (ראו :XEP:`27‪`‬]"
 
-#: ../src/common/connection.py:507
+#: ../src/common/connection.py:446
 #, python-format
 msgid ""
 "Subject: %(subject)s\n"
@@ -5177,120 +5390,103 @@ msgstr ""
 "נושא: %(subject)s\n"
 "%(message)s"
 
-# BUG: spawning dialog
-#: ../src/common/connection.py:520 ../src/common/connection_handlers.py:343
-#: ../src/common/connection_handlers.py:1143
-#: ../src/common/connection_handlers.py:1267
-#: ../src/common/connection_handlers_events.py:910
-#: ../src/common/logger.py:1159 ../src/gajim.py:435 ../src/session.py:95
-msgid "Disk Write Error"
-msgstr "שגיאת כתיבת כונן"
-
-#: ../src/common/connection.py:524 ../src/common/connection_handlers.py:1146
-#: ../src/common/connection_handlers.py:1270
-#: ../src/common/connection_handlers_events.py:914
-#: ../src/common/logger.py:1162 ../src/gajim.py:230 ../src/session.py:99
-#, python-format
-msgid ""
-"The database file (%s) cannot be read. Try to repair it (see http://trac."
-"gajim.org/wiki/DatabaseBackup) or remove it (all history will be lost)."
-msgstr ""
-"קובץ מסד הנתונים (%s) לא ניתן לקריאה. נסו לתקנו (ראו http://trac.gajim.org/"
-"wiki/DatabaseBackup) או להסירו (כל ההיסטוריה תאבד)."
-
-#: ../src/common/connection.py:930
+#: ../src/common/connection.py:866
 #, python-format
 msgid "Connection with account \"%s\" has been lost"
 msgstr "החיבור עם חשבון \"%s\" אבד"
 
-#: ../src/common/connection.py:931
+# כדי להתחבר מחדש, עליך להתחבר ידנית
+#: ../src/common/connection.py:867
 msgid "Reconnect manually."
 msgstr "התחבר ידנית."
 
 #. it's a new account
 #. wrong answer
-#: ../src/common/connection.py:942
+#: ../src/common/connection.py:878
 #, python-format
 msgid "Server %(name)s answered wrongly to register request: %(error)s"
 msgstr "שרת %(name)s ענה באופן שגוי לבקשת rhauo: %(error)s"
 
 #. requested config has changed since first connection
-#: ../src/common/connection.py:984
+#: ../src/common/connection.py:920
 #, python-format
 msgid "Server %s provided a different registration form"
-msgstr "שרת %s סיפק טופס רישום שונה"
+msgstr "שרת %s סיפק צורת רישום שונה"
 
-#: ../src/common/connection.py:1001
+#: ../src/common/connection.py:937
 msgid "Invalid answer"
 msgstr "תשובה שגויה"
 
-#: ../src/common/connection.py:1002
+#: ../src/common/connection.py:938
 #, python-format
 msgid "Transport %(name)s answered wrongly to register request: %(error)s"
 msgstr "מוביל %(name)s ענה באופן שגוי לבקשת רישום: %(error)s"
 
-#: ../src/common/connection.py:1297
-#, python-format
-msgid "Could not connect to \"%(host)s\" via proxy \"%(proxy)s\""
-msgstr "לא היתה אפשרות להתחבר אל \"%(host)s\" דרך ציר \"%(proxy)s\""
-
-#: ../src/common/connection.py:1300
+#: ../src/common/connection.py:1230
+#: ../src/common/connection.py:1385
+#: ../src/common/connection.py:2016
+#: ../src/common/zeroconf/connection_zeroconf.py:205
 #, python-format
-msgid "Could not connect to \"%(host)s\""
-msgstr "לא היתה אפשרות להתחבר אל \"%(host)s\""
+msgid "Could not connect to \"%s\""
+msgstr "לא ניתן להתחבר אל \"%s\""
 
-#: ../src/common/connection.py:1302 ../src/common/connection.py:1463
-#: ../src/gui_interface.py:542
+# BUG: x2
+#: ../src/common/connection.py:1231
+#: ../src/gui_interface.py:541
 msgid "Check your connection or try again later."
-msgstr "בדוק את החיבור שלך או נסה שוב מאוחר יותר."
+msgstr "נא לבדוק את החיבור או לנסות שוב מאוחר יותר."
 
-#: ../src/common/connection.py:1307
+#: ../src/common/connection.py:1236
 #, python-format
 msgid "Server replied: %s"
 msgstr "תגובת שרת: %s"
 
-#: ../src/common/connection.py:1322
+# כשל בהתחברות
+# החיבור
+#: ../src/common/connection.py:1251
 msgid "Connection to proxy failed"
-msgstr "התחברות אל ציר נכשלה"
+msgstr "התחברות אל מתווך נכשלה"
 
-#: ../src/common/connection.py:1360 ../src/common/connection.py:1438
+#: ../src/common/connection.py:1289
+#: ../src/common/connection.py:1361
 #, python-format
 msgid "Could not connect to account %s"
-msgstr "לא היתה אפשרות להתחבר אל חשבון %s"
+msgstr "לא ניתן להתחבר אל חשבון %s"
 
-#: ../src/common/connection.py:1361 ../src/common/connection.py:1439
+#: ../src/common/connection.py:1290
+#: ../src/common/connection.py:1362
 #, python-format
 msgid "Connection with account %s has been lost. Retry connecting."
 msgstr "החיבור עם חשבון %s אבד. מנסה להתחבר כעת מחדש."
 
 # חסרת תוקף
-#: ../src/common/connection.py:1388
+#: ../src/common/connection.py:1315
 #, python-format
 msgid "The authenticity of the %s certificate could be invalid."
 msgstr "מהימנותה של התעודה %s עלולה להיות רעועה."
 
-#: ../src/common/connection.py:1391
+#: ../src/common/connection.py:1318
 #, python-format
 msgid ""
 "\n"
 "SSL Error: <b>%s</b>"
 msgstr ""
 "\n"
-"שגיאת SSL: ‏<b>%s</b>"
+"שגיאת SSL: ‫<b>%s</b>"
 
-#: ../src/common/connection.py:1393
+#: ../src/common/connection.py:1320
 #, python-format
 msgid ""
 "\n"
 "Unknown SSL error: %d"
 msgstr ""
 "\n"
-"שגיאת SSL לא מוכרת: %d"
+"שגיאת SSL לא ידועה: %d"
 
 # חסרת תוקף
 # שם תחום
 # כוללת
-#: ../src/common/connection.py:1420
+#: ../src/common/connection.py:1343
 #, python-format
 msgid ""
 "The authenticity of the %s certificate could be invalid.\n"
@@ -5299,244 +5495,73 @@ msgstr ""
 "מהימנותה של התעודה %s עלולה להיות רעועה.\n"
 "תעודה זו אינה מכסה את מתחם זה."
 
-#: ../src/common/connection.py:1462 ../src/common/connection.py:2203
-#: ../src/common/zeroconf/connection_zeroconf.py:205
-#, python-format
-msgid "Could not connect to \"%s\""
-msgstr "לא היתה אפשרות להתחבר אל \"%s\""
+# BUG: x2
+#: ../src/common/connection.py:1386
+msgid "Check your connection or try again later"
+msgstr "נא לבדוק את החיבור או לנסות שוב מאוחר יותר"
 
-#: ../src/common/connection.py:1498
+#: ../src/common/connection.py:1421
 #, python-format
 msgid "Authentication failed with \"%s\""
 msgstr "אימות עם \"%s\" נכשל"
 
 # נכונות
-#: ../src/common/connection.py:1499
+#: ../src/common/connection.py:1422
 msgid "Please check your login and password for correctness."
 msgstr "אנא בדוק את תקינות התחברותך וסיסמתך."
 
-#: ../src/common/connection.py:1574
+#: ../src/common/connection.py:1497
 msgid "Error while removing privacy list"
 msgstr "שגיאה במהלך הסרת רשימת פרטיות"
 
 # בטל/י נטרל/י
-#: ../src/common/connection.py:1575
-#, python-format
-msgid ""
-"Privacy list %s has not been removed. It is maybe active in one of your "
-"connected resources. Deactivate it and try again."
-msgstr ""
-"רשימת הפרטיות %s לא הוסרה. ייתכן וזו פעילה באחד ממשאביך אשר מחוברים כעת. בטל "
-"את פעילותה ונסה שוב."
-
-#: ../src/common/connection.py:1771 ../src/common/connection_handlers.py:592
+#: ../src/common/connection.py:1498
 #, python-format
-msgid "Account %s doesn't support invisibility."
-msgstr "חשבון %s לא תומך במצב בלתי נראה."
+msgid "Privacy list %s has not been removed. It is maybe active in one of your connected resources. Deactivate it and try again."
+msgstr "רשימת הפרטיות %s לא הוסרה. ייתכן וזו פעילה באחד ממשאביך שמחוברים כעת. יש לבטל את פעילותה ולנסות שוב."
 
-#: ../src/common/connection.py:1770 ../src/common/connection_handlers.py:591
-msgid "Invisibility not supported"
-msgstr "מצב בלתי נראה אינו נתמך"
-
-#: ../src/common/connection.py:2067
+#: ../src/common/connection.py:1883
 #, python-format
 msgid "Sent contact: \"%s\" (%s)"
-msgstr "איש קשר אשר נשלח: \"%s\" ‏(%s)"
+msgstr "איש קשר שנשלח: \"%s\" ‫(%s)"
 
-#: ../src/common/connection.py:2070
+#: ../src/common/connection.py:1886
 msgid "Sent contacts:"
-msgstr "אנשי קשר אשר נשלחו:"
+msgstr "אנשי קשר שנשלחו:"
 
 # נתון להשגה/לביצוע/בהישג יד
-#: ../src/common/connection.py:2220 ../src/common/connection.py:2242
+#: ../src/common/connection.py:2033
+#: ../src/common/connection.py:2056
 msgid "Not fetched because of invisible status"
-msgstr "לא מובא משום מצב חיבור בלתי נראה"
+msgstr "לא מובא משום מצב־חיבור בלתי נראה"
 
-#: ../src/common/connection.py:2826
+#: ../src/common/connection.py:2616
 msgid "Unregister failed"
 msgstr "ביטול רישום נכשל"
 
-#: ../src/common/connection.py:2827
+#: ../src/common/connection.py:2617
 #, python-format
 msgid "Unregistration with server %(server)s failed: %(error)s"
-msgstr "אי רישום בתוך שרת %(server)s נכשל: %(error)s"
-
-#: ../src/common/connection_handlers.py:92
-#: ../src/common/zeroconf/connection_handlers_zeroconf.py:53
-msgid "Unable to load idle module"
-msgstr "אין אפשרות לטעון מודוּל חוסר פעילות"
-
-#: ../src/common/connection_handlers.py:127
-#, python-format
-msgid "Registration information for transport %s has not arrived in time"
-msgstr "מידע רישום עבור המוביל %s לא הגיע בזמן"
-
-#: ../src/common/connection_handlers.py:135
-msgid "Registration succeeded"
-msgstr "רישום בוצע בהצלחה"
-
-#: ../src/common/connection_handlers.py:136
-#, python-format
-msgid "Registration with agent %s succeeded"
-msgstr "רישום עם סוכן %s בוצע בהצלחה"
-
-#: ../src/common/connection_handlers.py:145
-msgid "Registration failed"
-msgstr "רישום נכשל"
-
-# BUG: with errors
-# BUG: with an error
-# Needs to be tested
-#: ../src/common/connection_handlers.py:146
-#, python-format
-msgid ""
-"Registration with agent %(agent)s failed with error %(error)s: %(error_msg)s"
-msgstr "רישום עם סוכן %(agent)s נכשל בליווי שגיאה %(error)s: ‏%(error_msg)s"
-
-#: ../src/common/connection_handlers.py:1956
-msgid "I would like to add you to my roster."
-msgstr "ברצוני להוסיפך אל הרשימה שלי."
-
-#: ../src/common/connection_handlers_events.py:370
-#, python-format
-msgid ""
-"JID %s is not RFC compliant. It will not be added to your roster. Use roster "
-"management tools such as http://jru.jabberstudio.org/ to remove it"
-msgstr ""
-"‏JID ‏%s אינה תואמת RFC. זו לא תוסף אל רשימתך. ניתן להשתמש בכלי ניהול רשימה "
-"(roster management tools) כגון http://jru.jabberstudio.org כדי להסירה"
-
-#: ../src/common/connection_handlers_events.py:825
-#, python-format
-msgid "unsubscribe request from %s"
-msgstr "בקשת ביטול הרשמה מאת %s"
-
-#. Room has been destroyed. see
-#. http://www.xmpp.org/extensions/xep-0045.html#destroyroom
-#: ../src/common/connection_handlers_events.py:935
-msgid "Room has been destroyed"
-msgstr "החדר הוחרב"
-
-#: ../src/common/connection_handlers_events.py:943
-#, python-format
-msgid "You can join this room instead: %s"
-msgstr "באפשרותך להצטרף אל חדר זה במקום: %s"
-
-# זכתה להתעלמות מן הצד/הקצה שלך
-#: ../src/common/connection_handlers_events.py:1028
-#: ../src/common/connection_handlers_events.py:1071
-msgid "A message from a non-valid JID arrived, it has been ignored."
-msgstr "התקבלה הודעה מן JID אשר איננה תקפה, Gajim התעלם מן הודעה זו."
-
-#. ('MSGNOTSENT', account, (jid, ierror_msg, msg, time, session))
-#: ../src/common/connection_handlers_events.py:1102
-#: ../src/gui_interface.py:433 ../src/gui_interface.py:447
-#, python-format
-msgid "error while sending %(message)s ( %(error)s )"
-msgstr "שגיאה בעת שליחת %(message)s ‏( %(error)s )"
-
-#: ../src/common/connection_handlers_events.py:1307
-msgid "URL:"
-msgstr "‏URL:"
-
-#: ../src/common/connection_handlers_events.py:1608
-#, python-format
-msgid "Unknown SSL error: %d"
-msgstr "שגיאת SSL לא מוכרת: %d"
-
-#: ../src/common/connection_handlers_events.py:2211 ../src/dialogs.py:2917
-#: ../src/notify.py:266
-msgid "New Single Message"
-msgstr "הודעה בודדת חדשה"
-
-#: ../src/common/connection_handlers_events.py:2213
-#, python-format
-msgid "New Single Message from %(nickname)s"
-msgstr "התקבלה הודעה בודדת חדשה מאת %(nickname)s"
-
-#: ../src/common/connection_handlers_events.py:2217 ../src/dialogs.py:2918
-#: ../src/notify.py:267
-msgid "New Private Message"
-msgstr "הודעה פרטית חדשה"
-
-#: ../src/common/connection_handlers_events.py:2219
-#, python-format
-msgid "New Private Message from group chat %s"
-msgstr "הודעה פרטית חדשה מתוך שיחת קבוצה %s"
-
-#: ../src/common/connection_handlers_events.py:2222
-#, python-format
-msgid "%(nickname)s: %(message)s"
-msgstr ""
-
-# [09:02:34 PM] Rodensky: "התקבלה הודעה מ"
-# [09:08:28 PM] Myself: אני חושב שזה: המסר נשלח על-ידי...
-# [09:08:39 PM] Rodensky: לא
-# [09:08:46 PM] Rodensky: זה "התקבלה הודעה מ"
-#: ../src/common/connection_handlers_events.py:2225
-#, python-format
-msgid "Messaged by %(nickname)s"
-msgstr "התקבלה הודעה מאת %(nickname)s"
-
-#: ../src/common/connection_handlers_events.py:2229 ../src/dialogs.py:2917
-#: ../src/notify.py:266
-msgid "New Message"
-msgstr "הודעה חדשה"
-
-#: ../src/common/connection_handlers_events.py:2231
-#, python-format
-msgid "New Message from %(nickname)s"
-msgstr "הודעה חדשה מאת %(nickname)s"
-
-#: ../src/common/connection_handlers_events.py:2375
-#, python-format
-msgid "%(nick)s Changed Status"
-msgstr "המצב של %(nick)s שונה"
-
-#: ../src/common/connection_handlers_events.py:2377
-#: ../src/groupchat_control.py:207 ../src/groupchat_control.py:1855
-#: ../src/history_window.py:455
-#, python-format
-msgid "%(nick)s is now %(status)s"
-msgstr "%(nick)s מצוי/ה כעת במצב %(status)s "
-
-#: ../src/common/connection_handlers_events.py:2381 ../src/dialogs.py:2929
-#: ../src/notify.py:280
-msgid "Contact Changed Status"
-msgstr "איש קשר שינה מצב חיבור"
-
-#: ../src/common/connection_handlers_events.py:2383
-#, python-format
-msgid "%(nickname)s Signed In"
-msgstr "%(nickname)s התחבר/ה"
+msgstr "אי רישום אצל שרת %(server)s נכשל: %(error)s"
 
-#. default value
-#: ../src/common/connection_handlers_events.py:2387 ../src/dialogs.py:2913
-#: ../src/notify.py:262
-msgid "Contact Signed In"
-msgstr "איש קשר התחבר"
-
-#: ../src/common/connection_handlers_events.py:2389
-#, python-format
-msgid "%(nickname)s Signed Out"
-msgstr "%(nickname)s התנתק/ה"
-
-#: ../src/common/connection_handlers_events.py:2393 ../src/dialogs.py:2915
-#: ../src/notify.py:264
-msgid "Contact Signed Out"
-msgstr "איש קשר התנתק"
-
-#: ../src/common/contacts.py:129 ../src/common/helpers.py:67
-#: ../src/gui_interface.py:485
+#: ../src/common/contacts.py:129
+#: ../src/common/helpers.py:67
+#: ../src/gui_interface.py:484
 msgid "Observers"
 msgstr "משקיפים"
 
-#: ../src/common/contacts.py:133 ../src/common/contacts.py:361
-#: ../src/common/helpers.py:67 ../src/disco.py:121 ../src/disco.py:122
-#: ../src/disco.py:1554 ../src/roster_window.py:863
-#: ../src/roster_window.py:1614 ../src/roster_window.py:1728
-#: ../src/roster_window.py:1730 ../src/roster_window.py:1892
-#: ../src/roster_window.py:2589
+#: ../src/common/contacts.py:133
+#: ../src/common/contacts.py:361
+#: ../src/common/helpers.py:67
+#: ../src/disco.py:120
+#: ../src/disco.py:121
+#: ../src/disco.py:1516
+#: ../src/roster_window.py:859
+#: ../src/roster_window.py:1608
+#: ../src/roster_window.py:1718
+#: ../src/roster_window.py:1720
+#: ../src/roster_window.py:1882
+#: ../src/roster_window.py:2579
 msgid "Transports"
 msgstr "מובילים"
 
@@ -5572,9 +5597,10 @@ msgstr "מסד נתונים לא יכול להיקרא."
 
 #: ../src/common/exceptions.py:56
 msgid "Service not available: Gajim is not running, or remote_control is False"
-msgstr "שירות לא זמין: Gajim לא מורץ, או שההעדפה remote_control הינה מנוטרלת"
+msgstr "שירות לא זמין: Gajim לא מורץ, או שהאפשרות remote_control מנוטרלת"
 
-#: ../src/common/exceptions.py:67 ../src/gajim-remote.py:56
+#: ../src/common/exceptions.py:67
+#: ../src/gajim-remote.py:55
 msgid "D-Bus is not present on this machine or python module is missing"
 msgstr ""
 
@@ -5763,15 +5789,15 @@ msgstr "סופשבוע!"
 
 #: ../src/common/helpers.py:158
 msgid "Username must be between 1 and 1023 chars"
-msgstr "שם משתמש מוכרח להיות בין 1 עד 1023 תווים"
+msgstr "שם משתמש מוכרח להיות בין 1 אל 1023 תווים"
 
 #: ../src/common/helpers.py:163
 msgid "Invalid character in username."
-msgstr "תו שגוי בתוך שם משתמש."
+msgstr "תו שגוי בשם משתמש"
 
 #: ../src/common/helpers.py:169
 msgid "Server must be between 1 and 1023 chars"
-msgstr "שרת מוכרח להיות בין 1 עד 1023 תווים"
+msgstr "שרת מוכרח להיות בין 1 אל 1023 תווים"
 
 #: ../src/common/helpers.py:174
 msgid "Invalid character in hostname."
@@ -5783,7 +5809,7 @@ msgstr "נדרשת כתובת שרת."
 
 #: ../src/common/helpers.py:180
 msgid "Resource must be between 1 and 1023 chars"
-msgstr "משאב מוכרח להיות בין 1 עד 1023 תווים"
+msgstr "משאב מוכרח להיות בין 1 אל 1023 תווים"
 
 #: ../src/common/helpers.py:185
 msgid "Invalid character in resource."
@@ -5865,7 +5891,7 @@ msgstr "אל"
 
 #: ../src/common/helpers.py:274
 msgid "From"
-msgstr "מן"
+msgstr "מאת"
 
 #: ../src/common/helpers.py:276
 msgid "Both"
@@ -5883,6 +5909,7 @@ msgstr "הרשמה"
 msgid "?Group Chat Contact Role:None"
 msgstr "ללא"
 
+# לא לעשות שימווש במילה אחראיים
 #: ../src/common/helpers.py:298
 msgid "Moderators"
 msgstr "אחראים"
@@ -5923,26 +5950,31 @@ msgstr "מנהל"
 msgid "Member"
 msgstr "חבר"
 
+# Osmo - LRE. Take it!
+# BUG: Due to RTL issue, I need a translation field that includes username so that I will manage to order it for RTL layout.
+# מסב/ה צומת לב אל השיחה
+# מקשיב/ה
 #: ../src/common/helpers.py:361
 msgid "is paying attention to the conversation"
-msgstr "קשוב/ה לשיחה"
+msgstr "‪קשוב/ה לשיחה"
 
 #: ../src/common/helpers.py:363
 msgid "is doing something else"
-msgstr "עושה משהו אחר"
+msgstr "‪עושה משהו אחר"
 
+# מלחין/נה
 #: ../src/common/helpers.py:365
 msgid "is composing a message..."
-msgstr "כותב/ת הודעה..."
+msgstr "‪כותב/ת הודעה..."
 
 #. paused means he or she was composing but has stopped for a while
 #: ../src/common/helpers.py:368
 msgid "paused composing a message"
-msgstr "חדל/ה מלהלחין הודעה"
+msgstr "פסק/ה מלהלחין הודעה"
 
 #: ../src/common/helpers.py:370
 msgid "has closed the chat window or tab"
-msgstr "סגר/ה את כרטיסיית או את חלון השיחה"
+msgstr "סגר/ה את לשונית או את חלון השיחה"
 
 # גיבי בתים
 #. GiB means gibibyte
@@ -6027,30 +6059,34 @@ msgstr[1] "%d אירועים תלויים ועומדים"
 msgid "Gajim - %s"
 msgstr "‫Gajim - ‫%s"
 
-#: ../src/common/helpers.py:1368
+# LRE string PDF
+# שמי הוא
+#: ../src/common/helpers.py:1365
 msgid "Hello, I am $name."
-msgstr "שלום, שמי $name."
+msgstr "שלום, שמי ‪$name‬. "
 
-#: ../src/common/helpers.py:1478 ../src/common/helpers.py:1487
-#: ../src/common/helpers.py:1541
+#: ../src/common/helpers.py:1475
+#: ../src/common/helpers.py:1484
+#: ../src/common/helpers.py:1538
 msgid "Timeout loading image"
-msgstr "תם הזמן אשר הוקצב לטעינת תמונה"
+msgstr "תם הזמן שהוקצב לטעינת תמונה"
 
 # BUG: File too big
-#: ../src/common/helpers.py:1497 ../src/common/helpers.py:1539
+#: ../src/common/helpers.py:1494
+#: ../src/common/helpers.py:1536
 msgid "Image is too big"
-msgstr "התמונה גדולה מדי"
+msgstr "התמונה גדולה מידי"
 
-#: ../src/common/helpers.py:1507
+#: ../src/common/helpers.py:1504
 msgid "PyCURL is not installed"
-msgstr "‏PyCURL אינה מותקנת"
+msgstr "‫PyCURL אינה מותקנת"
 
-#: ../src/common/helpers.py:1543
+#: ../src/common/helpers.py:1540
 msgid "Error loading image"
 msgstr "שגיאה בטעינת תמונה"
 
 # Needs to be tested
-#: ../src/common/jingle_rtp.py:114
+#: ../src/common/jingle_rtp.py:110
 #, python-format
 msgid "%s configuration error"
 msgstr "שגיאת תצורת %s"
@@ -6058,7 +6094,7 @@ msgstr "שגיאת תצורת %s"
 # ההתקנה
 # הצינור (Pipeline) היה
 # השגיאה היתה
-#: ../src/common/jingle_rtp.py:115
+#: ../src/common/jingle_rtp.py:111
 #, python-format
 msgid ""
 "Couldn't setup %s. Check your configuration.\n"
@@ -6069,7 +6105,7 @@ msgid ""
 "Error was:\n"
 "%s"
 msgstr ""
-"לא היתה אפשרות להגדיר %s. בדוק את הגדרת התצורה שלך.\n"
+"לא ניתן להגדיר את %s. נא לבדוק את הגדרת התצורה שלך.\n"
 "\n"
 "Pipeline was:\n"
 "%s\n"
@@ -6077,11 +6113,11 @@ msgstr ""
 "Error was:\n"
 "%s"
 
-#: ../src/common/jingle_rtp.py:220
+#: ../src/common/jingle_rtp.py:207
 msgid "GStreamer error"
 msgstr "שגיאת ‫GStreamer"
 
-#: ../src/common/jingle_rtp.py:220
+#: ../src/common/jingle_rtp.py:207
 #, python-format
 msgid ""
 "Error: %s\n"
@@ -6090,112 +6126,112 @@ msgstr ""
 "שגיאה: %s\n"
 "ניפוי שגיאות: %s"
 
-#: ../src/common/jingle_rtp.py:354
+#: ../src/common/jingle_rtp.py:337
 msgid "audio input"
 msgstr "קלט שמע"
 
-#: ../src/common/jingle_rtp.py:357
+#: ../src/common/jingle_rtp.py:340
 msgid "audio output"
 msgstr "פלט שמע"
 
-#: ../src/common/jingle_rtp.py:412
+#: ../src/common/jingle_rtp.py:382
 msgid "video input"
 msgstr "קלט וידאו"
 
-#: ../src/common/jingle_rtp.py:421
+#: ../src/common/jingle_rtp.py:391
 msgid "video output"
 msgstr "פלט וידאו"
 
 #: ../src/common/logging_helpers.py:33
-#, fuzzy, python-format
+#, python-format
 msgid "%s is not a valid loglevel"
-msgstr "cli"
+msgstr ""
 
-#: ../src/common/multimedia_helpers.py:41
+#: ../src/common/multimedia_helpers.py:39
 msgid " Default device"
-msgstr "מכשיר משתמט"
+msgstr "תקן משתמט"
 
 #. Test src
-#: ../src/common/multimedia_helpers.py:62
+#: ../src/common/multimedia_helpers.py:60
 msgid "Audio test"
 msgstr "בדיקת שמע"
 
 #. Auto src
 #. Auto sink
 #. Auto src
-#: ../src/common/multimedia_helpers.py:65
-#: ../src/common/multimedia_helpers.py:81
-#: ../src/common/multimedia_helpers.py:95
-#: ../src/common/multimedia_helpers.py:113
+#: ../src/common/multimedia_helpers.py:63
+#: ../src/common/multimedia_helpers.py:79
+#: ../src/common/multimedia_helpers.py:93
+#: ../src/common/multimedia_helpers.py:111
 msgid "Autodetect"
 msgstr "איתור אוטומטי"
 
 #. Alsa src
 #. Alsa sink
-#: ../src/common/multimedia_helpers.py:68
-#: ../src/common/multimedia_helpers.py:83
+#: ../src/common/multimedia_helpers.py:66
+#: ../src/common/multimedia_helpers.py:81
 #, python-format
 msgid "ALSA: %s"
-msgstr "‏ALSA: ‏%s"
+msgstr "‫ALSA: ‫%s"
 
 #. Pulseaudio src
 #. Pulseaudio sink
-#: ../src/common/multimedia_helpers.py:71
-#: ../src/common/multimedia_helpers.py:85
+#: ../src/common/multimedia_helpers.py:69
+#: ../src/common/multimedia_helpers.py:83
 #, python-format
 msgid "Pulse: %s"
-msgstr "‏Pulse: ‏%s"
+msgstr "‫Pulse: ‫%s"
 
 # מעושה, מלאכותי
 #. Fake sink
-#: ../src/common/multimedia_helpers.py:79
+#. Fake video output
+#: ../src/common/multimedia_helpers.py:77
+#: ../src/common/multimedia_helpers.py:105
 msgid "Fake audio output"
 msgstr "פלט שמע מזויף"
 
 #. Test src
-#: ../src/common/multimedia_helpers.py:92
+#: ../src/common/multimedia_helpers.py:90
 msgid "Video test"
 msgstr "בדיקת וידאו"
 
 #. V4L2 src
-#: ../src/common/multimedia_helpers.py:97
+#: ../src/common/multimedia_helpers.py:95
 #, python-format
 msgid "V4L2: %s"
-msgstr "‏V4L2: ‏%s"
+msgstr "‫V4L2: ‫%s"
 
 # not sure מרקע
 #. Funny things, just to test...
 #. self.devices['GOOM'] = 'audiotestsrc ! goom'
-#: ../src/common/multimedia_helpers.py:100
+#: ../src/common/multimedia_helpers.py:98
 msgid "Screen"
 msgstr "אקרן"
 
-#. Fake video output
-#: ../src/common/multimedia_helpers.py:107
-msgid "Fake video output"
-msgstr "פלט וידאו מזויף"
-
-#: ../src/common/multimedia_helpers.py:110
+#: ../src/common/multimedia_helpers.py:108
 #, python-format
 msgid "X Window System (X11/XShm/Xv): %s"
-msgstr "מערכת חלונות X ‏(X11/XShm/Xv): ‏%s"
+msgstr "מערכת חלונות X ‫(X11/XShm/Xv): ‫%s"
 
 #. ximagesink
-#: ../src/common/multimedia_helpers.py:112
+#: ../src/common/multimedia_helpers.py:110
 msgid "X Window System (without Xv)"
 msgstr "מערכת חלונות X (ללא Xv)"
 
 #. we talk about a file
 #. we talk about file
-#: ../src/common/optparser.py:53 ../src/gtkgui_helpers.py:204
-#: ../src/gtkgui_helpers.py:220
+#: ../src/common/optparser.py:53
+#: ../src/gtkgui_helpers.py:203
+#: ../src/gtkgui_helpers.py:219
 #, python-format
 msgid "Error: cannot open %s for reading"
-msgstr "שגיאה: אין אפשרות לפתוח את %s לקריאה"
+msgstr "שגיאה: לא ניתן לפתוח את %s לקריאה"
 
-#: ../src/common/optparser.py:304 ../src/common/optparser.py:305
+# ציאן
+#: ../src/common/optparser.py:304
+#: ../src/common/optparser.py:305
 msgid "cyan"
-msgstr ""
+msgstr "cyan"
 
 #: ../src/common/optparser.py:384
 #, fuzzy
@@ -6640,7 +6676,8 @@ msgstr "אוכל ארוחת צהריים"
 msgid "Exercising"
 msgstr "מתאמן"
 
-#: ../src/common/pep.py:133 ../src/common/pep.py:178
+#: ../src/common/pep.py:133
+#: ../src/common/pep.py:177
 msgid "Cycling"
 msgstr "ברכיבה על אופניים"
 
@@ -6749,246 +6786,245 @@ msgid "Relaxing"
 msgstr "נרגע"
 
 #: ../src/common/pep.py:160
-msgid "Fishing"
-msgstr "דג"
-
-#: ../src/common/pep.py:161
 msgid "Gaming"
 msgstr "משחק"
 
 # any better word?
 # יוצאים קבוע going steady
 # יוצא
-#: ../src/common/pep.py:162
+#: ../src/common/pep.py:161
 msgid "Going out"
 msgstr "מסתובב בחוץ"
 
-#: ../src/common/pep.py:163
+#: ../src/common/pep.py:162
 msgid "Partying"
 msgstr "חוגג"
 
-#: ../src/common/pep.py:164
+#: ../src/common/pep.py:163
 msgid "Reading"
 msgstr "קורא"
 
 # מתאמן
-#: ../src/common/pep.py:165
+#: ../src/common/pep.py:164
 msgid "Rehearsing"
 msgstr "מתרגל"
 
-#: ../src/common/pep.py:166
+#: ../src/common/pep.py:165
 msgid "Shopping"
 msgstr "בקניות"
 
-#: ../src/common/pep.py:167
+#: ../src/common/pep.py:166
 msgid "Smoking"
 msgstr "מעשן"
 
 # Be aware of brainwashing terms!
 # בגיבוש, מתגבש
-#: ../src/common/pep.py:168
+#: ../src/common/pep.py:167
 msgid "Socializing"
 msgstr "מתחבר"
 
-#: ../src/common/pep.py:169
+#: ../src/common/pep.py:168
 msgid "Sunbathing"
 msgstr "משתזף"
 
-#: ../src/common/pep.py:170
+#: ../src/common/pep.py:169
 msgid "Watching TV"
 msgstr "צופה בטלוויזיה"
 
-#: ../src/common/pep.py:171
+#: ../src/common/pep.py:170
 msgid "Watching a Movie"
 msgstr "צופה בסרט"
 
 # מדבר
-#: ../src/common/pep.py:172
+#: ../src/common/pep.py:171
 msgid "Talking"
 msgstr "משוחח"
 
-#: ../src/common/pep.py:173
+#: ../src/common/pep.py:172
 msgid "In Real Life"
 msgstr "בחיים האמיתיים"
 
-#: ../src/common/pep.py:174
+#: ../src/common/pep.py:173
 msgid "On the Phone"
 msgstr "בטלפון"
 
-#: ../src/common/pep.py:175
+#: ../src/common/pep.py:174
 msgid "On Video Phone"
 msgstr "בוידאו־פון"
 
-#: ../src/common/pep.py:176
+#: ../src/common/pep.py:175
 msgid "Traveling"
 msgstr "במסע"
 
-#: ../src/common/pep.py:177
+#: ../src/common/pep.py:176
 msgid "Commuting"
 msgstr "ביוממות"
 
-#: ../src/common/pep.py:179
+#: ../src/common/pep.py:178
 msgid "Driving"
 msgstr "בנהיגה"
 
-#: ../src/common/pep.py:180
+#: ../src/common/pep.py:179
 msgid "In a Car"
 msgstr "במכונית"
 
-#: ../src/common/pep.py:181
+#: ../src/common/pep.py:180
 msgid "On a Bus"
 msgstr "באוטובוס"
 
-#: ../src/common/pep.py:182
+#: ../src/common/pep.py:181
 msgid "On a Plane"
 msgstr "במטוס"
 
-#: ../src/common/pep.py:183
+#: ../src/common/pep.py:182
 msgid "On a Train"
 msgstr "ברכבת"
 
-#: ../src/common/pep.py:184
+#: ../src/common/pep.py:183
 msgid "On a Trip"
 msgstr "בטיול"
 
-#: ../src/common/pep.py:185
+#: ../src/common/pep.py:184
 msgid "Walking"
 msgstr "הולך"
 
-#: ../src/common/pep.py:187
+#: ../src/common/pep.py:186
 msgid "Coding"
 msgstr "מקודד"
 
-#: ../src/common/pep.py:188
+#: ../src/common/pep.py:187
 msgid "In a Meeting"
 msgstr "בפגישה"
 
-#: ../src/common/pep.py:189
+#: ../src/common/pep.py:188
 msgid "Studying"
 msgstr "לומד"
 
-#: ../src/common/pep.py:190
+#: ../src/common/pep.py:189
 msgid "Writing"
 msgstr "כותב"
 
-#: ../src/common/pep.py:195
+#: ../src/common/pep.py:194
 msgid "accuracy"
 msgstr "דיוק"
 
-#: ../src/common/pep.py:196
+#: ../src/common/pep.py:195
 msgid "alt"
 msgstr "גובה"
 
-#: ../src/common/pep.py:197
+#: ../src/common/pep.py:196
 msgid "area"
 msgstr "אזור"
 
 # GPS bearing
-#: ../src/common/pep.py:198
+#: ../src/common/pep.py:197
 msgid "bearing"
 msgstr "הסבה"
 
-#: ../src/common/pep.py:199
+#: ../src/common/pep.py:198
 msgid "building"
 msgstr "בניין"
 
-#: ../src/common/pep.py:200
+#: ../src/common/pep.py:199
 msgid "country"
 msgstr "ארץ"
 
-#: ../src/common/pep.py:201
+#: ../src/common/pep.py:200
 msgid "countrycode"
 msgstr "מיקוד מדינה"
 
 # GPS datum
-#: ../src/common/pep.py:202
+#: ../src/common/pep.py:201
 msgid "datum"
 msgstr "נתון"
 
-#: ../src/common/pep.py:203
+#: ../src/common/pep.py:202
 msgid "description"
 msgstr "תיאור"
 
-#: ../src/common/pep.py:204
+#: ../src/common/pep.py:203
 msgid "error"
 msgstr "שגיאה"
 
-#: ../src/common/pep.py:205
+#: ../src/common/pep.py:204
 msgid "floor"
 msgstr "קומה"
 
-#: ../src/common/pep.py:206
+#: ../src/common/pep.py:205
 msgid "lat"
 msgstr "קו רוחב"
 
-#: ../src/common/pep.py:207
+#: ../src/common/pep.py:206
 msgid "locality"
 msgstr "מקומיות"
 
-#: ../src/common/pep.py:208
+#: ../src/common/pep.py:207
 msgid "lon"
 msgstr "קו אורך"
 
-#: ../src/common/pep.py:209
+#: ../src/common/pep.py:208
 msgid "postalcode"
 msgstr "מיקוד דואר"
 
-#: ../src/common/pep.py:210
+#: ../src/common/pep.py:209
 msgid "region"
 msgstr "תחום"
 
-#: ../src/common/pep.py:211
+# PEP
+#: ../src/common/pep.py:210
+#: ../src/gajim-remote.py:288
+#, fuzzy
 msgid "room"
-msgstr "חדר"
+msgstr "cli"
 
-#: ../src/common/pep.py:212
+#: ../src/common/pep.py:211
 msgid "speed"
 msgstr "מהירות"
 
-#: ../src/common/pep.py:213
+#: ../src/common/pep.py:212
 msgid "street"
 msgstr "רחוב"
 
-#: ../src/common/pep.py:214
+#: ../src/common/pep.py:213
 msgid "text"
 msgstr "תמליל"
 
-#: ../src/common/pep.py:215
+#: ../src/common/pep.py:214
 msgid "timestamp"
 msgstr "חותמת זמן"
 
-#: ../src/common/pep.py:216
+# ‏uri
+#: ../src/common/pep.py:215
+#: ../src/gajim-remote.py:279
 msgid "uri"
-msgstr "‏uri‏"
+msgstr "‫uri"
 
-#: ../src/common/pep.py:349
+#: ../src/common/pep.py:357
 msgid "Unknown Artist"
 msgstr "אמן לא ידוע"
 
-#: ../src/common/pep.py:352
+#: ../src/common/pep.py:360
 msgid "Unknown Title"
 msgstr "כותרת לא ידועה"
 
-#: ../src/common/pep.py:355
+#: ../src/common/pep.py:363
 msgid "Unknown Source"
 msgstr "מקור לא ידוע"
 
-#: ../src/common/pep.py:358
+#: ../src/common/pep.py:366
 #, python-format
 msgid ""
 "<b>\"%(title)s\"</b> by <i>%(artist)s</i>\n"
 "from <i>%(source)s</i>"
 msgstr ""
-"‏<b>\"%(title)s\"</b> מאת <i>%(artist)s</i>\n"
-"מתוך <i>%(source)s</i>"
+"‫<b>\"%(title)s\"</b> מאת <i>%(artist)s</i>\n"
+"מן האלבום <i>%(source)s</i>"
 
 # רואה הודעה זאת
 #. we're not english
-#: ../src/common/stanza_session.py:425
-msgid ""
-"[This is part of an encrypted session. If you see this message, something "
-"went wrong.]"
-msgstr "[זהו חלק מסשן מוצפן. באם הינך רואה את הודעה זאת, משהו השתבש.]"
+#: ../src/common/stanza_session.py:424
+msgid "[This is part of an encrypted session. If you see this message, something went wrong.]"
+msgstr "[זהו חלק מסשן מוצפן. באם הינך רואה את הודעה זו, משהו השתבש.]"
 
 # שגיאה אצל
 #: ../src/common/zeroconf/connection_zeroconf.py:193
@@ -7002,7 +7038,7 @@ msgid ""
 "Link-local messaging might not work properly."
 msgstr ""
 "%s\n"
-"ייתכן כי קישוריות מסרים מקומית לא תעבוד כראוי."
+"ייתכן שקישוריות מסרים מקומית לא תעבוד כראוי."
 
 #: ../src/common/zeroconf/connection_zeroconf.py:206
 msgid "Please check if Avahi or Bonjour is installed."
@@ -7011,12 +7047,12 @@ msgstr "אנא בדוק אם Avahi או Bonjour מותקן במערכת."
 #: ../src/common/zeroconf/connection_zeroconf.py:216
 #: ../src/common/zeroconf/connection_zeroconf.py:220
 msgid "Could not start local service"
-msgstr "לא היתה אפשרות להתחיל שירות מקומי"
+msgstr "לא ניתן להתחיל שירות מקומי"
 
 #: ../src/common/zeroconf/connection_zeroconf.py:217
 #, python-format
 msgid "Unable to bind to port %d."
-msgstr "אין אפשרות לכרוך אל פורט %d."
+msgstr "לא ניתן לכרוך אל פורט %d."
 
 #: ../src/common/zeroconf/connection_zeroconf.py:221
 #: ../src/common/zeroconf/connection_zeroconf.py:305
@@ -7030,22 +7066,23 @@ msgstr "אנא בדוק אם avahi-daemon מורץ כעת."
 #: ../src/common/zeroconf/connection_zeroconf.py:333
 #, python-format
 msgid "Could not change status of account \"%s\""
-msgstr "לא היתה אפשרות לשנות את המצב של חשבון \"%s\""
+msgstr "לא ניתן לשנות את המצב של חשבון \"%s\""
 
 # הודעתך לא יכולה להישלח.
-#: ../src/common/zeroconf/connection_zeroconf.py:353
+#: ../src/common/zeroconf/connection_zeroconf.py:352
+#: ../src/common/zeroconf/connection_zeroconf.py:393
 msgid "Your message could not be sent."
-msgstr "לא היתה אפשרות לשלוח את הודעתך זו."
+msgstr "לא ניתן היה לשלוח את הודעתך זו."
 
 # לא מחובר
-#: ../src/common/zeroconf/connection_zeroconf.py:367
+#: ../src/common/zeroconf/connection_zeroconf.py:366
+#: ../src/common/zeroconf/connection_zeroconf.py:407
 msgid "Contact is offline. Your message could not be sent."
-msgstr "איש קשר לא מקוון. לא היתה אפשרות לשלוח את הודעתך זו."
+msgstr "איש קשר לא מקוון. לא ניתן היה לשלוח את הודעתך זו."
 
-#: ../src/common/zeroconf/connection_zeroconf.py:394
-msgid ""
-"Connection to host could not be established: Timeout while sending data."
-msgstr "לא היתה אפשרות לבסס חיבור אל מארח: תם הזמן במהלך שליחת מידע."
+#: ../src/common/zeroconf/connection_zeroconf.py:434
+msgid "Connection to host could not be established: Timeout while sending data."
+msgstr "לא ניתן היה לבסס חיבור אל מארח: תם הזמן במהלך שליחת מידע."
 
 #: ../src/common/zeroconf/zeroconf_avahi.py:192
 #: ../src/common/zeroconf/zeroconf_bonjour.py:191
@@ -7053,26 +7090,29 @@ msgstr "לא היתה אפשרות לבסס חיבור אל מארח: תם הז
 msgid "Error while adding service. %s"
 msgstr "שגיאה במהלך הוספת שירות. %s"
 
-#: ../src/config.py:404
+#: ../src/config.py:409
 msgid "Default Message"
 msgstr "הודעה משתמטת"
 
-#: ../src/config.py:413
+#: ../src/config.py:418
 msgid "Enabled"
 msgstr "מאופשר"
 
 # משתמט
-#: ../src/config.py:468 ../src/config.py:472 ../src/config.py:3185
+#: ../src/config.py:473
+#: ../src/config.py:477
+#: ../src/config.py:3154
 msgid "Default"
 msgstr "ברירת מחדל"
 
-#: ../src/config.py:747 ../src/dialogs.py:1499
+#: ../src/config.py:759
+#: ../src/dialogs.py:1495
 #, python-format
 msgid "Dictionary for lang %s not available"
 msgstr "מילון עבור שפה %s לא זמין"
 
 # להפיק תועלת
-#: ../src/config.py:748
+#: ../src/config.py:760
 #, python-format
 msgid ""
 "You have to install %s dictionary to use spellchecking, or choose another "
@@ -7081,225 +7121,252 @@ msgstr ""
 "עליך להתקין מילון %s כדי לעשות שימוש בבדיקת איות, או בחרו בשפה שונה על ידי "
 "הגדרת האפשרות speller_language."
 
-#: ../src/config.py:1226
+#: ../src/config.py:1227
 msgid "status message title"
 msgstr "כותרת הודעת מצב"
 
-#: ../src/config.py:1226
+#: ../src/config.py:1227
 msgid "status message text"
 msgstr "תמליל הודעת מצב"
 
 #. Name column
-#: ../src/config.py:1553 ../src/dialogs.py:2673 ../src/dialogs.py:2740
-#: ../src/dialogs.py:3535 ../src/disco.py:889 ../src/disco.py:1787
-#: ../src/disco.py:2089 ../src/history_window.py:92
+#: ../src/config.py:1554
+#: ../src/dialogs.py:2574
+#: ../src/dialogs.py:2641
+#: ../src/dialogs.py:3437
+#: ../src/disco.py:885
+#: ../src/disco.py:1743
+#: ../src/disco.py:2045
+#: ../src/history_window.py:91
 msgid "Name"
 msgstr "שם"
 
-#: ../src/config.py:1656
+# התחבר/י מחדש כעת?
+#: ../src/config.py:1654
 msgid "Relogin now?"
-msgstr "להתחבר מחדש כעת?"
+msgstr "התחברות מחודשת?"
 
-#: ../src/config.py:1657
+#: ../src/config.py:1655
 msgid "If you want all the changes to apply instantly, you must relogin."
-msgstr "אם ברצונך כי השינויים יוחלו באופן מידי, עליך להתחבר מחדש."
+msgstr "אם ברצונך שהשינויים יוחלו באופן מידי, עליך להתחבר מחדש."
 
 # הצפנת OpenPGP
-#: ../src/config.py:1814 ../src/config.py:1949
+#: ../src/config.py:1809
+#: ../src/config.py:1942
 msgid "OpenPGP is not usable on this computer"
-msgstr "‏OpenPGP אינה שמישה על מחשב זה"
+msgstr "‫OpenGPG אינה שמישה במחשב זה"
 
-#: ../src/config.py:1990 ../src/config.py:2039
+#: ../src/config.py:1982
+#: ../src/config.py:2029
 msgid "Unread events"
-msgstr "אירועים אשר לא נקראו"
+msgstr "אירועים שלא נקראו"
 
-#: ../src/config.py:1991
+#: ../src/config.py:1983
 msgid "Read all pending events before removing this account."
-msgstr "קרא את כל האירועים אשר ממתינים טרם הסרת חשבון זה."
+msgstr "קריאת כל האירועים הממתינים לפני הסרת חשבון זה."
 
-#: ../src/config.py:2021
+#: ../src/config.py:2012
 #, python-format
 msgid "You have opened chat in account %s"
 msgstr "פתחת שיחה בחשבון %s"
 
-#: ../src/config.py:2022
+#: ../src/config.py:2013
 msgid "All chat and groupchat windows will be closed. Do you want to continue?"
 msgstr "כל חלונות שיחה וחלונות שיחת קבוצה ייסגרו. האם ברצונך להמשיך?"
 
-#: ../src/config.py:2034 ../src/config.py:2596 ../src/config.py:2634
+#: ../src/config.py:2025
+#: ../src/config.py:2570
+#: ../src/config.py:2607
 msgid "You are currently connected to the server"
-msgstr "הינך מחובר כעת אל שרת"
+msgstr "הינך מחובר כעת אל השרת"
 
-#: ../src/config.py:2035
+#: ../src/config.py:2026
 msgid "To change the account name, you must be disconnected."
 msgstr "כדי לשנות את שם החשבון, עליך להתנתק."
 
-#: ../src/config.py:2040
+#: ../src/config.py:2030
 msgid "To change the account name, you must read all pending events."
-msgstr "כדי לשנות את שם החשבון, עליך לקרוא את כל האירועים אשר ממתינים."
+msgstr "כדי לשנות את שם החשבון, עליך לקרוא את כל האירועים הממתינים."
 
-#: ../src/config.py:2046
+#: ../src/config.py:2036
 msgid "Account Name Already Used"
 msgstr "שם חשבון כבר מצוי בשימוש"
 
-#: ../src/config.py:2047
-msgid ""
-"This name is already used by another of your accounts. Please choose another "
-"name."
-msgstr "שם זה כבר מצוי בשימוש על ידי חשבון אחר מחשבונותיך. אנא בחר שם אחר."
+#: ../src/config.py:2037
+msgid "This name is already used by another of your accounts. Please choose another name."
+msgstr "שם זה כבר מצוי בשימוש על ידי חשבון אחר מחשבונותיך. נא לבחור שם אחר."
 
-#: ../src/config.py:2051 ../src/config.py:2056
+#: ../src/config.py:2041
+#: ../src/config.py:2045
 msgid "Invalid account name"
 msgstr "שם חשבון שגוי"
 
-#: ../src/config.py:2052
+#: ../src/config.py:2042
 msgid "Account name cannot be empty."
 msgstr "שם חשבון לא יכול להיות ריק."
 
-#: ../src/config.py:2057
+#: ../src/config.py:2046
 msgid "Account name cannot contain spaces."
 msgstr "שם חשבון לא יכול להכיל רווחים."
 
-#: ../src/config.py:2138
+#: ../src/config.py:2123
 msgid "Rename Account"
 msgstr "שנה שם חשבון"
 
-#: ../src/config.py:2139
+#: ../src/config.py:2124
 #, python-format
 msgid "Enter a new name for account %s"
 msgstr "הזן שם חדש עבור חשבון %s"
 
-#: ../src/config.py:2168
+# username@servername
+# user@server
+#: ../src/config.py:2152
 msgid "A Jabber ID must be in the form \"user@servername\"."
-msgstr "על מזהה Jabber להיות בצורה הזו \"user@servername\"."
+msgstr "כתובת JID מוכרחה להיות בצורה של \"user@servername\"."
 
-#: ../src/config.py:2394 ../src/config.py:3726
+#: ../src/config.py:2375
+#: ../src/config.py:3708
 msgid "Invalid entry"
 msgstr "רשומה שגויה"
 
-#: ../src/config.py:2395 ../src/config.py:3727
+#  צריכה
+# על הפתחה המותאמת להיות
+#: ../src/config.py:2376
+#: ../src/config.py:3709
 msgid "Custom port must be a port number."
 msgstr "פורט מותאם מוכרח להיות מספר פורט."
 
-#: ../src/config.py:2417
+#: ../src/config.py:2397
 msgid "Failed to get secret keys"
 msgstr "כשל בקבלת מפתחות סודיים"
 
-#: ../src/config.py:2418
+# Would it be ok to write: "There is no secret OpenPGP key available." ?
+# לא קיים מפתח OpenPGP סודי.
+# לא קיים מפתח סודי של OpenPGP זמין.
+#: ../src/config.py:2398
 msgid "There is no OpenPGP secret key available."
 msgstr "לא קיים מפתח OpenPGP סודי זמין."
 
-#: ../src/config.py:2456
+#: ../src/config.py:2432
 msgid "OpenPGP Key Selection"
 msgstr "בחירת מפתח ‫OpenPGP"
 
-#: ../src/config.py:2457
+# Would it be ok to write: an OpenPGP
+# נא לבחור את מפתח ה־OpenPGP שלך
+#: ../src/config.py:2433
 msgid "Choose your OpenPGP key"
 msgstr "בחר מפתח OpenPGP"
 
-#: ../src/config.py:2465
+#: ../src/config.py:2441
 msgid "No such account available"
 msgstr "לא קיים חשבון כזה"
 
 # עוד בטרם
-#: ../src/config.py:2466
+#: ../src/config.py:2442
 msgid "You must create your account before editing your personal information."
-msgstr "עליך ליצור חשבון טרם עריכת המידע האישי שלך."
-
-#: ../src/config.py:2473 ../src/dialogs.py:2369 ../src/dialogs.py:2662
-#: ../src/dialogs.py:2850 ../src/disco.py:516 ../src/profile_window.py:371
+msgstr "עליך ליצור חשבון לפני עריכת המידע האישי שלך."
+
+#: ../src/config.py:2449
+#: ../src/dialogs.py:2325
+#: ../src/dialogs.py:2563
+#: ../src/dialogs.py:2751
+#: ../src/disco.py:515
+#: ../src/profile_window.py:369
 msgid "You are not connected to the server"
 msgstr "אינך מחובר אל השרת"
 
-#: ../src/config.py:2474
+#: ../src/config.py:2450
 msgid "Without a connection, you can not edit your personal information."
-msgstr "ללא חיבור, אין באפשרותך לערוך את המידע האישי שלך."
+msgstr "ללא חיבור, אין ביכולתך לערוך את המידע האישי שלך."
 
-#: ../src/config.py:2479
-msgid "Your server doesn't support vCard"
-msgstr "שרתך אינו תומך בטופס vCard"
+# Vcard form
+#: ../src/config.py:2454
+msgid "Your server doesn't support Vcard"
+msgstr "שרתך אינו תומך בתבנית Vcard"
 
-#: ../src/config.py:2480
+#: ../src/config.py:2455
 msgid "Your server can't save your personal information."
 msgstr "שרתך לא יכול לשמור את המידע האישי שלך."
 
-#: ../src/config.py:2597 ../src/config.py:2635
+#: ../src/config.py:2571
+#: ../src/config.py:2608
 msgid "To disable the account, you must be disconnected."
 msgstr "כדי לנטרל את החשבון, עליך להתנתק."
 
-#: ../src/config.py:2604
+#: ../src/config.py:2577
 msgid "Account Local already exists."
 msgstr "חשבון Local כבר קיים."
 
-#: ../src/config.py:2605
+#: ../src/config.py:2578
 msgid "Please rename or remove it before enabling link-local messaging."
 msgstr "אנא שנה את שמו או הסר אותו בטרם אפשור קישוריות מסרים מקומית."
 
-#: ../src/config.py:2766
+#: ../src/config.py:2735
 #, python-format
 msgid "Edit %s"
 msgstr "ערוך ‫%s"
 
 # רישום
-#: ../src/config.py:2768
+#: ../src/config.py:2737
 #, python-format
 msgid "Register to %s"
 msgstr "הירשם אל ‫%s"
 
 #. list at the beginning
-#: ../src/config.py:2804
+#: ../src/config.py:2773
 msgid "Ban List"
-msgstr "רשימת אסירה"
+msgstr "רשימת חסימה"
 
-#: ../src/config.py:2805
+#: ../src/config.py:2774
 msgid "Member List"
 msgstr "רשימת חברים"
 
-#: ../src/config.py:2805
+#: ../src/config.py:2774
 msgid "Owner List"
 msgstr "רשימת בעלים"
 
-#: ../src/config.py:2806
+#: ../src/config.py:2775
 msgid "Administrator List"
 msgstr "רשימת מנהלים"
 
 #. Address column
 #. holds JID (who said this)
-#: ../src/config.py:2870 ../src/disco.py:896 ../src/history_manager.py:217
+#: ../src/config.py:2839
+#: ../src/disco.py:892
+#: ../src/history_manager.py:207
 msgid "JID"
-msgstr "‏JID"
+msgstr "‫JID"
 
-#: ../src/config.py:2880
+#: ../src/config.py:2849
 msgid "Reason"
 msgstr "סיבה"
 
-#: ../src/config.py:2887
+#: ../src/config.py:2856
 msgid "Nick"
 msgstr "כינוי"
 
-#: ../src/config.py:2893
+#: ../src/config.py:2862
 msgid "Role"
 msgstr "תפקיד"
 
-#: ../src/config.py:2920
+#: ../src/config.py:2889
 msgid "Banning..."
-msgstr "אוסר כעת..."
+msgstr "חוסם..."
 
 #. You can move '\n' before user@domain if that line is TOO BIG
-#: ../src/config.py:2922
+#: ../src/config.py:2891
 msgid ""
 "<b>Whom do you want to ban?</b>\n"
 "\n"
 msgstr ""
-"<b>את מי ברצונך לאסור?</b>\n"
+"<b>את מי ברצונך לחסום?</b>\n"
 "\n"
 
-# מוסיף כעת חבר...
-#: ../src/config.py:2924
+#: ../src/config.py:2893
 msgid "Adding Member..."
 msgstr "הוספת חבר..."
 
-#: ../src/config.py:2925
+#: ../src/config.py:2894
 msgid ""
 "<b>Whom do you want to make a member?</b>\n"
 "\n"
@@ -7307,12 +7374,11 @@ msgstr ""
 "<b>את מי ברצונך להפוך אל חבר?</b>\n"
 "\n"
 
-# מוסיף כעת בעלים...
-#: ../src/config.py:2927
+#: ../src/config.py:2896
 msgid "Adding Owner..."
 msgstr "הוספת בעלים..."
 
-#: ../src/config.py:2928
+#: ../src/config.py:2897
 msgid ""
 "<b>Whom do you want to make an owner?</b>\n"
 "\n"
@@ -7320,12 +7386,11 @@ msgstr ""
 "<b>את מי ברצונך להפוך אל בעלים?</b>\n"
 "\n"
 
-# מוסיף כעת מנהל...
-#: ../src/config.py:2930
+#: ../src/config.py:2899
 msgid "Adding Administrator..."
 msgstr "הוספת מנהל..."
 
-#: ../src/config.py:2931
+#: ../src/config.py:2900
 msgid ""
 "<b>Whom do you want to make an administrator?</b>\n"
 "\n"
@@ -7338,7 +7403,7 @@ msgstr ""
 #      ‏‏user = משתמש\n
 #      ‏‏resource = משאב\n
 #
-#: ../src/config.py:2932
+#: ../src/config.py:2901
 msgid ""
 "Can be one of the following:\n"
 "1. user@domain/resource (only that resource matches).\n"
@@ -7347,151 +7412,160 @@ msgid ""
 "4. domain (the domain itself matches, as does any user@domain,\n"
 "domain/resource, or address containing a subdomain)."
 msgstr ""
-"הקלט יכול להיות אחד מתוך הבאים:\n"
+"הקלט יכול להיות אחד מן הבאים:\n"
 "1. ‏user@domain/resource (רק משאב זה תואם).\n"
 "2. ‏user@domain (כל משאב תואם).\n"
 "3. ‏domain/resource (רק משאב זה תואם).\n"
 "4. ‏domain (המתחם עצמו מתאים, עבור כל user@domain,\n"
-"‏domain/resource, או כתובת אשר מכילים מתחם משני)."
+"‏domain/resource, או כתובת המכילה מתחם־משני)."
 
-#: ../src/config.py:3033
+#: ../src/config.py:3002
 #, python-format
 msgid "Removing %s account"
 msgstr "הסרת חשבון ‫%s"
 
-#: ../src/config.py:3048
+# נוטרל
+#: ../src/config.py:3017
 msgid "Account is disabled"
 msgstr "חשבון מנוטרל"
 
-#: ../src/config.py:3049
+#: ../src/config.py:3018
 msgid "To unregister from a server, account must be enabled."
-msgstr "כדי לבטל רישום מתוך שרת, על חשבון נתון להיות מאופשר."
+msgstr "כדי לבטל רישום מן שרת, על חשבון נתון להיות מאופשר."
 
-#: ../src/config.py:3062 ../src/gui_interface.py:286
-#: ../src/gui_interface.py:734
+#: ../src/config.py:3031
+#: ../src/gui_interface.py:285
+#: ../src/gui_interface.py:732
 msgid "Password Required"
-msgstr "נדרשת מילת מעבר"
+msgstr "נדרשת מילת־מעבר"
 
-#: ../src/config.py:3063 ../src/gui_interface.py:714
+#: ../src/config.py:3032
+#: ../src/gui_interface.py:712
 #, python-format
 msgid "Enter your password for account %s"
 msgstr "הזן את סיסמתך עבור חשבון %s"
 
-#: ../src/config.py:3064 ../src/gui_interface.py:734
+# שמירת
+#: ../src/config.py:3033
+#: ../src/gui_interface.py:732
 msgid "Save password"
 msgstr "שמור סיסמה"
 
-#: ../src/config.py:3074
+#: ../src/config.py:3043
 #, python-format
 msgid "Account \"%s\" is connected to the server"
-msgstr "חשבון \"%s\" מחובר כעת אל שרת"
+msgstr "חשבון \"%s\" מחובר כעת אל השרת"
 
 # it = account?
 # תסיר/י אותו
-#: ../src/config.py:3075
+#: ../src/config.py:3044
 msgid "If you remove it, the connection will be lost."
 msgstr "אם תסירו, החיבור יאבד."
 
-#: ../src/config.py:3089
+#: ../src/config.py:3058
 #, python-format
 msgid "Connection to server %s failed"
 msgstr "התחברות אל שרת %s נכשלה"
 
-#: ../src/config.py:3090
+#: ../src/config.py:3059
 msgid "What would you like to do?"
 msgstr "מה ברצונך לעשות?"
 
 # מהיישום
-#: ../src/config.py:3091
+#: ../src/config.py:3060
 msgid "Remove only from Gajim"
-msgstr "הסרה מתוך Gajim בלבד"
+msgstr "הסרה מן Gajim בלבד"
 
 # אחר כך
-#: ../src/config.py:3092
+#: ../src/config.py:3061
 msgid "Don't remove anything. I'll try again later"
 msgstr "לא להסיר דבר. אני אנסה שוב מאוחר יותר"
 
-#: ../src/config.py:3185
+#: ../src/config.py:3154
 msgid "?print_status:All"
 msgstr "הכל"
 
-#: ../src/config.py:3186
+#: ../src/config.py:3155
 msgid "Enter and leave only"
 msgstr "כניסה ועזיבה בלבד"
 
-#: ../src/config.py:3187
+#: ../src/config.py:3156
 msgid "?print_status:None"
 msgstr "אל תדפיס"
 
-#: ../src/config.py:3246
+#: ../src/config.py:3228
 msgid "New Group Chat"
 msgstr "שיחת קבוצה חדשה"
 
-#: ../src/config.py:3279
+# לסימנייה זו יש מידע שגוי
+#: ../src/config.py:3261
 msgid "This bookmark has invalid data"
 msgstr "סימנייה זו מכילה מידע שגוי"
 
-#: ../src/config.py:3280
-msgid ""
-"Please be sure to fill out server and room fields or remove this bookmark."
-msgstr "אנא דאג למלא שדות חדר ושרת או הסר את סימנייה זו."
+#: ../src/config.py:3262
+msgid "Please be sure to fill out server and room fields or remove this bookmark."
+msgstr "נא לוודא למלא שדות חדר ושרת או להסיר את סימנייה זו."
 
-#: ../src/config.py:3406 ../src/config.py:3417 ../src/config.py:3426
-#: ../src/config.py:3437 ../src/config.py:3445
+# מותר
+#: ../src/config.py:3388
+#: ../src/config.py:3399
+#: ../src/config.py:3408
+#: ../src/config.py:3419
+#: ../src/config.py:3427
 msgid "Character not allowed"
 msgstr "תו לא מורשה"
 
-#: ../src/config.py:3417 ../src/config.py:3425 ../src/config.py:3437
-#: ../src/config.py:3702
+#: ../src/config.py:3399
+#: ../src/config.py:3407
+#: ../src/config.py:3419
+#: ../src/config.py:3684
 msgid "Invalid server"
 msgstr "שרת שגוי"
 
-#: ../src/config.py:3444
+#: ../src/config.py:3426
 msgid "Invalid room"
 msgstr "חדר שגוי"
 
-#: ../src/config.py:3614
+#: ../src/config.py:3596
 msgid "Account has been added successfully"
 msgstr "חשבון הוסף בהצלחה"
 
 # מאוחר יותר
-#: ../src/config.py:3615 ../src/config.py:3621
-msgid ""
-"You can set advanced account options by pressing the Advanced button, or "
-"later by choosing the Accounts menu item under the Edit menu from the main "
-"window."
-msgstr ""
-"באפשרותך להגדיר אפשרויות חשבון מתקדמות על ידי לחיצה על הלחצן מתקדם, או לאחר "
-"מכן בבוחרך בתפריט חשבונות תחת התפריט עריכה מתוך החלון הראשי."
+#: ../src/config.py:3597
+#: ../src/config.py:3603
+msgid "You can set advanced account options by pressing the Advanced button, or later by choosing the Accounts menu item under the Edit menu from the main window."
+msgstr "ביכולתך להגדיר אפשרויות חשבון מתקדמות על ידי לחיצה על הכפתור מתקדם, או לאחר מכן בבוחרך בתפריט חשבונות תחת התפריט עריכה מן החלון הראשי."
 
-#: ../src/config.py:3620
+#: ../src/config.py:3602
 msgid "Your new account has been created successfully"
 msgstr "חשבונך החדש נוצר בהצלחה"
 
-#: ../src/config.py:3659
+#: ../src/config.py:3641
 msgid "Invalid username"
 msgstr "שם משתמש שגוי"
 
-#: ../src/config.py:3661
+#: ../src/config.py:3643
 msgid "You must provide a username to configure this account."
 msgstr "עליך לספק שם משתמש כדי להגדיר את חשבון זה."
 
-#: ../src/config.py:3703
+#: ../src/config.py:3685
 msgid "Please provide a server on which you want to register."
 msgstr "אנא ספק שרת אליו ברצונך להירשם."
 
 # BUG: גודל אותיות באנגלית?
-#: ../src/config.py:3759 ../src/gui_interface.py:1313
+#: ../src/config.py:3741
+#: ../src/gui_interface.py:1303
 msgid "Certificate Already in File"
 msgstr "התעודה כבר מצויה בקובץ"
 
 # חריג לכלל: עשיתי שימוש במילה שנית במקום שוב מכיוון שתמיד יהיה 'ראשון' ולאחריו שני
-#: ../src/config.py:3760 ../src/gui_interface.py:1314
+#: ../src/config.py:3742
+#: ../src/gui_interface.py:1304
 #, python-format
 msgid "This certificate is already in file %s, so it's not added again."
 msgstr "תעודה זו כבר מצויה בקובץ %s, ולכן היא לא תוסף בשנית."
 
-#: ../src/config.py:3850
+#: ../src/config.py:3830
 #, python-format
 msgid ""
 "<b>Security Warning</b>\n"
@@ -7503,10 +7577,11 @@ msgstr ""
 "<b>אזהרת אבטחה</b>\n"
 "\n"
 "מהימנותה של תעודת SSL של %(hostname)s עלולה להיות רעועה.\n"
-"שגיאת SSL: ‏%(error)s\n"
+"שגיאת SSL: ‫%(error)s\n"
 "האם עדיין יש ברצונך להתחבר אל שרת זה?"
 
-#: ../src/config.py:3856 ../src/gui_interface.py:1342
+#: ../src/config.py:3836
+#: ../src/gui_interface.py:1332
 #, python-format
 msgid ""
 "Add this certificate to the list of trusted certificates.\n"
@@ -7517,90 +7592,85 @@ msgstr ""
 "טביעת אצבע SHA1 של התעודה:\n"
 "%s"
 
-#: ../src/config.py:3888 ../src/config.py:3922
+# בעת מהלך
+#: ../src/config.py:3868
+#: ../src/config.py:3902
 msgid "An error occurred during account creation"
-msgstr "אירעה שגיאה בעת מהלך יצירת חשבון"
+msgstr "ארעה שגיאה בעת יצירת חשבון"
 
-#: ../src/config.py:3987
+#: ../src/config.py:3967
 msgid "Account name is in use"
-msgstr "שם חשבון הינו בשימוש"
+msgstr "שם חשבון בשימוש"
 
-#: ../src/config.py:3988
+#: ../src/config.py:3968
 msgid "You already have an account using this name."
-msgstr "כבר יש ברשותך חשבון אשר עושה שימוש בשם זה."
+msgstr "כבר יש ברשותך חשבון שעושה שימוש בשם זה."
 
-#: ../src/config.py:4118
+#: ../src/config.py:4098
 msgid "PEP node was not removed"
 msgstr "ממסר PEP לא הוסר"
 
-#: ../src/config.py:4119
+#: ../src/config.py:4099
 #, python-format
 msgid "PEP node %(node)s was not removed: %(message)s"
-msgstr "ממסר PEP ‏%(node)s לא הוסר: %(message)s"
+msgstr "ממסר PEP ‫%(node)s לא הוסר: %(message)s"
 
-#: ../src/config.py:4147
+#: ../src/config.py:4127
 #, python-format
 msgid "Configure %s"
 msgstr "תצורת ‫%s"
 
-#: ../src/config.py:4163 ../src/plugins/gui.py:92
+#: ../src/config.py:4143
+#: ../src/plugins/gui.py:88
 msgid "Active"
 msgstr "פעיל"
 
-#: ../src/config.py:4171
+#: ../src/config.py:4151
 msgid "Event"
 msgstr "אירוע"
 
-#: ../src/config.py:4205
+#: ../src/config.py:4185
 msgid "Attention Message Received"
 msgstr "התקבלה הודעת הקשב"
 
-#: ../src/config.py:4206
+#: ../src/config.py:4186
 msgid "First Message Received"
-msgstr "הודעה ראשונה אשר התקבלה"
+msgstr "הודעה ראשונה שהתקבלה"
 
-#: ../src/config.py:4207
+#: ../src/config.py:4187
 msgid "Next Message Received Focused"
-msgstr "הודעה הבאה אשר התקבלה (ממוקד)"
+msgstr "הודעה הבאה שהתקבלה (ממוקד)"
 
-#: ../src/config.py:4209
+#: ../src/config.py:4189
 msgid "Next Message Received Unfocused"
-msgstr "הודעה הבאה אשר התקבלה (לא ממוקד)"
+msgstr "הודעה הבאה שהתקבלה (לא ממוקד)"
 
-#: ../src/config.py:4210
+#: ../src/config.py:4190
 msgid "Contact Connected"
 msgstr "איש קשר מחובר"
 
-#: ../src/config.py:4211
+#: ../src/config.py:4191
 msgid "Contact Disconnected"
 msgstr "איש קשר מנותק"
 
-#: ../src/config.py:4212
+#: ../src/config.py:4192
 msgid "Message Sent"
 msgstr "הודעה נשלחה"
 
-#: ../src/config.py:4213
+#: ../src/config.py:4193
 msgid "Group Chat Message Highlight"
 msgstr "הודעת שיחת קבוצה מודגשת"
 
-#: ../src/config.py:4214
+#: ../src/config.py:4194
 msgid "Group Chat Message Received"
-msgstr "הודעת שיחת קבוצה אשר התקבלה"
+msgstr "הודעת שיחת קבוצה שהתקבלה"
 
-#: ../src/config.py:4215
+#: ../src/config.py:4195
 msgid "GMail Email Received"
-msgstr "דוא״ל GMail אשר התקבל"
-
-#: ../src/conversation_textview.py:483 ../src/conversation_textview.py:501
-#, python-format
-msgid ""
-"<b>Message was corrected. Last message was:</b>\n"
-"  %s"
-msgstr ""
-"<b>הודעה תוקנה. הודעה אחרונה היתה:</b>\n"
-"  %s"
+msgstr "דוא״ל GMail שהתקבל"
 
-#: ../src/conversation_textview.py:654
+# סביר ש
+#: ../src/conversation_textview.py:602
 msgid ""
 "This icon indicates that this message has not yet\n"
 "been received by the remote end. If this icon stays\n"
@@ -7608,54 +7678,56 @@ msgid ""
 msgstr ""
 "צלמית זו מצביע על כך שהודעה זו עדיין לא\n"
 "התקבלה על ידי הקצה המרוחק. אם צלמית זו\n"
-"נותרת למשך זמן ממושך, סביר כי ההודעה אבדה."
+"נשארת לזמן ממושך, כנראה שההודעה אבדה."
 
-#: ../src/conversation_textview.py:673
+#: ../src/conversation_textview.py:621
 msgid ""
 "Text below this line is what has been said since the\n"
 "last time you paid attention to this group chat"
 msgstr ""
-"תמליל תחת שורה זו הוא דברים אשר נרשמו מאז הפעם\n"
-"האחרונה בה הסבת את צומת לבך אל שיחת קבוצה זו"
+"תמליל תחת שורה זו הינו מה שנאמר מאז\n"
+"הפעם האחרונה שהקשבת לשיחת קבוצה זו"
 
-#: ../src/conversation_textview.py:793
+#: ../src/conversation_textview.py:741
 msgid "_Quote"
-msgstr "_צטט"
+msgstr "_ציטוט"
 
-#: ../src/conversation_textview.py:800
+#: ../src/conversation_textview.py:748
 #, python-format
 msgid "_Actions for \"%s\""
-msgstr "_פעולות עבור \"%s\""
+msgstr "_פעולות עבור ‫‫\"%s\""
 
-#: ../src/conversation_textview.py:813
+# עיון בערך אצל/באתר
+#: ../src/conversation_textview.py:761
 msgid "Read _Wikipedia Article"
-msgstr "עיין ערך _ויקיפדיה"
+msgstr "עיון בערך ב_ויקיפדיה"
 
-#: ../src/conversation_textview.py:818
+#: ../src/conversation_textview.py:766
 msgid "Look it up in _Dictionary"
-msgstr "חפש בתוך _מילון"
+msgstr "חיפוש ב_מילון"
 
-#: ../src/conversation_textview.py:835
+#: ../src/conversation_textview.py:783
 #, python-format
 msgid "Dictionary URL is missing an \"%s\" and it is not WIKTIONARY"
 msgstr "לכתובת URL של המילון חסר \"%s\" וזו לא WIKTIONARY"
 
 #. we must have %s in the url
-#: ../src/conversation_textview.py:848
+#: ../src/conversation_textview.py:796
 #, python-format
 msgid "Web Search URL is missing an \"%s\""
 msgstr "לכתובת URL של חיפוש ברשת חסר \"%s\""
 
-#: ../src/conversation_textview.py:851
+#: ../src/conversation_textview.py:799
 msgid "Web _Search for it"
 msgstr "_חפש ברשת"
 
-#: ../src/conversation_textview.py:857
+#: ../src/conversation_textview.py:805
 msgid "Open as _Link"
-msgstr "פתח בתור _קישור"
+msgstr "פתיחה כ_קישור"
 
+# לפני %i ימים
 #. %i is day in year (1-365)
-#: ../src/conversation_textview.py:1386
+#: ../src/conversation_textview.py:1302
 #, python-format
 msgid "Yesterday"
 msgid_plural "%(nb_days)i days ago"
@@ -7663,14 +7735,15 @@ msgstr[0] "אתמול"
 msgstr[1] "לפני %(nb_days)i ימים"
 
 #. if we have subject, show it too!
-#: ../src/conversation_textview.py:1436 ../src/history_window.py:488
+#: ../src/conversation_textview.py:1351
+#: ../src/history_window.py:481
 #, python-format
 msgid "Subject: %s\n"
 msgstr "נושא: %s\n"
 
 #: ../src/dataforms_widget.py:575
 msgid "Unable to load image"
-msgstr "אין אפשרות לטעון תמונה"
+msgstr "לא ניתן לטעון תמונה"
 
 #: ../src/dataforms_widget.py:577
 #, python-format
@@ -7679,171 +7752,176 @@ msgstr "טיפוס מדיה לא נתמך: %s"
 
 #: ../src/dataforms_widget.py:592
 msgid "This field is required"
-msgstr "שדה זה הינו נדרש"
+msgstr "שדה זה נדרש"
 
 #: ../src/dataforms_widget.py:637
 msgid "Jabber ID already in list"
-msgstr "מזהה Jabber כבר מצוי בתוך הרשימה"
+msgstr "כתובת JID כבר מצויה ברשימה"
 
 #: ../src/dataforms_widget.py:638
 msgid "The Jabber ID you entered is already in the list. Choose another one."
-msgstr "מזהה Jabber אשר הזנת כבר מצוי בתוך הרשימה. בחר מזהה אחר."
+msgstr "הכתובת (JID) שהזנת כבר מצויה ברשימה. נא לבחור כתובת אחרת."
 
 #. Default jid
 #: ../src/dataforms_widget.py:649
 msgid "new@jabber.id"
-msgstr ""
+msgstr "new@jabber.id"
 
 #: ../src/dataforms_widget.py:652 ../src/dataforms_widget.py:654
 #, python-format
 msgid "new%d@jabber.id"
-msgstr ""
+msgstr "new%d@jabber.id"
 
-#: ../src/dialogs.py:84
+#: ../src/dialogs.py:82
 #, python-format
 msgid "Contact name: <i>%s</i>"
 msgstr "שם איש קשר: <i>%s</i>"
 
-#: ../src/dialogs.py:86
+#: ../src/dialogs.py:84
 #, python-format
 msgid "Jabber ID: <i>%s</i>"
-msgstr "מזהה Jabber: ‏<i>%s</i>"
+msgstr "‫JID: ‫<i>%s</i>"
 
-#: ../src/dialogs.py:200
+#: ../src/dialogs.py:198
 msgid "Group"
 msgstr "קבוצה"
 
-#: ../src/dialogs.py:207
+#: ../src/dialogs.py:205
 msgid "In the group"
 msgstr "בקבוצה"
 
-#: ../src/dialogs.py:299
+#: ../src/dialogs.py:297
 msgid "KeyID"
-msgstr "מזהה מפתח"
+msgstr "מפתח (KeyID)"
 
-#: ../src/dialogs.py:304
+#: ../src/dialogs.py:302
 msgid "Contact name"
 msgstr "שם איש קשר"
 
-#: ../src/dialogs.py:479
+#: ../src/dialogs.py:477
 msgid "Set Mood"
 msgstr "קביעת מצב רוח"
 
-#: ../src/dialogs.py:599
+#: ../src/dialogs.py:597
 #, python-format
 msgid "%s Status Message"
 msgstr "‫%s הודעת מצב"
 
-#: ../src/dialogs.py:613
+#: ../src/dialogs.py:611
 msgid "Status Message"
 msgstr "הודעת מצב"
 
-#: ../src/dialogs.py:804
+# Changed "overwrite" with "delete"
+# Changed "delete" with "replace"
+#: ../src/dialogs.py:802
 msgid "Overwrite Status Message?"
 msgstr "החלף הודעת מצב?"
 
-#: ../src/dialogs.py:805
-msgid ""
-"This name is already used. Do you want to overwrite this status message?"
+# Change to: This name is already used. Do you want to delete the existed status message?
+#: ../src/dialogs.py:803
+msgid "This name is already used. Do you want to overwrite this status message?"
 msgstr "שם זה כבר מצוי בשימוש. האם ברצונך להחליף את הודעת המצב הקיימת?"
 
-#: ../src/dialogs.py:813
+#: ../src/dialogs.py:811
 msgid "Save as Preset Status Message"
-msgstr "שמור בתור הודעת מצב מותאמת"
+msgstr "שמירה כהודעת מצב ערוכה מראש"
 
-#: ../src/dialogs.py:814
+#: ../src/dialogs.py:812
 msgid "Please type a name for this status message"
 msgstr "אנא הקלד שם עבור הודעת מצב זו"
 
-#: ../src/dialogs.py:842
+#: ../src/dialogs.py:840
 msgid "AIM Address:"
 msgstr "כתובת AIM:"
 
-#: ../src/dialogs.py:843
+#: ../src/dialogs.py:841
 msgid "GG Number:"
 msgstr "מספר GG:"
 
-#: ../src/dialogs.py:844
+#: ../src/dialogs.py:842
 msgid "ICQ Number:"
 msgstr "מספר ICQ:"
 
-#: ../src/dialogs.py:845
+#: ../src/dialogs.py:843
 msgid "MSN Address:"
 msgstr "כתובת MSN:"
 
-#: ../src/dialogs.py:846
+#: ../src/dialogs.py:844
 msgid "Yahoo! Address:"
 msgstr "כתובת !Yahoo:"
 
-#: ../src/dialogs.py:883
+#: ../src/dialogs.py:881
 #, python-format
 msgid "Please fill in the data of the contact you want to add in account %s"
-msgstr "אנא מלא את המידע של איש הקשר אשר ברצונך להוסיף בחשבון %s"
+msgstr "נא להזין את המידע של איש הקשר שברצונך להוסיף בחשבון %s"
 
-#: ../src/dialogs.py:886
+#: ../src/dialogs.py:884
 msgid "Please fill in the data of the contact you want to add"
-msgstr "אנא מלא את המידע של איש הקשר אשר ברצונך להוסיף"
+msgstr "נא להזין את המידע של איש הקשר שברצונך להוסיף"
 
-#: ../src/dialogs.py:1080 ../src/dialogs.py:1086 ../src/dialogs.py:1091
-#: ../src/dialogs.py:3770
+#: ../src/dialogs.py:1076
+#: ../src/dialogs.py:1082
+#: ../src/dialogs.py:1087
+#: ../src/dialogs.py:3672
 msgid "Invalid User ID"
-msgstr "מזהה משתמש שגוי"
+msgstr "‫ID משתמש שגויה"
 
 # אסור להכיל
 # אסור ש
 # מוכרחה שלא
-#: ../src/dialogs.py:1087
+#: ../src/dialogs.py:1083
 msgid "The user ID must not contain a resource."
-msgstr "מזהה משתמש לא יכול להכיל משאב."
+msgstr "‫ID משתמש לא יכולה להכיל משאב."
 
-#: ../src/dialogs.py:1092
+#: ../src/dialogs.py:1088
 msgid "You cannot add yourself to your roster."
-msgstr "אין באפשרותך להוסיף את עצמך אל הרשימה שלך."
+msgstr "אין באפשרותך להוסיף את עצמך אל רשימתך."
 
-#: ../src/dialogs.py:1106
+#: ../src/dialogs.py:1102
 msgid "Contact already in roster"
 msgstr "איש קשר כבר מצוי ברשימה"
 
-#: ../src/dialogs.py:1107
+#: ../src/dialogs.py:1103
 msgid "This contact is already listed in your roster."
-msgstr "איש קשר זה כבר מצוי ברשימה שלך."
+msgstr "איש קשר זה כבר מצוי ברשימתך."
 
-#: ../src/dialogs.py:1160 ../src/dialogs.py:1194
+#: ../src/dialogs.py:1156
+#: ../src/dialogs.py:1190
 msgid "User ID:"
-msgstr "מזהה משתמש:"
+msgstr "‫ID משתמש:"
 
-#: ../src/dialogs.py:1279
+#: ../src/dialogs.py:1275
 msgid "A GTK+ Jabber/XMPP client"
-msgstr "לקוח Jabber/XMPP מבוסס GTK+‎"
+msgstr ""
 
-#: ../src/dialogs.py:1280
+#: ../src/dialogs.py:1276
 msgid "GTK+ Version:"
 msgstr ""
 
-#: ../src/dialogs.py:1281
+#: ../src/dialogs.py:1277
 msgid "PyGTK Version:"
 msgstr ""
 
-#: ../src/dialogs.py:1291
+#: ../src/dialogs.py:1287
 msgid "Current Developers:"
 msgstr "מפתחים נוכחיים:"
 
-#: ../src/dialogs.py:1293
+#: ../src/dialogs.py:1289
 msgid "Past Developers:"
 msgstr "מפתחים מן העבר:"
 
-#: ../src/dialogs.py:1299
+#: ../src/dialogs.py:1295
 msgid "THANKS:"
 msgstr "תודות:"
 
 #. remove one english sentence
 #. and add it manually as translatable
-#: ../src/dialogs.py:1305
+#: ../src/dialogs.py:1301
 msgid "Last but not least, we would like to thank all the package maintainers."
 msgstr "ואחרון אחרון חביב, ברצוננו להודות לכל מתחזקי החבילות."
 
 #. here you write your name in the form Name FamilyName <someone@somewhere>
-#: ../src/dialogs.py:1317
+#: ../src/dialogs.py:1313
 msgid "translator-credits"
 msgstr ""
 "Lead Translator:\n"
@@ -7856,7 +7934,7 @@ msgstr ""
 "Rahut Contributors:\n"
 "  Isratine Citizen (genghiskhan AT gmx.ca)"
 
-#: ../src/dialogs.py:1500
+#: ../src/dialogs.py:1496
 #, python-format
 msgid ""
 "You have to install %s dictionary to use spellchecking, or choose another "
@@ -7867,495 +7945,475 @@ msgstr ""
 "עליך להתקין מילון %s כדי לעשות שימוש בבדיקת איות, או בחרו בשפה שונה על ידי "
 "הגדרת האפשרות speller_language.\n"
 "\n"
-"הדגשת מילים אשר לא אויתו כראוי לא תנוצל"
-
-#: ../src/dialogs.py:1845 ../src/gui_interface.py:1446
-#: ../src/gui_interface.py:1488
-msgid "Insecure connection"
-msgstr "חיבור לא מאובטח"
-
-# BUG: to the server > to a serverr > to server
-# Added: will be exchanged with the other end will not be encrypted
-# הינך על סף התחברות אל שרת עם חיבור לא מאובטח. משמעות הדבר היא שכל השיחות שלך שיוחלפו עם הקצה השני לא יהיו מוצפנות. האם עדיין ברצונך להתחבר?
-# discouraged:
-#  > deprived > לקוי בחסר
-#  > dissuade > dissuade from > להניא מ-
-#: ../src/dialogs.py:1846
-#, python-format
-msgid ""
-"You are about to connect to the account %(account)s (%(server)s) with an "
-"insecure connection. This means all your conversations will be exchanged "
-"unencrypted. This type of connection is really discouraged.\n"
-"Are you sure you want to do that?"
-msgstr ""
-"הינך על סף התחברות אל החשבון %(account)s ‏(%(server)s) באמצעות חיבור לא "
-"מאובטח. משמעות הדבר היא כי כל השיחות אשר יוחלפו עם הקצה השני לא יהיו "
-"מוצפנות. רצוי להימנע מחיבורים מטיפוס זה.\n"
-"האם אתה בטוח כי ברצונך לעשות כן?"
-
-#: ../src/dialogs.py:1852 ../src/gui_interface.py:1450
-#: ../src/gui_interface.py:1491
-msgid "Yes, I really want to connect insecurely"
-msgstr "כן, ברצוני להתחבר בשיטה לא בטוחה"
-
-#: ../src/dialogs.py:1853
-msgid "Gajim will NOT connect unless you check this box"
-msgstr "‏Gajim לא יתחבר אלא אם כן תיבה זו תסומן"
-
-#: ../src/dialogs.py:1854 ../src/groupchat_control.py:2130
-#: ../src/gui_interface.py:706 ../src/gui_interface.py:1451
-#: ../src/gui_interface.py:1492 ../src/message_window.py:222
-#: ../src/roster_window.py:3048 ../src/roster_window.py:3728
-#: ../src/roster_window.py:4556
-msgid "_Do not ask me again"
-msgstr "אל ת_שאל אותי שוב"
+"הדגשת מילים שלא אויתו כראוי לא תנוצל"
 
-#: ../src/dialogs.py:1950
+#: ../src/dialogs.py:1912
 msgid "_Resume"
-msgstr "_חזור"
+msgstr "_חזרה"
 
-#: ../src/dialogs.py:1958
+#: ../src/dialogs.py:1920
 msgid "Re_place"
-msgstr "ה_חלף"
+msgstr "ה_חלפה"
 
-#: ../src/dialogs.py:2155 ../src/dialogs.py:2612
-msgid "The nickname contains invalid characters."
+# BUG: unallowed characters
+#: ../src/dialogs.py:2114
+#: ../src/dialogs.py:2515
+msgid "The nickname has not allowed characters."
 msgstr "שם הכינוי מכיל תווים אסורים."
 
-#: ../src/dialogs.py:2277
+#: ../src/dialogs.py:2233
 #, python-format
 msgid "Subscription request for account %(account)s from %(jid)s"
 msgstr "בקשת הרשמה עבור חשבון %(account)s מאת %(jid)s"
 
-#: ../src/dialogs.py:2280
+#: ../src/dialogs.py:2236
 #, python-format
 msgid "Subscription request from %s"
-msgstr "בקשת הרשמה מאת %s"
+msgstr "בקשת הרשמה מאת ‫‫%s"
 
-#: ../src/dialogs.py:2364 ../src/gui_interface.py:2056
+#: ../src/dialogs.py:2320
+#: ../src/gui_interface.py:2056
 #, python-format
 msgid "You are already in group chat %s"
-msgstr "הינך כבר בתוך שיחת קבוצה %s"
+msgstr "הינך כבר בתוך שיחת קבוצה ‫%s"
 
-#: ../src/dialogs.py:2370
+#: ../src/dialogs.py:2326
 msgid "You can not join a group chat unless you are connected."
-msgstr "אין באפשרותך להצטרף אל שיחת קבוצה עד אשר לא תחובר."
+msgstr "אין ביכולתך להצטרף אל שיחת קבוצה עד שלא תחובר."
 
-#: ../src/dialogs.py:2414
+#: ../src/dialogs.py:2370
 #, python-format
 msgid "Join Group Chat with account %s"
 msgstr "הצטרפות אל שיחת קבוצה באמצעות חשבון ‫%s"
 
-#: ../src/dialogs.py:2548 ../src/dialogs.py:2558
-msgid "Wrong server"
-msgstr "שרת שגוי"
-
-#: ../src/dialogs.py:2548 ../src/dialogs.py:2558
-#, python-format
-msgid "%s is not a groupchat server"
-msgstr "‏%s אינו שרת שיחת קבוצה"
-
-#: ../src/dialogs.py:2598
+#: ../src/dialogs.py:2501
 msgid "Invalid Account"
 msgstr "חשבון שגוי"
 
-#: ../src/dialogs.py:2599
-msgid ""
-"You have to choose an account from which you want to join the groupchat."
-msgstr "עליך לבחור חשבון אשר ממנו ברצונך להצטרף אל שיחת הקבוצה."
+#: ../src/dialogs.py:2502
+msgid "You have to choose an account from which you want to join the groupchat."
+msgstr "עליך לבחור חשבון שממנו ברצונך להצטרף אל שיחת הקבוצה."
 
-#: ../src/dialogs.py:2611
+#: ../src/dialogs.py:2514
 msgid "Invalid Nickname"
 msgstr "שם כינוי שגוי"
 
-#: ../src/dialogs.py:2616 ../src/dialogs.py:2622
-#: ../src/groupchat_control.py:2198
+#: ../src/dialogs.py:2519
+#: ../src/dialogs.py:2525
+#: ../src/groupchat_control.py:2093
 msgid "Invalid group chat Jabber ID"
-msgstr "מזהה Jabber של שיחת קבוצה שגוי"
+msgstr "כתובת (JID) שגויה של שיחת קבוצה"
 
-#: ../src/dialogs.py:2617
+#: ../src/dialogs.py:2520
 msgid "Please enter the group chat Jabber ID as room@server."
-msgstr "אנא הזן מזהה Jabber של שיחת הקבוצה בתור חדר@שרת."
+msgstr "נא להזין כתובת JID של שיחת הקבוצה באופן זה חדר@שרת."
 
-#: ../src/dialogs.py:2623
-msgid "The group chat Jabber ID contains invalid characters."
-msgstr "מזהה Jabber של שיחת קבוצה מכילה תווים אסורים."
+# BUG: unallowed characters
+#: ../src/dialogs.py:2526
+#: ../src/groupchat_control.py:2094
+msgid "The group chat Jabber ID has not allowed characters."
+msgstr "כתובת (JID) שיחת קבוצה מכילה תווים אסורים."
 
-#: ../src/dialogs.py:2628 ../src/gui_interface.py:2038
+# זו לא
+#: ../src/dialogs.py:2531
+#: ../src/gui_interface.py:2038
 msgid "This is not a group chat"
 msgstr "זוהי אינה שיחת קבוצה"
 
-#: ../src/dialogs.py:2629 ../src/gui_interface.py:2039
+#: ../src/dialogs.py:2532
+#: ../src/gui_interface.py:2039
 #, python-format
 msgid "%s is not the name of a group chat."
 msgstr "‫%s אינו שם של שיחת קבוצה."
 
-#: ../src/dialogs.py:2663
+#: ../src/dialogs.py:2564
 msgid "Without a connection, you can not synchronise your contacts."
-msgstr "ללא חיבור, אין באפשרותך לסנכרן את אנשי הקשר שלך."
+msgstr "ללא חיבור, אין ביכולתך לסנכרן את אנשי הקשר שלך."
 
-#: ../src/dialogs.py:2676
+#: ../src/dialogs.py:2577
 msgid "Server"
 msgstr "שרת"
 
 # Sync account > Unlogged account > Error
 # Should this be "to its server" OR "to a server"?
-#: ../src/dialogs.py:2712
+#: ../src/dialogs.py:2613
 msgid "This account is not connected to the server"
-msgstr "חשבון זה אינו מחובר כעת אל שרת"
+msgstr "חשבון זה אינו מחובר כעת אל השרת"
 
 # BUG: synchronise with *another* account
-# עד אשר זה לא יחובר
-#: ../src/dialogs.py:2713
+# עד שזה לא יחובר
+#: ../src/dialogs.py:2614
 msgid "You cannot synchronize with an account unless it is connected."
-msgstr "אין באפשרותך להסתנכרן עם חשבון אלא אם כן החשבון הינו מחובר."
+msgstr "אין ביכולתך להסתנכרן עם חשבון אלא אם כן החשבון הינו מחובר."
 
-#: ../src/dialogs.py:2738
+#: ../src/dialogs.py:2639
 msgid "Synchronise"
 msgstr "סנכרון"
 
-#: ../src/dialogs.py:2799
+#: ../src/dialogs.py:2700
 #, python-format
 msgid "Start Chat with account %s"
 msgstr "התחלת שיחה באמצעות חשבון ‫%s"
 
-#: ../src/dialogs.py:2801
+#: ../src/dialogs.py:2702
 msgid "Start Chat"
 msgstr "התחלת שיחה"
 
 # לו, אליו
-#: ../src/dialogs.py:2802
+# נא לרשום את הכינוי או את כתובת ה־JID של
+#: ../src/dialogs.py:2703
 msgid ""
 "Fill in the nickname or the Jabber ID of the contact you would like\n"
 "to send a chat message to:"
 msgstr ""
-"מלא שם כינוי או מזהה Jabber של איש הקשר\n"
-"אשר ברצונך לשלוח אליו או אליה הודעה:"
+"נא לרשום שם כינוי או כתובת JID של איש הקשר\n"
+"שברצונך לשלוח אליו או אליה הודעה:"
 
 #. if offline or connecting
-#: ../src/dialogs.py:2829 ../src/dialogs.py:3213 ../src/dialogs.py:3448
+#: ../src/dialogs.py:2730
+#: ../src/dialogs.py:3114
+#: ../src/dialogs.py:3350
 msgid "Connection not available"
 msgstr "חיבור לא זמין"
 
-#: ../src/dialogs.py:2830 ../src/dialogs.py:3214 ../src/dialogs.py:3449
+# עם
+#: ../src/dialogs.py:2731
+#: ../src/dialogs.py:3115
+#: ../src/dialogs.py:3351
 #, python-format
 msgid "Please make sure you are connected with \"%s\"."
-msgstr "אנא ודא כי הינך מחובר בעזרת \"%s\"."
+msgstr "נא לוודא שהינך מחובר באמצעות \"%s\"."
 
-#: ../src/dialogs.py:2839 ../src/dialogs.py:2842
+#: ../src/dialogs.py:2740
+#: ../src/dialogs.py:2743
 msgid "Invalid JID"
 msgstr "כתובת JID שגויה"
 
-#: ../src/dialogs.py:2842
+#: ../src/dialogs.py:2743
 #, python-format
 msgid "Unable to parse \"%s\"."
-msgstr "אין אפשרות לנתח את \"%s\"."
+msgstr "לא ניתן לנתח את \"%s\"."
 
-#: ../src/dialogs.py:2851
+#: ../src/dialogs.py:2752
 msgid "Without a connection, you can not change your password."
-msgstr "ללא חיבור, אין באפשרותך לשנות את סיסמתך."
+msgstr "ללא חיבור, אין ביכולתך לשנות את סיסמתך."
 
-#: ../src/dialogs.py:2870
+#: ../src/dialogs.py:2771
 msgid "Invalid password"
 msgstr "סיסמה שגויה"
 
-#: ../src/dialogs.py:2870
+#: ../src/dialogs.py:2771
 msgid "You must enter a password."
 msgstr "עליך להזין סיסמה."
 
-#: ../src/dialogs.py:2874
+#: ../src/dialogs.py:2775
 msgid "Passwords do not match"
 msgstr "סיסמאות לא תואמות"
 
 # על הסיסמאות
-#: ../src/dialogs.py:2875
+#: ../src/dialogs.py:2776
 msgid "The passwords typed in both fields must be identical."
-msgstr "הסיסמאות אשר מוקלדות בשני השדות מוכרחות להיות זהות."
+msgstr "הסיסמאות שמוקלדות בשני השדות מוכרחות להיות זהות."
 
-#: ../src/dialogs.py:2918 ../src/gui_interface.py:883 ../src/notify.py:276
+#: ../src/dialogs.py:2819
+#: ../src/gui_interface.py:873
+#: ../src/notify.py:276
 msgid "New E-mail"
 msgstr "דוא״ל חדש"
 
-#: ../src/dialogs.py:2920 ../src/gui_interface.py:943 ../src/notify.py:269
+#: ../src/dialogs.py:2821
+#: ../src/gui_interface.py:933
+#: ../src/notify.py:269
 msgid "File Transfer Request"
 msgstr "בקשה להעברת קובץ"
 
-#: ../src/dialogs.py:2922 ../src/gui_interface.py:845
-#: ../src/gui_interface.py:909 ../src/notify.py:271
+#: ../src/dialogs.py:2823
+#: ../src/gui_interface.py:835
+#: ../src/gui_interface.py:899
+#: ../src/notify.py:271
 msgid "File Transfer Error"
 msgstr "שגיאה בהעברת קובץ"
 
-#: ../src/dialogs.py:2924 ../src/gui_interface.py:1032
-#: ../src/gui_interface.py:1058 ../src/gui_interface.py:1079
+#: ../src/dialogs.py:2825
+#: ../src/gui_interface.py:1022
+#: ../src/gui_interface.py:1048
+#: ../src/gui_interface.py:1069
 #: ../src/notify.py:273
 msgid "File Transfer Completed"
 msgstr "העברת קובץ הושלמה"
 
-#: ../src/dialogs.py:2925 ../src/gui_interface.py:1035
-#: ../src/gui_interface.py:1062 ../src/gui_interface.py:1083
+#: ../src/dialogs.py:2826
+#: ../src/gui_interface.py:1025
+#: ../src/gui_interface.py:1052
+#: ../src/gui_interface.py:1073
 #: ../src/notify.py:274
 msgid "File Transfer Stopped"
 msgstr "העברת קובץ נעצרה"
 
-#: ../src/dialogs.py:3132
+#: ../src/dialogs.py:3033
 #, python-format
 msgid "Single Message using account %s"
 msgstr "הודעה בודדת באמצעות חשבון ‫%s"
 
-#: ../src/dialogs.py:3134
+#: ../src/dialogs.py:3035
 #, python-format
 msgid "Single Message in account %s"
 msgstr "הודעה בודדת בחשבון ‫%s"
 
-#: ../src/dialogs.py:3136
+#: ../src/dialogs.py:3037
 msgid "Single Message"
 msgstr "הודעה בודדת"
 
 #. prepare UI for Sending
-#: ../src/dialogs.py:3139
+#: ../src/dialogs.py:3040
 #, python-format
 msgid "Send %s"
 msgstr "שליחת %s"
 
 #. prepare UI for Receiving
-#: ../src/dialogs.py:3162
+#: ../src/dialogs.py:3063
 #, python-format
 msgid "Received %s"
 msgstr "התקבלה %s"
 
+# BUG: From, not Form?
+# תבנית
 #. prepare UI for Receiving
-#: ../src/dialogs.py:3185
-#, python-format
+#: ../src/dialogs.py:3086
+#, fuzzy, python-format
 msgid "Form %s"
-msgstr "טופס %s"
+msgstr "מאת ‫%s"
 
-# Is there RE for Hebrew?
 #. we create a new blank window to send and we preset RE: and to jid
-#: ../src/dialogs.py:3268
+#: ../src/dialogs.py:3170
 #, python-format
 msgid "RE: %s"
 msgstr "‏RE: %s"
 
-#: ../src/dialogs.py:3269
+#: ../src/dialogs.py:3171
 #, python-format
 msgid "%s wrote:\n"
-msgstr "‏%s כתב/ה:\n"
+msgstr "‫%s כתב/ה:\n"
 
-#: ../src/dialogs.py:3329
+#: ../src/dialogs.py:3231
 #, python-format
 msgid "XML Console for %s"
 msgstr "מסוף ‫XML עבור ‫%s"
 
-#: ../src/dialogs.py:3331
+#: ../src/dialogs.py:3233
 msgid "XML Console"
 msgstr "מסוף XML"
 
 # רוצה לה
 #. Action that can be done with an incoming list of contacts
-#: ../src/dialogs.py:3478
+#: ../src/dialogs.py:3380
 msgid "add"
 msgstr "להוסיף"
 
 # Is this Change or Adjust?
 # לשנות
 # תתאים
-#: ../src/dialogs.py:3478
+#: ../src/dialogs.py:3380
 msgid "modify"
 msgstr "להתאים"
 
-#: ../src/dialogs.py:3479
+#: ../src/dialogs.py:3381
 msgid "remove"
 msgstr "להסיר"
 
 # שתבצע/י <b>%(action)s</b> של
 # שיותאמו על ידך מספר x שברשימה
 # רוצה ש<b>תוסיף</b> מספר אנשי קשר ברשימה
-#: ../src/dialogs.py:3508
+#: ../src/dialogs.py:3410
 #, python-format
-msgid ""
-"<b>%(jid)s</b> would like you to <b>%(action)s</b> some contacts in your "
-"roster."
-msgstr "‏<b>%(jid)s</b> מעוניין <b>%(action)s</b> מספר אנשי קשר ברשימתך."
+msgid "<b>%(jid)s</b> would like you to <b>%(action)s</b> some contacts in your roster."
+msgstr "‫<b>%(jid)s</b> מעוניין <b>%(action)s</b> מספר אנשי קשר ברשימתך."
 
 #. Change label for accept_button to action name instead of 'OK'.
-#: ../src/dialogs.py:3526 ../src/dialogs.py:3601
+#: ../src/dialogs.py:3428
+#: ../src/dialogs.py:3503
 msgid "Modify"
 msgstr "התאמה"
 
 #. holds jid
-#: ../src/dialogs.py:3532 ../src/history_manager.py:166
+#: ../src/dialogs.py:3434
+#: ../src/history_manager.py:156
 msgid "Jabber ID"
-msgstr "מזהה Jabber"
+msgstr "‫JID"
 
-#: ../src/dialogs.py:3538
+#: ../src/dialogs.py:3440
 msgid "Groups"
 msgstr "קבוצות"
 
 #. it is selected
 #. remote_jid = model[iter_][1].decode('utf-8')
-#: ../src/dialogs.py:3646
+#: ../src/dialogs.py:3548
 #, python-format
 msgid "%s suggested me to add you in my roster."
-msgstr "‏%s הציע לי להוסיף אותך אל הרשימה שלי."
+msgstr "‫%s הציע לי להוסיפך אל רשימתי."
 
 # נוספו
-#: ../src/dialogs.py:3660
+#: ../src/dialogs.py:3562
 #, python-format
 msgid "Added %d contact"
 msgid_plural "Added %d contacts"
 msgstr[0] "הוסף איש קשר %d"
 msgstr[1] "הוספו %d אנשי קשר"
 
-#: ../src/dialogs.py:3698
+# BUG: extra space ?
+#: ../src/dialogs.py:3600
 #, python-format
 msgid "Removed %d contact"
 msgid_plural "Removed %d contacts"
 msgstr[0] "הוסר איש קשר %d"
 msgstr[1] "הוסרו %d אנשי קשר"
 
-# ארכיונאות
-#: ../src/dialogs.py:3739 ../src/dialogs.py:3916
+#: ../src/dialogs.py:3641
+#: ../src/dialogs.py:3818
 #, python-format
 msgid "Archiving Preferences for %s"
-msgstr "העדפות גנזך עבור ‫%s"
+msgstr "העדפות ארכיונאות עבור ‫%s"
 
-#: ../src/dialogs.py:3779
+#: ../src/dialogs.py:3681
 msgid "Invalid expire value"
 msgstr "ערך תפוגה שגוי"
 
-#: ../src/dialogs.py:3780
+#: ../src/dialogs.py:3682
 msgid "Expire must be a valid positive integer."
 msgstr "תפוגה מוכרחה להיות ספרה חיובית תקפה."
 
-#: ../src/dialogs.py:3827
+# עם התבנית
+#: ../src/dialogs.py:3729
 msgid "There is an error with the form"
-msgstr "קיימת שגיאה עם הטופס"
+msgstr "זוהי שגיאה בתבנית"
 
-#: ../src/dialogs.py:4047
+#: ../src/dialogs.py:3949
 msgid "There is an error"
-msgstr "קיימת שגיאה"
+msgstr "קיימת שגיאה."
 
-#: ../src/dialogs.py:4115
+#: ../src/dialogs.py:4017
 #, python-format
 msgid "Privacy List <b><i>%s</i></b>"
 msgstr "רשימת פרטיות ‫<b><i>%s</i></b>"
 
-#: ../src/dialogs.py:4119
+#: ../src/dialogs.py:4021
 #, python-format
 msgid "Privacy List for %s"
 msgstr "רשימת פרטיות עבור ‫%s"
 
-#: ../src/dialogs.py:4186
+#: ../src/dialogs.py:4088
 #, python-format
 msgid "Order: %(order)s, action: %(action)s, type: %(type)s, value: %(value)s"
 msgstr "סדר: %(order)s, פעולה: %(action)s, טיפוס: %(type)s, ערך: %(value)s"
 
-#: ../src/dialogs.py:4191
+#: ../src/dialogs.py:4093
 #, python-format
 msgid "Order: %(order)s, action: %(action)s"
 msgstr "סדר: %(order)s, פעולה: %(action)s"
 
-#: ../src/dialogs.py:4242
+#: ../src/dialogs.py:4144
 msgid "<b>Edit a rule</b>"
 msgstr "<b>עריכת כלל</b>"
 
-#: ../src/dialogs.py:4353
+#: ../src/dialogs.py:4255
 msgid "<b>Add a rule</b>"
 msgstr "<b>הוספת כלל</b>"
 
-#: ../src/dialogs.py:4452
+#: ../src/dialogs.py:4354
 #, python-format
 msgid "Privacy Lists for %s"
 msgstr "רשימות פרטיות עבור ‫%s"
 
-#: ../src/dialogs.py:4454
+#: ../src/dialogs.py:4356
 msgid "Privacy Lists"
 msgstr "רשימות פרטיות"
 
-#: ../src/dialogs.py:4543
+#: ../src/dialogs.py:4445
 msgid "Invalid List Name"
 msgstr "שם רשימה שגוי"
 
-#: ../src/dialogs.py:4544
+#: ../src/dialogs.py:4446
 msgid "You must enter a name to create a privacy list."
 msgstr "עליך להזין שם כדי ליצור רשימת פרטיות."
 
 # Changed to: You have been invited to a groupchat
-#: ../src/dialogs.py:4580
+#: ../src/dialogs.py:4481
 msgid "You are invited to a groupchat"
 msgstr "הוזמנת אל שיחת קבוצה"
 
-#: ../src/dialogs.py:4583
+#: ../src/dialogs.py:4484
 msgid "$Contact has invited you to join a discussion"
-msgstr "‏$Contact הזמינך להצטרף אל דיון"
+msgstr "‫$Contact הזמינך להצטרף אל דיון"
 
-#: ../src/dialogs.py:4585
+#: ../src/dialogs.py:4486
 #, python-format
 msgid "$Contact has invited you to group chat %(room_jid)s"
-msgstr "‏$Contact הזמינך אל שיחת קבוצה %(room_jid)s"
+msgstr "‫$Contact הזמינך אל שיחת הקבוצה %(room_jid)s"
 
-#: ../src/dialogs.py:4593
+#: ../src/dialogs.py:4494
 #, python-format
 msgid "Comment: %s"
 msgstr "הערה: %s"
 
-#: ../src/dialogs.py:4595
+#: ../src/dialogs.py:4496
 msgid "Do you want to accept the invitation?"
 msgstr "האם ברצונך לקבל את ההזמנה?"
 
-#: ../src/dialogs.py:4612
+#: ../src/dialogs.py:4512
 msgid "Reason (if you decline):"
-msgstr "סיבה (באם רצונך בדחיית ההזמנה):"
+msgstr "סיבה (במידה ותסרב):"
 
-#: ../src/dialogs.py:4664
+#: ../src/dialogs.py:4563
 msgid "Choose Client Cert #PCKS12"
-msgstr "בחירת תעודת לקוח ‎#PCKS12"
+msgstr "בחירת תעודת לקוח #PCKS12"
 
-#: ../src/dialogs.py:4674 ../src/dialogs.py:4716 ../src/dialogs.py:4772
-#: ../src/dialogs.py:4860
+#: ../src/dialogs.py:4573
+#: ../src/dialogs.py:4615
+#: ../src/dialogs.py:4671
+#: ../src/dialogs.py:4759
 msgid "All files"
 msgstr "כל הקבצים"
 
-#: ../src/dialogs.py:4679
+#: ../src/dialogs.py:4578
 msgid "PKCS12 Files"
 msgstr "קבצי PKCS12"
 
-#: ../src/dialogs.py:4706
+#: ../src/dialogs.py:4605
 msgid "Choose Sound"
 msgstr "בחירת צליל"
 
-#: ../src/dialogs.py:4721
+#: ../src/dialogs.py:4620
 msgid "Wav Sounds"
 msgstr "צלילי Wav"
 
-#: ../src/dialogs.py:4759
+#: ../src/dialogs.py:4658
 msgid "Choose Image"
 msgstr "בחירת תמונה"
 
-#: ../src/dialogs.py:4777
+#: ../src/dialogs.py:4676
 msgid "Images"
 msgstr "תמונות"
 
-#: ../src/dialogs.py:4847
+#: ../src/dialogs.py:4746
 msgid "Choose Archive"
 msgstr "בחירת ארכיון"
 
-#: ../src/dialogs.py:4865
+#: ../src/dialogs.py:4764
 msgid "Zip files"
 msgstr "קבצי Zip"
 
 # הופך ל
-#: ../src/dialogs.py:4891
+#: ../src/dialogs.py:4790
 #, python-format
 msgid "When %s becomes:"
 msgstr "כאשר %s נהיה:"
 
-#: ../src/dialogs.py:4893
+#: ../src/dialogs.py:4792
 #, python-format
 msgid "Adding Special Notification for %s"
 msgstr "הוספת התראה מיוחדת עבור ‫%s"
 
-#: ../src/dialogs.py:5113
+#: ../src/dialogs.py:5012
 #, python-format
 msgid ""
 "Your chat session with <b>%(jid)s</b> is encrypted.\n"
@@ -8366,45 +8424,44 @@ msgstr ""
 "\n"
 "מחרוזת האימות הקצרה (SAS) של סשן זה הינה <b>%(sas)s</b>."
 
-#: ../src/dialogs.py:5116
+# אומתה הזהות של
+#: ../src/dialogs.py:5015
 msgid "You have already verified this contact's identity."
 msgstr "כבר אימתת את הזהות של איש קשר זה."
 
-#: ../src/dialogs.py:5122 ../src/dialogs.py:5207
+#: ../src/dialogs.py:5021
+#: ../src/dialogs.py:5105
 msgid "Contact's identity verified"
 msgstr "זהות איש קשר מאומתת"
 
 # מאמת
-#: ../src/dialogs.py:5128
+#: ../src/dialogs.py:5027
 msgid "Verify again..."
 msgstr "אמת שוב..."
 
 # הודעותיך
 # GOOD! their identity, not his or her ("he or she") identity [not a BUG:]
-#: ../src/dialogs.py:5133
-msgid ""
-"To be certain that <b>only</b> the expected person can read your messages or "
-"send you messages, you need to verify their identity by clicking the button "
-"below."
-msgstr ""
-"כדי להסיר ספק כי האישיות הצפויה <b>בלבד</b> יכולה לקרוא את הודעותייך או "
-"לשלוח לך הודעות, עליך לאמת את זהותם על ידי הקלקה על הלחצן מטה."
+#: ../src/dialogs.py:5032
+msgid "To be certain that <b>only</b> the expected person can read your messages or send you messages, you need to verify their identity by clicking the button below."
+msgstr "כדי להסיר ספק שהאישיות הצפויה <b>בלבד</b> יכולה לקרוא את הודעותייך או לשלוח לך הודעות, עליך לאמת את זהותם על ידי הקלקה על הלחצן מטה."
 
-#: ../src/dialogs.py:5136 ../src/dialogs.py:5188 ../src/dialogs.py:5201
+#: ../src/dialogs.py:5035
+#: ../src/dialogs.py:5086
+#: ../src/dialogs.py:5099
 msgid "Contact's identity NOT verified"
 msgstr "זהות איש קשר אינה מאומתת!"
 
-#: ../src/dialogs.py:5141
+#: ../src/dialogs.py:5040
 msgid "Verify..."
-msgstr "אימות..."
+msgstr "אמת..."
 
-#: ../src/dialogs.py:5152
+#: ../src/dialogs.py:5051
 msgid "Have you verified the contact's identity?"
 msgstr "האם אימתת את הזהות של איש הקשר?"
 
 # אישית או טלפונית
 # באופן אישי או בטלפון
-#: ../src/dialogs.py:5153
+#: ../src/dialogs.py:5052
 #, python-format
 msgid ""
 "To prevent talking to an unknown person, you should speak to <b>%(jid)s</b> "
@@ -8413,69 +8470,60 @@ msgid ""
 "\n"
 "This session's Short Authentication String is <b>%(sas)s</b>."
 msgstr ""
-"בכדי למנוע שיחה אל אישיות לא מוכרת, עליך לדבר עם <b>%(jid)s</b> באופן ישיר "
-"(באופן אישי או טלפונית) ולוודא כי הם רואים את אותה מחרוזת אימות קצרה (SAS) "
-"כפי שעינייך רואות.\n"
+"בכדי למנוע שיחה אל אישיות לא מוכרת, עליך לדבר עם <b>%(jid)s</b> באופן ישיר (באופן אישי או טלפונית) ולוודא שהם רואים את אותה מחרוזת אימות קצרה (SAS) כפי שעינייך רואות.\n"
 "\n"
 "מחרוזת האימות הקצרה של סשן זה הינה <b>%(sas)s</b>."
 
-#: ../src/dialogs.py:5154
+#: ../src/dialogs.py:5053
 msgid "Did you talk to the remote contact and verify the SAS?"
 msgstr "האם דיברת עם איש הקשר המרוחק ודאגת לוודא הצפנת SAS?"
 
-#: ../src/dialogs.py:5189
+#: ../src/dialogs.py:5087
 #, python-format
 msgid "The contact's key (%s) <b>does not match</b> the key assigned in Gajim."
-msgstr "המפתח של איש קשר (%s) <b>לא תואם</b> את המפתח אשר מוקצה בתוך Gajim."
+msgstr "המפתח של איש קשר (%s) <b>לא תואם</b> את המפתח המוקצה אצל Gajim."
 
-#: ../src/dialogs.py:5195
-msgid ""
-"No OpenPGP key is assigned to this contact. So you cannot encrypt messages."
-msgstr "לא הוקצה מפתח OpenPGP לאיש קשר זה. כך שאין אין באפשרותך להצפין הודעות."
+#: ../src/dialogs.py:5093
+msgid "No GPG key is assigned to this contact. So you cannot encrypt messages."
+msgstr "לא הוקצה מפתח GPG לאיש קשר זה. אי לכך אין באפשרותך להצפין הודעות."
 
-#: ../src/dialogs.py:5202
-msgid ""
-"OpenPGP key is assigned to this contact, but <b>you do not trust his key</"
-"b>, so message <b>cannot</b> be encrypted. Use your OpenPGP client to trust "
-"this key."
-msgstr ""
-"מפתח OpenPGP מוקצה לאיש קשר זה, אך <b>אינך סומך על מפתח זה</b>, אי לכך "
-"הודעות <b>לא יכולות</b> להיות מוצפנות. יש לעשות שימוש בלקוח OpenPGP בכדי "
-"לבטוח במפתח זה."
+#: ../src/dialogs.py:5100
+msgid "GPG key is assigned to this contact, but <b>you do not trust his key</b>, so message <b>cannot</b> be encrypted. Use your GPG client to trust this key."
+msgstr "מפתח GPG אכן הוקצה לאיש קשר זה, אך <b>אינך סומך על מפתח זה</b>, אי לכך הודעות <b>לא יכולות</b> להיות מוצפנות. יש לעשות שימוש בלקוח GPG בכדי לבטוח במפתח זה."
 
-#: ../src/dialogs.py:5208
-msgid ""
-"OpenPGP Key is assigned to this contact, and you trust his key, so messages "
-"will be encrypted."
-msgstr ""
-"מפתח OpenPGP מוקצה לאיש קשר זה, והינך סומך על המפתח שלו, אי לכך הודעות "
-"יוצפנו."
+#: ../src/dialogs.py:5106
+msgid "GPG Key is assigned to this contact, and you trust his key, so messages will be encrypted."
+msgstr "מפתח GPG מוקצה לאיש קשר זה, והינך סומך על המפתח שלו, אי לכך הודעות יוצפנו."
 
-#: ../src/dialogs.py:5273
+#: ../src/dialogs.py:5171
 msgid "an audio and video"
 msgstr "שמע וגם וידאו"
 
-#: ../src/dialogs.py:5275
+#: ../src/dialogs.py:5173
 msgid "an audio"
 msgstr "שמע"
 
-#: ../src/dialogs.py:5277
+#: ../src/dialogs.py:5175
 msgid "a video"
 msgstr "וידאו"
 
-#: ../src/dialogs.py:5281
+# What is being put into %(type)s?
+# Maybe an RTL issue would show up
+# Needs to be tested
+# See: Right-to-left mark
+#: ../src/dialogs.py:5179
 #, python-format
-msgid ""
-"%(contact)s wants to start %(type)s session with you. Do you want to answer "
-"the call?"
-msgstr "‏%(contact)s רוצה להתחיל עמך בסשן %(type)s. האם יש ברצונך לענות לקריאה?"
+msgid "%(contact)s wants to start %(type)s session with you. Do you want to answer the call?"
+msgstr "‫%(contact)s רוצה להתחיל עמך בסשן %(type)s. האם ברצונך לענות לקריאה?"
 
-#: ../src/dialogs.py:5372 ../src/dialogs.py:5376
+#: ../src/dialogs.py:5248
 #, python-format
 msgid "Certificate for account %s"
 msgstr "תעודה עבור חשבון ‫%s"
 
-#: ../src/dialogs.py:5376
+# Unit
+# Fix LTR issues with Latin characters (Done!)
+#: ../src/dialogs.py:5248
 #, python-format
 msgid ""
 "<b>Issued to:</b>\n"
@@ -8497,157 +8545,168 @@ msgid ""
 "SHA1 Fingerprint: %(sha1)s"
 msgstr ""
 "<b>הונפקה עבור:</b>\n"
-"שם כללי (CN): ‏%(scn)s\n"
-"ארגון (O): ‏%(sorg)s\n"
-"יחידת איגוד (OU): ‏%(sou)s\n"
+"שם כללי ‫(CN): ‫%(scn)s\n"
+"ארגון ‫(O): ‫%(sorg)s\n"
+"יחידת איגוד ‫(OU): ‫%(sou)s\n"
 "מספר סידורי: %(sn)s\n"
 "\n"
 "<b>הונפקה על ידי:</b>\n"
-"שם כללי (CN): ‏%(icn)s\n"
-"ארגון (O): ‏%(iorg)s\n"
-"יחידת איגוד (OU): ‏%(iou)s\n"
+"שם כללי ‫(CN): ‫%(icn)s\n"
+"ארגון ‫(O): ‫%(iorg)s\n"
+"יחידת איגוד ‫(OU): ‫%(iou)s\n"
 "\n"
 "<b>תקפות:</b>\n"
 "הונפקה בתאריך: %(io)s\n"
 "פוקעת בתאריך: %(eo)s\n"
 "\n"
 "<b>טביעת אצבע</b>\n"
-"טביעת אצבע SHA1: ‏%(sha1)s"
+"טביעת אצבע ‫SHA1: ‫%(sha1)s"
 
-#: ../src/dialogs.py:5411 ../src/dialogs.py:5428
+#: ../src/dialogs.py:5283
+#: ../src/dialogs.py:5300
 msgid "View cert..."
 msgstr "הצג תעודה"
 
-#: ../src/dialogs.py:5436
-msgid "Certificate"
-msgstr "תעודה"
-
-#: ../src/disco.py:120
+#: ../src/disco.py:119
 msgid "Others"
 msgstr "אחרים"
 
 #. conference is a category for listing mostly groupchats in service discovery
-#: ../src/disco.py:124
+#: ../src/disco.py:123
 msgid "Conference"
 msgstr "ועידה"
 
 # BUG: Dot
-#: ../src/disco.py:517
+#: ../src/disco.py:516
 msgid "Without a connection, you can not browse available services"
-msgstr "ללא חיבור, אין באפשרותך לעיין בשירותים זמינים"
+msgstr "ללא חיבור, אין ביכולתך לעיין בשירותים זמינים"
 
-#: ../src/disco.py:603
+#: ../src/disco.py:602
 #, python-format
 msgid "Service Discovery using account %s"
 msgstr "מציאת שירות באמצעות חשבון ‫%s"
 
-#: ../src/disco.py:605
+#: ../src/disco.py:604
 msgid "Service Discovery"
 msgstr "מציאת שירות"
 
 # BUG: general title without "the"
-#: ../src/disco.py:761
+# לא ניתן
+#: ../src/disco.py:760
 msgid "The service could not be found"
 msgstr "השירות לא היה יכול להימצא"
 
-#: ../src/disco.py:762
-msgid ""
-"There is no service at the address you entered, or it is not responding. "
-"Check the address and try again."
-msgstr "אין שירות בכתובת אשר הזנת, או שזה אינו מגיב. בדוק את הכתובת ונסה שוב."
+# it = service
+# הוא = השירות
+#: ../src/disco.py:761
+msgid "There is no service at the address you entered, or it is not responding. Check the address and try again."
+msgstr "לא קיים שירות בכתובת שהזנת, או שהוא לא מגיב. נא לבדוק את הכתובת ולנסות שוב."
 
-#: ../src/disco.py:768 ../src/disco.py:1109
+#: ../src/disco.py:765
+#: ../src/disco.py:1101
 msgid "The service is not browsable"
-msgstr "השירות אינו בר עיון"
+msgstr "השירות אינו בר־עיון"
 
-#: ../src/disco.py:769
+# סוג שירות זה
+#: ../src/disco.py:766
 msgid "This type of service does not contain any items to browse."
-msgstr "טיפוס זה של שירות לא מכיל פריטים לעיון."
+msgstr "טיפוס זה של שירות לא מכיל פריטים שניתן לעיין בהם."
 
-#: ../src/disco.py:810 ../src/disco.py:820
+#: ../src/disco.py:806
+#: ../src/disco.py:816
 msgid "Invalid Server Name"
 msgstr "שם שרת שגוי"
 
-#: ../src/disco.py:873
+# מעיין כעת
+# Browsing services at
+#: ../src/disco.py:869
 #, python-format
 msgid "Browsing %(address)s using account %(account)s"
 msgstr "עיון בשירותים בכתובת ‫%(address)s באמצעות חשבון ‫%(account)s"
 
-#: ../src/disco.py:917
+#: ../src/disco.py:913
 msgid "_Browse"
 msgstr "_עיון"
 
-#: ../src/disco.py:1110
+#: ../src/disco.py:1102
 msgid "This service does not contain any items to browse."
-msgstr "שירות זה לא מכיל פריטים לעיון."
+msgstr "שירות זה לא מכיל פריטים שניתן לעיין בהם."
 
-#: ../src/disco.py:1378
+#: ../src/disco.py:1342
 msgid "_Execute Command"
 msgstr "הרץ _פקודה"
 
-#: ../src/disco.py:1388 ../src/disco.py:1560
+#: ../src/disco.py:1352
+#: ../src/disco.py:1521
 msgid "Re_gister"
-msgstr "ה_רשמה"
+msgstr "ה_רשם"
 
+# Plural form maybe?
 # Scanned/Identified/Detected/Discovered/Found %(current)d out of %(total)d..
 # אותרו, זוהו, נמצאו
-#: ../src/disco.py:1601
+#: ../src/disco.py:1562
 #, python-format
 msgid "Scanning %(current)d / %(total)d.."
 msgstr "נסרקו %(current)d שירותים מתוך %(total)d.."
 
 #. Users column
-#: ../src/disco.py:1797
+#: ../src/disco.py:1753
 msgid "Users"
 msgstr "משתמשים"
 
 #. Description column
-#: ../src/disco.py:1805
+#: ../src/disco.py:1761
 msgid "Description"
 msgstr "תיאור"
 
 #. Id column
-#: ../src/disco.py:1813
+#: ../src/disco.py:1769
 msgid "Id"
 msgstr "כתובת"
 
-#: ../src/disco.py:1877 ../src/gui_interface.py:2574
+# כבר הוגדרה סימנייה
+#: ../src/disco.py:1834
+#: ../src/gui_interface.py:2574
 msgid "Bookmark already set"
 msgstr "סימנייה כבר הוגדרה"
 
-#: ../src/disco.py:1878 ../src/gui_interface.py:2575
+#: ../src/disco.py:1835
+#: ../src/gui_interface.py:2575
 #, python-format
 msgid "Group Chat \"%s\" is already in your bookmarks."
 msgstr "שיחת קבוצה \"%s\" כבר קיימת בסימניותייך."
 
-#: ../src/disco.py:1887 ../src/gui_interface.py:2589
+#: ../src/disco.py:1844
+#: ../src/gui_interface.py:2589
 msgid "Bookmark has been added successfully"
 msgstr "סימנייה הוספה בהצלחה"
 
-#: ../src/disco.py:1888 ../src/gui_interface.py:2590
+# יש באפשרותך
+# דרך
+#: ../src/disco.py:1845
+#: ../src/gui_interface.py:2590
 msgid "You can manage your bookmarks via Actions menu in your roster."
-msgstr ""
-"באפשרותך לנהל את הסימניות שלך דרך תפריט 'פעולות' אשר מצוי בתוך הרשימה שלך."
+msgstr "ביכולתך לנהל את סימניותייך באמצעות התפריט 'פעולות' שברשימתך."
 
-#: ../src/disco.py:2098
+#: ../src/disco.py:2054
 msgid "Subscribed"
 msgstr "רשום"
 
-#: ../src/disco.py:2106
+#: ../src/disco.py:2062
 msgid "Node"
 msgstr "נקודת ממסר"
 
-#: ../src/disco.py:2173
+#: ../src/disco.py:2129
 msgid "New post"
 msgstr "פוסט חדש"
 
-#: ../src/disco.py:2179
+#: ../src/disco.py:2135
 msgid "_Subscribe"
-msgstr "הי_רשם"
+msgstr "ה_רשמה"
 
-#: ../src/disco.py:2185
+#: ../src/disco.py:2141
 msgid "_Unsubscribe"
-msgstr "_בטל הרשמה"
+msgstr "_ביטול הרשמה"
 
 #: ../src/features_window.py:50
 msgid "SSL certificate validation"
@@ -8668,9 +8727,7 @@ msgstr ""
 
 #: ../src/features_window.py:55
 msgid "Serverless chatting with autodetected clients in a local network."
-msgstr ""
-"עריכת שיחות ברשת התקשורת המקומית, ללא שרת כלל, באמצעות איתור אוטומטי של "
-"לקוחות אחרים אשר מחוברים אל אותה הרשת."
+msgstr "עריכת שיחות ברשת התקשורת המקומית, ללא שרת כלל, באמצעות איתור אוטומטי של לקוחות אחרים שמחוברים אל אותה הרשת."
 
 #: ../src/features_window.py:56
 msgid "Requires python-avahi."
@@ -8703,14 +8760,14 @@ msgstr "יש צורך בהתקנת python-dbus."
 msgid "Feature not available under Windows."
 msgstr "תכונה זו לא זמינה תחת Windows."
 
-# ‏OpenPGP הצפנת הודעות
+# ‫OpenGPG הצפנת הודעות
 #: ../src/features_window.py:62
-msgid "OpenPGP message encryption"
-msgstr "הצפנת הודעות באמצעות OpenPGP"
+msgid "OpenGPG message encryption"
+msgstr "הצפנת הודעות באמצעות OpenGPG"
 
 #: ../src/features_window.py:63
-msgid "Encrypting chat messages with OpenPGP keys."
-msgstr "הצפנת הודעות שיחה באמצעות מפתחות OpenPGP."
+msgid "Encrypting chat messages with gpg keys."
+msgstr "הצפנת הודעות שיחה באמצעות מפתחות gpg."
 
 #: ../src/features_window.py:64
 msgid "Requires gpg and python-gnupg (http://code.google.com/p/python-gnupg/)."
@@ -8747,7 +8804,7 @@ msgstr "יש צורך בהתקנת python-gnome2."
 
 #: ../src/features_window.py:74
 msgid "Password encryption"
-msgstr "הצפנת מילת מעבר"
+msgstr "הצפנת מילת־מעבר"
 
 #: ../src/features_window.py:75
 msgid "Passwords can be stored securely and not just in plaintext."
@@ -8759,7 +8816,7 @@ msgstr "יש צורך בהתקנת gnome-keyring וגם python-gnome2-desktop, 
 
 #: ../src/features_window.py:78
 msgid "SRV"
-msgstr ""
+msgstr "SRV"
 
 #: ../src/features_window.py:79
 msgid "Ability to connect to servers which are using SRV records."
@@ -8771,7 +8828,7 @@ msgstr "יש צורך בהתקנת dnsutils."
 
 #: ../src/features_window.py:81
 msgid "Requires nslookup to use SRV records."
-msgstr "יש צורך בהתקנת nslookup כדי לעשות שימוש ברשומות SRV."
+msgstr "יש צורך בהתקנת nslookup גדי לעשות שימוש ברשומות SRV."
 
 #: ../src/features_window.py:82
 msgid "Spell Checker"
@@ -8790,14 +8847,17 @@ msgstr "יש צורך בהתקנת libgtkspell."
 msgid "Requires libgtkspell and libenchant."
 msgstr "יש צורך בהתקנת libgtkspell וגם libenchant."
 
+# התראות
 #: ../src/features_window.py:86
 msgid "Notification"
 msgstr "התראה"
 
+# הודעות התראה
 #: ../src/features_window.py:87
 msgid "Passive popups notifying for new events."
 msgstr "התראות מוקפצות פסיביות המיידעות עבור אירועים חדשים."
 
+# בחיבור עם
 #: ../src/features_window.py:88
 msgid ""
 "Requires python-notify or instead python-dbus in conjunction with "
@@ -8813,9 +8873,7 @@ msgstr "מצב אוטומטי"
 # על מנת להגדיר
 #: ../src/features_window.py:91
 msgid "Ability to measure idle time, in order to set auto status."
-msgstr ""
-"יכולת למדוד את הזמן אשר בו המערכת מצויה בחוסר פעילות, בכדי לקבוע מצב חיבור "
-"אוטומטי."
+msgstr "יכולת למדוד את הזמן שבו המערכת מצויה בחוסר פעילות, בכדי לקבוע מצב־חיבור אוטומטי."
 
 #: ../src/features_window.py:92
 msgid "Requires libxss library."
@@ -8825,6 +8883,7 @@ msgstr "יש צורך בהתקנת ספריית libxss."
 msgid "Requires python2.5."
 msgstr "יש צורך בהתקנת python2.5."
 
+# מקצה לקצה
 #: ../src/features_window.py:94
 msgid "End to End message encryption"
 msgstr "הצפנת הודעות מן קצה אל קצה"
@@ -8864,14 +8923,12 @@ msgstr "יש צורך בהתקנת python-farstream וגם gstreamer-plugins-bad
 
 #: ../src/features_window.py:106
 msgid "UPnP-IGD"
-msgstr ""
+msgstr "UPnP-IGD"
 
-# העברת שערים
+# העברת פתחות/שערים
 #: ../src/features_window.py:107
 msgid "Ability to request your router to forward port for file transfer."
-msgstr ""
-"יכולת לבקש מן נתב הרשת שלך (ראוטר) לעשות שימוש בתיעול שערים (Port "
-"forwarding) עבור העברת קובץ."
+msgstr "יכולת לבקש מן נתב הרשת (ראוטר) לעשות שימוש בתיעול שערים (Port forwarding) עבור העברת קובץ."
 
 #: ../src/features_window.py:108
 msgid "Requires python-gupnp-igd."
@@ -8879,12 +8936,12 @@ msgstr "יש צורך בהתקנת python-gupnp-igd."
 
 #: ../src/features_window.py:110
 msgid "UPower"
-msgstr ""
+msgstr "UPower"
 
 # השעיית התליית
 #: ../src/features_window.py:111
 msgid "Ability to disconnect properly just before suspending the machine."
-msgstr "יכולת להתנתק באופן מוסדר טרם השהיית מחשבך."
+msgstr "יכולת להתנתק באופן מוסדר לפני השהיית מחשבך."
 
 #: ../src/features_window.py:112
 msgid "Requires upower and python-dbus."
@@ -8924,8 +8981,9 @@ msgstr "גודל: %s"
 # את/ה
 #. You is a reply of who sent a file
 #. You is a reply of who received a file
-#: ../src/filetransfers_window.py:196 ../src/filetransfers_window.py:206
-#: ../src/history_manager.py:551
+#: ../src/filetransfers_window.py:196
+#: ../src/filetransfers_window.py:206
+#: ../src/history_manager.py:541
 msgid "You"
 msgstr "עצמך"
 
@@ -8934,15 +8992,17 @@ msgstr "עצמך"
 msgid "Sender: %s"
 msgstr "ממען: %s"
 
-#: ../src/filetransfers_window.py:198 ../src/filetransfers_window.py:734
-#: ../src/tooltips.py:758
+#: ../src/filetransfers_window.py:198
+#: ../src/filetransfers_window.py:734
+#: ../src/tooltips.py:756
 msgid "Recipient: "
 msgstr "נמען: "
 
+# במדור
 #: ../src/filetransfers_window.py:209
 #, python-format
 msgid "Saved in: %s"
-msgstr "נשמר בתוך: ‎%s"
+msgstr "נשמר במדור: %s"
 
 #: ../src/filetransfers_window.py:244
 #, python-format
@@ -8962,42 +9022,44 @@ msgid ""
 "received.\n"
 "Do you want to reload it?"
 msgstr ""
-"הקובץ %(file)s התקבל בהצלחה, אך נראה כי הוא התקבל באופן לא תקין.\n"
+"הקובץ %(file)s התקבל בהצלחה, אך נראה שהוא התקבל באופן לא תקין.\n"
 "האם ברצונך להטעינו מחדש?"
 
 #: ../src/filetransfers_window.py:313
 msgid "Choose File to Send..."
 msgstr "בחירת קובץ לשליחה..."
 
-#: ../src/filetransfers_window.py:329 ../src/tooltips.py:793
+#: ../src/filetransfers_window.py:329
+#: ../src/tooltips.py:791
 msgid "Description: "
 msgstr "תיאור: "
 
 #: ../src/filetransfers_window.py:342
 msgid "Gajim cannot access this file"
-msgstr "‏Gajim לא מסוגל להשיג גישה לקובץ זה"
+msgstr "‫Gajim לא יכול להשיג גישה לקובץ זה"
 
 #: ../src/filetransfers_window.py:343
 msgid "This file is being used by another process."
 msgstr "קובץ זה מצוי בשימוש בידי תהליך אחר."
 
-# להחליף
-#: ../src/filetransfers_window.py:389 ../src/gtkgui_helpers.py:851
+#: ../src/filetransfers_window.py:389
+#: ../src/gtkgui_helpers.py:850
 #, python-format
 msgid "Cannot overwrite existing file \"%s\""
-msgstr "אין אפשרות לכתוב על קובץ קיים \"%s\""
+msgstr "לא ניתן לכתוב על הקובץ הקיים \"%s\""
 
-#: ../src/filetransfers_window.py:390 ../src/gtkgui_helpers.py:852
-msgid ""
-"A file with this name already exists and you do not have permission to "
-"overwrite it."
+#: ../src/filetransfers_window.py:390
+#: ../src/gtkgui_helpers.py:851
+msgid "A file with this name already exists and you do not have permission to overwrite it."
 msgstr "קובץ בשם זה כבר קיים ואין ולא עומדת לרשותך הרשאה לכתוב עליו."
 
-#: ../src/filetransfers_window.py:407 ../src/gtkgui_helpers.py:856
+#: ../src/filetransfers_window.py:407
+#: ../src/gtkgui_helpers.py:855
 msgid "This file already exists"
 msgstr "קובץ זה כבר קיים"
 
-#: ../src/filetransfers_window.py:407 ../src/gtkgui_helpers.py:856
+#: ../src/filetransfers_window.py:407
+#: ../src/gtkgui_helpers.py:855
 msgid "What do you want to do?"
 msgstr "מה ברצונך לעשות?"
 
@@ -9005,16 +9067,17 @@ msgstr "מה ברצונך לעשות?"
 #. read-only bit is used to mark special folder under
 #. windows, not to mark that a folder is read-only.
 #. See ticket #3587
-#: ../src/filetransfers_window.py:418 ../src/gtkgui_helpers.py:863
+#: ../src/filetransfers_window.py:418
+#: ../src/gtkgui_helpers.py:862
 #, python-format
 msgid "Directory \"%s\" is not writable"
 msgstr "המדור \"%s\" אינו נתון לכתיבה"
 
-#: ../src/filetransfers_window.py:419 ../src/gtkgui_helpers.py:864
+#: ../src/filetransfers_window.py:419
+#: ../src/gtkgui_helpers.py:863
 msgid "You do not have permission to create files in this directory."
 msgstr "אין לך הרשאות ליצור קבצים במדור זה."
 
-# בתור
 #: ../src/filetransfers_window.py:430
 msgid "Save File as..."
 msgstr "שמירת קובץ בשם..."
@@ -9027,7 +9090,7 @@ msgstr "קובץ: %s"
 #: ../src/filetransfers_window.py:456
 #, python-format
 msgid "Type: %s"
-msgstr "טיפוס: %s"
+msgstr "סוג: %s"
 
 #: ../src/filetransfers_window.py:458
 #, python-format
@@ -9037,7 +9100,7 @@ msgstr "תיאור: %s"
 #: ../src/filetransfers_window.py:459
 #, python-format
 msgid "%s wants to send you a file:"
-msgstr "‏%s רוצה לשלוח אליך קובץ:"
+msgstr "‫%s רוצה לשלוח אליך קובץ:"
 
 #: ../src/filetransfers_window.py:500
 msgid "Checking file..."
@@ -9053,7 +9116,7 @@ msgstr "שגיאת קובץ"
 #: ../src/filetransfers_window.py:551
 #, python-format
 msgid "%(hours)02.d:%(minutes)02.d:%(seconds)02.d"
-msgstr ""
+msgstr "%(hours)02.d:%(minutes)02.d:%(seconds)02.d"
 
 #. This should make the string Kb/s,
 #. where 'Kb' part is taken from %s.
@@ -9072,16 +9135,18 @@ msgid "File: "
 msgstr "קובץ: "
 
 # לא קיימת אפשרות
-# אין אפשרות
+# לא ניתן
 #: ../src/filetransfers_window.py:704
 msgid "It is not possible to send empty files"
 msgstr "אין זה אפשרי לשלוח קבצים ריקים"
 
-#: ../src/filetransfers_window.py:730 ../src/tooltips.py:748
+#: ../src/filetransfers_window.py:730
+#: ../src/tooltips.py:746
 msgid "Name: "
 msgstr "שם: "
 
-#: ../src/filetransfers_window.py:732 ../src/tooltips.py:752
+#: ../src/filetransfers_window.py:732
+#: ../src/tooltips.py:750
 msgid "Sender: "
 msgstr "ממען: "
 
@@ -9089,137 +9154,209 @@ msgstr "ממען: "
 msgid "Pause"
 msgstr "הפסקה"
 
-#: ../src/gajim-remote.py:78
+#: ../src/gajim.py:192
+#, fuzzy
+msgid "Gajim needs X server to run. Quiting..."
+msgstr "cli"
+
+#: ../src/gajim.py:194
+#, fuzzy, python-format
+msgid "importing PyGTK failed: %s"
+msgstr "cli"
+
+#: ../src/gajim.py:235
+#, fuzzy
+msgid "Gajim needs PyGTK 2.22 or above"
+msgstr "cli"
+
+#: ../src/gajim.py:236
+#, fuzzy
+msgid "Gajim needs PyGTK 2.22 or above to run. Quiting..."
+msgstr "cli"
+
+#: ../src/gajim.py:238
+#, fuzzy
+msgid "Gajim needs GTK 2.22 or above"
+msgstr "cli"
+
+#: ../src/gajim.py:239
+#, fuzzy
+msgid "Gajim needs GTK 2.22 or above to run. Quiting..."
+msgstr "cli"
+
+#: ../src/gajim.py:248
+#, fuzzy
+msgid "Gajim needs pywin32 to run"
+msgstr "cli"
+
+# component
+#: ../src/gajim.py:249
+#, python-format
+msgid "Please make sure that Pywin32 is installed on your system. You can get it at %s"
+msgstr "נא לוודא שהרכיב Pywin32 מותקן במערכתך. ביכולתך להשיגו אצל %s"
+
+#. set the icon to all newly opened wind
+#: ../src/gajim.py:365
+msgid "Gajim is already running"
+msgstr "‫Gajim כבר מורץ כעת"
+
+#: ../src/gajim.py:366
+msgid ""
+"Another instance of Gajim seems to be running\n"
+"Run anyway?"
+msgstr ""
+"נראה שתהליך אחר של Gajim מורץ כעת\n"
+"האם ברצונך להריץ את התוכנית בכל זאת?"
+
+#: ../src/gajim-remote.py:77
 #, fuzzy
 msgid "Shows a help on specific command"
 msgstr "cli"
 
+# פקודה
 #. User gets help for the command, specified by this parameter
-#: ../src/gajim-remote.py:81
+#: ../src/gajim-remote.py:80
 #, fuzzy
 msgid "command"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:82
+#: ../src/gajim-remote.py:81
 #, fuzzy
 msgid "show help on command"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:86
+# הצגה או הסתרה של חלון הרשימה
+#: ../src/gajim-remote.py:85
 #, fuzzy
 msgid "Shows or hides the roster window"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:90
+#: ../src/gajim-remote.py:89
 #, fuzzy
 msgid "Pops up a window with the next pending event"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:94
+#: ../src/gajim-remote.py:93
 #, fuzzy
 msgid ""
 "Prints a list of all contacts in the roster. Each contact appears on a "
 "separate line"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:97 ../src/gajim-remote.py:112
-#: ../src/gajim-remote.py:122 ../src/gajim-remote.py:132
-#: ../src/gajim-remote.py:148 ../src/gajim-remote.py:162
-#: ../src/gajim-remote.py:171 ../src/gajim-remote.py:192
-#: ../src/gajim-remote.py:222 ../src/gajim-remote.py:231
-#: ../src/gajim-remote.py:238 ../src/gajim-remote.py:245
-#: ../src/gajim-remote.py:256 ../src/gajim-remote.py:281
-#: ../src/gajim-remote.py:292
-msgid "?CLI:account"
-msgstr ""
+# חשבון
+#: ../src/gajim-remote.py:96
+#: ../src/gajim-remote.py:111
+#: ../src/gajim-remote.py:121
+#: ../src/gajim-remote.py:131
+#: ../src/gajim-remote.py:147
+#: ../src/gajim-remote.py:161
+#: ../src/gajim-remote.py:170
+#: ../src/gajim-remote.py:191
+#: ../src/gajim-remote.py:221
+#: ../src/gajim-remote.py:230
+#: ../src/gajim-remote.py:237
+#: ../src/gajim-remote.py:244
+#: ../src/gajim-remote.py:255
+#: ../src/gajim-remote.py:280
+#: ../src/gajim-remote.py:291
+#, fuzzy
+msgid "account"
+msgstr "cli"
 
-#: ../src/gajim-remote.py:97
+#: ../src/gajim-remote.py:96
 #, fuzzy
 msgid "show only contacts of the given account"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:103
+# הדפסת רשימה של חשבונות רשומים
+#: ../src/gajim-remote.py:102
 #, fuzzy
 msgid "Prints a list of registered accounts"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:107
+#: ../src/gajim-remote.py:106
 #, fuzzy
 msgid "Changes the status of account or accounts"
 msgstr "cli"
 
+# מצב־חיבור
 #. offline, online, chat, away, xa, dnd, invisible should not be translated
-#: ../src/gajim-remote.py:110
-msgid "?CLI:status"
-msgstr ""
+#: ../src/gajim-remote.py:109
+#, fuzzy
+msgid "status"
+msgstr "cli"
 
-#: ../src/gajim-remote.py:110
+#: ../src/gajim-remote.py:109
 #, fuzzy
 msgid ""
 "one of: offline, online, chat, away, xa, dnd, invisible. If not set, use "
 "account's previous status"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:111 ../src/gajim-remote.py:134
-#: ../src/gajim-remote.py:145 ../src/gajim-remote.py:159
-#: ../src/gajim-remote.py:170 ../src/gajim-remote.py:283
-msgid "?CLI:message"
-msgstr ""
-
-#: ../src/gajim-remote.py:111
+# הודעת מצב
+#: ../src/gajim-remote.py:110
 #, fuzzy
 msgid "status message"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:112
+#: ../src/gajim-remote.py:111
 #, fuzzy
 msgid ""
 "change status of account \"account\". If not specified, try to change status "
 "of all accounts that have \"sync with global status\" option set"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:118
+#: ../src/gajim-remote.py:117
 #, fuzzy
 msgid "Changes the priority of account or accounts"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:120
-msgid "?CLI:priority"
-msgstr ""
+# עדיפות
+#: ../src/gajim-remote.py:119
+#, fuzzy
+msgid "priority"
+msgstr "cli"
 
-#: ../src/gajim-remote.py:120
+# עדיפות שברצונך לתת/להעניק עבור החשבון
+#: ../src/gajim-remote.py:119
 #, fuzzy
 msgid "priority you want to give to the account"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:122
+#: ../src/gajim-remote.py:121
 #, fuzzy
 msgid ""
 "change the priority of the given account. If not specified, change status of "
 "all accounts that have \"sync with global status\" option set"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:128
+#: ../src/gajim-remote.py:127
 #, fuzzy
 msgid "Shows the chat dialog so that you can send messages to a contact"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:130
+# JID של איש-הקשר שברצונך לשוחח עם
+# Changed to: JID of the contact with whom you want to chat (with)
+# ‏JID של איש־הקשר עמו ברצונך לשוחח
+#: ../src/gajim-remote.py:129
 #, fuzzy
 msgid "JID of the contact that you want to chat with"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:132 ../src/gajim-remote.py:222
+#: ../src/gajim-remote.py:131
+#: ../src/gajim-remote.py:221
 #, fuzzy
 msgid "if specified, contact is taken from the contact list of this account"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:135
+#: ../src/gajim-remote.py:134
 #, fuzzy
 msgid "message content. The account must be specified or \"\""
 msgstr "cli"
 
-#: ../src/gajim-remote.py:140
+# הינם בגדר רשות
+# שליחת הודעת שיחה חדשה אל איש קשר ברשימה. הן מפתח OpenPGP והן החשבון בגדר רשות. אם ברצונך להגדיר רק 'חשבון', ללא 'מפתח OpenPGP', יש להגדיר 'מפתח OpenPGP' אל ''.
+#: ../src/gajim-remote.py:139
 #, fuzzy
 msgid ""
 "Sends new chat message to a contact in the roster. Both OpenPGP key and "
@@ -9227,34 +9364,47 @@ msgid ""
 "key', just set 'OpenPGP key' to ''."
 msgstr "cli"
 
-#: ../src/gajim-remote.py:144 ../src/gajim-remote.py:157
+# ‏JID של איש הקשר שיקבל את ההודעה
+#: ../src/gajim-remote.py:143
+#: ../src/gajim-remote.py:156
 #, fuzzy
 msgid "JID of the contact that will receive the message"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:145 ../src/gajim-remote.py:159
-#: ../src/gajim-remote.py:170
+# תכולת
+# תוכן ההודעה
+#: ../src/gajim-remote.py:144
+#: ../src/gajim-remote.py:158
+#: ../src/gajim-remote.py:169
 #, fuzzy
 msgid "message contents"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:146 ../src/gajim-remote.py:160
+# מפתח pgp
+#: ../src/gajim-remote.py:145
+#: ../src/gajim-remote.py:159
 #, fuzzy
 msgid "pgp key"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:146 ../src/gajim-remote.py:160
+# public key
+# במידה והוגדר, ההודעה תוצפן באמצעות מפתח ציבורי זה
+#: ../src/gajim-remote.py:145
+#: ../src/gajim-remote.py:159
 #, fuzzy
 msgid "if specified, the message will be encrypted using this public key"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:148 ../src/gajim-remote.py:162
-#: ../src/gajim-remote.py:171
+# במידה והוגדר, ההודעה תשלח באמצעות חשבון זה
+#: ../src/gajim-remote.py:147
+#: ../src/gajim-remote.py:161
+#: ../src/gajim-remote.py:170
 #, fuzzy
 msgid "if specified, the message will be sent using this account"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:153
+# שליחת הודעת שיחה בודדת חדשה אל איש קשר ברשימה. הן מפתח OpenPGP והן החשבון בגדר רשות. אם ברצונך להגדיר רק 'חשבון', ללא 'מפתח OpenPGP', יש להגדיר 'מפתח OpenPGP' אל ''.
+#: ../src/gajim-remote.py:152
 #, fuzzy
 msgid ""
 "Sends new single message to a contact in the roster. Both OpenPGP key and "
@@ -9262,422 +9412,371 @@ msgid ""
 "key', just set 'OpenPGP key' to ''."
 msgstr "cli"
 
-#: ../src/gajim-remote.py:158
+# נושא
+#: ../src/gajim-remote.py:157
 #, fuzzy
 msgid "subject"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:158
+# נושא הודעה
+#: ../src/gajim-remote.py:157
 #, fuzzy
 msgid "message subject"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:167
+# שליחת הודעה חדשה אל שיחת קבוצה שאליה הצטרפת.
+#: ../src/gajim-remote.py:166
 #, fuzzy
 msgid "Sends new message to a groupchat you've joined."
 msgstr "cli"
 
-#: ../src/gajim-remote.py:169
+# ‏JID של החדר שיקבל את ההודעה
+#: ../src/gajim-remote.py:168
 #, fuzzy
 msgid "JID of the room that will receive the message"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:176
+# קבלת מידע מפורט אודות איש קשר
+#: ../src/gajim-remote.py:175
 #, fuzzy
 msgid "Gets detailed info on a contact"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:178 ../src/gajim-remote.py:191
-#: ../src/gajim-remote.py:221 ../src/gajim-remote.py:230
+# ‏JID של איש הקשר
+#: ../src/gajim-remote.py:177
+#: ../src/gajim-remote.py:190
+#: ../src/gajim-remote.py:220
+#: ../src/gajim-remote.py:229
 #, fuzzy
 msgid "JID of the contact"
 msgstr "cli"
 
 # BUG: on an account
-#: ../src/gajim-remote.py:182
+# קבלת מידע מפורט על חשבון
+#: ../src/gajim-remote.py:181
 #, fuzzy
 msgid "Gets detailed info on a account"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:184
+# שם החשבון
+#: ../src/gajim-remote.py:183
 #, fuzzy
 msgid "Name of the account"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:188
+# שליחת קובץ אל איש קשר
+#: ../src/gajim-remote.py:187
 #, fuzzy
 msgid "Sends file to a contact"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:190
+# קובץ
+#: ../src/gajim-remote.py:189
 #, fuzzy
 msgid "file"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:190
+# נתיב הקובץ
+#: ../src/gajim-remote.py:189
 #, fuzzy
 msgid "File path"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:192
+# what is specified? (fe/male)
+# במידה וצוין, הקובץ ישלח באמצעות חשבון זה
+#: ../src/gajim-remote.py:191
 #, fuzzy
 msgid "if specified, file will be sent using this account"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:197
+# רישום כל ההעדפות וערכיהן
+# הצגת רשימה של כל
+# רשימת כל ההעדפות וערכיהן
+#: ../src/gajim-remote.py:196
 #, fuzzy
 msgid "Lists all preferences and their values"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:201
+# What is "to"?
+# הגדרת הערך של 'מפתח' to 'ערך'.
+#: ../src/gajim-remote.py:200
 #, fuzzy
 msgid "Sets value of 'key' to 'value'."
 msgstr "cli"
 
-#: ../src/gajim-remote.py:203
+# מפתח=ערך
+#: ../src/gajim-remote.py:202
 #, fuzzy
 msgid "key=value"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:203
+# 'מפתח' זה השם של ההעדפה, 'ערך' זה הערך שהוגדר עבור ההעדפה
+#: ../src/gajim-remote.py:202
 #, fuzzy
 msgid "'key' is the name of the preference, 'value' is the value to set it to"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:208
+# מחיקת פריט העדפה
+#: ../src/gajim-remote.py:207
 #, fuzzy
 msgid "Deletes a preference item"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:210
+# מפתח
+#: ../src/gajim-remote.py:209
 #, fuzzy
 msgid "key"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:210
+# שם ההעדפה למחיקה
+#: ../src/gajim-remote.py:209
 #, fuzzy
 msgid "name of the preference to be deleted"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:214
+#: ../src/gajim-remote.py:213
 #, fuzzy
 msgid "Writes the current state of Gajim preferences to the .config file"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:219
+# הסרת איש קשר מן הרשימה
+#: ../src/gajim-remote.py:218
 #, fuzzy
 msgid "Removes contact from roster"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:228
+# הוספת איש קשר אל הרשימה
+#: ../src/gajim-remote.py:227
 #, fuzzy
 msgid "Adds contact to roster"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:231
+# הוספת איש קשר חדש לחשבון זה
+#: ../src/gajim-remote.py:230
 #, fuzzy
 msgid "Adds new contact to this account"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:236
+#: ../src/gajim-remote.py:235
 #, fuzzy
 msgid "Returns current status (the global one unless account is specified)"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:243
+#: ../src/gajim-remote.py:242
 #, fuzzy
 msgid ""
 "Returns current status message (the global one unless account is specified)"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:250
+#: ../src/gajim-remote.py:249
 #, fuzzy
 msgid "Returns number of unread messages"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:254
+# פתיחת דו־שיח 'התחלת שיחה'
+#: ../src/gajim-remote.py:253
 #, fuzzy
 msgid "Opens 'Start Chat' dialog"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:256
+# התחלת שיחה באמצעות חשבון זה
+#: ../src/gajim-remote.py:255
 #, fuzzy
 msgid "Starts chat, using this account"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:260
+# שליחת XML מותאם
+#: ../src/gajim-remote.py:259
 #, fuzzy
 msgid "Sends custom XML"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:262
+# ‏XML לשליחה
+#: ../src/gajim-remote.py:261
 #, fuzzy
 msgid "XML to send"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:263
+# xml what?
+# חשבון עבורו ישלח xml; במידה ולא צוין, xml ישלח אל כל החשבונות
+#: ../src/gajim-remote.py:262
 #, fuzzy
 msgid ""
 "Account in which the xml will be sent; if not specified, xml will be sent to "
 "all accounts"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:269
+# שינוי האווטאר
+#: ../src/gajim-remote.py:268
 #, fuzzy
 msgid "Change the avatar"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:271
+# תמונה לשימוש
+#: ../src/gajim-remote.py:270
 #, fuzzy
 msgid "Picture to use"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:272
+# חשבון עבורו יוגדר האווטאר; במידה ולא צוין, האווטאר יוגדר עבור כל החשבונות
+#: ../src/gajim-remote.py:271
 #, fuzzy
 msgid ""
 "Account in which the avatar will be set; if not specified, the avatar will "
 "be set for all accounts"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:278
+#: ../src/gajim-remote.py:277
 #, fuzzy
 msgid "Handle a xmpp:/ uri"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:280
-msgid "?CLI:uri"
-msgstr ""
-
-#: ../src/gajim-remote.py:280
+#: ../src/gajim-remote.py:279
 #, fuzzy
 msgid "URI to handle"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:281
+#: ../src/gajim-remote.py:280
 #, fuzzy
 msgid "Account in which you want to handle it"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:283
+# תוכן הודעה
+#: ../src/gajim-remote.py:282
 #, fuzzy
 msgid "Message content"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:287
+# הצטרפות אל חדר MUC
+#: ../src/gajim-remote.py:286
 #, fuzzy
 msgid "Join a MUC room"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:289
-msgid "?CLI:room"
-msgstr ""
-
-#: ../src/gajim-remote.py:289
+#: ../src/gajim-remote.py:288
 #, fuzzy
 msgid "Room JID"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:290
-msgid "?CLI:nick"
-msgstr ""
+# כינוי
+#: ../src/gajim-remote.py:289
+#, fuzzy
+msgid "nick"
+msgstr "cli"
 
-#: ../src/gajim-remote.py:290
+# כינוי לשימוש
+#: ../src/gajim-remote.py:289
 #, fuzzy
 msgid "Nickname to use"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:291
-msgid "?CLI:password"
-msgstr ""
+# מילת־מעבר
+#: ../src/gajim-remote.py:290
+#, fuzzy
+msgid "password"
+msgstr "cli"
 
-#: ../src/gajim-remote.py:291
+# מילת־מעבר בכדי להיכנס אל החדר
+#: ../src/gajim-remote.py:290
 #, fuzzy
 msgid "Password to enter the room"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:292
+# החשבון שברצונך להתחבר ממנו אל החדר
+#: ../src/gajim-remote.py:291
 #, fuzzy
 msgid "Account from which you want to enter the room"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:297
+# נא לבדוק אם Gajim מורץ כעת
+#: ../src/gajim-remote.py:296
 #, fuzzy
 msgid "Check if Gajim is running"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:301
+# הצגה או הסתרה של חלון ipython
+#: ../src/gajim-remote.py:300
 #, fuzzy
 msgid "Shows or hides the ipython window"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:328
+#: ../src/gajim-remote.py:327
 #, fuzzy
 msgid "Missing argument \"contact_jid\""
 msgstr "cli"
 
-#: ../src/gajim-remote.py:350
+#: ../src/gajim-remote.py:349
 #, fuzzy, python-format
 msgid ""
 "'%s' is not in your roster.\n"
 "Please specify account for sending the message."
 msgstr "cli"
 
-#: ../src/gajim-remote.py:353
+# אין לך אף חשבון פעיל
+#: ../src/gajim-remote.py:352
 #, fuzzy
 msgid "You have no active account"
 msgstr "cli"
 
-# נראה כי Gajim לא מורץ. משכך אין באפשרותך לעשות שימוש ביישום gajim-remote.
-#: ../src/gajim-remote.py:406
+# נראה שהיישום Gajim לא מורץ. משכך אין ביכולתך לעשות שימוש ביישום gajim-remote.
+#: ../src/gajim-remote.py:405
 #, fuzzy
 msgid "It seems Gajim is not running. So you can't use gajim-remote."
 msgstr "cli"
 
-#: ../src/gajim-remote.py:433
+#: ../src/gajim-remote.py:432
 #, fuzzy, python-format
 msgid ""
 "Usage: %(basename)s %(command)s %(arguments)s \n"
 "\t %(help)s"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:437
+#: ../src/gajim-remote.py:436
 #, fuzzy
 msgid "Arguments:"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:441
+# ‫%s לא נמצא/ת
+#: ../src/gajim-remote.py:440
 #, fuzzy, python-format
 msgid "%s not found"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:447
-#, fuzzy, python-format
+# gajim-remote
+# CLI?
+#: ../src/gajim-remote.py:446
+#, python-format
 msgid ""
-"Usage:\n"
-"  %s command [arguments]\n"
-"\n"
+"Usage: %s command [arguments]\n"
 "Command is one of:\n"
-msgstr "cli"
+msgstr ""
 
-#: ../src/gajim-remote.py:517
+#: ../src/gajim-remote.py:515
 #, fuzzy, python-format
 msgid ""
 "Too many arguments. \n"
 "Type \"%(basename)s help %(command)s\" for more info"
 msgstr "cli"
 
-#: ../src/gajim-remote.py:522
+#: ../src/gajim-remote.py:520
 #, fuzzy, python-format
 msgid ""
 "Argument \"%(arg)s\" is not specified. \n"
 "Type \"%(basename)s help %(command)s\" for more info"
 msgstr "cli"
 
-# לא ניתן uri
-#: ../src/gajim-remote.py:541
-#, fuzzy
-msgid "No uri given"
-msgstr "cli"
-
-#: ../src/gajim-remote.py:543
-#, fuzzy
-msgid "Wrong uri"
-msgstr "cli"
-
-#: ../src/gajim.py:135 ../src/history_manager.py:73
-#, fuzzy
-msgid "Usage:"
-msgstr "cli"
-
-#: ../src/gajim.py:137 ../src/history_manager.py:75
-#, fuzzy
-msgid "Options:"
-msgstr "cli"
-
-#: ../src/gajim.py:139 ../src/history_manager.py:77
-#, fuzzy
-msgid "Show this help message and exit"
-msgstr "cli"
-
-#: ../src/gajim.py:141
-#, fuzzy
-msgid "Show only critical errors"
-msgstr "cli"
-
-#: ../src/gajim.py:143
-#, fuzzy
-msgid "Print xml stanzas and other debug information"
-msgstr "cli"
-
-#: ../src/gajim.py:145
-#, fuzzy
-msgid "Use defined profile in configuration directory"
-msgstr "cli"
-
-#: ../src/gajim.py:147
-msgid "Set configuration directory"
-msgstr "cli"
-
-#: ../src/gajim.py:149
-#, fuzzy
-msgid "Configure logging system"
-msgstr "cli"
-
-#: ../src/gajim.py:211
-#, fuzzy
-msgid "Gajim needs X server to run. Quiting..."
-msgstr "cli"
-
-#: ../src/gajim.py:213
-#, fuzzy, python-format
-msgid "importing PyGTK failed: %s"
-msgstr "cli"
-
-#: ../src/gajim.py:256
-#, fuzzy
-msgid "Gajim needs PyGTK 2.22 or above"
-msgstr "cli"
-
-#: ../src/gajim.py:257
-#, fuzzy
-msgid "Gajim needs PyGTK 2.22 or above to run. Quiting..."
-msgstr "cli"
-
-#: ../src/gajim.py:259
-#, fuzzy
-msgid "Gajim needs GTK 2.22 or above"
-msgstr "cli"
-
-#: ../src/gajim.py:260
+# לא ניתן URI
+#: ../src/gajim-remote.py:539
 #, fuzzy
-msgid "Gajim needs GTK 2.22 or above to run. Quiting..."
+msgid "No uri given"
 msgstr "cli"
 
-#: ../src/gajim.py:269
+# ‏URI שגוי
+#: ../src/gajim-remote.py:541
 #, fuzzy
-msgid "Gajim needs pywin32 to run"
+msgid "Wrong uri"
 msgstr "cli"
 
-# component
-#: ../src/gajim.py:270
-#, python-format
-msgid ""
-"Please make sure that Pywin32 is installed on your system. You can get it at "
-"%s"
-msgstr "אנא ודא כי הרכיב Pywin32 מותקן במערכתך. באפשרותך להשיגו אצל %s"
-
-#: ../src/gajim.py:410
-msgid "Gajim is already running"
-msgstr "‏Gajim כבר מורץ כעת"
-
-#: ../src/gajim.py:411
-msgid ""
-"Another instance of Gajim seems to be running\n"
-"Run anyway?"
-msgstr ""
-"נראה כי תהליך אחר של Gajim מורץ כעת\n"
-"האם ברצונך להריץ בכל זאת?"
-
 # ערכאת נושא
 #: ../src/gajim_themes_window.py:59
 msgid "Theme"
@@ -9685,8 +9784,9 @@ msgstr "מוטיב"
 
 #: ../src/gajim_themes_window.py:97
 msgid "You cannot make changes to the default theme"
-msgstr "אין באפשרותך לערוך שינויים למוטיב המשתמט"
+msgstr "אין ביכולתך לערוך שינויים למוטיב המשתמט"
 
+# clean was omitted
 #: ../src/gajim_themes_window.py:98
 msgid "Please create a clean new theme with your desired name."
 msgstr "אנא צור מוטיב חדש עם השם הרצוי עליך."
@@ -9698,237 +9798,245 @@ msgstr "שם מוטיב"
 
 #: ../src/gajim_themes_window.py:186
 msgid "You cannot delete your current theme"
-msgstr "אין ביכולתך למחוק את המוטיב הנוכחי שלך"
+msgstr "אין באפשרותך למחוק את המוטיב הנוכחי שלך"
 
+# another what?
+# ראשית, נא
 #: ../src/gajim_themes_window.py:187
-msgid "Please first choose another theme as your current theme."
-msgstr "אנא בחר תחילה במוטיב אחר בתור המוטיב הנוכחי שלך."
+#, fuzzy
+msgid "Please first choose another for your current theme."
+msgstr "נא לבחור קודם ב? אחר עבור המוטיב הנוכחי שלך."
 
-# בכינוי
-#: ../src/groupchat_control.py:181 ../src/groupchat_control.py:1645
+#: ../src/groupchat_control.py:179
+#: ../src/groupchat_control.py:1569
 #, python-format
 msgid "%(nick)s is now known as %(new_nick)s"
-msgstr "%(nick)s ידוע/ה כעת בתור %(new_nick)s"
+msgstr "‫%(nick)s ידוע/ה כעת בכינוי %(new_nick)s"
 
-#: ../src/groupchat_control.py:236
+#: ../src/groupchat_control.py:234
 msgid "Sending private message failed"
 msgstr "שליחת הודעה פרטית נכשלה"
 
 # אינך עוד בשיחת קבוצה או שהמשתמש עזב
 #. in second %s code replaces with nickname
-#: ../src/groupchat_control.py:238
+#: ../src/groupchat_control.py:236
 #, python-format
 msgid "You are no longer in group chat \"%(room)s\" or \"%(nick)s\" has left."
-msgstr "אינך נוכח בשיחת קבוצה \"%(room)s\" או שהמשתמש \"%(nick)s\" עזב."
+msgstr "אינך נוכח בקבוצת השיחה \"%(room)s\" או שהמשתמש \"%(nick)s\" עזב."
 
 # להכניס/להזין
-#: ../src/groupchat_control.py:584
+#: ../src/groupchat_control.py:565
 msgid "Insert Nickname"
 msgstr "שבץ שם כינוי"
 
-#: ../src/groupchat_control.py:767
+#: ../src/groupchat_control.py:748
 msgid "Conversation with "
 msgstr "שיחה עם "
 
 # Needs to be tested
-#: ../src/groupchat_control.py:769
+#: ../src/groupchat_control.py:750
 msgid "Continued conversation"
 msgstr "שיחה נמשכת"
 
-# ‏%(jid)s הגדיר/ה את הנושא אל %(subject)s
-#: ../src/groupchat_control.py:1268
+# ‫%(jid)s הגדיר/ה את הנושא אל %(subject)s
+#: ../src/groupchat_control.py:1227
 #, python-format
 msgid "%(nick)s has set the subject to %(subject)s"
-msgstr "הנושא הוגדר על ידי %(nick)s אל %(subject)s"
+msgstr "הנושא הוגדר על ידי %(nick)s אל ‎%(subject)s"
 
+# Translated to: Any occupant to All of the occupants
+# כל נוכח מורשה/יורשה
 #. Can be a presence (see chg_contact_status in groupchat_control.py)
-#: ../src/groupchat_control.py:1286 ../src/groupchat_control.py:1587
+#: ../src/groupchat_control.py:1245
+#: ../src/groupchat_control.py:1511
 msgid "Any occupant is allowed to see your full JID"
-msgstr "כל נוכח רשאי לראות את כתובתך (JID) המלאה"
+msgstr "כל הנוכחים מורשים לראות את כתובתך (JID) המלאה"
 
-#: ../src/groupchat_control.py:1289
-msgid "Room now shows unavailable members"
-msgstr "כרגע החדר מציג חברים אשר אינם זמינים"
+# BUG: members?
+#: ../src/groupchat_control.py:1248
+msgid "Room now shows unavailable member"
+msgstr "כרגע החדר מציג חברים שאינם זמינים"
 
-#: ../src/groupchat_control.py:1291
-msgid "Room now does not show unavailable members"
-msgstr "כרגע החדר לא מציג חברים אשר אינם זמינים"
+# BUG: Room? (capital letter)
+#: ../src/groupchat_control.py:1250
+msgid "room now does not show unavailable members"
+msgstr "כרגע החדר לא מציג חברים שאינם זמינים"
 
 # שייך, מיוחס
-#: ../src/groupchat_control.py:1293
+#: ../src/groupchat_control.py:1252
 msgid "A non-privacy-related room configuration change has occurred"
-msgstr "שינוי אשר אינו קשור בפרטיות אירע בתצורת חדר"
+msgstr "ארע שינוי בתצורת חדר שאינו קשור בפרטיות"
 
 #. Can be a presence (see chg_contact_status in groupchat_control.py)
-#: ../src/groupchat_control.py:1297
+#: ../src/groupchat_control.py:1256
 msgid "Room logging is now enabled"
 msgstr "רישום פעילות חדר מאופשר כעת"
 
-#: ../src/groupchat_control.py:1299
+#: ../src/groupchat_control.py:1258
 msgid "Room logging is now disabled"
 msgstr "רישום פעילות חדר מנוטרל כעת"
 
 # This room is not anonymous
 # חדר לא אנונימי
-#: ../src/groupchat_control.py:1301
+#: ../src/groupchat_control.py:1260
 msgid "Room is now non-anonymous"
 msgstr "החדר אינו אנונימי"
 
-#: ../src/groupchat_control.py:1304
+#: ../src/groupchat_control.py:1263
 msgid "Room is now semi-anonymous"
 msgstr "החדר הינו אנונימי למחצה"
 
-#: ../src/groupchat_control.py:1307
+#: ../src/groupchat_control.py:1266
 msgid "Room is now fully-anonymous"
 msgstr "החדר הינו אנונימי לחלוטין"
 
-# in or to?
-#: ../src/groupchat_control.py:1580 ../src/groupchat_control.py:2241
-#: ../src/gui_interface.py:605 ../src/roster_window.py:3323
-#, python-format
-msgid "%(jid)s has been invited in this room"
-msgstr "%(jid)s הוזמן/ה אל חדר זה"
-
 #. Can be a message (see handle_event_gc_config_change in
 #. gajim.py)
-#: ../src/groupchat_control.py:1592
+#: ../src/groupchat_control.py:1516
 msgid "Room logging is enabled"
 msgstr "רישום של פעילות חדר הינו מאופשר"
 
-#: ../src/groupchat_control.py:1594
+#: ../src/groupchat_control.py:1518
 msgid "A new room has been created"
 msgstr "חדר חדש נוצר"
 
 # BUG: room nick
 # הקצה
-#: ../src/groupchat_control.py:1597
+#: ../src/groupchat_control.py:1521
 msgid "The server has assigned or modified your roomnick"
 msgstr "השרת הסב או שינה את כינוי החדר שלך"
 
 # סולק
 #. do not print 'kicked by None'
-#: ../src/groupchat_control.py:1603
+#: ../src/groupchat_control.py:1527
 #, python-format
 msgid "%(nick)s has been kicked: %(reason)s"
-msgstr "%(nick)s נבעט/ה: %(reason)s"
+msgstr "‫%(nick)s נבעט/ה: %(reason)s"
 
 # סולק
-#: ../src/groupchat_control.py:1606
+#: ../src/groupchat_control.py:1530
 #, python-format
 msgid "%(nick)s has been kicked by %(who)s: %(reason)s"
-msgstr "%(nick)s נבעט/ה על ידי %(who)s: %(reason)s"
+msgstr "‫%(nick)s נבעט/ה על ידי %(who)s: ‫%(reason)s"
 
 #. do not print 'banned by None'
-#: ../src/groupchat_control.py:1615
+#: ../src/groupchat_control.py:1539
 #, python-format
 msgid "%(nick)s has been banned: %(reason)s"
-msgstr "%(nick)s נאסר/ה: %(reason)s"
+msgstr "‫%(nick)s נחסם/ה: %(reason)s"
 
-#: ../src/groupchat_control.py:1618
+#: ../src/groupchat_control.py:1542
 #, python-format
 msgid "%(nick)s has been banned by %(who)s: %(reason)s"
-msgstr "%(nick)s נאסר/ה על ידי %(who)s: %(reason)s"
+msgstr "‫%(nick)s נחסם/ה על ידי %(who)s: ‫%(reason)s"
 
-# את/ה ידוע/ה כעת בתור
-#: ../src/groupchat_control.py:1629 ../src/groupchat_control.py:1745
+#: ../src/groupchat_control.py:1553
+#: ../src/groupchat_control.py:1657
 #, python-format
 msgid "You are now known as %s"
-msgstr "הכינוי החדש שלך הוא %s"
+msgstr "כינוייך החדש הוא %s"
 
-# מן
-#: ../src/groupchat_control.py:1699 ../src/groupchat_control.py:1704
-#: ../src/groupchat_control.py:1710
+#: ../src/groupchat_control.py:1611
+#: ../src/groupchat_control.py:1616
+#: ../src/groupchat_control.py:1622
 #, python-format
 msgid "%(nick)s has been removed from the room (%(reason)s)"
-msgstr "%(nick)s הוסר/ה מתוך החדר (%(reason)s)"
+msgstr "‫%(nick)s הוסר/ה מן החדר (%(reason)s)"
 
-#: ../src/groupchat_control.py:1701
+#: ../src/groupchat_control.py:1613
 msgid "affiliation changed"
-msgstr "שיוך שונה"
+msgstr "השיוך שונה"
 
-#: ../src/groupchat_control.py:1706
+#: ../src/groupchat_control.py:1618
 msgid "room configuration changed to members-only"
 msgstr "תצורת חדר שונתה אל חברים-בלבד"
 
 # הדממת, דימום
-#: ../src/groupchat_control.py:1712
+#: ../src/groupchat_control.py:1624
 msgid "system shutdown"
 msgstr "סגירת מערכת"
 
 # שיוכה/ו של
 # נקבע
-#: ../src/groupchat_control.py:1795
+#: ../src/groupchat_control.py:1707
 #, python-format
 msgid "** Affiliation of %(nick)s has been set to %(affiliation)s by %(actor)s"
 msgstr "** השיוך של %(nick)s הוגדר אל %(affiliation)s על ידי %(actor)s"
 
-#: ../src/groupchat_control.py:1799
+#: ../src/groupchat_control.py:1711
 #, python-format
 msgid "** Affiliation of %(nick)s has been set to %(affiliation)s"
 msgstr "** השיוך של %(nick)s הוגדר אל %(affiliation)s"
 
 # תפקידה/ו של
-#: ../src/groupchat_control.py:1814
+#: ../src/groupchat_control.py:1726
 #, python-format
 msgid "** Role of %(nick)s has been set to %(role)s by %(actor)s"
 msgstr "** התפקיד של %(nick)s הוגדר אל %(role)s על ידי %(actor)s"
 
-#: ../src/groupchat_control.py:1818
+#: ../src/groupchat_control.py:1730
 #, python-format
 msgid "** Role of %(nick)s has been set to %(role)s"
 msgstr "** התפקיד של %(nick)s הוגדר אל %(role)s"
 
-#: ../src/groupchat_control.py:1848
+#: ../src/groupchat_control.py:1760
 #, python-format
 msgid "%s has left"
-msgstr "%s עזב/ה"
+msgstr "‫%s עזב/ה את החדר"
 
-# הצטרף
-#: ../src/groupchat_control.py:1853
+# הצטרף אל שיחת הקבוצה
+#: ../src/groupchat_control.py:1765
 #, python-format
 msgid "%s has joined the group chat"
-msgstr "%s נכנס/ה אל שיחת הקבוצה"
+msgstr "‫%s נכנס/ה אל החדר"
 
-#: ../src/groupchat_control.py:2124
+#: ../src/groupchat_control.py:2020
 #, python-format
 msgid "Are you sure you want to leave group chat \"%s\"?"
-msgstr "האם אתה בטוח כי ברצונך לעזוב את שיחת הקבוצה \"%s\"?"
+msgstr "האם אכן ברצונך לעזוב את שיחת הקבוצה \"%s\"?"
 
 # אם תבחר לסגור
-#: ../src/groupchat_control.py:2126
-msgid ""
-"If you close this window, you will be disconnected from this group chat."
-msgstr "בסוגרך את חלון זה, אתה תנותק מתוך שיחת קבוצה זו."
+#: ../src/groupchat_control.py:2022
+msgid "If you close this window, you will be disconnected from this group chat."
+msgstr "בסוגרך את חלון זה, אתה תנותק מן שיחת קבוצה זו."
+
+#: ../src/groupchat_control.py:2026
+#: ../src/gui_interface.py:704
+#: ../src/gui_interface.py:1411
+#: ../src/gui_interface.py:1451
+#: ../src/gui_interface.py:1492
+#: ../src/message_window.py:222
+#: ../src/roster_window.py:3064
+#: ../src/roster_window.py:3799
+#: ../src/roster_window.py:4612
+msgid "_Do not ask me again"
+msgstr "_נא לא לשאול אותי שוב"
 
-#: ../src/groupchat_control.py:2165
+#: ../src/groupchat_control.py:2060
 msgid "Changing Subject"
 msgstr "שינוי נושא"
 
-#: ../src/groupchat_control.py:2166
+#: ../src/groupchat_control.py:2061
 msgid "Please specify the new subject:"
-msgstr "אנא ציין את הנושא החדש:"
+msgstr "נא לציין את הנושא החדש:"
 
-#: ../src/groupchat_control.py:2173
+#: ../src/groupchat_control.py:2068
 msgid "Changing Nickname"
 msgstr "שינוי שם כינוי"
 
-#: ../src/groupchat_control.py:2174
+#: ../src/groupchat_control.py:2069
 msgid "Please specify the new nickname you want to use:"
-msgstr "אנא ציין את שם הכינוי החדש אשר ברצונך לעשות בו שימוש:"
-
-#: ../src/groupchat_control.py:2199
-msgid "The group chat Jabber ID has not allowed characters."
-msgstr "מזהה Jabber של שיחת קבוצה מכילה תווים אסורים."
+msgstr "נא לציין את שם הכינוי החדש שברצונך לעשות בו שימוש:"
 
 # Destroying is "at this moment".  It should be Destroy without ing
 #. Ask for a reason
-#: ../src/groupchat_control.py:2205
+#: ../src/groupchat_control.py:2100
 #, python-format
 msgid "Destroying %s"
 msgstr "החרבת ‫%s"
 
 # בחרת להחריב באופן מוחלט את חדר זה
-#: ../src/groupchat_control.py:2206
+#: ../src/groupchat_control.py:2101
 msgid ""
 "You are going to definitively destroy this room.\n"
 "You may specify a reason below:"
@@ -9937,25 +10045,34 @@ msgstr ""
 "באפשרותך לציין סיבה למטה:"
 
 # מקום מפגש חלופי
-#: ../src/groupchat_control.py:2208
+#: ../src/groupchat_control.py:2103
 msgid "You may also enter an alternate venue:"
 msgstr "באפשרותך להזין זירה אלטרנטיבית:"
 
+# in or to?
+#: ../src/groupchat_control.py:2135
+#: ../src/gui_interface.py:604
+#: ../src/roster_window.py:3390
+#, python-format
+msgid "%(jid)s has been invited in this room"
+msgstr "‫%(jid)s הוזמנה בחדר זה"
+
 #. ask for reason
-#: ../src/groupchat_control.py:2408
+#: ../src/groupchat_control.py:2300
 #, python-format
 msgid "Kicking %s"
 msgstr "בעיטת ‫%s"
 
-#: ../src/groupchat_control.py:2409 ../src/groupchat_control.py:2743
+#: ../src/groupchat_control.py:2301
+#: ../src/groupchat_control.py:2633
 msgid "You may specify a reason below:"
 msgstr "באפשרותך לציין סיבה למטה:"
 
 #. ask for reason
-#: ../src/groupchat_control.py:2742
+#: ../src/groupchat_control.py:2632
 #, python-format
 msgid "Banning %s"
-msgstr "אסירת ‫%s"
+msgstr "חסימת ‫%s"
 
 #: ../src/gtkexcepthook.py:46
 msgid "A programming error has been detected"
@@ -9964,272 +10081,272 @@ msgstr "אותרה שגיאת תכנות"
 # אבל
 # ככל הנראה שגיאה זו אינה חמורה, אך בכל זאת יש צורך לדווחה למפתחים.
 #: ../src/gtkexcepthook.py:47
-msgid ""
-"It probably is not fatal, but should be reported to the developers "
-"nonetheless."
-msgstr ""
-"שגיאה זו אינה חמורה ככל הנראה, אך בכל זאת קיים הכרח לדווח עליה למפתחים."
+msgid "It probably is not fatal, but should be reported to the developers nonetheless."
+msgstr "שגיאה זו אינה חמורה ככל הנראה, אך בכל זאת קיים הצורך לדווחה אל המפתחים."
 
 #: ../src/gtkexcepthook.py:54
 msgid "_Report Bug"
-msgstr "_דווחו על בעיה"
+msgstr "_דיווח על בעיה"
 
 #: ../src/gtkexcepthook.py:76
 msgid "Details"
 msgstr "פרטים"
 
-#: ../src/gtkgui_helpers.py:349
+#: ../src/gtkgui_helpers.py:348
 msgid "Error reading file:"
 msgstr "שגיאה בקריאת הקובץ:"
 
-#: ../src/gtkgui_helpers.py:352
+#: ../src/gtkgui_helpers.py:351
 msgid "Error parsing file:"
 msgstr "שגיאה בניתוח הקובץ:"
 
 #. do not traceback (could be a permission problem)
 #. we talk about a file here
-#: ../src/gtkgui_helpers.py:393
+#: ../src/gtkgui_helpers.py:392
 #, python-format
 msgid "Could not write to %s. Session Management support will not work"
-msgstr "לא היתה אפשרות לכתוב אל %s. תמיכה עבור ניהול סשן לא תעבוד"
+msgstr "לא ניתן לכתוב אל %s. תמיכה עבור ניהול סשן לא תעבוד"
 
-# ‏Gajim אינו הלקוח המשתמט עבור Jabber
+# הלקוח המשתמט
 #. xmpp: is currently handled by another program, so ask the user
-#: ../src/gtkgui_helpers.py:767
+#: ../src/gtkgui_helpers.py:766
 msgid "Gajim is not the default Jabber client"
-msgstr "‏Gajim אינו לקוח Jabber ברירת המחדל"
+msgstr "‫Gajim אינו לקוח ברירת המחדל עבור Jabber"
 
-#: ../src/gtkgui_helpers.py:768
+#: ../src/gtkgui_helpers.py:767
 msgid "Would you like to make Gajim the default Jabber client?"
 msgstr "האם ברצונך להפוך את Gajim ללקוח Jabber ברירת המחדל?"
 
-#: ../src/gtkgui_helpers.py:769
+#: ../src/gtkgui_helpers.py:768
 msgid "Always check to see if Gajim is the default Jabber client on startup"
 msgstr "בדוק תמיד אם Gajim הינו לקוח Jabber ברירת המחדל בעת הפעלה"
 
-#: ../src/gtkgui_helpers.py:836
+#: ../src/gtkgui_helpers.py:835
 msgid "Extension not supported"
 msgstr "הרחבה לא נתמכת"
 
-#: ../src/gtkgui_helpers.py:837
+# Needs to be tested
+# שמירה בשם אחר
+#: ../src/gtkgui_helpers.py:836
 #, python-format
 msgid "Image cannot be saved in %(type)s format. Save as %(new_filename)s?"
-msgstr "אין אפשרות לשמור תמונה בפורמט %(type)s. לשמור בתור %(new_filename)s?"
+msgstr "לא ניתן לשמור תמונה בתסדיר %(type)s. שמירה בשם %(new_filename)s?"
 
-# בתור
-#: ../src/gtkgui_helpers.py:873
+#: ../src/gtkgui_helpers.py:872
 msgid "Save Image as..."
 msgstr "שמירת תמונה בשם..."
 
 #. we are banned
 #. group chat does not exist
-#: ../src/gui_interface.py:134 ../src/gui_interface.py:298
-#: ../src/gui_interface.py:307 ../src/gui_interface.py:313
-#: ../src/gui_interface.py:316 ../src/gui_interface.py:319
-#: ../src/gui_interface.py:324
+#: ../src/gui_interface.py:133
+#: ../src/gui_interface.py:297
+#: ../src/gui_interface.py:306
+#: ../src/gui_interface.py:312
+#: ../src/gui_interface.py:315
+#: ../src/gui_interface.py:318
+#: ../src/gui_interface.py:323
 msgid "Unable to join group chat"
-msgstr "אין אפשרות להצטרף אל שיחת קבוצה"
+msgstr "לא ניתן להצטרף אל שיחת קבוצה"
 
-#: ../src/gui_interface.py:135
+#: ../src/gui_interface.py:134
 #, python-format
 msgid ""
 "Your desired nickname in group chat %s is in use or registered by another "
 "occupant.\n"
 "Please specify another nickname below:"
 msgstr ""
-"שם הכינוי אשר מבוקש על ידך בתוך שיחות הקבוצה %s מצוי בשימוש או רשום בידי "
-"נוכח אחר.\n"
-"אנא ציין שם כינוי אחר למטה:"
+"שם כינוייך המבוקש בשיחת הקבוצה %s הינו בשימוש או רשום בידי נוכח אחר.\n"
+"נא לציין שם כינוי אחר למטה:"
 
-#: ../src/gui_interface.py:138
+#: ../src/gui_interface.py:137
 msgid "Always use this nickname when there is a conflict"
 msgstr "השתמש תמיד בשם כינוי זה כאשר קיימת התנגשות"
 
-#: ../src/gui_interface.py:155
+#: ../src/gui_interface.py:154
 msgid "Do you accept this request?"
 msgstr "האם לקבל את בקשה זו?"
 
-#: ../src/gui_interface.py:157
+#: ../src/gui_interface.py:156
 #, python-format
 msgid "Do you accept this request on account %s?"
-msgstr "האם לקבל את בקשה זו בחשבון %s?"
+msgstr "האם לקבל את בקשה זו בחשבון ‫%s?"
 
 # Needs to be tested
 # זהות
 # אישור
-#: ../src/gui_interface.py:160
+#: ../src/gui_interface.py:159
 #, python-format
 msgid "HTTP (%(method)s) Authorization for %(url)s (id: %(id)s)"
-msgstr "הרשאת HTTP (%(method)s) עבור %(url)s (מזהה: %(id)s)"
+msgstr "הרשאת HTTP (%(method)s) עבור ‫%(url)s ‫(id: ‫%(id)s)"
 
-#: ../src/gui_interface.py:203 ../src/notify.py:282
+#: ../src/gui_interface.py:202
+#: ../src/notify.py:282
 msgid "Connection Failed"
-msgstr "התחברות נכשלה"
+msgstr "ההתחברות נכשלה"
 
-#: ../src/gui_interface.py:287
+# keep מילת־מעבר
+# על מנת
+# להקלידה
+# להזין אותה
+#: ../src/gui_interface.py:286
 #, python-format
 msgid "A Password is required to join the room %s. Please type it."
-msgstr "נדרשת מילת מעבר כדי להצטרף אל החדר %s. אנא הקלד אותה."
+msgstr "נדרשת מילת־מעבר כדי להצטרף אל החדר %s. נא להקלידה."
 
-# מוצתה
-#: ../src/gui_interface.py:299
+# כמות משתמש מרבית עבור ‫<b>%s</b> הושגה
+#: ../src/gui_interface.py:298
 #, python-format
 msgid "Maximum number of users for <b>%s</b> has been reached"
-msgstr "כמות משתמשים מרבית עבור <b>%s</b> הושגה"
+msgstr "הושגה כמות משתמש מרבית עבור ‫<b>%s</b>"
 
 # בכתובת
-#: ../src/gui_interface.py:308
+#: ../src/gui_interface.py:307
 #, python-format
 msgid "You are banned from group chat <b>%s</b>."
-msgstr "נאסרת מתוך שיחת קבוצה בכתובת <b>%s</b>."
+msgstr "נחסמת מן שיחת קבוצה אצל ‫<b>%s</b>."
 
-#: ../src/gui_interface.py:314
+#: ../src/gui_interface.py:313
 #, python-format
 msgid "Group chat <b>%s</b> does not exist."
 msgstr "שיחת קבוצה <b>%s</b> לא קיימת."
 
-#: ../src/gui_interface.py:317
+#: ../src/gui_interface.py:316
 msgid "Group chat creation is restricted."
 msgstr "יצירת שיחות קבוצה הינה מוגבלת."
 
-#: ../src/gui_interface.py:320
+#: ../src/gui_interface.py:319
 #, python-format
 msgid "Your registered nickname must be used in group chat <b>%s</b>."
-msgstr "שם הכינוי הרשום שלך מוכרח להיות בשימוש בתוך שיחת קבוצה <b>%s</b>."
+msgstr "שם כינוייך הרשום מוכרח להיות בשימוש בשיחת קבוצה <b>%s</b>."
 
-#: ../src/gui_interface.py:325
+#: ../src/gui_interface.py:324
 #, python-format
 msgid "You are not in the members list in groupchat %s."
-msgstr "אינך ברשימת החברים בתוך שיחות קבוצה %s."
+msgstr "אינך ברשימת החברים בשיחת קבוצה ‫%s."
 
-#: ../src/gui_interface.py:418 ../src/gui_interface.py:422
+#: ../src/gui_interface.py:417
+#: ../src/gui_interface.py:421
 #, python-format
 msgid "Error %(code)s: %(msg)s"
-msgstr "שגיאה %(code)s: ‏%(msg)s"
+msgstr "שגיאה ‫%(code)s: ‫%(msg)s"
 
-#: ../src/gui_interface.py:474 ../src/notify.py:284
+#: ../src/gui_interface.py:473
+#: ../src/notify.py:284
 msgid "Subscription request"
 msgstr "בקשת הרשמה"
 
-#: ../src/gui_interface.py:499
+#: ../src/gui_interface.py:498
 msgid "Authorization accepted"
 msgstr "התקבלה הרשאה"
 
-#: ../src/gui_interface.py:500
+#: ../src/gui_interface.py:499
 #, python-format
 msgid "The contact \"%s\" has authorized you to see his or her status."
 msgstr "הוענקה לך הרשאה מאת \"%s\" לראות את מצב החיבור שלו או שלה."
 
-#: ../src/gui_interface.py:508
+#: ../src/gui_interface.py:507
 #, python-format
 msgid "Contact \"%s\" removed subscription from you"
 msgstr "איש קשר \"%s\" הסיר הרשמה ממך"
 
-#: ../src/gui_interface.py:509
+#: ../src/gui_interface.py:508
 msgid ""
 "You will always see him or her as offline.\n"
 "Do you want to remove him or her from your contact list?"
 msgstr ""
-"איש קשר זה תמיד ייראה עבורך במצב לא מקוון.\n"
-"האם ברצונך להסיר אותו או אותה מתוך רשימת הקשר שלך?"
+"איש קשר זה תמיד יראה עבורך במצב לא מקוון.\n"
+"האם ברצונך להסירו או להסירה מן רשימת הקשר שלך?"
 
-#: ../src/gui_interface.py:530 ../src/notify.py:286
+#: ../src/gui_interface.py:529
+#: ../src/notify.py:286
 msgid "Unsubscribed"
 msgstr "לא רשום"
 
-#: ../src/gui_interface.py:541
+#: ../src/gui_interface.py:540
 #, python-format
 msgid "Contact with \"%s\" cannot be established"
 msgstr "יצירת קשר עם \"%s\" לא היתה ניתנת לביסוס"
 
-#: ../src/gui_interface.py:625
+# דחתה את ההזמנה
+#: ../src/gui_interface.py:624
 #, python-format
 msgid "%(jid)s declined the invitation: %(reason)s"
-msgstr "‏%(jid)s סרב/ה את ההזמנה: %(reason)s"
+msgstr "‫%(jid)s סרב/ה להזמנה: %(reason)s"
 
-#: ../src/gui_interface.py:629
+#: ../src/gui_interface.py:628
 #, python-format
 msgid "%(jid)s declined the invitation"
-msgstr "‏%(jid)s סרב/ה להזמנה"
+msgstr "‫%(jid)s סרב/ה להזמנה"
 
-#: ../src/gui_interface.py:658
-msgid ""
-"You configured Gajim to use OpenPGP agent, but there is no OpenPGP agent "
-"running or it returned a wrong passphrase.\n"
-msgstr ""
-"הגדרת את Gajim לעשות שימוש בסוכן OpenPGP, אך אין כעת סוכן OpenPGP אשר מופעל "
-"או שזה החזיר מימרת-סיסמה שגויה.\n"
+#: ../src/gui_interface.py:657
+msgid "You configured Gajim to use GPG agent, but there is no GPG agent running or it returned a wrong passphrase.\n"
+msgstr "הגדרת את Gajim לעשות שימוש בסוכן GPG, אך אין כעת סוכן GPG מופעל או שהוא החזיר מימרת-סיסמה שגויה.\n"
 
-#: ../src/gui_interface.py:661 ../src/gui_interface.py:669
+# Would it be ok to write: an OpenPGP
+#: ../src/gui_interface.py:659
+#: ../src/gui_interface.py:667
 msgid "You are currently connected without your OpenPGP key."
-msgstr "התחברותך בוצעה ללא מפתח OpenPGP."
+msgstr "התחברותך מבוצעת ללא מפתח OpenPGP."
 
-#: ../src/gui_interface.py:663
+#: ../src/gui_interface.py:661
 msgid "Your passphrase is incorrect"
-msgstr "מימרת סיסמתך הינה שגויה"
+msgstr "מימרת־סיסמתך הינה שגויה"
 
-#: ../src/gui_interface.py:668
-msgid "OpenPGP Passphrase Incorrect"
-msgstr "מימרת סיסמה OpenPGP שגויה"
+#: ../src/gui_interface.py:666
+msgid "OpenGPG Passphrase Incorrect"
+msgstr "מימרת־סיסמה OpenGPG שגויה"
 
-#: ../src/gui_interface.py:681
+# מימרת־סיסמה של תעודת
+#: ../src/gui_interface.py:679
 msgid "Certificate Passphrase Required"
-msgstr "נדרשת מימרת סיסמה של תעודת"
+msgstr "נדרשת מימרת־סיסמת תעודת"
 
-#: ../src/gui_interface.py:682
+#: ../src/gui_interface.py:680
 #, python-format
 msgid "Enter the passphrase for the certificate for account %s"
-msgstr "הזן מימרת סיסמה עבור התעודה עבור חשבון %s"
+msgstr "נא להזין מימרת־סיסמה עבור התעודה עבור חשבון %s"
 
-#: ../src/gui_interface.py:704
-msgid "OpenPGP key not trusted"
-msgstr "מפתח OpenPGP לא מהימן "
+#: ../src/gui_interface.py:702
+msgid "GPG key not trusted"
+msgstr "מפתח GPG לא מהימן "
 
 # Changed really with still
 # Sure = בטוח
 # Really = באמת
 # Still = עדיין
-#: ../src/gui_interface.py:704
-msgid ""
-"The OpenPGP key used to encrypt this chat is not trusted. Do you really want "
-"to encrypt this message?"
-msgstr ""
-"מפתח OpenPGP המשמש להצפנת שיחה זו אינו מהימן. האם באמת יש ברצונך להצפין את "
-"הודעה זו?"
+#: ../src/gui_interface.py:702
+msgid "The GPG key used to encrypt this chat is not trusted. Do you really want to encrypt this message?"
+msgstr "מפתח GPG המשמש להצפנת שיחה זו אינו מהימן. האם עדיין יש ברצונך להצפין הודעה זו?"
 
-#: ../src/gui_interface.py:717
-msgid ""
-"Gnome Keyring is installed but not correctly started (environment variable "
-"probably not correctly set)"
-msgstr ""
-"היישום Gnome Keyring הינו מותקן אך לא הופעל כראוי (כנראה משתנה סביבה לא "
-"הוגדר כראוי)"
+#: ../src/gui_interface.py:715
+msgid "Gnome Keyring is installed but not correctly started (environment variable probably not correctly set)"
+msgstr "היישום Gnome Keyring הינו מותקן אך לא הופעל כראוי (כנראה משתנה סביבה לא הוגדר כראוי)"
 
 # BUG: refreshed
 # אסימון
-#: ../src/gui_interface.py:755
-msgid ""
-"Please copy / paste the refresh token from the website that has just been "
-"opened."
-msgstr "אנא העתק / הדבק את האות הרענן מתוך אתר הרשת אשר זה עתה נפתח."
+#: ../src/gui_interface.py:753
+msgid "Please copy / paste the refresh token from the website that has just been opened."
+msgstr "נא להעתיק / להדביק את האות הרענן מן אתר הרשת שזה עתה נפתח."
 
-#: ../src/gui_interface.py:758
+# תעודות
+#: ../src/gui_interface.py:756
 msgid "Oauth2 Credentials"
 msgstr "אישורי Oauth2"
 
-#: ../src/gui_interface.py:856
+# עבור
+#: ../src/gui_interface.py:846
 #, python-format
 msgid "New mail on %(gmail_mail_address)s"
 msgstr "דוא״ל חדש אצל %(gmail_mail_address)s"
 
-#: ../src/gui_interface.py:858
+#: ../src/gui_interface.py:848
 #, python-format
 msgid "You have %d new mail conversation"
 msgid_plural "You have %d new mail conversations"
 msgstr[0] "יש לך שיחת דואר חדשה %d"
 msgstr[1] "יש לך %d שיחות דואר חדשות"
 
-#: ../src/gui_interface.py:871
+#: ../src/gui_interface.py:861
 #, python-format
 msgid ""
 "\n"
@@ -10244,109 +10361,105 @@ msgstr ""
 "נושא: %(subject)s\n"
 "%(snippet)s"
 
-#: ../src/gui_interface.py:941
+# אליך
+#: ../src/gui_interface.py:931
 #, python-format
 msgid "%s wants to send you a file."
-msgstr "‏%s רוצה לשלוח לך קובץ."
+msgstr "‫%s רוצה לשלוח לך קובץ."
 
-#: ../src/gui_interface.py:1038
+#: ../src/gui_interface.py:1028
 msgid "File Transfer Failed"
 msgstr "העברת קובץ נכשלה"
 
-#: ../src/gui_interface.py:1059
+#: ../src/gui_interface.py:1049
 #, python-format
 msgid "You successfully received %(filename)s from %(name)s."
 msgstr "קיבלת בהצלחה את %(filename)s מן %(name)s."
 
-#: ../src/gui_interface.py:1063
+#: ../src/gui_interface.py:1053
 #, python-format
 msgid "File transfer of %(filename)s from %(name)s stopped."
 msgstr "העברת קובץ %(filename)s מן %(name)s נעצרה."
 
 #. ft hash error
-#: ../src/gui_interface.py:1067
+#: ../src/gui_interface.py:1057
 #, python-format
 msgid "File transfer of %(filename)s from %(name)s failed."
 msgstr "העברת קובץ %(filename)s מן %(name)s נכשלה."
 
-#: ../src/gui_interface.py:1080
+#: ../src/gui_interface.py:1070
 #, python-format
 msgid "You successfully sent %(filename)s to %(name)s."
 msgstr "שלחת בהצלחה את %(filename)s אל %(name)s."
 
-#: ../src/gui_interface.py:1084
+#: ../src/gui_interface.py:1074
 #, python-format
 msgid "File transfer of %(filename)s to %(name)s stopped."
 msgstr "העברת קובץ %(filename)s אל %(name)s נעצרה."
 
 #. ft hash error
-#: ../src/gui_interface.py:1088
+#: ../src/gui_interface.py:1078
 #, python-format
 msgid "File transfer of %(filename)s to %(name)s failed."
 msgstr "העברת הקובץ %(filename)s אל %(name)s נכשלה."
 
-#: ../src/gui_interface.py:1163
+#: ../src/gui_interface.py:1153
 msgid "Unable to decrypt message"
-msgstr "אין אפשרות לפענח את ההודעה"
+msgstr "לא ניתן לפענח את ההודעה"
 
 # התנגשויות, ניגודים, קונפליקט
-#: ../src/gui_interface.py:1175
+#: ../src/gui_interface.py:1165
 msgid "Username Conflict"
 msgstr "התנגשות שם משתמש"
 
-#: ../src/gui_interface.py:1176
+#: ../src/gui_interface.py:1166
 msgid "Please type a new username for your local account"
 msgstr "אנא הקלד שם משתמש חדש עבור חשבונך המקומי"
 
-#: ../src/gui_interface.py:1191
+#: ../src/gui_interface.py:1181
 msgid "Resource Conflict"
 msgstr "התנגשות משאב"
 
-#: ../src/gui_interface.py:1192
-msgid ""
-"You are already connected to this account with the same resource. Please "
-"type a new one"
-msgstr "הינך כבר מחובר אל חשבון זה באמצעות אותו משאב. אנא הקלד אחד חדש."
+#: ../src/gui_interface.py:1182
+msgid "You are already connected to this account with the same resource. Please type a new one"
+msgstr "הינך כבר מחובר אל חשבון זה באמצעות אותו משאב. נא להקליד משאב חדש."
 
 #. TODO: we should use another pixmap ;-)
-#: ../src/gui_interface.py:1247
+#: ../src/gui_interface.py:1237
 #, python-format
 msgid "%s wants to start a voice chat."
-msgstr "‏%s רוצה להתחיל שיחה קולית."
+msgstr "‫%s רוצה להתחיל שיחה קולית."
 
-#: ../src/gui_interface.py:1250
+# שיחת שמע
+#: ../src/gui_interface.py:1240
 msgid "Voice Chat Request"
 msgstr "בקשה לשיחה קולית"
 
-#: ../src/gui_interface.py:1337
+#: ../src/gui_interface.py:1327
 msgid "Error verifying SSL certificate"
 msgstr "שגיאה באימות תעודת SSL"
 
-#: ../src/gui_interface.py:1338
+#: ../src/gui_interface.py:1328
 #, python-format
 msgid ""
 "There was an error verifying the SSL certificate of your jabber server: "
 "%(error)s\n"
 "Do you still want to connect to this server?"
 msgstr ""
-"אירעה שגיאה באימות תעודת SSL של שרת ה־Jabber שלך: %(error)s\n"
+"ארעה שגיאה באימות תעודת SSL של שרת ה־Jabber שלך: %(error)s\n"
 "האם עדיין יש ברצונך להתחבר אל שרת זה?"
 
-#: ../src/gui_interface.py:1347
+# התעלמות
+#: ../src/gui_interface.py:1337
 msgid "Ignore this error for this certificate."
 msgstr "התעלם משגיאה זו עבור תעודה זו."
 
-#: ../src/gui_interface.py:1355
-#, python-format
-msgid "SSL Certificate Verification for %s"
-msgstr "אימות תעודת SSL עבור %s"
-
-#: ../src/gui_interface.py:1374
+#: ../src/gui_interface.py:1362
 msgid "SSL certificate error"
 msgstr "שגיאת תעודת SSL"
 
 # ישנה
-#: ../src/gui_interface.py:1375
+#: ../src/gui_interface.py:1363
 #, python-format
 msgid ""
 "It seems the SSL certificate of account %(account)s has changed or your "
@@ -10356,27 +10469,54 @@ msgid ""
 "\n"
 "Do you still want to connect and update the fingerprint of the certificate?"
 msgstr ""
-"נראה שתעודת SSL של חשבון %(account)s שונתה או שהחיבור שלך נפרץ כעת.\n"
+"נראה שתעודת SSL של חשבון %(account)s שונתה או שחיבורך נפרץ כעת.\n"
 "טביעת אצבע קודמת: %(old)s\n"
 "טביעת אצבע חדשה: %(new)s\n"
 "\n"
 "האם עדיין יש ברצונך להתחבר ולעדכן את טביעת האצבע של התעודה?"
 
-#: ../src/gui_interface.py:1447
-msgid ""
-"You are about to send your password on an insecure connection. You should "
-"install PyOpenSSL to prevent that. Are you sure you want to do that?"
-msgstr ""
-"הינך על סף שליחת סיסמתך על פני חיבור לא מאובטח. עליך להתקין PyOpenSSL בכדי "
-"למנוע זאת. האם אתה בטוח כי ברצונך להתחבר?"
+#: ../src/gui_interface.py:1402
+#: ../src/gui_interface.py:1446
+#: ../src/gui_interface.py:1488
+msgid "Insecure connection"
+msgstr "חיבור לא מאובטח"
 
-#: ../src/gui_interface.py:1489
+# BUG: to the server > to a serverr > to server
+# Added: will be exchanged with the other end will not be encrypted
+# הינך על סף התחברות אל שרת עם חיבור לא מאובטח. משמעות הדבר היא שכל השיחות שלך שיוחלפו עם הקצה השני לא יהיו מוצפנות. האם עדיין ברצונך להתחבר?
+# discouraged:
+#  > deprived > לקוי בחסר
+#  > dissuade > dissuade from > להניא מ-
+#: ../src/gui_interface.py:1403
+#, python-format
 msgid ""
-"You are about to send your password unencrypted on an insecure connection. "
+"You are about to connect to the account %(account)s (%(server)s) with an insecure connection. This means all your conversations will be exchanged unencrypted. This type of connection is really discouraged.\n"
 "Are you sure you want to do that?"
 msgstr ""
-"הינך על סף שליחת סיסמתך באופן לא מוצפן על פני חיבור לא מאובטח. האם אתה בטוח "
-"כי ברצונך לעשות זאת?"
+"הינך על סף התחברות אל החשבון ‫%(account)s ‫(%(server)s) באמצעות חיבור לא מאובטח. משמעות הדבר היא שכל השיחות שיוחלפו עם הקצה השני לא יהיו מוצפנות. רצוי להימנע מחיבורים מטיפוס זה.\n"
+"האם באמת שברצונך להתחבר?"
+
+# The word 'Really' was omitted
+# הנני רוצה
+# באופן לא בטוח
+# בצורה לא בטוחה
+#: ../src/gui_interface.py:1409
+#: ../src/gui_interface.py:1450
+#: ../src/gui_interface.py:1491
+msgid "Yes, I really want to connect insecurely"
+msgstr "כן, ברצוני להתחבר בשיטה לא בטוחה"
+
+#: ../src/gui_interface.py:1410
+msgid "Gajim will NOT connect unless you check this box"
+msgstr "‫Gajim לא יתחבר אלא אם כן תיבה זו תסומן"
+
+#: ../src/gui_interface.py:1447
+msgid "You are about to send your password on an insecure connection. You should install PyOpenSSL to prevent that. Are you sure you want to do that?"
+msgstr "הינך על סף שליחת סיסמתך על פני חיבור לא מאובטח. עליך להתקין PyOpenSSL בכדי למנוע זאת. האם עדיין ברצונך להתחבר?"
+
+#: ../src/gui_interface.py:1489
+msgid "You are about to send your password unencrypted on an insecure connection. Are you sure you want to do that?"
+msgstr "הינך על סף שליחת סיסמתך באופן לא מוצפן על פני חיבור לא מאובטח. האם באמת שברצונך לעשות זאת?"
 
 #. theme doesn't exist, disable emoticons
 #: ../src/gui_interface.py:1995 ../src/gui_interface.py:2018
@@ -10384,107 +10524,95 @@ msgid "Emoticons disabled"
 msgstr "רגשונים נוטרלו"
 
 #: ../src/gui_interface.py:1996
-msgid ""
-"Your configured emoticons theme has not been found, so emoticons have been "
-"disabled."
-msgstr "מוטיב הרגשונים אשר הגדרת לא נמצא, ומשכך רגשונים נוטרלו."
+msgid "Your configured emoticons theme has not been found, so emoticons have been disabled."
+msgstr "מוטיב הרגשונים שהגדרת לא נמצא, ומשכך רגשונים נוטרלו."
 
 #: ../src/gui_interface.py:2019
-msgid ""
-"Your configured emoticons theme cannot been loaded. You maybe need to update "
-"the format of emoticons.py file. See http://trac.gajim.org/wiki/Emoticons "
-"for more details."
-msgstr ""
-"מוטיב הרגשונים אשר הגדרת לא ניתן לטעינה. ייתכן וקיים הצורך לעדכן את התסדיר "
-"של הקובץ emoticons.py. לפרטים נוספים, ראו http://trac.gajim.org/wiki/"
-"Emoticons."
+msgid "Your configured emoticons theme cannot been loaded. You maybe need to update the format of emoticons.py file. See http://trac.gajim.org/wiki/Emoticons for more details."
+msgstr "מוטיב הרגשונים שהגדרת לא ניתן לטעינה. ייתכן וקיים הצורך לעדכן את התסדיר של הקובץ emoticons.py. עבור פרטים נוספים, ראו http://trac.gajim.org/wiki/Emoticons."
 
-#: ../src/gui_interface.py:2063 ../src/roster_window.py:3895
+#: ../src/gui_interface.py:2063
+#: ../src/roster_window.py:3966
 msgid "You cannot join a group chat while you are invisible"
-msgstr "אין באפשרותך להשתתף בשיחת קבוצה כאשר הינך במצב בלתי נראה"
+msgstr "אין ביכולתך להשתתף בשיחת קבוצה כאשר הינך במצב בלתי נראה"
 
 #. it is good to notify the user
 #. in case he or she cannot see the output of the console
 #: ../src/gui_interface.py:2450
 msgid "Could not save your settings and preferences"
-msgstr "לא היתה אפשרות לשמור את ההגדרות וההעדפות שלך"
+msgstr "לא ניתן היה לשמור את ההגדרות וההעדפות שלך"
 
-#: ../src/gui_interface.py:3043
+#: ../src/gui_interface.py:3008
 msgid "Passphrase Required"
-msgstr "נדרשת מימרת סיסמה"
+msgstr "נדרשת מימרת־סיסמה"
 
-#: ../src/gui_interface.py:3044
+#: ../src/gui_interface.py:3009
 #, python-format
-msgid "Enter OpenPGP key passphrase for key %(keyid)s (account %(account)s)."
-msgstr ""
-"הזן מימרת סיסמה של מפתח OpenPGP עבור מפתח %(keyid)s (חשבון %(account)s)."
+msgid "Enter GPG key passphrase for key %(keyid)s (account %(account)s)."
+msgstr "נא להזין מימרת־סיסמה של מפתח GPG עבור מפתח %(keyid)s (חשבון %(account)s)."
 
-#: ../src/gui_interface.py:3058
-msgid "OpenPGP key expired"
-msgstr "מפתח OpenPGP פקע"
+#: ../src/gui_interface.py:3023
+msgid "GPG key expired"
+msgstr "מפתח GPG פקע"
 
-#: ../src/gui_interface.py:3059
+#: ../src/gui_interface.py:3024
 #, python-format
-msgid ""
-"Your OpenPGP key has expired, you will be connected to %s without OpenPGP."
-msgstr "מפתח OpenPGP פקע, התחברותך אל %s תתקיים ללא OpenPGP."
+msgid "Your GPG key has expired, you will be connected to %s without OpenPGP."
+msgstr "מפתח GPG פקע, ההתחברות אל %s תתבצע ללא OpenPGP."
 
 #. ask again
-#: ../src/gui_interface.py:3068
+#: ../src/gui_interface.py:3033
 msgid "Wrong Passphrase"
-msgstr "מימרת סיסמה שגויה"
+msgstr "מימרת־סיסמה שגויה"
 
-#: ../src/gui_interface.py:3069
-msgid "Please retype your OpenPGP passphrase or press Cancel."
-msgstr "אנא הקלד מחדש מימרת סיסמה OpenPGP או לחץ על ביטול."
+#: ../src/gui_interface.py:3034
+msgid "Please retype your GPG passphrase or press Cancel."
+msgstr "נא להקליד מימרת־סיסמה GPG מחדש או ללחוץ על ביטול."
 
-#: ../src/gui_menu_builder.py:96
+#: ../src/gui_menu_builder.py:93
 msgid "_New Group Chat"
 msgstr "שיחת קבוצה _חדשה"
 
-#: ../src/gui_menu_builder.py:438
+#: ../src/gui_menu_builder.py:431
 msgid "I would like to add you to my roster"
 msgstr "ברצוני להוסיפך אל הרשימה שלי"
 
-#: ../src/history_manager.py:78
-#, fuzzy
-msgid "Set logs directory"
-msgstr "cli"
-
-#: ../src/history_manager.py:126
+#: ../src/history_manager.py:116
 msgid "Cannot find history logs database"
-msgstr "אין אפשרות למצוא מסד נתונים של רשומות היסטוריה"
+msgstr "לא ניתן למצוא מסד נתונים של רשומות היסטוריה"
 
 #. holds time
-#: ../src/history_manager.py:179 ../src/history_manager.py:223
-#: ../src/history_window.py:100
+#: ../src/history_manager.py:169
+#: ../src/history_manager.py:213
+#: ../src/history_window.py:99
 msgid "Date"
 msgstr "תאריך"
 
 #. holds nickname
-#: ../src/history_manager.py:186 ../src/history_manager.py:242
+#: ../src/history_manager.py:176
+#: ../src/history_manager.py:232
 msgid "Nickname"
 msgstr "שם כינוי"
 
 #. holds message
-#: ../src/history_manager.py:195 ../src/history_manager.py:230
-#: ../src/history_window.py:108
+#: ../src/history_manager.py:185
+#: ../src/history_manager.py:220
+#: ../src/history_window.py:107
 msgid "Message"
 msgstr "הודעה"
 
 #. holds subject
-#: ../src/history_manager.py:203 ../src/history_manager.py:236
+#: ../src/history_manager.py:193
+#: ../src/history_manager.py:226
 msgid "Subject"
 msgstr "נושא"
 
-#: ../src/history_manager.py:262
-msgid ""
-"Do you want to clean up the database? (STRONGLY NOT RECOMMENDED IF GAJIM IS "
-"RUNNING)"
-msgstr ""
-"האם ברצונך לנקות את מסד הנתונים? (פעולה זו בהחלט לא מומלצת כאשר Gajim מורץ)"
+# לחלוטין לא מומלץ בעת שהיישום Gajim מורץ
+#: ../src/history_manager.py:252
+msgid "Do you want to clean up the database? (STRONGLY NOT RECOMMENDED IF GAJIM IS RUNNING)"
+msgstr "האם ברצונך לנקות את מסד הנתונים? (פעולה זו בפרוש לא מומלצת בעת שהיישום Gajim מורץ)"
 
-#: ../src/history_manager.py:264
+#: ../src/history_manager.py:254
 msgid ""
 "Normally allocated database size will not be freed, it will just become "
 "reusable. If you really want to reduce database filesize, click YES, else "
@@ -10492,102 +10620,103 @@ msgid ""
 "\n"
 "In case you click YES, please wait..."
 msgstr ""
-"בדרך כלל גודל מסד נתונים מוקצה לא יהיה חופשי, אלא הוא רק יהפוך לכזה אשר ניתן "
-"לשימוש חוזר. אם באמת ברצונך להקטין את הגודל של קובץ מסד הנתונים, עליך להקיש "
-"כן, אחרת עליך להקיש לא.\n"
+"בדרך כלל הגודל המוקצה של מסד נתונים לא יהיה חופשי, הוא רק יהפוך לכזה שניתן לשימוש חוזר. אם באמת ברצונך להקטין את הגודל של קובץ מסד הנתונים, עליך להקיש כן, אחרת עליך להקיש לא.\n"
 "\n"
 "במידה ותבחר להקיש כן, אנא המתן..."
 
-#: ../src/history_manager.py:269
+# טיהור (לא מתאים משום שטיהור זה איפוס מוחלט)
+#: ../src/history_manager.py:259
 msgid "Database Cleanup"
 msgstr "ניקוי מסד נתונים"
 
-# מייצא כעת רשומות היסטוריה...
-#: ../src/history_manager.py:487
+#: ../src/history_manager.py:477
 msgid "Exporting History Logs..."
 msgstr "ייצוא רשומות היסטוריה..."
 
 # BUG: said > wrote?
 # Needs to be tested
-#: ../src/history_manager.py:564
+#: ../src/history_manager.py:554
 #, python-format
 msgid "%(who)s on %(time)s said: %(message)s\n"
-msgstr "‏%(who)s בשעה %(time)s אמר/ה: %(message)s\n"
+msgstr "‫%(who)s בשעה %(time)s אמר/ה: %(message)s\n"
 
-#: ../src/history_manager.py:602
+# Really>Still
+#: ../src/history_manager.py:592
 #, python-format
 msgid "Do you really want to delete the logs of %(jid)s?"
-msgstr "האם אתה בטוח כי ברצונך למחוק את הרשומות של %(jid)s?"
+msgstr "האם באמת שברצונך למחוק את הרשומות של %(jid)s?"
 
-#: ../src/history_manager.py:606
+#: ../src/history_manager.py:596
 msgid "Do you really want to delete logs of the selected contacts?"
-msgstr "האם אתה בטוח כי ברצונך למחוק את הרשומות של אנשי קשר נבחרים?"
+msgstr "האם באמת שברצונך למחוק את הרשומות של אנשי קשר נבחרים?"
 
-#: ../src/history_manager.py:608 ../src/history_manager.py:647
+# איננה הפיכה/ניתנת לביטול
+# ×”×™× × ×”
+#: ../src/history_manager.py:598
+#: ../src/history_manager.py:637
 msgid "This is an irreversible operation."
-msgstr "פעולה זו איננה הפיכה."
+msgstr "פעולה זו הינה בלתי הפיכה."
 
-#: ../src/history_manager.py:610 ../src/history_manager.py:649
+#: ../src/history_manager.py:600
+#: ../src/history_manager.py:639
 msgid "Deletion Confirmation"
 msgstr "אימות מחיקה"
 
-#: ../src/history_manager.py:644
+# Really>Still
+#: ../src/history_manager.py:634
 msgid "Do you really want to delete the selected message?"
 msgid_plural "Do you really want to delete the selected messages?"
-msgstr[0] "האם אתה בטוח כי ברצונך למחוק את ההודעה הנבחרת?"
-msgstr[1] "האם אתה בטוח כי ברצונך למחוק את ההודעות הנבחרות?"
+msgstr[0] "האם באמת שברצונך למחוק את ההודעה הנבחרת?"
+msgstr[1] "האם באמת שברצונך למחוק את ההודעות הנבחרות?"
 
-#: ../src/history_window.py:308
+#: ../src/history_window.py:306
 #, python-format
 msgid "Conversation History with %s"
 msgstr "היסטוריית שיחה עם ‫%s"
 
-#: ../src/history_window.py:358
+# כונן
+#: ../src/history_window.py:356
 msgid "Disk Error"
-msgstr "שגיאת כונן"
+msgstr "שגיאת דיסק"
 
-# Fix Psi status with brackets in Psi with LTR at its end - see realisation below
-# ‏Auto Status (idle)
-# ‏Auto Status (idle)‎
-#: ../src/history_window.py:451
+# LRE and PDF.
+# Fix Psi status with brackets in Psi! not here!! :D
+# ‪Auto Status (idle)‬
+#: ../src/history_window.py:444
 #, python-format
 msgid "%(nick)s is now %(status)s: %(status_msg)s"
-msgstr "%(nick)s מצוי/ה כעת במצב %(status)s: %(status_msg)s"
+msgstr "‫%(nick)s מצוי/ה כעת במצב %(status)s: %(status_msg)s"
 
-#: ../src/history_window.py:462
+#: ../src/history_window.py:455
 #, python-format
 msgid "Error: %s"
 msgstr "שגיאה: %s"
 
-#: ../src/history_window.py:464
+#: ../src/history_window.py:457
 msgid "Error"
 msgstr "שגיאה"
 
-#: ../src/history_window.py:466
+#: ../src/history_window.py:459
 #, python-format
 msgid "Status is now: %(status)s: %(status_msg)s"
 msgstr "מצב נוכחי: %(status)s: %(status_msg)s"
 
-#: ../src/history_window.py:469
+#: ../src/history_window.py:462
 #, python-format
 msgid "Status is now: %(status)s"
 msgstr "המצב כעת: %(status)s"
 
-#: ../src/htmltextview.py:523
+#: ../src/htmltextview.py:522
 msgid "Loading"
-msgstr "טוען כעת"
-
-#: ../src/logind_listener.py:53 ../src/upower_listener.py:31
-msgid "Machine going to sleep"
-msgstr "מחשב על סף שינה‫"
+msgstr ""
 
 #: ../src/message_window.py:220
 msgid "You are going to close several tabs"
-msgstr "בחרת לסגור מספר כרטיסיות"
+msgstr "בחרת לסגור מספר לשוניות"
 
 #: ../src/message_window.py:221
 msgid "Do you really want to close them all?"
-msgstr "האם אתה בטוח כי ברצונך לסגור את כולן?"
+msgstr "האם באמת שברצונך לסגור את כולן?"
 
 #: ../src/message_window.py:518
 msgid "Chats"
@@ -10605,9 +10734,10 @@ msgstr "שיחות פרטיות"
 msgid "Messages"
 msgstr "הודעות"
 
+# I think that הודעות יירשמו will be proper since we don't know to where the other end saves its messages
 #: ../src/negotiation.py:34
 msgid "- messages will be logged"
-msgstr "- הודעות יירשמו"
+msgstr "- הודעות יירשמו אל יומן ההיסטוריה"
 
 #: ../src/negotiation.py:36
 msgid "- messages will not be logged"
@@ -10617,49 +10747,53 @@ msgstr "- הודעות לא יירשמו אל יומן ההיסטוריה"
 msgid "Ignore"
 msgstr "התעלמות"
 
-#: ../src/plugins/gui.py:82
+#: ../src/plugins/gui.py:78
 msgid "Plugin"
 msgstr "תוספת"
 
-#: ../src/plugins/gui.py:149
+#: ../src/plugins/gui.py:145
 #, python-format
 msgid "Warning: %s"
 msgstr "אזהרה: %s"
 
-#: ../src/plugins/gui.py:207
+# טעינת התוסף נכשלה
+#: ../src/plugins/gui.py:199
 msgid "Plugin failed"
 msgstr "כשל תוספת"
 
-#: ../src/plugins/gui.py:252
+#: ../src/plugins/gui.py:244
 msgid "Unable to properly remove the plugin"
-msgstr "אין אפשרות להסיר את התוספת באופן רגיל"
+msgstr "לא ניתן להסיר את התוספת באופן רגיל"
 
 #. members not safe
-#: ../src/plugins/gui.py:260 ../src/plugins/pluginmanager.py:526
-#: ../src/plugins/pluginmanager.py:534
+#: ../src/plugins/gui.py:252
+#: ../src/plugins/pluginmanager.py:523
+#: ../src/plugins/pluginmanager.py:531
 msgid "Archive is malformed"
 msgstr "ארכיון הינו פגום"
 
-#: ../src/plugins/gui.py:284 ../src/plugins/gui.py:292
-#: ../src/plugins/pluginmanager.py:542
+#: ../src/plugins/gui.py:276
+#: ../src/plugins/gui.py:284
+#: ../src/plugins/pluginmanager.py:539
 msgid "Plugin already exists"
 msgstr "תוספת כבר קיימת"
 
-#: ../src/plugins/gui.py:284
+#: ../src/plugins/gui.py:276
 msgid "Overwrite?"
-msgstr "להחליף?"
+msgstr "האם לכתוב על הקיים?"
 
-#: ../src/plugins/gui.py:314
+#: ../src/plugins/gui.py:306
 msgid "Configuration"
 msgstr "תצורה"
 
 #. it is not zip file
 #. CRC error
-#: ../src/plugins/pluginmanager.py:512 ../src/plugins/pluginmanager.py:518
+#: ../src/plugins/pluginmanager.py:509
+#: ../src/plugins/pluginmanager.py:515
 msgid "Archive corrupted"
 msgstr "ארכיון מושחת"
 
-#: ../src/plugins/pluginmanager.py:514
+#: ../src/plugins/pluginmanager.py:511
 msgid "Archive empty"
 msgstr "ארכיון ריק"
 
@@ -10667,502 +10801,484 @@ msgstr "ארכיון ריק"
 msgid "Retrieving profile..."
 msgstr "מאחזר כעת דיוקן..."
 
-#: ../src/profile_window.py:129 ../src/roster_window.py:3192
+#: ../src/profile_window.py:129
+#: ../src/roster_window.py:3259
 msgid "File is empty"
 msgstr "קובץ ריק"
 
-#: ../src/profile_window.py:132 ../src/roster_window.py:3195
+#: ../src/profile_window.py:132
+#: ../src/roster_window.py:3262
 msgid "File does not exist"
 msgstr "קובץ לא קיים"
 
+# את התמונה
 #. keep identation
 #. unknown format
-#: ../src/profile_window.py:146 ../src/profile_window.py:163
-#: ../src/roster_window.py:3197 ../src/roster_window.py:3208
+#: ../src/profile_window.py:146
+#: ../src/profile_window.py:162
+#: ../src/roster_window.py:3264
+#: ../src/roster_window.py:3275
 msgid "Could not load image"
-msgstr "לא היתה אפשרות להטעין תמונה"
+msgstr "לא ניתן לטעון תמונה"
 
-#: ../src/profile_window.py:235
+#: ../src/profile_window.py:233
 msgid "Wrong date format"
 msgstr "תסדיר תאריך שגוי"
 
 # חייב
-#: ../src/profile_window.py:236
+#: ../src/profile_window.py:234
 msgid "Format of the date must be YYYY-MM-DD"
-msgstr "הפורמט של התאריך מוכרח להיות YYYY-MM-DD"
+msgstr "תסדיר התאריך מוכרח להיות YYYY-MM-DD"
 
 # התקבל מידע
-#: ../src/profile_window.py:294
+#: ../src/profile_window.py:292
 msgid "Information received"
-msgstr "מידע התקבל"
+msgstr "המידע התקבל"
 
-#: ../src/profile_window.py:372
-msgid "Without a connection, you can not publish your contact information."
+# BUG: Comma
+# ללא חיבור זמין
+#: ../src/profile_window.py:370
+msgid "Without a connection you can not publish your contact information."
 msgstr "ללא חיבור, אין באפשרותך לפרסם את מידע איש הקשר שלך."
 
-#: ../src/profile_window.py:385
+#: ../src/profile_window.py:383
 msgid "Sending profile..."
 msgstr "שולח כעת דיוקן..."
 
-#: ../src/profile_window.py:404
+#: ../src/profile_window.py:402
 msgid "Information NOT published"
 msgstr "מידע לא פורסם"
 
-#: ../src/profile_window.py:411
+#: ../src/profile_window.py:409
 msgid "vCard publication failed"
 msgstr "כשל פרסום vCard"
 
-#: ../src/profile_window.py:412
-msgid ""
-"There was an error while publishing your personal information, try again "
-"later."
-msgstr "אירעה שגיאה במהלך פרסום המידע האישי שלך, נסה שוב מאוחר יותר."
+#: ../src/profile_window.py:410
+msgid "There was an error while publishing your personal information, try again later."
+msgstr "ארעה שגיאה במהלך פרסום המידע האישי שלך, נא לנסות שוב מאוחר יותר."
 
-#: ../src/roster_window.py:240 ../src/roster_window.py:1035
+#: ../src/roster_window.py:240
+#: ../src/roster_window.py:1031
 msgid "Merged accounts"
 msgstr "חשבונות ממוזגים"
 
-#: ../src/roster_window.py:2059
+#: ../src/roster_window.py:2049
 msgid "Authorization has been sent"
 msgstr "הרשאה נשלחה"
 
-#: ../src/roster_window.py:2060
+#: ../src/roster_window.py:2050
 #, python-format
 msgid "Now \"%s\" will know your status."
-msgstr "מעתה מצבך יהיה גלוי עבור \"%s\"."
+msgstr "מעתה מצבך יהיה גלוי עבור ‫\"%s\"."
 
-#: ../src/roster_window.py:2083
+#: ../src/roster_window.py:2073
 msgid "Subscription request has been sent"
 msgstr "בקשת הרשמה נשלחה"
 
-#: ../src/roster_window.py:2084
+# Is it possible to use %s twice?
+# אם בקשתך תתקבל על ידי \"%s\" מצב־החיבור של \"%s\" יהיה גלוי בפניך.
+#: ../src/roster_window.py:2074
 #, python-format
 msgid "If \"%s\" accepts this request you will know his or her status."
 msgstr "אם בקשתך תתקבל על ידי \"%s\" מצב החיבור שלו או שלה יהיה גלוי בפניך."
 
-#: ../src/roster_window.py:2098
+#: ../src/roster_window.py:2088
 msgid "Authorization has been removed"
 msgstr "הרשאה הוסרה"
 
-#: ../src/roster_window.py:2099
+#: ../src/roster_window.py:2089
 #, python-format
 msgid "Now \"%s\" will always see you as offline."
-msgstr "מעתה מצבך ייראה בתור לא מקוון עבור \"%s\"."
+msgstr "מעתה מצבך ייראה כלא מקוון עבור ‫\"%s\"."
 
-#: ../src/roster_window.py:2126
-msgid "OpenPGP is not usable"
-msgstr "הצפנת OpenPGP אינה שמישה"
+#: ../src/roster_window.py:2116
+msgid "GPG is not usable"
+msgstr "הצפנת GPG אינה שמישה"
 
-#: ../src/roster_window.py:2127
+#: ../src/roster_window.py:2117
 #, python-format
 msgid "You will be connected to %s without OpenPGP."
-msgstr "התחברותך אל %s תתבצע ללא OpenPGP."
+msgstr "ההתחברות אל %s תתבצע ללא OpenPGP."
 
-#: ../src/roster_window.py:2334 ../src/roster_window.py:3825
+#: ../src/roster_window.py:2324
+#: ../src/roster_window.py:3896
 msgid "You are participating in one or more group chats"
 msgstr "הינך משתתף בשיחת קבוצה אחת או יותר"
 
 # יוביל, יביא לידי
-#: ../src/roster_window.py:2335 ../src/roster_window.py:3826
-msgid ""
-"Changing your status to invisible will result in disconnection from those "
-"group chats. Are you sure you want to go invisible?"
-msgstr ""
-"שינוי מצב החיבור שלך אל בלתי נראה ינבע בניתוקך מתוך שיחות קבוצה אלו. האם אתה "
-"בטוח כי ברצונך להפוך את מצבך אל בלתי נראה?"
+#: ../src/roster_window.py:2325
+#: ../src/roster_window.py:3897
+msgid "Changing your status to invisible will result in disconnection from those group chats. Are you sure you want to go invisible?"
+msgstr "שינוי מצב־חיבורך אל בלתי נראה ינבע בניתוקך מן שיחות קבוצה אלו. האם עדיין ברצונך להפוך את מצבך אל בלתי נראה?"
 
-#: ../src/roster_window.py:2361
+# If this mean desyncronized then 'לא מסונכרן' is correct,
+#: ../src/roster_window.py:2351
 msgid "desync'ed"
 msgstr "לא מסונכרן"
 
-#: ../src/roster_window.py:2427
+#: ../src/roster_window.py:2417
 msgid "Really quit Gajim?"
-msgstr "באמת לצאת מתוך Gajim?"
+msgstr "באמת לצאת מן Gajim?"
 
 # לסגור את
-#: ../src/roster_window.py:2428
+#: ../src/roster_window.py:2418
 msgid "Are you sure you want to quit Gajim?"
-msgstr "האם אתה בטוח כי ברצונך לצאת מתוך Gajim?"
+msgstr "האם באמת שברצונך לצאת מן Gajim?"
 
-#: ../src/roster_window.py:2429
+#: ../src/roster_window.py:2419
 msgid "Always close Gajim"
 msgstr "סגור את Gajim תמיד"
 
-#: ../src/roster_window.py:2519
+#: ../src/roster_window.py:2509
 msgid "You have running file transfers"
-msgstr "נותרו העברות קבצים פעילות"
+msgstr "יש לך העברות קבצים פעילות"
 
-#: ../src/roster_window.py:2520
-msgid ""
-"If you quit now, the file(s) being transferred will be stopped. Do you still "
-"want to quit?"
-msgstr ""
-"אם תצא עכשיו, הקובץ או הקבצים אשר מועברים כעת יופסקו. האם עדיין ברצונך לצאת?"
+# the transfer of file(s) that are being
+#: ../src/roster_window.py:2510
+msgid "If you quit now, the file(s) being transferred will be stopped. Do you still want to quit?"
+msgstr "אם תצא עכשיו, הקובץ או הקבצים שמועברים כעת יופסקו. האם עדיין ברצונך לצאת?"
 
-#: ../src/roster_window.py:2551 ../src/roster_window.py:2988
+#: ../src/roster_window.py:2541
+#: ../src/roster_window.py:2978
 msgid "You have unread messages"
-msgstr "נותרו הודעות אשר לא נקראו"
+msgstr "יש לך הודעות שלא נקראו"
 
 # BUG: and (A or THE) contact
 # קיימת לרשותך
 # היסטוריה מאופשרת
-#: ../src/roster_window.py:2552
-msgid ""
-"Messages will only be available for reading them later if you have history "
-"enabled and contact is in your roster."
-msgstr ""
-"הודעות יהיו זמינות לקריאה מאוחרת רק אם אפשרת רישום היסטוריה ואיש הקשר מצוי "
-"ברשימה שלך."
+#: ../src/roster_window.py:2542
+msgid "Messages will only be available for reading them later if you have history enabled and contact is in your roster."
+msgstr "הודעות יהיו זמינות לקריאה מאוחרת רק אם אפשרת רישום היסטוריה ואיש הקשר מצוי ברשימתך."
 
-#: ../src/roster_window.py:2989
+# לקרואן
+#: ../src/roster_window.py:2979
 msgid "You must read them before removing this transport."
-msgstr "עליך לקרוא אותן טרם הסרת מוביל זה."
+msgstr "עליך לקרוא אותן לפני הסרת מוביל זה."
 
-#: ../src/roster_window.py:2992
+#: ../src/roster_window.py:2982
 #, python-format
 msgid "Transport \"%s\" will be removed"
 msgstr "המוביל \"%s\" יוסר"
 
-#: ../src/roster_window.py:2993
-msgid ""
-"You will no longer be able to send and receive messages from contacts using "
-"this transport."
-msgstr ""
-"לא תעמוד עוד לרשותך האפשרות לקבל ולשלוח הודעות מתוך אנשי קשר באמצעות מוביל "
-"×–×”."
+#: ../src/roster_window.py:2983
+msgid "You will no longer be able to send and receive messages from contacts using this transport."
+msgstr "לא תעמוד עוד לרשותך האפשרות לקבל ולשלוח הודעות מן אנשי קשר באמצעות מוביל זה."
 
-#: ../src/roster_window.py:2996
+#: ../src/roster_window.py:2986
 msgid "Transports will be removed"
 msgstr "המובילים יוסרו"
 
 # הטרנספורטים שלהלן
 # הטרנספורטים הללו
-#: ../src/roster_window.py:3001
+#: ../src/roster_window.py:2991
 #, python-format
-msgid ""
-"You will no longer be able to send and receive messages to contacts from "
-"these transports: %s"
-msgstr ""
-"לא תעמוד עוד לרשותך האפשרות לקבל ולשלוח הודעות אל אנשי קשר מתוך מובילים אלו: "
-"%s"
+msgid "You will no longer be able to send and receive messages to contacts from these transports: %s"
+msgstr "לא תעמוד עוד לרשותך האפשרות לקבל ולשלוח הודעות אל אנשי קשר מן מובילים אלו: %s"
 
 # Needs to be tested
 # you have chose to
-#: ../src/roster_window.py:3043
+#: ../src/roster_window.py:3059
 msgid "You are about to block a contact. Are you sure you want to continue?"
-msgstr "בחרת לחסום איש קשר. האם אתה בטוח כי ברצונך להמשיך?"
+msgstr "בחרת לחסום איש קשר. האם עדיין ברצונך להמשיך?"
 
 # BUG: HE and SHE
 # על ידו או על ידה
-#: ../src/roster_window.py:3045
-msgid ""
-"This contact will see you offline and you will not receive messages he will "
-"send you."
-msgstr ""
-"איש קשר זה תמיד יראה אותך במצב לא מקוון ולא תהיה באפשרותך לקבל הודעות אשר "
-"יישלחו אליך ממנו."
+#: ../src/roster_window.py:3061
+msgid "This contact will see you offline and you will not receive messages he will send you."
+msgstr "איש קשר זה תמיד יראה אותך במצב לא מקוון ולא תהיה באפשרותך לקבל הודעות שישלחו אליך ממנו או ממנה."
 
 #. it's jid
-#: ../src/roster_window.py:3084
+#: ../src/roster_window.py:3151
 msgid "Rename Contact"
-msgstr "שינוי שם איש קשר"
+msgstr "שנה שם איש קשר"
 
-#: ../src/roster_window.py:3085
+#: ../src/roster_window.py:3152
 #, python-format
 msgid "Enter a new nickname for contact %s"
-msgstr "הזן שם כינוי חדש עבור איש קשר %s"
+msgstr "נא להזין שם כינוי חדש עבור איש קשר ‫%s"
 
-#: ../src/roster_window.py:3092
+#: ../src/roster_window.py:3159
 msgid "Rename Group"
-msgstr "שינוי שם קבוצה"
+msgstr "שנה שם קבוצה"
 
-#: ../src/roster_window.py:3093
+#: ../src/roster_window.py:3160
 #, python-format
 msgid "Enter a new name for group %s"
-msgstr "הזן שם חדש עבור קבוצת %s"
+msgstr "נא להזין שם חדש עבור קבוצת ‫%s"
 
-#: ../src/roster_window.py:3138
+#: ../src/roster_window.py:3205
 msgid "Remove Group"
 msgstr "הסרת קבוצה"
 
-#: ../src/roster_window.py:3139
+#: ../src/roster_window.py:3206
 #, python-format
 msgid "Do you want to remove group %s from the roster?"
-msgstr "האם ברצונך להסיר את קבוצת %s מתוך הרשימה?"
+msgstr "האם ברצונך להסיר את קבוצת %s מן הרשימה?"
 
-#: ../src/roster_window.py:3140
+#: ../src/roster_window.py:3207
 msgid "Also remove all contacts in this group from your roster"
-msgstr "בנוסף הסר גם את כל אנשי הקשר אשר בקבוצה זו מתוך הרשימה"
+msgstr "בנוסף גם להסיר את כל אנשי הקשר שבקבוצה זו מן רשימתך"
 
-#: ../src/roster_window.py:3179
+#: ../src/roster_window.py:3246
 msgid "Assign OpenPGP Key"
 msgstr "הקצאת מפתח OpenPGP"
 
 # BUG: the word OpenPGP should be written
 # להחלה
 # לאיש קשר זה
-#: ../src/roster_window.py:3180
+#: ../src/roster_window.py:3247
 msgid "Select a key to apply to the contact"
-msgstr "בחר מפתח ליישום עבור איש הקשר"
+msgstr "בחירת מפתח ליישם עבור איש הקשר"
 
-#: ../src/roster_window.py:3635
+#: ../src/roster_window.py:3706
 #, python-format
 msgid "Contact \"%s\" will be removed from your roster"
-msgstr "איש קשר \"%s\" יוסר מתוך רשימתך"
+msgstr "איש קשר \"%s\" יוסר מן רשימתך"
 
-#: ../src/roster_window.py:3637
+# you have chose to
+#: ../src/roster_window.py:3708
 #, python-format
 msgid "You are about to remove \"%(name)s\" (%(jid)s) from your roster.\n"
-msgstr "בחרת להסיר את \"%(name)s\" (%(jid)s) מתוך הרשימה שלך.\n"
+msgstr "בחרת להסיר את \"%(name)s\" (%(jid)s) מן רשימתך.\n"
 
-#: ../src/roster_window.py:3642
-msgid ""
-"By removing this contact you also remove authorization resulting in him or "
-"her always seeing you as offline."
-msgstr ""
-"בהסירך את איש קשר זה תוסר גם הרשאה דבר אשר יגרום לכך שהוא או היא יראו אותך "
-"במצב לא מקוון באופן תמידי."
+#: ../src/roster_window.py:3713
+msgid "By removing this contact you also remove authorization resulting in him or her always seeing you as offline."
+msgstr "בהסירך את איש קשר זה תוסר גם הרשאה דבר שיגרום לכך שזה יראה אותך במצב לא מקוון באופן תמידי."
 
 #. Contact is not in roster
-#: ../src/roster_window.py:3648
+#: ../src/roster_window.py:3719
 msgid "Do you want to continue?"
 msgstr "האם ברצונך להמשיך?"
 
-#: ../src/roster_window.py:3652
-msgid ""
-"By removing this contact you also by default remove authorization resulting "
-"in him or her always seeing you as offline."
-msgstr ""
-"בהסירך את איש קשר זה תוסר גם, באופן משתמט, הרשאה דבר אשר יגרום לכך שאיש הקשר "
-"יראה אותך במצב לא מקוון באופן תמידי."
+#: ../src/roster_window.py:3723
+msgid "By removing this contact you also by default remove authorization resulting in him or her always seeing you as offline."
+msgstr "בהסירך את איש קשר זה תוסר גם, באופן משתמט, הרשאה דבר שיגרום לכך שאיש הקשר יראה אותך במצב לא מקוון באופן תמידי."
 
-# לאחר כעבור
-#: ../src/roster_window.py:3655
+# לאחר
+#: ../src/roster_window.py:3726
 msgid "I want this contact to know my status after removal"
 msgstr "ברצוני שאיש קשר זה יהיה מיודע באשר אל מצב החיבור שלי עובר הסרה"
 
 #. several contact to remove at the same time
-#: ../src/roster_window.py:3659
+#: ../src/roster_window.py:3730
 msgid "Contacts will be removed from your roster"
-msgstr "אנשי קשר יוסרו מתןך הרשימה שלך"
+msgstr "אנשי קשר יוסרו מן רשימתך"
 
-#: ../src/roster_window.py:3664
+#: ../src/roster_window.py:3735
 #, python-format
 msgid ""
 "By removing these contacts:%s\n"
 "you also remove authorization resulting in them always seeing you as offline."
 msgstr ""
 "בהסירך את אנשי קשר אלו:%s\n"
-"אתה גם תסיר הרשאה דבר אשר יביא לכך שהם תמיד יראו אותך במצב לא מקוון."
+"אתה גם תסיר הרשאה דבר שיביא לכך שהם תמיד יראו אותך במצב לא מקוון."
 
-#: ../src/roster_window.py:3722
-msgid ""
-"You are about to send a custom status. Are you sure you want to continue?"
-msgstr "בחרת לשלוח מצב חיבור מותאם. האם אתה בטוח כי ברצונך להמשיך?"
+# you have chose to
+#: ../src/roster_window.py:3793
+msgid "You are about to send a custom status. Are you sure you want to continue?"
+msgstr "בחרת לשלוח מצב־חיבור מותאם. האם עדיין ברצונך להמשיך?"
 
-#: ../src/roster_window.py:3724
+#: ../src/roster_window.py:3795
 #, python-format
-msgid ""
-"This contact will temporarily see you as %(status)s, but only until you "
-"change your status. Then he or she will see your global status."
-msgstr ""
-"איש קשר זה יראה אותך באופן זמני במצב %(status)s, אך רק עד אשר תשנה את המצב "
-"שלך. אחרי כן הוא/היא יראו את מצב החיבור הגלובלי שלך."
+msgid "This contact will temporarily see you as %(status)s, but only until you change your status. Then he or she will see your global status."
+msgstr "איש קשר זה יראה אותך באופן זמני במצב %(status)s, אך רק עד שמצבך ישתנה על ידייך. אחרי כן הוא/היא יראו את מצב־חיבורך הגלובלי."
 
-#: ../src/roster_window.py:3743
+# Is this the same as: "There is no account available"?
+#: ../src/roster_window.py:3814
 msgid "No account available"
 msgstr "אין חשבון זמין"
 
+# לפני שתעמוד ליכולתך האפשרות לשוחח
 # לפני שתעמוד לרשותך האפשרות לשוחח
-#: ../src/roster_window.py:3744
+# לפני שתעמוד לרשותך היכולת לשוחח
+#: ../src/roster_window.py:3815
 msgid "You must create an account before you can chat with other contacts."
-msgstr "עליך ליצור חשבון טרם תהיה באפשרותך לשוחח עם אנשי קשר אחרים."
+msgstr "עליך ליצור חשבון לפני שיהיה ביכולתך לשוחח עם אנשי קשר אחרים."
 
-#: ../src/roster_window.py:4456
+#: ../src/roster_window.py:4512
 msgid "Metacontacts storage not supported by your server"
 msgstr "אחסון אנשי־קשר-מוצמדים לא נתמך על ידי שרתך"
 
-#: ../src/roster_window.py:4458
-msgid ""
-"Your server does not support storing metacontacts information. So this "
-"information will not be saved on next reconnection."
-msgstr ""
-"שרתך לא תומך באחסון מידע אנשי־קשר-מוצמדים. לכן מידע זה לא יישמר בהתחברות "
-"הבאה."
+# on (? your ?) next reconnection
+#: ../src/roster_window.py:4514
+msgid "Your server does not support storing metacontacts information. So this information will not be saved on next reconnection."
+msgstr "שרתך לא תומך באחסון מידע אנשי־קשר-מוצמדים. לכן מידע זה לא יישמר בהתחברות הבאה."
 
-#: ../src/roster_window.py:4550
-msgid ""
-"You are about to create a metacontact. Are you sure you want to continue?"
-msgstr "בחרת ליצור איש־קשר-מוצמד. האם אתה בטוח כי ברצונך להמשיך?"
+# you have chose to
+#: ../src/roster_window.py:4606
+msgid "You are about to create a metacontact. Are you sure you want to continue?"
+msgstr "בחרת ליצור איש־קשר-מוצמד. האם עדיין ברצונך להמשיך?"
 
-#: ../src/roster_window.py:4552
-msgid ""
-"Metacontacts are a way to regroup several contacts in one line. Generally it "
-"is used when the same person has several Jabber accounts or transport "
-"accounts."
-msgstr ""
-"אנשי־קשר-מוצמדים (Metacontacts) הינה דרך לאחד מספר אנשי קשר בשורה אחת. באופן "
-"כללי זו בשימוש כאשר אותה האישיות מחזיקה במספר חשבונות Jabber או חשבונות "
-"מוביל."
+#: ../src/roster_window.py:4608
+msgid "Metacontacts are a way to regroup several contacts in one line. Generally it is used when the same person has several Jabber accounts or transport accounts."
+msgstr "אנשי־קשר-מוצמדים (Metacontacts) הינה דרך לאחד מספר אנשי־קשר בשורה אחת. באופן כללי זו בשימוש כאשר אותה האישיות מחזיקה במספר חשבונות Jabber או חשבונות מוביל."
 
-#: ../src/roster_window.py:4673
+#: ../src/roster_window.py:4729
 msgid "Invalid file URI:"
 msgstr "כתובת URI של קובץ שגויה:"
 
-#: ../src/roster_window.py:4685
+#: ../src/roster_window.py:4741
 #, python-format
 msgid "Do you want to send this file to %s:"
 msgid_plural "Do you want to send these files to %s:"
 msgstr[0] "האם ברצונך לשלוח קובץ זה אל %s:"
 msgstr[1] "האם ברצונך לשלוח קבצים אלו אל %s:"
 
-#: ../src/roster_window.py:4820
+#: ../src/roster_window.py:4876
 #, python-format
 msgid "Send %s to %s"
-msgstr "שלח את %s אל %s"
+msgstr "שליחת %s אל %s"
 
-#: ../src/roster_window.py:4831
-#, python-format
+# הפוך את %s ואת %s אל metacontacts
+#: ../src/roster_window.py:4887
+#, fuzzy, python-format
 msgid "Make %s first contact"
-msgstr "הפוך את %s לאיש קשר ראשון"
+msgstr "הפוך את %s וגם %s אל אנשי־קשר-מוצמדים"
 
-#: ../src/roster_window.py:4834
+# הפוך את %s ואת %s אל metacontacts
+#: ../src/roster_window.py:4890
 #, python-format
 msgid "Make %s and %s metacontacts"
-msgstr "הפוך את %s וגם את %s לאנשי־קשר-מוצמדים"
+msgstr "הפיכת %s וגם %s אל אנשי־קשר-מוצמדים"
 
 #. new chat
 #. single message
 #. for chat_with
 #. for single message
 #. join gc
-#: ../src/roster_window.py:5294 ../src/roster_window.py:5348
-#: ../src/roster_window.py:5357 ../src/statusicon.py:277
-#: ../src/statusicon.py:324 ../src/statusicon.py:330
+#: ../src/roster_window.py:5346
+#: ../src/roster_window.py:5400
+#: ../src/roster_window.py:5409
+#: ../src/statusicon.py:277
+#: ../src/statusicon.py:324
+#: ../src/statusicon.py:330
 #, python-format
 msgid "using account %s"
 msgstr "באמצעות חשבון %s"
 
 #. add
-#: ../src/roster_window.py:5364
+#: ../src/roster_window.py:5416
 #, python-format
 msgid "to %s account"
 msgstr "אל חשבון %s"
 
 #. disco
-#: ../src/roster_window.py:5369
+#: ../src/roster_window.py:5421
 #, python-format
 msgid "using %s account"
 msgstr "באמצעות חשבון %s"
 
-#: ../src/roster_window.py:5408 ../src/statusicon.py:340
+#: ../src/roster_window.py:5460
+#: ../src/statusicon.py:340
 msgid "_Manage Bookmarks..."
-msgstr "_ניהול סימניות..."
+msgstr "_נהל סימניות..."
 
 #. profile, avatar
-#: ../src/roster_window.py:5428
+#: ../src/roster_window.py:5480
 #, python-format
 msgid "of account %s"
 msgstr "של חשבון %s"
 
-#: ../src/roster_window.py:5469
+#: ../src/roster_window.py:5521
 #, python-format
 msgid "for account %s"
 msgstr "עבור חשבון %s"
 
-#: ../src/roster_window.py:5529 ../src/roster_window.py:5637
+#: ../src/roster_window.py:5581
+#: ../src/roster_window.py:5689
 msgid "_Change Status Message"
 msgstr "_שנה הודעת מצב"
 
-#: ../src/roster_window.py:5562
+#: ../src/roster_window.py:5614
 msgid "Publish Tune"
 msgstr "פרסם לחן"
 
-#: ../src/roster_window.py:5564
+#: ../src/roster_window.py:5616
 msgid "Publish Location"
 msgstr "פרסם מיקום"
 
-#: ../src/roster_window.py:5567
+#: ../src/roster_window.py:5619
 msgid "Configure Services..."
-msgstr "הגדרת שירותים..."
+msgstr "הגדר שירותים..."
 
 # restore
-#: ../src/roster_window.py:5715
+#: ../src/roster_window.py:5767
 msgid "_Maximize All"
 msgstr "ה_גדל את כולם"
 
-#: ../src/roster_window.py:5725 ../src/roster_window.py:5898
+#: ../src/roster_window.py:5777
+#: ../src/roster_window.py:5950
 msgid "Send Group M_essage"
 msgstr "שלח הודעת _אשכול"
 
-#: ../src/roster_window.py:5733
+#: ../src/roster_window.py:5785
 msgid "To all users"
 msgstr "אל כל המשתמשים"
 
-#: ../src/roster_window.py:5737
+#: ../src/roster_window.py:5789
 msgid "To all online users"
 msgstr "אל כל המשתמשים המקוונים"
 
 #. Manage Transport submenu
-#: ../src/roster_window.py:5918
+#: ../src/roster_window.py:5970
 msgid "_Manage Contacts"
 msgstr "_נהל אנשי קשר"
 
 #. Edit Groups
-#: ../src/roster_window.py:5927
+#: ../src/roster_window.py:5979
 msgid "Edit _Groups"
 msgstr "ערוך _קבוצות"
 
 #. Send single message
-#: ../src/roster_window.py:5982
+#: ../src/roster_window.py:6034
 msgid "Send Single Message"
 msgstr "שלח הודעה בודדת"
 
 #. Execute Command
-#: ../src/roster_window.py:6029
+#: ../src/roster_window.py:6081
 msgid "Execute Command..."
-msgstr "הרצת פקודה..."
+msgstr "הרץ פקודה..."
 
 #. Manage Transport submenu
-#: ../src/roster_window.py:6039
+#: ../src/roster_window.py:6091
 msgid "_Manage Transport"
 msgstr "_נהל מוביל"
 
 #. Modify Transport
-#: ../src/roster_window.py:6048
+#: ../src/roster_window.py:6100
 msgid "_Modify Transport"
 msgstr "ה_תאם מוביל"
 
 #. Rename
-#: ../src/roster_window.py:6058
+#: ../src/roster_window.py:6110
 msgid "_Rename"
 msgstr "_שנה שם"
 
 # Restore שחזר
-#: ../src/roster_window.py:6118
+#: ../src/roster_window.py:6170
 msgid "_Maximize"
 msgstr "ה_גדל"
 
-#: ../src/roster_window.py:6127
+#: ../src/roster_window.py:6179
 msgid "_Reconnect"
-msgstr "הת_חבר מחדש"
+msgstr "הת_חבר מחודשת"
 
-#: ../src/roster_window.py:6134
+#: ../src/roster_window.py:6186
 msgid "_Disconnect"
 msgstr "הת_נתק"
 
 #. History manager
-#: ../src/roster_window.py:6228
+#: ../src/roster_window.py:6275
 msgid "History Manager"
 msgstr "מנהל היסטוריה"
 
-#: ../src/roster_window.py:6243
+#: ../src/roster_window.py:6286
 msgid "_Join New Group Chat"
-msgstr "ה_צטרף אל שיחת קבוצה חדשה"
+msgstr "ה_צטרפות אל שיחת קבוצה חדשה"
 
-#: ../src/roster_window.py:6471
+#: ../src/roster_window.py:6514
 msgid "Change Status Message..."
-msgstr "שינוי הודעת מצב..."
+msgstr "שנה הודעת מצב..."
 
 #: ../src/search_window.py:105
 msgid "Waiting for results"
@@ -11179,11 +11295,12 @@ msgstr "שגיאה בקבלת dataform"
 msgid "No result"
 msgstr "אין תנובה"
 
-#: ../src/session.py:409 ../src/session.py:469
+#: ../src/session.py:411
+#: ../src/session.py:470
 msgid "Confirm these session options"
-msgstr "אשר את אפשרויות סשן אלו"
+msgstr "וודא את אפשרויות סשן אלו"
 
-#: ../src/session.py:411
+#: ../src/session.py:413
 #, python-format
 msgid ""
 "The remote client wants to negotiate a session with these features:\n"
@@ -11198,7 +11315,7 @@ msgstr ""
 "\n"
 "האם אפשרויות אלו מקובלות על דעתך?"
 
-#: ../src/session.py:471
+#: ../src/session.py:472
 #, python-format
 msgid ""
 "The remote client selected these options:\n"
@@ -11214,13 +11331,13 @@ msgstr ""
 "האם להמשיך עם הסשן?"
 
 # לאיש קשר
-#: ../src/session.py:474
+#: ../src/session.py:475
 msgid "Always accept for this contact"
 msgstr "הסכם תמיד עבור איש קשר זה"
 
 #: ../src/statusicon.py:241
 msgid "_Change Status Message..."
-msgstr "_שינוי הודעת מצב..."
+msgstr "_שנה הודעת מצב..."
 
 #: ../src/statusicon.py:355
 msgid "Hide _Roster"
@@ -11230,164 +11347,185 @@ msgstr "הסתר _רשימה"
 msgid "Hide this menu"
 msgstr "הסתר תפריט זה"
 
-#: ../src/tooltips.py:393 ../src/tooltips.py:614
+#: ../src/tooltips.py:393
+#: ../src/tooltips.py:613
 msgid "Jabber ID: "
-msgstr "מזהה Jabber: "
+msgstr "‫JID: "
 
-#: ../src/tooltips.py:397 ../src/tooltips.py:619
+#: ../src/tooltips.py:396
+#: ../src/tooltips.py:617
 msgid "Resource: "
 msgstr "משאב: "
 
-#: ../src/tooltips.py:403
+#: ../src/tooltips.py:402
 #, python-format
 msgid "%(owner_or_admin_or_member)s of this group chat"
-msgstr "‏%(owner_or_admin_or_member)s בשיחת קבוצה זו"
+msgstr "‫%(owner_or_admin_or_member)s בשיחת קבוצה זו"
 
-#: ../src/tooltips.py:511
+#: ../src/tooltips.py:510
 msgid " [blocked]"
 msgstr " [חסומה]"
 
-#: ../src/tooltips.py:515
+# (החדר) ממוזער
+#: ../src/tooltips.py:514
 msgid " [minimized]"
 msgstr " [ממוזערת]"
 
-# מצב חיבור
-#: ../src/tooltips.py:530 ../src/tooltips.py:791
+# מצב־חיבור
+#: ../src/tooltips.py:529
+#: ../src/tooltips.py:789
 msgid "Status: "
 msgstr "מצב: "
 
-#: ../src/tooltips.py:575
+#: ../src/tooltips.py:574
 #, python-format
 msgid "Last status: %s"
 msgstr "מצב אחרון: %s"
 
-#: ../src/tooltips.py:577
+#: ../src/tooltips.py:576
 #, python-format
 msgid " since %s"
 msgstr " מאז %s"
 
-#: ../src/tooltips.py:595
+#: ../src/tooltips.py:594
 msgid "Connected"
 msgstr "מחובר"
 
-#: ../src/tooltips.py:597
+#: ../src/tooltips.py:596
 msgid "Disconnected"
 msgstr "מנותק"
 
 #. ('both' is the normal sub so we don't show it)
-#: ../src/tooltips.py:626
+#: ../src/tooltips.py:624
 msgid "Subscription: "
 msgstr "הרשמה: "
 
-#: ../src/tooltips.py:636
+#: ../src/tooltips.py:634
 msgid "OpenPGP: "
-msgstr "‏OpenPGP: "
+msgstr "‫OpenPGP: "
 
 # מצוי/ה בחוסר פעילות
-#: ../src/tooltips.py:659
+#: ../src/tooltips.py:657
 #, python-format
 msgid "Idle since %s"
 msgstr "בחוסר פעילות מאז %s"
 
-#: ../src/tooltips.py:660
+#: ../src/tooltips.py:658
 #, python-format
 msgid "Idle for %s"
 msgstr "בחוסר פעילות במשך %s"
 
-#: ../src/tooltips.py:714
-msgid "Mood: "
-msgstr "מצב רוח: "
+#: ../src/tooltips.py:712
+#, python-format
+msgid "Mood: %s"
+msgstr "מצב רוח: %s"
 
-#: ../src/tooltips.py:718
-msgid "Activity: "
-msgstr "פעילות: "
+#: ../src/tooltips.py:716
+#, python-format
+msgid "Activity: %s"
+msgstr "פעילות: %s"
 
-#: ../src/tooltips.py:722
-msgid "Tune: "
-msgstr "לחן: "
+#: ../src/tooltips.py:720
+#, python-format
+msgid "Tune: %s"
+msgstr "לחן: %s"
 
-#: ../src/tooltips.py:726
-msgid "Location: "
-msgstr "מיקום: "
+#: ../src/tooltips.py:724
+#, python-format
+msgid "Location: %s"
+msgstr "מיקום: %s"
 
-#: ../src/tooltips.py:751
+#: ../src/tooltips.py:749
 msgid "Download"
 msgstr "הורדה"
 
-#: ../src/tooltips.py:757
+#: ../src/tooltips.py:755
 msgid "Upload"
 msgstr "העלאה"
 
-#: ../src/tooltips.py:764
+#: ../src/tooltips.py:762
 msgid "Type: "
-msgstr "טיפוס: "
+msgstr "סוג: "
 
-#: ../src/tooltips.py:770
+#: ../src/tooltips.py:768
 msgid "Transferred: "
 msgstr "הועברו: "
 
-#: ../src/tooltips.py:773 ../src/tooltips.py:790
+# טרם הותחל
+#: ../src/tooltips.py:771
+#: ../src/tooltips.py:788
 msgid "Not started"
 msgstr "לא הותחלה"
 
-#: ../src/tooltips.py:775
+# עוצרה
+#: ../src/tooltips.py:773
 msgid "Stopped"
 msgstr "נעצרה"
 
-#: ../src/tooltips.py:777 ../src/tooltips.py:780
+#: ../src/tooltips.py:775
+#: ../src/tooltips.py:778
 msgid "Completed"
 msgstr "הושלמה"
 
-#: ../src/tooltips.py:783
+#: ../src/tooltips.py:781
 msgid "?transfer status:Paused"
 msgstr "הושהתה"
 
+# מושהה
 #. stalled is not paused. it is like 'frozen' it stopped alone
-#: ../src/tooltips.py:786
+#: ../src/tooltips.py:784
 msgid "Stalled"
 msgstr "מוקפאת"
 
-#: ../src/tooltips.py:788
+# הקובץ מועבר כעת
+# מועבר כעת קובץ
+#: ../src/tooltips.py:786
 msgid "Transferring"
 msgstr "מעביר כעת"
 
 # השיב
-#: ../src/tooltips.py:825
+#: ../src/tooltips.py:823
 msgid "This service has not yet responded with detailed information"
-msgstr "שירות זה טרם הגיב עם מידע מפורט"
+msgstr "שירות זה עדיין לא הגיב עם מידע מפורט"
 
 # שבור, פגום
-#: ../src/tooltips.py:828
+#: ../src/tooltips.py:826
 msgid ""
 "This service could not respond with detailed information.\n"
 "It is most likely legacy or broken"
 msgstr ""
-"לא היה ביכולתו של שירות זה להגיב עם מידע מפורט.\n"
-"נראה כי שירות זה הינו מיושן או מקוטע"
+"אין ביכולת שירות זה להגיב עם מידע מפורט.\n"
+"כנראה שהשירות הינו מיושן או מקוטע"
+
+#: ../src/upower_listener.py:31
+msgid "Machine going to sleep"
+msgstr "מחשב על סף שינה‫"
 
-#: ../src/vcard.py:312
+#: ../src/vcard.py:296
 msgid "?Client:Unknown"
 msgstr "לא ידוע"
 
-#: ../src/vcard.py:314
+#: ../src/vcard.py:298
 msgid "?OS:Unknown"
 msgstr "לא ידועה"
 
-#: ../src/vcard.py:339
+#: ../src/vcard.py:323
 msgid "?Time:Unknown"
 msgstr "לא ידוע"
 
-#: ../src/vcard.py:363 ../src/vcard.py:373 ../src/vcard.py:581
+#: ../src/vcard.py:347
+#: ../src/vcard.py:357
+#: ../src/vcard.py:565
 #, python-format
 msgid "since %s"
 msgstr "מאז %s"
 
-#: ../src/vcard.py:396
+#: ../src/vcard.py:380
 msgid "?Role in Group Chat:<b>Role:</b>"
 msgstr "<b>תפקיד:</b>"
 
 # שיוך, סיפוח
-#: ../src/vcard.py:400
+#: ../src/vcard.py:384
 msgid "<b>Affiliation:</b>"
 msgstr "<b>השתייכות:</b>"
 
@@ -11395,41 +11533,1103 @@ msgstr "<b>השתייכות:</b>"
 # BUG:?
 # interested at his/her presence
 # interested in his/her presence information
-#: ../src/vcard.py:408
-msgid ""
-"This contact is interested in your presence information, but you are not "
-"interested in his/her presence"
-msgstr ""
-"איש קשר זה מעוניין במידע נוכחותך, אולם אין לך עניין בנוכחותו של איש קשר זה"
+#: ../src/vcard.py:392
+msgid "This contact is interested in your presence information, but you are not interested in his/her presence"
+msgstr "איש קשר זה מעוניין במידע נוכחותך, אולם אינך מגלה עניין בנוכחותו של איש קשר זה"
 
-#: ../src/vcard.py:410
-msgid ""
-"You are interested in the contact's presence information, but he/she is not "
-"interested in yours"
-msgstr ""
-"הינך מגלה עניין במידע הנוכחות איש קשר זה, אולם איש קשר זה אינו מעוניין "
-"בנוכחותך"
+#: ../src/vcard.py:394
+msgid "You are interested in the contact's presence information, but he/she is not interested in yours"
+msgstr "הינך מגלה עניין במידע הנוכחות איש קשר זה, אולם איש קשר זה אינו מעוניין בנוכחותך"
 
 # אחד את השני
-#: ../src/vcard.py:412
+#: ../src/vcard.py:396
 msgid "You and the contact are interested in each other's presence information"
 msgstr "הינך והן איש הקשר מעוניינים במידע הנוכחות של זה את זה"
 
 #. None
-#: ../src/vcard.py:414
-msgid ""
-"You are not interested in the contact's presence, and neither he/she is "
-"interested in yours"
+#: ../src/vcard.py:398
+msgid "You are not interested in the contact's presence, and neither he/she is interested in yours"
 msgstr "אין לך עניין בנוכחות של איש הקשר, וכך גם זה לא מעוניין בנוכחותך"
 
-#: ../src/vcard.py:421
+#: ../src/vcard.py:405
 msgid "You are waiting contact's answer about your subscription request"
 msgstr "הינך מחכה למענה של איש קשר בנוגע לבקשת רישומך"
 
-#: ../src/vcard.py:423
+#: ../src/vcard.py:407
 msgid "There is no pending subscription request."
 msgstr "לא קיימת שום בקשת הרשמה ממתינה."
 
-#: ../src/vcard.py:428 ../src/vcard.py:482 ../src/vcard.py:604
+#: ../src/vcard.py:412
+#: ../src/vcard.py:466
+#: ../src/vcard.py:588
 msgid " resource with priority "
 msgstr " משאב עם עדיפות "
+
+# מיידים - cast ; מידיים - from
+#~ msgid "Gajim Instant Messenger"
+#~ msgstr "Gajim מסרים מיידיים"
+#~ msgid "Fishing"
+#~ msgstr "דג"
+#~ msgid "Continue"
+#~ msgstr "המשך"
+#~ msgid "Requires python-farstream."
+#~ msgstr "יש צורך בהתקנת python-farstream."
+#~ msgid "Contacts"
+#~ msgstr "אנשי־קשר"
+#~ msgid "@"
+#~ msgstr "@"
+#~ msgid "Choose Client Cert"
+#~ msgstr "נא לבחור תעודת לקוח"
+#~ msgid "The path to the client certificate and key in PKCS#12 format"
+#~ msgstr "הנתיב אל תעודת הלקוח והמפתח בתסדיר PKCS#12"
+#~ msgid "<b>Actions</b>"
+#~ msgstr "<b>פעולות</b>"
+#~ msgid "<b>Conditions</b>"
+#~ msgstr "<b>Conditions</b>"
+#~ msgid "Advanced Actions"
+#~ msgstr "פעולות מתקדמות"
+#~ msgid "Advanced Notifications Control"
+#~ msgstr "בקרת התראות מתקדמת"
+#~ msgid "All statuses"
+#~ msgstr "כל המצבים"
+# עסוק (Avahi Discovery: TXT status = dnd)
+# לא להפריע Do not disturb
+#~ msgid "Busy "
+#~ msgstr "נא לא להפריע "
+#~ msgid "Contact Change Status "
+#~ msgstr "איש־הקשר החליף מצב־חיבור "
+#~ msgid "Contact Disconnected "
+#~ msgstr "איש־הקשר מנותק "
+#~ msgid "Don't have "
+#~ msgstr "Don't have "
+#~ msgid "File Transfer Started "
+#~ msgstr "העברת קובץ החלה "
+#~ msgid "Group Chat Message Highlight "
+#~ msgstr "הודעת שיחת קבוצה מובלטות "
+#~ msgid "Group Chat Message Received "
+#~ msgstr "התקבלה הודעה משיחת קבוצה"
+#~ msgid "Have "
+#~ msgstr "Have "
+#~ msgid "Launch a command"
+#~ msgstr "הרצת פקודה"
+#~ msgid "One or more special statuses..."
+#~ msgstr "מצב־חיבור מיוחד אחד או יותר..."
+#~ msgid "Online / Free For Chat"
+#~ msgstr "מקוון \\ פנוי לשיחה"
+#~ msgid "Play a sound"
+#~ msgstr "השמעת צליל"
+#~ msgid "Receive a Message"
+#~ msgstr "קבלת הודעה"
+# מתי או כאשר
+#~ msgid "When "
+#~ msgstr "כאשר "
+#~ msgid "_Disable auto opening chat window"
+#~ msgstr "_נטרול פתיחה אוטומטית של חלון שיחה"
+# what does it mean?
+#~ msgid "_Disable existing popup window"
+#~ msgstr "_נטרול חלון מוקפץ קיים"
+#, fuzzy
+#~ msgid "_Disable existing sound for this event"
+#~ msgstr "_נטרול צלילי existing עבור אירוע זה"
+
+# לוח תורנויות
+#~ msgid "_Disable showing event in roster"
+#~ msgstr "_נטרול הצגת אירוע בלוח החברים"
+#~ msgid "_Disable showing event in systray"
+#~ msgstr "_נטרול הצגת אירוע במגש המערכת"
+#~ msgid "_Inform me with a popup window"
+#~ msgstr "_יידע אותי באמצעות חלון מוקפץ"
+#~ msgid "_Open chat window with user"
+#~ msgstr "_פתיחת חלון שיחה עם משתמש"
+#~ msgid "_Show event in roster"
+#~ msgstr "ה_צגת אירוע בלוח החברים"
+#~ msgid "_Show event in systray"
+#~ msgstr "ה_צגת אירוע במגש המערכת"
+#~ msgid "and I "
+#~ msgstr "ואני "
+#, fuzzy
+#~ msgid "contact(s)"
+#~ msgstr "איש־קשר"
+
+#~ msgid "for "
+#~ msgstr "עבור "
+
+#~ msgid "group(s)"
+#~ msgstr "קבוצה/ות"
+
+# כאשר אני אצל
+#, fuzzy
+#~ msgid "when I'm in"
+#~ msgstr "when I'm in"
+
+#~ msgid "label"
+#~ msgstr "תווית"
+
+#~ msgid "Advanced..."
+#~ msgstr "מתקדם..."
+
+#~ msgid "Always use GNOME default applications"
+#~ msgstr "שימוש תמידי ביישומים המשתמטים של GNOME"
+
+#~ msgid "Always use Xfce default applications"
+#~ msgstr "שימוש תמידי ביישומים המשתמטים של Xfce"
+
+# איתור אוטומטי בכל פעם/עת שהיישום Gajim יאותחל
+#~ msgid "Autodetect on every Gajim startup"
+#~ msgstr "איתור אוטומטי בכל הפעלה של Gajim"
+# BUG: Systray icon
+#~ msgid "Show systray:"
+#~ msgstr "הצגת צלמית מגש המערכת:"
+#~ msgid "_Send Single Message..."
+#~ msgstr "_שליחת הודעה בודדת..."
+#~ msgid "User avatar:"
+#~ msgstr "אווטאר משתמש:"
+# BUG: insterting (TYPO)
+#, fuzzy
+#~ msgid ""
+#~ "If True, Gajim will convert string between $$ and $$ to an image using "
+#~ "dvips and convert before insterting it in chat window."
+#~ msgstr ""
+#~ "במידה והעדפה זו מופעלת, Gajim ימיר מחרוזת בין  $$ לבין $$ אל תמונה "
+#~ "באמצעות dvips וימיר לפני insterting אל חלון שיחה."
+
+#, fuzzy
+#~ msgid "'yes', 'no', or 'both'"
+#~ msgstr "'כן', 'לא', או 'שניהן'"
+
+#, fuzzy
+#~ msgid "'yes', 'no' or ''"
+#~ msgstr "'כן', 'לא' או ''"
+
+#~ msgid "Nickname not allowed: %s"
+#~ msgstr "כינוי לא מורשה: %s"
+
+#~ msgid "we are now subscribed to %s"
+#~ msgstr "אנחנו רשומים כעת אל %s"
+
+#~ msgid "we are now unsubscribed from %s"
+#~ msgstr "אנחנו כבר לא רשומים אל %s"
+
+# Mixed RTL with LTR
+# Needs to be tested
+#~ msgid "Error executing \"%(command)s\": %(error)s"
+#~ msgstr "שגיאה בהרצת ‫\"%(command)s\": ‫%(error)s"
+#~ msgid "error: cannot open %s for reading"
+#~ msgstr "שגיאה: לא ניתן לפתוח את הקובץ %s לקריאה"
+#~ msgid "Unable to bind to port %s."
+#~ msgstr "לא ניתן לכרוך אל פתחה %s."
+# שיש לך
+#~ msgid ""
+#~ "Maybe you have another running instance of Gajim. File Transfer will be "
+#~ "cancelled."
+#~ msgstr "יכול להיות שקיים תהליך אחר של Gajim שמורץ כעת. העברת קובץ תסתיים."
+#~ msgid "A GTK+ jabber client"
+#~ msgstr "A GTK+ jabber client"
+#, fuzzy
+#~ msgid "Condition"
+#~ msgstr "Condition"
+
+#~ msgid "when I am "
+#~ msgstr "כאשר אני "
+
+#~ msgid "Requires pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)."
+#~ msgstr ""
+#~ "יש צורך בהתקנת pybonjour \n"
+#~ "http://o2s.csail.mit.edu/o2s-wiki/pybonjour."
+
+#~ msgid "Requires gpg and python-GnuPGInterface."
+#~ msgstr "יש צורך בהתקנת gpg וגם python-GnuPGInterface."
+
+#~ msgid "LaTeX"
+#~ msgstr "LaTeX"
+
+# Transform to?
+# להפוך ל-
+# הפיכה אל
+# between what?
+#, fuzzy
+#~ msgid "Transform LaTeX expressions between $$ $$."
+#~ msgstr "שינוי ביטוי LaTeX בין $$ $$."
+
+# BUG? True >> Activated
+#~ msgid ""
+#~ "Requires texlive-latex-base and dvipng. You have to set 'use_latex' to "
+#~ "True in the Advanced Configuration Editor."
+#~ msgstr ""
+#~ "יש צורך בהתקנת texlive-latex-base וגם dvipng. עליך להגדיר את האפשרות "
+#~ "'use_latex' אל מופעלת בתוך עורך התצורה המתקדם."
+# Is it ok to translate to: All is included in MikTeX
+#~ msgid ""
+#~ "Requires texlive-latex-base and dvipng (All is in MikTeX). You have to "
+#~ "set 'use_latex' to True in the Advanced Configuration Editor."
+#~ msgstr ""
+#~ "יש צורך בהתקנת texlive-latex-base וגם dvipng (הכל כלול בתוך MikTeX). עליך "
+#~ "להגדיר את האפשרות 'use_latex' אל מופעלת בתוך עורך התצורה המתקדם."
+#, fuzzy
+#~ msgid "Disk WriteError"
+#~ msgstr "כונן WriteError"
+
+#~ msgid "Subject: %s"
+#~ msgstr "נושא: %s"
+
+#~ msgid "Account Modification"
+#~ msgstr "Account Modification"
+
+#~ msgid ""
+#~ "Check this so Gajim will connect in port 5223 where legacy servers are "
+#~ "expected to have SSL capabilities. Note that Gajim uses TLS encryption by "
+#~ "default if broadcasted by the server, and with this option enabled TLS "
+#~ "will be disabled"
+#~ msgstr ""
+#~ "Tick this so Gajim will connect in port 5223 where legacy servers are "
+#~ "expected to have SSL capabilities. Note that Gajim uses TLS encryption by "
+#~ "default if broadcasted by the server, and with this option enabled TLS "
+#~ "will be disabled"
+
+#~ msgid "Edit Personal Information..."
+#~ msgstr "Edit Personal Information..."
+
+#~ msgid "Hostname: "
+#~ msgstr "Hostname: "
+
+#~ msgid ""
+#~ "If checked, Gajim will store the password in ~/.gajim/config with 'read' "
+#~ "permission only for you"
+#~ msgstr ""
+#~ "If ticked, Gajim will store the password in ~/.gajim/config with 'read' "
+#~ "permission only for you"
+
+#~ msgid "Port: "
+#~ msgstr "Port: "
+
+#~ msgid "Proxy:"
+#~ msgstr "Proxy:"
+
+#~ msgid "Save _passphrase (insecure)"
+#~ msgstr "Save _passphrase (insecure)"
+
+#~ msgid "Send keep-alive packets"
+#~ msgstr "Send keep-alive packets"
+
+#~ msgid "Use _SSL (legacy)"
+#~ msgstr "Use _SSL (legacy)"
+
+#~ msgid "_Adjust to status"
+#~ msgstr "_Adjust to status"
+
+#~ msgid "gtk-add"
+#~ msgstr "gtk-add"
+
+#~ msgid "gtk-close"
+#~ msgstr "gtk-close"
+
+#~ msgid "gtk-remove"
+#~ msgstr "gtk-remove"
+
+#~ msgid ""
+#~ "Receive a Message\n"
+#~ "Contact Disconnected \n"
+#~ "Contact Change Status \n"
+#~ "Group Chat Message Highlight \n"
+#~ "Group Chat Message Received \n"
+#~ "File Transfer Request \n"
+#~ "File Transfer Started \n"
+#~ "File Transfer Finished"
+#~ msgstr ""
+#~ "Receive a Message\n"
+#~ "Contact Disconnected \n"
+#~ "Contact Change Status \n"
+#~ "Group Chat Message Highlight \n"
+#~ "Group Chat Message Received \n"
+#~ "File Transfer Request \n"
+#~ "File Transfer Started \n"
+#~ "File Transfer Finished"
+
+#~ msgid ""
+#~ "contact(s)\n"
+#~ "group(s)\n"
+#~ "everybody"
+#~ msgstr ""
+#~ "contact(s)\n"
+#~ "group(s)\n"
+#~ "everybody"
+
+#~ msgid ""
+#~ "Account row\n"
+#~ "Group row\n"
+#~ "Contact row\n"
+#~ "Chat Banner"
+#~ msgstr ""
+#~ "Account row\n"
+#~ "Group row\n"
+#~ "Contact row\n"
+#~ "Chat Banner"
+
+#~ msgid ""
+#~ "Enter JID or Contact name\n"
+#~ "Groupchat Histories\n"
+#~ "All Chat Histories"
+#~ msgstr ""
+#~ "Enter JID or Contact name\n"
+#~ "Groupchat Histories\n"
+#~ "All Chat Histories"
+
+#~ msgid "Manage Accounts"
+#~ msgstr "Manage Accounts"
+
+#~ msgid "gtk-delete"
+#~ msgstr "gtk-delete"
+
+#~ msgid "Send a file (Ctrl+F)"
+#~ msgstr "Send a file (Ctrl+F)"
+
+#~ msgid ""
+#~ "All chat states\n"
+#~ "Composing only\n"
+#~ "Disabled"
+#~ msgstr ""
+#~ "All chat states\n"
+#~ "Composing only\n"
+#~ "Disabled"
+
+#~ msgid ""
+#~ "Autodetect on every Gajim startup\n"
+#~ "Always use GNOME default applications\n"
+#~ "Always use KDE default applications\n"
+#~ "Always use Xfce default applications\n"
+#~ "Custom"
+#~ msgstr ""
+#~ "Autodetect on every Gajim startup\n"
+#~ "Always use GNOME default applications\n"
+#~ "Always use KDE default applications\n"
+#~ "Always use Xfce default applications\n"
+#~ "Custom"
+
+#~ msgid ""
+#~ "Detached roster with detached chats\n"
+#~ "Detached roster with single chat\n"
+#~ "Single window for everything\n"
+#~ "Detached roster with chat grouped by account\n"
+#~ "Detached roster with chat grouped by type"
+#~ msgstr ""
+#~ "Detached roster with detached chats\n"
+#~ "Detached roster with single chat\n"
+#~ "Single window for everything\n"
+#~ "Detached roster with chat grouped by account\n"
+#~ "Detached roster with chat grouped by type"
+
+#~ msgid ""
+#~ "Pop it up\n"
+#~ "Notify me about it\n"
+#~ "Show only in roster"
+#~ msgstr ""
+#~ "Pop it up\n"
+#~ "Notify me about it\n"
+#~ "Show only in roster"
+
+#~ msgid ""
+#~ "none\n"
+#~ "both\n"
+#~ "from\n"
+#~ "to"
+#~ msgstr ""
+#~ "none\n"
+#~ "both\n"
+#~ "from\n"
+#~ "to"
+
+#~ msgid "gtk-cancel"
+#~ msgstr "gtk-cancel"
+
+#~ msgid "_Quit"
+#~ msgstr "_Quit"
+
+#~ msgid "Enable"
+#~ msgstr "Enable"
+
+#~ msgid "Wrong host"
+#~ msgstr "Wrong host"
+
+#~ msgid "Invalid local address? :-O"
+#~ msgstr "Invalid local address? :-O"
+
+#~ msgid "pysqlite2 (aka python-pysqlite2) dependency is missing. Exiting..."
+#~ msgstr "pysqlite2 (aka python-pysqlite2) dependency is missing. Exiting..."
+
+#~ msgid "Banners and clickable links"
+#~ msgstr "Banners and clickable links"
+
+#~ msgid "Ability to have clickable URLs in chat and groupchat window banners."
+#~ msgstr ""
+#~ "Ability to have clickable URLs in chat and groupchat window banners."
+
+#~ msgid "Requires python-sexy."
+#~ msgstr "Requires python-sexy."
+
+#~ msgid "GTK+ runtime is missing libglade support"
+#~ msgstr "GTK+ runtime is missing libglade support"
+
+#~ msgid ""
+#~ "Please remove your current GTK+ runtime and install the latest stable "
+#~ "version from %s"
+#~ msgstr ""
+#~ "Please remove your current GTK+ runtime and install the latest stable "
+#~ "version from %s"
+
+#~ msgid ""
+#~ "Please make sure that GTK+ and PyGTK have libglade support in your system."
+#~ msgstr ""
+#~ "Please make sure that GTK+ and PyGTK have libglade support in your system."
+
+#~ msgid "Gajim needs PySQLite2 to run"
+#~ msgstr "Gajim needs PySQLite2 to run"
+
+#~ msgid "_Incoming message:"
+#~ msgstr "_Incoming message:"
+
+#~ msgid "_Outgoing message:"
+#~ msgstr "_Outgoing message:"
+
+#~ msgid ""
+#~ "The host %s you configured as the ft_add_hosts_to_send advanced option is "
+#~ "not valid, so ignored."
+#~ msgstr ""
+#~ "The host %s you configured as the ft_add_hosts_to_send advanced option is "
+#~ "not valid, so ignored."
+
+#~ msgid "OpenPGP passphrase was not given"
+#~ msgstr "OpenPGP passphrase was not given"
+
+#~ msgid ""
+#~ "To continue sending and receiving messages, you will need to reconnect."
+#~ msgstr ""
+#~ "To continue sending and receiving messages, you will need to reconnect."
+
+#~ msgid ""
+#~ "You are not connected or not visible to others. Your message could not be "
+#~ "sent."
+#~ msgstr ""
+#~ "You are not connected or not visible to others. Your message could not be "
+#~ "sent."
+
+#~ msgid "[This message is encrypted]"
+#~ msgstr "[This message is encrypted]"
+
+#~ msgid "%i days ago"
+#~ msgstr "%i days ago"
+
+#~ msgid "Trayicon"
+#~ msgstr "Trayicon"
+
+#~ msgid "A icon in systemtray reflecting the current presence."
+#~ msgstr "A icon in systemtray reflecting the current presence."
+
+#~ msgid ""
+#~ "Requires python-gnome2-extras or compiled trayicon module from Gajim "
+#~ "sources."
+#~ msgstr ""
+#~ "Requires python-gnome2-extras or compiled trayicon module from Gajim "
+#~ "sources."
+
+#~ msgid "Requires PyGTK >= 2.10."
+#~ msgstr "Requires PyGTK >= 2.10."
+
+#~ msgid "gtk-ok"
+#~ msgstr "gtk-ok"
+
+#~ msgid "Add Special _Notification"
+#~ msgstr "Add Special _Notification"
+
+#~ msgid "Assign Open_PGP Key"
+#~ msgstr "Assign Open_PGP Key"
+
+#~ msgid "Commands: %s"
+#~ msgstr "Commands: %s"
+
+#~ msgid ""
+#~ "Usage: /%(command)s <action>, sends action to the current group chat. Use "
+#~ "third person. (e.g. /%(command)s explodes.)"
+#~ msgstr ""
+#~ "Usage: /%(command)s <action>, sends action to the current group chat. Use "
+#~ "third person. (e.g. /%(command)s explodes.)"
+
+#~ msgid "No help info for /%s"
+#~ msgstr "No help info for /%s"
+
+#~ msgid "Enable link-local/zeroconf messaging"
+#~ msgstr "Enable link-local/zeroconf messaging"
+
+#~ msgid "Nickname not found: %s"
+#~ msgstr "Nickname not found: %s"
+
+#~ msgid "This group chat has no subject"
+#~ msgstr "This group chat has no subject"
+
+#~ msgid "Invited %(contact_jid)s to %(room_jid)s."
+#~ msgstr "Invited %(contact_jid)s to %(room_jid)s."
+
+#~ msgid ""
+#~ "There is an ambiguity: %d nicks match.\n"
+#~ " Please use graphical interface "
+#~ msgstr ""
+#~ "There is an ambiguity: %d nicks match.\n"
+#~ " Please use graphical interface "
+
+#~ msgid ""
+#~ "There is an ambiguity: %d nicks match.\n"
+#~ " Please use graphical interface"
+#~ msgstr ""
+#~ "There is an ambiguity: %d nicks match.\n"
+#~ " Please use graphical interface"
+
+#~ msgid ""
+#~ "Usage: /%s <nickname|JID> [reason], bans the JID from the group chat. The "
+#~ "nickname of an occupant may be substituted, but not if it contains \"@\". "
+#~ "If the JID is currently in the group chat, he/she/it will also be kicked."
+#~ msgstr ""
+#~ "Usage: /%s <nickname|JID> [reason], bans the JID from the group chat. The "
+#~ "nickname of an occupant may be substituted, but not if it contains \"@\". "
+#~ "If the JID is currently in the group chat, he/she/it will also be kicked."
+
+#~ msgid ""
+#~ "Usage: /%s [reason], closes the current window or tab, displaying reason "
+#~ "if specified."
+#~ msgstr ""
+#~ "Usage: /%s [reason], closes the current window or tab, displaying reason "
+#~ "if specified."
+
+#~ msgid ""
+#~ "Usage: /%s <JID> [reason], invites JID to the current group chat, "
+#~ "optionally providing a reason."
+#~ msgstr ""
+#~ "Usage: /%s <JID> [reason], invites JID to the current group chat, "
+#~ "optionally providing a reason."
+
+#~ msgid ""
+#~ "Usage: /%s <room>@<server>[/nickname], offers to join room@server "
+#~ "optionally using specified nickname."
+#~ msgstr ""
+#~ "Usage: /%s <room>@<server>[/nickname], offers to join room@server "
+#~ "optionally using specified nickname."
+
+#~ msgid ""
+#~ "Usage: /%s <nickname> [reason], removes the occupant specified by "
+#~ "nickname from the group chat and optionally displays a reason."
+#~ msgstr ""
+#~ "Usage: /%s <nickname> [reason], removes the occupant specified by "
+#~ "nickname from the group chat and optionally displays a reason."
+
+#~ msgid ""
+#~ "Usage: /%s <nickname> [message], opens a private message window and sends "
+#~ "message to the occupant specified by nickname."
+#~ msgstr ""
+#~ "Usage: /%s <nickname> [message], opens a private message window and sends "
+#~ "message to the occupant specified by nickname."
+
+#~ msgid "Usage: /%s <nickname>, changes your nickname in current group chat."
+#~ msgstr "Usage: /%s <nickname>, changes your nickname in current group chat."
+
+#~ msgid ""
+#~ "Usage: /%s [topic], displays or updates the current group chat topic."
+#~ msgstr ""
+#~ "Usage: /%s [topic], displays or updates the current group chat topic."
+
+#~ msgid ""
+#~ "Usage: /%s <message>, sends a message without looking for other commands."
+#~ msgstr ""
+#~ "Usage: /%s <message>, sends a message without looking for other commands."
+
+#~ msgid ""
+#~ "Usage: /%s <nickname>, prevent <nickname> to send you messages or private "
+#~ "messages."
+#~ msgstr ""
+#~ "Usage: /%s <nickname>, prevent <nickname> to send you messages or private "
+#~ "messages."
+
+#~ msgid ""
+#~ "Usage: /%s <nickname>, allow <nickname> to send you messages and private "
+#~ "messages."
+#~ msgstr ""
+#~ "Usage: /%s <nickname>, allow <nickname> to send you messages and private "
+#~ "messages."
+
+#~ msgid "Click to see features (like MSN, ICQ transports) of jabber servers"
+#~ msgstr "Click to see features (like MSN, ICQ transports) of jabber servers"
+
+#~ msgid "Servers Features"
+#~ msgstr "Servers Features"
+
+#~ msgid "Your JID:"
+#~ msgstr "Your JID:"
+
+#~ msgid "Name:"
+#~ msgstr "Name:"
+
+#~ msgid "_Host:"
+#~ msgstr "_Host:"
+
+#~ msgid "Select the account with which to synchronise"
+#~ msgstr "Select the account with which to synchronise"
+
+#~ msgid "Modify Account"
+#~ msgstr "Modify Account"
+
+#~ msgid ""
+#~ "%(title)s by %(artist)s\n"
+#~ "from %(source)s"
+#~ msgstr ""
+#~ "%(title)s by %(artist)s\n"
+#~ "from %(source)s"
+
+#~ msgid "Gajim account %s"
+#~ msgstr "Gajim account %s"
+
+#~ msgid "Duplicate Jabber ID"
+#~ msgstr "Duplicate Jabber ID"
+
+#~ msgid "This account is already configured in Gajim."
+#~ msgstr "This account is already configured in Gajim."
+
+#~ msgid "PyOpenSSL"
+#~ msgstr "PyOpenSSL"
+
+#~ msgid "gajim-remote"
+#~ msgstr "gajim-remote"
+
+#~ msgid "OpenGPG"
+#~ msgstr "OpenGPG"
+
+#~ msgid "gnome-keyring"
+#~ msgstr "gnome-keyring"
+
+#~ msgid ""
+#~ "Requires python-gnome2-extras or compilation of gtkspell module from "
+#~ "Gajim sources."
+#~ msgstr ""
+#~ "Requires python-gnome2-extras or compilation of gtkspell module from "
+#~ "Gajim sources."
+
+#~ msgid "Notification-daemon"
+#~ msgstr "Notification-daemon"
+
+#~ msgid "Idle"
+#~ msgstr "Idle"
+
+#~ msgid "Requires compilation of the idle module from Gajim sources."
+#~ msgstr "Requires compilation of the idle module from Gajim sources."
+
+#~ msgid "libsexy"
+#~ msgstr "libsexy"
+
+#~ msgid "File transfer stopped by the contact at the other end"
+#~ msgstr "File transfer stopped by the contact at the other end"
+
+#~ msgid "Generic"
+#~ msgstr "Generic"
+
+#~ msgid "Mood"
+#~ msgstr "Mood"
+
+#~ msgid "Activity"
+#~ msgstr "Activity"
+
+#~ msgid "%s has not broadcast an OpenPGP key, nor has one been assigned"
+#~ msgstr "%s has not broadcast an OpenPGP key, nor has one been assigned"
+
+#~ msgid "No such command: /%s (if you want to send this, prefix it with /say)"
+#~ msgstr ""
+#~ "No such command: /%s (if you want to send this, prefix it with /say)"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: /%s <action>, sends action to the current group chat. Use third "
+#~ "person. (e.g. /%s explodes.)"
+#~ msgstr ""
+#~ "Usage: /%(command)s <action>, sends action to the current group chat. Use "
+#~ "third person. (e.g. /%(command)s explodes.)"
+
+#, fuzzy
+#~ msgid "Encryption enabled"
+#~ msgstr "E2E encryption enabled"
+
+#, fuzzy
+#~ msgid "Encryption disabled"
+#~ msgstr "E2E encryption disabled"
+
+#~ msgid ""
+#~ "If checked, Gajim will sort contacts in roster window and groupchats by "
+#~ "their status and not by the shown name"
+#~ msgstr ""
+#~ "If ticked, Gajim will sort contacts in roster window and groupchats by "
+#~ "their status and not by the shown name"
+
+#~ msgid "A_ccounts"
+#~ msgstr "A_ccounts"
+
+#~ msgid "<b>\"%(title)s\"</b> by "
+#~ msgstr "<b>\"%(title)s\"</b> by "
+
+#~ msgid "%(title)s by %(artist)s\n"
+#~ msgstr "%(title)s by %(artist)s\n"
+
+#~ msgid "The username used to identify the Last.fm account."
+#~ msgstr "The username used to identify the Last.fm account."
+
+#~ msgid "Thoughtful"
+#~ msgstr "Thoughtful"
+
+#~ msgid "Network Manager support not available"
+#~ msgstr "Network Manager support not available"
+
+#~ msgid "Session Management support not available (missing gnome.ui module)"
+#~ msgstr "Session Management support not available (missing gnome.ui module)"
+
+#~ msgid "_Retype Password:"
+#~ msgstr "_Retype Password:"
+
+#~ msgid ""
+#~ "If checked, all local contacts that use a Bonjour compatible chat client "
+#~ "(like iChat, Trillian or Gaim) will be shown in roster. You don't need to "
+#~ "be connected to a jabber server for it to work.\n"
+#~ "This is only available if python-avahi is installed and avahi-daemon is "
+#~ "running."
+#~ msgstr ""
+#~ "If ticked, all local contacts that use a Bonjour compatible chat client "
+#~ "(like iChat, Trillian or Gaim) will be shown in roster. You don't need to "
+#~ "be connected to a jabber server for it to work.\n"
+#~ "This is only available if python-avahi is installed and avahi-daemon is "
+#~ "running."
+
+#~ msgid ""
+#~ "If you have 2 or more accounts and this is checked, Gajim will list all "
+#~ "contacts as if you had one account"
+#~ msgstr ""
+#~ "If you have two or more accounts and this is ticked, Gajim will list all "
+#~ "contacts as if you had one account"
+
+#~ msgid "_Enable link-local messaging"
+#~ msgstr "_Enable link-local messaging"
+
+#~ msgid "2003-12-13T18:30:02Z"
+#~ msgstr "2003-12-13T18:30:02Z"
+
+#~ msgid "<small>Romeo and Juliet</small>"
+#~ msgstr "<small>Romeo and Juliet</small>"
+
+#~ msgid "Soliloquy"
+#~ msgstr "Soliloquy"
+
+#~ msgid "_Compact View    Alt+C"
+#~ msgstr "_Compact View    Alt+C"
+
+#~ msgid "Click to see past conversation in this room"
+#~ msgstr "Click to see past conversation in this room"
+
+#~ msgid "Build custom query"
+#~ msgstr "Build custom query"
+
+#~ msgid "Query Builder..."
+#~ msgstr "Query Builder..."
+
+#~ msgid "Invitation Received"
+#~ msgstr "Invitation Received"
+
+#~ msgid "<b>Format of a line</b>"
+#~ msgstr "<b>Format of a line</b>"
+
+#~ msgid "<b>Interface Customization</b>"
+#~ msgstr "<b>Interface Customisation</b>"
+
+#~ msgid "Also known as iChat style"
+#~ msgstr "Also known as iChat style"
+
+#~ msgid ""
+#~ "An example: If you have enabled status message for away, Gajim won't ask "
+#~ "you anymore for a status message when you change your status to away; it "
+#~ "will use the default one set here"
+#~ msgstr ""
+#~ "An example: If you have enabled status message for away, Gajim won't ask "
+#~ "you anymore for a status message when you change your status to away; it "
+#~ "will use the default one set here"
+
+#~ msgid "Chat"
+#~ msgstr "Chat"
+
+#~ msgid ""
+#~ "Determined by sender\n"
+#~ "Chat message\n"
+#~ "Single message"
+#~ msgstr ""
+#~ "Determined by sender\n"
+#~ "Chat message\n"
+#~ "Single message"
+
+#~ msgid "E_very 5 minutes"
+#~ msgstr "E_very 5 minutes"
+
+#~ msgid ""
+#~ "Gajim will automatically show new events by popping up the relative window"
+#~ msgstr ""
+#~ "Gajim will automatically show new events by popping up the relative window"
+
+#~ msgid ""
+#~ "Gajim will notify you for new events via a popup in the bottom right of "
+#~ "the screen"
+#~ msgstr ""
+#~ "Gajim will notify you for new events via a pop-up in the bottom right of "
+#~ "the screen"
+
+#~ msgid ""
+#~ "Gajim will notify you via a popup window in the bottom right of the "
+#~ "screen about contacts that just signed in"
+#~ msgstr ""
+#~ "Gajim will notify you via a pop-up window in the bottom right of the "
+#~ "screen about contacts that just signed in"
+
+#~ msgid ""
+#~ "Gajim will only change the icon of the contact that triggered the new "
+#~ "event"
+#~ msgstr ""
+#~ "Gajim will only change the icon of the contact that triggered the new "
+#~ "event"
+
+#~ msgid ""
+#~ "If checked, Gajim will remember the roster and chat window positions in "
+#~ "the screen and the sizes of them next time you run it"
+#~ msgstr ""
+#~ "If ticked, Gajim will remember the roster and chat window positions in "
+#~ "the screen and the sizes of them next time you run it"
+
+#~ msgid ""
+#~ "Never\n"
+#~ "Always\n"
+#~ "Per account\n"
+#~ "Per type"
+#~ msgstr ""
+#~ "Never\n"
+#~ "Always\n"
+#~ "Per account\n"
+#~ "Per type"
+
+#~ msgid "Outgoing Chat state noti_fications:"
+#~ msgstr "Outgoing Chat state noti_fications:"
+
+#~ msgid "Print time:"
+#~ msgstr "Print time:"
+
+#~ msgid "Save _position and size for roster and chat windows"
+#~ msgstr "Save _position and size for roster and chat windows"
+
+#~ msgid "Set status message to reflect currently playing _music track"
+#~ msgstr "Set status message to reflect currently playing _music track"
+
+#~ msgid "The auto away status message"
+#~ msgstr "The auto away status message"
+
+#~ msgid "The auto not available status message"
+#~ msgstr "The auto not available status message"
+
+#~ msgid ""
+#~ "When a new event (message, file transfer request etc..) is received, the "
+#~ "following methods may be used to inform you about it. Please note that "
+#~ "events about new messages only occur if it is a new message from a "
+#~ "contact you are not already chatting with"
+#~ msgstr ""
+#~ "When a new event (message, file transfer request etc..) is received, the "
+#~ "following methods may be used to inform you about it. Please note that "
+#~ "events about new messages only occur if it is a new message from a "
+#~ "contact you are not already chatting with"
+
+#~ msgid ""
+#~ "Works for Rhythmbox and Muine players. For more players, please visit "
+#~ "http://trac.gajim.org/wiki/GajimAndMusicPlayer"
+#~ msgstr ""
+#~ "Works for Rhythmbox and Muine players. For more players, please visit "
+#~ "http://trac.gajim.org/wiki/GajimAndMusicPlayer"
+
+#~ msgid "_Advanced Notifications Control..."
+#~ msgstr "_Advanced Notifications Control..."
+
+#~ msgid "_Player:"
+#~ msgstr "_Player:"
+
+#~ msgid "City:"
+#~ msgstr "City:"
+
+#~ msgid "Company:"
+#~ msgstr "Company:"
+
+#~ msgid "Given:"
+#~ msgstr "Given:"
+
+#~ msgid "Middle:"
+#~ msgstr "Middle:"
+
+#~ msgid "Position:"
+#~ msgstr "Position:"
+
+#~ msgid "Prefix:"
+#~ msgstr "Prefix:"
+
+#~ msgid "Role:"
+#~ msgstr "Role:"
+
+#~ msgid "State:"
+#~ msgstr "State:"
+
+#~ msgid "Suffix:"
+#~ msgstr "Suffix:"
+
+#~ msgid "_Remove from Roster"
+#~ msgstr "_Remove from Roster"
+
+#~ msgid "_Filter:"
+#~ msgstr "_Filter:"
+
+#~ msgid "Ask:"
+#~ msgstr "Ask:"
+
+#~ msgid "Client:"
+#~ msgstr "Client:"
+
+#~ msgid "OS:"
+#~ msgstr "OS:"
+
+#~ msgid "Subscription:"
+#~ msgstr "Subscription:"
+
+#~ msgid ""
+#~ "If that is not your language for which you want to highlight misspelled "
+#~ "words, then please set your $LANG as appropriate. Eg. for French do "
+#~ "export LANG=fr_FR or export LANG=fr_FR.UTF-8 in ~/.bash_profile or to "
+#~ "make it global in /etc/profile.\n"
+#~ "\n"
+#~ "Highlighting misspelled words feature will not be used"
+#~ msgstr ""
+#~ "If that is not your language for which you want to highlight misspelt "
+#~ "words, then please set your $LANG as appropriate. Eg. for French do "
+#~ "export LANG=fr_FR or export LANG=fr_FR.UTF-8 in ~/.bash_profile or to "
+#~ "make it global in /etc/profile.\n"
+#~ "\n"
+#~ "Highlighting misspelt words feature will not be used"
+
+#~ msgid "Every %s _minutes"
+#~ msgstr "Every %s _minutes"
+
+#~ msgid "You must enter a password for the new account."
+#~ msgstr "You must enter a password for the new account."
+
+#~ msgid "You will always see him or her as offline."
+#~ msgstr "You will always see him or her as offline."
+
+#~ msgid "%s is now %s (%s)"
+#~ msgstr "%s is now %s (%s)"
+
+#~ msgid "%s is now %s"
+#~ msgstr "%s is now %s"
+
+#~ msgid ""
+#~ "\n"
+#~ "From: %(from_address)s"
+#~ msgstr ""
+#~ "\n"
+#~ "From: %(from_address)s"
+
+#~ msgid ""
+#~ "Usage: %s %s %s \n"
+#~ "\t %s"
+#~ msgstr ""
+#~ "Usage: %s %s %s \n"
+#~ "\t %s"
+
+#~ msgid "Private Chat"
+#~ msgstr "Private Chat"
+
+#~ msgid "Group Chat"
+#~ msgstr "Group Chat"
+
+#~ msgid "%s does not appear to be a valid JID"
+#~ msgstr "%s does not appear to be a valid JID"
+
+#~ msgid "%s - Gajim"
+#~ msgstr "%s - Gajim"
+
+#~ msgid "_New group chat"
+#~ msgstr "_New group chat"
+
+#~ msgid "_Log on"
+#~ msgstr "_Log on"
+
+#~ msgid "Log _off"
+#~ msgstr "Log _off"
+
+#~ msgid "Save passphrase"
+#~ msgstr "Save passphrase"
+
+#~ msgid "Drop %s in group %s"
+#~ msgstr "Drop %s in group %s"
+
+#~ msgid "Hides the buttons in two persons chat window."
+#~ msgstr "Hides the buttons in two persons chat window."
+
+#~ msgid "Connected to server %s:%s with %s"
+#~ msgstr "Connected to server %s:%s with %s"
+
+#~ msgid "invisible"
+#~ msgstr "invisible"
+
+#~ msgid "offline"
+#~ msgstr "offline"
+
+#~ msgid " %d unread single message"
+
+#~ msgid_plural " %d unread single messages"
+#~ msgstr[0] " %d unread single message"
+#~ msgstr[1] " %d unread single messages"
+
+#~ msgid " %d unread group chat message"
+
+#~ msgid_plural " %d unread group chat messages"
+#~ msgstr[0] " %d unread group chat message"
+#~ msgstr[1] " %d unread group chat messages"
+
+#~ msgid " %d unread private message"
+
+#~ msgid_plural " %d unread private messages"
+#~ msgstr[0] " %d unread private message"
+#~ msgstr[1] " %d unread private messages"
+
+#~ msgid "gtk+"
+#~ msgstr "gtk+"
+
+#~ msgid ""
+#~ "Connection to host could not be established: Incorrect answer from server."
+#~ msgstr ""
+#~ "Connection to host could not be established: Incorrect answer from server."
+
+#~ msgid "Connection to host could not be established"
+#~ msgstr "Connection to host could not be established"
+
+#~ msgid "A_fter nickname:"
+#~ msgstr "A_fter nickname:"
+
+#~ msgid "_After time:"
+#~ msgstr "_After time:"
+
+#~ msgid "_Before time:"
+#~ msgstr "_Before time:"
+
+#~ msgid "_Retrieve"
+#~ msgstr "_Retrieve"
+
+#~ msgid "Information published"
+#~ msgstr "Information published"
+
+#~ msgid "Without a connection, you can not get your contact information."
+#~ msgstr "Without a connection, you can not get your contact information."
+
+#~ msgid "This is result of query."
+#~ msgstr "This is result of query."
+
+#~ msgid "Edit items on the list"
+#~ msgstr "Edit items on the list"
diff --git a/po/ru.po b/po/ru.po
index 5514a3c23b4fbc7edca1c6cfa6a1ddff3ab23537..a534086712899c4d81e8cfb092cbc34326d5a668 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -12,18 +12,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ru\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-08-26 09:36+0400\n"
-"PO-Revision-Date: 2013-08-26 10:00+0300\n"
-"Last-Translator: Fomin Denis <fominde@gmail.com>\n"
+"POT-Creation-Date: 2012-11-15 14:27+0400\n"
+"PO-Revision-Date: 2012-11-15 14:56+0300\n"
+"Last-Translator: Fomin Denis <fominde@mail.ru>\n"
 "Language-Team: Linux Support LLC\n"
 "Language: ru\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "X-Poedit-Basepath: /home/test/gajim\n"
-"X-Generator: Poedit 1.5.4\n"
+"X-Generator: Virtaal 0.6.1\n"
 
 #: ../data/gui/account_context_menu.ui.h:1
 #: ../data/gui/zeroconf_context_menu.ui.h:1
@@ -34,11 +33,13 @@ msgstr "_Статус"
 msgid "_Personal Events"
 msgstr "_Расширенный статус"
 
-#: ../data/gui/account_context_menu.ui.h:3 ../data/gui/roster_window.ui.h:3
+#: ../data/gui/account_context_menu.ui.h:3
+#: ../data/gui/roster_window.ui.h:3
 msgid "_Start Chat..."
 msgstr "_Начать беседу..."
 
-#: ../data/gui/account_context_menu.ui.h:4 ../data/gui/roster_window.ui.h:5
+#: ../data/gui/account_context_menu.ui.h:4
+#: ../data/gui/roster_window.ui.h:5
 msgid "Join _Group Chat..."
 msgstr "Войти в _комнату..."
 
@@ -46,7 +47,8 @@ msgstr "Войти в _комнату..."
 msgid "_Add Contact..."
 msgstr "_Добавить контакт..."
 
-#: ../data/gui/account_context_menu.ui.h:6 ../data/gui/roster_window.ui.h:7
+#: ../data/gui/account_context_menu.ui.h:6
+#: ../data/gui/roster_window.ui.h:7
 msgid "_Discover Services"
 msgstr "_Просмотреть сервисы"
 
@@ -180,14 +182,27 @@ msgid "_Finish"
 msgstr "_Закончить"
 
 #: ../data/gui/account_creation_wizard_window.ui.h:30
-#: ../data/gui/accounts_window.ui.h:1 ../data/gui/change_mood_dialog.ui.h:1
-#: ../src/config.py:1253 ../src/config.py:1267 ../src/config.py:1272
-#: ../src/config.py:1320 ../src/config.py:1423 ../src/config.py:1742
-#: ../src/config.py:1747 ../src/config.py:2339 ../src/config.py:2420
-#: ../src/config.py:2435 ../src/config.py:3716 ../src/config.py:3791
-#: ../src/dialogs.py:315 ../src/dialogs.py:317 ../src/dialogs.py:523
-#: ../src/dialogs.py:536 ../src/roster_window.py:3149
-#: ../src/roster_window.py:3155 ../src/roster_window.py:3160
+#: ../data/gui/accounts_window.ui.h:1
+#: ../data/gui/change_mood_dialog.ui.h:1
+#: ../src/config.py:1254
+#: ../src/config.py:1268
+#: ../src/config.py:1273
+#: ../src/config.py:1321
+#: ../src/config.py:1424
+#: ../src/config.py:1739
+#: ../src/config.py:1744
+#: ../src/config.py:2320
+#: ../src/config.py:2399
+#: ../src/config.py:2412
+#: ../src/config.py:3698
+#: ../src/config.py:3773
+#: ../src/dialogs.py:313
+#: ../src/dialogs.py:315
+#: ../src/dialogs.py:521
+#: ../src/dialogs.py:534
+#: ../src/roster_window.py:3214
+#: ../src/roster_window.py:3220
+#: ../src/roster_window.py:3225
 msgid "None"
 msgstr "Нет"
 
@@ -196,24 +211,28 @@ msgid "Accounts"
 msgstr "Учётные записи"
 
 #. Change label for accept_button to action name instead of 'OK'.
-#: ../data/gui/accounts_window.ui.h:3 ../src/dialogs.py:3524
-#: ../src/dialogs.py:3570
+#: ../data/gui/accounts_window.ui.h:3
+#: ../src/dialogs.py:3426
+#: ../src/dialogs.py:3472
 msgid "Add"
 msgstr "Добавить"
 
 #. Change label for accept_button to action name instead of 'OK'.
-#: ../data/gui/accounts_window.ui.h:4 ../src/dialogs.py:3528
-#: ../src/dialogs.py:3625
+#: ../data/gui/accounts_window.ui.h:4
+#: ../src/dialogs.py:3430
+#: ../src/dialogs.py:3527
 msgid "Delete"
 msgstr "Удалить"
 
 #. Rename
-#: ../data/gui/accounts_window.ui.h:5 ../src/roster_window.py:5794
+#: ../data/gui/accounts_window.ui.h:5
+#: ../src/roster_window.py:5844
 msgid "Re_name"
 msgstr "П_ереименовать"
 
 #. XML Console enable checkbutton
-#: ../data/gui/accounts_window.ui.h:6 ../data/gui/xml_console_window.ui.h:3
+#: ../data/gui/accounts_window.ui.h:6
+#: ../data/gui/xml_console_window.ui.h:3
 msgid "_Enable"
 msgstr "_Включить"
 
@@ -222,35 +241,30 @@ msgid "Anonymous authentication"
 msgstr "Анонимная аутентификация"
 
 #: ../data/gui/accounts_window.ui.h:8
-msgid ""
-"Resource is sent to the Jabber server in order to separate the same JID in "
-"two or more parts depending on the number of the clients connected in the "
-"same server with the same account. So you might be connected in the same "
-"account with resource 'Home' and 'Work' at the same time. The resource which "
-"has the highest priority will get the events. (see below)"
-msgstr ""
-"Ресурс отправляется Jabber серверу для того, чтобы различать два и более "
-"клиентов с одинаковой учетной записью, подключенных к одному и тому же "
-"серверу. Таким образом, вы можете одновременно подключиться к одному серверу "
-"с ресурсов 'Дом' или 'Работа'. Ресурс, обладающий большим приоритетом, будет "
-"получать все события. (См. ниже)"
+msgid "Resource is sent to the Jabber server in order to separate the same JID in two or more parts depending on the number of the clients connected in the same server with the same account. So you might be connected in the same account with resource 'Home' and 'Work' at the same time. The resource which has the highest priority will get the events. (see below)"
+msgstr "Ресурс отправляется Jabber серверу для того, чтобы различать два и более клиентов с одинаковой учетной записью, подключенных к одному и тому же серверу. Таким образом, вы можете одновременно подключиться к одному серверу с ресурсов 'Дом' или 'Работа'. Ресурс, обладающий большим приоритетом, будет получать все события. (См. ниже)"
 
 #. No configured account
-#: ../data/gui/accounts_window.ui.h:9 ../data/gui/roster_window.ui.h:1
-#: ../data/gajim.desktop.in.in.h:1 ../src/common/helpers.py:1168
-#: ../src/common/helpers.py:1180 ../src/notify.py:316 ../src/notify.py:339
-#: ../src/notify.py:389 ../src/notify.py:405
+#: ../data/gui/accounts_window.ui.h:9
+#: ../data/gui/roster_window.ui.h:1
+#: ../data/gajim.desktop.in.in.h:1
+#: ../src/common/helpers.py:1168
+#: ../src/common/helpers.py:1180
+#: ../src/notify.py:316
+#: ../src/notify.py:339
+#: ../src/notify.py:389
+#: ../src/notify.py:405
 msgid "Gajim"
 msgstr "Gajim"
 
 #: ../data/gui/accounts_window.ui.h:10
+#, fuzzy
 msgid "Synchronize contacts"
-msgstr "Синхронизировать контакты"
+msgstr "Объединить контакты"
 
 #: ../data/gui/accounts_window.ui.h:11
 msgid "Click to request authorization to all contacts of another account"
-msgstr ""
-"Щелкните, чтобы запросить авторизацию у всех контактов другой учетной записи"
+msgstr "Щелкните, чтобы запросить авторизацию у всех контактов другой учетной записи"
 
 #: ../data/gui/accounts_window.ui.h:12
 msgid "Chan_ge Password"
@@ -265,15 +279,8 @@ msgid "Administration operations"
 msgstr "Административные операции"
 
 #: ../data/gui/accounts_window.ui.h:15
-msgid ""
-"Priority is used in Jabber to determine who gets the events from the jabber "
-"server when two or more clients are connected using the same account; The "
-"client with the highest priority gets the events"
-msgstr ""
-"Приоритет используется в Jabber для определения того, кто будет получать "
-"события от jabber сервера когда подсоединены два и более клиента с одной и "
-"той же учетной записью. Клиент с наибольшим приоритетом будет получать "
-"события"
+msgid "Priority is used in Jabber to determine who gets the events from the jabber server when two or more clients are connected using the same account; The client with the highest priority gets the events"
+msgstr "Приоритет используется в Jabber для определения того, кто будет получать события от jabber сервера когда подсоединены два и более клиента с одной и той же учетной записью. Клиент с наибольшим приоритетом будет получать события"
 
 #: ../data/gui/accounts_window.ui.h:16
 msgid "A_djust to status"
@@ -302,7 +309,7 @@ msgstr "_Просмотреть..."
 #: ../data/gui/accounts_window.ui.h:26
 #, fuzzy
 msgid "Certificate is e_ncrypted"
-msgstr "Недействительный сертификат"
+msgstr "Сертификат отклонен"
 
 #: ../data/gui/accounts_window.ui.h:27
 msgid "Client certificate"
@@ -318,12 +325,8 @@ msgid "C_onnect on Gajim startup"
 msgstr "_Соединяться при запуске Gajim"
 
 #: ../data/gui/accounts_window.ui.h:30
-msgid ""
-"If checked, Gajim, when launched, will automatically connect to jabber using "
-"this account"
-msgstr ""
-"Если отмечено, Gajim после запуска будет автоматически подсоединяться к "
-"jabber серверу с использованием этой учетной записи"
+msgid "If checked, Gajim, when launched, will automatically connect to jabber using this account"
+msgstr "Если отмечено, Gajim после запуска будет автоматически подсоединяться к jabber серверу с использованием этой учетной записи"
 
 #: ../data/gui/accounts_window.ui.h:31
 msgid "Auto-reconnect when connection is lost"
@@ -338,35 +341,29 @@ msgid "Synch_ronize account status with global status"
 msgstr "Син_хронизировать статус учетной записи с глобальным статусом"
 
 #: ../data/gui/accounts_window.ui.h:34
-msgid ""
-"If checked, any change to the global status (handled by the combobox at the "
-"bottom of the roster window) will change the status of this account "
-"accordingly"
-msgstr ""
-"Если отмечено, то любые изменения глобального статуса (управляемого из "
-"выпадающего списка внизу окна ростера) повлекут за собой изменение статуса "
-"этой учетной записи"
+msgid "If checked, any change to the global status (handled by the combobox at the bottom of the roster window) will change the status of this account accordingly"
+msgstr "Если отмечено, то любые изменения глобального статуса (управляемого из выпадающего списка внизу окна ростера) повлекут за собой изменение статуса этой учетной записи"
 
 #: ../data/gui/accounts_window.ui.h:35
 msgid "Use file transfer proxies"
 msgstr "Использовать прокси для передачи файла"
 
 #: ../data/gui/accounts_window.ui.h:36
-msgid ""
-"If checked, Gajim will also broadcast some more IPs except from just your "
-"IP, so file transfer has higher chances of working."
-msgstr ""
-"Если отмечено, Gajim будет передавать еще несколько IP адресов в дополнение "
-"к вашему, так что передача файла имеет больше шансов на успех."
+msgid "If checked, Gajim will also broadcast some more IPs except from just your IP, so file transfer has higher chances of working."
+msgstr "Если отмечено, Gajim будет передавать еще несколько IP адресов в дополнение к вашему, так что передача файла имеет больше шансов на успех."
 
 #. FIXME: Ugly workaround.
 #. FIXME: Ugly workaround.
 #. Maybe we haven't been in any group (defaults to General)
 #. General group cannot be changed
-#: ../data/gui/accounts_window.ui.h:37 ../data/gui/preferences_window.ui.h:41
-#: ../src/common/contacts.py:135 ../src/dialogs.py:115 ../src/dialogs.py:127
-#: ../src/roster_window.py:3091 ../src/roster_window.py:4217
-#: ../src/roster_window.py:5844
+#: ../data/gui/accounts_window.ui.h:37
+#: ../data/gui/preferences_window.ui.h:46
+#: ../src/common/contacts.py:135
+#: ../src/dialogs.py:113
+#: ../src/dialogs.py:125
+#: ../src/roster_window.py:3156
+#: ../src/roster_window.py:4284
+#: ../src/roster_window.py:5894
 msgid "General"
 msgstr "Общие"
 
@@ -374,7 +371,8 @@ msgstr "Общие"
 msgid "_use HTTP__PROXY environment variable"
 msgstr "_использовать переменную HTTP_PROXY"
 
-#: ../data/gui/accounts_window.ui.h:39 ../data/gui/preferences_window.ui.h:134
+#: ../data/gui/accounts_window.ui.h:39
+#: ../data/gui/preferences_window.ui.h:137
 msgid "_Manage..."
 msgstr "_Управление..."
 
@@ -388,24 +386,16 @@ msgid "_Warn before using an insecure connection"
 msgstr "_Предупреждать перед использованием незащищенного соединения"
 
 #: ../data/gui/accounts_window.ui.h:42
-msgid ""
-"Check this so Gajim will ask you before sending your password over an "
-"insecure connection."
-msgstr ""
-"Если отмечено, то Gajim будет спрашивать вас перед отправкой пароля через "
-"незащищенное соединение."
+msgid "Check this so Gajim will ask you before sending your password over an insecure connection."
+msgstr "Если отмечено, то Gajim будет будет спрашивать вас перед отправкой пароля через незащищенное соединение."
 
 #: ../data/gui/accounts_window.ui.h:43
 msgid "Send _keep-alive packets"
 msgstr "Отправлять _пинг"
 
 #: ../data/gui/accounts_window.ui.h:44
-msgid ""
-"If checked, Gajim will send keep-alive packets to prevent connection timeout "
-"which results in disconnection"
-msgstr ""
-"Если отмечено, то Gajim будет пинговать сервер, чтобы избежать разрыва "
-"соединения по таймауту"
+msgid "If checked, Gajim will send keep-alive packets to prevent connection timeout which results in disconnection"
+msgstr "Если отмечено, то Gajim будет пинговать сервер, чтобы избежать разрыва соединения по таймауту"
 
 #: ../data/gui/accounts_window.ui.h:45
 msgid "Use cust_om hostname/port"
@@ -419,7 +409,8 @@ msgstr "_Хост: "
 msgid "_Port: "
 msgstr "_Порт:"
 
-#: ../data/gui/accounts_window.ui.h:48 ../data/gui/preferences_window.ui.h:138
+#: ../data/gui/accounts_window.ui.h:48
+#: ../data/gui/preferences_window.ui.h:141
 msgid "<b>Miscellaneous</b>"
 msgstr "<b>Прочее</b>"
 
@@ -427,8 +418,9 @@ msgstr "<b>Прочее</b>"
 msgid "Connection"
 msgstr "Соединение"
 
-#: ../data/gui/accounts_window.ui.h:50 ../src/config.py:1840
-#: ../src/config.py:2436
+#: ../data/gui/accounts_window.ui.h:50
+#: ../src/config.py:1835
+#: ../src/config.py:2413
 msgid "No key selected"
 msgstr "Не выбран ключ"
 
@@ -460,7 +452,8 @@ msgstr "Информация о вас, сохраненная на сервер
 msgid "<b>Personal Information</b>"
 msgstr "<b>Личная информация</b>"
 
-#: ../data/gui/accounts_window.ui.h:58 ../data/gui/profile_window.ui.h:1
+#: ../data/gui/accounts_window.ui.h:58
+#: ../data/gui/profile_window.ui.h:1
 msgid "Personal Information"
 msgstr "Личная информация"
 
@@ -478,12 +471,10 @@ msgstr "_Другой порт:"
 
 #: ../data/gui/accounts_window.ui.h:62
 msgid ""
-"If the default port that is used for incoming messages is unfitting for your "
-"setup you can select another one here.\n"
+"If the default port that is used for incoming messages is unfitting for your setup you can select another one here.\n"
 "You might consider to change possible firewall settings."
 msgstr ""
-"Если порт по умолчанию, который используется для входящих сообщений вас не "
-"устраивает, вы можете выбрать другой.\n"
+"Если порт по умолчанию, который используется для входящих сообщения вас не устраивает, вы можете выбрать другой.\n"
 "Также, возможно, придется изменить некоторые настройки брандмауэра."
 
 #: ../data/gui/accounts_window.ui.h:64
@@ -502,8 +493,9 @@ msgid "E-Mail:"
 msgstr "Почта:"
 
 #: ../data/gui/accounts_window.ui.h:67
-#: ../data/gui/zeroconf_information_window.ui.h:7 ../src/config.py:1867
-#: ../src/dialogs.py:841
+#: ../data/gui/zeroconf_information_window.ui.h:7
+#: ../src/config.py:1862
+#: ../src/dialogs.py:839
 msgid "Jabber ID:"
 msgstr "Jabber ID:"
 
@@ -568,12 +560,14 @@ msgstr ""
 "Чтобы добавить контакт для этого протокола,\n"
 "нужно соединиться с транспортом."
 
-#: ../data/gui/add_new_contact_window.ui.h:16 ../src/common/helpers.py:1366
+#: ../data/gui/add_new_contact_window.ui.h:16
+#: ../src/common/helpers.py:1363
 msgid "I would like to add you to my contact list."
 msgstr "Вы не возражаете, если я добавлю Вас в контакт-лист?"
 
 #. displaying the window
-#: ../data/gui/adhoc_commands_window.ui.h:1 ../src/adhoc_commands.py:104
+#: ../data/gui/adhoc_commands_window.ui.h:1
+#: ../src/adhoc_commands.py:102
 msgid "Ad-hoc Commands - Gajim"
 msgstr "Специальные команды — Gajim"
 
@@ -590,9 +584,8 @@ msgid "Check once more"
 msgstr "Проверить еще раз"
 
 #: ../data/gui/adhoc_commands_window.ui.h:5
-#, fuzzy
-msgid "Please wait while the command is being sent..."
-msgstr "пожалуйста, подождите, пока будет генерироваться ключ ...\n"
+msgid "Please wait while the command is sending..."
+msgstr "Происходит отправка команды. Подождите..."
 
 #: ../data/gui/adhoc_commands_window.ui.h:6
 msgid "Please wait..."
@@ -629,13 +622,12 @@ msgstr "<b>Описание</b>"
 
 #: ../data/gui/advanced_configuration_window.ui.h:4
 msgid "<b>NOTE:</b> You should restart Gajim for some settings to take effect"
-msgstr ""
-"<b>ПРИМЕЧАНИЕ:</b> Необходимо перезапустить Gajim, чтобы некоторые настройки "
-"вступили в силу"
+msgstr "<b>ПРИМЕЧАНИЕ:</b> Необходимо перезапустить Gajim, чтобы некоторые настройки вступили в силу"
 
 #: ../data/gui/advanced_configuration_window.ui.h:5
+#, fuzzy
 msgid "_Reset to default"
-msgstr "_Сбросить до исходных"
+msgstr "_Вернуться к цветам по умолчанию"
 
 #: ../data/gui/advanced_menuitem_menu.ui.h:1
 msgid "Show _XML Console"
@@ -659,8 +651,7 @@ msgstr "_Отправить сообщение сервера..."
 
 #: ../data/gui/advanced_menuitem_menu.ui.h:6
 msgid "Sends a message to users currently connected to this server"
-msgstr ""
-"Отправляет сообщение пользователям, подсоединенным к серверу в данный момент"
+msgstr "Отправляет сообщение пользователям подсоединенным к серверу в данный момент"
 
 #: ../data/gui/advanced_menuitem_menu.ui.h:7
 msgid "Sets Message of the Day"
@@ -692,49 +683,45 @@ msgid "No"
 msgstr "Нет"
 
 #: ../data/gui/archiving_preferences_window.ui.h:2
-#, fuzzy
 msgid "Yes"
-msgstr "Да"
+msgstr ""
 
 #: ../data/gui/archiving_preferences_window.ui.h:3
 #, fuzzy
 msgid "Prefer"
-msgstr "Предпочитать обычный текст"
+msgstr "Настройки"
 
 #: ../data/gui/archiving_preferences_window.ui.h:4
 msgid "Concede"
 msgstr ""
 
 #: ../data/gui/archiving_preferences_window.ui.h:5
-#, fuzzy
 msgid "Forbid"
-msgstr "^Запретить версию"
+msgstr ""
 
 #: ../data/gui/archiving_preferences_window.ui.h:6
-#, fuzzy
 msgid "<i>Method Manual</i>"
-msgstr "Руководство пользователя Anjuta"
+msgstr ""
 
 #: ../data/gui/archiving_preferences_window.ui.h:7
-#, fuzzy
 msgid "<i>Method Local</i>"
-msgstr "Локальный JID:"
+msgstr ""
 
 #: ../data/gui/archiving_preferences_window.ui.h:8
-#, fuzzy
 msgid "<i>Method Auto</i>"
-msgstr "<b>Авто статус</b>"
+msgstr ""
 
 #: ../data/gui/archiving_preferences_window.ui.h:9
 #, fuzzy
 msgid "Auto"
-msgstr "Авто"
+msgstr "Автоматическое присоединение"
 
 #: ../data/gui/atom_entry_window.ui.h:1
 msgid "New entry received"
 msgstr "Получена новая запись"
 
-#: ../data/gui/atom_entry_window.ui.h:2 ../src/atom_window.py:128
+#: ../data/gui/atom_entry_window.ui.h:2
+#: ../src/atom_window.py:128
 msgid "You have received new entry:"
 msgstr "Получена новая запись:"
 
@@ -751,9 +738,8 @@ msgid "Last modified:"
 msgstr "Последнее изменение:"
 
 #: ../data/gui/atom_entry_window.ui.h:6
-#, fuzzy
 msgid "Next entry"
-msgstr "Неверная запись"
+msgstr ""
 
 #: ../data/gui/blocked_contacts_window.ui.h:1
 msgid "Blocked Contacts"
@@ -761,8 +747,10 @@ msgstr "Заблокированные контакты"
 
 #: ../data/gui/blocked_contacts_window.ui.h:2
 #: ../data/gui/contact_context_menu.ui.h:20
-#: ../data/gui/gc_occupants_menu.ui.h:14 ../src/roster_window.py:5813
-#: ../src/roster_window.py:5940 ../src/roster_window.py:6073
+#: ../data/gui/gc_occupants_menu.ui.h:14
+#: ../src/roster_window.py:5863
+#: ../src/roster_window.py:5990
+#: ../src/roster_window.py:6123
 msgid "_Unblock"
 msgstr "_Разблокировать"
 
@@ -849,86 +837,106 @@ msgstr "Войти в _комнату"
 msgid "_Add to Roster..."
 msgstr "_Добавить в ростер..."
 
-#: ../data/gui/chat_control.ui.h:1 ../data/gui/groupchat_control.ui.h:1
+#: ../data/gui/chat_control.ui.h:1
+#: ../data/gui/groupchat_control.ui.h:1
 msgid "Show a list of emoticons (Alt+M)"
 msgstr "Показать набор смайлов (Alt+M)"
 
 #: ../data/gui/chat_control.ui.h:2
+#: ../data/gui/groupchat_control.ui.h:2
+msgid "Show a list of formattings"
+msgstr "Показать список форматирования"
+
+#: ../data/gui/chat_control.ui.h:3
 msgid "Add this contact to roster (Ctrl+D)"
 msgstr "Добавить контакт в ростер (Ctrl+D)"
 
-#: ../data/gui/chat_control.ui.h:3
+#. change tooltip text for audio and video buttons if python-farstream is
+#. not installed
+#: ../data/gui/chat_control.ui.h:4
+#: ../src/chat_control.py:1724
+#: ../src/command_system/implementation/standard.py:214
+msgid "Toggle audio session"
+msgstr "Переключить аудио сеанс"
+
+#: ../data/gui/chat_control.ui.h:5
+#: ../src/chat_control.py:1725
+#: ../src/command_system/implementation/standard.py:224
+msgid "Toggle video session"
+msgstr "Переключить видео сеанс"
+
+#: ../data/gui/chat_control.ui.h:6
 msgid "Invite contacts to the conversation (Ctrl+G)"
 msgstr "Пригласить к беседе (Ctrl+G)"
 
-#: ../data/gui/chat_control.ui.h:4
-msgid "View contact information (Ctrl+I)"
+#: ../data/gui/chat_control.ui.h:7
+msgid "Show the contact's profile (Ctrl+I)"
 msgstr "Показать информацию о контакте (Ctrl+I)"
 
-#: ../data/gui/chat_control.ui.h:5 ../data/gui/groupchat_control.ui.h:6
+#: ../data/gui/chat_control.ui.h:8
+#: ../data/gui/groupchat_control.ui.h:6
 msgid "Browse the chat history (Ctrl+H)"
 msgstr "Открыть историю чата (Ctrl+H)"
 
-#: ../data/gui/chat_control.ui.h:6 ../data/gui/groupchat_control.ui.h:7
-msgid "Show advanced functions (Alt+D)"
+#: ../data/gui/chat_control.ui.h:9
+#: ../data/gui/groupchat_control.ui.h:7
+msgid "Show a menu of advanced functions (Alt+D)"
 msgstr "Показать меню дополнительных функций (Alt+D)"
 
-#: ../data/gui/chat_control.ui.h:7
+#: ../data/gui/chat_control.ui.h:10
 msgid "#"
 msgstr "â„–"
 
-#: ../data/gui/chat_control.ui.h:8 ../data/gui/groupchat_control.ui.h:8
-#: ../data/gui/single_message_window.ui.h:6
-msgid "Send message"
-msgstr "Отправить сообщение"
-
 #. Make sure the character after "_" is not M/m (conflicts with Alt+M that is supposed to show the Emoticon Selector)
-#: ../data/gui/chat_control.ui.h:10 ../data/gui/groupchat_control.ui.h:10
-#: ../data/gui/xml_console_window.ui.h:15 ../src/filetransfers_window.py:322
+#: ../data/gui/chat_control.ui.h:12
+#: ../data/gui/groupchat_control.ui.h:9
+#: ../data/gui/xml_console_window.ui.h:15
+#: ../src/filetransfers_window.py:322
 msgid "_Send"
 msgstr "_Отправить"
 
-#: ../data/gui/chat_control.ui.h:11
+#: ../data/gui/chat_control.ui.h:13
 msgid "1"
 msgstr "1"
 
-#: ../data/gui/chat_control.ui.h:12
+#: ../data/gui/chat_control.ui.h:14
 msgid "2"
 msgstr "2"
 
-#: ../data/gui/chat_control.ui.h:13
+#: ../data/gui/chat_control.ui.h:15
 msgid "3"
 msgstr "3"
 
-#: ../data/gui/chat_control.ui.h:14
+#: ../data/gui/chat_control.ui.h:16
 msgid "4"
 msgstr "4"
 
-#: ../data/gui/chat_control.ui.h:15
+#: ../data/gui/chat_control.ui.h:17
 msgid "5"
 msgstr "5"
 
-#: ../data/gui/chat_control.ui.h:16
+#: ../data/gui/chat_control.ui.h:18
 msgid "6"
 msgstr "6"
 
-#: ../data/gui/chat_control.ui.h:17
+#: ../data/gui/chat_control.ui.h:19
 msgid "7"
 msgstr "7"
 
-#: ../data/gui/chat_control.ui.h:18
+#: ../data/gui/chat_control.ui.h:20
 msgid "8"
 msgstr "8"
 
-#: ../data/gui/chat_control.ui.h:19
+#: ../data/gui/chat_control.ui.h:21
 msgid "9"
 msgstr "9"
 
-#: ../data/gui/chat_control.ui.h:20
+#: ../data/gui/chat_control.ui.h:22
 msgid "*"
 msgstr "*"
 
-#: ../data/gui/chat_control.ui.h:21 ../data/gui/single_message_window.ui.h:3
+#: ../data/gui/chat_control.ui.h:23
+#: ../data/gui/single_message_window.ui.h:3
 msgid "0"
 msgstr "0"
 
@@ -960,7 +968,8 @@ msgstr "_Пригласить"
 msgid "Start _Chat"
 msgstr "Начать _беседу"
 
-#: ../data/gui/contact_context_menu.ui.h:2 ../data/gui/roster_window.ui.h:4
+#: ../data/gui/contact_context_menu.ui.h:2
+#: ../data/gui/roster_window.ui.h:4
 msgid "Send Single _Message..."
 msgstr "Отправить одиночное _сообщение..."
 
@@ -971,8 +980,9 @@ msgstr "Отправить _файл..."
 #. Invite to
 #. Invite to Groupchat
 #: ../data/gui/contact_context_menu.ui.h:4
-#: ../data/gui/gc_occupants_menu.ui.h:11 ../src/roster_window.py:5749
-#: ../src/roster_window.py:5908
+#: ../data/gui/gc_occupants_menu.ui.h:11
+#: ../src/roster_window.py:5799
+#: ../src/roster_window.py:5958
 msgid "In_vite to"
 msgstr "_Пригласить в"
 
@@ -988,8 +998,9 @@ msgstr "Включить Open_PGP шифрование"
 msgid "Toggle End to End Encryption"
 msgstr "Включить End to End шифрование"
 
-#: ../data/gui/contact_context_menu.ui.h:8 ../src/roster_window.py:5759
-#: ../src/roster_window.py:5997
+#: ../data/gui/contact_context_menu.ui.h:8
+#: ../src/roster_window.py:5809
+#: ../src/roster_window.py:6047
 msgid "Send Cus_tom Status"
 msgstr "Установи_ть статус"
 
@@ -1026,23 +1037,22 @@ msgid "_Subscription"
 msgstr "_Подписка"
 
 #: ../data/gui/contact_context_menu.ui.h:17
-#, fuzzy
-msgid "_Allow contact to see my status"
+msgid "_Allow him/her to see my status"
 msgstr "_Позволить ему или ей видеть мой статус"
 
 #: ../data/gui/contact_context_menu.ui.h:18
-#, fuzzy
-msgid "A_sk to see contact status"
+msgid "A_sk to see his/her status"
 msgstr "_Попросить возможность видеть его или её статус"
 
 #: ../data/gui/contact_context_menu.ui.h:19
-#, fuzzy
-msgid "_Forbid contact to see my status"
+msgid "_Forbid him/her to see my status"
 msgstr "_Запретить ему или ей видеть мой статус"
 
 #: ../data/gui/contact_context_menu.ui.h:21
-#: ../data/gui/gc_occupants_menu.ui.h:13 ../src/roster_window.py:5821
-#: ../src/roster_window.py:5946 ../src/roster_window.py:6076
+#: ../data/gui/gc_occupants_menu.ui.h:13
+#: ../src/roster_window.py:5871
+#: ../src/roster_window.py:5996
+#: ../src/roster_window.py:6126
 msgid "_Block"
 msgstr "_Блокировать"
 
@@ -1060,8 +1070,9 @@ msgstr "_Удалить"
 
 #: ../data/gui/contact_context_menu.ui.h:26
 #: ../data/gui/gc_control_popup_menu.ui.h:9
-#: ../data/gui/gc_occupants_menu.ui.h:15 ../data/gui/roster_window.ui.h:19
-#: ../src/roster_window.py:6147
+#: ../data/gui/gc_occupants_menu.ui.h:15
+#: ../data/gui/roster_window.ui.h:19
+#: ../src/roster_window.py:6197
 msgid "_History"
 msgstr "_История"
 
@@ -1126,12 +1137,8 @@ msgid "Remove file transfer from the list."
 msgstr "Удалить передачу из списка."
 
 #: ../data/gui/filetransfers.ui.h:9
-msgid ""
-"This action removes single file transfer from the list. If the transfer is "
-"active, it is first stopped and then removed"
-msgstr ""
-"Это действие удаляет единичную передачу из списка. Если передача еще "
-"активна, она сначала останавливается, а затем удаляется"
+msgid "This action removes single file transfer from the list. If the transfer is active, it is first stopped and then removed"
+msgstr "Это действие удаляет единичную передачу из списка. Если передача еще активна, она сначала останавливается, а затем удаляется"
 
 #: ../data/gui/filetransfers.ui.h:10
 msgid "Clean _up"
@@ -1142,7 +1149,7 @@ msgid "_Pause"
 msgstr "_Приостановить"
 
 #: ../data/gui/filetransfers.ui.h:12
-msgid "Cancels the selected file transfer and removes incomplete files"
+msgid "Cancels the selected file transfer and removes incomplete file"
 msgstr "Отменяет выбранную передачу и удаляет неполные файлы"
 
 #: ../data/gui/filetransfers.ui.h:13
@@ -1157,11 +1164,13 @@ msgstr "Отменяет выбранную передачу"
 msgid "Hides the window"
 msgstr "Скрывает окно"
 
-#: ../data/gui/filetransfers.ui.h:16 ../src/filetransfers_window.py:905
+#: ../data/gui/filetransfers.ui.h:16
+#: ../src/filetransfers_window.py:905
 msgid "_Continue"
 msgstr "_Продолжить"
 
-#: ../data/gui/filetransfers.ui.h:17 ../src/chat_control.py:3350
+#: ../data/gui/filetransfers.ui.h:17
+#: ../src/chat_control.py:3256
 #: ../src/filetransfers_window.py:213
 msgid "_Open Containing Folder"
 msgstr "_Открыть папку с принятым файлом"
@@ -1202,11 +1211,13 @@ msgstr "_Шрифт:"
 msgid "Font style:"
 msgstr "Начертание:"
 
-#: ../data/gui/gajim_themes_window.ui.h:10 ../src/chat_control.py:1045
+#: ../data/gui/gajim_themes_window.ui.h:10
+#: ../src/chat_control.py:1049
 msgid "Bold"
 msgstr "Полужирный"
 
-#: ../data/gui/gajim_themes_window.ui.h:11 ../src/chat_control.py:1046
+#: ../data/gui/gajim_themes_window.ui.h:11
+#: ../src/chat_control.py:1050
 msgid "Italic"
 msgstr "Курсив"
 
@@ -1218,7 +1229,8 @@ msgstr "Приостановился"
 msgid "Composing"
 msgstr "Печатает"
 
-#: ../data/gui/gajim_themes_window.ui.h:14 ../src/common/pep.py:150
+#: ../data/gui/gajim_themes_window.ui.h:14
+#: ../src/common/pep.py:150
 msgid "Inactive"
 msgstr "Неактивен"
 
@@ -1272,7 +1284,8 @@ msgstr "_Сворачивать при закрытии"
 msgid "_Request Voice"
 msgstr "_Запросить право говорить"
 
-#: ../data/gui/gc_control_popup_menu.ui.h:8 ../src/disco.py:1843
+#: ../data/gui/gc_control_popup_menu.ui.h:8
+#: ../src/disco.py:1799
 msgid "_Bookmark"
 msgstr "Добавить эту комнату в _закладки"
 
@@ -1320,10 +1333,6 @@ msgstr "_Забанить"
 msgid "_Add to Roster"
 msgstr "_Добавить в ростер"
 
-#: ../data/gui/groupchat_control.ui.h:2 ../src/chat_control.py:1722
-msgid "Show a list of formattings"
-msgstr "Показать список форматирования"
-
 #: ../data/gui/groupchat_control.ui.h:3
 msgid "Change your nickname (Ctrl+N)"
 msgstr "Изменить ник (Ctrl+N)"
@@ -1360,29 +1369,21 @@ msgstr "<big><b>Добро пожаловать в менеджер истори
 
 #: ../data/gui/history_manager.ui.h:3
 msgid ""
-"This log manager is not intended for log viewing. If you are looking for "
-"such functionality, use the history window instead.\n"
+"This log manager is not intended for log viewing. If you are looking for such functionality, use the history window instead.\n"
 "\n"
-"Use this program to delete or export logs. You can select logs from the left "
-"and/or search database from below."
+"Use this program to delete or export logs. You can select logs from the left and/or search database from below."
 msgstr ""
-"Этот менеджер истории не предназначен для просмотра. Если вы хотите "
-"просматривать историю с большим количеством функций, используйте окно "
-"истории.\n"
+"Этот менеджер истории не предназначен для просмотра. Если вы хотите просматривать историю с большим количеством функций, используйте окно истории.\n"
 "\n"
-"Используйте эту программу для удаления или экспорта истории. Вы можете "
-"выбрать лог слева или воспользоваться поиском в базе."
+"Используйте эту программу для удаления или экспорта истории. Вы можете выбрать лог слева или воспользоваться поиском в базе."
 
 #: ../data/gui/history_manager.ui.h:6
 msgid ""
 "<b>WARNING:</b>\n"
-"If you plan to do massive deletions, please make sure Gajim is not running. "
-"Generally avoid deletions with contacts you currently chat with."
+"If you plan to do massive deletions, please make sure Gajim is not running. Generally avoid deletions with contacts you currently chat with."
 msgstr ""
 "<b>ВНИМАНИЕ:</b>\n"
-"Если вы собираетесь устроить массовую чистку, удостоверьтесь, что Gajim не "
-"запущен. Избегайте удалений из логов контактов, с которыми вы разговариваете "
-"в этот момент."
+"Если вы собираетесь устроить массовую чистку, удостоверьтесь, что Gajim не запущен. Избегайте удалений из логов контактов, с которыми вы разговариваете в этот момент."
 
 #: ../data/gui/history_manager.ui.h:8
 msgid "_Search Database"
@@ -1404,7 +1405,8 @@ msgstr "История конференций"
 msgid "All Chat Histories"
 msgstr "Вся история"
 
-#: ../data/gui/history_window.ui.h:4 ../src/history_window.py:326
+#: ../data/gui/history_window.ui.h:4
+#: ../src/history_window.py:324
 msgid "Conversation History"
 msgstr "История"
 
@@ -1413,33 +1415,25 @@ msgid "Search:"
 msgstr "Поиск:"
 
 #: ../data/gui/history_window.ui.h:6
-#, fuzzy
 msgid "_In date search"
-msgstr "Выполняется поиск..."
+msgstr ""
 
 #: ../data/gui/history_window.ui.h:7
-#, fuzzy
-msgid "Searching only in the selected day "
-msgstr "Использовать только выбранные в диалоге предпросмотра снимки."
+msgid "searching only in the selected day "
+msgstr ""
 
 #: ../data/gui/history_window.ui.h:8
 #: ../data/gui/zeroconf_information_window.ui.h:5
 msgid "_Log conversation history"
 msgstr "_Сохранять историю переписки"
 
-#: ../data/gui/history_window.ui.h:9
-msgid "_Show status changes"
-msgstr "Показывать изменения _статуса"
-
 #: ../data/gui/item_archiving_preferences_window.ui.h:1
-#, fuzzy
 msgid "expire"
-msgstr "Истекает"
+msgstr ""
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:2
-#, fuzzy
 msgid "save"
-msgstr "Сохранить"
+msgstr ""
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:3
 #, fuzzy
@@ -1447,28 +1441,32 @@ msgid "otr"
 msgstr "другое"
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:4
-#: ../src/gajim-remote.py:230
+#: ../src/gajim-remote.py:229
 msgid "jid"
 msgstr "JID"
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:5
 #, fuzzy
 msgid "body"
-msgstr "_Тело:"
+msgstr "все"
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:6
-#, fuzzy
 msgid "false"
-msgstr "false"
+msgstr ""
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:7
+#: ../src/gajim-remote.py:110
+#: ../src/gajim-remote.py:133
+#: ../src/gajim-remote.py:144
+#: ../src/gajim-remote.py:158
+#: ../src/gajim-remote.py:169
+#: ../src/gajim-remote.py:282
 msgid "message"
 msgstr "сообщение"
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:8
-#, fuzzy
 msgid "stream"
-msgstr "&Поток"
+msgstr ""
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:9
 msgid "approve"
@@ -1479,25 +1477,23 @@ msgid "concede"
 msgstr ""
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:11
-#, fuzzy
 msgid "forbid"
-msgstr "^Запретить версию"
+msgstr ""
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:12
 msgid "oppose"
 msgstr ""
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:13
-#, fuzzy
 msgid "prefer"
-msgstr "Предпочитать обычный текст"
+msgstr ""
 
 #: ../data/gui/item_archiving_preferences_window.ui.h:14
-#, fuzzy
 msgid "require"
-msgstr "Требуемый пакет:"
+msgstr ""
 
-#: ../data/gui/join_groupchat_window.ui.h:1 ../src/dialogs.py:2416
+#: ../data/gui/join_groupchat_window.ui.h:1
+#: ../src/dialogs.py:2372
 msgid "Join Group Chat"
 msgstr "Войти в комнату"
 
@@ -1525,7 +1521,8 @@ msgstr "Входить в кон_ференцию при подключении"
 msgid "_Bookmark this room"
 msgstr "Добавить комнату в закладк_и"
 
-#: ../data/gui/join_groupchat_window.ui.h:9 ../src/config.py:1857
+#: ../data/gui/join_groupchat_window.ui.h:9
+#: ../src/config.py:1852
 msgid "Server:"
 msgstr "Сервер:"
 
@@ -1533,8 +1530,10 @@ msgstr "Сервер:"
 msgid "Bro_wse Rooms"
 msgstr "Просмотр конферен_ций"
 
-#: ../data/gui/join_groupchat_window.ui.h:11 ../src/chat_control.py:3385
-#: ../src/disco.py:1396 ../src/disco.py:1847
+#: ../data/gui/join_groupchat_window.ui.h:11
+#: ../src/chat_control.py:3291
+#: ../src/disco.py:1360
+#: ../src/disco.py:1803
 msgid "_Join"
 msgstr "_Присоединиться"
 
@@ -1634,11 +1633,6 @@ msgstr "_Порт прокси:"
 msgid "<b>Settings</b>"
 msgstr "<b>Настройки</b>"
 
-#: ../data/gui/manage_sounds_window.ui.h:1
-#, fuzzy
-msgid "Manage sounds"
-msgstr "Выключить звук"
-
 #: ../data/gui/passphrase_dialog.ui.h:1
 msgid "Passphrase"
 msgstr "Парольная фраза"
@@ -1652,9 +1646,8 @@ msgid "Install from zip"
 msgstr "Установить из zip"
 
 #: ../data/gui/plugins_window.ui.h:3
-#, fuzzy
 msgid "&lt;empty&gt;"
-msgstr "Очистка <defs>"
+msgstr ""
 
 #: ../data/gui/plugins_window.ui.h:4
 msgid "Version:"
@@ -1662,7 +1655,7 @@ msgstr "Версия:"
 
 #: ../data/gui/plugins_window.ui.h:5
 msgid "<empty>"
-msgstr "пусто"
+msgstr ""
 
 #: ../data/gui/plugins_window.ui.h:6
 msgid "Authors:"
@@ -1693,9 +1686,7 @@ msgid "Installed"
 msgstr "Установленные"
 
 #: ../data/gui/plugins_window.ui.h:13
-msgid ""
-"Plug-in decription should be displayed here. This text will be erased during "
-"PluginsWindow initialization."
+msgid "Plug-in decription should be displayed here. This text will be erased during PluginsWindow initialization."
 msgstr "Описание модуля. Эта строка будет стерта при загрузке модуля."
 
 #: ../data/gui/popup_notification_window.ui.h:1
@@ -1722,8 +1713,9 @@ msgstr "При любых изменениях"
 msgid "Composing only"
 msgstr "Только печатает"
 
-#: ../data/gui/preferences_window.ui.h:5 ../src/config.py:164
-#: ../src/config.py:677
+#: ../data/gui/preferences_window.ui.h:5
+#: ../src/config.py:173
+#: ../src/config.py:689
 msgid "Disabled"
 msgstr "Отключены"
 
@@ -1784,449 +1776,387 @@ msgid "Display a_vatars of contacts in roster"
 msgstr "Показывать а_ватары для контактов в ростере"
 
 #: ../data/gui/preferences_window.ui.h:20
-msgid ""
-"If checked, Gajim will display avatars of contacts in roster window and in "
-"group chats"
-msgstr ""
-"Если отмечено, то Gajim будет показывать аватары контактов в окне ростера и "
-"в окнах комнат"
+msgid "If checked, Gajim will display avatars of contacts in roster window and in group chats"
+msgstr "Если отмечено, то Gajim будет показывать аватары контактов в окне ростера и в окнах комнат"
 
 #: ../data/gui/preferences_window.ui.h:21
 msgid "Display status _messages of contacts in roster"
 msgstr "Показывать _сообщения о статусе контакта в ростере"
 
 #: ../data/gui/preferences_window.ui.h:22
-msgid ""
-"If checked, Gajim will display status messages of contacts under the contact "
-"name in roster window and in group chats"
-msgstr ""
-"Если отмечено, то Gajim будет отображать сообщение о статусе контакта под "
-"его именем в окне ростера и в окнах комнат"
+msgid "If checked, Gajim will display status messages of contacts under the contact name in roster window and in group chats"
+msgstr "Если отмечено, то Gajim будет отображать сообщение о статусе контакта под его именем в окне ростера и в окнах комнат"
 
 #: ../data/gui/preferences_window.ui.h:23
-msgid "Display e_xtra information of contacts in roster (mood, activity, ...)"
-msgstr ""
-"Показывать дополнительную информацию контактов в ростере (занятие, "
-"настроение, ...)"
+msgid "Display m_ood of contacts in roster"
+msgstr "Показывать на_строения для контактов в ростере"
 
 #: ../data/gui/preferences_window.ui.h:24
-msgid ""
-"If checked, Gajim will display the mood of contacts in the roster window"
-msgstr ""
-"Если отмечено, то Gajim будет показывать настроения контактов в окне ростера"
+msgid "If checked, Gajim will display the mood of contacts in the roster window"
+msgstr "Если отмечено, то Gajim будет показывать настроения контактов в окне ростера"
 
 #: ../data/gui/preferences_window.ui.h:25
+msgid "Display _activity of contacts in roster"
+msgstr "Показывать _занятия контактов в ростере"
+
+#: ../data/gui/preferences_window.ui.h:26
+msgid "If checked, Gajim will display the activity of contacts in the roster window"
+msgstr "Если отмечено, то Gajim будет показывать занятия контактов в окне ростера"
+
+#: ../data/gui/preferences_window.ui.h:27
+msgid "Display _tunes of contacts in roster"
+msgstr "Отмечать контакты, слушающие музыку (tunes)"
+
+#: ../data/gui/preferences_window.ui.h:28
+msgid "If checked, Gajim will display the tunes of contacts in the roster window"
+msgstr "Если отмечено, то Gajim будет показывать tunes контактов в окне ростера"
+
+#: ../data/gui/preferences_window.ui.h:29
+msgid "Display _location of contacts in roster"
+msgstr "Показывать местоположение контактов в ростере"
+
+#: ../data/gui/preferences_window.ui.h:30
+msgid "If checked, Gajim will display the location of contacts in the roster window"
+msgstr "Если отмечено, то Gajim будет показывать местоположение контактов в окне ростера"
+
+#: ../data/gui/preferences_window.ui.h:31
 msgid "Sort contacts by status"
 msgstr "Сортировать контакты по статусу"
 
-#: ../data/gui/preferences_window.ui.h:26
+#: ../data/gui/preferences_window.ui.h:32
 msgid "in _roster"
 msgstr "в _ростере"
 
-#: ../data/gui/preferences_window.ui.h:27
+#: ../data/gui/preferences_window.ui.h:33
 msgid "in _group chats"
 msgstr "в _комнатах"
 
-#: ../data/gui/preferences_window.ui.h:28
+#: ../data/gui/preferences_window.ui.h:34
 msgid "<b>Roster Appearance</b>"
 msgstr "<b>Настройки ростера</b>"
 
-#: ../data/gui/preferences_window.ui.h:29
+#: ../data/gui/preferences_window.ui.h:35
 msgid "_Window behavior:"
 msgstr "Поведение _окна:"
 
-#: ../data/gui/preferences_window.ui.h:30
-msgid ""
-"If not disabled, Gajim will replace ascii smilies like ':)' with equivalent "
-"animated or static graphical emoticons"
-msgstr ""
-"Gajim заменяет текстовые смайлики, например ':)', их графическим или "
-"анимированным эквивалентом. Выберите «Отключены», чтобы этого не происходило."
+#: ../data/gui/preferences_window.ui.h:36
+msgid "If not disabled, Gajim will replace ascii smilies like ':)' with equivalent animated or static graphical emoticons"
+msgstr "Gajim заменяет текстовые смайлики, например ':)', их графическим или анимированным эквивалентом. Выберите «Отключены», чтобы этого не происходило."
 
-#: ../data/gui/preferences_window.ui.h:31
+#: ../data/gui/preferences_window.ui.h:37
 msgid "_Emoticons:"
 msgstr "_Смайлики:"
 
-#: ../data/gui/preferences_window.ui.h:32
+#: ../data/gui/preferences_window.ui.h:38
 msgid "Ma_ke message windows compact"
 msgstr "_Компактное окно сообщений"
 
-#: ../data/gui/preferences_window.ui.h:33
+#: ../data/gui/preferences_window.ui.h:39
 msgid "Hide all buttons in chat windows"
 msgstr "Не показывать кнопки в окнах чата"
 
-#: ../data/gui/preferences_window.ui.h:34
+#: ../data/gui/preferences_window.ui.h:40
 msgid "_Ignore rich content in incoming messages"
 msgstr "_Игнорировать форматирование во входящих сообщениях"
 
-#: ../data/gui/preferences_window.ui.h:35
-msgid ""
-"Some messages may include rich content (formatting, colors etc). If checked, "
-"Gajim will just display the raw message text."
-msgstr ""
-"Некоторые сообщения могут содержать форматирование (цвет, шрифт и т.д.). "
-"Если отмечено, Gajim будет отображать только их текст, без форматирования."
+#: ../data/gui/preferences_window.ui.h:41
+msgid "Some messages may include rich content (formatting, colors etc). If checked, Gajim will just display the raw message text."
+msgstr "Некоторые сообщения могут содержать форматирование (цвет, шрифт и т.д.). Если отмечено, Gajim будет отображать только их текст, без форматирования."
 
-#: ../data/gui/preferences_window.ui.h:36
+#: ../data/gui/preferences_window.ui.h:42
 msgid "_Highlight misspelled words"
 msgstr "Выделять _слова с опечатками"
 
-#: ../data/gui/preferences_window.ui.h:37
-msgid ""
-"If checked, Gajim will highlight spelling errors in input fields of chat "
-"windows. If no language is explicitly set via right click on the input "
-"field, the default language will be used for this contact or group chat."
-msgstr ""
-"Если отмечено, Gajim будет выделять орфографические ошибки в полях ввода "
-"окон чата. Если язык проверки явно не задан, будет использован язык по "
-"умолчанию для данного контакта или комнаты."
+#: ../data/gui/preferences_window.ui.h:43
+msgid "If checked, Gajim will highlight spelling errors in input fields of chat windows. If no language is explicitly set via right click on the input field, the default language will be used for this contact or group chat."
+msgstr "Если отмечено, Gajim будет выделять орфографические ошибки в полях ввода окон чата. Если язык проверки явно не задан, будет использован язык по умолчанию для данного контакта или комнаты."
 
-#: ../data/gui/preferences_window.ui.h:38
+#: ../data/gui/preferences_window.ui.h:44
 msgid "_Show roster on startup:"
 msgstr "Показ_ывать ростер при запуске:"
 
-#: ../data/gui/preferences_window.ui.h:39
-msgid "Show icon when your messages are received"
-msgstr "Показывать иконку когда ваше сообщение доставлено."
-
-#: ../data/gui/preferences_window.ui.h:40
+#: ../data/gui/preferences_window.ui.h:45
 msgid "<b>Chat Appearance</b>"
 msgstr "<b>Настройки окна чата</b>"
 
-#: ../data/gui/preferences_window.ui.h:42
+#: ../data/gui/preferences_window.ui.h:47
 msgid "When new event is received:"
 msgstr "Когда получено новое событие:"
 
-#: ../data/gui/preferences_window.ui.h:43
+#: ../data/gui/preferences_window.ui.h:48
 msgid "Notify me about contacts that sign _in"
 msgstr "Уведомлять о контактах, которые _вошли: "
 
-#: ../data/gui/preferences_window.ui.h:44
+#: ../data/gui/preferences_window.ui.h:49
 msgid "Notify me about contacts that sign _out"
 msgstr "Уведомлять о контактах, которые _вышли: "
 
-#: ../data/gui/preferences_window.ui.h:45
-msgid ""
-"Gajim will notify you via a popup window in the bottom right of the screen "
-"about contacts that just signed out"
-msgstr ""
-"Gajim будет уведомлять вас об отсоединившемся контакте с помощью сообщения в "
-"правом нижнем углу экрана"
+#: ../data/gui/preferences_window.ui.h:50
+msgid "Gajim will notify you via a popup window in the bottom right of the screen about contacts that just signed out"
+msgstr "Gajim будет уведомлять вас об отсоединившемся контакте с помощью сообщения в правом нижнем углу экрана"
 
-#: ../data/gui/preferences_window.ui.h:46
+#: ../data/gui/preferences_window.ui.h:51
 msgid "Allow popup/notifications when I'm _away/na/busy/invisible"
 msgstr "Позволять уведомления в режиме _ушел/недоступен/занят/невидимка"
 
-#: ../data/gui/preferences_window.ui.h:47
+#: ../data/gui/preferences_window.ui.h:52
 msgid "Notify on new _GMail email"
 msgstr "Сообщать о новых письмах в _Gmail"
 
-#: ../data/gui/preferences_window.ui.h:48
-msgid ""
-"If checked, Gajim will show a notification when a new e-mail is received via "
-"GMail"
-msgstr ""
-"Если отмечено, то Gajim будет сообщать о новых письмах, полученных в GMail"
+#: ../data/gui/preferences_window.ui.h:53
+msgid "If checked, Gajim will show a notification when a new e-mail is received via GMail"
+msgstr "Если отмечено, то Gajim будет сообщать о новых письмах, полученных в GMail"
 
-#: ../data/gui/preferences_window.ui.h:49
+#: ../data/gui/preferences_window.ui.h:54
 msgid "Display _extra email details"
 msgstr "Отображать _дополнительные данные о почте"
 
-#: ../data/gui/preferences_window.ui.h:50
-#, fuzzy
-msgid ""
-"If checked, Gajim will also include information about the sender of new "
-"emails"
-msgstr ""
-"Если отмечено, то Gajim будет включать информацию об отправителе новых писем."
+#: ../data/gui/preferences_window.ui.h:55
+msgid "If checked, Gajim will also include information about the sender of the new emails"
+msgstr "Если отмечено, то Gajim будет включать информацию об отправителе новых писем."
 
-#: ../data/gui/preferences_window.ui.h:51
+#: ../data/gui/preferences_window.ui.h:56
 msgid "<b>GMail Options</b>"
 msgstr "<b>Настройки GMail</b>"
 
-#: ../data/gui/preferences_window.ui.h:52
+#: ../data/gui/preferences_window.ui.h:57
 msgid "Show notification area icon:"
 msgstr "Отображать значок в области уведомлений:"
 
-#: ../data/gui/preferences_window.ui.h:53
+#: ../data/gui/preferences_window.ui.h:58
 msgid "<b>Visual Notifications</b>"
 msgstr "<b>Уведомления</b>"
 
-#: ../data/gui/preferences_window.ui.h:54
+#: ../data/gui/preferences_window.ui.h:59
 msgid "Play _sounds"
 msgstr "Проигрывать _звук"
 
-#: ../data/gui/preferences_window.ui.h:55
+#: ../data/gui/preferences_window.ui.h:60
 msgid "Ma_nage..."
 msgstr "_Управление..."
 
-#: ../data/gui/preferences_window.ui.h:56
+#: ../data/gui/preferences_window.ui.h:61
 msgid "Allow sound when I'm _busy"
 msgstr "Проигрывать звук, когда я _занят"
 
-#: ../data/gui/preferences_window.ui.h:57
+#: ../data/gui/preferences_window.ui.h:62
 msgid "<b>Sounds</b>"
 msgstr "<b>Звуки</b>"
 
-#: ../data/gui/preferences_window.ui.h:58
+#: ../data/gui/preferences_window.ui.h:63
 msgid "Notifications"
 msgstr "Уведомления"
 
-#: ../data/gui/preferences_window.ui.h:59
-msgid ""
-"Gajim can send and receive meta-information related to a conversation you "
-"may have with a contact. Here you can specify which chatstates you want to "
-"display in chat windows."
-msgstr ""
-"Gajim может отсылать и получать метаданные, относящиеся к беседе с "
-"контактом. Здесь вы можете указать, какие состояние чата вы хотели бы видеть "
-"в окне чата."
+#: ../data/gui/preferences_window.ui.h:64
+msgid "Gajim can send and receive meta-information related to a conversation you may have with a contact. Here you can specify which chatstates you want to display in chat windows."
+msgstr "Gajim может отсылать и получать метаданные относящиеся к беседе с контактом. Здесь вы можете указать, какие состояние чата вы хотели бы видеть в окне чата."
 
-#: ../data/gui/preferences_window.ui.h:60
+#: ../data/gui/preferences_window.ui.h:65
 msgid "_Display chat state notifications:"
 msgstr "_Отображать уведомления о состоянии чата:"
 
-#: ../data/gui/preferences_window.ui.h:61
-msgid ""
-"Gajim can send and receive meta-information related to a conversation you "
-"may have with a contact. Here you can specify which chatstates you want to "
-"send to the other party."
-msgstr ""
-"Gajim может отсылать и получать метаданные, относящиеся к беседе с "
-"контактом. Здесь вы можете указать, какие состояния чата Gajim будет "
-"отсылать вашему респонденту."
+#: ../data/gui/preferences_window.ui.h:66
+msgid "Gajim can send and receive meta-information related to a conversation you may have with a contact. Here you can specify which chatstates you want to send to the other party."
+msgstr "Gajim может отсылать и получать метаданные, относящиеся к беседе с контактом. Здесь вы можете указать, какие состояния чата Gajim будет отсылать вашему респонденту."
 
-#: ../data/gui/preferences_window.ui.h:62
+#: ../data/gui/preferences_window.ui.h:67
 msgid "_Send chat state notifications:"
 msgstr "_Отправлять уведомления о состоянии чата:"
 
-#: ../data/gui/preferences_window.ui.h:63
+#: ../data/gui/preferences_window.ui.h:68
 msgid "<b>Chat state notifications</b>"
 msgstr "<b>Уведомления</b>"
 
-#: ../data/gui/preferences_window.ui.h:64
+#: ../data/gui/preferences_window.ui.h:69
 msgid "Personal Events"
 msgstr "Расширенные статусы"
 
-#: ../data/gui/preferences_window.ui.h:65
+#: ../data/gui/preferences_window.ui.h:70
 msgid "_Away after:"
 msgstr "Авто-_отошел после:"
 
-#: ../data/gui/preferences_window.ui.h:66
-msgid ""
-"If checked, Gajim will change status to Away when the computer is unused."
-msgstr ""
-"Если отмечено, то Gajim изменит статус на Away, если компьютер не "
-"используется."
+#: ../data/gui/preferences_window.ui.h:71
+msgid "If checked, Gajim will change status to Away when the computer is unused."
+msgstr "Если отмечено, то Gajim изменит статус на Away, если компьютер не используется."
 
-#: ../data/gui/preferences_window.ui.h:67
+#: ../data/gui/preferences_window.ui.h:72
 msgid "_Not available after:"
 msgstr "Авто-_недоступен после:"
 
-#: ../data/gui/preferences_window.ui.h:68
-msgid ""
-"If checked, Gajim will change status to Not Available when the computer has "
-"not been used even longer"
-msgstr ""
-"Если отмечено, Gajim будет менять статус на Недоступен, если компьютер долго "
-"не используется"
+#: ../data/gui/preferences_window.ui.h:73
+msgid "If checked, Gajim will change status to Not Available when the computer has not been used even longer"
+msgstr "Если отмечено, Gajim будет менять статус на Недоступен, если компьютер долго не используется"
 
-#: ../data/gui/preferences_window.ui.h:69
+#: ../data/gui/preferences_window.ui.h:74
 msgid "minutes"
 msgstr "минут"
 
-#: ../data/gui/preferences_window.ui.h:70
+#: ../data/gui/preferences_window.ui.h:75
 msgid ""
-"The auto away status message. If empty, Gajim will not change the current "
-"status message\n"
+"The auto away status message. If empty, Gajim will not change the current status message\n"
 "$S will be replaced by previous status message\n"
 "$T will be replaced by auto-away timeout"
 msgstr ""
-"Автоматическое сообщение о статусе «Ушел». Если не указано, Gajim не будет "
-"изменять сообщение о статусе\n"
+"Автоматическое сообщение о статусе «Ушел». Если не указано, Gajim не будет изменять сообщение о статусе\n"
 "$S заменяется на предыдущее сообщение о статусе\n"
-"$T заменяется на время срабатывания автоматического сообщения о статусе "
-"«Ушел»"
+"$T заменяется на время срабатывания автоматического сообщения о статусе «Ушел»"
 
-#: ../data/gui/preferences_window.ui.h:73
+#: ../data/gui/preferences_window.ui.h:78
 msgid ""
-"The auto not available status message. If empty, Gajim will not change the "
-"current status message\n"
+"The auto not available status message. If empty, Gajim will not change the current status message\n"
 "$S will be replaced by previous status message\n"
 "$T will be replaced by auto-not-available timeout"
 msgstr ""
-"Автоматическое сообщение о статусе «Недоступен». Если не указано, Gajim не "
-"будет изменять сообщение о статусе\n"
+"Автоматическое сообщение о статусе «Недоступен». Если не указано, Gajim не будет изменять сообщение о статусе\n"
 "$S заменяется на предыдущее сообщение о статусе\n"
-"$T заменяется на время срабатывания автоматического сообщения о статусе "
-"«Недоступен»"
+"$T заменяется на время срабатывания автоматического сообщения о статусе «Недоступен»"
 
-#: ../data/gui/preferences_window.ui.h:76
+#: ../data/gui/preferences_window.ui.h:81
 msgid "<b>Auto Status</b>"
 msgstr "<b>Авто статус</b>"
 
-#: ../data/gui/preferences_window.ui.h:77
+#: ../data/gui/preferences_window.ui.h:82
 msgid "Ask status message when I:"
 msgstr "Запрашивать сообщение о статусе, когда я: "
 
-#: ../data/gui/preferences_window.ui.h:78
+#: ../data/gui/preferences_window.ui.h:83
 msgid "Sign _in"
 msgstr "В_ошел"
 
-#: ../data/gui/preferences_window.ui.h:79
+#: ../data/gui/preferences_window.ui.h:84
 msgid "Sign _out"
 msgstr "В_ышел"
 
-#: ../data/gui/preferences_window.ui.h:80
-msgid ""
-"If enabled, Gajim will not ask for a status message. The specified default "
-"message will be used instead."
-msgstr ""
-"Если включено, Gajim не будет запрашивать сообщение о статусе. Вместо него "
-"будет использовано соответствующее сообщение по умолчанию."
+#: ../data/gui/preferences_window.ui.h:85
+msgid "If enabled, Gajim will not ask for a status message. The specified default message will be used instead."
+msgstr "Если включено, Gajim не будет запрашивать сообщение о статусе. Вместо него будет использовано соответствующее сообщение по умолчанию."
 
-#: ../data/gui/preferences_window.ui.h:81
+#: ../data/gui/preferences_window.ui.h:86
 msgid "<b>Status Messages</b>"
 msgstr "<b>Сообщения о статусе</b>"
 
-#: ../data/gui/preferences_window.ui.h:82
+#: ../data/gui/preferences_window.ui.h:87
 msgid "<b>Preset Status Messages</b>"
 msgstr "<b>Предустановленные сообщения о статусе</b>"
 
-#: ../data/gui/preferences_window.ui.h:83 ../src/config.py:398
+#: ../data/gui/preferences_window.ui.h:88
+#: ../src/config.py:403
 msgid "Status"
 msgstr "Статус"
 
-#: ../data/gui/preferences_window.ui.h:84
+#: ../data/gui/preferences_window.ui.h:89
 msgid "Use system _default"
 msgstr "Использовать _системный шрифт"
 
-#: ../data/gui/preferences_window.ui.h:85
+#: ../data/gui/preferences_window.ui.h:90
 msgid "Chat message:"
 msgstr "Сообщение чата:"
 
-#: ../data/gui/preferences_window.ui.h:86
+#: ../data/gui/preferences_window.ui.h:91
 msgid "<b>Font</b>"
 msgstr "<b>Шрифт</b>"
 
-#: ../data/gui/preferences_window.ui.h:87
+#: ../data/gui/preferences_window.ui.h:92
 msgid "Use _transports icons"
 msgstr "Использовать иконки _транспортов"
 
-#: ../data/gui/preferences_window.ui.h:88
-#, fuzzy
-msgid ""
-"If checked, Gajim will use protocol-specific status icons. (e.g. A contact "
-"from MSN will have the equivalent msn icon for status online, away, busy, "
-"etc...)"
-msgstr ""
-"Если отмечено, то Gajim будет использовать для каждого протокола свои иконки "
-"(например, контакты из MSN будут иметь соответствующие иконки msn для "
-"статусов «в сети», «ушёл», «занят» и т.д.)"
+#: ../data/gui/preferences_window.ui.h:93
+msgid "If checked, Gajim will use protocol-specific status icons. (eg. A contact from MSN will have the equivalent msn icon for status online, away, busy, etc...)"
+msgstr "Если отмечено, то Gajim будет использовать для каждого протокола свои иконки (например, контакты из MSN будут иметь соответствующие иконки msn для статусов «в сети», «ушёл», «занят» и т.д.)"
 
-#: ../data/gui/preferences_window.ui.h:89
+#: ../data/gui/preferences_window.ui.h:94
 msgid "Status _iconset:"
 msgstr "Тема статусных _иконок:"
 
-#: ../data/gui/preferences_window.ui.h:90
+#: ../data/gui/preferences_window.ui.h:95
 msgid "Configure color and font of the interface"
 msgstr "Настроить цвет и шрифт интерфейса"
 
-#: ../data/gui/preferences_window.ui.h:91
+#: ../data/gui/preferences_window.ui.h:96
 msgid "T_heme:"
 msgstr "_Тема:"
 
-#: ../data/gui/preferences_window.ui.h:92
+#: ../data/gui/preferences_window.ui.h:97
 msgid "<b>Themes</b>"
 msgstr "<b>Настройки интерфейса</b>"
 
-#: ../data/gui/preferences_window.ui.h:93
+#: ../data/gui/preferences_window.ui.h:98
 msgid "Contact's nickname:"
 msgstr "Ник собеседника:"
 
-#: ../data/gui/preferences_window.ui.h:94
+#: ../data/gui/preferences_window.ui.h:99
 msgid "Your nickname:"
 msgstr "Ваш ник:"
 
-#: ../data/gui/preferences_window.ui.h:95
+#: ../data/gui/preferences_window.ui.h:100
 msgid "_Status message:"
 msgstr "_Сообщение о статусе:"
 
-#: ../data/gui/preferences_window.ui.h:96
+#: ../data/gui/preferences_window.ui.h:101
 msgid "_URL highlight:"
 msgstr "_Цвет ссылок:"
 
-#: ../data/gui/preferences_window.ui.h:97
+#: ../data/gui/preferences_window.ui.h:102
 msgid "_Reset to Default Colors"
 msgstr "_Вернуться к цветам по умолчанию"
 
-#: ../data/gui/preferences_window.ui.h:98
+#: ../data/gui/preferences_window.ui.h:103
 msgid "Contact's message:"
 msgstr "Сообщение собеседника:"
 
-#: ../data/gui/preferences_window.ui.h:99
+#: ../data/gui/preferences_window.ui.h:104
 msgid "Your message:"
 msgstr "Ваше сообщение:"
 
-#: ../data/gui/preferences_window.ui.h:100
-#, fuzzy
-msgid "Group chat highlight:"
-msgstr "Вас упомянули в комнате"
-
-#: ../data/gui/preferences_window.ui.h:101
+#: ../data/gui/preferences_window.ui.h:105
 msgid "<b>Chat Line Colors</b>"
 msgstr "<b>Цвета вкладок с чатами</b>"
 
-#: ../data/gui/preferences_window.ui.h:102
+#: ../data/gui/preferences_window.ui.h:106
 msgid "Style"
 msgstr "Стиль"
 
-#: ../data/gui/preferences_window.ui.h:103
+#: ../data/gui/preferences_window.ui.h:107
 msgid "Audio input device"
 msgstr "Устройство захвата звука"
 
-#: ../data/gui/preferences_window.ui.h:104
+#: ../data/gui/preferences_window.ui.h:108
 msgid "Audio output device"
 msgstr "Устройство вывода звука"
 
-#: ../data/gui/preferences_window.ui.h:105
+#: ../data/gui/preferences_window.ui.h:109
 msgid "<b>Audio</b>"
 msgstr "<b>Звук</b>"
 
-#: ../data/gui/preferences_window.ui.h:106
+#: ../data/gui/preferences_window.ui.h:110
 msgid "Video input device"
 msgstr "Устройство захвата изображения"
 
-#: ../data/gui/preferences_window.ui.h:107
+#: ../data/gui/preferences_window.ui.h:111
 msgid "Video output device"
 msgstr "Устройство вывода изображения"
 
-#: ../data/gui/preferences_window.ui.h:108
+#: ../data/gui/preferences_window.ui.h:112
 msgid "Video framerate"
 msgstr "Частота кадров видео"
 
-#: ../data/gui/preferences_window.ui.h:109
+#: ../data/gui/preferences_window.ui.h:113
 msgid "Video size"
 msgstr "Разрешение видео"
 
-#: ../data/gui/preferences_window.ui.h:110
-#, fuzzy
-msgid "View own video source"
-msgstr "Источник слоя Мозаика"
-
-#: ../data/gui/preferences_window.ui.h:111
+#: ../data/gui/preferences_window.ui.h:114
 msgid "<b>Video</b>"
 msgstr "<b>Изображение</b>"
 
-#: ../data/gui/preferences_window.ui.h:112
+#: ../data/gui/preferences_window.ui.h:115
 msgid "STUN server:"
 msgstr "STUN сервер:"
 
-#: ../data/gui/preferences_window.ui.h:113
+#: ../data/gui/preferences_window.ui.h:116
 msgid "<i>(example: stunserver.org)</i>"
 msgstr "<i>(например: stunserver.org)</i>"
 
-#: ../data/gui/preferences_window.ui.h:114
+#: ../data/gui/preferences_window.ui.h:117
 msgid ""
 "STUN server hostname. If none given, Gajim will try\n"
 "to discover one from server."
@@ -2234,115 +2164,97 @@ msgstr ""
 "Адрес сервера STUN. Если не указано, Gajim попробует\n"
 "получить адрес с сервера."
 
-#: ../data/gui/preferences_window.ui.h:116
+#: ../data/gui/preferences_window.ui.h:119
 msgid "<b>Connection</b>"
 msgstr "<b>Подключение</b>"
 
-#: ../data/gui/preferences_window.ui.h:117 ../src/features_window.py:102
+#: ../data/gui/preferences_window.ui.h:120
+#: ../src/features_window.py:102
 msgid "Audio / Video"
 msgstr "Звук / Изображение"
 
-#: ../data/gui/preferences_window.ui.h:118
+#: ../data/gui/preferences_window.ui.h:121
 msgid "_File manager:"
 msgstr "_Менеджер файлов:"
 
-#: ../data/gui/preferences_window.ui.h:119
+#: ../data/gui/preferences_window.ui.h:122
 msgid "_Mail client:"
 msgstr "_Почтовый клиент:"
 
-#: ../data/gui/preferences_window.ui.h:120
+#: ../data/gui/preferences_window.ui.h:123
 msgid "_Browser:"
 msgstr "_Браузер:"
 
 #. a header for custom browser/client/file manager. so translate sth like: Custom Settings
-#: ../data/gui/preferences_window.ui.h:122
+#: ../data/gui/preferences_window.ui.h:125
 msgid "<b>Custom</b>"
 msgstr "<b>Пользовательские настройки</b>"
 
-#: ../data/gui/preferences_window.ui.h:123
+#: ../data/gui/preferences_window.ui.h:126
 msgid "<b>Applications</b>"
 msgstr "<b>Приложения</b>"
 
-#: ../data/gui/preferences_window.ui.h:124
+#: ../data/gui/preferences_window.ui.h:127
 msgid "_Ignore events from contacts not in the roster"
 msgstr "_Игнорировать события от контактов не из ростера"
 
-#: ../data/gui/preferences_window.ui.h:125
-msgid ""
-"If checked, Gajim will ignore incoming events from unauthorized contacts. "
-"Use with caution, because it blocks all messages from any contact that is "
-"not in the roster"
-msgstr ""
-"Отметьте эту опцию, только если кто-то не из вашего ростера спамит/достает "
-"вас. Используйте с осторожностью, потому что это заблокирует все сообщения "
-"от контактов не из вашего ростера."
+#: ../data/gui/preferences_window.ui.h:128
+msgid "If checked, Gajim will ignore incoming events from unauthorized contacts. Use with caution, because it blocks all messages from any contact that is not in the roster"
+msgstr "Отметьте эту опцию, только если кто-то не из вашего ростера спамит/достает вас. Используйте с осторожностью, потому что это заблокирует все сообщения от контактов не из вашего ростера."
 
-#: ../data/gui/preferences_window.ui.h:126
+#: ../data/gui/preferences_window.ui.h:129
 msgid "Allow client / _OS information to be sent"
 msgstr "Отсылать информацию о клиенте / _ОС"
 
-#: ../data/gui/preferences_window.ui.h:127
-msgid ""
-"If checked, Gajim will allow others to detect the operation system you are "
-"using"
-msgstr ""
-"Если отмечено, то Gajim будет разрешать определять операционную систему, "
-"которую вы используете"
+#: ../data/gui/preferences_window.ui.h:130
+msgid "If checked, Gajim will allow others to detect the operation system you are using"
+msgstr "Если отмечено, то Gajim будет разрешать определять операционную систему, которую вы используете"
 
-#: ../data/gui/preferences_window.ui.h:128
+#: ../data/gui/preferences_window.ui.h:131
 msgid "Allow local system time information to be sent"
 msgstr "Отсылать информацию о локальном времени"
 
-#: ../data/gui/preferences_window.ui.h:129
+#: ../data/gui/preferences_window.ui.h:132
 msgid "If checked, Gajim will allow others to detect the time on your system"
-msgstr ""
-"Если отмечено, то Gajim будет разрешать определять время в системе, которую "
-"вы используете"
+msgstr "Если отмечено, то Gajim будет разрешать определять время в системе, которую вы используете"
 
-#: ../data/gui/preferences_window.ui.h:130
+#: ../data/gui/preferences_window.ui.h:133
 msgid "Log _encrypted chat session"
 msgstr "Записывать в лог _шифрованные сообщения"
 
-#: ../data/gui/preferences_window.ui.h:131
-msgid ""
-"If checked, Gajim will keep logs for encrypted messages. Please note that "
-"when using E2E encryption the remote party has to agree on logging, else the "
-"messages will not be logged."
-msgstr ""
-"Если отмечено, Gajim будет сохранять историю зашифрованных сообщений. "
-"Помните, что при использовании E2E шифрования удаленная сторона должна дать "
-"согласие на ведение истории, иначе сообщения не будут сохраняться."
+#: ../data/gui/preferences_window.ui.h:134
+msgid "If checked, Gajim will keep logs for encrypted messages. Please note that when using E2E encryption the remote party has to agree on logging, else the messages will not be logged."
+msgstr "Если отмечено, Gajim будет сохранять историю зашифрованных сообщений. Помните, что при использовании E2E шифрования удаленная сторона должна дать согласие на ведение истории, иначе сообщения не будут сохраняться."
 
-#: ../data/gui/preferences_window.ui.h:132
+#: ../data/gui/preferences_window.ui.h:135
 msgid "Allow my _idle time to be sent"
 msgstr "Отправлять время моей неактивности"
 
-#: ../data/gui/preferences_window.ui.h:133
+#: ../data/gui/preferences_window.ui.h:136
 msgid "Global proxy:"
 msgstr "Глобальный прокси:"
 
-#: ../data/gui/preferences_window.ui.h:135
+#: ../data/gui/preferences_window.ui.h:138
 msgid "<b>Privacy</b>"
 msgstr "<b>Уведомления</b>"
 
-#: ../data/gui/preferences_window.ui.h:136
+#: ../data/gui/preferences_window.ui.h:139
 msgid "_Log status changes of contacts"
 msgstr "_Записывать в лог изменения статусов контактов"
 
-#: ../data/gui/preferences_window.ui.h:137
+#: ../data/gui/preferences_window.ui.h:140
 msgid "Check on startup if Gajim is the _default Jabber client"
-msgstr ""
-"_Всегда проверять при запуске, является ли Gajim jabber-клиентом по умолчанию"
+msgstr "_Всегда проверять при запуске, является ли Gajim jabber-клиентом по умолчанию"
 
-#: ../data/gui/preferences_window.ui.h:139
+#: ../data/gui/preferences_window.ui.h:142
 msgid "_Open..."
 msgstr "_Открыть..."
 
-#: ../data/gui/preferences_window.ui.h:140
+#: ../data/gui/preferences_window.ui.h:143
 msgid "<b>Advanced Configuration Editor</b>"
 msgstr "<b>Расширенный редактор настроек</b>"
 
-#: ../data/gui/preferences_window.ui.h:141
+#: ../data/gui/preferences_window.ui.h:144
 msgid "Advanced"
 msgstr "Расширенные"
 
@@ -2350,7 +2262,8 @@ msgstr "Расширенные"
 msgid "Privacy Lists:"
 msgstr "Списки доступа:"
 
-#: ../data/gui/privacy_list_window.ui.h:1 ../src/dialogs.py:4121
+#: ../data/gui/privacy_list_window.ui.h:1
+#: ../src/dialogs.py:4023
 msgid "Privacy List"
 msgstr "Список доступа"
 
@@ -2601,8 +2514,10 @@ msgstr "<b>Что вы хотите сделать?</b>"
 
 #. Remove group
 #. Remove
-#: ../data/gui/remove_account_window.ui.h:4 ../src/roster_window.py:5831
-#: ../src/roster_window.py:5956 ../src/roster_window.py:6086
+#: ../data/gui/remove_account_window.ui.h:4
+#: ../src/roster_window.py:5881
+#: ../src/roster_window.py:6006
+#: ../src/roster_window.py:6136
 msgid "_Remove"
 msgstr "_Удалить"
 
@@ -2611,12 +2526,8 @@ msgid "Roster Item Exchange"
 msgstr "Обмен контактами"
 
 #: ../data/gui/roster_item_exchange_window.ui.h:2
-msgid ""
-"<b>someone@somewhere.com</b> would like you to <b>add</b> some contacts in "
-"your roster."
-msgstr ""
-"<b>someone@somewhere.com</b> хочет <b>добавить</b> несколько контактов в ваш "
-"список контактов."
+msgid "<b>someone@somewhere.com</b> would like you to <b>add</b> some contacts in your roster."
+msgstr "<b>someone@somewhere.com</b> хочет <b>добавить</b> несколько контактов в ваш список контактов."
 
 #: ../data/gui/roster_item_exchange_window.ui.h:3
 #: ../data/gui/service_registration_window.ui.h:3
@@ -2625,9 +2536,7 @@ msgstr "_ОК"
 
 #: ../data/gui/roster_item_exchange_window.ui.h:4
 msgid "Message Body <currently unused, so it's hidden by default>"
-msgstr ""
-"Тело сообщения <в данное время не используется, поэтому по умолчанию не "
-"отображается>"
+msgstr "Тело сообщения <в данное время не используется, поэтому по умолчанию не отображается>"
 
 #. Make sure the character after "_" is not M/m (conflicts with Alt+M that is supposed to show the Emoticon Selector)
 #: ../data/gui/roster_window.ui.h:2
@@ -2639,7 +2548,8 @@ msgstr "_Действия"
 msgid "Add _Contact..."
 msgstr "_Добавить контакт..."
 
-#: ../data/gui/roster_window.ui.h:9 ../src/disco.py:1558
+#: ../data/gui/roster_window.ui.h:9
+#: ../src/disco.py:1519
 msgid "_Edit"
 msgstr "_Правка"
 
@@ -2671,7 +2581,8 @@ msgstr "Показать _только активных"
 msgid "Show T_ransports"
 msgstr "Показать Т_ранспорты"
 
-#: ../data/gui/roster_window.ui.h:17 ../src/statusicon.py:359
+#: ../data/gui/roster_window.ui.h:17
+#: ../src/statusicon.py:359
 msgid "Show _Roster"
 msgstr "Показать _ростер"
 
@@ -2701,7 +2612,7 @@ msgstr "Часто задаваемые вопросы (онлайн)"
 
 #: ../data/gui/roster_window.ui.h:25
 msgid "Keyboard Shortcuts"
-msgstr "Сочетания клавиш"
+msgstr "Сочитание клавиш"
 
 #: ../data/gui/roster_window.ui.h:26
 msgid "Fea_tures"
@@ -2720,11 +2631,13 @@ msgid "_Add contact"
 msgstr "Добавить _контакт"
 
 #. Information
-#: ../data/gui/search_window.ui.h:4 ../src/roster_window.py:6098
+#: ../data/gui/search_window.ui.h:4
+#: ../src/roster_window.py:6148
 msgid "_Information"
 msgstr "_Информация о контакте"
 
-#: ../data/gui/search_window.ui.h:5 ../src/disco.py:1408
+#: ../data/gui/search_window.ui.h:5
+#: ../src/disco.py:1372
 msgid "_Search"
 msgstr "_Поиск"
 
@@ -2752,6 +2665,10 @@ msgstr "Кому:"
 msgid "Sen_d"
 msgstr "_Отправить"
 
+#: ../data/gui/single_message_window.ui.h:6
+msgid "Send message"
+msgstr "Отправить сообщение"
+
 #: ../data/gui/single_message_window.ui.h:7
 msgid "_Reply"
 msgstr "_Ответить"
@@ -2777,9 +2694,7 @@ msgid "_Deny"
 msgstr "_Отклонить"
 
 #: ../data/gui/subscription_request_window.ui.h:3
-msgid ""
-"Deny authorization from contact so he or she cannot know when you're "
-"connected"
+msgid "Deny authorization from contact so he or she cannot know when you're connected"
 msgstr "Отклонить авторизацию от контакта (Он не сможет видеть ваш статус)"
 
 #: ../data/gui/subscription_request_window.ui.h:6
@@ -2963,45 +2878,40 @@ msgstr "Jabber-клиент для мгновенных сообщений"
 msgid "A GTK+ Jabber client"
 msgstr "Jabber-клиент на GTK+"
 
-#: ../data/gajim.desktop.in.in.h:4
-msgid "chat;messaging;im;jabber;xmpp;bonjour;voip"
-msgstr ""
-
-#: ../src/adhoc_commands.py:325
+#: ../src/adhoc_commands.py:323
 msgid "Cancel confirmation"
 msgstr "Отменить подтверждение"
 
-#: ../src/adhoc_commands.py:326
-msgid ""
-"You are in process of executing command. Do you really want to cancel it?"
-msgstr ""
-"Команда находится в процессе выполнения. Вы уверены, что хотите её отменить?"
+#: ../src/adhoc_commands.py:324
+msgid "You are in process of executing command. Do you really want to cancel it?"
+msgstr "Команда находится в процессе выполнения. Вы уверены, что хотите её отменить?"
 
-#: ../src/adhoc_commands.py:372
+#: ../src/adhoc_commands.py:370
 #, fuzzy
 msgid "Invalid Form"
-msgstr "Составлять вход"
+msgstr "Неверная комната"
 
-#: ../src/adhoc_commands.py:373
+#: ../src/adhoc_commands.py:371
 #, fuzzy
 msgid "The form is not filled correctly."
-msgstr "Часы установлены неправильно"
+msgstr "В Jabber ID комнаты или сервера содержатся недопустимые символы."
 
-#: ../src/adhoc_commands.py:392 ../src/adhoc_commands.py:416
+#: ../src/adhoc_commands.py:390
+#: ../src/adhoc_commands.py:414
 msgid "Service sent malformed data"
 msgstr "Сервис отправил недопустимые данные"
 
-#: ../src/adhoc_commands.py:401
+#: ../src/adhoc_commands.py:399
 msgid "Service changed the session identifier."
 msgstr "Сервис изменил идентификатор сеанса."
 
-#: ../src/adhoc_commands.py:421
+#: ../src/adhoc_commands.py:419
 #, fuzzy, python-format
 msgid "%s - Ad-hoc Commands - Gajim"
 msgstr "Специальные команды — Gajim"
 
 #. when stanza doesn't have error description
-#: ../src/adhoc_commands.py:516
+#: ../src/adhoc_commands.py:514
 msgid "Service returned an error."
 msgstr "Сервис ответил ошибкой."
 
@@ -3026,7 +2936,8 @@ msgstr "Целое"
 msgid "Text"
 msgstr "Текст"
 
-#: ../src/advanced_configuration_window.py:97 ../src/chat_control.py:1065
+#: ../src/advanced_configuration_window.py:97
+#: ../src/chat_control.py:1069
 msgid "Color"
 msgstr "Цвет"
 
@@ -3059,178 +2970,275 @@ msgstr[0] "Вы получили новую запись (и %d не отобр
 msgstr[1] "Вы получили новые записи (и %d не отображаются):"
 msgstr[2] "Вы получили новые записи (и %d не отображаются):"
 
-#: ../src/chat_control.py:209
+#. the next script, executed in the "po" directory,
+#. generates the following list.
+#. #!/bin/sh
+#. LANG=$(for i in *.po; do j=${i/.po/}; echo -n "_('"$j"')":" '"$j"', " ; done)
+#. echo "{_('en'):'en'",$LANG"}"
+#: ../src/chat_control.py:86
+msgid "English"
+msgstr "Английский"
+
+#: ../src/chat_control.py:86
+msgid "Belarusian"
+msgstr "Белорусский"
+
+#: ../src/chat_control.py:86
+msgid "Bulgarian"
+msgstr "Болгарский"
+
+#: ../src/chat_control.py:87
+msgid "Breton"
+msgstr "Бретонский"
+
+#: ../src/chat_control.py:87
+msgid "Czech"
+msgstr "Чешский"
+
+#: ../src/chat_control.py:87
+msgid "German"
+msgstr "Немецкий"
+
+#: ../src/chat_control.py:88
+msgid "Greek"
+msgstr "Греческий"
+
+#: ../src/chat_control.py:88
+msgid "British"
+msgstr "Британский"
+
+#: ../src/chat_control.py:88
+msgid "Esperanto"
+msgstr "Эсперанто"
+
+#: ../src/chat_control.py:89
+msgid "Spanish"
+msgstr "Испанский"
+
+#: ../src/chat_control.py:89
+msgid "Basque"
+msgstr "Баскский"
+
+#: ../src/chat_control.py:89
+msgid "French"
+msgstr "Французский"
+
+#: ../src/chat_control.py:90
+msgid "Croatian"
+msgstr "Хорватский"
+
+#: ../src/chat_control.py:90
+msgid "Italian"
+msgstr "Итальянский"
+
+#: ../src/chat_control.py:90
+msgid "Norwegian (b)"
+msgstr "Норвежский (букмол)"
+
+#: ../src/chat_control.py:91
+msgid "Dutch"
+msgstr "Голландский"
+
+#: ../src/chat_control.py:91
+msgid "Norwegian"
+msgstr "Норвежский"
+
+#: ../src/chat_control.py:91
+msgid "Polish"
+msgstr "Польский"
+
+#: ../src/chat_control.py:92
+msgid "Portuguese"
+msgstr "Португальский"
+
+#: ../src/chat_control.py:92
+msgid "Brazilian Portuguese"
+msgstr "Португальский (Бразилия)"
+
+#: ../src/chat_control.py:93
+msgid "Russian"
+msgstr "Русский"
+
+#: ../src/chat_control.py:93
+msgid "Serbian"
+msgstr "Сербский"
+
+#: ../src/chat_control.py:93
+msgid "Slovak"
+msgstr "Словацкий"
+
+#: ../src/chat_control.py:94
+msgid "Swedish"
+msgstr "Шведский"
+
+#: ../src/chat_control.py:94
+msgid "Chinese (Ch)"
+msgstr "Китайский"
+
+#: ../src/chat_control.py:94
+msgid "Hebrew"
+msgstr ""
+
+#: ../src/chat_control.py:237
 msgid "Ping?"
 msgstr "Ping?"
 
-#: ../src/chat_control.py:214
+#: ../src/chat_control.py:242
 #, python-format
 msgid "Pong! (%s s.)"
 msgstr "Pong! (%s сек.)"
 
-#: ../src/chat_control.py:219
+#: ../src/chat_control.py:247
 msgid "Error."
 msgstr "Ошибка."
 
+#: ../src/chat_control.py:582
+msgid "Spelling language"
+msgstr "Язык проверки орфографии"
+
 #. we are not connected
-#: ../src/chat_control.py:800
+#: ../src/chat_control.py:614
+#: ../src/chat_control.py:830
 msgid "A connection is not available"
 msgstr "Подключение недоступно"
 
-#: ../src/chat_control.py:801
+#: ../src/chat_control.py:615
+#: ../src/chat_control.py:831
 msgid "Your message can not be sent until you are connected."
 msgstr "Ваше сообщение не может быть отправлено, пока вы не подключитесь."
 
-#: ../src/chat_control.py:1047
+#: ../src/chat_control.py:1051
 msgid "Underline"
 msgstr "Подчеркнутый"
 
-#: ../src/chat_control.py:1048
+#: ../src/chat_control.py:1052
 msgid "Strike"
 msgstr "Зачеркнутый"
 
-#: ../src/chat_control.py:1071
+#: ../src/chat_control.py:1075
 msgid "Font"
 msgstr "Шрифт"
 
-#: ../src/chat_control.py:1080
+#: ../src/chat_control.py:1084
 msgid "Clear formating"
 msgstr "Удалить форматирование"
 
-#: ../src/chat_control.py:1157
+#: ../src/chat_control.py:1161
 msgid "Really send file?"
 msgstr "Отправить файл?"
 
-#: ../src/chat_control.py:1158
+#: ../src/chat_control.py:1162
 #, python-format
 msgid "If you send a file to %s, he/she will know your real Jabber ID."
 msgstr "Если вы пошлете файл %s, он/она узнает ваш настоящий Jabber ID."
 
-#: ../src/chat_control.py:1664 ../src/chat_control.py:2248
-msgid "OpenPGP encryption enabled"
-msgstr "OpenPGP шифрование включено"
-
-#: ../src/chat_control.py:1726
-msgid "Formattings are not available when GPG is active"
-msgstr "Форматирование невозможно если включено GPG"
-
-#: ../src/chat_control.py:1729
-msgid "This contact does not support HTML"
-msgstr "Этот контакт не поддерживает HTML"
+#: ../src/chat_control.py:1645
+#: ../src/chat_control.py:2190
+msgid "GPG encryption enabled"
+msgstr "GPG шифрование включено"
 
 #. Add to roster
-#: ../src/chat_control.py:1734 ../src/common/contacts.py:152
-#: ../src/common/contacts.py:273 ../src/common/helpers.py:67
-#: ../src/common/helpers.py:261 ../src/dialogs.py:1105 ../src/dialogs.py:2310
-#: ../src/dialogs.py:2339 ../src/dialogs.py:3551 ../src/gui_interface.py:485
-#: ../src/gui_menu_builder.py:265 ../src/gui_menu_builder.py:420
-#: ../src/roster_window.py:771 ../src/roster_window.py:1734
-#: ../src/roster_window.py:1736 ../src/roster_window.py:2084
-#: ../src/roster_window.py:3620 ../src/roster_window.py:3647
+#: ../src/chat_control.py:1699
+#: ../src/common/contacts.py:152
+#: ../src/common/contacts.py:273
+#: ../src/common/helpers.py:67
+#: ../src/common/helpers.py:261
+#: ../src/dialogs.py:1101
+#: ../src/dialogs.py:2266
+#: ../src/dialogs.py:2295
+#: ../src/gui_interface.py:484
+#: ../src/gui_menu_builder.py:262
+#: ../src/gui_menu_builder.py:416
+#: ../src/roster_window.py:767
+#: ../src/roster_window.py:1722
+#: ../src/roster_window.py:1724
+#: ../src/roster_window.py:2072
+#: ../src/roster_window.py:3689
+#: ../src/roster_window.py:3716
 msgid "Not in Roster"
 msgstr "Не в ростере"
 
-#. change tooltip text for audio and video buttons if python-farstream is
-#. not installed
-#: ../src/chat_control.py:1759
-#: ../src/command_system/implementation/standard.py:215
-msgid "Toggle audio session"
-msgstr "Переключить аудио сеанс"
-
-#: ../src/chat_control.py:1760
-#: ../src/command_system/implementation/standard.py:225
-msgid "Toggle video session"
-msgstr "Переключить видео сеанс"
-
-#: ../src/chat_control.py:1762
+#: ../src/chat_control.py:1727
+#, fuzzy
 msgid "Feature not available, see Help->Features"
-msgstr "Эта возможность отсутствует, смотрите Помощь->Возможности"
+msgstr "Эта возможность отсутствует в Windows."
 
-#: ../src/chat_control.py:1766
+#: ../src/chat_control.py:1731
 msgid "Feature not supported by remote client"
-msgstr "Клиент на другой стороне не поддерживает данную возможность"
-
-#: ../src/chat_control.py:1779
-msgid "Send files"
-msgstr "Отправить файлы"
+msgstr ""
 
-#: ../src/chat_control.py:1784
+#: ../src/chat_control.py:1748
 msgid "This contact does not support file transfer."
 msgstr "Этот контакт не поддерживает передачу файлов."
 
-#: ../src/chat_control.py:1787
+#: ../src/chat_control.py:1751
 msgid "You need to know the real JID of the contact to send him or her a file."
-msgstr ""
-"Необходимо знать настоящий JID контакта для того, чтобы отправить ему или ей "
-"файл."
+msgstr "Необходимо знать настоящий JID контакта для того, чтобы отправить ему или ей файл."
 
-#: ../src/chat_control.py:1905
+#: ../src/chat_control.py:1869
 #, python-format
 msgid "%(type)s state : %(state)s, reason: %(reason)s"
 msgstr "%(type)s состояние : %(state)s, причина: %(reason)s"
 
-#: ../src/chat_control.py:2097
+#: ../src/chat_control.py:2060
 #, python-format
 msgid "%(nickname)s from group chat %(room_name)s"
 msgstr "%(nickname)s из комнаты %(room_name)s"
 
 #. No key assigned nor a key is used by remote contact
-#: ../src/chat_control.py:2228 ../src/dialogs.py:5194
-msgid "No OpenPGP key assigned"
-msgstr "Ключ OpenPGP не присвоен"
+#: ../src/chat_control.py:2170
+#: ../src/dialogs.py:5092
+msgid "No GPG key assigned"
+msgstr "Ключ GPG не присвоен"
 
-#: ../src/chat_control.py:2229
-msgid ""
-"No OpenPGP key is assigned to this contact. So you cannot encrypt messages "
-"with OpenPGP."
-msgstr ""
-"Этому контакту не присвоен ключ OpenPGP, поэтому вы не можете зашифровать "
-"сообщения с помощью OpenPGP."
+#: ../src/chat_control.py:2171
+msgid "No GPG key is assigned to this contact. So you cannot encrypt messages with GPG."
+msgstr "Этому контакту не присвоен ключ GPG, поэтому вы не можете зашифровать сообщения с помощью GPG."
 
-#: ../src/chat_control.py:2238
-msgid "OpenPGP encryption disabled"
-msgstr "OpenPGP шифрование выключено"
+#: ../src/chat_control.py:2180
+msgid "GPG encryption disabled"
+msgstr "GPG шифрование выключено"
 
-#: ../src/chat_control.py:2264
+#: ../src/chat_control.py:2206
 msgid "Session WILL be logged"
 msgstr "Для сеанса БУДЕТ сохранена история сообщений"
 
-#: ../src/chat_control.py:2266
+#: ../src/chat_control.py:2208
 msgid "Session WILL NOT be logged"
 msgstr "Для сеанса НЕ БУДЕТ сохранена история сообщений"
 
 #. encryption %s active
-#: ../src/chat_control.py:2283
+#: ../src/chat_control.py:2225
 msgid "is"
 msgstr "было"
 
-#: ../src/chat_control.py:2283
+#: ../src/chat_control.py:2225
 msgid "is NOT"
 msgstr "НЕ"
 
 #. chat session %s be logged
-#: ../src/chat_control.py:2285
+#: ../src/chat_control.py:2227
 msgid "will"
 msgstr "будет"
 
-#: ../src/chat_control.py:2285
+#: ../src/chat_control.py:2227
 msgid "will NOT"
 msgstr "НЕ будет"
 
 #. About encrypted chat session
-#: ../src/chat_control.py:2289
+#: ../src/chat_control.py:2231
 msgid "and authenticated"
 msgstr "и заверено"
 
 #. About encrypted chat session
-#: ../src/chat_control.py:2293
+#: ../src/chat_control.py:2235
 msgid "and NOT authenticated"
 msgstr "и НЕ заверено"
 
 #. status will become 'is' or 'is not', authentificaed will become
 #. 'and authentificated' or 'and not authentificated', logged will become
 #. 'will' or 'will not'
-#: ../src/chat_control.py:2300
+#: ../src/chat_control.py:2242
 #, python-format
 msgid ""
 "%(type)s encryption %(status)s active %(authenticated)s.\n"
@@ -3239,81 +3247,75 @@ msgstr ""
 "%(type)s шифрование %(status)s включено %(authenticated)s.\n"
 "Для сеанса %(logged)s сохранена история сообщений."
 
-#: ../src/chat_control.py:2438
+#: ../src/chat_control.py:2370
 msgid "Session negotiation cancelled"
 msgstr "Установление сеанса отменено"
 
-#: ../src/chat_control.py:2448
+#: ../src/chat_control.py:2380
 msgid "This session WILL be archived on server"
 msgstr "История сеанса БУДЕТ сохранена на сервере"
 
-#: ../src/chat_control.py:2450
+#: ../src/chat_control.py:2382
 msgid "This session WILL NOT be archived on server"
 msgstr "История сеанса НЕ БУДЕТ сохранена на сервере"
 
-#: ../src/chat_control.py:2459
+#: ../src/chat_control.py:2391
 msgid "This session is encrypted"
 msgstr "Сеанс зашифрован"
 
-#: ../src/chat_control.py:2462
+#: ../src/chat_control.py:2394
 msgid " and WILL be logged"
 msgstr " и БУДЕТ сохранена история сообщений"
 
-#: ../src/chat_control.py:2464
+#: ../src/chat_control.py:2396
 msgid " and WILL NOT be logged"
 msgstr " и НЕ БУДЕТ сохранена история сообщений"
 
-#: ../src/chat_control.py:2469
-msgid ""
-"Remote contact's identity not verified. Click the shield button for more "
-"details."
-msgstr ""
-"Личность удаленного контакта не подтверждена. Нажмите на кнопку со щитом для "
-"подробностей."
+#: ../src/chat_control.py:2401
+msgid "Remote contact's identity not verified. Click the shield button for more details."
+msgstr "Личность удаленного контакта не подтверждена. Нажмите на кнопке со щитом для подробностей."
 
-#: ../src/chat_control.py:2471
+#: ../src/chat_control.py:2403
 msgid "E2E encryption disabled"
 msgstr "E2E шифрование выключено"
 
-#: ../src/chat_control.py:2519 ../src/chat_control.py:2533
+#: ../src/chat_control.py:2451
+#: ../src/chat_control.py:2465
 msgid "The following message was NOT encrypted"
 msgstr "Последнее сообщение НЕ БЫЛО зашифровано"
 
-#: ../src/chat_control.py:2525
+#: ../src/chat_control.py:2457
 msgid "The following message was encrypted"
 msgstr "Последнее сообщение зашифровано"
 
 #. %s is being replaced in the code with JID
-#: ../src/chat_control.py:2796
+#: ../src/chat_control.py:2728
 #, python-format
 msgid "You just received a new message from \"%s\""
 msgstr "Получено новое сообщение от «%s»"
 
-#: ../src/chat_control.py:2798
-msgid ""
-"If you close this tab and you have history disabled, this message will be "
-"lost."
-msgstr ""
-"Если вы закроете эту вкладку и у вас отключена функция ведения истории "
-"сообщений, то это сообщение будет утеряно."
-
-#: ../src/chat_control.py:2966 ../src/common/connection_handlers_events.py:913
-#: ../src/common/connection_handlers.py:1145
-#: ../src/common/connection_handlers.py:1269 ../src/common/connection.py:523
-#: ../src/common/logger.py:1161 ../src/gajim.py:229 ../src/session.py:98
+#: ../src/chat_control.py:2729
+msgid "If you close this tab and you have history disabled, this message will be lost."
+msgstr "Если вы закроете эту вкладку и у вас отключена функция ведения истории сообщений, то это сообщение будет утеряно."
+
+#: ../src/chat_control.py:2896
+#: ../src/common/connection_handlers_events.py:911
+#: ../src/common/connection_handlers.py:955
+#: ../src/common/connection_handlers.py:1077
+#: ../src/common/connection.py:462
+#: ../src/common/logger.py:1155
+#: ../src/gajim.py:208
+#: ../src/session.py:100
 msgid "Database Error"
 msgstr "Ошибка базы данных"
 
-#: ../src/chat_control.py:2967
+#: ../src/chat_control.py:2897
 #, python-format
-msgid ""
-"The database file (%s) cannot be read. Try to repair it or remove it (all "
-"history will be lost)."
-msgstr ""
-"Файл базы данных (%s) не может быть прочитан. Попробуйте восстановить его "
-"или удалить (вся история будет утеряна)."
+msgid "The database file (%s) cannot be read. Try to repair it or remove it (all history will be lost)."
+msgstr "Файл базы данных (%s) не может быть прочитан. Попробуйте восстановить его или удалить (вся история будет утеряна)."
 
-#: ../src/chat_control.py:3204 ../src/gui_interface.py:1161
+#: ../src/chat_control.py:3134
+#: ../src/gui_interface.py:1151
 #, python-format
 msgid ""
 "Unable to decrypt message from %s\n"
@@ -3322,52 +3324,60 @@ msgstr ""
 "Не удалось расшифровать сообщение от %s\n"
 "Возможно, оно было испорчено."
 
-#: ../src/chat_control.py:3261
+#: ../src/chat_control.py:3167
 #, python-format
 msgid "%(name)s is now %(status)s"
 msgstr "%(name)s теперь %(status)s"
 
-#: ../src/chat_control.py:3320
+#: ../src/chat_control.py:3226
 msgid "File transfer"
 msgstr "Передача файлов"
 
-#: ../src/chat_control.py:3323
+#: ../src/chat_control.py:3229
 msgid "Size"
 msgstr "Размер"
 
-#: ../src/chat_control.py:3325
+#: ../src/chat_control.py:3231
 msgid "_Accept"
 msgstr "_Принять"
 
-#: ../src/chat_control.py:3346 ../src/filetransfers_window.py:211
+#: ../src/chat_control.py:3252
+#: ../src/filetransfers_window.py:211
 msgid "File transfer completed"
 msgstr "Передача завершена"
 
-#: ../src/chat_control.py:3382 ../src/dialogs.py:2927 ../src/dialogs.py:4614
-#: ../src/gui_interface.py:646 ../src/notify.py:278
+#: ../src/chat_control.py:3288
+#: ../src/dialogs.py:2828
+#: ../src/gui_interface.py:645
+#: ../src/notify.py:278
 msgid "Groupchat Invitation"
 msgstr "Приглашение в комнату"
 
-#: ../src/chat_control.py:3404 ../src/gui_interface.py:1019
-#: ../src/roster_window.py:1993
+#: ../src/chat_control.py:3310
+#: ../src/gui_interface.py:1009
+#: ../src/roster_window.py:1981
 msgid "Remote contact stopped transfer"
 msgstr "Удаленный контакт остановил передачу"
 
-#: ../src/chat_control.py:3406 ../src/gui_interface.py:1022
-#: ../src/roster_window.py:1995
+#: ../src/chat_control.py:3312
+#: ../src/gui_interface.py:1012
+#: ../src/roster_window.py:1983
 msgid "Error opening file"
 msgstr "Ошибка открытия файла"
 
-#: ../src/chat_control.py:3408 ../src/filetransfers_window.py:247
+#: ../src/chat_control.py:3314
+#: ../src/filetransfers_window.py:247
 msgid "File transfer stopped"
 msgstr "Передача файла остановлена"
 
-#: ../src/chat_control.py:3411 ../src/filetransfers_window.py:226
+#: ../src/chat_control.py:3317
+#: ../src/filetransfers_window.py:226
 #: ../src/filetransfers_window.py:233
 msgid "File transfer cancelled"
 msgstr "Передача отменена"
 
-#: ../src/chat_control.py:3412 ../src/filetransfers_window.py:226
+#: ../src/chat_control.py:3318
+#: ../src/filetransfers_window.py:226
 #: ../src/filetransfers_window.py:234
 msgid "Connection with peer cannot be established."
 msgstr "Соединение не может быть установлено."
@@ -3385,17 +3395,15 @@ msgid "Execute expression inside a shell, send output"
 msgstr ""
 
 #: ../src/command_system/implementation/middleware.py:74
-#, fuzzy
 msgid "Error during command execution!"
-msgstr "Не удалось исполнить команду!"
+msgstr ""
 
 #: ../src/command_system/implementation/standard.py:50
 msgid "Hide the chat buttons"
 msgstr "Скрыть кнопки в окне беседы"
 
 #: ../src/command_system/implementation/standard.py:56
-msgid ""
-"Show help on a given command or a list of available commands if -a is given"
+msgid "Show help on a given command or a list of available commands if -a is given"
 msgstr ""
 
 #: ../src/command_system/implementation/standard.py:83
@@ -3411,17 +3419,15 @@ msgid "Show logged messages which mention given text"
 msgstr ""
 
 #: ../src/command_system/implementation/standard.py:99
-#, python-format
+#, fuzzy, python-format
 msgid "%s: Nothing found"
-msgstr "%s: Ничего не найдено"
+msgstr "%s не найден"
 
 #: ../src/command_system/implementation/standard.py:105
-#, fuzzy
 msgid "Limit must be an integer"
-msgstr "Аргумент предела должен быть целым числом."
+msgstr ""
 
-#. Do not translate online, away, chat, xa, dnd
-#: ../src/command_system/implementation/standard.py:130
+#: ../src/command_system/implementation/standard.py:129
 msgid ""
 "\n"
 "    Set the current status\n"
@@ -3431,130 +3437,124 @@ msgid ""
 "    "
 msgstr ""
 
-#: ../src/command_system/implementation/standard.py:148
-#, fuzzy
+#: ../src/command_system/implementation/standard.py:147
 msgid "Set the current status to away"
-msgstr "Установлен статус «не в сети»"
+msgstr ""
 
-#: ../src/command_system/implementation/standard.py:151
-#: ../src/common/commands.py:110 ../src/common/helpers.py:249
+#: ../src/command_system/implementation/standard.py:150
+#: ../src/common/commands.py:109
+#: ../src/common/helpers.py:249
 #: ../src/tooltips.py:189
 msgid "Away"
 msgstr "Ушел"
 
-#: ../src/command_system/implementation/standard.py:162
-#, fuzzy
+#: ../src/command_system/implementation/standard.py:161
 msgid "Set the current status to online"
-msgstr "Установлен статус «не в сети»"
+msgstr ""
 
-#: ../src/command_system/implementation/standard.py:165
+#: ../src/command_system/implementation/standard.py:164
 msgid "Available"
 msgstr "Доступен"
 
-#: ../src/command_system/implementation/standard.py:185
-#: ../src/command_system/implementation/standard.py:267
+#: ../src/command_system/implementation/standard.py:184
+#: ../src/command_system/implementation/standard.py:266
 msgid "Clear the text window"
 msgstr "Очистить текстовое окно"
 
-#: ../src/command_system/implementation/standard.py:190
-#, fuzzy
-msgid "Toggle the OpenPGP encryption"
-msgstr "OpenPGP шифрование включено"
+#: ../src/command_system/implementation/standard.py:189
+msgid "Toggle the GPG encryption"
+msgstr "Включить GPG шифрование"
 
-#: ../src/command_system/implementation/standard.py:195
+#: ../src/command_system/implementation/standard.py:194
 msgid "Send a ping to the contact"
 msgstr "Послать пинг контакту"
 
-#: ../src/command_system/implementation/standard.py:198
+#: ../src/command_system/implementation/standard.py:197
+#, fuzzy
 msgid "Command is not supported for zeroconf accounts"
-msgstr "Команда не поддерживается учетной записью zeroconf"
+msgstr "Команда не поддерживается учетной записью zeroconf."
 
-#: ../src/command_system/implementation/standard.py:202
+#: ../src/command_system/implementation/standard.py:201
 msgid "Send DTMF sequence through an open audio session"
 msgstr ""
 
-#: ../src/command_system/implementation/standard.py:205
+#: ../src/command_system/implementation/standard.py:204
 #, fuzzy
 msgid "No open audio sessions with the contact"
 msgstr "Щелкните для просмотра последних бесед с этим человеком"
 
-#: ../src/command_system/implementation/standard.py:208
+#: ../src/command_system/implementation/standard.py:207
 #, fuzzy, python-format
 msgid "%s is not a valid tone"
 msgstr "%s не является допустимым loglevel"
 
-#: ../src/command_system/implementation/standard.py:218
+#: ../src/command_system/implementation/standard.py:217
 #, fuzzy
 msgid "Audio sessions are not available"
-msgstr "Недоступны заголовки раздела!\n"
+msgstr "Подключение недоступно"
 
-#: ../src/command_system/implementation/standard.py:228
+#: ../src/command_system/implementation/standard.py:227
 #, fuzzy
 msgid "Video sessions are not available"
-msgstr "Недоступны заголовки раздела!\n"
+msgstr "Соединение недоступно"
 
-#: ../src/command_system/implementation/standard.py:235
+#: ../src/command_system/implementation/standard.py:234
 #, fuzzy
 msgid "Send a message to the contact that will attract his (her) attention"
 msgstr "Использование: /%s, посылает сообщение контакту"
 
-#: ../src/command_system/implementation/standard.py:274
+#: ../src/command_system/implementation/standard.py:273
 #, fuzzy
 msgid "Change your nickname in a group chat"
-msgstr "Комната «%s» уже есть в ваших закладках."
+msgstr "Изменить ник (Ctrl+N)"
 
 #. invalid char
-#: ../src/command_system/implementation/standard.py:279 ../src/config.py:3405
-#: ../src/dialogs.py:2154
+#: ../src/command_system/implementation/standard.py:278
+#: ../src/config.py:3387
+#: ../src/dialogs.py:2113
 msgid "Invalid nickname"
 msgstr "Неверное имя пользователя"
 
-#: ../src/command_system/implementation/standard.py:284
+#: ../src/command_system/implementation/standard.py:283
 #, fuzzy
 msgid "Open a private chat window with a specified occupant"
-msgstr ""
-"Использование: /%s <ник>, открывает окно привата с указанным посетителем."
+msgstr "Использование: /%s <ник>, открывает окно привата с указанным посетителем."
 
-#: ../src/command_system/implementation/standard.py:290
-#: ../src/command_system/implementation/standard.py:299
-#: ../src/command_system/implementation/standard.py:353
-#: ../src/command_system/implementation/standard.py:365
-#: ../src/command_system/implementation/standard.py:377
+#: ../src/command_system/implementation/standard.py:289
+#: ../src/command_system/implementation/standard.py:298
+#: ../src/command_system/implementation/standard.py:352
+#: ../src/command_system/implementation/standard.py:363
+#: ../src/command_system/implementation/standard.py:374
 msgid "Nickname not found"
 msgstr "Ник не обнаружен"
 
-#: ../src/command_system/implementation/standard.py:293
+#: ../src/command_system/implementation/standard.py:292
 #, fuzzy
-msgid ""
-"Open a private chat window with a specified occupant and send him a message"
-msgstr ""
-"Использование: /%s <ник>, открывает окно привата с указанным посетителем."
+msgid "Open a private chat window with a specified occupant and send him a message"
+msgstr "Использование: /%s <ник>, открывает окно привата с указанным посетителем."
 
-#: ../src/command_system/implementation/standard.py:302
+#: ../src/command_system/implementation/standard.py:301
 msgid "Display or change a group chat topic"
 msgstr "Показать или изменить тему комнаты"
 
-#: ../src/command_system/implementation/standard.py:310
-#, fuzzy
+#: ../src/command_system/implementation/standard.py:309
 msgid "Invite a user to a room for a reason"
 msgstr ""
-"invite &lt;пользователь&gt; [сообщение]:  Пригласить пользователя в комнату."
 
-#: ../src/command_system/implementation/standard.py:313
+#: ../src/command_system/implementation/standard.py:312
 #, fuzzy, python-format
 msgid "Invited %s to %s"
-msgstr "Приглашен %s в %s"
+msgstr "Отправить %s контакту %s"
 
-#: ../src/command_system/implementation/standard.py:316
+#: ../src/command_system/implementation/standard.py:315
 msgid "Join a group chat given by a jid, optionally using given nickname"
 msgstr ""
 
-#: ../src/command_system/implementation/standard.py:333
-msgid ""
-"Leave the groupchat, optionally giving a reason, and close tab or window"
+#: ../src/command_system/implementation/standard.py:332
+msgid "Leave the groupchat, optionally giving a reason, and close tab or window"
 msgstr ""
 
-#: ../src/command_system/implementation/standard.py:338
+#: ../src/command_system/implementation/standard.py:337
 msgid ""
 "\n"
 "    Ban user by a nick or a jid from a groupchat\n"
@@ -3563,61 +3563,48 @@ msgid ""
 "    "
 msgstr ""
 
-#: ../src/command_system/implementation/standard.py:350
+#: ../src/command_system/implementation/standard.py:349
 #, fuzzy
 msgid "Kick user by a nick from a groupchat"
 msgstr "Вы приглашены в конференцию"
 
-#. Do not translate moderator, participant, visitor, none
-#: ../src/command_system/implementation/standard.py:358
+#: ../src/command_system/implementation/standard.py:356
 msgid ""
 "Set occupant role in group chat.\n"
 "    Role can be given as one of the following values:\n"
 "    moderator, participant, visitor, none"
 msgstr ""
 
-#: ../src/command_system/implementation/standard.py:363
+#: ../src/command_system/implementation/standard.py:361
 #, fuzzy
 msgid "Invalid role given"
-msgstr "задана неверная кодировка"
+msgstr "Неверный сервер"
 
-#. Do not translate owner, admin, member, outcast, none
-#: ../src/command_system/implementation/standard.py:370
+#: ../src/command_system/implementation/standard.py:367
 msgid ""
 "Set occupant affiliation in group chat.\n"
 "    Affiliation can be given as one of the following values:\n"
 "    owner, admin, member, outcast, none"
 msgstr ""
 
-#: ../src/command_system/implementation/standard.py:375
+#: ../src/command_system/implementation/standard.py:372
 #, fuzzy
 msgid "Invalid affiliation given"
-msgstr "задана неверная кодировка"
+msgstr "ранг изменен"
 
-#: ../src/command_system/implementation/standard.py:383
+#: ../src/command_system/implementation/standard.py:380
 #, fuzzy
 msgid "Display names of all group chat occupants"
 msgstr "Использование: /%s, показывает список присутствующих в комнате."
 
-#: ../src/command_system/implementation/standard.py:405
+#: ../src/command_system/implementation/standard.py:402
 msgid "Forbid an occupant to send you public or private messages"
 msgstr ""
 
-#: ../src/command_system/implementation/standard.py:410
+#: ../src/command_system/implementation/standard.py:407
 msgid "Allow an occupant to send you public or private messages"
 msgstr ""
 
-#: ../src/command_system/mapping.py:165 ../src/command_system/mapping.py:175
-#: ../src/command_system/mapping.py:195
-#, fuzzy
-msgid "Missing arguments"
-msgstr "необходимо задать аргументы"
-
-#: ../src/command_system/mapping.py:262
-#, fuzzy
-msgid "Excessive arguments"
-msgstr "Аргументы инициализатора:"
-
 #: ../src/common/check_paths.py:39
 msgid "creating logs database"
 msgstr "создается БД истории"
@@ -3626,23 +3613,33 @@ msgstr "создается БД истории"
 msgid "creating cache database"
 msgstr "создается БД истории"
 
-#: ../src/common/check_paths.py:278 ../src/common/check_paths.py:285
-#: ../src/common/check_paths.py:292 ../src/common/check_paths.py:299
-#: ../src/common/check_paths.py:306 ../src/common/check_paths.py:313
-#: ../src/common/check_paths.py:320 ../src/common/check_paths.py:327
+#: ../src/common/check_paths.py:278
+#: ../src/common/check_paths.py:285
+#: ../src/common/check_paths.py:292
+#: ../src/common/check_paths.py:299
+#: ../src/common/check_paths.py:306
+#: ../src/common/check_paths.py:313
+#: ../src/common/check_paths.py:320
+#: ../src/common/check_paths.py:327
 #, python-format
 msgid "%s is a file but it should be a directory"
 msgstr "%s должен быть директорией, а не файлом"
 
-#: ../src/common/check_paths.py:279 ../src/common/check_paths.py:286
-#: ../src/common/check_paths.py:293 ../src/common/check_paths.py:300
-#: ../src/common/check_paths.py:307 ../src/common/check_paths.py:314
-#: ../src/common/check_paths.py:321 ../src/common/check_paths.py:328
-#: ../src/common/check_paths.py:338 ../src/common/check_paths.py:346
+#: ../src/common/check_paths.py:279
+#: ../src/common/check_paths.py:286
+#: ../src/common/check_paths.py:293
+#: ../src/common/check_paths.py:300
+#: ../src/common/check_paths.py:307
+#: ../src/common/check_paths.py:314
+#: ../src/common/check_paths.py:321
+#: ../src/common/check_paths.py:328
+#: ../src/common/check_paths.py:338
+#: ../src/common/check_paths.py:346
 msgid "Gajim will now exit"
 msgstr "Закончить работу"
 
-#: ../src/common/check_paths.py:337 ../src/common/check_paths.py:345
+#: ../src/common/check_paths.py:337
+#: ../src/common/check_paths.py:345
 #, python-format
 msgid "%s is a directory but should be a file"
 msgstr "%s должен быть файлом, а не директорией"
@@ -3652,84 +3649,90 @@ msgstr "%s должен быть файлом, а не директорией"
 msgid "creating %s directory"
 msgstr "создается директория %s"
 
-#: ../src/common/commands.py:86
+#: ../src/common/commands.py:85
 msgid "Change status information"
 msgstr "Изменить информацию о статусе"
 
-#: ../src/common/commands.py:101
+#: ../src/common/commands.py:100
 msgid "Change status"
 msgstr "Контакт изменит статус"
 
-#: ../src/common/commands.py:102
+#: ../src/common/commands.py:101
 msgid "Set the presence type and description"
 msgstr "Установка статуса и статусного сообщения"
 
-#: ../src/common/commands.py:108
+#: ../src/common/commands.py:107
 msgid "Free for chat"
 msgstr "Готов поболтать"
 
-#: ../src/common/commands.py:109
+#: ../src/common/commands.py:108
 msgid "Online"
 msgstr "В сети"
 
-#: ../src/common/commands.py:111
+#: ../src/common/commands.py:110
 msgid "Extended away"
 msgstr "Недоступен (расширенный)"
 
-#: ../src/common/commands.py:112
+#: ../src/common/commands.py:111
 msgid "Do not disturb"
 msgstr "Не беспокоить."
 
-#: ../src/common/commands.py:113
+#: ../src/common/commands.py:112
 msgid "Offline - disconnect"
 msgstr "Не в сети — отключен"
 
-#: ../src/common/commands.py:118
+#: ../src/common/commands.py:117
 msgid "Presence description:"
 msgstr "Описание присутствия:"
 
-#: ../src/common/commands.py:153 ../src/common/commands.py:330
+#: ../src/common/commands.py:152
+#: ../src/common/commands.py:324
 msgid "The status has been changed."
 msgstr "Статус изменён."
 
-#: ../src/common/commands.py:185 ../src/common/commands.py:211
+#: ../src/common/commands.py:184
+#: ../src/common/commands.py:210
 msgid "Leave Groupchats"
 msgstr "Покинуть конференции"
 
-#: ../src/common/commands.py:201
+#: ../src/common/commands.py:200
 #, python-format
 msgid "%(nickname)s on %(room_jid)s"
 msgstr "%(nickname)s из комнаты %(room_jid)s"
 
-#: ../src/common/commands.py:205
+#: ../src/common/commands.py:204
 msgid "You have not joined a groupchat."
 msgstr "Вы не вошли в комнату."
 
-#: ../src/common/commands.py:212
+#: ../src/common/commands.py:211
 msgid "Choose the groupchats you want to leave"
 msgstr "Выберите конференции, которые вы хотите покинуть"
 
 #. Make special context menu if group is Groupchats
-#: ../src/common/commands.py:216 ../src/common/contacts.py:131
-#: ../src/common/helpers.py:67 ../src/roster_window.py:824
-#: ../src/roster_window.py:1738 ../src/roster_window.py:1740
-#: ../src/roster_window.py:2623 ../src/roster_window.py:5716
+#: ../src/common/commands.py:215
+#: ../src/common/contacts.py:131
+#: ../src/common/helpers.py:67
+#: ../src/roster_window.py:820
+#: ../src/roster_window.py:1726
+#: ../src/roster_window.py:1728
+#: ../src/roster_window.py:2611
+#: ../src/roster_window.py:5766
 msgid "Groupchats"
 msgstr "Комнаты"
 
-#: ../src/common/commands.py:257
+#: ../src/common/commands.py:256
 msgid "You left the following groupchats:"
 msgstr "Вы покинули следующие комнаты:"
 
-#: ../src/common/commands.py:269
+#: ../src/common/commands.py:268
 msgid "Forward unread messages"
 msgstr "Переслать непрочитанные сообщения"
 
-#: ../src/common/commands.py:296
+#: ../src/common/commands.py:294
 msgid "All unread messages have been forwarded."
 msgstr "Все непрочитанные сообщения отправлены."
 
-#: ../src/common/commands.py:304
+#: ../src/common/commands.py:302
 msgid "Forward unread message then disconnect"
 msgstr "Переслать непрочитанные сообщения при отключении"
 
@@ -3743,9 +3746,7 @@ msgstr "Использовать DBus и Notification Daemon для показа
 
 #: ../src/common/config.py:79
 msgid "Show only online and free for chat contacts in roster."
-msgstr ""
-"Показывать в ростере только контакты со статусами «Доступен» и «Готов "
-"поболтать»."
+msgstr "Показывать в ростере только контакты со статусами «Доступен» и «Готов поболтать»."
 
 #: ../src/common/config.py:82
 msgid "Time in minutes, after which your status changes to away."
@@ -3756,8 +3757,7 @@ msgid "$S (Away as a result of being idle more than $T min)"
 msgstr "$S (Автостатус 'Отошел' по причине бездействия более $T мин)"
 
 #: ../src/common/config.py:83
-#, fuzzy
-msgid "$S will be replaced by current status message, $T by autoawaytime."
+msgid "$S will be replaced by current status message, $T by autoaway time."
 msgstr "$S будет замещено текущим сообщением о статусе, $T — временем простоя."
 
 #: ../src/common/config.py:85
@@ -3769,16 +3769,12 @@ msgid "$S (Not available as a result of being idle more than $T min)"
 msgstr "$S (Автостатус 'Недоступен' по причине бездействия более $T мин)"
 
 #: ../src/common/config.py:86
-#, fuzzy
-msgid "$S will be replaced by current status message, $T by autoxatime."
+msgid "$S will be replaced by current status message, $T by autoxa time."
 msgstr "$S будет замещено текущим сообщением о статусе, $T — временем простоя."
 
 #: ../src/common/config.py:89
-msgid ""
-"When to show notification area icon. Can be 'never', 'on_event', 'always'."
-msgstr ""
-"Когда показывать иконку в области уведомлений. Возможные значения 'never', "
-"'on_event', 'always'."
+msgid "When to show notification area icon. Can be 'never', 'on_event', 'always'."
+msgstr "Когда показывать иконку в области уведомлений. Возможные значения 'never', 'on_event', 'always'."
 
 #: ../src/common/config.py:90
 msgid "Allow to hide the roster window even if the tray icon is not shown."
@@ -3813,19 +3809,19 @@ msgstr "_Показывать событие в области уведомле
 #: ../src/common/config.py:103
 #, fuzzy
 msgid "Contact signout notification color"
-msgstr "Цвет фона контакта/переписки"
+msgstr "_Показывать событие в области уведомлений"
 
 #. red
 #: ../src/common/config.py:104
 #, fuzzy
 msgid "New message/email notification color."
-msgstr "Показывать _уведомления при получении сообщений"
+msgstr "Предпросмотр новых сообщений во всплывающем окне?"
 
 #. dodgerblue
 #: ../src/common/config.py:105
 #, fuzzy
 msgid "File transfer request notification color."
-msgstr "Удовлетворить запрос передачи файлов от %s?"
+msgstr "Запрос передачи файлов"
 
 #. khaki
 #: ../src/common/config.py:106
@@ -3841,8 +3837,9 @@ msgstr "Показать уведомление по окончании загр
 
 #. yellowgreen
 #: ../src/common/config.py:108
+#, fuzzy
 msgid "Groupchat invitation notification color"
-msgstr "Цвет, использующийся для шрифта уведомления о наборе"
+msgstr "Приглашение в комнату"
 
 #. tan1
 #: ../src/common/config.py:109
@@ -3851,9 +3848,8 @@ msgstr ""
 
 #. thistle2
 #: ../src/common/config.py:110
-#, fuzzy
 msgid "Other dialogs color."
-msgstr "Цвет ника собеседника."
+msgstr ""
 
 #. white
 #: ../src/common/config.py:111
@@ -3877,15 +3873,16 @@ msgid "Status message text font."
 msgstr "Шрифт сообщения о статусе"
 
 #: ../src/common/config.py:116
-msgid ""
-"List (space separated) of rows (accounts and groups) that are collapsed."
-msgstr ""
-"Список (через пробел) строк (учётных записей и групп), которые свёрнуты."
+msgid "List (space separated) of rows (accounts and groups) that are collapsed."
+msgstr "Список (через пробел) строк (учётных записей и групп), которые свёрнуты."
 
 #. sorted alphanum
-#: ../src/common/config.py:117 ../src/common/config.py:533
-#: ../src/common/optparser.py:295 ../src/common/optparser.py:491
-#: ../src/common/optparser.py:525 ../src/gui_interface.py:2790
+#: ../src/common/config.py:117
+#: ../src/common/config.py:528
+#: ../src/common/optparser.py:295
+#: ../src/common/optparser.py:491
+#: ../src/common/optparser.py:525
+#: ../src/gui_interface.py:2761
 msgid "default"
 msgstr "По_умолчанию"
 
@@ -3904,414 +3901,249 @@ msgstr ""
 "«never» — не печатать время."
 
 #: ../src/common/config.py:125
-msgid ""
-"Print time in chats using Fuzzy Clock. Value of fuzziness from 1 to 4, or 0 "
-"to disable fuzzyclock. 1 is the most precise clock, 4 the least precise one. "
-"This is used only if print_time is 'sometimes'."
-msgstr ""
-"Печатать время в беседе как в неточных часах. Степень неточности может быть "
-"от 1 до 4, 0 отключает эту функцию. 1 самые точные часы, 4 самые неточные. "
-"Используется только если режим печати времени установлен на "
-"«sometimes» (иногда)."
+msgid "Print time in chats using Fuzzy Clock. Value of fuzziness from 1 to 4, or 0 to disable fuzzyclock. 1 is the most precise clock, 4 the least precise one. This is used only if print_time is 'sometimes'."
+msgstr "Печатать время в беседе как в неточных часах. Степень неточности может быть от 1 до 4, 0 отключает эту функцию. 1 самые точные часы, 4 самые неточные. Используется только если режим печати времени установлен на «sometimes» (иногда)."
 
 #: ../src/common/config.py:128
 msgid "Treat * / _ pairs as possible formatting characters."
 msgstr "Обрабатывать пары * / _ как возможные форматирующие символы."
 
 #: ../src/common/config.py:129
-msgid ""
-"If True, do not remove */_ . So *abc* will be bold but with * * not removed."
-msgstr ""
-"Если активно, то не будут удаляться */_. Так что *фыва* будет написано "
-"полужирным шрифтом, но * * удалены не будут"
+msgid "If True, do not remove */_ . So *abc* will be bold but with * * not removed."
+msgstr "Если активно, то не будут удаляться */_. Так что *фыва* будет написано полужирным шрифтом, но * * удалены не будут"
 
 #: ../src/common/config.py:132
-msgid ""
-"Uses ReStructured text markup to send HTML, plus ascii formatting if "
-"selected. For syntax, see http://docutils.sourceforge.net/docs/ref/rst/"
-"restructuredtext.html (If you want to use this, install docutils)"
-msgstr ""
-"Использовать разметку ReStructuredText для отправки HTML, плюс ascii "
-"форматирование, если оно выбрано. Синтаксис описан на http://docutils."
-"sourceforge.net/docs/ref/rst/restructuredtext.htm (Если вы хотите "
-"воспользоваться этой опцией, установите docutils)"
+msgid "Uses ReStructured text markup to send HTML, plus ascii formatting if selected. For syntax, see http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html (If you want to use this, install docutils)"
+msgstr "Использовать разметку ReStructuredText для отправки HTML, плюс ascii форматирование, если оно выбрано. Синтаксис описан на http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.htm (Если вы хотите воспользоваться этой опцией, установите docutils)"
 
 #: ../src/common/config.py:141
-msgid ""
-"Character to add after nickname when using nick completion (tab) in group "
-"chat."
-msgstr ""
-"Символ, который нужно добавлять к нику, когда используется дополнение (tab) "
-"в комнате."
+msgid "Character to add after nickname when using nick completion (tab) in group chat."
+msgstr "Символ, который нужно добавлять к нику, когда используется дополнение (tab) в комнате."
 
 #: ../src/common/config.py:142
-msgid ""
-"Character to propose to add after desired nickname when desired nickname is "
-"used by someone else in group chat."
-msgstr ""
-"Символ, который будет добавляться после ника, когда желаемый ник уже занят "
-"кем-нибудь в комнате."
+msgid "Character to propose to add after desired nickname when desired nickname is used by someone else in group chat."
+msgstr "Символ, который будет добавляться после ника, когда желаемый ник уже занят кем-нибудь в комнате."
 
 #: ../src/common/config.py:160
-msgid ""
-"If True, Gajim will save roster position when hiding roster, and restore it "
-"when showing roster."
+msgid "If true, Gajim will save roster position when hiding roster, and restore it when showing roster."
 msgstr ""
 
-#: ../src/common/config.py:172
-msgid ""
-"This option let you customize timestamp that is printed in conversation. For "
-"exemple \"[%H:%M] \" will show \"[hour:minute] \". See python doc on "
-"strftime for full documentation: http://docs.python.org/lib/module-time.html"
-msgstr ""
-"Эта опция позволяет настроить отпечаток времени, который печатается в чатах. "
-"К примеру «[%H:%M]» будет показано как «[чч:мм]». Смотрите дополнительно "
-"документацию python к strftime (http://docs.python.org/lib/module-time.html)"
+#: ../src/common/config.py:171
+msgid "This option let you customize timestamp that is printed in conversation. For exemple \"[%H:%M] \" will show \"[hour:minute] \". See python doc on strftime for full documentation: http://docs.python.org/lib/module-time.html"
+msgstr "Эта опция позволяет настроить отпечаток времени, который печатается в чатах. К примеру «[%H:%M]» будет показано как «[чч:мм]». Смотрите дополнительно документацию python к strftime (http://docs.python.org/lib/module-time.html)"
 
-#: ../src/common/config.py:173
+#: ../src/common/config.py:172
 msgid "Characters that are printed before the nickname in conversations"
 msgstr "Символы, которые будут отображаться перед никами в чате."
 
-#: ../src/common/config.py:174
+#: ../src/common/config.py:173
 msgid "Characters that are printed after the nickname in conversations"
 msgstr "Символы, которые будут отображаться после ников в чате"
 
-#: ../src/common/config.py:177
-msgid ""
-"Specify the command to run when new mail arrives, e.g.: /usr/bin/getmail -q"
-msgstr ""
-"Определение команды для запуска при получении нового письма, например: /usr/"
-"bin/getmail -q"
+#: ../src/common/config.py:176
+msgid "Specify the command to run when new mail arrives, e.g.: /usr/bin/getmail -q"
+msgstr "Определение команды для запуска при получении нового письма, например: /usr/bin/getmail -q"
 
-#: ../src/common/config.py:179
+#: ../src/common/config.py:178
 msgid "Add * and [n] in roster title?"
 msgstr "Добавлять * и [n] в окно ростера?"
 
-#: ../src/common/config.py:180
-msgid ""
-"How many lines to remember from previous conversation when a chat tab/window "
-"is reopened?"
-msgstr ""
-"Сколько строк из предыдущей беседы выводить, когда вкладка/окно открываются "
-"вновь."
+#: ../src/common/config.py:179
+msgid "How many lines to remember from previous conversation when a chat tab/window is reopened."
+msgstr "Сколько строк из предыдущей беседы выводить, когда вкладка/окно открываются вновь."
 
-#: ../src/common/config.py:181
+#: ../src/common/config.py:180
 msgid "How many minutes should last lines from previous conversation last."
 msgstr "Сколько минут должны оставаться последние строки из предыдущей беседы."
 
+#: ../src/common/config.py:181
+#, fuzzy
+msgid "How many lines to request from server when entering a groupchat. -1 means no limit"
+msgstr "Количество строк истории сообщений, запрашиваемых при входе в комнату. -1 - не ограничено"
+
 #: ../src/common/config.py:182
-msgid ""
-"How many lines to request from server when entering a groupchat. -1 means no "
-"limit"
-msgstr ""
-"Количество строк истории сообщений, запрашиваемых при входе в комнату. -1 - "
-"не ограничено"
+msgid "How many minutes back to request logs when a entering a groupchat. -1 means no limit"
+msgstr "За какой период (минут назад) запрашивать историю сообщений при входе в комнату. -1 - не ограничено"
 
 #: ../src/common/config.py:183
-msgid ""
-"How many minutes back to request logs when entering a groupchat. -1 means no "
-"limit"
-msgstr ""
-"За какой период (минут назад) запрашивать историю сообщений при входе в "
-"комнату. -1 - не ограничено"
+msgid "How many seconds to wait before trying to autorejoin to a conference you are being disconnected from. Set to 0 to disable autorejoining."
+msgstr "Время ожидания в секундах перед попыткой снова автоматически войти в комнату, от которой вы были отключены. Чтобы отключить автоматический вход в этом случае, установите значение 0."
 
 #: ../src/common/config.py:184
-msgid ""
-"How many seconds to wait before trying to autorejoin to a conference you are "
-"being disconnected from. Set to 0 to disable autorejoining."
+msgid "Should autorejoin be activated when we are being kicked from a conference?"
 msgstr ""
-"Время ожидания в секундах перед попыткой снова автоматически войти в "
-"комнату, от которой вы были отключены. Чтобы отключить автоматический вход в "
-"этом случае, установите значение 0."
 
 #: ../src/common/config.py:185
-msgid ""
-"Should autorejoin be activated when we are being kicked from a conference?"
-msgstr ""
+msgid "Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ Client default behaviour)."
+msgstr "Оправлять сообщения по Ctrl+Enter и Enter создает новую строку (как в Mirabilis ICQ)"
 
-#: ../src/common/config.py:186
-msgid ""
-"Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ "
-"Client default behaviour)."
-msgstr ""
-"Оправлять сообщения по Ctrl+Enter и Enter создает новую строку (как в "
-"Mirabilis ICQ)"
-
-#: ../src/common/config.py:188
+#: ../src/common/config.py:187
 msgid "How many lines to store for Ctrl+KeyUP."
 msgstr "Сколько строк хранить для Ctrl+Стрелка вверх"
 
-#: ../src/common/config.py:191
+#: ../src/common/config.py:190
 #, python-format
-msgid ""
-"Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' "
-"which means use wiktionary."
-msgstr ""
-"Введите свою ссылку с %s, в которой %s подменяет слово/фразу, или "
-"«WIKTIONARY», чтобы использовать Викисловарь."
+msgid "Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' which means use wiktionary."
+msgstr "Введите свою ссылку с %s, в которой %s подменяет слово/фразу, или «WIKTIONARY», чтобы использовать Викисловарь."
 
-#: ../src/common/config.py:194
+#: ../src/common/config.py:193
 msgid "If checked, Gajim can be controlled remotely using gajim-remote."
-msgstr ""
-"Если отмечено, то Gajim'ом можно будет управлять удаленно с использованием "
-"gajim-remote."
+msgstr "Если отмечено, то Gajim'ом можно будет управлять удаленно с использованием gajim-remote."
+
+#: ../src/common/config.py:194
+msgid "If True, listen to D-Bus signals from NetworkManager and change the status of accounts (provided they do not have listen_to_network_manager set to False and they sync with global status) based upon the status of the network connection."
+msgstr "Если активно, тогда «слушать» сообщения от NetworkManager по D-Bus и изменять статус учетных записей в зависимости от состояния сетевого соединения (необходимо, чтобы учетные записи не имели установленной в «Неактивно» опции listen_to_network_manager и они должны синхронизировать свой статус с глобальным)"
 
 #: ../src/common/config.py:195
-msgid ""
-"If True, listen to D-Bus signals from NetworkManager and change the status "
-"of accounts (provided they do not have listen_to_network_manager set to "
-"False and they sync with global status) based upon the status of the network "
-"connection."
-msgstr ""
-"Если активно, тогда «слушать» сообщения от NetworkManager по D-Bus и "
-"изменять статус учетных записей в зависимости от состояния сетевого "
-"соединения (необходимо, чтобы учетные записи не имели установленной в "
-"«Неактивно» опции listen_to_network_manager и они должны синхронизировать "
-"свой статус с глобальным)"
+msgid "Sent chat state notifications. Can be one of all, composing_only, disabled."
+msgstr "Отсылать уведомления о состоянии беседы. Варианты: all (все), composing_only (только печать), disabled (никаких уведомлений)."
 
 #: ../src/common/config.py:196
-msgid ""
-"Sent chat state notifications. Can be one of all, composing_only, disabled."
-msgstr ""
-"Отсылать уведомления о состоянии беседы. Варианты: all (все), composing_only "
-"(только печать), disabled (никаких уведомлений)."
+msgid "Displayed chat state notifications in chat windows. Can be one of all, composing_only, disabled."
+msgstr "Отображать состояния беседы в окне беседы. Варианты: all (все), composing_only (только печать), disabled (никаких уведомлений)."
 
-#: ../src/common/config.py:197
-msgid ""
-"Displayed chat state notifications in chat windows. Can be one of all, "
-"composing_only, disabled."
-msgstr ""
-"Отображать состояния беседы в окне беседы. Варианты: all (все), "
-"composing_only (только печать), disabled (никаких уведомлений)."
+#: ../src/common/config.py:198
+msgid "When not printing time for every message (print_time==sometimes), print it every x minutes."
+msgstr "Если отключена печать времени для каждого сообщения, то печатать его каждые X минут."
 
 #: ../src/common/config.py:199
-msgid ""
-"When not printing time for every message (print_time==sometimes), print it "
-"every x minutes."
-msgstr ""
-"Если отключена печать времени для каждого сообщения, то печатать его каждые "
-"X минут."
-
-#: ../src/common/config.py:200
 msgid "Ask before closing a group chat tab/window."
 msgstr "Спрашивать перед закрытием окна/вкладки комнаты."
 
+#: ../src/common/config.py:200
+msgid "Always ask before closing group chat tab/window in this space separated list of group chat jids."
+msgstr "Всегда спрашивать перед закрытием окна/вкладки комнаты из этого списка. Комнаты в списке разделяются пробелом."
+
 #: ../src/common/config.py:201
-msgid ""
-"Always ask before closing group chat tab/window in this space separated list "
-"of group chat JIDs."
-msgstr ""
-"Всегда спрашивать перед закрытием окна/вкладки комнаты из этого списка. "
-"Комнаты в списке разделяются пробелом."
+msgid "Never ask before closing group chat tab/window in this space separated list of group chat jids."
+msgstr "Никогда не спрашивать перед закрытием окна/вкладки комнаты из этого списка. Комнаты в списке разделяются пробелом."
 
 #: ../src/common/config.py:202
-msgid ""
-"Never ask before closing group chat tab/window in this space separated list "
-"of group chat JIDs."
-msgstr ""
-"Никогда не спрашивать перед закрытием окна/вкладки комнаты из этого списка. "
-"Комнаты в списке разделяются пробелом."
+msgid "Ask before closing tabbed chat window if there are control that can loose data (chat, private chat, groupchat that will not be minimized)"
+msgstr "Спрашивать перед закрытием окна разговора с вкладками, если существует элемент, который может потерять данные (разговор, личный разговор, разговор в комнате, которые не будут свёрнуты)"
 
-#: ../src/common/config.py:203
-msgid ""
-"Ask before closing tabbed chat window if there are controls that can lose "
-"data (chat, private chat, groupchat that will not be minimized)"
-msgstr ""
-"Спрашивать перед закрытием окна разговора с вкладками, если существует "
-"элемент, который может потерять данные (разговор, личный разговор, разговор "
-"в комнате, которые не будут свёрнуты)"
-
-#: ../src/common/config.py:206
-msgid ""
-"Comma separated list of hosts that we send, in addition of local interfaces, "
-"for File Transfer in case of address translation/port forwarding."
-msgstr ""
-"Разделенный запятыми список хостов, который мы отсылаем в дополнение к "
-"локальным интерфейсам при передаче файлов в случае, если мы за NAT или "
-"используется перенаправление портов."
+#: ../src/common/config.py:205
+msgid "Comma separated list of hosts that we send, in addition of local interfaces, for File Transfer in case of address translation/port forwarding."
+msgstr "Разделенный запятыми список хостов, который мы отсылаем в дополнение к локальным интерфейсам при передаче файлов в случае, если мы за NAT или используется перенаправление портов."
 
-#: ../src/common/config.py:208
+#: ../src/common/config.py:207
 msgid "IEC standard says KiB = 1024 bytes, KB = 1000 bytes."
 msgstr "IEC стандарт утверждает, что KiB = 1024 байт, KB = 1000 байт"
 
-#: ../src/common/config.py:210
+#: ../src/common/config.py:209
 msgid "Notify of events in the notification area."
 msgstr "Уведомлять о событиях в области уведомлений."
 
-#: ../src/common/config.py:211
-msgid ""
-"If False, Gajim will display a static event icon instead of the blinking "
-"status icon in the notification area when notifying on event."
+#: ../src/common/config.py:210
+msgid "If False, Gajim will display a static event icon instead of the blinking status icon in the notification area when notifying on event."
 msgstr ""
 
-#: ../src/common/config.py:217
+#: ../src/common/config.py:216
 msgid "Show tab when only one conversation?"
 msgstr "Показывать вкладку при одном чат-окне?"
 
-#: ../src/common/config.py:218
+#: ../src/common/config.py:217
 msgid "Show tabbed notebook border in chat windows?"
 msgstr "Показывать границу вкладки в окне чата?"
 
-#: ../src/common/config.py:219
+#: ../src/common/config.py:218
 msgid "Show close button in tab?"
 msgstr "Показывать кнопку закрытия на вкладке?"
 
-#: ../src/common/config.py:220
-msgid ""
-"A list of modp groups to use in a Diffie-Hellman, highest preference first, "
-"separated by commas. Valid groups are 1, 2, 5, 14, 15, 16, 17 and 18. Higher "
-"numbers are more secure, but take longer to calculate when you start a "
-"session."
-msgstr ""
-"Список modp групп (через запятую) для использования в алгоритме Диффи-"
-"Хеллмана, начиная с наиболее предпочтительной. Допустимые группы: 1, 2, 5, "
-"14, 15, 16, 17 и 18. Более высокие числа безопаснее, но требуют более "
-"длительных вычислений при начале сеанса."
+#: ../src/common/config.py:219
+msgid "A list of modp groups to use in a Diffie-Hellman, highest preference first, separated by commas. Valid groups are 1, 2, 5, 14, 15, 16, 17 and 18. Higher numbers are more secure, but take longer to calculate when you start a session."
+msgstr "Список modp групп (через запятую) для использования в алгоритме Диффи-Хеллмана, начиная с наиболее предпочтительной. Допустимые группы: 1, 2, 5, 14, 15, 16, 17 и 18. Более высокие числа безопаснее, но требуют более длительных вычислений при начале сеанса."
 
-#: ../src/common/config.py:241
+#: ../src/common/config.py:240
 msgid "Preview new messages in notification popup?"
 msgstr "Предпросмотр новых сообщений во всплывающем окне?"
 
+#: ../src/common/config.py:245
+msgid "A semicolon-separated list of words that will be highlighted in group chats."
+msgstr "Список слов (через точку с запятой), которые будут подсвечиваться в комнатах."
+
 #: ../src/common/config.py:246
-msgid ""
-"A semicolon-separated list of words that will be highlighted in group chats."
-msgstr ""
-"Список слов (через точку с запятой), которые будут подсвечиваться в комнатах."
+msgid "If True, quits Gajim when X button of Window Manager is clicked. This setting is taken into account only if notification icon is used."
+msgstr "Если активно, то Gajim будет завершаться при нажатии на кнопку закрытия окна. Эта опция учитывается, только если используется иконка в области уведомлений."
 
 #: ../src/common/config.py:247
-msgid ""
-"If True, quits Gajim when X button of Window Manager is clicked. This "
-"setting is taken into account only if notification icon is used."
-msgstr ""
-"Если активно, то Gajim будет завершаться при нажатии на кнопку закрытия "
-"окна. Эта опция учитывается, только если используется иконка в области "
-"уведомлений."
+msgid "If True, Gajim will check if it's the default jabber client on each startup."
+msgstr "Если активно, то Gajim будет проверять при запуске, является ли он jabber-клиентом по умолчанию."
 
 #: ../src/common/config.py:248
-msgid ""
-"If True, Gajim will check if it's the default jabber client on each startup."
-msgstr ""
-"Если активно, то Gajim будет проверять при запуске, является ли он jabber-"
-"клиентом по умолчанию."
+msgid "If True, Gajim will display an icon on each tab containing unread messages. Depending on the theme, this icon may be animated."
+msgstr "Если активно, то Gajim отображает иконку на каждой вкладке, которая содержит непрочитанные сообщения. В зависимости от темы, она может быть анимированной."
 
 #: ../src/common/config.py:249
-msgid ""
-"If True, Gajim will display an icon on each tab containing unread messages. "
-"Depending on the theme, this icon may be animated."
-msgstr ""
-"Если активно, то Gajim отображает иконку на каждой вкладке, которая содержит "
-"непрочитанные сообщения. В зависимости от темы, она может быть анимированной."
+msgid "If True, Gajim will display the status message, if not empty, for every contact under the contact name in roster window."
+msgstr "Если активно то Gajim будет отображать сообщение о статусе, если оно не пустое, для каждого контакта под именем контакта в окне ростера"
 
-#: ../src/common/config.py:250
-msgid ""
-"If True, Gajim will display the status message, if not empty, for every "
-"contact under the contact name in roster window."
-msgstr ""
-"Если активно то Gajim будет отображать сообщение о статусе, если оно не "
-"пустое, для каждого контакта под именем контакта в окне ростера"
-
-#: ../src/common/config.py:256
+#: ../src/common/config.py:255
 msgid "Define the position of the avatar in roster. Can be left or right"
 msgstr "Определяет позицию аватар в ростере. Может быть left или right"
 
+#: ../src/common/config.py:256
+msgid "If True, Gajim will ask for avatar each contact that did not have an avatar last time or has one cached that is too old."
+msgstr "Если активно, то Gajim будет запрашивать аватару для каждого контакта, у которого её не было в последний раз или она уже слишком старая."
+
 #: ../src/common/config.py:257
-msgid ""
-"If True, Gajim will ask for avatar each contact that did not have an avatar "
-"last time or has one cached that is too old."
-msgstr ""
-"Если активно, то Gajim будет запрашивать аватару для каждого контакта, у "
-"которого её не было в последний раз или она уже слишком старая."
+msgid "If False, Gajim will no longer print status line in chats when a contact changes his or her status and/or his or her status message."
+msgstr "Если неактивно, то Gajim больше не будет показывать строку статуса в окне беседы, когда контакт меняет его или её статус и/или сообщение о статусе."
 
 #: ../src/common/config.py:258
-msgid ""
-"If False, Gajim will no longer print status line in chats when a contact "
-"changes his or her status and/or his or her status message."
-msgstr ""
-"Если неактивно, то Gajim больше не будет показывать строку статуса в окне "
-"беседы, когда контакт меняет его или её статус и/или сообщение о статусе."
+msgid "can be \"none\", \"all\" or \"in_and_out\". If \"none\", Gajim will no longer print status line in groupchats when a member changes his or her status and/or his or her status message. If \"all\" Gajim will print all status messages. If \"in_and_out\", Gajim will only print FOO enters/leaves group chat."
+msgstr "может быть «none», «all» или «in_and_out». Если установлено «none», то Gajim больше не будет выводить сообщения о статусе в комнатах, когда участник меняет свой статус или сообщение о статусе. Если установлено в «all», то Gajim будет выводить все сообщения о статусе. Если установлено в «in_and_out», то Gajim будет выводить сообщение только когда кто-то входит или выходит из комнаты."
 
-#: ../src/common/config.py:259
-msgid ""
-"Can be \"none\", \"all\" or \"in_and_out\". If \"none\", Gajim will no "
-"longer print status line in groupchats when a member changes his or her "
-"status and/or his or her status message. If \"all\" Gajim will print all "
-"status messages. If \"in_and_out\", Gajim will only print FOO enters/leaves "
-"group chat."
-msgstr ""
-"может быть «none», «all» или «in_and_out». Если установлено «none», то Gajim "
-"больше не будет выводить сообщения о статусе в комнатах, когда участник "
-"меняет свой статус или сообщение о статусе. Если установлено в «all», то "
-"Gajim будет выводить все сообщения о статусе. Если установлено в "
-"«in_and_out», то Gajim будет выводить сообщение только когда кто-то входит "
-"или выходит из комнаты."
-
-#: ../src/common/config.py:261
+#: ../src/common/config.py:260
 msgid "Log XHTML messages instead of plain text messages."
 msgstr "Сохранять XHTML сообщения вместо простых текстовых сообщений"
 
-#: ../src/common/config.py:262
+#: ../src/common/config.py:261
 msgid "Background color of contacts when they just signed in."
 msgstr "Фоновый цвет контакта, который только что вошел."
 
-#: ../src/common/config.py:263
+#: ../src/common/config.py:262
 msgid "Background color of contacts when they just signed out."
 msgstr "Фоновый цвет контакта, который только что вышел."
 
-#: ../src/common/config.py:265
-msgid ""
-"If True, restored messages will use a smaller font than the default one."
+#: ../src/common/config.py:264
+msgid "If True, restored messages will use a smaller font than the default one."
 msgstr "Если активно, то восстановленные сообщения будут иметь меньший шрифт."
 
-#: ../src/common/config.py:266
+#: ../src/common/config.py:265
 msgid "Don't show avatar for the transport itself."
 msgstr "Не показывать аватар для транспорта."
 
-#: ../src/common/config.py:267
+#: ../src/common/config.py:266
 msgid "Don't show roster in the system taskbar."
 msgstr "Не показывать ростер в панели задач."
 
-#: ../src/common/config.py:268
-msgid ""
-"If True and installed GTK+ and PyGTK versions are at least 2.8, make the "
-"window flash (the default behaviour in most Window Managers) when holding "
-"pending events."
-msgstr ""
-"Если активно и установлены GTK+ и PyGTK версий 2.8 и выше, то окно будет "
-"мигать (поведение по умолчанию для большинства менеджеров окон) когда "
-"присутствуют не просмотренные события."
+#: ../src/common/config.py:267
+msgid "If True and installed GTK+ and PyGTK versions are at least 2.8, make the window flash (the default behaviour in most Window Managers) when holding pending events."
+msgstr "Если активно и установлены GTK+ и PyGTK версий 2.8 и выше, то окно будет мигать (поведение по умолчанию для большинства менеджеров окон) когда присутствуют не просмотренные события."
 
-#: ../src/common/config.py:270
-msgid ""
-"Jabberd1.4 does not like sha info when one join a password protected group "
-"chat. Turn this option to False to stop sending sha info in group chat "
-"presences."
-msgstr ""
-"Jabberd1.4 не понимает sha данные при входе в комнату, защищенную паролем. "
-"Установите эту опцию в «Неактивно» для того, чтобы запретить отсылку sha "
-"данных в информации для комнат"
+#: ../src/common/config.py:269
+msgid "Jabberd1.4 does not like sha info when one join a password protected group chat. Turn this option to False to stop sending sha info in group chat presences."
+msgstr "Jabberd1.4 не понимает sha данные при входе в комнату, защищенную паролем. Установите эту опцию в «Неактивно» для того, чтобы запретить отсылку sha данных в информации для комнат"
 
 #. always, never, peracct, pertype should not be translated
-#: ../src/common/config.py:273
+#: ../src/common/config.py:272
 msgid ""
 "Controls the window where new messages are placed.\n"
 "'always' - All messages are sent to a single window.\n"
-"'always_with_roster' - Like 'always' but the messages are in a single window "
-"along with the roster.\n"
+"'always_with_roster' - Like 'always' but the messages are in a single window along with the roster.\n"
 "'never' - All messages get their own window.\n"
 "'peracct' - Messages for each account are sent to a specific window.\n"
-"'pertype' - Each message type (e.g. chats vs. groupchats) is sent to a "
-"specific window."
+"'pertype' - Each message type (e.g., chats vs. groupchats) are sent to a specific window."
 msgstr ""
 "Управляет окном, где помещаются новые сообщения.\n"
 "«always» — Все сообщения отправляются в одно окно.\n"
 "«always_with_roster» — Как «always», но сообщения в одном окне с ростером.\n"
 "«never» — Все сообщения приходят в свои отдельные окна.\n"
 "«peracct» — Сообщения для каждой учетной записи отсылаются в свои окна.\n"
-"«pertype» — Каждый тип сообщения (например, беседа или комната) отсылается в "
-"свое окно. Заметьте, что при изменении этого параметра требуется перезапуск "
-"Gajim, чтобы изменения вступили в силу."
+"«pertype» — Каждый тип сообщения (например, беседа или комната) отсылается в свое окно. Заметьте, что при изменении этого параметра требуется перезапуск Gajim, чтобы изменения вступили в силу."
 
-#: ../src/common/config.py:274
+#: ../src/common/config.py:273
 msgid ""
 "Show roster on startup.\n"
 "'always' - Always show roster.\n"
@@ -4323,793 +4155,618 @@ msgstr ""
 "'never' - Никогда не показывать ростер.\n"
 "'last_state' - Восстанавливать последнее состояние ростера."
 
-#: ../src/common/config.py:275
+#: ../src/common/config.py:274
 msgid "If False, you will no longer see the avatar in the chat window."
 msgstr "Если неактивно, вы больше не будете видеть аватары в окне беседы."
 
-#: ../src/common/config.py:276
+#: ../src/common/config.py:275
 msgid "If True, pressing the escape key closes a tab/window."
 msgstr "Если активно, то нажатие клавиши Escape будет закрывать вкладку/окно."
 
-#: ../src/common/config.py:277
+#: ../src/common/config.py:276
 msgid "Hides the buttons in chat windows."
 msgstr "Скрывает кнопки в окнах чата."
 
-#: ../src/common/config.py:278
+#: ../src/common/config.py:277
 msgid "Hides the banner in a group chat window"
 msgstr "Скрывает баннер в окне комнаты"
 
-#: ../src/common/config.py:279
+#: ../src/common/config.py:278
 msgid "Hides the banner in two persons chat window"
 msgstr "Скрывает баннер в окне чата"
 
-#: ../src/common/config.py:280
+#: ../src/common/config.py:279
 msgid "Hides the group chat occupants list in group chat window."
 msgstr "Скрывает список посетителей в окне комнаты."
 
-#: ../src/common/config.py:281
-msgid ""
-"In a chat, show the nickname at the beginning of a line only when it's not "
-"the same person talking than in previous message."
-msgstr ""
-"Показывать ник в начале строки в чате только если предыдущее сообщение было "
-"написано другим участником."
+#: ../src/common/config.py:280
+msgid "In a chat, show the nickname at the beginning of a line only when it's not the same person talking than in previous message."
+msgstr "Показывать ник в начале строки в чате только если предыдущее сообщение было написано другим участником."
 
-#: ../src/common/config.py:282
+#: ../src/common/config.py:281
 msgid "Indentation when using merge consecutive nickname."
-msgstr ""
-"Разделитель, используемый при активированной настройке "
-"chat_merge_consecutive_nickname."
+msgstr "Разделитель, используемый при активированной настройке chat_merge_consecutive_nickname."
 
-#: ../src/common/config.py:283
+#: ../src/common/config.py:282
 msgid "Smooth scroll message in conversation window"
 msgstr "Плавно прокручивать сообщения в окне чата"
 
+#: ../src/common/config.py:283
+msgid "List of colors, separated by \":\", that will be used to color nicknames in group chats."
+msgstr "Список цветов, разделенных «:», которые будут использоваться для раскраски ников в комнатах."
+
 #: ../src/common/config.py:284
-msgid ""
-"List of colors, separated by \":\", that will be used to color nicknames in "
-"group chats."
-msgstr ""
-"Список цветов, разделенных «:», которые будут использоваться для раскраски "
-"ников в комнатах."
+msgid "Ctrl-Tab go to next composing tab when none is unread."
+msgstr "Использовать Ctrl-Tab, чтобы перейти к следующей вкладке с составляемым сообщением, когда нет непрочитанных сообщений."
 
 #: ../src/common/config.py:285
-msgid "Ctrl-Tab go to next composing tab when none is unread."
-msgstr ""
-"Использовать Ctrl-Tab, чтобы перейти к следующей вкладке с составляемым "
-"сообщением, когда нет непрочитанных сообщений."
+msgid "Should we show the confirm metacontacts creation dialog or not? Empty string means we never show the dialog."
+msgstr "Следует ли показывать диалог подтверждения о создании метаконтакта? Пустая строка означает, что сообщение не будет показываться вообще."
 
 #: ../src/common/config.py:286
-msgid ""
-"Should we show the confirm metacontacts creation dialog or not? Empty string "
-"means we never show the dialog."
-msgstr ""
-"Следует ли показывать диалог подтверждения о создании метаконтакта? Пустая "
-"строка означает, что сообщение не будет показываться вообще."
+msgid "Should we show the confirm block contact dialog or not? Empty string means we never show the dialog."
+msgstr "Следует ли показывать диалог подтверждения блокировки контакта? Пустая строка означает, что сообщение не будет показываться вообще."
 
 #: ../src/common/config.py:287
-msgid ""
-"Should we show the confirm block contact dialog or not? Empty string means "
-"we never show the dialog."
-msgstr ""
-"Следует ли показывать диалог подтверждения блокировки контакта? Пустая "
-"строка означает, что сообщение не будет показываться вообще."
+msgid "Should we show the confirm custom status dialog or not? Empty string means we never show the dialog."
+msgstr "Следует ли показывать диалог подтверждения блокировки контакта? Пустая строка означает, что сообщение не будет показываться вообще."
 
 #: ../src/common/config.py:288
-msgid ""
-"Should we show the confirm custom status dialog or not? Empty string means "
-"we never show the dialog."
-msgstr ""
-"Следует ли показывать диалог подтверждения блокировки контакта? Пустая "
-"строка означает, что сообщение не будет показываться вообще."
+msgid "If True, you will be able to set a negative priority to your account in account modification window. BE CAREFUL, when you are logged in with a negative priority, you will NOT receive any message from your server."
+msgstr "Если активно, то у вас появится возможность назначить для учетной записи приоритет меньше нуля в окне настройки учетной записи. БУДЬТЕ ОСТОРОЖНЫ, если вы подключитесь с отрицательным приоритетом, то вы НЕ получите никаких сообщений от сервера."
 
 #: ../src/common/config.py:289
-msgid ""
-"If True, you will be able to set a negative priority to your account in "
-"account modification window. BE CAREFUL, when you are logged in with a "
-"negative priority, you will NOT receive any message from your server."
-msgstr ""
-"Если активно, то у вас появится возможность назначить для учетной записи "
-"приоритет меньше нуля в окне настройки учетной записи. БУДЬТЕ ОСТОРОЖНЫ, "
-"если вы подключитесь с отрицательным приоритетом, то вы НЕ получите никаких "
-"сообщений от сервера."
+msgid "If True, Gajim will use Gnome Keyring (if available) to store account passwords."
+msgstr "Если активно, Gajim будет использовать (если возможно) Gnome Keyring для хранения паролей учетных записей."
 
 #: ../src/common/config.py:290
-msgid ""
-"If True, Gajim will use Gnome Keyring (if available) to store account "
-"passwords."
-msgstr ""
-"Если активно, Gajim будет использовать (если возможно) Gnome Keyring для "
-"хранения паролей учетных записей."
+msgid "If True, Gajim will use KDE Wallet (if kwalletcli is available) to store account passwords."
+msgstr "Если активно, Gajim будет использовать (если возможно) KDE Wallet для хранения паролей учетных записей."
 
 #: ../src/common/config.py:291
-msgid ""
-"If True, Gajim will use KDE Wallet (if kwalletcli is available) to store "
-"account passwords."
-msgstr ""
-"Если активно, Gajim будет использовать (если возможно) KDE Wallet для "
-"хранения паролей учетных записей."
+msgid "If True, Gajim will show number of online and total contacts in account and group rows."
+msgstr "Если активно, Gajim будет показывать количество контактов онлайн/всего в строках с названием учетной записи и групп."
 
 #: ../src/common/config.py:292
-msgid ""
-"If True, Gajim will show number of online and total contacts in account and "
-"group rows."
-msgstr ""
-"Если активно, Gajim будет показывать количество контактов онлайн/всего в "
-"строках с названием учетной записи и групп."
+msgid "Can be empty, 'chat' or 'normal'. If not empty, treat all incoming messages as if they were of this type"
+msgstr "Может быть пусто, 'chat' или 'normal'. Если не пусто — обрабатывать все входящие сообщения так, как будто бы они были этого типа."
 
 #: ../src/common/config.py:293
-msgid ""
-"Can be empty, 'chat' or 'normal'. If not empty, treat all incoming messages "
-"as if they were of this type"
-msgstr ""
-"Может быть пусто, 'chat' или 'normal'. Если не пусто — обрабатывать все "
-"входящие сообщения так, как будто бы они были этого типа."
+msgid "If True, Gajim will scroll and select the contact who sent you the last message, if chat window is not already opened."
+msgstr "Если активно, Gajim прокрутит ростер и выделит контакт, который написал вам сообщение последним, если окно чата еще небыло открыто."
 
 #: ../src/common/config.py:294
-msgid ""
-"If True, Gajim will scroll and select the contact who sent you the last "
-"message, if chat window is not already opened."
-msgstr ""
-"Если активно, Gajim прокрутит ростер и выделит контакт, который написал вам "
-"сообщение последним, если окно чата еще небыло открыто."
-
-#: ../src/common/config.py:295
 msgid "Time of inactivity needed before the change status window closes down."
 msgstr "Время не активности прежде чем окно изменения статуса закроется."
 
-#: ../src/common/config.py:296
-msgid ""
-"Maximum number of lines that are printed in conversations. Oldest lines are "
-"cleared."
+#: ../src/common/config.py:295
+msgid "Maximum number of lines that are printed in conversations. Oldest lines are cleared."
 msgstr "Максимальное количество строк в окне. Старые строки будут удалены."
 
-#: ../src/common/config.py:297
-msgid ""
-"If True, notification windows from notification-daemon will be attached to "
-"notification icon."
-msgstr ""
-"Если активно, окно уведомления от notification-daemon будет прикреплено к "
-"области уведомлений."
+#: ../src/common/config.py:296
+msgid "If True, notification windows from notification-daemon will be attached to notification icon."
+msgstr "Если активно, окно уведомления от notification-daemon будет прикреплено к области уведомлений."
 
-#: ../src/common/config.py:298
+#: ../src/common/config.py:297
 msgid "Choose interval between 2 checks of idleness."
 msgstr "Выберите интервал между 2 проверками на бездействие."
 
+#: ../src/common/config.py:298
+msgid "Valid uri schemes. Only schemes in this list will be accepted as \"real\" uri. (mailto and xmpp are handled separately)"
+msgstr "Допустимые uri схемы. Только схемы из этого списка будут приняты как «real» uri.(mailto и xmpp обрабатываются отдельно)"
+
 #: ../src/common/config.py:299
-msgid ""
-"Valid uri schemes. Only schemes in this list will be accepted as \"real\" "
-"uri. (mailto and xmpp are handled separately)"
-msgstr ""
-"Допустимые uri схемы. Только схемы из этого списка будут приняты как «real» "
-"uri.(mailto и xmpp обрабатываются отдельно)"
+msgid "Ask offline status message to all offline contacts when connection to an accoutn is established. WARNING: This causes a lot of requests to be sent!"
+msgstr "Запрашивать сообщение о статусе «отключен» у всех отключенных контактов при установлении соединения с учетной записью. ВНИМАНИЕ: Данная опция приводит к большому количеству посылаемых запросов!"
 
 #: ../src/common/config.py:300
-msgid ""
-"Ask offline status message to all offline contacts when connection to an "
-"account is established. WARNING: This causes a lot of requests to be sent!"
-msgstr ""
-"Запрашивать сообщение о статусе «отключен» у всех отключенных контактов при "
-"установлении соединения с учетной записью. ВНИМАНИЕ: Данная опция приводит к "
-"большому количеству посылаемых запросов!"
-
-#: ../src/common/config.py:301
 msgid "If True, completion in groupchats will be like a shell auto-completion"
-msgstr ""
-"Если Активно, автодополнение ников в конференциях будет работать как "
-"автодополнение в командной оболочке"
+msgstr "Если Активно, автодополнение ников в конференциях будет работать как автодополнение в командной оболочке"
 
-#: ../src/common/config.py:302
-msgid ""
-"When is self contact row displayed. Can be \"always\", \"when_other_resource"
-"\" or \"never\""
-msgstr ""
-"В каких случаях показывать список своих собственных контактов. Может "
-"принимать значения «always» (всегда), «when_other_resource» (если другой "
-"ресурс) и «never» (никогда)."
+#: ../src/common/config.py:301
+msgid "When is self contact row displayed. Can be \"always\", \"when_other_resource\" or \"never\""
+msgstr "В каких случаях показывать список своих собственных контактов. Может принимать значения «always» (всегда), «when_other_resource» (если другой ресурс) и «never» (никогда)."
 
-#: ../src/common/config.py:307
+#: ../src/common/config.py:306
 msgid "Optionally fix jingle output video framerate. Example: 10/1 or 25/2"
-msgstr ""
-"Опциональное изменение частоты кадров видео в jingle. Например: 10/1 или 25/2"
+msgstr "Опциональное изменение частоты кадров видео в jingle. Например: 10/1 или 25/2"
 
-#: ../src/common/config.py:308
+#: ../src/common/config.py:307
 msgid "Optionally resize jingle output video. Example: 320x240"
 msgstr "Опциональное изменение размера кадра видео в jingle. Например: 320x240"
 
-#: ../src/common/config.py:309
-msgid "If True, You will also see your webcam"
-msgstr ""
+#: ../src/common/config.py:310
+msgid "If True, Gajim will try to use a STUN server when using jingle. The one in \"stun_server\" option, or the one given by the jabber server."
+msgstr "Если включено, Gajim попробует использовать STUN сервер с jingle. Либо указанный опцией \"stun_server\", либо предоставленный jabber сервером."
+
+#: ../src/common/config.py:311
+msgid "STUN server to use when using jingle"
+msgstr "Сервер STUN для использования с jingle"
 
 #: ../src/common/config.py:312
-msgid ""
-"If True, Gajim will try to use a STUN server when using jingle. The one in "
-"\"stun_server\" option, or the one given by the jabber server."
-msgstr ""
-"Если включено, Gajim попробует использовать STUN сервер с jingle. Либо "
-"указанный опцией \"stun_server\", либо предоставленный jabber сервером."
+msgid "If True, Gajim will show affiliation of groupchat occupants by adding a colored square to the status icon"
+msgstr "Если включено, Gajim покажет принадлежность пользователей группового чата, добавив цветные квадраты к значку статуса"
 
 #: ../src/common/config.py:313
-msgid "STUN server to use when using jingle"
-msgstr "Сервер STUN для использования с jingle"
+msgid "Proxy used for all outgoing connections if the account does not have a specific proxy configured"
+msgstr "Прокси используется для всех исходящих соединений, если в настройках учетной записи не задан прокси "
 
 #: ../src/common/config.py:314
-msgid ""
-"If True, Gajim will show affiliation of groupchat occupants by adding a "
-"colored square to the status icon"
+msgid "If True, Gajim will ignore incoming attention requestd (\"wizz\")."
 msgstr ""
-"Если включено, Gajim покажет принадлежность пользователей группового чата, "
-"добавив цветные квадраты к значку статуса"
 
 #: ../src/common/config.py:315
-msgid ""
-"Proxy used for all outgoing connections if the account does not have a "
-"specific proxy configured"
+msgid "If enabled, Gajim will reopen chat windows that were opened last time Gajim was closed."
 msgstr ""
-"Прокси используется для всех исходящих соединений, если в настройках учетной "
-"записи не задан прокси "
 
-#: ../src/common/config.py:316
-msgid "If True, Gajim will ignore incoming attention requestd (\"wizz\")."
-msgstr ""
+#: ../src/common/config.py:329
+msgid "Priority will change automatically according to your status. Priorities are defined in autopriority_* options."
+msgstr "Приоритет будет изменяться автоматически согласно вашему статусу. Приоритеты для статусов задаются в пункте autopriority_* ."
 
-#: ../src/common/config.py:317
-msgid ""
-"If enabled, Gajim will reopen chat windows that were opened last time Gajim "
-"was closed."
-msgstr ""
+#: ../src/common/config.py:337
+msgid "Status used to autoconnect as. Can be online, chat, away, xa, dnd, invisible. NOTE: this option is used only if restore_last_status is disabled"
+msgstr "Статус, используемый при автоподключении. Варианты: отключен, в сети, готов поболтать, отошел, недоступен, не беспокоить, невидимка"
 
-#: ../src/common/config.py:318
-#, fuzzy
-msgid ""
-"If enabled, Gajim will show an icon to show that sent message has been "
-"received by your contact"
-msgstr ""
-"Если включено, Gajim не будет запрашивать сообщение о статусе. Вместо него "
-"будет использовано соответствующее сообщение по умолчанию."
-
-#: ../src/common/config.py:332
-msgid ""
-"Priority will change automatically according to your status. Priorities are "
-"defined in autopriority_* options."
-msgstr ""
-"Приоритет будет изменяться автоматически согласно вашему статусу. Приоритеты "
-"для статусов задаются в пункте autopriority_* ."
+#: ../src/common/config.py:338
+msgid "If enabled, restore the last status that was used."
+msgstr "Если включено, восстанавливать последний использованный статус."
 
 #: ../src/common/config.py:340
-msgid ""
-"Status used to autoconnect as. Can be online, chat, away, xa, dnd, "
-"invisible. NOTE: this option is used only if restore_last_status is disabled"
-msgstr ""
-"Статус, используемый при автоподключении. Варианты: отключен, в сети, готов "
-"поболтать, отошел, недоступен, не беспокоить, невидимка"
+msgid "If True, Contacts requesting authorization will be automatically accepted."
+msgstr "Если активно, контакты, запрашивающие авторизацию, будут автоматически её получать."
 
 #: ../src/common/config.py:341
-msgid "If enabled, restore the last status that was used."
-msgstr "Если включено, восстанавливать последний использованный статус."
-
-#: ../src/common/config.py:343
-msgid ""
-"If True, Contacts requesting authorization will be automatically accepted."
-msgstr ""
-"Если активно, контакты, запрашивающие авторизацию, будут автоматически её "
-"получать."
+msgid "If False, this account will be disabled and will not appear in roster window."
+msgstr "Если неактивно, эта учетная запись будет отключена и не будет отображаться в окне ростера."
 
 #: ../src/common/config.py:344
-msgid ""
-"If False, this account will be disabled and will not appear in roster window."
-msgstr ""
-"Если неактивно, эта учетная запись будет отключена и не будет отображаться в "
-"окне ростера."
+msgid "If disabled, don't sign presences with GPG key, even if GPG is configured."
+msgstr "Если отключено, не подписывать присутствие ключом GPG, даже если GPG настроен."
 
-#: ../src/common/config.py:347
-msgid ""
-"If disabled, don't sign presences with GPG key, even if GPG is configured."
-msgstr ""
-"Если отключено, не подписывать присутствие ключом GPG, даже если GPG "
-"настроен."
-
-#: ../src/common/config.py:349
+#: ../src/common/config.py:346
 msgid "Enable ESessions encryption for this account."
 msgstr "Включить ESessions шифрование для данной учетной записи."
 
-#: ../src/common/config.py:350
+#: ../src/common/config.py:347
 msgid "Should Gajim automatically start an encrypted session when possible?"
-msgstr ""
-"Должен ли Gajim по возможности автоматически начинать зашифрованный сеанс?"
+msgstr "Должен ли Gajim по возможности автоматически начинать зашифрованный сеанс?"
 
-#: ../src/common/config.py:351
-msgid ""
-"Ordered list (space separated) of connection type to try. Can contain tls, "
-"ssl or plain"
-msgstr ""
-"Упорядоченный список (разделённый пробелами) типов подключения, которые "
-"будут перепробованы. Может включать tls, ssl или plain"
+#: ../src/common/config.py:348
+msgid "Ordered list (space separated) of connection type to try. Can contain tls, ssl or plain"
+msgstr "Упорядоченный список (разделённый пробелами) типов подключения, которые будут перепробованы. Может включать tls, ssl или plain"
 
-#: ../src/common/config.py:352
-msgid ""
-"Show a warning dialog before sending password on an plaintext connection. "
-"Can be 'warn', 'connect', 'disconnect'"
-msgstr ""
-"Если отмечено, то Gajim будет будет спрашивать вас перед отправкой пароля "
-"через незащищенное соединение. Может быть 'warn', 'connect', 'disconnect'"
+#: ../src/common/config.py:349
+msgid "Show a warning dialog before sending password on an plaintext connection. Can be 'warn', 'connect', 'disconnect'"
+msgstr "Если отмечено, то Gajim будет будет спрашивать вас перед отправкой пароля через незащищенное соединение. Может быть 'warn', 'connect', 'disconnect'"
 
-#: ../src/common/config.py:353
+#: ../src/common/config.py:350
 msgid "Show a warning dialog before using standard SSL library."
 msgstr "Предупреждать, прежде чем использовать стандартную библиотеку SSL."
 
-#: ../src/common/config.py:354
-msgid ""
-"Show a warning dialog before sending PLAIN password over a plain connection."
-msgstr ""
-"Показывать предупреждение перед отправкой пароля через незащищенное "
-"соединение."
+#: ../src/common/config.py:351
+msgid "Show a warning dialog before sending PLAIN password over a plain connection."
+msgstr "Показывать предупреждение перед отправкой пароля через незащищенное соединение."
 
-#: ../src/common/config.py:356
+#: ../src/common/config.py:353
 msgid "Space separated list of ssl errors to ignore."
 msgstr "Разделенный пробелами список игнорирования ошибок ssl"
 
-#: ../src/common/config.py:362
-msgid ""
-"Space separated list of JIDs for which you do not want to store logs. You "
-"can also add account name to log nothing for this account."
+#: ../src/common/config.py:359
+msgid "Space separated list of JIDs for which you do not want to store logs. You can also add account name to log nothing for this account."
 msgstr ""
 
-#: ../src/common/config.py:363
-msgid ""
-"Space separated list of JIDs for which you accept to not log conversations "
-"if he does not want to."
+#: ../src/common/config.py:360
+msgid "Space separated list of JIDs for which you accept to not log conversations if he does not want to."
 msgstr ""
 
-#: ../src/common/config.py:366
+#: ../src/common/config.py:363
 msgid "Whitespace sent after inactivity"
 msgstr "Пробел, посылаемый после бездействия"
 
 # дословно: пинг XMPP послал после бездействия. Возможно, ошибка в оригинале.
-#: ../src/common/config.py:367
+#: ../src/common/config.py:364
 msgid "XMPP ping sent after inactivity"
 msgstr "пинг XMPP, посылаемый после бездействия"
 
-#: ../src/common/config.py:371
-msgid ""
-"How many seconds to wait for the answer of ping alive packet before we try "
-"to reconnect?"
-msgstr ""
-"Время ожидания (в секундах) ответа на пинг перед повторной попыткой "
-"соединения."
+#: ../src/common/config.py:368
+msgid "How many seconds to wait for the answer of ping alive packet before we try to reconnect."
+msgstr "Время ожидания (в секундах) ответа на пинг перед повторной попыткой соединения."
 
 #. yes, no, ask
-#: ../src/common/config.py:375
+#: ../src/common/config.py:372
 msgid "Jabberd2 workaround"
 msgstr "Костыль для jabberd2"
 
-#: ../src/common/config.py:378
-msgid ""
-"If checked, Gajim will use your IP and proxies defined in "
-"file_transfer_proxies option for file transfer."
-msgstr ""
-"Если отмечено, Gajim будет использовать ваш IP и прокси, определенные в "
-"параметре file_transfer_proxies для передачи файлов"
+#: ../src/common/config.py:375
+msgid "If checked, Gajim will use your IP and proxies defined in file_transfer_proxies option for file transfer."
+msgstr "Если отмечено, Gajim будет использовать ваш IP и прокси, определенные в параметре file_transfer_proxies для передачи файлов"
 
-#: ../src/common/config.py:379
-msgid ""
-"If True, Gajim will test file transfer proxies on startup to be sure it "
-"works. Openfire's proxies are known to fail this test even if they work."
+#: ../src/common/config.py:376
+msgid "If True, Gajim will test file transfer proxies on startup to be sure it works. Openfire's proxies are known to fail this test even if they work."
 msgstr ""
 
-#: ../src/common/config.py:393
+#: ../src/common/config.py:390
 msgid "Answer to receipt requests"
 msgstr "Отвечать на запросы уведомления"
 
-#: ../src/common/config.py:394
+#: ../src/common/config.py:391
 msgid "Sent receipt requests"
 msgstr "Посылать запросы уведомления"
 
-#: ../src/common/config.py:403
-msgid ""
-"Allow Gajim to send information about the operating system you are running."
-msgstr ""
-"Разрешить Gajim отправлять информацию о операционной системе, которую вы "
-"используете"
+#: ../src/common/config.py:400
+msgid "Allow Gajim to send information about the operating system you are running."
+msgstr "Разрешить Gajim отправлять информацию о операционной системе, которую вы используете"
 
-#: ../src/common/config.py:404
+#: ../src/common/config.py:401
 msgid "Allow Gajim to send your local time."
 msgstr "Разрешить Gajim отправлять ваше локальное время."
 
-#: ../src/common/config.py:405
-msgid ""
-"When negotiating an encrypted session, should Gajim assume you want your "
-"messages to be logged?"
-msgstr ""
-"Когда устанавливается зашифрованный сеанс, должен ли Gajim предположить, что "
-"вы хотите сохранить историю сообщений?"
+#: ../src/common/config.py:402
+msgid "When negotiating an encrypted session, should Gajim assume you want your messages to be logged?"
+msgstr "Когда устанавливается зашифрованный сеанс, должен ли Gajim предположить, что вы хотите сохранить историю сообщений?"
 
-#: ../src/common/config.py:408
+#: ../src/common/config.py:405
 msgid "Message that is sent to contacts you want to add"
 msgstr "Сообщение отправляемое контактам, которых вы хотите добавить"
 
-#: ../src/common/config.py:409
+#: ../src/common/config.py:406
 msgid "Last time we syncronized with logs from server."
 msgstr "Время последней синхронизации с сервером."
 
-#: ../src/common/config.py:410
-msgid ""
-"If enabled and if server supports this feature, Gajim will receive messages "
-"sent and received by other resources."
+#: ../src/common/config.py:407
+msgid "If enabled and if server supports this feature, Gajim will receive messages sent and received by other resources."
 msgstr ""
 
-#: ../src/common/config.py:411
-msgid ""
-"If enabled, Gajim will send your local IPs so your contact can connect to "
-"your machine to transfer files."
+#: ../src/common/config.py:408
+msgid "If enabled, Gajim will send your local IPs so your contact can connect to your machine to transfer files."
 msgstr ""
 
-#: ../src/common/config.py:412
+#: ../src/common/config.py:409
 #, fuzzy
 msgid "Latest token for Oauth2 authentication."
 msgstr "Анонимная аутентификация"
 
-#: ../src/common/config.py:413
+#: ../src/common/config.py:410
 #, fuzzy
 msgid "client_id for Oauth2 authentication."
 msgstr "Анонимная аут_ентификация"
 
-#: ../src/common/config.py:414
+#: ../src/common/config.py:411
 msgid "redirect_url for Oauth2 authentication."
 msgstr ""
 
-#: ../src/common/config.py:415
-msgid ""
-"Space separated list of JIDs for which we want to re-open a chat window on "
-"next startup."
+#: ../src/common/config.py:412
+msgid "Space separated list of jid for which we want to re-open a chat window on next startup."
 msgstr ""
 
-#: ../src/common/config.py:477
+#: ../src/common/config.py:474
 msgid "Is OpenPGP enabled for this contact?"
 msgstr "Используется ли для этого контакта OpenPGP?"
 
-#: ../src/common/config.py:478
-msgid ""
-"Should Gajim automatically start an encrypted session with this contact when "
-"possible?"
-msgstr ""
-"Должен ли Gajim по возможности автоматически начинать для данного контакта "
-"зашифрованный сеанс?"
+#: ../src/common/config.py:475
+msgid "Should Gajim automatically start an encrypted session with this contact when possible?"
+msgstr "Должен ли Gajim по возможности автоматически начинать для данного контакта зашифрованный сеанс?"
 
-#: ../src/common/config.py:479 ../src/common/config.py:482
+#: ../src/common/config.py:476
+#: ../src/common/config.py:479
 msgid "Language for which we want to check misspelled words"
 msgstr "Язык, который используется при проверке правописания"
 
-#: ../src/common/config.py:483
-msgid ""
-"How many lines to request from server when entering a groupchat. -1 means no "
-"limit, -2 means global value"
-msgstr ""
-"Количество строк истории сообщений, запрашиваемых при входе в комнату. -1 - "
-"не ограничено, -2 - глобальное значение"
-
-#: ../src/common/config.py:484
-msgid ""
-"How many minutes back to request logs when entering a groupchat. -1 means no "
-"limit, -2 means global value"
-msgstr ""
-"За какой период (минут назад) запрашивать историю сообщений при входе в "
-"комнату. -1 - не ограничено, -2 -  глобальное значение"
+#: ../src/common/config.py:482
+#, fuzzy
+msgid "State whether plugins should be activated on startup (this is saved on Gajim exit). This option SHOULD NOT be used to (de)activate plug-ins. Use GUI instead."
+msgstr "Состояние модулей при выходе(это сохраняется при выключении Gajim). Эта опция НЕ ДОЛЖНА использоваться для включения или выключения модулей. Используйте графический интерфейс для этого."
 
 #: ../src/common/config.py:487
-msgid ""
-"State whether plugins should be activated on startup (this is saved on Gajim "
-"exit). This option SHOULD NOT be used to (de)activate plug-ins. Use GUI "
-"instead."
-msgstr ""
-"Состояние модулей при выходе (это сохраняется при выключении Gajim). Эта "
-"опция НЕ ДОЛЖНА использоваться для включения или выключения модулей. "
-"Используйте графический интерфейс для этого."
-
-#: ../src/common/config.py:492 ../src/common/pep.py:157
+#: ../src/common/pep.py:157
 msgid "Sleeping"
 msgstr "Сплю"
 
-#: ../src/common/config.py:493
+#: ../src/common/config.py:488
 msgid "Back soon"
 msgstr "Скоро буду"
 
-#: ../src/common/config.py:493
+#: ../src/common/config.py:488
 msgid "Back in some minutes."
 msgstr "Вернусь через несколько минут"
 
-#: ../src/common/config.py:494 ../src/common/pep.py:127
+#: ../src/common/config.py:489
+#: ../src/common/pep.py:127
 msgid "Eating"
 msgstr "Ем"
 
-#: ../src/common/config.py:494
+#: ../src/common/config.py:489
 msgid "I'm eating, so leave me a message."
 msgstr "Кушаю, так что оставьте сообщение секретарю."
 
-#: ../src/common/config.py:495
+#: ../src/common/config.py:490
 msgid "Movie"
 msgstr "В кино"
 
-#: ../src/common/config.py:495
+#: ../src/common/config.py:490
 msgid "I'm watching a movie."
 msgstr "Смотрю кино"
 
-#: ../src/common/config.py:496 ../src/common/pep.py:186
+#: ../src/common/config.py:491
+#: ../src/common/pep.py:185
 msgid "Working"
 msgstr "Работаю"
 
-#: ../src/common/config.py:496
+#: ../src/common/config.py:491
 msgid "I'm working."
 msgstr "Работаю"
 
-#: ../src/common/config.py:497
+#: ../src/common/config.py:492
 msgid "Phone"
 msgstr "Телефон"
 
-#: ../src/common/config.py:497
+#: ../src/common/config.py:492
 msgid "I'm on the phone."
 msgstr "Говорю по телефону"
 
-#: ../src/common/config.py:498
+#: ../src/common/config.py:493
 msgid "Out"
 msgstr "Вышел"
 
-#: ../src/common/config.py:498
+#: ../src/common/config.py:493
 msgid "I'm out enjoying life."
 msgstr "Наслаждаюсь жизнью, чего и вам желаю."
 
-#: ../src/common/config.py:509
+#: ../src/common/config.py:504
 msgid "I'm available."
 msgstr "Я здесь."
 
-#: ../src/common/config.py:510
+#: ../src/common/config.py:505
 msgid "I'm free for chat."
 msgstr "Я готов поболтать."
 
-#: ../src/common/config.py:511 ../src/config.py:1646
+#: ../src/common/config.py:506
+#: ../src/config.py:1645
 msgid "Be right back."
 msgstr "Скоро буду."
 
-#: ../src/common/config.py:512
+#: ../src/common/config.py:507
 msgid "I'm not available."
 msgstr "Меня нет."
 
-#: ../src/common/config.py:513
+#: ../src/common/config.py:508
 msgid "Do not disturb."
 msgstr "Не беспокоить."
 
-#: ../src/common/config.py:514 ../src/common/config.py:515
+#: ../src/common/config.py:509
+#: ../src/common/config.py:510
 msgid "Bye!"
 msgstr "Пока!"
 
-#: ../src/common/config.py:526
-msgid ""
-"Sound to play when a group chat message contains one of the words in "
-"muc_highlight_words, or when a group chat message contains your nickname."
-msgstr ""
-"Звук, который нужно воспроизвести, когда в MUC появляется сообщение, которое "
-"содержит слово из списка muc_highlight_words, или когда сообщение содержит "
-"ваш ник."
+#: ../src/common/config.py:521
+msgid "Sound to play when a group chat message contains one of the words in muc_highlight_words, or when a group chat message contains your nickname."
+msgstr "Звук, который нужно воспроизвести, когда в MUC появляется сообщение, которое содержит слово из списка muc_highlight_words, или когда сообщение содержит ваш ник."
 
-#: ../src/common/config.py:527
+#: ../src/common/config.py:522
 msgid "Sound to play when any MUC message arrives."
 msgstr "Звук, который нужно проигрывать, когда приходит любое сообщение MUC."
 
-#: ../src/common/config.py:536 ../src/common/optparser.py:309
+#: ../src/common/config.py:531
+#: ../src/common/optparser.py:309
 msgid "green"
 msgstr "зеленый"
 
-#: ../src/common/config.py:540 ../src/common/optparser.py:295
+#: ../src/common/config.py:535
+#: ../src/common/optparser.py:295
 msgid "grocery"
 msgstr "овощной"
 
-#: ../src/common/config.py:544
+#: ../src/common/config.py:539
 msgid "human"
 msgstr "телесный"
 
-#: ../src/common/config.py:548
+#: ../src/common/config.py:543
 msgid "marine"
 msgstr "морской"
 
-#: ../src/common/config.py:555
+#: ../src/common/config.py:550
+#, fuzzy
 msgid "Tor"
-msgstr "Tor"
+msgstr "К"
 
-#: ../src/common/connection_handlers_events.py:370
+#: ../src/common/connection_handlers_events.py:369
 #, python-format
-msgid ""
-"JID %s is not RFC compliant. It will not be added to your roster. Use roster "
-"management tools such as http://jru.jabberstudio.org/ to remove it"
-msgstr ""
-"JID %s не соответствует RFC. Он не будет добавлен в ваш ростер. Используйте "
-"средство управления ростера, например http://jru.jabberstudio.org/, чтобы "
-"удалить его"
+msgid "JID %s is not RFC compliant. It will not be added to your roster. Use roster management tools such as http://jru.jabberstudio.org/ to remove it"
+msgstr "JID %s не соответствует RFC. Он не будет добавлен в ваш ростер. Используйте средство управления ростера, например http://jru.jabberstudio.org/, чтобы удалить его"
 
-#: ../src/common/connection_handlers_events.py:825
+#: ../src/common/connection_handlers_events.py:823
 #, python-format
 msgid "unsubscribe request from %s"
 msgstr "%s хочет отменить подписку"
 
-#: ../src/common/connection_handlers_events.py:910
-#: ../src/common/connection_handlers.py:343
-#: ../src/common/connection_handlers.py:1143
-#: ../src/common/connection_handlers.py:1267 ../src/common/connection.py:520
-#: ../src/common/logger.py:1159 ../src/gajim.py:435 ../src/session.py:95
+#: ../src/common/connection_handlers_events.py:908
+#: ../src/common/connection_handlers.py:338
+#: ../src/common/connection_handlers.py:953
+#: ../src/common/connection_handlers.py:1075
+#: ../src/common/connection.py:459
+#: ../src/common/logger.py:1153
+#: ../src/gajim.py:390
+#: ../src/session.py:97
 msgid "Disk Write Error"
 msgstr "Ошибка записи на диск"
 
-#: ../src/common/connection_handlers_events.py:914
-#: ../src/common/connection_handlers.py:1146
-#: ../src/common/connection_handlers.py:1270 ../src/common/connection.py:524
-#: ../src/common/logger.py:1162 ../src/gajim.py:230 ../src/session.py:99
+#: ../src/common/connection_handlers_events.py:912
+#: ../src/common/connection_handlers.py:956
+#: ../src/common/connection_handlers.py:1078
+#: ../src/common/connection.py:463
+#: ../src/common/logger.py:1156
+#: ../src/gajim.py:209
+#: ../src/session.py:101
 #, python-format
-msgid ""
-"The database file (%s) cannot be read. Try to repair it (see http://trac."
-"gajim.org/wiki/DatabaseBackup) or remove it (all history will be lost)."
-msgstr ""
-"Файл базы данных (%s) не может быть прочитан. Попробуйте восстановить его "
-"(см. http://trac.gajim.org/wiki/DatabaseBackup) или удалить (вся история "
-"будет утеряна)."
+msgid "The database file (%s) cannot be read. Try to repair it (see http://trac.gajim.org/wiki/DatabaseBackup) or remove it (all history will be lost)."
+msgstr "Файл базы данных (%s) не может быть прочитан. Попробуйте восстановить его(см. http://trac.gajim.org/wiki/DatabaseBackup) или удалить (вся история будет утеряна)."
 
 #. Room has been destroyed. see
 #. http://www.xmpp.org/extensions/xep-0045.html#destroyroom
-#: ../src/common/connection_handlers_events.py:935
+#: ../src/common/connection_handlers_events.py:933
 msgid "Room has been destroyed"
 msgstr "Комната была удалена"
 
-#: ../src/common/connection_handlers_events.py:943
+#: ../src/common/connection_handlers_events.py:941
 #, python-format
 msgid "You can join this room instead: %s"
 msgstr "Взамен, вы можете присоединиться к комнате: %s"
 
-#: ../src/common/connection_handlers_events.py:1027
-#: ../src/common/connection_handlers_events.py:1070
-#: ../src/common/connection.py:270 ../src/common/connection.py:280
-#: ../src/config.py:2157 ../src/config.py:2166 ../src/config.py:2236
-#: ../src/config.py:3680 ../src/dataforms_widget.py:633 ../src/dialogs.py:3244
+#: ../src/common/connection_handlers_events.py:1025
+#: ../src/common/connection_handlers_events.py:1062
+#: ../src/common/connection.py:263
+#: ../src/config.py:2142
+#: ../src/config.py:2151
+#: ../src/config.py:2219
+#: ../src/config.py:3662
+#: ../src/dataforms_widget.py:633
+#: ../src/dialogs.py:3133
 msgid "Invalid Jabber ID"
 msgstr "Неверный Jabber ID"
 
-#: ../src/common/connection_handlers_events.py:1028
-#: ../src/common/connection_handlers_events.py:1071
+#: ../src/common/connection_handlers_events.py:1026
+#: ../src/common/connection_handlers_events.py:1063
 msgid "A message from a non-valid JID arrived, it has been ignored."
 msgstr "Было получено сообщение от неверного JID, оно было проигнорировано."
 
 #. ('MSGNOTSENT', account, (jid, ierror_msg, msg, time, session))
-#: ../src/common/connection_handlers_events.py:1102
-#: ../src/gui_interface.py:433 ../src/gui_interface.py:447
+#: ../src/common/connection_handlers_events.py:1094
+#: ../src/gui_interface.py:432
+#: ../src/gui_interface.py:446
 #, python-format
 msgid "error while sending %(message)s ( %(error)s )"
 msgstr "ошибка при отправке %(message)s ( %(error)s )"
 
-#: ../src/common/connection_handlers_events.py:1298
-#, fuzzy
-msgid "URL:"
-msgstr "URL:"
-
-#: ../src/common/connection_handlers_events.py:1599
+#: ../src/common/connection_handlers_events.py:1565
 #, python-format
 msgid "Unknown SSL error: %d"
 msgstr "Неизвестная ошибка SSL: %d"
 
-#: ../src/common/connection_handlers_events.py:2202 ../src/dialogs.py:2917
+#: ../src/common/connection_handlers_events.py:2157
+#: ../src/dialogs.py:2818
 #: ../src/notify.py:266
 msgid "New Single Message"
 msgstr "Новое одиночное сообщение"
 
-#: ../src/common/connection_handlers_events.py:2204
+#: ../src/common/connection_handlers_events.py:2159
 #, python-format
 msgid "New Single Message from %(nickname)s"
 msgstr "Новое сообщение от %(nickname)s"
 
-#: ../src/common/connection_handlers_events.py:2208 ../src/dialogs.py:2918
+#: ../src/common/connection_handlers_events.py:2163
+#: ../src/dialogs.py:2819
 #: ../src/notify.py:267
 msgid "New Private Message"
 msgstr "Новое личное сообщение"
 
-#: ../src/common/connection_handlers_events.py:2210
+#: ../src/common/connection_handlers_events.py:2165
 #, python-format
 msgid "New Private Message from group chat %s"
 msgstr "Новое личное сообщение из комнаты %s"
 
-#: ../src/common/connection_handlers_events.py:2213
+#: ../src/common/connection_handlers_events.py:2168
 #, python-format
 msgid "%(nickname)s: %(message)s"
 msgstr "%(nickname)s: %(message)s"
 
-#: ../src/common/connection_handlers_events.py:2216
+#: ../src/common/connection_handlers_events.py:2171
 #, python-format
 msgid "Messaged by %(nickname)s"
 msgstr "Новое сообщение от %(nickname)s"
 
-#: ../src/common/connection_handlers_events.py:2220 ../src/dialogs.py:2917
+#: ../src/common/connection_handlers_events.py:2175
+#: ../src/dialogs.py:2818
 #: ../src/notify.py:266
 msgid "New Message"
 msgstr "Новое сообщение"
 
-#: ../src/common/connection_handlers_events.py:2222
+#: ../src/common/connection_handlers_events.py:2177
 #, python-format
 msgid "New Message from %(nickname)s"
 msgstr "Новое сообщение от %(nickname)s"
 
-#: ../src/common/connection_handlers_events.py:2366
+#: ../src/common/connection_handlers_events.py:2320
 #, python-format
 msgid "%(nick)s Changed Status"
 msgstr "%(nick)s меняет статус"
 
-#: ../src/common/connection_handlers_events.py:2368
-#: ../src/groupchat_control.py:207 ../src/groupchat_control.py:1855
-#: ../src/history_window.py:455
+#: ../src/common/connection_handlers_events.py:2322
+#: ../src/groupchat_control.py:205
+#: ../src/groupchat_control.py:1767
+#: ../src/history_window.py:448
 #, python-format
 msgid "%(nick)s is now %(status)s"
 msgstr "%(nick)s теперь %(status)s"
 
-#: ../src/common/connection_handlers_events.py:2372 ../src/dialogs.py:2929
+#: ../src/common/connection_handlers_events.py:2327
+#: ../src/dialogs.py:2830
 #: ../src/notify.py:280
 msgid "Contact Changed Status"
 msgstr "Контакт изменит статус"
 
-#: ../src/common/connection_handlers_events.py:2374
+#: ../src/common/connection_handlers_events.py:2329
 #, python-format
 msgid "%(nickname)s Signed In"
 msgstr "%(nickname)s подключается"
 
 #. default value
-#: ../src/common/connection_handlers_events.py:2378 ../src/dialogs.py:2913
+#: ../src/common/connection_handlers_events.py:2334
+#: ../src/dialogs.py:2814
 #: ../src/notify.py:262
 msgid "Contact Signed In"
 msgstr "Контакт подключился"
 
-#: ../src/common/connection_handlers_events.py:2380
+#: ../src/common/connection_handlers_events.py:2336
 #, python-format
 msgid "%(nickname)s Signed Out"
 msgstr "%(nickname)s отключается"
 
-#: ../src/common/connection_handlers_events.py:2384 ../src/dialogs.py:2915
+#: ../src/common/connection_handlers_events.py:2341
+#: ../src/dialogs.py:2816
 #: ../src/notify.py:264
 msgid "Contact Signed Out"
 msgstr "Контакт отключился"
 
-#: ../src/common/connection_handlers.py:92
-#: ../src/common/zeroconf/connection_handlers_zeroconf.py:53
+#: ../src/common/connection_handlers.py:89
+#: ../src/common/zeroconf/connection_handlers_zeroconf.py:54
 msgid "Unable to load idle module"
 msgstr "Не могу загрузить модуль «idle»"
 
-#: ../src/common/connection_handlers.py:127
+#: ../src/common/connection_handlers.py:122
 #, python-format
 msgid "Registration information for transport %s has not arrived in time"
 msgstr "Данные о регистрации для транспорта %s не пришли вовремя."
 
-#: ../src/common/connection_handlers.py:135
+#: ../src/common/connection_handlers.py:130
 msgid "Registration succeeded"
 msgstr "Регистрация завершена"
 
-#: ../src/common/connection_handlers.py:136
+#: ../src/common/connection_handlers.py:131
 #, python-format
 msgid "Registration with agent %s succeeded"
 msgstr "Регистрация сервиса %s завершена успешно"
 
-#: ../src/common/connection_handlers.py:145
+#: ../src/common/connection_handlers.py:140
 msgid "Registration failed"
 msgstr "Ошибка регистрации"
 
-#: ../src/common/connection_handlers.py:146
+#: ../src/common/connection_handlers.py:141
 #, python-format
-msgid ""
-"Registration with agent %(agent)s failed with error %(error)s: %(error_msg)s"
-msgstr ""
-"Регистрация сервиса %(agent)s завершилась ошибкой: %(error)s: %(error_msg)s"
+msgid "Registration with agent %(agent)s failed with error %(error)s: %(error_msg)s"
+msgstr "Регистрация сервиса %(agent)s завершилась ошибкой: %(error)s: %(error_msg)s"
 
-#: ../src/common/connection_handlers.py:591 ../src/common/connection.py:1770
+#: ../src/common/connection_handlers.py:575
+#: ../src/common/connection.py:1576
 msgid "Invisibility not supported"
 msgstr "Невидимость не поддерживается"
 
-#: ../src/common/connection_handlers.py:592 ../src/common/connection.py:1771
+#: ../src/common/connection_handlers.py:576
+#: ../src/common/connection.py:1577
 #, python-format
 msgid "Account %s doesn't support invisibility."
 msgstr "Учетная запись %s не поддерживает невидимость."
 
-#: ../src/common/connection_handlers.py:1945
+#: ../src/common/connection_handlers.py:1742
 msgid "I would like to add you to my roster."
 msgstr "Вы не возражаете, если я добавлю Вас в свой ростер?"
 
@@ -5241,27 +4898,27 @@ msgstr "Назначение ключа не включает подписыва
 msgid "Application verification failure"
 msgstr "Ошибка при проверке приложения"
 
-#: ../src/common/connection.py:271 ../src/common/connection.py:281
-#: ../src/dialogs.py:3245
+#: ../src/common/connection.py:264
+#: ../src/dialogs.py:3134
 #, python-format
 msgid "It is not possible to send a message to %s, this JID is not valid."
 msgstr "Не удалось передать сообщение %s — этот JID неверен."
 
-#: ../src/common/connection.py:304
+#: ../src/common/connection.py:286
 msgid "Neither the remote presence is signed, nor a key was assigned."
 msgstr "Ни удаленное присутствие не подписано, ни ключ не присвоен."
 
-#: ../src/common/connection.py:307
+#: ../src/common/connection.py:289
 #, python-format
 msgid "The contact's key (%s) does not match the key assigned in Gajim."
 msgstr "Ключ (%s) контакта не соответствует ключу, присвоенному в Gajim."
 
 #. we're not english: one in locale and one en
-#: ../src/common/connection.py:363
+#: ../src/common/connection.py:343
 msgid "[This message is *encrypted* (See :XEP:`27`]"
 msgstr "[Это сообщение *зашифровано* (см. :XEP:`27`]"
 
-#: ../src/common/connection.py:507
+#: ../src/common/connection.py:446
 #, python-format
 msgid ""
 "Subject: %(subject)s\n"
@@ -5270,77 +4927,77 @@ msgstr ""
 "Тема: %(subject)s\n"
 "%(message)s"
 
-#: ../src/common/connection.py:930
+#: ../src/common/connection.py:866
 #, python-format
 msgid "Connection with account \"%s\" has been lost"
 msgstr "Связь с учетной записью «%s» была потеряна"
 
-#: ../src/common/connection.py:931
+#: ../src/common/connection.py:867
 msgid "Reconnect manually."
 msgstr "Переподключаться вручную."
 
 #. it's a new account
 #. wrong answer
-#: ../src/common/connection.py:942
+#: ../src/common/connection.py:878
 #, python-format
 msgid "Server %(name)s answered wrongly to register request: %(error)s"
 msgstr "Сервер %(name)s неверно ответил на запрос о регистрации: %(error)s"
 
 #. requested config has changed since first connection
-#: ../src/common/connection.py:984
+#: ../src/common/connection.py:920
 #, python-format
 msgid "Server %s provided a different registration form"
 msgstr "Сервер %s предоставил другую регистрационную форму"
 
-#: ../src/common/connection.py:1001
+#: ../src/common/connection.py:937
 msgid "Invalid answer"
 msgstr "Неверный ответ"
 
-#: ../src/common/connection.py:1002
+#: ../src/common/connection.py:938
 #, python-format
 msgid "Transport %(name)s answered wrongly to register request: %(error)s"
 msgstr "Транспорт %(name)s неверно ответил на запрос о регистрации: %(error)s"
 
-#: ../src/common/connection.py:1297
-#, fuzzy, python-format
-msgid "Could not connect to \"%(host)s\" via proxy \"%(proxy)s\""
+#: ../src/common/connection.py:1230
+#: ../src/common/connection.py:1385
+#: ../src/common/connection.py:2016
+#: ../src/common/zeroconf/connection_zeroconf.py:205
+#, python-format
+msgid "Could not connect to \"%s\""
 msgstr "Не могу соединиться с «%s»"
 
-#: ../src/common/connection.py:1300
-#, fuzzy, python-format
-msgid "Could not connect to \"%(host)s\""
-msgstr "Не могу соединиться с %s"
-
-#: ../src/common/connection.py:1302 ../src/common/connection.py:1463
-#: ../src/gui_interface.py:542
+#: ../src/common/connection.py:1231
+#: ../src/gui_interface.py:541
 msgid "Check your connection or try again later."
 msgstr "Проверьте настройки сети или попробуйте еще раз позже."
 
-#: ../src/common/connection.py:1307
+#: ../src/common/connection.py:1236
 #, python-format
 msgid "Server replied: %s"
 msgstr "Сервер ответил: %s"
 
-#: ../src/common/connection.py:1322
+#: ../src/common/connection.py:1251
 msgid "Connection to proxy failed"
 msgstr "Соединение с прокси разорвалось"
 
-#: ../src/common/connection.py:1360 ../src/common/connection.py:1438
+#: ../src/common/connection.py:1289
+#: ../src/common/connection.py:1361
 #, python-format
 msgid "Could not connect to account %s"
 msgstr "Не могу соединиться с %s"
 
-#: ../src/common/connection.py:1361 ../src/common/connection.py:1439
+#: ../src/common/connection.py:1290
+#: ../src/common/connection.py:1362
 #, python-format
 msgid "Connection with account %s has been lost. Retry connecting."
 msgstr "Связь с учетной записью %s была потеряна. Попытка подключения."
 
-#: ../src/common/connection.py:1388
+#: ../src/common/connection.py:1315
 #, python-format
 msgid "The authenticity of the %s certificate could be invalid."
 msgstr "Достоверность сертификата %s может быть недействительной."
 
-#: ../src/common/connection.py:1391
+#: ../src/common/connection.py:1318
 #, python-format
 msgid ""
 "\n"
@@ -5349,7 +5006,7 @@ msgstr ""
 "\n"
 "Ошибка SSL: <b>%s</b>"
 
-#: ../src/common/connection.py:1393
+#: ../src/common/connection.py:1320
 #, python-format
 msgid ""
 "\n"
@@ -5358,75 +5015,76 @@ msgstr ""
 "\n"
 "Неизвестная ошибка SSL: %d"
 
-#: ../src/common/connection.py:1420
+#: ../src/common/connection.py:1343
 #, fuzzy, python-format
 msgid ""
 "The authenticity of the %s certificate could be invalid.\n"
 "The certificate does not cover this domain."
 msgstr "Достоверность сертификата %s может быть недействительной."
 
-#: ../src/common/connection.py:1462 ../src/common/connection.py:2203
-#: ../src/common/zeroconf/connection_zeroconf.py:205
-#, python-format
-msgid "Could not connect to \"%s\""
-msgstr "Не могу соединиться с «%s»"
+#: ../src/common/connection.py:1386
+msgid "Check your connection or try again later"
+msgstr "Проверьте настройки сети или попробуйте еще раз позже"
 
-#: ../src/common/connection.py:1498
+#: ../src/common/connection.py:1421
 #, python-format
 msgid "Authentication failed with \"%s\""
 msgstr "Ошибка аутентификации с «%s»"
 
-#: ../src/common/connection.py:1499
+#: ../src/common/connection.py:1422
 msgid "Please check your login and password for correctness."
 msgstr "Проверьте правильность логина и пароля."
 
-#: ../src/common/connection.py:1574
+#: ../src/common/connection.py:1497
 msgid "Error while removing privacy list"
 msgstr "Ошибка при удалении списка доступа"
 
-#: ../src/common/connection.py:1575
+#: ../src/common/connection.py:1498
 #, python-format
-msgid ""
-"Privacy list %s has not been removed. It is maybe active in one of your "
-"connected resources. Deactivate it and try again."
-msgstr ""
-"Список доступа %s не может быть удален. Возможно, он используется одним из "
-"ваших активных ресурсов. Отключите ресурс и попробуйте снова."
+msgid "Privacy list %s has not been removed. It is maybe active in one of your connected resources. Deactivate it and try again."
+msgstr "Список доступа %s не может быть удален. Возможно, он используется одним из ваших активных ресурсов. Отключите ресурс и попробуйте снова."
 
-#: ../src/common/connection.py:2067
+#: ../src/common/connection.py:1883
 #, python-format
 msgid "Sent contact: \"%s\" (%s)"
 msgstr "Контакт для отправки: «%s» (%s)"
 
-#: ../src/common/connection.py:2070
+#: ../src/common/connection.py:1886
 msgid "Sent contacts:"
 msgstr "Контакты для отправки:"
 
-#: ../src/common/connection.py:2220 ../src/common/connection.py:2242
+#: ../src/common/connection.py:2033
+#: ../src/common/connection.py:2056
 msgid "Not fetched because of invisible status"
 msgstr "Нельзя получить из-за невидимости"
 
-#: ../src/common/connection.py:2826
+#: ../src/common/connection.py:2616
 msgid "Unregister failed"
 msgstr "Ошибка отказа от регистрации"
 
-#: ../src/common/connection.py:2827
+#: ../src/common/connection.py:2617
 #, python-format
 msgid "Unregistration with server %(server)s failed: %(error)s"
-msgstr ""
-"Отказ от регистрации на сервере %(server)s завершился ошибкой: %(error)s"
+msgstr "Отказ от регистрации на сервере %(server)s завершился ошибкой: %(error)s"
 
-#: ../src/common/contacts.py:129 ../src/common/helpers.py:67
-#: ../src/gui_interface.py:485
+#: ../src/common/contacts.py:129
+#: ../src/common/helpers.py:67
+#: ../src/gui_interface.py:484
 msgid "Observers"
 msgstr "Наблюдатели"
 
-#: ../src/common/contacts.py:133 ../src/common/contacts.py:361
-#: ../src/common/helpers.py:67 ../src/disco.py:121 ../src/disco.py:122
-#: ../src/disco.py:1554 ../src/roster_window.py:863
-#: ../src/roster_window.py:1616 ../src/roster_window.py:1730
-#: ../src/roster_window.py:1732 ../src/roster_window.py:1894
-#: ../src/roster_window.py:2591
+#: ../src/common/contacts.py:133
+#: ../src/common/contacts.py:361
+#: ../src/common/helpers.py:67
+#: ../src/disco.py:120
+#: ../src/disco.py:121
+#: ../src/disco.py:1516
+#: ../src/roster_window.py:859
+#: ../src/roster_window.py:1608
+#: ../src/roster_window.py:1718
+#: ../src/roster_window.py:1720
+#: ../src/roster_window.py:1882
+#: ../src/roster_window.py:2579
 msgid "Transports"
 msgstr "Транспорты"
 
@@ -5439,7 +5097,8 @@ msgstr "Не в ростере"
 msgid "D-Bus python bindings are missing in this computer"
 msgstr "На компьютере не установлена библиотека D-Bus для Python"
 
-#: ../src/common/dbus_support.py:42 ../src/common/dbus_support.py:53
+#: ../src/common/dbus_support.py:42
+#: ../src/common/dbus_support.py:53
 msgid "D-Bus capabilities of Gajim cannot be used"
 msgstr "Возможности работы Gajim с D-Bus не могут быть использованы"
 
@@ -5462,11 +5121,10 @@ msgstr "База данных не может быть загружена."
 
 #: ../src/common/exceptions.py:56
 msgid "Service not available: Gajim is not running, or remote_control is False"
-msgstr ""
-"Сервис недоступен: Gajim не запущен или отключена функция удаленного "
-"управления (настройка remote_control)"
+msgstr "Сервис недоступен: Gajim не запущен или отключена функция удаленного управления (настройка remote_control)"
 
-#: ../src/common/exceptions.py:67 ../src/gajim-remote.py:56
+#: ../src/common/exceptions.py:67
+#: ../src/gajim-remote.py:55
 msgid "D-Bus is not present on this machine or python module is missing"
 msgstr "На машине отсутствует D-Bus или модуль питона для нее"
 
@@ -5603,7 +5261,8 @@ msgstr "без пяти %(1)s"
 msgid "%(1)s o'clock"
 msgstr "%(1)s"
 
-#: ../src/common/fuzzyclock.py:49 ../src/common/fuzzyclock.py:51
+#: ../src/common/fuzzyclock.py:49
+#: ../src/common/fuzzyclock.py:51
 msgid "Night"
 msgstr "Ночь"
 
@@ -5639,7 +5298,8 @@ msgstr "Поздний вечер"
 msgid "Start of week"
 msgstr "Начало недели"
 
-#: ../src/common/fuzzyclock.py:53 ../src/common/fuzzyclock.py:54
+#: ../src/common/fuzzyclock.py:53
+#: ../src/common/fuzzyclock.py:54
 msgid "Middle of week"
 msgstr "Середина недели"
 
@@ -5683,7 +5343,8 @@ msgstr "Неверный символ в ресурсе"
 msgid "_Busy"
 msgstr "_Занят"
 
-#: ../src/common/helpers.py:227 ../src/tooltips.py:191
+#: ../src/common/helpers.py:227
+#: ../src/tooltips.py:191
 msgid "Busy"
 msgstr "Занят"
 
@@ -5691,7 +5352,8 @@ msgstr "Занят"
 msgid "_Not Available"
 msgstr "_Недоступен"
 
-#: ../src/common/helpers.py:232 ../src/tooltips.py:193
+#: ../src/common/helpers.py:232
+#: ../src/tooltips.py:193
 msgid "Not Available"
 msgstr "Недоступен"
 
@@ -5699,7 +5361,8 @@ msgstr "Недоступен"
 msgid "_Free for Chat"
 msgstr "_Готов поболтать"
 
-#: ../src/common/helpers.py:237 ../src/tooltips.py:187
+#: ../src/common/helpers.py:237
+#: ../src/tooltips.py:187
 msgid "Free for Chat"
 msgstr "Готов поболтать"
 
@@ -5707,7 +5370,8 @@ msgstr "Готов поболтать"
 msgid "?user status:_Available"
 msgstr "Д_оступен"
 
-#: ../src/common/helpers.py:242 ../src/tooltips.py:185
+#: ../src/common/helpers.py:242
+#: ../src/tooltips.py:185
 msgid "?user status:Available"
 msgstr "Доступен"
 
@@ -5723,7 +5387,8 @@ msgstr "_Ушел"
 msgid "_Offline"
 msgstr "_Отключен"
 
-#: ../src/common/helpers.py:254 ../src/tooltips.py:195
+#: ../src/common/helpers.py:254
+#: ../src/tooltips.py:195
 msgid "Offline"
 msgstr "Отключен"
 
@@ -5795,19 +5460,23 @@ msgstr "Посетители"
 msgid "Visitor"
 msgstr "Посетитель"
 
-#: ../src/common/helpers.py:316 ../src/tooltips.py:209
+#: ../src/common/helpers.py:316
+#: ../src/tooltips.py:209
 msgid "?Group Chat Contact Affiliation:None"
 msgstr "?Group Chat Contact Affiliation:Отсутствует"
 
-#: ../src/common/helpers.py:318 ../src/tooltips.py:215
+#: ../src/common/helpers.py:318
+#: ../src/tooltips.py:215
 msgid "Owner"
 msgstr "Владелец"
 
-#: ../src/common/helpers.py:320 ../src/tooltips.py:213
+#: ../src/common/helpers.py:320
+#: ../src/tooltips.py:213
 msgid "Administrator"
 msgstr "Администратор"
 
-#: ../src/common/helpers.py:322 ../src/tooltips.py:211
+#: ../src/common/helpers.py:322
+#: ../src/tooltips.py:211
 msgid "Member"
 msgstr "Участник"
 
@@ -5874,7 +5543,8 @@ msgstr "%s KB"
 msgid "%s B"
 msgstr "%s B"
 
-#: ../src/common/helpers.py:1119 ../src/common/helpers.py:1126
+#: ../src/common/helpers.py:1119
+#: ../src/common/helpers.py:1126
 #, python-format
 msgid "%d message pending"
 msgid_plural "%d messages pending"
@@ -5887,7 +5557,8 @@ msgstr[2] "%d пропущенных сообщений"
 msgid " from room %s"
 msgstr " в комнате %s"
 
-#: ../src/common/helpers.py:1135 ../src/common/helpers.py:1152
+#: ../src/common/helpers.py:1135
+#: ../src/common/helpers.py:1152
 #, python-format
 msgid " from user %s"
 msgstr " от пользователя %s"
@@ -5897,7 +5568,8 @@ msgstr " от пользователя %s"
 msgid " from %s"
 msgstr " от %s"
 
-#: ../src/common/helpers.py:1144 ../src/common/helpers.py:1150
+#: ../src/common/helpers.py:1144
+#: ../src/common/helpers.py:1150
 #, python-format
 msgid "%d event pending"
 msgid_plural "%d events pending"
@@ -5910,33 +5582,35 @@ msgstr[2] "%d событий пропущено"
 msgid "Gajim - %s"
 msgstr "Gajim — %s"
 
-#: ../src/common/helpers.py:1368
+#: ../src/common/helpers.py:1365
 msgid "Hello, I am $name."
 msgstr "Привет, я $name."
 
-#: ../src/common/helpers.py:1478 ../src/common/helpers.py:1487
-#: ../src/common/helpers.py:1541
+#: ../src/common/helpers.py:1475
+#: ../src/common/helpers.py:1484
+#: ../src/common/helpers.py:1538
 msgid "Timeout loading image"
 msgstr "Не могу загрузить изображение"
 
-#: ../src/common/helpers.py:1497 ../src/common/helpers.py:1539
+#: ../src/common/helpers.py:1494
+#: ../src/common/helpers.py:1536
 msgid "Image is too big"
 msgstr "Изображение слишком большое"
 
-#: ../src/common/helpers.py:1507
+#: ../src/common/helpers.py:1504
 msgid "PyCURL is not installed"
 msgstr "PyCURL не установлен"
 
-#: ../src/common/helpers.py:1543
+#: ../src/common/helpers.py:1540
 msgid "Error loading image"
 msgstr "Ошибка загрузки изображения"
 
-#: ../src/common/jingle_rtp.py:114
+#: ../src/common/jingle_rtp.py:110
 #, python-format
 msgid "%s configuration error"
 msgstr "ошибка конфигурации %s"
 
-#: ../src/common/jingle_rtp.py:115
+#: ../src/common/jingle_rtp.py:111
 #, python-format
 msgid ""
 "Couldn't setup %s. Check your configuration.\n"
@@ -5955,11 +5629,11 @@ msgstr ""
 "Ошибка:\n"
 "%s"
 
-#: ../src/common/jingle_rtp.py:220
+#: ../src/common/jingle_rtp.py:207
 msgid "GStreamer error"
 msgstr "Ошибка GStreamer"
 
-#: ../src/common/jingle_rtp.py:220
+#: ../src/common/jingle_rtp.py:207
 #, python-format
 msgid ""
 "Error: %s\n"
@@ -5968,19 +5642,19 @@ msgstr ""
 "Ошибка: %s\n"
 "Отладка: %s"
 
-#: ../src/common/jingle_rtp.py:354
+#: ../src/common/jingle_rtp.py:337
 msgid "audio input"
 msgstr "звуковой вход"
 
-#: ../src/common/jingle_rtp.py:357
+#: ../src/common/jingle_rtp.py:340
 msgid "audio output"
 msgstr "звуковой выход"
 
-#: ../src/common/jingle_rtp.py:412
+#: ../src/common/jingle_rtp.py:382
 msgid "video input"
 msgstr "видео вход"
 
-#: ../src/common/jingle_rtp.py:421
+#: ../src/common/jingle_rtp.py:391
 msgid "video output"
 msgstr "видео выход"
 
@@ -5989,89 +5663,87 @@ msgstr "видео выход"
 msgid "%s is not a valid loglevel"
 msgstr "%s не является допустимым loglevel"
 
-#: ../src/common/multimedia_helpers.py:41
+#: ../src/common/multimedia_helpers.py:39
 msgid " Default device"
 msgstr "Устройство по умолчанию"
 
 #. Test src
-#: ../src/common/multimedia_helpers.py:62
+#: ../src/common/multimedia_helpers.py:60
 msgid "Audio test"
 msgstr "Тест звука"
 
 #. Auto src
 #. Auto sink
 #. Auto src
-#: ../src/common/multimedia_helpers.py:65
-#: ../src/common/multimedia_helpers.py:81
-#: ../src/common/multimedia_helpers.py:95
-#: ../src/common/multimedia_helpers.py:113
+#: ../src/common/multimedia_helpers.py:63
+#: ../src/common/multimedia_helpers.py:79
+#: ../src/common/multimedia_helpers.py:93
+#: ../src/common/multimedia_helpers.py:111
 msgid "Autodetect"
 msgstr "Автоопределение"
 
 #. Alsa src
 #. Alsa sink
-#: ../src/common/multimedia_helpers.py:68
-#: ../src/common/multimedia_helpers.py:83
+#: ../src/common/multimedia_helpers.py:66
+#: ../src/common/multimedia_helpers.py:81
 #, python-format
 msgid "ALSA: %s"
 msgstr "ALSA: %s"
 
 #. Pulseaudio src
 #. Pulseaudio sink
-#: ../src/common/multimedia_helpers.py:71
-#: ../src/common/multimedia_helpers.py:85
+#: ../src/common/multimedia_helpers.py:69
+#: ../src/common/multimedia_helpers.py:83
 #, fuzzy, python-format
 msgid "Pulse: %s"
-msgstr "Пульс"
+msgstr "Файл: %s"
 
 #. Fake sink
-#: ../src/common/multimedia_helpers.py:79
+#. Fake video output
+#: ../src/common/multimedia_helpers.py:77
+#: ../src/common/multimedia_helpers.py:105
 msgid "Fake audio output"
 msgstr "Виртуальный аудио выход"
 
 #. Test src
-#: ../src/common/multimedia_helpers.py:92
+#: ../src/common/multimedia_helpers.py:90
 msgid "Video test"
 msgstr "Тест видео"
 
 #. V4L2 src
-#: ../src/common/multimedia_helpers.py:97
+#: ../src/common/multimedia_helpers.py:95
 #, python-format
 msgid "V4L2: %s"
 msgstr "V4L2: %s"
 
 #. Funny things, just to test...
 #. self.devices['GOOM'] = 'audiotestsrc ! goom'
-#: ../src/common/multimedia_helpers.py:100
+#: ../src/common/multimedia_helpers.py:98
 #, fuzzy
 msgid "Screen"
-msgstr "Экран"
-
-#. Fake video output
-#: ../src/common/multimedia_helpers.py:107
-#, fuzzy
-msgid "Fake video output"
-msgstr "Устройство вывода изображения"
+msgstr "зеленый"
 
-#: ../src/common/multimedia_helpers.py:110
+#: ../src/common/multimedia_helpers.py:108
 #, python-format
 msgid "X Window System (X11/XShm/Xv): %s"
 msgstr "Система X Window (X11/XShm/Xv): %s"
 
 #. ximagesink
-#: ../src/common/multimedia_helpers.py:112
+#: ../src/common/multimedia_helpers.py:110
 msgid "X Window System (without Xv)"
 msgstr "Система X Window (без Xv)"
 
 #. we talk about a file
 #. we talk about file
-#: ../src/common/optparser.py:53 ../src/gtkgui_helpers.py:203
+#: ../src/common/optparser.py:53
+#: ../src/gtkgui_helpers.py:203
 #: ../src/gtkgui_helpers.py:219
 #, python-format
 msgid "Error: cannot open %s for reading"
 msgstr "Ошибка: не могу открыть %s для чтения"
 
-#: ../src/common/optparser.py:304 ../src/common/optparser.py:305
+#: ../src/common/optparser.py:304
+#: ../src/common/optparser.py:305
 msgid "cyan"
 msgstr "синий"
 
@@ -6496,7 +6168,8 @@ msgstr "Ланч"
 msgid "Exercising"
 msgstr "Занимаюсь спортом"
 
-#: ../src/common/pep.py:133 ../src/common/pep.py:178
+#: ../src/common/pep.py:133
+#: ../src/common/pep.py:177
 msgid "Cycling"
 msgstr "На велосипеде"
 
@@ -6597,224 +6270,221 @@ msgid "Relaxing"
 msgstr "Отдыхаю"
 
 #: ../src/common/pep.py:160
-msgid "Fishing"
-msgstr "Рыбалка"
-
-#: ../src/common/pep.py:161
 msgid "Gaming"
 msgstr "Играю"
 
-#: ../src/common/pep.py:162
+#: ../src/common/pep.py:161
 msgid "Going out"
 msgstr "Вышел"
 
-#: ../src/common/pep.py:163
+#: ../src/common/pep.py:162
 msgid "Partying"
 msgstr "На вечеринке"
 
-#: ../src/common/pep.py:164
+#: ../src/common/pep.py:163
 msgid "Reading"
 msgstr "Читаю"
 
-#: ../src/common/pep.py:165
+#: ../src/common/pep.py:164
 msgid "Rehearsing"
 msgstr "Репетиция"
 
-#: ../src/common/pep.py:166
+#: ../src/common/pep.py:165
 msgid "Shopping"
 msgstr "Покупки"
 
-#: ../src/common/pep.py:167
+#: ../src/common/pep.py:166
 msgid "Smoking"
 msgstr "Курю"
 
-#: ../src/common/pep.py:168
+#: ../src/common/pep.py:167
 msgid "Socializing"
 msgstr "Общаюсь"
 
-#: ../src/common/pep.py:169
+#: ../src/common/pep.py:168
 msgid "Sunbathing"
 msgstr "Загораю"
 
-#: ../src/common/pep.py:170
+#: ../src/common/pep.py:169
 msgid "Watching TV"
 msgstr "Смотрю ТВ"
 
-#: ../src/common/pep.py:171
+#: ../src/common/pep.py:170
 msgid "Watching a Movie"
 msgstr "Смотрю кино"
 
-#: ../src/common/pep.py:172
+#: ../src/common/pep.py:171
 msgid "Talking"
 msgstr "Разговариваю"
 
-#: ../src/common/pep.py:173
+#: ../src/common/pep.py:172
 msgid "In Real Life"
 msgstr "В реальной жизни"
 
-#: ../src/common/pep.py:174
+#: ../src/common/pep.py:173
 msgid "On the Phone"
 msgstr "Говорю по телефону"
 
-#: ../src/common/pep.py:175
+#: ../src/common/pep.py:174
 msgid "On Video Phone"
 msgstr "Говорю по видео телефону"
 
-#: ../src/common/pep.py:176
+#: ../src/common/pep.py:175
 msgid "Traveling"
 msgstr "Путешествую"
 
-#: ../src/common/pep.py:177
+#: ../src/common/pep.py:176
 msgid "Commuting"
 msgstr "Еду с работы/на работу"
 
-#: ../src/common/pep.py:179
+#: ../src/common/pep.py:178
 msgid "Driving"
 msgstr "Вождение"
 
-#: ../src/common/pep.py:180
+#: ../src/common/pep.py:179
 msgid "In a Car"
 msgstr "В машине"
 
-#: ../src/common/pep.py:181
+#: ../src/common/pep.py:180
 msgid "On a Bus"
 msgstr "В автобусе"
 
-#: ../src/common/pep.py:182
+#: ../src/common/pep.py:181
 msgid "On a Plane"
 msgstr "В самолёте"
 
-#: ../src/common/pep.py:183
+#: ../src/common/pep.py:182
 msgid "On a Train"
 msgstr "В поезде"
 
-#: ../src/common/pep.py:184
+#: ../src/common/pep.py:183
 msgid "On a Trip"
 msgstr "В поездке"
 
-#: ../src/common/pep.py:185
+#: ../src/common/pep.py:184
 msgid "Walking"
 msgstr "Прогулка"
 
-#: ../src/common/pep.py:187
+#: ../src/common/pep.py:186
 msgid "Coding"
 msgstr "Пишу программу"
 
-#: ../src/common/pep.py:188
+#: ../src/common/pep.py:187
 msgid "In a Meeting"
 msgstr "На совещании"
 
-#: ../src/common/pep.py:189
+#: ../src/common/pep.py:188
 msgid "Studying"
 msgstr "Учусь"
 
-#: ../src/common/pep.py:190
+#: ../src/common/pep.py:189
 msgid "Writing"
 msgstr "Пишу"
 
-#: ../src/common/pep.py:195
-#, fuzzy
+#: ../src/common/pep.py:194
 msgid "accuracy"
-msgstr "Точность значения"
+msgstr ""
 
-#: ../src/common/pep.py:196
+#: ../src/common/pep.py:195
 msgid "alt"
 msgstr "высота"
 
-#: ../src/common/pep.py:197
+#: ../src/common/pep.py:196
 msgid "area"
 msgstr "район"
 
-#: ../src/common/pep.py:198
+#: ../src/common/pep.py:197
 msgid "bearing"
 msgstr "направление"
 
-#: ../src/common/pep.py:199
+#: ../src/common/pep.py:198
 msgid "building"
 msgstr "строение"
 
-#: ../src/common/pep.py:200
+#: ../src/common/pep.py:199
 msgid "country"
 msgstr "страна"
 
-#: ../src/common/pep.py:201
+#: ../src/common/pep.py:200
 msgid "countrycode"
 msgstr "код страны"
 
-#: ../src/common/pep.py:202
+#: ../src/common/pep.py:201
 msgid "datum"
 msgstr ""
 
-#: ../src/common/pep.py:203
+#: ../src/common/pep.py:202
 msgid "description"
 msgstr "описание"
 
-#: ../src/common/pep.py:204
+#: ../src/common/pep.py:203
 #, fuzzy
 msgid "error"
-msgstr "error"
+msgstr "Ошибка"
 
-#: ../src/common/pep.py:205
+#: ../src/common/pep.py:204
 msgid "floor"
 msgstr "этаж"
 
-#: ../src/common/pep.py:206
+#: ../src/common/pep.py:205
 msgid "lat"
 msgstr "широта"
 
-#: ../src/common/pep.py:207
+#: ../src/common/pep.py:206
 msgid "locality"
 msgstr "населенный пункт"
 
-#: ../src/common/pep.py:208
+#: ../src/common/pep.py:207
 msgid "lon"
 msgstr "долгота"
 
-#: ../src/common/pep.py:209
+#: ../src/common/pep.py:208
 msgid "postalcode"
 msgstr "индекс"
 
-#: ../src/common/pep.py:210
+#: ../src/common/pep.py:209
 msgid "region"
 msgstr "область"
 
-#: ../src/common/pep.py:211
+#: ../src/common/pep.py:210
+#: ../src/gajim-remote.py:288
 msgid "room"
 msgstr "комната"
 
-#: ../src/common/pep.py:212
+#: ../src/common/pep.py:211
 msgid "speed"
 msgstr "скорость"
 
-#: ../src/common/pep.py:213
+#: ../src/common/pep.py:212
 msgid "street"
 msgstr "улица"
 
-#: ../src/common/pep.py:214
+#: ../src/common/pep.py:213
 msgid "text"
 msgstr "текст"
 
-#: ../src/common/pep.py:215
+#: ../src/common/pep.py:214
 msgid "timestamp"
 msgstr "время установки"
 
-#: ../src/common/pep.py:216
+#: ../src/common/pep.py:215
+#: ../src/gajim-remote.py:279
 msgid "uri"
 msgstr "uri"
 
-#: ../src/common/pep.py:349
+#: ../src/common/pep.py:357
 msgid "Unknown Artist"
 msgstr "Неизвестный исполнитель"
 
-#: ../src/common/pep.py:352
+#: ../src/common/pep.py:360
 msgid "Unknown Title"
 msgstr "Неизвестная песня"
 
-#: ../src/common/pep.py:355
+#: ../src/common/pep.py:363
 msgid "Unknown Source"
 msgstr "Неизвестный альбом"
 
-#: ../src/common/pep.py:358
+#: ../src/common/pep.py:366
 #, python-format
 msgid ""
 "<b>\"%(title)s\"</b> by <i>%(artist)s</i>\n"
@@ -6824,13 +6494,9 @@ msgstr ""
 "из <i>%(source)s</i>"
 
 #. we're not english
-#: ../src/common/stanza_session.py:425
-msgid ""
-"[This is part of an encrypted session. If you see this message, something "
-"went wrong.]"
-msgstr ""
-"[Это часть зашифрованного сообщения. Если вы видите это сообщение, возможно, "
-"произошла ошибка.]"
+#: ../src/common/stanza_session.py:424
+msgid "[This is part of an encrypted session. If you see this message, something went wrong.]"
+msgstr "[Это часть зашифрованного сообщения. Если вы видите это сообщение, возможно, произошла ошибка.]"
 
 #: ../src/common/zeroconf/connection_zeroconf.py:193
 msgid "Avahi error"
@@ -6875,17 +6541,18 @@ msgstr "Удостоверьтесь, что демон avahi запущен."
 msgid "Could not change status of account \"%s\""
 msgstr "Не могу изменить статус учётной записи «%s»"
 
-#: ../src/common/zeroconf/connection_zeroconf.py:353
+#: ../src/common/zeroconf/connection_zeroconf.py:352
+#: ../src/common/zeroconf/connection_zeroconf.py:393
 msgid "Your message could not be sent."
 msgstr "Ваше сообщение не может быть отправлено."
 
-#: ../src/common/zeroconf/connection_zeroconf.py:367
+#: ../src/common/zeroconf/connection_zeroconf.py:366
+#: ../src/common/zeroconf/connection_zeroconf.py:407
 msgid "Contact is offline. Your message could not be sent."
 msgstr "Контакт не в сети. Отправить сообщение не удалось."
 
-#: ../src/common/zeroconf/connection_zeroconf.py:394
-msgid ""
-"Connection to host could not be established: Timeout while sending data."
+#: ../src/common/zeroconf/connection_zeroconf.py:434
+msgid "Connection to host could not be established: Timeout while sending data."
 msgstr "Не удалось соединиться с хостом: истекло время ожидания."
 
 #: ../src/common/zeroconf/zeroconf_avahi.py:192
@@ -6894,243 +6561,251 @@ msgstr "Не удалось соединиться с хостом: истекл
 msgid "Error while adding service. %s"
 msgstr "Ошибка при добавлении службы. %s"
 
-#: ../src/config.py:404
+#: ../src/config.py:409
 msgid "Default Message"
 msgstr "Сообщение по умолчанию"
 
-#: ../src/config.py:413
+#: ../src/config.py:418
 msgid "Enabled"
 msgstr "Включено"
 
-#: ../src/config.py:468 ../src/config.py:472 ../src/config.py:3185
+#: ../src/config.py:473
+#: ../src/config.py:477
+#: ../src/config.py:3154
 msgid "Default"
 msgstr "По умолчанию"
 
-#: ../src/config.py:747 ../src/dialogs.py:1499
+#: ../src/config.py:759
+#: ../src/dialogs.py:1495
 #, python-format
 msgid "Dictionary for lang %s not available"
 msgstr "Нет словаря для языка %s"
 
-#: ../src/config.py:748
+#: ../src/config.py:760
 #, python-format
-msgid ""
-"You have to install %s dictionary to use spellchecking, or choose another "
-"language by setting the speller_language option."
-msgstr ""
-"Чтобы воспользоваться проверкой правописания, установите словарь для языка "
-"%s или выберите другой язык, исправив настройку speller_language."
+msgid "You have to install %s dictionary to use spellchecking, or choose another language by setting the speller_language option."
+msgstr "Чтобы воспользоваться проверкой правописания, установите словарь для языка %s или выберите другой язык, исправив настройку speller_language."
 
-#: ../src/config.py:1226
+#: ../src/config.py:1227
 msgid "status message title"
 msgstr "заголовок сообщения о статусе"
 
-#: ../src/config.py:1226
+#: ../src/config.py:1227
 msgid "status message text"
 msgstr "текст сообщения о статусе"
 
 #. Name column
-#: ../src/config.py:1553 ../src/dialogs.py:2673 ../src/dialogs.py:2740
-#: ../src/dialogs.py:3535 ../src/disco.py:889 ../src/disco.py:1787
-#: ../src/disco.py:2089 ../src/history_window.py:92
+#: ../src/config.py:1554
+#: ../src/dialogs.py:2574
+#: ../src/dialogs.py:2641
+#: ../src/dialogs.py:3437
+#: ../src/disco.py:885
+#: ../src/disco.py:1743
+#: ../src/disco.py:2045
+#: ../src/history_window.py:91
 msgid "Name"
 msgstr "Имя"
 
-#: ../src/config.py:1656
+#: ../src/config.py:1654
 msgid "Relogin now?"
 msgstr "Переподключиться сейчас?"
 
-#: ../src/config.py:1657
+#: ../src/config.py:1655
 msgid "If you want all the changes to apply instantly, you must relogin."
-msgstr ""
-"Если вы хотите, чтобы изменения были применены немедленно, вы должны "
-"переподключиться."
+msgstr "Если вы хотите, чтобы изменения были применены немедленно, вы должны переподключиться."
 
-#: ../src/config.py:1814 ../src/config.py:1949
+#: ../src/config.py:1809
+#: ../src/config.py:1942
 msgid "OpenPGP is not usable on this computer"
 msgstr "Невозможно использовать OpenPGP на этом компьютере"
 
-#: ../src/config.py:1990 ../src/config.py:2039
+#: ../src/config.py:1982
+#: ../src/config.py:2029
 msgid "Unread events"
 msgstr "Непросмотренные события"
 
-#: ../src/config.py:1991
+#: ../src/config.py:1983
 msgid "Read all pending events before removing this account."
 msgstr "Просмотрите все ожидающие события перед удалением учетной записи."
 
-#: ../src/config.py:2021
+#: ../src/config.py:2012
 #, python-format
 msgid "You have opened chat in account %s"
 msgstr "У вас есть окна чата под учётной записью %s"
 
-#: ../src/config.py:2022
+#: ../src/config.py:2013
 msgid "All chat and groupchat windows will be closed. Do you want to continue?"
 msgstr "Все окна чатов и комнат будут закрыты. Продолжить?"
 
-#: ../src/config.py:2034 ../src/config.py:2596 ../src/config.py:2634
+#: ../src/config.py:2025
+#: ../src/config.py:2570
+#: ../src/config.py:2607
 msgid "You are currently connected to the server"
 msgstr "Вы сейчас подсоединены к серверу"
 
-#: ../src/config.py:2035
+#: ../src/config.py:2026
 msgid "To change the account name, you must be disconnected."
 msgstr "Для смены имени учетной записи необходимо отключиться."
 
-#: ../src/config.py:2040
+#: ../src/config.py:2030
 msgid "To change the account name, you must read all pending events."
-msgstr ""
-"Для смены имени учетной записи необходимо просмотреть ожидающие события."
+msgstr "Для смены имени учетной записи необходимо просмотреть ожидающие события."
 
-#: ../src/config.py:2046
+#: ../src/config.py:2036
 msgid "Account Name Already Used"
 msgstr "Такое имя учетной записи уже используется"
 
-#: ../src/config.py:2047
-msgid ""
-"This name is already used by another of your accounts. Please choose another "
-"name."
-msgstr ""
-"Это имя уже используется в другой вашей учетной записи. Выберите другое."
+#: ../src/config.py:2037
+msgid "This name is already used by another of your accounts. Please choose another name."
+msgstr "Это имя уже используется в другой вашей учетной записи. Выберите другое."
 
-#: ../src/config.py:2051 ../src/config.py:2056
+#: ../src/config.py:2041
+#: ../src/config.py:2045
 msgid "Invalid account name"
 msgstr "Неверное имя учетной записи"
 
-#: ../src/config.py:2052
+#: ../src/config.py:2042
 msgid "Account name cannot be empty."
 msgstr "Имя учетной записи не может быть пустым."
 
-#: ../src/config.py:2057
+#: ../src/config.py:2046
 msgid "Account name cannot contain spaces."
 msgstr "Имя учетной записи не может содержать пробелы."
 
-#: ../src/config.py:2138
+#: ../src/config.py:2123
 msgid "Rename Account"
 msgstr "Переименовать учетную запись"
 
-#: ../src/config.py:2139
+#: ../src/config.py:2124
 #, python-format
 msgid "Enter a new name for account %s"
 msgstr "Введите новое название для учетной записи %s"
 
-#: ../src/config.py:2168
+#: ../src/config.py:2152
 msgid "A Jabber ID must be in the form \"user@servername\"."
 msgstr "Jabber ID должен иметь формат «имя_пользователя@сервер»."
 
-#: ../src/config.py:2394 ../src/config.py:3726
+#: ../src/config.py:2375
+#: ../src/config.py:3708
 msgid "Invalid entry"
 msgstr "Неверная запись"
 
-#: ../src/config.py:2395 ../src/config.py:3727
+#: ../src/config.py:2376
+#: ../src/config.py:3709
 msgid "Custom port must be a port number."
 msgstr "В качестве номера порта должно выступать число"
 
-#: ../src/config.py:2417
+#: ../src/config.py:2397
 msgid "Failed to get secret keys"
 msgstr "Не удалось получить секретный ключ"
 
-#: ../src/config.py:2418
+#: ../src/config.py:2398
 msgid "There is no OpenPGP secret key available."
 msgstr "Нет секретного ключа OpenPGP."
 
-#: ../src/config.py:2456
+#: ../src/config.py:2432
 msgid "OpenPGP Key Selection"
 msgstr "Выбор ключа OpenPGP"
 
-#: ../src/config.py:2457
+#: ../src/config.py:2433
 msgid "Choose your OpenPGP key"
 msgstr "Выберите свой ключ OpenPGP"
 
-#: ../src/config.py:2465
+#: ../src/config.py:2441
 msgid "No such account available"
 msgstr "Такая учетная запись недоступна"
 
-#: ../src/config.py:2466
+#: ../src/config.py:2442
 msgid "You must create your account before editing your personal information."
-msgstr ""
-"Перед редактированием личных данных необходимо сначала создать учетную "
-"запись."
-
-#: ../src/config.py:2473 ../src/dialogs.py:2369 ../src/dialogs.py:2662
-#: ../src/dialogs.py:2850 ../src/disco.py:516 ../src/profile_window.py:371
+msgstr "Перед редактированием личных данных необходимо сначала создать учетную запись."
+
+#: ../src/config.py:2449
+#: ../src/dialogs.py:2325
+#: ../src/dialogs.py:2563
+#: ../src/dialogs.py:2751
+#: ../src/disco.py:515
+#: ../src/profile_window.py:369
 msgid "You are not connected to the server"
 msgstr "Вы не подключены к серверу"
 
-#: ../src/config.py:2474
+#: ../src/config.py:2450
 msgid "Without a connection, you can not edit your personal information."
 msgstr "Чтобы отредактировать личную информацию, нужно подключиться к серверу."
 
-#: ../src/config.py:2479
-#, fuzzy
-msgid "Your server doesn't support vCard"
+#: ../src/config.py:2454
+msgid "Your server doesn't support Vcard"
 msgstr "Сервер не поддерживает Vcard"
 
-#: ../src/config.py:2480
+#: ../src/config.py:2455
 msgid "Your server can't save your personal information."
 msgstr "Ваш сервер не может хранить личную информацию."
 
-#: ../src/config.py:2597 ../src/config.py:2635
+#: ../src/config.py:2571
+#: ../src/config.py:2608
 msgid "To disable the account, you must be disconnected."
-msgstr ""
-"Чтобы отключить эту учетную запись, необходимо отсоединиться от сервера."
+msgstr "Чтобы отключить эту учетную запись, необходимо отсоединиться от сервера."
 
-#: ../src/config.py:2604
+#: ../src/config.py:2577
 msgid "Account Local already exists."
 msgstr "Учётная запись Local уже существует."
 
-#: ../src/config.py:2605
+#: ../src/config.py:2578
 msgid "Please rename or remove it before enabling link-local messaging."
 msgstr "Переименуйте или удалите её, прежде чем включать локальные сообщения."
 
-#: ../src/config.py:2766
+#: ../src/config.py:2735
 #, python-format
 msgid "Edit %s"
 msgstr "Править %s"
 
-#: ../src/config.py:2768
+#: ../src/config.py:2737
 #, python-format
 msgid "Register to %s"
 msgstr "Зарегистрировать %s"
 
 #. list at the beginning
-#: ../src/config.py:2804
+#: ../src/config.py:2773
 msgid "Ban List"
 msgstr "Черный список"
 
-#: ../src/config.py:2805
+#: ../src/config.py:2774
 msgid "Member List"
 msgstr "Список участников"
 
-#: ../src/config.py:2805
+#: ../src/config.py:2774
 msgid "Owner List"
 msgstr "Список владельцев"
 
-#: ../src/config.py:2806
+#: ../src/config.py:2775
 msgid "Administrator List"
 msgstr "Список администраторов"
 
 #. Address column
 #. holds JID (who said this)
-#: ../src/config.py:2870 ../src/disco.py:896 ../src/history_manager.py:217
+#: ../src/config.py:2839
+#: ../src/disco.py:892
+#: ../src/history_manager.py:207
 msgid "JID"
 msgstr "JID"
 
-#: ../src/config.py:2880
+#: ../src/config.py:2849
 msgid "Reason"
 msgstr "Причина"
 
-#: ../src/config.py:2887
+#: ../src/config.py:2856
 msgid "Nick"
 msgstr "Ник"
 
-#: ../src/config.py:2893
+#: ../src/config.py:2862
 msgid "Role"
 msgstr "Обязанность"
 
-#: ../src/config.py:2920
+#: ../src/config.py:2889
 msgid "Banning..."
 msgstr "Баню..."
 
 #. You can move '\n' before user@domain if that line is TOO BIG
-#: ../src/config.py:2922
+#: ../src/config.py:2891
 msgid ""
 "<b>Whom do you want to ban?</b>\n"
 "\n"
@@ -7138,11 +6813,11 @@ msgstr ""
 "<b>Кого вы хотите забанить?</b>\n"
 "\n"
 
-#: ../src/config.py:2924
+#: ../src/config.py:2893
 msgid "Adding Member..."
 msgstr "Добавляю участника..."
 
-#: ../src/config.py:2925
+#: ../src/config.py:2894
 msgid ""
 "<b>Whom do you want to make a member?</b>\n"
 "\n"
@@ -7150,11 +6825,11 @@ msgstr ""
 "<b>Кого вы хотите сделать участником?</b>\n"
 "\n"
 
-#: ../src/config.py:2927
+#: ../src/config.py:2896
 msgid "Adding Owner..."
 msgstr "Добавляю владельца..."
 
-#: ../src/config.py:2928
+#: ../src/config.py:2897
 msgid ""
 "<b>Whom do you want to make an owner?</b>\n"
 "\n"
@@ -7162,11 +6837,11 @@ msgstr ""
 "<b>Кого вы хотите сделать владельцем?</b>\n"
 "\n"
 
-#: ../src/config.py:2930
+#: ../src/config.py:2899
 msgid "Adding Administrator..."
 msgstr "Добавляю администратора..."
 
-#: ../src/config.py:2931
+#: ../src/config.py:2900
 msgid ""
 "<b>Whom do you want to make an administrator?</b>\n"
 "\n"
@@ -7174,7 +6849,7 @@ msgstr ""
 "<b>Кого вы хотите сделать администратором?</b>\n"
 "\n"
 
-#: ../src/config.py:2932
+#: ../src/config.py:2901
 msgid ""
 "Can be one of the following:\n"
 "1. user@domain/resource (only that resource matches).\n"
@@ -7190,141 +6865,142 @@ msgstr ""
 "4. domain (сам домен, т.е. как любое сочетание user@domain,\n"
 "domain/resource, так и адрес, содержащий этот поддомен)"
 
-#: ../src/config.py:3033
+#: ../src/config.py:3002
 #, python-format
 msgid "Removing %s account"
 msgstr "Удаление учетной записи %s"
 
-#: ../src/config.py:3048
+#: ../src/config.py:3017
 msgid "Account is disabled"
 msgstr "Учетная запись отключена"
 
-#: ../src/config.py:3049
+#: ../src/config.py:3018
 msgid "To unregister from a server, account must be enabled."
-msgstr ""
-"Для удаления регистрации с сервера, учетная запись должна быть активна."
+msgstr "Для удаления регистрации с сервера, учетная запись должна быть активна."
 
-#: ../src/config.py:3062 ../src/gui_interface.py:286
-#: ../src/gui_interface.py:734
+#: ../src/config.py:3031
+#: ../src/gui_interface.py:285
+#: ../src/gui_interface.py:732
 msgid "Password Required"
 msgstr "Требуется пароль"
 
-#: ../src/config.py:3063 ../src/gui_interface.py:714
+#: ../src/config.py:3032
+#: ../src/gui_interface.py:712
 #, python-format
 msgid "Enter your password for account %s"
 msgstr "Введите пароль для учетной записи %s"
 
-#: ../src/config.py:3064 ../src/gui_interface.py:734
+#: ../src/config.py:3033
+#: ../src/gui_interface.py:732
 msgid "Save password"
 msgstr "Сохранить пароль"
 
-#: ../src/config.py:3074
+#: ../src/config.py:3043
 #, python-format
 msgid "Account \"%s\" is connected to the server"
 msgstr "Учетная запись «%s» подключена к серверу"
 
-#: ../src/config.py:3075
+#: ../src/config.py:3044
 msgid "If you remove it, the connection will be lost."
 msgstr "Если вы удалите его, произойдет отключение."
 
-#: ../src/config.py:3089
+#: ../src/config.py:3058
 #, python-format
 msgid "Connection to server %s failed"
 msgstr "Не удалось соединиться с сервером %s"
 
-#: ../src/config.py:3090
+#: ../src/config.py:3059
 msgid "What would you like to do?"
 msgstr "Что вы хотите сделать?"
 
-#: ../src/config.py:3091
+#: ../src/config.py:3060
 msgid "Remove only from Gajim"
 msgstr "Удалить только из Gajim"
 
-#: ../src/config.py:3092
+#: ../src/config.py:3061
 msgid "Don't remove anything. I'll try again later"
 msgstr "Ничего не удалять. Я попробую позже."
 
-#: ../src/config.py:3185
+#: ../src/config.py:3154
 msgid "?print_status:All"
 msgstr "?print_status:Все"
 
-#: ../src/config.py:3186
+#: ../src/config.py:3155
 msgid "Enter and leave only"
 msgstr "Только приход и уход"
 
-#: ../src/config.py:3187
+#: ../src/config.py:3156
 msgid "?print_status:None"
 msgstr "?print_status:Нет"
 
-#: ../src/config.py:3246
+#: ../src/config.py:3228
 msgid "New Group Chat"
 msgstr "Новая комната"
 
-#: ../src/config.py:3279
+#: ../src/config.py:3261
 msgid "This bookmark has invalid data"
 msgstr "Эта закладка содержит неверные данные"
 
-#: ../src/config.py:3280
-msgid ""
-"Please be sure to fill out server and room fields or remove this bookmark."
-msgstr ""
-"Удостоверьтесь, что заполнены поля с именем сервера и комнаты, либо удалите "
-"эту закладку."
+#: ../src/config.py:3262
+msgid "Please be sure to fill out server and room fields or remove this bookmark."
+msgstr "Удостоверьтесь, что заполнены поля с именем сервера и комнаты, либо удалите эту закладку."
 
-#: ../src/config.py:3406 ../src/config.py:3417 ../src/config.py:3426
-#: ../src/config.py:3437 ../src/config.py:3445
+#: ../src/config.py:3388
+#: ../src/config.py:3399
+#: ../src/config.py:3408
+#: ../src/config.py:3419
+#: ../src/config.py:3427
 msgid "Character not allowed"
 msgstr "Символ недопустим"
 
-#: ../src/config.py:3417 ../src/config.py:3425 ../src/config.py:3437
-#: ../src/config.py:3702
+#: ../src/config.py:3399
+#: ../src/config.py:3407
+#: ../src/config.py:3419
+#: ../src/config.py:3684
 msgid "Invalid server"
 msgstr "Неверный сервер"
 
-#: ../src/config.py:3444
+#: ../src/config.py:3426
 msgid "Invalid room"
 msgstr "Неверная комната"
 
-#: ../src/config.py:3614
+#: ../src/config.py:3596
 msgid "Account has been added successfully"
 msgstr "Учетная запись успешно добавлена"
 
-#: ../src/config.py:3615 ../src/config.py:3621
-msgid ""
-"You can set advanced account options by pressing the Advanced button, or "
-"later by choosing the Accounts menu item under the Edit menu from the main "
-"window."
-msgstr ""
-"Вы можете установить расширенные настройки учетной записи нажатием кнопки "
-"«Дополнительно», или сделать это позже посредством пункта «Учетные записи» "
-"меню «Правка» в главном окне программы."
+#: ../src/config.py:3597
+#: ../src/config.py:3603
+msgid "You can set advanced account options by pressing the Advanced button, or later by choosing the Accounts menu item under the Edit menu from the main window."
+msgstr "Вы можете установить расширенные настройки учетной записи нажатием кнопки «Дополнительно», или сделать это позже посредством пункта «Учетные записи» меню «Правка» в главном окне программы."
 
-#: ../src/config.py:3620
+#: ../src/config.py:3602
 msgid "Your new account has been created successfully"
 msgstr "Ваша новая учетная запись успешно создана"
 
-#: ../src/config.py:3659
+#: ../src/config.py:3641
 msgid "Invalid username"
 msgstr "Неверное имя пользователя"
 
-#: ../src/config.py:3661
+#: ../src/config.py:3643
 msgid "You must provide a username to configure this account."
 msgstr "Для настройки учетной записи необходимо ввести имя пользователя."
 
-#: ../src/config.py:3703
+#: ../src/config.py:3685
 msgid "Please provide a server on which you want to register."
 msgstr "Укажите сервер, на котором вы хотите зарегистрироваться."
 
-#: ../src/config.py:3759 ../src/gui_interface.py:1313
+#: ../src/config.py:3741
+#: ../src/gui_interface.py:1303
 msgid "Certificate Already in File"
 msgstr "Сертификат уже находится в файле"
 
-#: ../src/config.py:3760 ../src/gui_interface.py:1314
+#: ../src/config.py:3742
+#: ../src/gui_interface.py:1304
 #, python-format
 msgid "This certificate is already in file %s, so it's not added again."
 msgstr "Этот сертификат уже есть в файле %s, поэтому он не был добавлен."
 
-#: ../src/config.py:3850
+#: ../src/config.py:3830
 #, python-format
 msgid ""
 "<b>Security Warning</b>\n"
@@ -7339,7 +7015,8 @@ msgstr ""
 "Ошибка SSL: %(error)s\n"
 "Соединиться с этим сервером?"
 
-#: ../src/config.py:3856 ../src/gui_interface.py:1342
+#: ../src/config.py:3836
+#: ../src/gui_interface.py:1332
 #, python-format
 msgid ""
 "Add this certificate to the list of trusted certificates.\n"
@@ -7350,89 +7027,84 @@ msgstr ""
 "Отпечаток SHA1 сертификата:\n"
 "%s"
 
-#: ../src/config.py:3888 ../src/config.py:3922
+#: ../src/config.py:3868
+#: ../src/config.py:3902
 msgid "An error occurred during account creation"
 msgstr "Произошла ошибка при создании учетной записи"
 
-#: ../src/config.py:3987
+#: ../src/config.py:3967
 msgid "Account name is in use"
 msgstr "Такое имя учетной записи уже используется"
 
-#: ../src/config.py:3988
+#: ../src/config.py:3968
 msgid "You already have an account using this name."
 msgstr "У вас уже есть учетная запись с таким именем."
 
-#: ../src/config.py:4118
+#: ../src/config.py:4098
 msgid "PEP node was not removed"
 msgstr "PEP узел не был удален"
 
-#: ../src/config.py:4119
+#: ../src/config.py:4099
 #, python-format
 msgid "PEP node %(node)s was not removed: %(message)s"
 msgstr "PEP узел %(node)s не был удален: %(message)s"
 
-#: ../src/config.py:4147
+#: ../src/config.py:4127
 #, python-format
 msgid "Configure %s"
 msgstr "Настроить %s"
 
-#: ../src/config.py:4163 ../src/plugins/gui.py:92
+#: ../src/config.py:4143
+#: ../src/plugins/gui.py:88
 msgid "Active"
 msgstr "Активен"
 
-#: ../src/config.py:4171
+#: ../src/config.py:4151
 msgid "Event"
 msgstr "Событие"
 
-#: ../src/config.py:4205
+#: ../src/config.py:4185
 #, fuzzy
 msgid "Attention Message Received"
 msgstr "Получено первое сообщение"
 
-#: ../src/config.py:4206
+#: ../src/config.py:4186
 msgid "First Message Received"
 msgstr "Получено первое сообщение"
 
-#: ../src/config.py:4207
+#: ../src/config.py:4187
 msgid "Next Message Received Focused"
 msgstr "Следующее сообщение получено в окне с фокусом"
 
-#: ../src/config.py:4209
+#: ../src/config.py:4189
 msgid "Next Message Received Unfocused"
 msgstr "Следующее сообщение получено в окне без фокуса"
 
-#: ../src/config.py:4210
+#: ../src/config.py:4190
 msgid "Contact Connected"
 msgstr "Контакт подключился"
 
-#: ../src/config.py:4211
+#: ../src/config.py:4191
 msgid "Contact Disconnected"
 msgstr "Контакт отключился"
 
-#: ../src/config.py:4212
+#: ../src/config.py:4192
 msgid "Message Sent"
 msgstr "Сообщение отправлено"
 
-#: ../src/config.py:4213
+#: ../src/config.py:4193
 msgid "Group Chat Message Highlight"
 msgstr "Вас упомянули в комнате"
 
-#: ../src/config.py:4214
+#: ../src/config.py:4194
 msgid "Group Chat Message Received"
 msgstr "Получено сообщение в комнате"
 
-#: ../src/config.py:4215
+#: ../src/config.py:4195
 msgid "GMail Email Received"
 msgstr "Получено письмо на Gmail"
 
-#: ../src/conversation_textview.py:474 ../src/conversation_textview.py:492
-#, fuzzy, python-format
-msgid ""
-"<b>Message was corrected. Last message was:</b>\n"
-"  %s"
-msgstr "С момента последней отправки сообщения"
-
-#: ../src/conversation_textview.py:645
+#: ../src/conversation_textview.py:602
 msgid ""
 "This icon indicates that this message has not yet\n"
 "been received by the remote end. If this icon stays\n"
@@ -7442,7 +7114,7 @@ msgstr ""
 "Если иконка не пропадает долгое время,\n"
 "это означает, что сообщение потеряно."
 
-#: ../src/conversation_textview.py:664
+#: ../src/conversation_textview.py:621
 msgid ""
 "Text below this line is what has been said since the\n"
 "last time you paid attention to this group chat"
@@ -7450,44 +7122,44 @@ msgstr ""
 "Текст под этой линией был сказан после того,\n"
 "как вы последний раз заглядывали в эту комнату"
 
-#: ../src/conversation_textview.py:784
+#: ../src/conversation_textview.py:741
 msgid "_Quote"
 msgstr "_Цитировать"
 
-#: ../src/conversation_textview.py:791
+#: ../src/conversation_textview.py:748
 #, python-format
 msgid "_Actions for \"%s\""
 msgstr "_Действия для «%s»"
 
-#: ../src/conversation_textview.py:804
+#: ../src/conversation_textview.py:761
 msgid "Read _Wikipedia Article"
 msgstr "Смотреть статью в _Wikipedia"
 
-#: ../src/conversation_textview.py:809
+#: ../src/conversation_textview.py:766
 msgid "Look it up in _Dictionary"
 msgstr "Искать в _словаре"
 
-#: ../src/conversation_textview.py:826
+#: ../src/conversation_textview.py:783
 #, python-format
 msgid "Dictionary URL is missing an \"%s\" and it is not WIKTIONARY"
 msgstr "В URL словаря отсутствует «%s» и это не WIKTIONARY"
 
 #. we must have %s in the url
-#: ../src/conversation_textview.py:839
+#: ../src/conversation_textview.py:796
 #, python-format
 msgid "Web Search URL is missing an \"%s\""
 msgstr "В URL Web-поиска отсутствует «%s»"
 
-#: ../src/conversation_textview.py:842
+#: ../src/conversation_textview.py:799
 msgid "Web _Search for it"
 msgstr "_Поиск по Web"
 
-#: ../src/conversation_textview.py:848
+#: ../src/conversation_textview.py:805
 msgid "Open as _Link"
 msgstr "Открыть как _ссылку"
 
 #. %i is day in year (1-365)
-#: ../src/conversation_textview.py:1377
+#: ../src/conversation_textview.py:1302
 #, python-format
 msgid "Yesterday"
 msgid_plural "%(nb_days)i days ago"
@@ -7496,7 +7168,8 @@ msgstr[1] "%(nb_days)i  дня назад"
 msgstr[2] "%(nb_days)i  дней назад"
 
 #. if we have subject, show it too!
-#: ../src/conversation_textview.py:1427 ../src/history_window.py:488
+#: ../src/conversation_textview.py:1351
+#: ../src/history_window.py:481
 #, python-format
 msgid "Subject: %s\n"
 msgstr "Тема: %s\n"
@@ -7527,155 +7200,158 @@ msgstr "Jabber ID, который вы ввели, уже существует.
 msgid "new@jabber.id"
 msgstr "new@jabber.id"
 
-#: ../src/dataforms_widget.py:652 ../src/dataforms_widget.py:654
+#: ../src/dataforms_widget.py:652
+#: ../src/dataforms_widget.py:654
 #, python-format
 msgid "new%d@jabber.id"
 msgstr "new%d@jabber.id"
 
-#: ../src/dialogs.py:84
+#: ../src/dialogs.py:82
 #, python-format
 msgid "Contact name: <i>%s</i>"
 msgstr "Имя контакта: <i>%s</i>"
 
-#: ../src/dialogs.py:86
+#: ../src/dialogs.py:84
 #, python-format
 msgid "Jabber ID: <i>%s</i>"
 msgstr "Jabber ID: <i>%s</i>"
 
-#: ../src/dialogs.py:200
+#: ../src/dialogs.py:198
 msgid "Group"
 msgstr "Группа"
 
-#: ../src/dialogs.py:207
+#: ../src/dialogs.py:205
 msgid "In the group"
 msgstr "В группе"
 
-#: ../src/dialogs.py:299
+#: ../src/dialogs.py:297
 msgid "KeyID"
 msgstr "KeyID"
 
-#: ../src/dialogs.py:304
+#: ../src/dialogs.py:302
 msgid "Contact name"
 msgstr "Имя контакта"
 
-#: ../src/dialogs.py:479
+#: ../src/dialogs.py:477
 msgid "Set Mood"
 msgstr "Установить настроение"
 
-#: ../src/dialogs.py:599
+#: ../src/dialogs.py:597
 #, python-format
 msgid "%s Status Message"
 msgstr "Сообщение о статусе %s"
 
-#: ../src/dialogs.py:613
+#: ../src/dialogs.py:611
 msgid "Status Message"
 msgstr "Сообщение о статусе"
 
-#: ../src/dialogs.py:804
+#: ../src/dialogs.py:802
 msgid "Overwrite Status Message?"
 msgstr "Изменить сообщение о статусе?"
 
-#: ../src/dialogs.py:805
-msgid ""
-"This name is already used. Do you want to overwrite this status message?"
+#: ../src/dialogs.py:803
+msgid "This name is already used. Do you want to overwrite this status message?"
 msgstr "Это имя уже используется. Перезаписать это сообщение о статусе?"
 
-#: ../src/dialogs.py:813
+#: ../src/dialogs.py:811
 msgid "Save as Preset Status Message"
 msgstr "Сохранить установленное сообщение о статусе"
 
-#: ../src/dialogs.py:814
+#: ../src/dialogs.py:812
 msgid "Please type a name for this status message"
 msgstr "Введите имя для этого сообщения о статусе"
 
-#: ../src/dialogs.py:842
+#: ../src/dialogs.py:840
 msgid "AIM Address:"
 msgstr "Адрес AIM:"
 
-#: ../src/dialogs.py:843
+#: ../src/dialogs.py:841
 msgid "GG Number:"
 msgstr "Номер GaduGadu"
 
-#: ../src/dialogs.py:844
+#: ../src/dialogs.py:842
 msgid "ICQ Number:"
 msgstr "Номер ICQ:"
 
-#: ../src/dialogs.py:845
+#: ../src/dialogs.py:843
 msgid "MSN Address:"
 msgstr "Адрес в MSN:"
 
-#: ../src/dialogs.py:846
+#: ../src/dialogs.py:844
 msgid "Yahoo! Address:"
 msgstr "Адрес Yahoo:"
 
-#: ../src/dialogs.py:883
+#: ../src/dialogs.py:881
 #, python-format
 msgid "Please fill in the data of the contact you want to add in account %s"
 msgstr ""
 "Заполните данные о контакте,\n"
 "который хотите добавить в ростер учетной записи %s"
 
-#: ../src/dialogs.py:886
+#: ../src/dialogs.py:884
 msgid "Please fill in the data of the contact you want to add"
 msgstr "Заполните данные о контакте, который вы хотите добавить"
 
-#: ../src/dialogs.py:1080 ../src/dialogs.py:1086 ../src/dialogs.py:1091
-#: ../src/dialogs.py:3770
+#: ../src/dialogs.py:1076
+#: ../src/dialogs.py:1082
+#: ../src/dialogs.py:1087
+#: ../src/dialogs.py:3672
 msgid "Invalid User ID"
 msgstr "Неверный ID пользователя"
 
-#: ../src/dialogs.py:1087
+#: ../src/dialogs.py:1083
 msgid "The user ID must not contain a resource."
 msgstr "ID пользователя не должен содержать ресурс."
 
-#: ../src/dialogs.py:1092
+#: ../src/dialogs.py:1088
 msgid "You cannot add yourself to your roster."
 msgstr "Вы не можете добавлять себя в свой ростер."
 
-#: ../src/dialogs.py:1106
+#: ../src/dialogs.py:1102
 msgid "Contact already in roster"
 msgstr "Контакт уже в ростере"
 
-#: ../src/dialogs.py:1107
+#: ../src/dialogs.py:1103
 msgid "This contact is already listed in your roster."
 msgstr "Этот контакт уже содержится в вашем ростере."
 
-#: ../src/dialogs.py:1160 ../src/dialogs.py:1194
+#: ../src/dialogs.py:1156
+#: ../src/dialogs.py:1190
 msgid "User ID:"
 msgstr "ID пользователя:"
 
-#: ../src/dialogs.py:1279
+#: ../src/dialogs.py:1275
 msgid "A GTK+ Jabber/XMPP client"
 msgstr "Jabber/XMPP-клиент на GTK+"
 
-#: ../src/dialogs.py:1280
+#: ../src/dialogs.py:1276
 msgid "GTK+ Version:"
 msgstr "Версия GTK+:"
 
-#: ../src/dialogs.py:1281
+#: ../src/dialogs.py:1277
 msgid "PyGTK Version:"
 msgstr "Версия PyGTK:"
 
-#: ../src/dialogs.py:1291
+#: ../src/dialogs.py:1287
 msgid "Current Developers:"
 msgstr "Разработчики:"
 
-#: ../src/dialogs.py:1293
+#: ../src/dialogs.py:1289
 msgid "Past Developers:"
 msgstr "Разработчики прошлых версий:"
 
-#: ../src/dialogs.py:1299
+#: ../src/dialogs.py:1295
 msgid "THANKS:"
 msgstr "БЛАГОДАРНОСТИ:"
 
 #. remove one english sentence
 #. and add it manually as translatable
-#: ../src/dialogs.py:1305
+#: ../src/dialogs.py:1301
 msgid "Last but not least, we would like to thank all the package maintainers."
 msgstr "И наконец, мы хотели бы поблагодарить всех мейнтейнеров пакетов."
 
 #. here you write your name in the form Name FamilyName <someone@somewhere>
-#: ../src/dialogs.py:1317
+#: ../src/dialogs.py:1313
 msgid "translator-credits"
 msgstr ""
 "Яков Безруков <nebulam51@gmail.com>\n"
@@ -7684,492 +7360,458 @@ msgstr ""
 "Денис Фомин <fominde@mail.ru>\n"
 "Григорий Сарницкий <sargrigory@ya.ru>"
 
-#: ../src/dialogs.py:1500
+#: ../src/dialogs.py:1496
 #, python-format
 msgid ""
-"You have to install %s dictionary to use spellchecking, or choose another "
-"language by setting the speller_language option.\n"
+"You have to install %s dictionary to use spellchecking, or choose another language by setting the speller_language option.\n"
 "\n"
 "Highlighting misspelled words feature will not be used"
-msgstr ""
-"Чтобы воспользоваться проверкой правописания, установите словарь для языка "
-"%s или выберите другой язык, исправив настройку speller_language."
-
-#: ../src/dialogs.py:1845 ../src/gui_interface.py:1444
-#: ../src/gui_interface.py:1486
-msgid "Insecure connection"
-msgstr "Небезопасное соединение"
-
-#: ../src/dialogs.py:1846
-#, python-format
-msgid ""
-"You are about to connect to the account %(account)s (%(server)s) with an "
-"insecure connection. This means all your conversations will be exchanged "
-"unencrypted. This type of connection is really discouraged.\n"
-"Are you sure you want to do that?"
-msgstr ""
-"Вы хотите подключить учетную запись %(account)s (%(server)s) через "
-"незащищенное соединение. Вся ваша переписка не будет зашифрована. Этот тип "
-"подключения не рекомендуется.\n"
-"Вы действительно хотите это сделать?"
-
-#: ../src/dialogs.py:1852 ../src/gui_interface.py:1448
-#: ../src/gui_interface.py:1489
-msgid "Yes, I really want to connect insecurely"
-msgstr "Да, я действительно хочу соединиться небезопасно"
-
-#: ../src/dialogs.py:1853
-msgid "Gajim will NOT connect unless you check this box"
-msgstr ""
+msgstr "Чтобы воспользоваться проверкой правописания, установите словарь для языка %s или выберите другой язык, исправив настройку speller_language."
 
-#: ../src/dialogs.py:1854 ../src/groupchat_control.py:2130
-#: ../src/gui_interface.py:706 ../src/gui_interface.py:1449
-#: ../src/gui_interface.py:1490 ../src/message_window.py:222
-#: ../src/roster_window.py:3050 ../src/roster_window.py:3730
-#: ../src/roster_window.py:4558
-msgid "_Do not ask me again"
-msgstr "Не _спрашивать меня снова"
-
-#: ../src/dialogs.py:1950
+#: ../src/dialogs.py:1912
 msgid "_Resume"
 msgstr "_Продолжить"
 
-#: ../src/dialogs.py:1958
+#: ../src/dialogs.py:1920
 msgid "Re_place"
 msgstr "_Заменить"
 
-#: ../src/dialogs.py:2155 ../src/dialogs.py:2612
-#, fuzzy
-msgid "The nickname contains invalid characters."
-msgstr "Имя файла содержит недопустимые символы."
+#: ../src/dialogs.py:2114
+#: ../src/dialogs.py:2515
+msgid "The nickname has not allowed characters."
+msgstr "В Jabber ID комнаты или сервера содержатся недопустимые символы."
 
-#: ../src/dialogs.py:2277
+#: ../src/dialogs.py:2233
 #, python-format
 msgid "Subscription request for account %(account)s from %(jid)s"
 msgstr "Запрос на подписку для учетной записи %(account)s от %(jid)s"
 
-#: ../src/dialogs.py:2280
+#: ../src/dialogs.py:2236
 #, python-format
 msgid "Subscription request from %s"
 msgstr "Запрос на подписку от %s"
 
-#: ../src/dialogs.py:2364 ../src/gui_interface.py:2054
+#: ../src/dialogs.py:2320
+#: ../src/gui_interface.py:2056
 #, python-format
 msgid "You are already in group chat %s"
 msgstr "Вы уже в комнате %s"
 
-#: ../src/dialogs.py:2370
+#: ../src/dialogs.py:2326
 msgid "You can not join a group chat unless you are connected."
 msgstr "Вы не можете зайти в комнату без подключения."
 
-#: ../src/dialogs.py:2414
+#: ../src/dialogs.py:2370
 #, python-format
 msgid "Join Group Chat with account %s"
 msgstr "Войти в комнату с учетной записи %s"
 
-#: ../src/dialogs.py:2548 ../src/dialogs.py:2558
-#, fuzzy
-msgid "Wrong server"
-msgstr "Сервер вернул неправильный ответ! (%s)"
-
-#: ../src/dialogs.py:2548 ../src/dialogs.py:2558
-#, fuzzy, python-format
-msgid "%s is not a groupchat server"
-msgstr "URL «%s» сервера не является корректным"
-
-#: ../src/dialogs.py:2598
+#: ../src/dialogs.py:2501
 msgid "Invalid Account"
 msgstr "Неверное имя учетной записи"
 
-#: ../src/dialogs.py:2599
-msgid ""
-"You have to choose an account from which you want to join the groupchat."
+#: ../src/dialogs.py:2502
+msgid "You have to choose an account from which you want to join the groupchat."
 msgstr "Выберите учетную запись, с которой вы хотите войти в комнату."
 
-#: ../src/dialogs.py:2611
+#: ../src/dialogs.py:2514
 msgid "Invalid Nickname"
 msgstr "Неверное имя пользователя"
 
-#: ../src/dialogs.py:2616 ../src/dialogs.py:2622
-#: ../src/groupchat_control.py:2198
+#: ../src/dialogs.py:2519
+#: ../src/dialogs.py:2525
+#: ../src/groupchat_control.py:2093
 msgid "Invalid group chat Jabber ID"
 msgstr "Неверное имя комнаты"
 
-#: ../src/dialogs.py:2617
+#: ../src/dialogs.py:2520
 msgid "Please enter the group chat Jabber ID as room@server."
 msgstr "В Jabber ID комнаты или сервера содержатся недопустимые символы."
 
-#: ../src/dialogs.py:2623
-#, fuzzy
-msgid "The group chat Jabber ID contains invalid characters."
+#: ../src/dialogs.py:2526
+#: ../src/groupchat_control.py:2094
+msgid "The group chat Jabber ID has not allowed characters."
 msgstr "В Jabber ID комнаты или сервера содержатся недопустимые символы."
 
-#: ../src/dialogs.py:2628 ../src/gui_interface.py:2036
+#: ../src/dialogs.py:2531
+#: ../src/gui_interface.py:2038
 msgid "This is not a group chat"
 msgstr "Это не комната"
 
-#: ../src/dialogs.py:2629 ../src/gui_interface.py:2037
+#: ../src/dialogs.py:2532
+#: ../src/gui_interface.py:2039
 #, python-format
 msgid "%s is not the name of a group chat."
 msgstr "%s не является именем комнаты."
 
-#: ../src/dialogs.py:2663
+#: ../src/dialogs.py:2564
 msgid "Without a connection, you can not synchronise your contacts."
 msgstr "Чтобы объединить контакты, необходимо подключиться к серверу."
 
-#: ../src/dialogs.py:2676
+#: ../src/dialogs.py:2577
 msgid "Server"
 msgstr "Сервер"
 
-#: ../src/dialogs.py:2712
+#: ../src/dialogs.py:2613
 msgid "This account is not connected to the server"
 msgstr "Учётная запись не подключена к серверу"
 
-#: ../src/dialogs.py:2713
+#: ../src/dialogs.py:2614
 msgid "You cannot synchronize with an account unless it is connected."
 msgstr "Вы не можете синхронизировать учетную запись если она не подключена."
 
-#: ../src/dialogs.py:2738
+#: ../src/dialogs.py:2639
 msgid "Synchronise"
 msgstr "Синхронизировать"
 
-#: ../src/dialogs.py:2799
+#: ../src/dialogs.py:2700
 #, python-format
 msgid "Start Chat with account %s"
 msgstr "Начать чат с учетной записью %s"
 
-#: ../src/dialogs.py:2801
+#: ../src/dialogs.py:2702
 msgid "Start Chat"
 msgstr "Начать чат"
 
-#: ../src/dialogs.py:2802
+#: ../src/dialogs.py:2703
 msgid ""
 "Fill in the nickname or the Jabber ID of the contact you would like\n"
 "to send a chat message to:"
-msgstr ""
-"Введите ник или ID пользователя, которому вы хотите отправить сообщение:"
+msgstr "Введите ник или ID пользователя, которому вы хотите отправить сообщение:"
 
 #. if offline or connecting
-#: ../src/dialogs.py:2829 ../src/dialogs.py:3213 ../src/dialogs.py:3448
+#: ../src/dialogs.py:2730
+#: ../src/dialogs.py:3114
+#: ../src/dialogs.py:3350
 msgid "Connection not available"
 msgstr "Соединение недоступно"
 
-#: ../src/dialogs.py:2830 ../src/dialogs.py:3214 ../src/dialogs.py:3449
+#: ../src/dialogs.py:2731
+#: ../src/dialogs.py:3115
+#: ../src/dialogs.py:3351
 #, python-format
 msgid "Please make sure you are connected with \"%s\"."
 msgstr "Удостоверьтесь, что вы подключены к «%s»."
 
-#: ../src/dialogs.py:2839 ../src/dialogs.py:2842
+#: ../src/dialogs.py:2740
+#: ../src/dialogs.py:2743
 msgid "Invalid JID"
 msgstr "Неверный JID"
 
-#: ../src/dialogs.py:2842
+#: ../src/dialogs.py:2743
 #, python-format
 msgid "Unable to parse \"%s\"."
 msgstr "Не понимаю адреса «%s»."
 
-#: ../src/dialogs.py:2851
+#: ../src/dialogs.py:2752
 msgid "Without a connection, you can not change your password."
 msgstr "Чтобы изменить пароль, необходимо подключиться к серверу."
 
-#: ../src/dialogs.py:2870
+#: ../src/dialogs.py:2771
 msgid "Invalid password"
 msgstr "Неверный пароль"
 
-#: ../src/dialogs.py:2870
+#: ../src/dialogs.py:2771
 msgid "You must enter a password."
 msgstr "Необходимо ввести пароль."
 
-#: ../src/dialogs.py:2874
+#: ../src/dialogs.py:2775
 msgid "Passwords do not match"
 msgstr "Пароли не совпадают"
 
-#: ../src/dialogs.py:2875
+#: ../src/dialogs.py:2776
 msgid "The passwords typed in both fields must be identical."
 msgstr "Пароли, введенные в оба поля, должны быть одинаковыми."
 
-#: ../src/dialogs.py:2918 ../src/gui_interface.py:883 ../src/notify.py:276
+#: ../src/dialogs.py:2819
+#: ../src/gui_interface.py:873
+#: ../src/notify.py:276
 msgid "New E-mail"
 msgstr "Новое письмо"
 
-#: ../src/dialogs.py:2920 ../src/gui_interface.py:943 ../src/notify.py:269
+#: ../src/dialogs.py:2821
+#: ../src/gui_interface.py:933
+#: ../src/notify.py:269
 msgid "File Transfer Request"
 msgstr "Запрос передачи"
 
-#: ../src/dialogs.py:2922 ../src/gui_interface.py:845
-#: ../src/gui_interface.py:909 ../src/notify.py:271
+#: ../src/dialogs.py:2823
+#: ../src/gui_interface.py:835
+#: ../src/gui_interface.py:899
+#: ../src/notify.py:271
 msgid "File Transfer Error"
 msgstr "Ошибка передачи"
 
-#: ../src/dialogs.py:2924 ../src/gui_interface.py:1032
-#: ../src/gui_interface.py:1058 ../src/gui_interface.py:1079
+#: ../src/dialogs.py:2825
+#: ../src/gui_interface.py:1022
+#: ../src/gui_interface.py:1048
+#: ../src/gui_interface.py:1069
 #: ../src/notify.py:273
 msgid "File Transfer Completed"
 msgstr "Передача файла завершена"
 
-#: ../src/dialogs.py:2925 ../src/gui_interface.py:1035
-#: ../src/gui_interface.py:1062 ../src/gui_interface.py:1083
+#: ../src/dialogs.py:2826
+#: ../src/gui_interface.py:1025
+#: ../src/gui_interface.py:1052
+#: ../src/gui_interface.py:1073
 #: ../src/notify.py:274
 msgid "File Transfer Stopped"
 msgstr "Передача остановлена"
 
-#: ../src/dialogs.py:3132
+#: ../src/dialogs.py:3033
 #, python-format
 msgid "Single Message using account %s"
 msgstr "Новое сообщение с учетной записи %s"
 
-#: ../src/dialogs.py:3134
+#: ../src/dialogs.py:3035
 #, python-format
 msgid "Single Message in account %s"
 msgstr "Новое сообщение для учетной записи %s"
 
-#: ../src/dialogs.py:3136
+#: ../src/dialogs.py:3037
 msgid "Single Message"
 msgstr "Сообщение"
 
 #. prepare UI for Sending
-#: ../src/dialogs.py:3139
+#: ../src/dialogs.py:3040
 #, python-format
 msgid "Send %s"
 msgstr "Отправить %s"
 
 #. prepare UI for Receiving
-#: ../src/dialogs.py:3162
+#: ../src/dialogs.py:3063
 #, python-format
 msgid "Received %s"
 msgstr "Получено %s"
 
 #. prepare UI for Receiving
-#: ../src/dialogs.py:3185
+#: ../src/dialogs.py:3086
 #, python-format
 msgid "Form %s"
 msgstr "От %s"
 
 #. we create a new blank window to send and we preset RE: and to jid
-#: ../src/dialogs.py:3268
+#: ../src/dialogs.py:3170
 #, python-format
 msgid "RE: %s"
 msgstr "RE: %s"
 
-#: ../src/dialogs.py:3269
+#: ../src/dialogs.py:3171
 #, python-format
 msgid "%s wrote:\n"
 msgstr "%s написал:\n"
 
-#: ../src/dialogs.py:3329
+#: ../src/dialogs.py:3231
 #, python-format
 msgid "XML Console for %s"
 msgstr "Консоль XML для %s"
 
-#: ../src/dialogs.py:3331
+#: ../src/dialogs.py:3233
 msgid "XML Console"
 msgstr "Консоль XML"
 
 #. Action that can be done with an incoming list of contacts
-#: ../src/dialogs.py:3478
+#: ../src/dialogs.py:3380
 msgid "add"
 msgstr "добавить"
 
-#: ../src/dialogs.py:3478
+#: ../src/dialogs.py:3380
 msgid "modify"
 msgstr "изменить"
 
-#: ../src/dialogs.py:3479
+#: ../src/dialogs.py:3381
 msgid "remove"
 msgstr "удалить"
 
-#: ../src/dialogs.py:3508
+#: ../src/dialogs.py:3410
 #, python-format
-msgid ""
-"<b>%(jid)s</b> would like you to <b>%(action)s</b> some contacts in your "
-"roster."
-msgstr ""
-"<b>%(jid)s</b> хочет <b>%(action)s</b> несколько контактов в ваш список "
-"контактов."
+msgid "<b>%(jid)s</b> would like you to <b>%(action)s</b> some contacts in your roster."
+msgstr "<b>%(jid)s</b> хочет <b>%(action)s</b> несколько контактов в ваш список контактов."
 
 #. Change label for accept_button to action name instead of 'OK'.
-#: ../src/dialogs.py:3526 ../src/dialogs.py:3601
+#: ../src/dialogs.py:3428
+#: ../src/dialogs.py:3503
 msgid "Modify"
 msgstr "Изменить"
 
 #. holds jid
-#: ../src/dialogs.py:3532 ../src/history_manager.py:166
+#: ../src/dialogs.py:3434
+#: ../src/history_manager.py:156
 msgid "Jabber ID"
 msgstr "Jabber ID"
 
-#: ../src/dialogs.py:3538
+#: ../src/dialogs.py:3440
 msgid "Groups"
 msgstr "Группы"
 
 #. it is selected
 #. remote_jid = model[iter_][1].decode('utf-8')
-#: ../src/dialogs.py:3646
+#: ../src/dialogs.py:3548
 #, python-format
 msgid "%s suggested me to add you in my roster."
 msgstr "%s предложил мне добавить вас в мой список контактов."
 
-#: ../src/dialogs.py:3660
+#: ../src/dialogs.py:3562
 #, fuzzy, python-format
 msgid "Added %d contact"
 msgid_plural "Added %d contacts"
-msgstr[0] "<b>Время контакта:</b>"
+msgstr[0] "Добавлены контакты %s"
 msgstr[1] "Добавлены контакты %s"
 msgstr[2] "Добавлены контакты %s"
 
-#: ../src/dialogs.py:3698
+#: ../src/dialogs.py:3600
 #, fuzzy, python-format
 msgid "Removed %d contact"
 msgid_plural "Removed %d contacts"
-msgstr[0] "<b>Время контакта:</b>"
+msgstr[0] "Удалены контакты %s"
 msgstr[1] "Удалены контакты %s"
 msgstr[2] "Удалены контакты %s"
 
-#: ../src/dialogs.py:3739 ../src/dialogs.py:3916
+#: ../src/dialogs.py:3641
+#: ../src/dialogs.py:3818
 #, python-format
 msgid "Archiving Preferences for %s"
 msgstr "Настройки архивации для %s"
 
-#: ../src/dialogs.py:3779
+#: ../src/dialogs.py:3681
 #, fuzzy
 msgid "Invalid expire value"
-msgstr "недопустимое значение --bytes `%s'"
+msgstr "Неверное имя сервера"
 
-#: ../src/dialogs.py:3780
-#, fuzzy
+#: ../src/dialogs.py:3682
 msgid "Expire must be a valid positive integer."
-msgstr "Высота доски должна задаваться целым положительным числом"
+msgstr ""
 
-#: ../src/dialogs.py:3827
-#, fuzzy
+#: ../src/dialogs.py:3729
 msgid "There is an error with the form"
-msgstr "%d вкладка с ошибками"
+msgstr ""
 
-#: ../src/dialogs.py:4047
+#: ../src/dialogs.py:3949
 #, fuzzy
 msgid "There is an error"
-msgstr "Ошибка: Файл \"%s\" не существует"
+msgstr "Сервис ответил ошибкой."
 
-#: ../src/dialogs.py:4115
+#: ../src/dialogs.py:4017
 #, python-format
 msgid "Privacy List <b><i>%s</i></b>"
 msgstr "Список доступа <b><i>%s</i></b>"
 
-#: ../src/dialogs.py:4119
+#: ../src/dialogs.py:4021
 #, python-format
 msgid "Privacy List for %s"
 msgstr "Список доступа для %s"
 
-#: ../src/dialogs.py:4186
+#: ../src/dialogs.py:4088
 #, python-format
 msgid "Order: %(order)s, action: %(action)s, type: %(type)s, value: %(value)s"
-msgstr ""
-"Номер: %(order)s, действие: %(action)s, тип: %(type)s, значение: %(value)s"
+msgstr "Номер: %(order)s, действие: %(action)s, тип: %(type)s, значение: %(value)s"
 
-#: ../src/dialogs.py:4191
+#: ../src/dialogs.py:4093
 #, python-format
 msgid "Order: %(order)s, action: %(action)s"
 msgstr "Номер: %(order)s, действие: %(action)s"
 
-#: ../src/dialogs.py:4242
+#: ../src/dialogs.py:4144
 msgid "<b>Edit a rule</b>"
 msgstr "<b>Изменить правило</b>"
 
-#: ../src/dialogs.py:4353
+#: ../src/dialogs.py:4255
 msgid "<b>Add a rule</b>"
 msgstr "<b>Добавить правило</b>"
 
-#: ../src/dialogs.py:4452
+#: ../src/dialogs.py:4354
 #, python-format
 msgid "Privacy Lists for %s"
 msgstr "Списки доступа для %s"
 
-#: ../src/dialogs.py:4454
+#: ../src/dialogs.py:4356
 msgid "Privacy Lists"
 msgstr "Списки доступа"
 
-#: ../src/dialogs.py:4543
+#: ../src/dialogs.py:4445
 msgid "Invalid List Name"
 msgstr "Недопустимое имя списка"
 
-#: ../src/dialogs.py:4544
+#: ../src/dialogs.py:4446
 msgid "You must enter a name to create a privacy list."
 msgstr "Необходимо ввести имя для нового списка доступа."
 
-#: ../src/dialogs.py:4580
+#: ../src/dialogs.py:4481
 msgid "You are invited to a groupchat"
 msgstr "Вы приглашены в конференцию"
 
-#: ../src/dialogs.py:4583
+#: ../src/dialogs.py:4484
 msgid "$Contact has invited you to join a discussion"
 msgstr "$Contact приглашает вас присоединиться к обсуждению."
 
-#: ../src/dialogs.py:4585
+#: ../src/dialogs.py:4486
 #, python-format
 msgid "$Contact has invited you to group chat %(room_jid)s"
 msgstr "$Contact приглашает вас в комнату %(room_jid)s."
 
-#: ../src/dialogs.py:4593
+#: ../src/dialogs.py:4494
 #, python-format
 msgid "Comment: %s"
 msgstr "Комментарий: %s"
 
-#: ../src/dialogs.py:4595
+#: ../src/dialogs.py:4496
 msgid "Do you want to accept the invitation?"
 msgstr "Вы принимаете приглашение?"
 
-#: ../src/dialogs.py:4612
-#, fuzzy
+#: ../src/dialogs.py:4512
 msgid "Reason (if you decline):"
-msgstr "AWAY [<причина>], устанавливает флаг отсутствия"
+msgstr ""
 
-#: ../src/dialogs.py:4664
+#: ../src/dialogs.py:4563
 msgid "Choose Client Cert #PCKS12"
 msgstr "Выберите сертификат владельца #PCKS12"
 
-#: ../src/dialogs.py:4674 ../src/dialogs.py:4716 ../src/dialogs.py:4772
-#: ../src/dialogs.py:4860
+#: ../src/dialogs.py:4573
+#: ../src/dialogs.py:4615
+#: ../src/dialogs.py:4671
+#: ../src/dialogs.py:4759
 msgid "All files"
 msgstr "Все файлы"
 
-#: ../src/dialogs.py:4679
+#: ../src/dialogs.py:4578
 msgid "PKCS12 Files"
 msgstr "Файлы PKCS12"
 
-#: ../src/dialogs.py:4706
+#: ../src/dialogs.py:4605
 msgid "Choose Sound"
 msgstr "Выберите звуковой файл"
 
-#: ../src/dialogs.py:4721
+#: ../src/dialogs.py:4620
 msgid "Wav Sounds"
 msgstr "В формате Wav"
 
-#: ../src/dialogs.py:4759
+#: ../src/dialogs.py:4658
 msgid "Choose Image"
 msgstr "Выбрать картинку"
 
-#: ../src/dialogs.py:4777
+#: ../src/dialogs.py:4676
 msgid "Images"
 msgstr "Картинки"
 
-#: ../src/dialogs.py:4847
+#: ../src/dialogs.py:4746
 msgid "Choose Archive"
 msgstr "Выбрать Архив"
 
-#: ../src/dialogs.py:4865
+#: ../src/dialogs.py:4764
 msgid "Zip files"
 msgstr "Zip файлы"
 
-#: ../src/dialogs.py:4891
+#: ../src/dialogs.py:4790
 #, python-format
 msgid "When %s becomes:"
 msgstr "Когда %s происходит:"
 
-#: ../src/dialogs.py:4893
+#: ../src/dialogs.py:4792
 #, python-format
 msgid "Adding Special Notification for %s"
 msgstr "Добавление специального уведомления для %s"
 
-#: ../src/dialogs.py:5113
+#: ../src/dialogs.py:5012
 #, python-format
 msgid ""
 "Your chat session with <b>%(jid)s</b> is encrypted.\n"
@@ -8180,115 +7822,92 @@ msgstr ""
 "\n"
 "Short Authentication String данного сеанса <b>%(sas)s</b>."
 
-#: ../src/dialogs.py:5116
+#: ../src/dialogs.py:5015
 msgid "You have already verified this contact's identity."
 msgstr "Вы уже удостоверили личность этого контакта."
 
-#: ../src/dialogs.py:5122 ../src/dialogs.py:5207
+#: ../src/dialogs.py:5021
+#: ../src/dialogs.py:5105
 msgid "Contact's identity verified"
 msgstr "Личность контакта удостоверена"
 
-#: ../src/dialogs.py:5128
+#: ../src/dialogs.py:5027
 msgid "Verify again..."
 msgstr "Удостоверить снова..."
 
-#: ../src/dialogs.py:5133
-msgid ""
-"To be certain that <b>only</b> the expected person can read your messages or "
-"send you messages, you need to verify their identity by clicking the button "
-"below."
-msgstr ""
-"Чтобы быть уверенным, что <b>только</b> нужный человек может прочитать ваши "
-"сообщения или послать сообщения вам, вы должны удостоверить личность "
-"собеседника, нажав кнопку, расположенную ниже."
+#: ../src/dialogs.py:5032
+msgid "To be certain that <b>only</b> the expected person can read your messages or send you messages, you need to verify their identity by clicking the button below."
+msgstr "Чтобы быть уверенным, что <b>только</b> нужный человек может прочитать ваши сообщения или послать сообщения вам, вы должны удостоверить личность собеседника, нажав кнопку, расположенную ниже."
 
-#: ../src/dialogs.py:5136 ../src/dialogs.py:5188 ../src/dialogs.py:5201
+#: ../src/dialogs.py:5035
+#: ../src/dialogs.py:5086
+#: ../src/dialogs.py:5099
 msgid "Contact's identity NOT verified"
 msgstr "Личность контакта НЕ удостоверена"
 
-#: ../src/dialogs.py:5141
+#: ../src/dialogs.py:5040
 msgid "Verify..."
 msgstr "Удостоверить..."
 
-#: ../src/dialogs.py:5152
+#: ../src/dialogs.py:5051
 msgid "Have you verified the contact's identity?"
 msgstr "Вы удостоверили личность удаленного контакта?"
 
-#: ../src/dialogs.py:5153
+#: ../src/dialogs.py:5052
 #, python-format
 msgid ""
-"To prevent talking to an unknown person, you should speak to <b>%(jid)s</b> "
-"directly (in person or on the phone) and verify that they see the same Short "
-"Authentication String (SAS) as you.\n"
+"To prevent talking to an unknown person, you should speak to <b>%(jid)s</b> directly (in person or on the phone) and verify that they see the same Short Authentication String (SAS) as you.\n"
 "\n"
 "This session's Short Authentication String is <b>%(sas)s</b>."
 msgstr ""
-"Для предотвращения атаки типа «человек посередине» вы должны переговорить с "
-"<b>%(jid)s</b> напрямую (лично или по телефону) и убедиться, что он видит ту "
-"же Short Authentication String (SAS), что и вы.\n"
+"Для предотвращения атаки типа «человек посередине» вы должны переговорить с <b>%(jid)s</b> напрямую (лично или по телефону) и убедиться, что он видит ту же Short Authentication String (SAS), что и вы.\n"
 "\n"
 "Short Authentication String этого сеанса <b>%(sas)s</b>"
 
-#: ../src/dialogs.py:5154
+#: ../src/dialogs.py:5053
 msgid "Did you talk to the remote contact and verify the SAS?"
 msgstr "Вы переговорили с удаленным контактом и удостоверили SAS?"
 
-#: ../src/dialogs.py:5189
+#: ../src/dialogs.py:5087
 #, python-format
 msgid "The contact's key (%s) <b>does not match</b> the key assigned in Gajim."
-msgstr ""
-"Ключ (%s) контакта <b>не соответствует</b> ключу, присвоенному в Gajim."
+msgstr "Ключ (%s) контакта <b>не соответствует</b> ключу, присвоенному в Gajim."
 
-#: ../src/dialogs.py:5195
-msgid ""
-"No OpenPGP key is assigned to this contact. So you cannot encrypt messages."
-msgstr ""
-"Этому контакту не присвоен ключ OpenPGP, поэтому вы не можете зашифровать "
-"сообщения."
+#: ../src/dialogs.py:5093
+msgid "No GPG key is assigned to this contact. So you cannot encrypt messages."
+msgstr "Этому контакту не присвоен ключ GPG, поэтому вы не можете зашифровать сообщения."
 
-#: ../src/dialogs.py:5202
-msgid ""
-"OpenPGP key is assigned to this contact, but <b>you do not trust his key</"
-"b>, so message <b>cannot</b> be encrypted. Use your OpenPGP client to trust "
-"this key."
-msgstr ""
-"Этому контакту присвоен ключ OpenPGP, но <b>вы не доверяете этому ключу</b>. "
-"Таким образом, сообщения <b>не могут быть</b> зашифрованы. Воспользуйтесь "
-"вашим OpenPGP клиентом для того, чтобы выставить доверие данному ключу"
+#: ../src/dialogs.py:5100
+msgid "GPG key is assigned to this contact, but <b>you do not trust his key</b>, so message <b>cannot</b> be encrypted. Use your GPG client to trust this key."
+msgstr "Этому контакту присвоен ключ GPG, но <b>вы не доверяете этому ключу</b>. Таким образом, сообщения <b>не могут быть</b> зашифрованы. Воспользуйтесь вашим GPG клиентом для того, чтобы выставить доверие данному ключу"
 
-#: ../src/dialogs.py:5208
-msgid ""
-"OpenPGP Key is assigned to this contact, and you trust his key, so messages "
-"will be encrypted."
-msgstr ""
-"Этому контакту присвоен ключ OpenPGP, и вы доверяете этому ключу. Таким "
-"образом, сообщения будут зашифрованы."
+#: ../src/dialogs.py:5106
+msgid "GPG Key is assigned to this contact, and you trust his key, so messages will be encrypted."
+msgstr "Этому контакту присвоен ключ GPG, и вы доверяете этому ключу. Таким образом, сообщения будут зашифрованы."
 
-#: ../src/dialogs.py:5273
+#: ../src/dialogs.py:5171
 msgid "an audio and video"
 msgstr "аудио и видео"
 
-#: ../src/dialogs.py:5275
+#: ../src/dialogs.py:5173
 msgid "an audio"
 msgstr "аудио"
 
-#: ../src/dialogs.py:5277
+#: ../src/dialogs.py:5175
 msgid "a video"
 msgstr "видео"
 
-#: ../src/dialogs.py:5281
+#: ../src/dialogs.py:5179
 #, python-format
-msgid ""
-"%(contact)s wants to start %(type)s session with you. Do you want to answer "
-"the call?"
+msgid "%(contact)s wants to start %(type)s session with you. Do you want to answer the call?"
 msgstr "%(contact)s хочет начать %(type)s сеанс с вами. Вы хотите ответить?"
 
-#: ../src/dialogs.py:5372 ../src/dialogs.py:5376
+#: ../src/dialogs.py:5248
 #, python-format
 msgid "Certificate for account %s"
 msgstr "Сертификат учетной записи %s"
 
-#: ../src/dialogs.py:5376
+#: ../src/dialogs.py:5248
 #, python-format
 msgid ""
 "<b>Issued to:</b>\n"
@@ -8310,132 +7929,135 @@ msgid ""
 "SHA1 Fingerprint: %(sha1)s"
 msgstr ""
 
-#: ../src/dialogs.py:5411 ../src/dialogs.py:5428
-#, fuzzy
+#: ../src/dialogs.py:5283
+#: ../src/dialogs.py:5300
 msgid "View cert..."
-msgstr "Просмотреть журнал"
+msgstr ""
 
-#: ../src/disco.py:120
+#: ../src/disco.py:119
 msgid "Others"
 msgstr "Другие"
 
 #. conference is a category for listing mostly groupchats in service discovery
-#: ../src/disco.py:124
+#: ../src/disco.py:123
 msgid "Conference"
 msgstr "Комнаты"
 
-#: ../src/disco.py:517
+#: ../src/disco.py:516
 msgid "Without a connection, you can not browse available services"
 msgstr "Для просмотра сервисов необходимо сначала подключиться к серверу"
 
-#: ../src/disco.py:603
+#: ../src/disco.py:602
 #, python-format
 msgid "Service Discovery using account %s"
 msgstr "Обзор сервисов с учётной записи %s"
 
-#: ../src/disco.py:605
+#: ../src/disco.py:604
 msgid "Service Discovery"
 msgstr "Обзор сервисов (discovery)"
 
-#: ../src/disco.py:761
+#: ../src/disco.py:760
 msgid "The service could not be found"
 msgstr "Сервис не обнаружен"
 
-#: ../src/disco.py:762
-msgid ""
-"There is no service at the address you entered, or it is not responding. "
-"Check the address and try again."
-msgstr ""
-"По этому адресу сервисы отсутствуют или не отвечают. Проверьте адрес и "
-"попробуйте еще раз."
+#: ../src/disco.py:761
+msgid "There is no service at the address you entered, or it is not responding. Check the address and try again."
+msgstr "По этому адресу сервисы отсутствуют или не отвечают. Проверьте адрес и попробуйте еще раз."
 
-#: ../src/disco.py:768 ../src/disco.py:1109
+#: ../src/disco.py:765
+#: ../src/disco.py:1101
 msgid "The service is not browsable"
 msgstr "Сервис недоступен для просмотра"
 
-#: ../src/disco.py:769
+#: ../src/disco.py:766
 msgid "This type of service does not contain any items to browse."
 msgstr "Этот сервис не содержит ничего, что можно было бы просмотреть."
 
-#: ../src/disco.py:810 ../src/disco.py:820
+#: ../src/disco.py:806
+#: ../src/disco.py:816
 msgid "Invalid Server Name"
 msgstr "Неверное имя сервера"
 
-#: ../src/disco.py:873
+#: ../src/disco.py:869
 #, python-format
 msgid "Browsing %(address)s using account %(account)s"
 msgstr "Просмотр %(address)s с учетной записью %(account)s"
 
-#: ../src/disco.py:917
+#: ../src/disco.py:913
 msgid "_Browse"
 msgstr "_Браузер"
 
-#: ../src/disco.py:1110
+#: ../src/disco.py:1102
 msgid "This service does not contain any items to browse."
 msgstr "Этот сервис не содержит ничего, что можно было бы просмотреть."
 
-#: ../src/disco.py:1378
+#: ../src/disco.py:1342
 msgid "_Execute Command"
 msgstr "В_ыполнить команду..."
 
-#: ../src/disco.py:1388 ../src/disco.py:1560
+#: ../src/disco.py:1352
+#: ../src/disco.py:1521
 msgid "Re_gister"
 msgstr "За_регистрироваться"
 
-#: ../src/disco.py:1601
+#: ../src/disco.py:1562
 #, python-format
 msgid "Scanning %(current)d / %(total)d.."
 msgstr "Сканирую %(current)d / %(total)d.."
 
 #. Users column
-#: ../src/disco.py:1797
+#: ../src/disco.py:1753
 msgid "Users"
 msgstr "Пользователи"
 
 #. Description column
-#: ../src/disco.py:1805
+#: ../src/disco.py:1761
 msgid "Description"
 msgstr "Описание"
 
 #. Id column
-#: ../src/disco.py:1813
+#: ../src/disco.py:1769
 msgid "Id"
 msgstr "ID"
 
-#: ../src/disco.py:1877 ../src/gui_interface.py:2572
+#: ../src/disco.py:1834
+#: ../src/gui_interface.py:2574
 msgid "Bookmark already set"
 msgstr "Закладка уже установлена"
 
-#: ../src/disco.py:1878 ../src/gui_interface.py:2573
+#: ../src/disco.py:1835
+#: ../src/gui_interface.py:2575
 #, python-format
 msgid "Group Chat \"%s\" is already in your bookmarks."
 msgstr "Комната «%s» уже есть в ваших закладках."
 
-#: ../src/disco.py:1887 ../src/gui_interface.py:2587
+#: ../src/disco.py:1844
+#: ../src/gui_interface.py:2589
 msgid "Bookmark has been added successfully"
 msgstr "Закладка успешно добавлена"
 
-#: ../src/disco.py:1888 ../src/gui_interface.py:2588
+#: ../src/disco.py:1845
+#: ../src/gui_interface.py:2590
 msgid "You can manage your bookmarks via Actions menu in your roster."
 msgstr "Вы можете управлять закладками через меню «Действия» в ростере."
 
-#: ../src/disco.py:2098
+#: ../src/disco.py:2054
 msgid "Subscribed"
 msgstr "Подписка"
 
-#: ../src/disco.py:2106
+#: ../src/disco.py:2062
 msgid "Node"
 msgstr "Узел"
 
-#: ../src/disco.py:2173
+#: ../src/disco.py:2129
 msgid "New post"
 msgstr "Новое сообщение"
 
-#: ../src/disco.py:2179
+#: ../src/disco.py:2135
 msgid "_Subscribe"
 msgstr "_Подписаться"
 
-#: ../src/disco.py:2185
+#: ../src/disco.py:2141
 msgid "_Unsubscribe"
 msgstr "_Отписаться"
 
@@ -8444,13 +8066,11 @@ msgid "SSL certificate validation"
 msgstr "Подтверждение SSL сертификата"
 
 #: ../src/features_window.py:51
-msgid ""
-"A library used to validate server certificates to ensure a secure connection."
-msgstr ""
-"Библиотека используется для подтверждения действительности сертификатов "
-"сервера для того, чтобы удостовериться в защищенности соединения."
+msgid "A library used to validate server certificates to ensure a secure connection."
+msgstr "Библиотека используется для подтверждения действительности сертификатов сервера для того, чтобы удостовериться в защищенности соединения."
 
-#: ../src/features_window.py:52 ../src/features_window.py:53
+#: ../src/features_window.py:52
+#: ../src/features_window.py:53
 msgid "Requires python-pyopenssl > 0.12 and pyasn1."
 msgstr "Требует python-pyopenssl > 0.12 и pyasn1."
 
@@ -8460,20 +8080,15 @@ msgstr "Bonjour / Zeroconf"
 
 #: ../src/features_window.py:55
 msgid "Serverless chatting with autodetected clients in a local network."
-msgstr ""
-"Не требующее сервера общение между автоматически обнаруживаемыми клиентами в "
-"локальной сети."
+msgstr "Не требующее сервера общение между автоматически обнаруживаемыми клиентами в локальной сети."
 
 #: ../src/features_window.py:56
 msgid "Requires python-avahi."
 msgstr "Требует python-avahi."
 
 #: ../src/features_window.py:57
-msgid ""
-"Requires pybonjour and bonjour SDK running (http://developer.apple.com/"
-"opensource/)."
+msgid "Requires pybonjour and bonjour SDK running (http://developer.apple.com/opensource/)."
 msgstr ""
-"Требует pybonjour и bonjour SDK (http://developer.apple.com/opensource/)."
 
 #: ../src/features_window.py:58
 msgid "Command line"
@@ -8487,20 +8102,24 @@ msgstr "Скрипт для управления Gajim'ом через кома
 msgid "Requires python-dbus."
 msgstr "Требует python-dbus."
 
-#: ../src/features_window.py:61 ../src/features_window.py:69
-#: ../src/features_window.py:73 ../src/features_window.py:77
-#: ../src/features_window.py:89 ../src/features_window.py:105
-#: ../src/features_window.py:109 ../src/features_window.py:113
+#: ../src/features_window.py:61
+#: ../src/features_window.py:69
+#: ../src/features_window.py:73
+#: ../src/features_window.py:77
+#: ../src/features_window.py:89
+#: ../src/features_window.py:105
+#: ../src/features_window.py:109
+#: ../src/features_window.py:113
 msgid "Feature not available under Windows."
 msgstr "Эта возможность отсутствует в Windows."
 
 #: ../src/features_window.py:62
-msgid "OpenPGP message encryption"
+msgid "OpenGPG message encryption"
 msgstr "OpenPGP шифрование"
 
 #: ../src/features_window.py:63
-msgid "Encrypting chat messages with OpenPGP keys."
-msgstr "Шифрование сообщений при помощи OpenPGP ключей."
+msgid "Encrypting chat messages with gpg keys."
+msgstr "Шифрование сообщений при помощи gpg ключей."
 
 #: ../src/features_window.py:64
 msgid "Requires gpg and python-gnupg (http://code.google.com/p/python-gnupg/)."
@@ -8528,9 +8147,7 @@ msgstr "Управление сеансами"
 
 #: ../src/features_window.py:71
 msgid "Gajim session is stored on logout and restored on login."
-msgstr ""
-"Сеанс Gajim сохраняется при выходе (logout) и восстанавливается при входе "
-"(login)."
+msgstr "Сеанс Gajim сохраняется при выходе (logout) и восстанавливается при входе (login)."
 
 #: ../src/features_window.py:72
 msgid "Requires python-gnome2."
@@ -8589,9 +8206,7 @@ msgid "Passive popups notifying for new events."
 msgstr "Пассивные всплывающие окна для уведомления о новых событиях."
 
 #: ../src/features_window.py:88
-msgid ""
-"Requires python-notify or instead python-dbus in conjunction with "
-"notification-daemon."
+msgid "Requires python-notify or instead python-dbus in conjunction with notification-daemon."
 msgstr "Требует python-notify или python-dbus совместно с notification-daemon."
 
 #: ../src/features_window.py:90
@@ -8600,9 +8215,7 @@ msgstr "Авто статус"
 
 #: ../src/features_window.py:91
 msgid "Ability to measure idle time, in order to set auto status."
-msgstr ""
-"Возможность определения времени бездействия для того, чтобы установить "
-"автостатус."
+msgstr "Возможность определения времени бездействия для того, чтобы установить автостатус."
 
 #: ../src/features_window.py:92
 msgid "Requires libxss library."
@@ -8620,7 +8233,8 @@ msgstr "End to end шифрование"
 msgid "Encrypting chat messages."
 msgstr "Шифрование сообщений чата."
 
-#: ../src/features_window.py:96 ../src/features_window.py:97
+#: ../src/features_window.py:96
+#: ../src/features_window.py:97
 msgid "Requires python-crypto."
 msgstr "Требует python-crypto."
 
@@ -8629,14 +8243,11 @@ msgid "RST Generator"
 msgstr "Генератор RST"
 
 #: ../src/features_window.py:99
-msgid ""
-"Generate XHTML output from RST code (see http://docutils.sourceforge.net/"
-"docs/ref/rst/restructuredtext.html)."
-msgstr ""
-"Генерировать XHTML вывод из кода RST (см. http://docutils.sourceforge.net/"
-"docs/ref/rst/restructuredtext.html)."
+msgid "Generate XHTML output from RST code (see http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html)."
+msgstr "Генерировать XHTML вывод из кода RST (см. http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html)."
 
-#: ../src/features_window.py:100 ../src/features_window.py:101
+#: ../src/features_window.py:100
+#: ../src/features_window.py:101
 msgid "Requires python-docutils."
 msgstr "Требует python-docutils."
 
@@ -8650,11 +8261,11 @@ msgstr "Требует python-farstream и gstreamer-plugins-bad."
 
 #: ../src/features_window.py:106
 msgid "UPnP-IGD"
-msgstr "UPnP-IGD"
+msgstr ""
 
 #: ../src/features_window.py:107
 msgid "Ability to request your router to forward port for file transfer."
-msgstr "Возможность запроса порта для передачи файлов у роутера."
+msgstr ""
 
 #: ../src/features_window.py:108
 msgid "Requires python-gupnp-igd."
@@ -8662,11 +8273,11 @@ msgstr "Требует python-gupnp-igd."
 
 #: ../src/features_window.py:110
 msgid "UPower"
-msgstr "UPower"
+msgstr ""
 
 #: ../src/features_window.py:111
 msgid "Ability to disconnect properly just before suspending the machine."
-msgstr "Возможность отключиться перед уходом машины в сон."
+msgstr ""
 
 #: ../src/features_window.py:112
 msgid "Requires upower and python-dbus."
@@ -8692,20 +8303,23 @@ msgstr "Время"
 msgid "Progress"
 msgstr "Прогресс"
 
-#: ../src/filetransfers_window.py:185 ../src/filetransfers_window.py:242
+#: ../src/filetransfers_window.py:185
+#: ../src/filetransfers_window.py:242
 #, python-format
 msgid "Filename: %s"
 msgstr "Имя файла: %s"
 
-#: ../src/filetransfers_window.py:187 ../src/filetransfers_window.py:453
+#: ../src/filetransfers_window.py:187
+#: ../src/filetransfers_window.py:453
 #, python-format
 msgid "Size: %s"
 msgstr "Размер: %s"
 
 #. You is a reply of who sent a file
 #. You is a reply of who received a file
-#: ../src/filetransfers_window.py:196 ../src/filetransfers_window.py:206
-#: ../src/history_manager.py:551
+#: ../src/filetransfers_window.py:196
+#: ../src/filetransfers_window.py:206
+#: ../src/history_manager.py:541
 msgid "You"
 msgstr "Ð’Ñ‹"
 
@@ -8714,8 +8328,9 @@ msgstr "Ð’Ñ‹"
 msgid "Sender: %s"
 msgstr "Отправитель: %s"
 
-#: ../src/filetransfers_window.py:198 ../src/filetransfers_window.py:734
-#: ../src/tooltips.py:758
+#: ../src/filetransfers_window.py:198
+#: ../src/filetransfers_window.py:734
+#: ../src/tooltips.py:756
 msgid "Recipient: "
 msgstr "Получатель:"
 
@@ -8737,18 +8352,16 @@ msgstr "Сообщение об ошибке: %s"
 #: ../src/filetransfers_window.py:283
 #, python-format
 msgid ""
-"The file %(file)s has been fully received, but it seems to be wrongly "
-"received.\n"
+"The file %(file)s has been fully received, but it seems to be wrongly received.\n"
 "Do you want to reload it?"
 msgstr ""
-"Файл %(file)s был получен, но возможно с ошибками.\n"
-"Хотите загрузить его еще раз?"
 
 #: ../src/filetransfers_window.py:313
 msgid "Choose File to Send..."
 msgstr "Выбрать файл для отправки..."
 
-#: ../src/filetransfers_window.py:329 ../src/tooltips.py:793
+#: ../src/filetransfers_window.py:329
+#: ../src/tooltips.py:791
 msgid "Description: "
 msgstr "Описание: "
 
@@ -8760,34 +8373,38 @@ msgstr "Нет доступа к файлу"
 msgid "This file is being used by another process."
 msgstr "Файл занят другим процессом."
 
-#: ../src/filetransfers_window.py:389 ../src/gtkgui_helpers.py:850
+#: ../src/filetransfers_window.py:389
+#: ../src/gtkgui_helpers.py:850
 #, python-format
 msgid "Cannot overwrite existing file \"%s\""
 msgstr "Не могу заместить существующий файл «%s»"
 
-#: ../src/filetransfers_window.py:390 ../src/gtkgui_helpers.py:851
-msgid ""
-"A file with this name already exists and you do not have permission to "
-"overwrite it."
+#: ../src/filetransfers_window.py:390
+#: ../src/gtkgui_helpers.py:851
+msgid "A file with this name already exists and you do not have permission to overwrite it."
 msgstr "Этот файл уже существует, и у вас нет права его перезаписать."
 
-#: ../src/filetransfers_window.py:407 ../src/gtkgui_helpers.py:855
+#: ../src/filetransfers_window.py:407
+#: ../src/gtkgui_helpers.py:855
 msgid "This file already exists"
 msgstr "Файл уже существует"
 
-#: ../src/filetransfers_window.py:407 ../src/gtkgui_helpers.py:855
+#: ../src/filetransfers_window.py:407
+#: ../src/gtkgui_helpers.py:855
 msgid "What do you want to do?"
 msgstr "Что вы хотите сделать?"
 
 #. read-only bit is used to mark special folder under
 #. windows, not to mark that a folder is read-only.
 #. See ticket #3587
-#: ../src/filetransfers_window.py:418 ../src/gtkgui_helpers.py:862
+#: ../src/filetransfers_window.py:418
+#: ../src/gtkgui_helpers.py:862
 #, python-format
 msgid "Directory \"%s\" is not writable"
 msgstr "Папка «%s» не доступна для записи"
 
-#: ../src/filetransfers_window.py:419 ../src/gtkgui_helpers.py:863
+#: ../src/filetransfers_window.py:419
+#: ../src/gtkgui_helpers.py:863
 msgid "You do not have permission to create files in this directory."
 msgstr "У вас нет права создавать файлы в этой директории."
 
@@ -8816,12 +8433,14 @@ msgid "%s wants to send you a file:"
 msgstr "%s хочет отправить вам файл:"
 
 #: ../src/filetransfers_window.py:500
+#, fuzzy
 msgid "Checking file..."
-msgstr "Проверяется файл ..."
+msgstr "Отправляю данные..."
 
 #: ../src/filetransfers_window.py:514
+#, fuzzy
 msgid "File error"
-msgstr "Файловая ошибка"
+msgstr "Ошибка передачи"
 
 #. Print remaining time in format 00:00:00
 #. You can change the places of (hours), (minutes), (seconds) -
@@ -8839,7 +8458,8 @@ msgstr "%(hours)02.d:%(minutes)02.d:%(seconds)02.d"
 msgid "(%(filesize_unit)s/s)"
 msgstr "(%(filesize_unit)s/s)"
 
-#: ../src/filetransfers_window.py:700 ../src/filetransfers_window.py:703
+#: ../src/filetransfers_window.py:700
+#: ../src/filetransfers_window.py:703
 msgid "Invalid File"
 msgstr "Неверный файл"
 
@@ -8851,11 +8471,13 @@ msgstr "Файл: "
 msgid "It is not possible to send empty files"
 msgstr "Нельзя отсылать пустые файлы"
 
-#: ../src/filetransfers_window.py:730 ../src/tooltips.py:748
+#: ../src/filetransfers_window.py:730
+#: ../src/tooltips.py:746
 msgid "Name: "
 msgstr "Имя: "
 
-#: ../src/filetransfers_window.py:732 ../src/tooltips.py:752
+#: ../src/filetransfers_window.py:732
+#: ../src/tooltips.py:750
 msgid "Sender: "
 msgstr "Отправитель:"
 
@@ -8863,81 +8485,46 @@ msgstr "Отправитель:"
 msgid "Pause"
 msgstr "Пауза"
 
-#: ../src/gajim.py:135 ../src/history_manager.py:73
-msgid "Usage:"
-msgstr "Использование:"
-
-#: ../src/gajim.py:137 ../src/history_manager.py:75
-msgid "Options:"
-msgstr "Параметры:"
-
-#: ../src/gajim.py:139 ../src/history_manager.py:77
-msgid "Show this help message and exit"
-msgstr "показать это сообщение и закончить работу"
-
-#: ../src/gajim.py:141
-msgid "Show only critical errors"
-msgstr "показывать только сообщения об ошибках"
-
-#: ../src/gajim.py:143
-msgid "Print xml stanzas and other debug information"
-msgstr "Выводить xml станзы и другую отладочную информацию"
-
-#: ../src/gajim.py:145
-msgid "Use defined profile in configuration directory"
-msgstr "Использовать определенный профиль из каталога с настройками"
-
-#: ../src/gajim.py:147
-msgid "Set configuration directory"
-msgstr "Установить каталог загрузки конфигурации"
-
-#: ../src/gajim.py:149
-msgid "Configure logging system"
-msgstr "Настройки системы логирования"
-
-#: ../src/gajim.py:211
+#: ../src/gajim.py:192
 msgid "Gajim needs X server to run. Quiting..."
 msgstr "Gajim для запуска требуется X-сервер. Выход..."
 
-#: ../src/gajim.py:213
+#: ../src/gajim.py:194
 #, python-format
 msgid "importing PyGTK failed: %s"
 msgstr "ошибка импортирования PyGTK: %s"
 
-#: ../src/gajim.py:256
+#: ../src/gajim.py:235
 msgid "Gajim needs PyGTK 2.22 or above"
 msgstr "Gajim требуется PyGTK 2.22 или выше"
 
-#: ../src/gajim.py:257
+#: ../src/gajim.py:236
 msgid "Gajim needs PyGTK 2.22 or above to run. Quiting..."
 msgstr "Gajim для запуска требуется PyGTK 2.22 или выше. Выход..."
 
-#: ../src/gajim.py:259
+#: ../src/gajim.py:238
 msgid "Gajim needs GTK 2.22 or above"
 msgstr "Gajim требуется GTK 2.22 или выше"
 
-#: ../src/gajim.py:260
+#: ../src/gajim.py:239
 msgid "Gajim needs GTK 2.22 or above to run. Quiting..."
 msgstr "Gajim для запуска требуется GTK 2.22 или выше. Выход..."
 
-#: ../src/gajim.py:269
+#: ../src/gajim.py:248
 msgid "Gajim needs pywin32 to run"
 msgstr "Gajim для запуска требуется pywin32"
 
-#: ../src/gajim.py:270
+#: ../src/gajim.py:249
 #, python-format
-msgid ""
-"Please make sure that Pywin32 is installed on your system. You can get it at "
-"%s"
-msgstr ""
-"Удостоверьтесь, что в вашей системе установлен Pywin32. Вы можете получить "
-"его на сайте: %s"
+msgid "Please make sure that Pywin32 is installed on your system. You can get it at %s"
+msgstr "Удостоверьтесь, что в вашей системе установлен Pywin32. Вы можете получить его на сайте: %s"
 
-#: ../src/gajim.py:410
+#. set the icon to all newly opened wind
+#: ../src/gajim.py:365
 msgid "Gajim is already running"
 msgstr "Gajim уже запущен"
 
-#: ../src/gajim.py:411
+#: ../src/gajim.py:366
 msgid ""
 "Another instance of Gajim seems to be running\n"
 "Run anyway?"
@@ -8945,389 +8532,342 @@ msgstr ""
 "По-видимому, уже запущен другой экземпляр Gajim\n"
 "Запустить ещё один?"
 
-#: ../src/gajim-remote.py:78
+#: ../src/gajim-remote.py:77
 msgid "Shows a help on specific command"
 msgstr "Показывает помощь для конкретной команды"
 
 #. User gets help for the command, specified by this parameter
-#: ../src/gajim-remote.py:81
+#: ../src/gajim-remote.py:80
 msgid "command"
 msgstr "команда"
 
-#: ../src/gajim-remote.py:82
+#: ../src/gajim-remote.py:81
 msgid "show help on command"
 msgstr "показать помощь по команде"
 
-#: ../src/gajim-remote.py:86
+#: ../src/gajim-remote.py:85
 msgid "Shows or hides the roster window"
 msgstr "Скрывает или показывает окно ростера"
 
-#: ../src/gajim-remote.py:90
+#: ../src/gajim-remote.py:89
 msgid "Pops up a window with the next pending event"
 msgstr "Показывать окно со следующим непрочитанным сообщением"
 
-#: ../src/gajim-remote.py:94
-msgid ""
-"Prints a list of all contacts in the roster. Each contact appears on a "
-"separate line"
-msgstr ""
-"Выводит список всех контактов в ростере. Каждый контакт будет в отдельной "
-"строке"
-
-#: ../src/gajim-remote.py:97 ../src/gajim-remote.py:112
-#: ../src/gajim-remote.py:122 ../src/gajim-remote.py:132
-#: ../src/gajim-remote.py:148 ../src/gajim-remote.py:162
-#: ../src/gajim-remote.py:171 ../src/gajim-remote.py:192
-#: ../src/gajim-remote.py:222 ../src/gajim-remote.py:231
-#: ../src/gajim-remote.py:238 ../src/gajim-remote.py:245
-#: ../src/gajim-remote.py:256 ../src/gajim-remote.py:281
-#: ../src/gajim-remote.py:292
-msgid "?CLI:account"
-msgstr "?CLI:учетная запись"
-
-#: ../src/gajim-remote.py:97
+#: ../src/gajim-remote.py:93
+msgid "Prints a list of all contacts in the roster. Each contact appears on a separate line"
+msgstr "Выводит список всех контактов в ростере. Каждый контакт будет в отдельной строке"
+
+#: ../src/gajim-remote.py:96
+#: ../src/gajim-remote.py:111
+#: ../src/gajim-remote.py:121
+#: ../src/gajim-remote.py:131
+#: ../src/gajim-remote.py:147
+#: ../src/gajim-remote.py:161
+#: ../src/gajim-remote.py:170
+#: ../src/gajim-remote.py:191
+#: ../src/gajim-remote.py:221
+#: ../src/gajim-remote.py:230
+#: ../src/gajim-remote.py:237
+#: ../src/gajim-remote.py:244
+#: ../src/gajim-remote.py:255
+#: ../src/gajim-remote.py:280
+#: ../src/gajim-remote.py:291
+msgid "account"
+msgstr "Учетные записи"
+
+#: ../src/gajim-remote.py:96
 msgid "show only contacts of the given account"
 msgstr "показывать контакты только для данной учетной записи"
 
-#: ../src/gajim-remote.py:103
+#: ../src/gajim-remote.py:102
 msgid "Prints a list of registered accounts"
 msgstr "Показывает список зарегистрированных учетных записей"
 
-#: ../src/gajim-remote.py:107
+#: ../src/gajim-remote.py:106
 msgid "Changes the status of account or accounts"
 msgstr "Изменяет статус учетной записи или записей"
 
 #. offline, online, chat, away, xa, dnd, invisible should not be translated
-#: ../src/gajim-remote.py:110
-msgid "?CLI:status"
-msgstr "?CLI:статус"
-
-#: ../src/gajim-remote.py:110
-msgid ""
-"one of: offline, online, chat, away, xa, dnd, invisible. If not set, use "
-"account's previous status"
-msgstr ""
-"один из: отключен, в сети, готов поболтать, отошел, недоступен, не "
-"беспокоить, невидимка. Если не указано, использовать предыдущий статус."
+#: ../src/gajim-remote.py:109
+msgid "status"
+msgstr "статус"
 
-#: ../src/gajim-remote.py:111 ../src/gajim-remote.py:134
-#: ../src/gajim-remote.py:145 ../src/gajim-remote.py:159
-#: ../src/gajim-remote.py:170 ../src/gajim-remote.py:283
-msgid "?CLI:message"
-msgstr "?CLI:сообщение"
+#: ../src/gajim-remote.py:109
+msgid "one of: offline, online, chat, away, xa, dnd, invisible. If not set, use account's previous status"
+msgstr "один из: отключен, в сети, готов поболтать, отошел, недоступен, не беспокоить, невидимка. Если не указано, использовать предыдущий статус."
 
-#: ../src/gajim-remote.py:111
+#: ../src/gajim-remote.py:110
 msgid "status message"
 msgstr "сообщение о статусе"
 
-#: ../src/gajim-remote.py:112
-msgid ""
-"change status of account \"account\". If not specified, try to change status "
-"of all accounts that have \"sync with global status\" option set"
-msgstr ""
-"изменяет статус учетной записи «учетная запись». Если не указано, пытается "
-"изменить статус всех учетных записей, у которых установлена опция "
-"«синхронизировать с глобальным статусом»"
+#: ../src/gajim-remote.py:111
+msgid "change status of account \"account\". If not specified, try to change status of all accounts that have \"sync with global status\" option set"
+msgstr "изменяет статус учетной записи «учетная запись». Если не указано, пытается изменить статус всех учетных записей, у которых установлена опция «синхронизировать с глобальным статусом»"
 
-#: ../src/gajim-remote.py:118
+#: ../src/gajim-remote.py:117
 msgid "Changes the priority of account or accounts"
 msgstr "Изменяет приоритет учетной записи или записей"
 
-#: ../src/gajim-remote.py:120
-msgid "?CLI:priority"
-msgstr "?CLI:приоритет"
+#: ../src/gajim-remote.py:119
+msgid "priority"
+msgstr "Приоритет"
 
-#: ../src/gajim-remote.py:120
+#: ../src/gajim-remote.py:119
 msgid "priority you want to give to the account"
 msgstr "приоритет, который вы хотите назначить для учетной записи"
 
-#: ../src/gajim-remote.py:122
-msgid ""
-"change the priority of the given account. If not specified, change status of "
-"all accounts that have \"sync with global status\" option set"
-msgstr ""
-"изменяет приоритет учетной записи. Если не указано, пытается изменить статус "
-"всех учетных записей, у которых установлена опция «синхронизировать с "
-"глобальным статусом»"
-
-#: ../src/gajim-remote.py:128
+#: ../src/gajim-remote.py:121
+msgid "change the priority of the given account. If not specified, change status of all accounts that have \"sync with global status\" option set"
+msgstr "изменяет приоритет учетной записи. Если не указано, пытается изменить статус всех учетных записей, у которых установлена опция «синхронизировать с глобальным статусом»"
+
+#: ../src/gajim-remote.py:127
 msgid "Shows the chat dialog so that you can send messages to a contact"
 msgstr "Показывает окно беседы, чтобы вы могли отправлять сообщения контакту"
 
-#: ../src/gajim-remote.py:130
+#: ../src/gajim-remote.py:129
 msgid "JID of the contact that you want to chat with"
 msgstr "JID контакта, с которым вы хотели бы побеседовать"
 
-#: ../src/gajim-remote.py:132 ../src/gajim-remote.py:222
+#: ../src/gajim-remote.py:131
+#: ../src/gajim-remote.py:221
 msgid "if specified, contact is taken from the contact list of this account"
 msgstr "если указано, контакт будет взят из контакт-листа этой учетной записи"
 
-#: ../src/gajim-remote.py:135
+#: ../src/gajim-remote.py:134
 msgid "message content. The account must be specified or \"\""
 msgstr "содержимое сообщения. Учетная запись должна быть указана или \"\""
 
-#: ../src/gajim-remote.py:140
-msgid ""
-"Sends new chat message to a contact in the roster. Both OpenPGP key and "
-"account are optional. If you want to set only 'account', without 'OpenPGP "
-"key', just set 'OpenPGP key' to ''."
-msgstr ""
-"Отправить новое сообщение контакту в ростере. Как ключ OpenPGP, так и "
-"учетная запись опциональны. Если вы хотите настроить лишь 'учетную запись', "
-"без 'ключа OpenPGP', просто установите 'ключ OpenPGP' в ''."
+#: ../src/gajim-remote.py:139
+msgid "Sends new chat message to a contact in the roster. Both OpenPGP key and account are optional. If you want to set only 'account', without 'OpenPGP key', just set 'OpenPGP key' to ''."
+msgstr "Отправить новое сообщение контакту в ростере. Как ключ OpenPGP, так и учетная запись опциональны. Если вы хотите настроить лишь 'учетную запись', без 'ключа OpenPGP', просто установите 'ключ OpenPGP' в ''."
 
-#: ../src/gajim-remote.py:144 ../src/gajim-remote.py:157
+#: ../src/gajim-remote.py:143
+#: ../src/gajim-remote.py:156
 msgid "JID of the contact that will receive the message"
 msgstr "JID контакта, который получит сообщение"
 
-#: ../src/gajim-remote.py:145 ../src/gajim-remote.py:159
-#: ../src/gajim-remote.py:170
+#: ../src/gajim-remote.py:144
+#: ../src/gajim-remote.py:158
+#: ../src/gajim-remote.py:169
 msgid "message contents"
 msgstr "содержимое сообщения"
 
-#: ../src/gajim-remote.py:146 ../src/gajim-remote.py:160
+#: ../src/gajim-remote.py:145
+#: ../src/gajim-remote.py:159
 msgid "pgp key"
 msgstr "PGP ключ"
 
-#: ../src/gajim-remote.py:146 ../src/gajim-remote.py:160
+#: ../src/gajim-remote.py:145
+#: ../src/gajim-remote.py:159
 msgid "if specified, the message will be encrypted using this public key"
-msgstr ""
-"если указано, сообщение будет зашифровано с использованием открытого ключа"
+msgstr "если указано, сообщение будет зашифровано с использованием открытого ключа"
 
-#: ../src/gajim-remote.py:148 ../src/gajim-remote.py:162
-#: ../src/gajim-remote.py:171
+#: ../src/gajim-remote.py:147
+#: ../src/gajim-remote.py:161
+#: ../src/gajim-remote.py:170
 msgid "if specified, the message will be sent using this account"
-msgstr ""
-"если указано, сообщение будет отправлено с использованием этой учетной записи"
+msgstr "если указано, сообщение будет отправлено с использованием этой учетной записи"
 
-#: ../src/gajim-remote.py:153
-msgid ""
-"Sends new single message to a contact in the roster. Both OpenPGP key and "
-"account are optional. If you want to set only 'account', without 'OpenPGP "
-"key', just set 'OpenPGP key' to ''."
-msgstr ""
-"Отправить новое сообщение контакту в ростере. Как ключ OpenPGP, так и "
-"учетная запись опциональны. Если вы хотите настроить лишь 'учетную запись', "
-"без 'ключа OpenPGP', просто установите 'ключ OpenPGP' в ''."
+#: ../src/gajim-remote.py:152
+msgid "Sends new single message to a contact in the roster. Both OpenPGP key and account are optional. If you want to set only 'account', without 'OpenPGP key', just set 'OpenPGP key' to ''."
+msgstr "Отправить новое сообщение контакту в ростере. Как ключ OpenPGP, так и учетная запись опциональны. Если вы хотите настроить лишь 'учетную запись', без 'ключа OpenPGP', просто установите 'ключ OpenPGP' в ''."
 
-#: ../src/gajim-remote.py:158
+#: ../src/gajim-remote.py:157
 msgid "subject"
 msgstr "тема"
 
-#: ../src/gajim-remote.py:158
+#: ../src/gajim-remote.py:157
 msgid "message subject"
 msgstr "тема сообщения"
 
-#: ../src/gajim-remote.py:167
+#: ../src/gajim-remote.py:166
 msgid "Sends new message to a groupchat you've joined."
 msgstr "Отправляет новые сообщения в комнату, к которой вы присоединились."
 
-#: ../src/gajim-remote.py:169
+#: ../src/gajim-remote.py:168
 msgid "JID of the room that will receive the message"
 msgstr "JID контакта, который получит сообщение"
 
-#: ../src/gajim-remote.py:176
+#: ../src/gajim-remote.py:175
 msgid "Gets detailed info on a contact"
 msgstr "Получает детальную информацию о контакте"
 
-#: ../src/gajim-remote.py:178 ../src/gajim-remote.py:191
-#: ../src/gajim-remote.py:221 ../src/gajim-remote.py:230
+#: ../src/gajim-remote.py:177
+#: ../src/gajim-remote.py:190
+#: ../src/gajim-remote.py:220
+#: ../src/gajim-remote.py:229
 msgid "JID of the contact"
 msgstr "JID контакта"
 
-#: ../src/gajim-remote.py:182
+#: ../src/gajim-remote.py:181
 msgid "Gets detailed info on a account"
 msgstr "Получает детальную информацию о учетной записи"
 
-#: ../src/gajim-remote.py:184
+#: ../src/gajim-remote.py:183
 msgid "Name of the account"
 msgstr "Имя учетной записи"
 
-#: ../src/gajim-remote.py:188
+#: ../src/gajim-remote.py:187
 msgid "Sends file to a contact"
 msgstr "Отправляет контакту файл"
 
-#: ../src/gajim-remote.py:190
+#: ../src/gajim-remote.py:189
 msgid "file"
 msgstr "файл"
 
-#: ../src/gajim-remote.py:190
+#: ../src/gajim-remote.py:189
 msgid "File path"
 msgstr "Путь до файла"
 
-#: ../src/gajim-remote.py:192
+#: ../src/gajim-remote.py:191
 msgid "if specified, file will be sent using this account"
-msgstr ""
-"если указано, файл будет отправлен с использованием этой учетной записи"
+msgstr "если указано, файл будет отправлен с использованием этой учетной записи"
 
-#: ../src/gajim-remote.py:197
+#: ../src/gajim-remote.py:196
 msgid "Lists all preferences and their values"
 msgstr "Показывает все параметры с их значениями"
 
-#: ../src/gajim-remote.py:201
+#: ../src/gajim-remote.py:200
 msgid "Sets value of 'key' to 'value'."
 msgstr "Присваивает 'ключу' в 'значение'"
 
-#: ../src/gajim-remote.py:203
+#: ../src/gajim-remote.py:202
 msgid "key=value"
 msgstr "ключ=значение"
 
-#: ../src/gajim-remote.py:203
+#: ../src/gajim-remote.py:202
 msgid "'key' is the name of the preference, 'value' is the value to set it to"
-msgstr ""
-"'ключ' это название параметра, а 'значение' это то, что ему присваивают"
+msgstr "'ключ' это название параметра, а 'значение' это то, что ему присваивают"
 
-#: ../src/gajim-remote.py:208
+#: ../src/gajim-remote.py:207
 msgid "Deletes a preference item"
 msgstr "Удаляет параметр"
 
-#: ../src/gajim-remote.py:210
+#: ../src/gajim-remote.py:209
 msgid "key"
 msgstr "ключ"
 
-#: ../src/gajim-remote.py:210
+#: ../src/gajim-remote.py:209
 msgid "name of the preference to be deleted"
 msgstr "имя параметра, который нужно удалить"
 
-#: ../src/gajim-remote.py:214
+#: ../src/gajim-remote.py:213
 msgid "Writes the current state of Gajim preferences to the .config file"
 msgstr "Сохраняет текущее состояние настроек Gajim в файл .config"
 
-#: ../src/gajim-remote.py:219
+#: ../src/gajim-remote.py:218
 msgid "Removes contact from roster"
 msgstr "Удаляет контакт из ростера"
 
-#: ../src/gajim-remote.py:228
+#: ../src/gajim-remote.py:227
 msgid "Adds contact to roster"
 msgstr "Добавляет контакт в ростер"
 
-#: ../src/gajim-remote.py:231
+#: ../src/gajim-remote.py:230
 msgid "Adds new contact to this account"
 msgstr "Добавляет новый контакт для данной учетной записи"
 
-#: ../src/gajim-remote.py:236
+#: ../src/gajim-remote.py:235
 msgid "Returns current status (the global one unless account is specified)"
-msgstr ""
-"Возвращает текущий статус (по умолчанию глобальный, если не указана учетная "
-"запись)"
+msgstr "Возвращает текущий статус (по умолчанию глобальный, если не указана учетная запись)"
 
-#: ../src/gajim-remote.py:243
-msgid ""
-"Returns current status message (the global one unless account is specified)"
-msgstr ""
-"Возвращает текущее сообщение о статусе (по умолчанию глобальное, если не "
-"указана учетная запись)"
+#: ../src/gajim-remote.py:242
+msgid "Returns current status message (the global one unless account is specified)"
+msgstr "Возвращает текущее сообщение о статусе (по умолчанию глобальное, если не указана учетная запись)"
 
-#: ../src/gajim-remote.py:250
+#: ../src/gajim-remote.py:249
 msgid "Returns number of unread messages"
 msgstr "Возвращает количество непрочитанных сообщений"
 
-#: ../src/gajim-remote.py:254
+#: ../src/gajim-remote.py:253
 msgid "Opens 'Start Chat' dialog"
 msgstr "Открыть диалог «Начать беседу»"
 
-#: ../src/gajim-remote.py:256
+#: ../src/gajim-remote.py:255
 msgid "Starts chat, using this account"
 msgstr "Начать беседу с этой учетной записи"
 
-#: ../src/gajim-remote.py:260
+#: ../src/gajim-remote.py:259
 msgid "Sends custom XML"
 msgstr "Отправляет произвольный XML"
 
-#: ../src/gajim-remote.py:262
+#: ../src/gajim-remote.py:261
 msgid "XML to send"
 msgstr "Отправляемый XML"
 
-#: ../src/gajim-remote.py:263
-msgid ""
-"Account in which the xml will be sent; if not specified, xml will be sent to "
-"all accounts"
-msgstr ""
-"Учётная запись, которой будет отправлен XML. Если не указано, xml будет "
-"послан всем контактам."
+#: ../src/gajim-remote.py:262
+msgid "Account in which the xml will be sent; if not specified, xml will be sent to all accounts"
+msgstr "Учётная запись, которой будет отправлен XML. Если не указано, xml будет послан всем контактам."
 
-#: ../src/gajim-remote.py:269
+#: ../src/gajim-remote.py:268
 msgid "Change the avatar"
 msgstr "Изменить аватар"
 
-#: ../src/gajim-remote.py:271
+#: ../src/gajim-remote.py:270
 msgid "Picture to use"
 msgstr "Использовать картинку"
 
-#: ../src/gajim-remote.py:272
-msgid ""
-"Account in which the avatar will be set; if not specified, the avatar will "
-"be set for all accounts"
-msgstr ""
-"Учётная запись, для которой будет назначен аватар. Если не указано, аватар "
-"будет назначен всем учетным записям."
+#: ../src/gajim-remote.py:271
+msgid "Account in which the avatar will be set; if not specified, the avatar will be set for all accounts"
+msgstr "Учётная запись, для которой будет назначен аватар. Если не указано, аватар будет назначен всем учетным записям."
 
-#: ../src/gajim-remote.py:278
+#: ../src/gajim-remote.py:277
 msgid "Handle a xmpp:/ uri"
 msgstr "Обработать ссылку формата «xmpp:/»"
 
-#: ../src/gajim-remote.py:280
-#, fuzzy
-msgid "?CLI:uri"
-msgstr "Неверный хост"
-
-#: ../src/gajim-remote.py:280
+#: ../src/gajim-remote.py:279
 msgid "URI to handle"
 msgstr "URI для обработки"
 
-#: ../src/gajim-remote.py:281
+#: ../src/gajim-remote.py:280
 msgid "Account in which you want to handle it"
 msgstr "Учетная запись, в которой вы хотите его использовать"
 
-#: ../src/gajim-remote.py:283
+#: ../src/gajim-remote.py:282
 msgid "Message content"
 msgstr "Cодержимое сообщения"
 
-#: ../src/gajim-remote.py:287
+#: ../src/gajim-remote.py:286
 msgid "Join a MUC room"
 msgstr "Присоединиться к комнате MUC"
 
-#: ../src/gajim-remote.py:289
-msgid "?CLI:room"
-msgstr "?CLI:комната"
-
-#: ../src/gajim-remote.py:289
+#: ../src/gajim-remote.py:288
 msgid "Room JID"
 msgstr "JID комнаты"
 
-#: ../src/gajim-remote.py:290
-msgid "?CLI:nick"
-msgstr "?CLI:ник"
+#: ../src/gajim-remote.py:289
+msgid "nick"
+msgstr "Ник"
 
-#: ../src/gajim-remote.py:290
+#: ../src/gajim-remote.py:289
 msgid "Nickname to use"
 msgstr "Используемый ник"
 
-#: ../src/gajim-remote.py:291
-msgid "?CLI:password"
-msgstr "?CLI:пароль"
+#: ../src/gajim-remote.py:290
+msgid "password"
+msgstr "Пароль:"
 
-#: ../src/gajim-remote.py:291
+#: ../src/gajim-remote.py:290
 msgid "Password to enter the room"
 msgstr "Пароль для входа в комнату"
 
-#: ../src/gajim-remote.py:292
+#: ../src/gajim-remote.py:291
 msgid "Account from which you want to enter the room"
 msgstr "Выберите учетную запись, с которой вы хотите войти в комнату"
 
-#: ../src/gajim-remote.py:297
+#: ../src/gajim-remote.py:296
 msgid "Check if Gajim is running"
 msgstr "Проверить, запущен ли Gajim"
 
-#: ../src/gajim-remote.py:301
+#: ../src/gajim-remote.py:300
 msgid "Shows or hides the ipython window"
 msgstr "Скрывает или показывает окно ipython"
 
-#: ../src/gajim-remote.py:328
+#: ../src/gajim-remote.py:327
 msgid "Missing argument \"contact_jid\""
 msgstr "Пропущен аргумент «JID контакта»"
 
-#: ../src/gajim-remote.py:350
+#: ../src/gajim-remote.py:349
 #, python-format
 msgid ""
 "'%s' is not in your roster.\n"
@@ -9336,15 +8876,15 @@ msgstr ""
 "'%s' не в вашем ростере.\n"
 "Укажите учетную запись для отправки сообщения."
 
-#: ../src/gajim-remote.py:353
+#: ../src/gajim-remote.py:352
 msgid "You have no active account"
 msgstr "У вас нет ни одной активной учетной записи"
 
-#: ../src/gajim-remote.py:406
+#: ../src/gajim-remote.py:405
 msgid "It seems Gajim is not running. So you can't use gajim-remote."
 msgstr "По-видимому, Gajim не запущен. Вы не можете использовать gajim-remote."
 
-#: ../src/gajim-remote.py:433
+#: ../src/gajim-remote.py:432
 #, python-format
 msgid ""
 "Usage: %(basename)s %(command)s %(arguments)s \n"
@@ -9353,29 +8893,25 @@ msgstr ""
 "Использование: %(basename)s %(command)s %(arguments)s \n"
 "\t %(help)s"
 
-#: ../src/gajim-remote.py:437
+#: ../src/gajim-remote.py:436
 msgid "Arguments:"
 msgstr "Аргументы:"
 
-#: ../src/gajim-remote.py:441
+#: ../src/gajim-remote.py:440
 #, python-format
 msgid "%s not found"
 msgstr "%s не найден"
 
-#: ../src/gajim-remote.py:447
+#: ../src/gajim-remote.py:446
 #, python-format
 msgid ""
-"Usage:\n"
-"  %s command [arguments]\n"
-"\n"
+"Usage: %s command [arguments]\n"
 "Command is one of:\n"
 msgstr ""
-"Использование:\n"
-"  %s команда [аргумента]\n"
-"\n"
+"Использование: %s команда [аргумента]\n"
 "Команда одна из:\n"
 
-#: ../src/gajim-remote.py:517
+#: ../src/gajim-remote.py:515
 #, python-format
 msgid ""
 "Too many arguments. \n"
@@ -9384,7 +8920,7 @@ msgstr ""
 "Много аргументов. \n"
 "Наберите «%(basename)s help %(command)s» для справки"
 
-#: ../src/gajim-remote.py:522
+#: ../src/gajim-remote.py:520
 #, python-format
 msgid ""
 "Argument \"%(arg)s\" is not specified. \n"
@@ -9393,11 +8929,11 @@ msgstr ""
 "Аргумент «%(arg)s» не задан. \n"
 "Наберите «%(basename)s help %(command)s» для справки"
 
-#: ../src/gajim-remote.py:541
+#: ../src/gajim-remote.py:539
 msgid "No uri given"
 msgstr "Не указан идентификатор ресурса"
 
-#: ../src/gajim-remote.py:543
+#: ../src/gajim-remote.py:541
 msgid "Wrong uri"
 msgstr "Неверный хост"
 
@@ -9423,213 +8959,217 @@ msgid "You cannot delete your current theme"
 msgstr "Вы не можете удалить вашу текущую тему"
 
 #: ../src/gajim_themes_window.py:187
-msgid "Please first choose another theme as your current theme."
+msgid "Please first choose another for your current theme."
 msgstr "Выберите сначала другую тему."
 
-#: ../src/groupchat_control.py:181 ../src/groupchat_control.py:1645
+#: ../src/groupchat_control.py:179
+#: ../src/groupchat_control.py:1569
 #, python-format
 msgid "%(nick)s is now known as %(new_nick)s"
 msgstr "%(nick)s теперь известен как %(new_nick)s"
 
-#: ../src/groupchat_control.py:236
+#: ../src/groupchat_control.py:234
 msgid "Sending private message failed"
 msgstr "Не удалось отправить личное сообщение"
 
 #. in second %s code replaces with nickname
-#: ../src/groupchat_control.py:238
+#: ../src/groupchat_control.py:236
 #, python-format
 msgid "You are no longer in group chat \"%(room)s\" or \"%(nick)s\" has left."
 msgstr "Вы больше не находитесь в комнате «%(room)s» или «%(nick)s» вышел."
 
-#: ../src/groupchat_control.py:584
+#: ../src/groupchat_control.py:565
 msgid "Insert Nickname"
 msgstr "Вставить ник"
 
-#: ../src/groupchat_control.py:767
+#: ../src/groupchat_control.py:748
 msgid "Conversation with "
 msgstr "Беседа с "
 
-#: ../src/groupchat_control.py:769
+#: ../src/groupchat_control.py:750
 msgid "Continued conversation"
 msgstr "Возобновлённая беседа"
 
-#: ../src/groupchat_control.py:1268
+#: ../src/groupchat_control.py:1227
 #, python-format
 msgid "%(nick)s has set the subject to %(subject)s"
 msgstr "%(nick)s установил(а) тему: %(subject)s"
 
 #. Can be a presence (see chg_contact_status in groupchat_control.py)
-#: ../src/groupchat_control.py:1286 ../src/groupchat_control.py:1587
+#: ../src/groupchat_control.py:1245
+#: ../src/groupchat_control.py:1511
 msgid "Any occupant is allowed to see your full JID"
 msgstr "Любой участник может увидеть ваш настоящий JID"
 
-#: ../src/groupchat_control.py:1289
-msgid "Room now shows unavailable members"
-msgstr "Теперь в комнате отображаются недоступные участники"
+#: ../src/groupchat_control.py:1248
+msgid "Room now shows unavailable member"
+msgstr "Теперь в комнате отображается недоступный участник"
 
-#: ../src/groupchat_control.py:1291
-msgid "Room now does not show unavailable members"
+#: ../src/groupchat_control.py:1250
+msgid "room now does not show unavailable members"
 msgstr "теперь в комнате не отображаются недоступные участники"
 
-#: ../src/groupchat_control.py:1293
+#: ../src/groupchat_control.py:1252
 msgid "A non-privacy-related room configuration change has occurred"
-msgstr ""
-"Произошло изменение настроек комнаты, не относящееся к настройкам приватности"
+msgstr "Произошло изменение настроек комнаты, не относящееся к настройкам приватности"
 
 #. Can be a presence (see chg_contact_status in groupchat_control.py)
-#: ../src/groupchat_control.py:1297
+#: ../src/groupchat_control.py:1256
 msgid "Room logging is now enabled"
 msgstr "Запись логов конференции включена"
 
-#: ../src/groupchat_control.py:1299
+#: ../src/groupchat_control.py:1258
 msgid "Room logging is now disabled"
 msgstr "Запись логов конференции выключена"
 
-#: ../src/groupchat_control.py:1301
+#: ../src/groupchat_control.py:1260
 msgid "Room is now non-anonymous"
 msgstr "Конференция не анонимна"
 
-#: ../src/groupchat_control.py:1304
+#: ../src/groupchat_control.py:1263
 msgid "Room is now semi-anonymous"
 msgstr "Конференция частично анонимна"
 
-#: ../src/groupchat_control.py:1307
+#: ../src/groupchat_control.py:1266
 msgid "Room is now fully-anonymous"
 msgstr "Конференция полностью анонимна"
 
-#: ../src/groupchat_control.py:1580 ../src/groupchat_control.py:2241
-#: ../src/gui_interface.py:605 ../src/roster_window.py:3325
-#, python-format
-msgid "%(jid)s has been invited in this room"
-msgstr "%(jid)s был приглашен в комнату"
-
 #. Can be a message (see handle_event_gc_config_change in
 #. gajim.py)
-#: ../src/groupchat_control.py:1592
+#: ../src/groupchat_control.py:1516
 msgid "Room logging is enabled"
 msgstr "Запись логов конференции включена"
 
-#: ../src/groupchat_control.py:1594
+#: ../src/groupchat_control.py:1518
 msgid "A new room has been created"
 msgstr "Новая комната была создана"
 
-#: ../src/groupchat_control.py:1597
+#: ../src/groupchat_control.py:1521
 msgid "The server has assigned or modified your roomnick"
 msgstr "Сервер присвоил или изменил ваш ник в комнате"
 
 #. do not print 'kicked by None'
-#: ../src/groupchat_control.py:1603
+#: ../src/groupchat_control.py:1527
 #, python-format
 msgid "%(nick)s has been kicked: %(reason)s"
 msgstr "%(nick)s выгнали из комнаты: %(reason)s"
 
-#: ../src/groupchat_control.py:1606
+#: ../src/groupchat_control.py:1530
 #, python-format
 msgid "%(nick)s has been kicked by %(who)s: %(reason)s"
 msgstr "%(who)s выгнал %(nick)s из комнаты: %(reason)s"
 
 #. do not print 'banned by None'
-#: ../src/groupchat_control.py:1615
+#: ../src/groupchat_control.py:1539
 #, python-format
 msgid "%(nick)s has been banned: %(reason)s"
 msgstr "%(nick)s запретили заходить в комнату: %(reason)s"
 
-#: ../src/groupchat_control.py:1618
+#: ../src/groupchat_control.py:1542
 #, python-format
 msgid "%(nick)s has been banned by %(who)s: %(reason)s"
 msgstr "%(who)s запретил(а) %(nick)s заходить в комнату: %(reason)s"
 
-#: ../src/groupchat_control.py:1629 ../src/groupchat_control.py:1745
+#: ../src/groupchat_control.py:1553
+#: ../src/groupchat_control.py:1657
 #, python-format
 msgid "You are now known as %s"
 msgstr "Вы теперь известны как %s"
 
-#: ../src/groupchat_control.py:1699 ../src/groupchat_control.py:1704
-#: ../src/groupchat_control.py:1710
+#: ../src/groupchat_control.py:1611
+#: ../src/groupchat_control.py:1616
+#: ../src/groupchat_control.py:1622
 #, python-format
 msgid "%(nick)s has been removed from the room (%(reason)s)"
 msgstr "%(nick)s выгнали из комнаты (%(reason)s)"
 
-#: ../src/groupchat_control.py:1701
+#: ../src/groupchat_control.py:1613
 msgid "affiliation changed"
 msgstr "ранг изменен"
 
-#: ../src/groupchat_control.py:1706
+#: ../src/groupchat_control.py:1618
 msgid "room configuration changed to members-only"
 msgstr "настройки комнаты были изменены на 'только для участников'"
 
-#: ../src/groupchat_control.py:1712
+#: ../src/groupchat_control.py:1624
 msgid "system shutdown"
 msgstr "выключение сервера"
 
-#: ../src/groupchat_control.py:1795
+#: ../src/groupchat_control.py:1707
 #, python-format
 msgid "** Affiliation of %(nick)s has been set to %(affiliation)s by %(actor)s"
 msgstr "** %(actor)s присвоил %(nick)s ранг %(affiliation)s"
 
-#: ../src/groupchat_control.py:1799
+#: ../src/groupchat_control.py:1711
 #, python-format
 msgid "** Affiliation of %(nick)s has been set to %(affiliation)s"
 msgstr "** Ранг %(nick)s был изменен на %(affiliation)s"
 
-#: ../src/groupchat_control.py:1814
+#: ../src/groupchat_control.py:1726
 #, python-format
 msgid "** Role of %(nick)s has been set to %(role)s by %(actor)s"
 msgstr "** %(actor)s присвоил %(nick)s обязанности %(role)s"
 
-#: ../src/groupchat_control.py:1818
+#: ../src/groupchat_control.py:1730
 #, python-format
 msgid "** Role of %(nick)s has been set to %(role)s"
 msgstr "** Обязанности %(nick)s были изменены на %(role)s"
 
-#: ../src/groupchat_control.py:1848
+#: ../src/groupchat_control.py:1760
 #, python-format
 msgid "%s has left"
 msgstr "%s ушел"
 
-#: ../src/groupchat_control.py:1853
+#: ../src/groupchat_control.py:1765
 #, python-format
 msgid "%s has joined the group chat"
 msgstr "%s зашёл в комнату"
 
-#: ../src/groupchat_control.py:2124
+#: ../src/groupchat_control.py:2020
 #, python-format
 msgid "Are you sure you want to leave group chat \"%s\"?"
 msgstr "Вы точно хотите выйти из комнаты «%s»?"
 
-#: ../src/groupchat_control.py:2126
-msgid ""
-"If you close this window, you will be disconnected from this group chat."
+#: ../src/groupchat_control.py:2022
+msgid "If you close this window, you will be disconnected from this group chat."
 msgstr "Если вы закроете это окно, то вы выйдете из этой комнаты."
 
-#: ../src/groupchat_control.py:2165
+#: ../src/groupchat_control.py:2026
+#: ../src/gui_interface.py:704
+#: ../src/gui_interface.py:1411
+#: ../src/gui_interface.py:1451
+#: ../src/gui_interface.py:1492
+#: ../src/message_window.py:222
+#: ../src/roster_window.py:3064
+#: ../src/roster_window.py:3799
+#: ../src/roster_window.py:4612
+msgid "_Do not ask me again"
+msgstr "Не _спрашивать меня снова"
+
+#: ../src/groupchat_control.py:2060
 msgid "Changing Subject"
 msgstr "Смена темы"
 
-#: ../src/groupchat_control.py:2166
+#: ../src/groupchat_control.py:2061
 msgid "Please specify the new subject:"
 msgstr "Введите новую тему:"
 
-#: ../src/groupchat_control.py:2173
+#: ../src/groupchat_control.py:2068
 msgid "Changing Nickname"
 msgstr "Смена ника"
 
-#: ../src/groupchat_control.py:2174
+#: ../src/groupchat_control.py:2069
 msgid "Please specify the new nickname you want to use:"
 msgstr "Введите новый ник, который вы хотите использовать:"
 
-#: ../src/groupchat_control.py:2199
-msgid "The group chat Jabber ID has not allowed characters."
-msgstr "В Jabber ID комнаты или сервера содержатся недопустимые символы."
-
 # смотря где вылазит меседж - нужно присмотреться
 #. Ask for a reason
-#: ../src/groupchat_control.py:2205
+#: ../src/groupchat_control.py:2100
 #, python-format
 msgid "Destroying %s"
 msgstr "Удаление %s"
 
-#: ../src/groupchat_control.py:2206
+#: ../src/groupchat_control.py:2101
 msgid ""
 "You are going to definitively destroy this room.\n"
 "You may specify a reason below:"
@@ -9637,22 +9177,30 @@ msgstr ""
 "Вы собираетесь полностью уничтожить эту комнату.\n"
 "Можете указать причину:"
 
-#: ../src/groupchat_control.py:2208
+#: ../src/groupchat_control.py:2103
 msgid "You may also enter an alternate venue:"
 msgstr "Можете указать альтернативную комнату:"
 
+#: ../src/groupchat_control.py:2135
+#: ../src/gui_interface.py:604
+#: ../src/roster_window.py:3390
+#, python-format
+msgid "%(jid)s has been invited in this room"
+msgstr "%(jid)s был приглашен в комнату"
+
 #. ask for reason
-#: ../src/groupchat_control.py:2408
+#: ../src/groupchat_control.py:2300
 #, python-format
 msgid "Kicking %s"
 msgstr "Выгоняем %s"
 
-#: ../src/groupchat_control.py:2409 ../src/groupchat_control.py:2742
+#: ../src/groupchat_control.py:2301
+#: ../src/groupchat_control.py:2633
 msgid "You may specify a reason below:"
 msgstr "Вы можете указать причину ниже:"
 
 #. ask for reason
-#: ../src/groupchat_control.py:2741
+#: ../src/groupchat_control.py:2632
 #, python-format
 msgid "Banning %s"
 msgstr "Забанить %s"
@@ -9662,12 +9210,8 @@ msgid "A programming error has been detected"
 msgstr "Обнаружена ошибка в программе"
 
 #: ../src/gtkexcepthook.py:47
-msgid ""
-"It probably is not fatal, but should be reported to the developers "
-"nonetheless."
-msgstr ""
-"Возможно это не так страшно, но все равно стоит сообщить об этом "
-"разработчикам."
+msgid "It probably is not fatal, but should be reported to the developers nonetheless."
+msgstr "Возможно это не так страшно, но все равно стоит сообщить об этом разработчикам."
 
 #: ../src/gtkexcepthook.py:54
 msgid "_Report Bug"
@@ -9703,8 +9247,7 @@ msgstr "Вы хотите сделать Gajim основным jabber-клие
 
 #: ../src/gtkgui_helpers.py:768
 msgid "Always check to see if Gajim is the default Jabber client on startup"
-msgstr ""
-"Всегда проверять при запуске является ли Gajim основным jabber-клиентом"
+msgstr "Всегда проверять при запуске является ли Gajim основным jabber-клиентом"
 
 #: ../src/gtkgui_helpers.py:835
 msgid "Extension not supported"
@@ -9713,9 +9256,7 @@ msgstr "Расширение не поддерживается"
 #: ../src/gtkgui_helpers.py:836
 #, python-format
 msgid "Image cannot be saved in %(type)s format. Save as %(new_filename)s?"
-msgstr ""
-"Изображение нельзя сохранить в формате %(type)s. Сохранить как "
-"%(new_filename)s?"
+msgstr "Изображение нельзя сохранить в формате %(type)s. Сохранить как %(new_filename)s?"
 
 #: ../src/gtkgui_helpers.py:872
 msgid "Save Image as..."
@@ -9723,105 +9264,108 @@ msgstr "Сохранить изображение как..."
 
 #. we are banned
 #. group chat does not exist
-#: ../src/gui_interface.py:134 ../src/gui_interface.py:298
-#: ../src/gui_interface.py:307 ../src/gui_interface.py:313
-#: ../src/gui_interface.py:316 ../src/gui_interface.py:319
-#: ../src/gui_interface.py:324
+#: ../src/gui_interface.py:133
+#: ../src/gui_interface.py:297
+#: ../src/gui_interface.py:306
+#: ../src/gui_interface.py:312
+#: ../src/gui_interface.py:315
+#: ../src/gui_interface.py:318
+#: ../src/gui_interface.py:323
 msgid "Unable to join group chat"
 msgstr "Не получается войти в комнату"
 
-#: ../src/gui_interface.py:135
+#: ../src/gui_interface.py:134
 #, python-format
 msgid ""
-"Your desired nickname in group chat %s is in use or registered by another "
-"occupant.\n"
+"Your desired nickname in group chat %s is in use or registered by another occupant.\n"
 "Please specify another nickname below:"
 msgstr ""
-"Тот ник, что вы ввели в комнате %s уже используется или зарегистрирован "
-"другим пользователем.\n"
+"Тот ник, что вы ввели в комнате %s уже используется или зарегистрирован другим пользователем.\n"
 "Укажите другой ник:"
 
-#: ../src/gui_interface.py:138
+#: ../src/gui_interface.py:137
 msgid "Always use this nickname when there is a conflict"
 msgstr "Всегда использовать этот ник в случае конфликта"
 
-#: ../src/gui_interface.py:155
+#: ../src/gui_interface.py:154
 msgid "Do you accept this request?"
 msgstr "Вы принимаете этот запрос?"
 
-#: ../src/gui_interface.py:157
+#: ../src/gui_interface.py:156
 #, python-format
 msgid "Do you accept this request on account %s?"
 msgstr "Вы принимаете запрос %s?"
 
-#: ../src/gui_interface.py:160
+#: ../src/gui_interface.py:159
 #, python-format
 msgid "HTTP (%(method)s) Authorization for %(url)s (id: %(id)s)"
 msgstr "HTTP (%(method)s) Авторизация для %(url)s (id: %(id)s)"
 
-#: ../src/gui_interface.py:203 ../src/notify.py:282
+#: ../src/gui_interface.py:202
+#: ../src/notify.py:282
 msgid "Connection Failed"
 msgstr "Соединение разорвалось"
 
-#: ../src/gui_interface.py:287
+#: ../src/gui_interface.py:286
 #, python-format
 msgid "A Password is required to join the room %s. Please type it."
 msgstr "Чтобы войти в комнату %s, нужен пароль."
 
-#: ../src/gui_interface.py:299
+#: ../src/gui_interface.py:298
 #, python-format
 msgid "Maximum number of users for <b>%s</b> has been reached"
 msgstr "Было достигнуто максимальное количество пользователей <b>%s</b>"
 
-#: ../src/gui_interface.py:308
+#: ../src/gui_interface.py:307
 #, python-format
 msgid "You are banned from group chat <b>%s</b>."
 msgstr "Вам запрещено входить в комнату <b>%s</b>."
 
-#: ../src/gui_interface.py:314
+#: ../src/gui_interface.py:313
 #, python-format
 msgid "Group chat <b>%s</b> does not exist."
 msgstr "Комнаты <b>%s</b> не существует."
 
-#: ../src/gui_interface.py:317
+#: ../src/gui_interface.py:316
 msgid "Group chat creation is restricted."
 msgstr "Создание комнат запрещено."
 
-#: ../src/gui_interface.py:320
+#: ../src/gui_interface.py:319
 #, python-format
 msgid "Your registered nickname must be used in group chat <b>%s</b>."
-msgstr ""
-"Необходимо использовать ваш зарегистрированный ник в комнате <b>%s</b>."
+msgstr "Необходимо использовать ваш зарегистрированный ник в комнате <b>%s</b>."
 
-#: ../src/gui_interface.py:325
+#: ../src/gui_interface.py:324
 #, python-format
 msgid "You are not in the members list in groupchat %s."
 msgstr "Вас нет в списке членов комнаты %s."
 
-#: ../src/gui_interface.py:418 ../src/gui_interface.py:422
+#: ../src/gui_interface.py:417
+#: ../src/gui_interface.py:421
 #, python-format
 msgid "Error %(code)s: %(msg)s"
 msgstr "Ошибка %(code)s: %(msg)s"
 
-#: ../src/gui_interface.py:474 ../src/notify.py:284
+#: ../src/gui_interface.py:473
+#: ../src/notify.py:284
 msgid "Subscription request"
 msgstr "Запрос подписки"
 
-#: ../src/gui_interface.py:499
+#: ../src/gui_interface.py:498
 msgid "Authorization accepted"
 msgstr "Авторизация принята"
 
-#: ../src/gui_interface.py:500
+#: ../src/gui_interface.py:499
 #, python-format
 msgid "The contact \"%s\" has authorized you to see his or her status."
 msgstr "Контакт «%s» авторизовал вас, теперь вы можете видеть его статус."
 
-#: ../src/gui_interface.py:508
+#: ../src/gui_interface.py:507
 #, python-format
 msgid "Contact \"%s\" removed subscription from you"
 msgstr "Контакт «%s» отозвал подписку с вами"
 
-#: ../src/gui_interface.py:509
+#: ../src/gui_interface.py:508
 msgid ""
 "You will always see him or her as offline.\n"
 "Do you want to remove him or her from your contact list?"
@@ -9829,92 +9373,79 @@ msgstr ""
 "Вы всегда будете видеть его или её как отключенными.\n"
 "Удалить его или её из контакт-листа?"
 
-#: ../src/gui_interface.py:530 ../src/notify.py:286
+#: ../src/gui_interface.py:529
+#: ../src/notify.py:286
 msgid "Unsubscribed"
 msgstr "От подписки отказался"
 
-#: ../src/gui_interface.py:541
+#: ../src/gui_interface.py:540
 #, python-format
 msgid "Contact with \"%s\" cannot be established"
 msgstr "Связь с «%s» не может быть установлена"
 
-#: ../src/gui_interface.py:625
+#: ../src/gui_interface.py:624
 #, python-format
 msgid "%(jid)s declined the invitation: %(reason)s"
 msgstr ""
 
-#: ../src/gui_interface.py:629
-#, fuzzy, python-format
+#: ../src/gui_interface.py:628
+#, python-format
 msgid "%(jid)s declined the invitation"
-msgstr "Принять приглашение в чат?"
-
-#: ../src/gui_interface.py:658
-msgid ""
-"You configured Gajim to use OpenPGP agent, but there is no OpenPGP agent "
-"running or it returned a wrong passphrase.\n"
 msgstr ""
-"Gajim настроен на использование OpenPGP агента, но OpenPGP агент не запущен "
-"или он возвратил неверный пароль.\n"
 
-#: ../src/gui_interface.py:661 ../src/gui_interface.py:669
+#: ../src/gui_interface.py:657
+msgid "You configured Gajim to use GPG agent, but there is no GPG agent running or it returned a wrong passphrase.\n"
+msgstr "Gajim настроен на использование GPG агента, но GPG агент не запущен или он возвратил неверный пароль.\n"
+
+#: ../src/gui_interface.py:659
+#: ../src/gui_interface.py:667
 msgid "You are currently connected without your OpenPGP key."
 msgstr "Вы сейчас соединены без ключа OpenPGP."
 
-#: ../src/gui_interface.py:663
+#: ../src/gui_interface.py:661
 msgid "Your passphrase is incorrect"
 msgstr "Ваша парольная фраза неверна"
 
-#: ../src/gui_interface.py:668
-msgid "OpenPGP Passphrase Incorrect"
-msgstr "Парольная фраза OpenPGP неверна"
+#: ../src/gui_interface.py:666
+msgid "OpenGPG Passphrase Incorrect"
+msgstr "Парольная фраза OpenGPG неверна"
 
-#: ../src/gui_interface.py:681
+#: ../src/gui_interface.py:679
 #, fuzzy
 msgid "Certificate Passphrase Required"
-msgstr "Сервер требует сертификат TLS"
+msgstr "Сертификат просрочен"
 
-#: ../src/gui_interface.py:682
-#, python-format
+#: ../src/gui_interface.py:680
+#, fuzzy, python-format
 msgid "Enter the passphrase for the certificate for account %s"
-msgstr "Введите пароль для сертификата учетной записи %s"
+msgstr "Введите пароль для ключа %(keyid)s (аккаунт %(account)s)."
 
-#: ../src/gui_interface.py:704
-msgid "OpenPGP key not trusted"
-msgstr "Ключ OpenPGP не является доверенным"
+#: ../src/gui_interface.py:702
+msgid "GPG key not trusted"
+msgstr "Ключ GPG не является доверенным"
 
-#: ../src/gui_interface.py:704
-msgid ""
-"The OpenPGP key used to encrypt this chat is not trusted. Do you really want "
-"to encrypt this message?"
-msgstr ""
-"Ключ OpenPGP используемый для шифрования не является доверенным. Вы "
-"действительно хотите зашифровать эти сообщения?"
+#: ../src/gui_interface.py:702
+msgid "The GPG key used to encrypt this chat is not trusted. Do you really want to encrypt this message?"
+msgstr "Ключ GPG используемый для шифрования не является доверенным. Вы действительно хотите зашифровать эти сообщения?"
 
-#: ../src/gui_interface.py:717
-msgid ""
-"Gnome Keyring is installed but not correctly started (environment variable "
-"probably not correctly set)"
-msgstr ""
-"Gnome Keyring установлен, но некорректно запущен (возможно, неверно "
-"установлена переменная среды)"
+#: ../src/gui_interface.py:715
+msgid "Gnome Keyring is installed but not correctly started (environment variable probably not correctly set)"
+msgstr "Gnome Keyring установлен, но некорректно запущен (возможно, неверно установлена переменная среды)"
 
-#: ../src/gui_interface.py:755
-msgid ""
-"Please copy / paste the refresh token from the website that has just been "
-"opened."
+#: ../src/gui_interface.py:753
+msgid "Please copy / paste the refresh token from the website that has just been opened."
 msgstr ""
 
-#: ../src/gui_interface.py:758
-#, fuzzy
+#: ../src/gui_interface.py:756
 msgid "Oauth2 Credentials"
-msgstr "Сетевые учётные сведения"
+msgstr ""
 
-#: ../src/gui_interface.py:856
+#: ../src/gui_interface.py:846
 #, python-format
 msgid "New mail on %(gmail_mail_address)s"
 msgstr "Новое письмо на %(gmail_mail_address)s"
 
-#: ../src/gui_interface.py:858
+#: ../src/gui_interface.py:848
 #, python-format
 msgid "You have %d new mail conversation"
 msgid_plural "You have %d new mail conversations"
@@ -9922,7 +9453,7 @@ msgstr[0] "У вас есть %d непрочитанное письмо"
 msgstr[1] "У вас есть %d непрочитанных письма"
 msgstr[2] "У вас есть %d непрочитанных писем"
 
-#: ../src/gui_interface.py:871
+#: ../src/gui_interface.py:861
 #, python-format
 msgid ""
 "\n"
@@ -9937,331 +9468,326 @@ msgstr ""
 "Тема: %(subject)s\n"
 "%(snippet)s"
 
-#: ../src/gui_interface.py:941
+#: ../src/gui_interface.py:931
 #, python-format
 msgid "%s wants to send you a file."
 msgstr "%s хочет отправить вам файл."
 
-#: ../src/gui_interface.py:1038
+#: ../src/gui_interface.py:1028
+#, fuzzy
 msgid "File Transfer Failed"
-msgstr "Не удалось произвести передачу файлов"
+msgstr "Передача файлов заверешна"
 
-#: ../src/gui_interface.py:1059
+#: ../src/gui_interface.py:1049
 #, python-format
 msgid "You successfully received %(filename)s from %(name)s."
 msgstr "Успешно получен файл %(filename)s от %(name)s."
 
-#: ../src/gui_interface.py:1063
+#: ../src/gui_interface.py:1053
 #, python-format
 msgid "File transfer of %(filename)s from %(name)s stopped."
 msgstr "Передача файла %(filename)s от %(name)s приостановлена."
 
 #. ft hash error
-#: ../src/gui_interface.py:1067
-#, python-format
+#: ../src/gui_interface.py:1057
+#, fuzzy, python-format
 msgid "File transfer of %(filename)s from %(name)s failed."
-msgstr "Передача файла %(filename)s от %(name)s не удалась."
+msgstr "Передача файла %(filename)s от %(name)s приостановлена."
 
-#: ../src/gui_interface.py:1080
+#: ../src/gui_interface.py:1070
 #, python-format
 msgid "You successfully sent %(filename)s to %(name)s."
 msgstr "%(name)s успешно получил(а) отправленный вами файл %(filename)s."
 
-#: ../src/gui_interface.py:1084
+#: ../src/gui_interface.py:1074
 #, python-format
 msgid "File transfer of %(filename)s to %(name)s stopped."
 msgstr "Передача файла %(filename)s к %(name)s приостановлена."
 
 #. ft hash error
-#: ../src/gui_interface.py:1088
-#, python-format
+#: ../src/gui_interface.py:1078
+#, fuzzy, python-format
 msgid "File transfer of %(filename)s to %(name)s failed."
-msgstr "Передача файла %(filename)s к %(name)s не удалась."
+msgstr "Передача файла %(filename)s к %(name)s приостановлена."
 
-#: ../src/gui_interface.py:1163
+#: ../src/gui_interface.py:1153
 msgid "Unable to decrypt message"
 msgstr "Сообщение не удалось расшифровать"
 
-#: ../src/gui_interface.py:1175
+#: ../src/gui_interface.py:1165
 msgid "Username Conflict"
 msgstr "Такое имя уже есть"
 
-#: ../src/gui_interface.py:1176
+#: ../src/gui_interface.py:1166
 msgid "Please type a new username for your local account"
 msgstr "Введите новое имя пользователя для локальной учетной записи"
 
-#: ../src/gui_interface.py:1191
+#: ../src/gui_interface.py:1181
 msgid "Resource Conflict"
 msgstr "Такое имя уже есть"
 
-#: ../src/gui_interface.py:1192
-msgid ""
-"You are already connected to this account with the same resource. Please "
-"type a new one"
-msgstr ""
-"Вы уже подсоединены к этой учетной записи с таким же ресурсом. Введите "
-"другой ресурс"
+#: ../src/gui_interface.py:1182
+msgid "You are already connected to this account with the same resource. Please type a new one"
+msgstr "Вы уже подсоединены к этой учетной записи с таким же ресурсом. Введите другой ресурс"
 
 #. TODO: we should use another pixmap ;-)
-#: ../src/gui_interface.py:1247
+#: ../src/gui_interface.py:1237
 #, python-format
 msgid "%s wants to start a voice chat."
 msgstr "%s хочет начать видео сеанс."
 
-#: ../src/gui_interface.py:1250
+#: ../src/gui_interface.py:1240
 msgid "Voice Chat Request"
 msgstr "Запрос аудио сеанса"
 
-#: ../src/gui_interface.py:1337
+#: ../src/gui_interface.py:1327
 msgid "Error verifying SSL certificate"
 msgstr "Ошибка при проверке SSL сертификата"
 
-#: ../src/gui_interface.py:1338
+#: ../src/gui_interface.py:1328
 #, python-format
 msgid ""
-"There was an error verifying the SSL certificate of your jabber server: "
-"%(error)s\n"
+"There was an error verifying the SSL certificate of your jabber server: %(error)s\n"
 "Do you still want to connect to this server?"
 msgstr ""
-"Произошла ошибка при проверке сертификата SSL вашего jabber сервера: "
-"%(error)s\n"
+"Произошла ошибка при проверке сертификата SSL вашего jabber сервера: %(error)s\n"
 "Вы всё ещё хотите подключиться к этому серверу?"
 
-#: ../src/gui_interface.py:1347
+#: ../src/gui_interface.py:1337
 msgid "Ignore this error for this certificate."
 msgstr "Игнорировать эту ошибку для данного сертификата."
 
-#: ../src/gui_interface.py:1372
+#: ../src/gui_interface.py:1362
 msgid "SSL certificate error"
 msgstr "Ошибка SSL сертификата"
 
-#: ../src/gui_interface.py:1373
+#: ../src/gui_interface.py:1363
 #, python-format
 msgid ""
-"It seems the SSL certificate of account %(account)s has changed or your "
-"connection is being hacked.\n"
+"It seems the SSL certificate of account %(account)s has changed or your connection is being hacked.\n"
 "Old fingerprint: %(old)s\n"
 "New fingerprint: %(new)s\n"
 "\n"
 "Do you still want to connect and update the fingerprint of the certificate?"
 msgstr ""
-"По видимому, сертификат SSL учетной записи %(account)s изменился или ваше "
-"соединение было взломано.\n"
+"По видимому, сертификат SSL учетной записи %(account)s изменился или ваше соединение было взломано.\n"
 "Старый отпечаток: %(old)s\n"
 "Новый отпечаток: %(new)s\n"
 "Вы всё ещё хотите соединиться и обновить отпечаток сертификата?"
 
-#: ../src/gui_interface.py:1445
-msgid ""
-"You are about to send your password on an insecure connection. You should "
-"install PyOpenSSL to prevent that. Are you sure you want to do that?"
-msgstr ""
-"Вы хотите отправить пароль через небезопасное соединение. Вы уверены? "
-"(Установите PyOpenSSL, чтобы этого не происходило.)"
+#: ../src/gui_interface.py:1402
+#: ../src/gui_interface.py:1446
+#: ../src/gui_interface.py:1488
+msgid "Insecure connection"
+msgstr "Небезопасное соединение"
 
-#: ../src/gui_interface.py:1487
+#: ../src/gui_interface.py:1403
+#, python-format
 msgid ""
-"You are about to send your password unencrypted on an insecure connection. "
+"You are about to connect to the account %(account)s (%(server)s) with an insecure connection. This means all your conversations will be exchanged unencrypted. This type of connection is really discouraged.\n"
 "Are you sure you want to do that?"
+msgstr ""
+"Вы хотите подключить учетную запись %(account)s (%(server)s) через незащищенное соединение. Вся ваша переписка не будет зашифрована. Этот тип подключения не рекомендуется.\n"
+"Вы действительно хотите это сделать?"
+
+#: ../src/gui_interface.py:1409
+#: ../src/gui_interface.py:1450
+#: ../src/gui_interface.py:1491
+msgid "Yes, I really want to connect insecurely"
+msgstr "Да, я действительно хочу соединиться небезопасно"
+
+#: ../src/gui_interface.py:1410
+msgid "Gajim will NOT connect unless you check this box"
+msgstr ""
+
+#: ../src/gui_interface.py:1447
+msgid "You are about to send your password on an insecure connection. You should install PyOpenSSL to prevent that. Are you sure you want to do that?"
+msgstr "Вы хотите отправить пароль через небезопасное соединение. Вы уверены? (Установите PyOpenSSL, чтобы этого не происходило.)"
+
+#: ../src/gui_interface.py:1489
+msgid "You are about to send your password unencrypted on an insecure connection. Are you sure you want to do that?"
 msgstr "Вы хотите отправить пароль через небезопасное соединение. Вы уверены?"
 
 #. theme doesn't exist, disable emoticons
-#: ../src/gui_interface.py:1993 ../src/gui_interface.py:2016
+#: ../src/gui_interface.py:1995
+#: ../src/gui_interface.py:2018
 msgid "Emoticons disabled"
 msgstr "Смайлики выключены"
 
-#: ../src/gui_interface.py:1994
-msgid ""
-"Your configured emoticons theme has not been found, so emoticons have been "
-"disabled."
+#: ../src/gui_interface.py:1996
+msgid "Your configured emoticons theme has not been found, so emoticons have been disabled."
 msgstr "Тема смайликов не найдена, они будут отключены."
 
-#: ../src/gui_interface.py:2017
-msgid ""
-"Your configured emoticons theme cannot been loaded. You maybe need to update "
-"the format of emoticons.py file. See http://trac.gajim.org/wiki/Emoticons "
-"for more details."
-msgstr ""
-"Смайлики не могут быть загружены. Возможно, вам нужно обновить формат файла "
-"emoticons.py. Подробности на http://trac.gajim.org/wiki/Emoticons."
+#: ../src/gui_interface.py:2019
+msgid "Your configured emoticons theme cannot been loaded. You maybe need to update the format of emoticons.py file. See http://trac.gajim.org/wiki/Emoticons for more details."
+msgstr "Смайлики не могут быть загружены. Возможно, вам нужно обновить формат файла emoticons.py. Подробности на http://trac.gajim.org/wiki/Emoticons."
 
-#: ../src/gui_interface.py:2061 ../src/roster_window.py:3897
+#: ../src/gui_interface.py:2063
+#: ../src/roster_window.py:3966
 msgid "You cannot join a group chat while you are invisible"
 msgstr "Вы не можете зайти в комнату, так как вы в режиме невидимости."
 
 #. it is good to notify the user
 #. in case he or she cannot see the output of the console
-#: ../src/gui_interface.py:2448
+#: ../src/gui_interface.py:2450
 msgid "Could not save your settings and preferences"
 msgstr "Не могу сохранить ваши установки и настройки"
 
-#: ../src/gui_interface.py:3038
+#: ../src/gui_interface.py:3008
 msgid "Passphrase Required"
 msgstr "Требуется парольная фраза"
 
-#: ../src/gui_interface.py:3039
+#: ../src/gui_interface.py:3009
 #, python-format
-msgid "Enter OpenPGP key passphrase for key %(keyid)s (account %(account)s)."
-msgstr "Введите пароль для OpenPGP ключа %(keyid)s (аккаунт %(account)s)."
+msgid "Enter GPG key passphrase for key %(keyid)s (account %(account)s)."
+msgstr "Введите пароль для ключа %(keyid)s (аккаунт %(account)s)."
 
-#: ../src/gui_interface.py:3053
-msgid "OpenPGP key expired"
-msgstr "Срок действия ключа OpenPGP истёк"
+#: ../src/gui_interface.py:3023
+msgid "GPG key expired"
+msgstr "Срок действия ключа GPG истёк"
 
-#: ../src/gui_interface.py:3054
+#: ../src/gui_interface.py:3024
 #, python-format
-msgid ""
-"Your OpenPGP key has expired, you will be connected to %s without OpenPGP."
-msgstr ""
-"Срок действия вашего ключа OpenPGP истёк, вы будете подключены к %s без "
-"использования OpenPGP."
+msgid "Your GPG key has expired, you will be connected to %s without OpenPGP."
+msgstr "Срок действия вашего ключа GPG истёк, вы будете подключены к %s без использования OpenPGP."
 
 #. ask again
-#: ../src/gui_interface.py:3063
+#: ../src/gui_interface.py:3033
 msgid "Wrong Passphrase"
 msgstr "Неверная парольная фраза"
 
-#: ../src/gui_interface.py:3064
-msgid "Please retype your OpenPGP passphrase or press Cancel."
-msgstr "Введите парольную фразу для OpenPGP еще раз или нажмите «Отмена»."
+#: ../src/gui_interface.py:3034
+msgid "Please retype your GPG passphrase or press Cancel."
+msgstr "Введите парольную фразу для GPG еще раз или нажмите «Отмена»."
 
-#: ../src/gui_menu_builder.py:94
+#: ../src/gui_menu_builder.py:93
 msgid "_New Group Chat"
 msgstr "В _новую комнату"
 
-#: ../src/gui_menu_builder.py:435
+#: ../src/gui_menu_builder.py:431
 msgid "I would like to add you to my roster"
 msgstr "Вы не против, если я добавлю Вас к себе в ростер?"
 
-#: ../src/history_manager.py:78
-msgid "Set logs directory"
-msgstr "Установить рабочий каталог"
-
-#: ../src/history_manager.py:126
+#: ../src/history_manager.py:116
 msgid "Cannot find history logs database"
 msgstr "Не могу найти базу данных истории"
 
 #. holds time
-#: ../src/history_manager.py:179 ../src/history_manager.py:223
-#: ../src/history_window.py:100
+#: ../src/history_manager.py:169
+#: ../src/history_manager.py:213
+#: ../src/history_window.py:99
 msgid "Date"
 msgstr "Дата"
 
 #. holds nickname
-#: ../src/history_manager.py:186 ../src/history_manager.py:242
+#: ../src/history_manager.py:176
+#: ../src/history_manager.py:232
 msgid "Nickname"
 msgstr "Ник"
 
 #. holds message
-#: ../src/history_manager.py:195 ../src/history_manager.py:230
-#: ../src/history_window.py:108
+#: ../src/history_manager.py:185
+#: ../src/history_manager.py:220
+#: ../src/history_window.py:107
 msgid "Message"
 msgstr "Сообщение"
 
 #. holds subject
-#: ../src/history_manager.py:203 ../src/history_manager.py:236
+#: ../src/history_manager.py:193
+#: ../src/history_manager.py:226
 msgid "Subject"
 msgstr "Тема"
 
-#: ../src/history_manager.py:262
-msgid ""
-"Do you want to clean up the database? (STRONGLY NOT RECOMMENDED IF GAJIM IS "
-"RUNNING)"
-msgstr ""
-"Вы хотите очистить базу данных? (КРАЙНЕ НЕ РЕКОМЕНДУЕТСЯ, ЕСЛИ GAJIM ЗАПУЩЕН)"
+#: ../src/history_manager.py:252
+msgid "Do you want to clean up the database? (STRONGLY NOT RECOMMENDED IF GAJIM IS RUNNING)"
+msgstr "Вы хотите очистить базу данных? (КРАЙНЕ НЕ РЕКОМЕНДУЕТСЯ, ЕСЛИ GAJIM ЗАПУЩЕН)"
 
-#: ../src/history_manager.py:264
+#: ../src/history_manager.py:254
 msgid ""
-"Normally allocated database size will not be freed, it will just become "
-"reusable. If you really want to reduce database filesize, click YES, else "
-"click NO.\n"
+"Normally allocated database size will not be freed, it will just become reusable. If you really want to reduce database filesize, click YES, else click NO.\n"
 "\n"
 "In case you click YES, please wait..."
 msgstr ""
-"Обычно размер файла базы данных не уменьшается при очистке, а используется "
-"заново. Если вы хотите действительно уменьшить размер файла, нажмите ДА, в "
-"противном случае нажмите НЕТ.\n"
+"Обычно размер файла базы данных не уменьшается при очистке, а используется заново. Если вы хотите действительно уменьшить размер файла, нажмите ДА, в противном случае нажмите НЕТ.\n"
 "\n"
 "Если вы нажали ДА, пожалуйста подождите..."
 
-#: ../src/history_manager.py:269
+#: ../src/history_manager.py:259
 msgid "Database Cleanup"
 msgstr "Очистка базы данных"
 
-#: ../src/history_manager.py:487
+#: ../src/history_manager.py:477
 msgid "Exporting History Logs..."
 msgstr "Экспортирую историю..."
 
-#: ../src/history_manager.py:564
+#: ../src/history_manager.py:554
 #, python-format
 msgid "%(who)s on %(time)s said: %(message)s\n"
 msgstr "%(who)s в %(time)s сказал: %(message)s\n"
 
-#: ../src/history_manager.py:602
+#: ../src/history_manager.py:592
 #, python-format
 msgid "Do you really want to delete the logs of %(jid)s?"
 msgstr "Вы точно хотите удалить лог %(jid)s?"
 
-#: ../src/history_manager.py:606
+#: ../src/history_manager.py:596
 msgid "Do you really want to delete logs of the selected contacts?"
 msgstr "Вы точно хотите удалить логи выделенного контакта?"
 
-#: ../src/history_manager.py:608 ../src/history_manager.py:647
+#: ../src/history_manager.py:598
+#: ../src/history_manager.py:637
 msgid "This is an irreversible operation."
 msgstr "Это необратимая операция"
 
-#: ../src/history_manager.py:610 ../src/history_manager.py:649
+#: ../src/history_manager.py:600
+#: ../src/history_manager.py:639
 msgid "Deletion Confirmation"
 msgstr "Подтверждение удаления"
 
-#: ../src/history_manager.py:644
+#: ../src/history_manager.py:634
 msgid "Do you really want to delete the selected message?"
 msgid_plural "Do you really want to delete the selected messages?"
 msgstr[0] "Вы точно хотите удалить выделенное сообщение?"
 msgstr[1] "Вы точно хотите удалить выделенные сообщения?"
 msgstr[2] "Вы точно хотите удалить выделенные сообщения?"
 
-#: ../src/history_window.py:308
+#: ../src/history_window.py:306
 #, python-format
 msgid "Conversation History with %s"
 msgstr "История %s"
 
-#: ../src/history_window.py:358
+#: ../src/history_window.py:356
 msgid "Disk Error"
 msgstr "Ошибка записи на диск"
 
-#: ../src/history_window.py:451
+#: ../src/history_window.py:444
 #, python-format
 msgid "%(nick)s is now %(status)s: %(status_msg)s"
 msgstr "%(nick)s теперь %(status)s: %(status_msg)s"
 
-#: ../src/history_window.py:462
+#: ../src/history_window.py:455
 #, python-format
 msgid "Error: %s"
 msgstr "Ошибка: %s"
 
-#: ../src/history_window.py:464
+#: ../src/history_window.py:457
 msgid "Error"
 msgstr "Ошибка"
 
-#: ../src/history_window.py:466
+#: ../src/history_window.py:459
 #, python-format
 msgid "Status is now: %(status)s: %(status_msg)s"
 msgstr "Статус установлен в: %(status)s: %(status_msg)s"
 
-#: ../src/history_window.py:469
+#: ../src/history_window.py:462
 #, python-format
 msgid "Status is now: %(status)s"
 msgstr "Статус установлен в: %(status)s"
 
-#: ../src/htmltextview.py:523
+#: ../src/htmltextview.py:522
 msgid "Loading"
 msgstr "Загрузка"
 
-#: ../src/logind_listener.py:53 ../src/upower_listener.py:31
-msgid "Machine going to sleep"
-msgstr "Компьютер перешел в спящий режим"
-
 #: ../src/message_window.py:220
 msgid "You are going to close several tabs"
 msgstr "Вы собираетесь закрыть несколько вкладок"
@@ -10298,49 +9824,52 @@ msgstr "— сообщения не будут записаны в лог"
 msgid "Ignore"
 msgstr "Игнорировать"
 
-#: ../src/plugins/gui.py:82
+#: ../src/plugins/gui.py:78
 msgid "Plugin"
 msgstr "Модуль"
 
-#: ../src/plugins/gui.py:149
-#, python-format
+#: ../src/plugins/gui.py:145
+#, fuzzy, python-format
 msgid "Warning: %s"
-msgstr "Предупреждение:  %s"
+msgstr "Забанить %s"
 
-#: ../src/plugins/gui.py:207
+#: ../src/plugins/gui.py:199
 msgid "Plugin failed"
 msgstr "Ошибка в модуле"
 
-#: ../src/plugins/gui.py:252
+#: ../src/plugins/gui.py:244
 msgid "Unable to properly remove the plugin"
 msgstr "Невозможно правильно удалить модуль"
 
 #. members not safe
-#: ../src/plugins/gui.py:260 ../src/plugins/pluginmanager.py:526
-#: ../src/plugins/pluginmanager.py:534
+#: ../src/plugins/gui.py:252
+#: ../src/plugins/pluginmanager.py:523
+#: ../src/plugins/pluginmanager.py:531
 msgid "Archive is malformed"
 msgstr "Формат архива не поддерживается"
 
-#: ../src/plugins/gui.py:284 ../src/plugins/gui.py:292
-#: ../src/plugins/pluginmanager.py:542
+#: ../src/plugins/gui.py:276
+#: ../src/plugins/gui.py:284
+#: ../src/plugins/pluginmanager.py:539
 msgid "Plugin already exists"
 msgstr "Модуль уже существует"
 
-#: ../src/plugins/gui.py:284
+#: ../src/plugins/gui.py:276
 msgid "Overwrite?"
 msgstr "Перезаписать?"
 
-#: ../src/plugins/gui.py:314
+#: ../src/plugins/gui.py:306
 msgid "Configuration"
 msgstr "Конфигурация"
 
 #. it is not zip file
 #. CRC error
-#: ../src/plugins/pluginmanager.py:512 ../src/plugins/pluginmanager.py:518
+#: ../src/plugins/pluginmanager.py:509
+#: ../src/plugins/pluginmanager.py:515
 msgid "Archive corrupted"
 msgstr "Архив поврежден"
 
-#: ../src/plugins/pluginmanager.py:514
+#: ../src/plugins/pluginmanager.py:511
 msgid "Archive empty"
 msgstr "Архив пуст"
 
@@ -10348,335 +9877,291 @@ msgstr "Архив пуст"
 msgid "Retrieving profile..."
 msgstr "Получаю данные..."
 
-#: ../src/profile_window.py:129 ../src/roster_window.py:3194
+#: ../src/profile_window.py:129
+#: ../src/roster_window.py:3259
 msgid "File is empty"
 msgstr "Пустой файл"
 
-#: ../src/profile_window.py:132 ../src/roster_window.py:3197
+#: ../src/profile_window.py:132
+#: ../src/roster_window.py:3262
 msgid "File does not exist"
 msgstr "Файл не существует"
 
 #. keep identation
 #. unknown format
-#: ../src/profile_window.py:146 ../src/profile_window.py:163
-#: ../src/roster_window.py:3199 ../src/roster_window.py:3210
+#: ../src/profile_window.py:146
+#: ../src/profile_window.py:162
+#: ../src/roster_window.py:3264
+#: ../src/roster_window.py:3275
 msgid "Could not load image"
 msgstr "Не могу загрузить изображение"
 
-#: ../src/profile_window.py:235
+#: ../src/profile_window.py:233
 msgid "Wrong date format"
 msgstr "Неверный формат даты"
 
-#: ../src/profile_window.py:236
+#: ../src/profile_window.py:234
 msgid "Format of the date must be YYYY-MM-DD"
 msgstr "Дата должна быть в формате: YYYY-MM-DD"
 
-#: ../src/profile_window.py:294
+#: ../src/profile_window.py:292
 msgid "Information received"
 msgstr "Информация получена"
 
-#: ../src/profile_window.py:372
-msgid "Without a connection, you can not publish your contact information."
-msgstr "Необходимо присоединиться к серверу для обновления личной информации."
+#: ../src/profile_window.py:370
+msgid "Without a connection you can not publish your contact information."
+msgstr "Необходимо присоединиться к серверу для обновления личной информации"
 
-#: ../src/profile_window.py:385
+#: ../src/profile_window.py:383
 msgid "Sending profile..."
 msgstr "Отправляю данные..."
 
-#: ../src/profile_window.py:404
+#: ../src/profile_window.py:402
 msgid "Information NOT published"
 msgstr "Информация НЕ опубликована"
 
-#: ../src/profile_window.py:411
+#: ../src/profile_window.py:409
 msgid "vCard publication failed"
 msgstr "Публикация vCard не удалась"
 
-#: ../src/profile_window.py:412
-msgid ""
-"There was an error while publishing your personal information, try again "
-"later."
-msgstr ""
-"При публикации вашей личной информации произошла ошибка, попробуйте позже."
+#: ../src/profile_window.py:410
+msgid "There was an error while publishing your personal information, try again later."
+msgstr "При публикации вашей личной информации произошла ошибка, попробуйте позже."
 
-#: ../src/roster_window.py:240 ../src/roster_window.py:1035
+#: ../src/roster_window.py:240
+#: ../src/roster_window.py:1031
 msgid "Merged accounts"
 msgstr "Объединенные учетные записи"
 
-#: ../src/roster_window.py:2061
+#: ../src/roster_window.py:2049
 msgid "Authorization has been sent"
 msgstr "Была отправлена авторизация"
 
-#: ../src/roster_window.py:2062
+#: ../src/roster_window.py:2050
 #, python-format
 msgid "Now \"%s\" will know your status."
 msgstr "Теперь «%s» будет знать о вашем статусе."
 
-#: ../src/roster_window.py:2085
+#: ../src/roster_window.py:2073
 msgid "Subscription request has been sent"
 msgstr "Был отправлен запрос на подписку "
 
-#: ../src/roster_window.py:2086
+#: ../src/roster_window.py:2074
 #, python-format
 msgid "If \"%s\" accepts this request you will know his or her status."
 msgstr "Если «%s» примет ваш запрос, вы будете знать его или её статус"
 
-#: ../src/roster_window.py:2100
+#: ../src/roster_window.py:2088
 msgid "Authorization has been removed"
 msgstr "Авторизация была удалена"
 
-#: ../src/roster_window.py:2101
+#: ../src/roster_window.py:2089
 #, python-format
 msgid "Now \"%s\" will always see you as offline."
 msgstr "Теперь «%s» всегда будет видеть вас в оффлайне."
 
-#: ../src/roster_window.py:2128
-msgid "OpenPGP is not usable"
-msgstr "OpenPGP использовать невозможно"
+#: ../src/roster_window.py:2116
+msgid "GPG is not usable"
+msgstr "GPG использовать невозможно"
 
-#: ../src/roster_window.py:2129
+#: ../src/roster_window.py:2117
 #, python-format
 msgid "You will be connected to %s without OpenPGP."
 msgstr "Вы будете подключены к %s без использования OpenPGP."
 
-#: ../src/roster_window.py:2336 ../src/roster_window.py:3827
+#: ../src/roster_window.py:2324
+#: ../src/roster_window.py:3896
 msgid "You are participating in one or more group chats"
 msgstr "Вы находитесь в одной или более комнатах"
 
-#: ../src/roster_window.py:2337 ../src/roster_window.py:3828
-msgid ""
-"Changing your status to invisible will result in disconnection from those "
-"group chats. Are you sure you want to go invisible?"
-msgstr ""
-"Переход в состояние невидимости приведет к выходу из этих комнат. Вы точно "
-"хотите стать невидимым?"
+#: ../src/roster_window.py:2325
+#: ../src/roster_window.py:3897
+msgid "Changing your status to invisible will result in disconnection from those group chats. Are you sure you want to go invisible?"
+msgstr "Переход в состояние невидимости приведет к выходу из этих комнат. Вы точно хотите стать невидимым?"
 
-#: ../src/roster_window.py:2363
+#: ../src/roster_window.py:2351
 msgid "desync'ed"
 msgstr "не синхронизировано"
 
-#: ../src/roster_window.py:2429
+#: ../src/roster_window.py:2417
 msgid "Really quit Gajim?"
 msgstr "Закрыть Gajim?"
 
-#: ../src/roster_window.py:2430
+#: ../src/roster_window.py:2418
 msgid "Are you sure you want to quit Gajim?"
 msgstr "Вы точно хотите закрыть Gajim?"
 
-#: ../src/roster_window.py:2431
+#: ../src/roster_window.py:2419
 msgid "Always close Gajim"
 msgstr "Всегда закрывать Gajim"
 
-#: ../src/roster_window.py:2521
+#: ../src/roster_window.py:2509
 msgid "You have running file transfers"
 msgstr "Идет передача файлов"
 
-#: ../src/roster_window.py:2522
-msgid ""
-"If you quit now, the file(s) being transferred will be stopped. Do you still "
-"want to quit?"
+#: ../src/roster_window.py:2510
+msgid "If you quit now, the file(s) being transferred will be stopped. Do you still want to quit?"
 msgstr "Если выйти сейчас, передача файла остановится. Выйти?"
 
-#: ../src/roster_window.py:2553 ../src/roster_window.py:2990
+#: ../src/roster_window.py:2541
+#: ../src/roster_window.py:2978
 msgid "You have unread messages"
 msgstr "У вас есть непрочитанные сообщения"
 
-#: ../src/roster_window.py:2554
-msgid ""
-"Messages will only be available for reading them later if you have history "
-"enabled and contact is in your roster."
-msgstr ""
-"Сообщения будут доступны для чтения позже, если у вас активирована опция "
-"истории."
+#: ../src/roster_window.py:2542
+msgid "Messages will only be available for reading them later if you have history enabled and contact is in your roster."
+msgstr "Сообщения будут доступны для чтения позже, если у вас активирована опция истории."
 
-#: ../src/roster_window.py:2991
+#: ../src/roster_window.py:2979
 msgid "You must read them before removing this transport."
 msgstr "Просмотрите все ожидающие события перед удалением транспорта."
 
-#: ../src/roster_window.py:2994
+#: ../src/roster_window.py:2982
 #, python-format
 msgid "Transport \"%s\" will be removed"
 msgstr "Транспорт «%s» будет удален"
 
-#: ../src/roster_window.py:2995
-msgid ""
-"You will no longer be able to send and receive messages from contacts using "
-"this transport."
-msgstr ""
-"У вас теперь не будет возможности приема и отправки сообщения контактам "
-"через этот транспорт."
+#: ../src/roster_window.py:2983
+msgid "You will no longer be able to send and receive messages from contacts using this transport."
+msgstr "У вас теперь не будет возможности приема и отправки сообщения контактам через этот транспорт."
 
-#: ../src/roster_window.py:2998
+#: ../src/roster_window.py:2986
 msgid "Transports will be removed"
 msgstr "Транспорты будут удалены"
 
-#: ../src/roster_window.py:3003
+#: ../src/roster_window.py:2991
 #, python-format
-msgid ""
-"You will no longer be able to send and receive messages to contacts from "
-"these transports: %s"
-msgstr ""
-"У вас больше не будет возможности приема и отправки сообщений через эти "
-"транспорты:%s."
+msgid "You will no longer be able to send and receive messages to contacts from these transports: %s"
+msgstr "У вас больше не будет возможности приема и отправки сообщений через эти транспорты:%s."
 
-#: ../src/roster_window.py:3045
+#: ../src/roster_window.py:3059
 msgid "You are about to block a contact. Are you sure you want to continue?"
 msgstr "Вы точно хотите заблокировать контакт?"
 
-#: ../src/roster_window.py:3047
-msgid ""
-"This contact will see you offline and you will not receive messages he will "
-"send you."
-msgstr ""
-"Этот контакт будет видеть вас как отключенного, а вы не будете получать от "
-"него сообщения."
+#: ../src/roster_window.py:3061
+msgid "This contact will see you offline and you will not receive messages he will send you."
+msgstr "Этот контакт будет видеть вас как отключенного, а вы не будете получать от него сообщения."
 
 #. it's jid
-#: ../src/roster_window.py:3086
+#: ../src/roster_window.py:3151
 msgid "Rename Contact"
 msgstr "Переименовать контакт"
 
-#: ../src/roster_window.py:3087
+#: ../src/roster_window.py:3152
 #, python-format
 msgid "Enter a new nickname for contact %s"
 msgstr "Введите новый ник для контакта %s"
 
-#: ../src/roster_window.py:3094
+#: ../src/roster_window.py:3159
 msgid "Rename Group"
 msgstr "Переименовать группу"
 
-#: ../src/roster_window.py:3095
+#: ../src/roster_window.py:3160
 #, python-format
 msgid "Enter a new name for group %s"
 msgstr "Введите новое название для группы %s"
 
-#: ../src/roster_window.py:3140
+#: ../src/roster_window.py:3205
 msgid "Remove Group"
 msgstr "Удалить группу"
 
-#: ../src/roster_window.py:3141
+#: ../src/roster_window.py:3206
 #, python-format
 msgid "Do you want to remove group %s from the roster?"
 msgstr "Вы точно хотите удалить группу %s из ростера?"
 
-#: ../src/roster_window.py:3142
+#: ../src/roster_window.py:3207
 msgid "Also remove all contacts in this group from your roster"
 msgstr "Удалить из ростера все контакты в этой группе"
 
-#: ../src/roster_window.py:3181
+#: ../src/roster_window.py:3246
 msgid "Assign OpenPGP Key"
 msgstr "Назначить ключ OpenPGP"
 
-#: ../src/roster_window.py:3182
+#: ../src/roster_window.py:3247
 msgid "Select a key to apply to the contact"
 msgstr "Выберите ключ, который будет применен к контакту"
 
-#: ../src/roster_window.py:3637
+#: ../src/roster_window.py:3706
 #, python-format
 msgid "Contact \"%s\" will be removed from your roster"
 msgstr "Контакт «%s» будет удален из вашего ростера"
 
-#: ../src/roster_window.py:3639
+#: ../src/roster_window.py:3708
 #, python-format
 msgid "You are about to remove \"%(name)s\" (%(jid)s) from your roster.\n"
-msgstr ""
-"Вы собираетесь удалить «%(name)s» (%(jid)s) из вашего списка контактов.\n"
+msgstr "Вы собираетесь удалить «%(name)s» (%(jid)s) из вашего списка контактов.\n"
 
-#: ../src/roster_window.py:3644
-msgid ""
-"By removing this contact you also remove authorization resulting in him or "
-"her always seeing you as offline."
-msgstr ""
-"Удаляя контакт, вы одновременно удалите авторизацию, и этот человек больше "
-"не сможет видеть ваш статус."
+#: ../src/roster_window.py:3713
+msgid "By removing this contact you also remove authorization resulting in him or her always seeing you as offline."
+msgstr "Удаляя контакт, вы одновременно удалите авторизацию, и этот человек больше не сможет видеть ваш статус."
 
 #. Contact is not in roster
-#: ../src/roster_window.py:3650
+#: ../src/roster_window.py:3719
 msgid "Do you want to continue?"
 msgstr "Продолжить?"
 
-#: ../src/roster_window.py:3654
-msgid ""
-"By removing this contact you also by default remove authorization resulting "
-"in him or her always seeing you as offline."
-msgstr ""
-"Если вы удалите контакт, вы так же удалите и авторизацию. Вы будете видеть "
-"его или её всегда в оффлайне."
+#: ../src/roster_window.py:3723
+msgid "By removing this contact you also by default remove authorization resulting in him or her always seeing you as offline."
+msgstr "Если вы удалите контакт, вы так же удалите и авторизацию. Вы будете видеть его или её всегда в оффлайне."
 
-#: ../src/roster_window.py:3657
+#: ../src/roster_window.py:3726
 msgid "I want this contact to know my status after removal"
 msgstr "Я хочу, чтобы этот контакт видел мой статус после удаления"
 
 #. several contact to remove at the same time
-#: ../src/roster_window.py:3661
+#: ../src/roster_window.py:3730
 msgid "Contacts will be removed from your roster"
 msgstr "Контакты будут удалены из вашего ростера"
 
-#: ../src/roster_window.py:3666
+#: ../src/roster_window.py:3735
 #, python-format
 msgid ""
 "By removing these contacts:%s\n"
 "you also remove authorization resulting in them always seeing you as offline."
 msgstr ""
 "Вы удаляете эти контакты:%s.\n"
-"Одновременно вы удалите и авторизацию, то есть они всегда будут видеть вас в "
-"оффлайне."
+"Одновременно вы удалите и авторизацию, то есть они всегда будут видеть вас в оффлайне."
 
-#: ../src/roster_window.py:3724
-msgid ""
-"You are about to send a custom status. Are you sure you want to continue?"
+#: ../src/roster_window.py:3793
+#, fuzzy
+msgid "You are about to send a custom status. Are you sure you want to continue?"
 msgstr "Вы точно хотите послать другой статус?"
 
-#: ../src/roster_window.py:3726
+#: ../src/roster_window.py:3795
 #, python-format
-msgid ""
-"This contact will temporarily see you as %(status)s, but only until you "
-"change your status. Then he or she will see your global status."
-msgstr ""
-"Этот контакт будет временно видеть ваш статус как %(status)s, но лишь пока "
-"вы не измените свой глобальный статус. Тогда этому контакту станет виден "
-"глобальный статус."
+msgid "This contact will temporarily see you as %(status)s, but only until you change your status. Then he or she will see your global status."
+msgstr "Этот контакт будет временно видеть ваш статус как %(status)s, но лишь пока вы не измените свой глобальный статус. Тогда этому контакту станет виден глобальный статус."
 
-#: ../src/roster_window.py:3745
+#: ../src/roster_window.py:3814
 msgid "No account available"
 msgstr "Нет доступной учетной записи"
 
-#: ../src/roster_window.py:3746
+#: ../src/roster_window.py:3815
 msgid "You must create an account before you can chat with other contacts."
-msgstr ""
-"Для начала беседы с другими людьми прежде необходимо создать учетную запись."
+msgstr "Для начала беседы с другими людьми прежде необходимо создать учетную запись."
 
-#: ../src/roster_window.py:4458
+#: ../src/roster_window.py:4512
 msgid "Metacontacts storage not supported by your server"
 msgstr "Сервер не умеет хранить метаконтакты"
 
-#: ../src/roster_window.py:4460
-msgid ""
-"Your server does not support storing metacontacts information. So this "
-"information will not be saved on next reconnection."
-msgstr ""
-"Ваш сервер не умеет хранить данные о метаконтактах. Эта информация не будет "
-"сохранена при следующем подключении."
+#: ../src/roster_window.py:4514
+msgid "Your server does not support storing metacontacts information. So this information will not be saved on next reconnection."
+msgstr "Ваш сервер не умеет хранить данные о метаконтактах. Эта информация не будет сохранена при следующем подключении."
 
-#: ../src/roster_window.py:4552
-msgid ""
-"You are about to create a metacontact. Are you sure you want to continue?"
+#: ../src/roster_window.py:4606
+msgid "You are about to create a metacontact. Are you sure you want to continue?"
 msgstr "Вы точно хотите создать метаконтакт?"
 
-#: ../src/roster_window.py:4554
-msgid ""
-"Metacontacts are a way to regroup several contacts in one line. Generally it "
-"is used when the same person has several Jabber accounts or transport "
-"accounts."
-msgstr ""
-"Метаконтакты — это метод группировки нескольких контактов в одну запись. "
-"Обычно используется, когда один и тот же человек имеет несколько учетных "
-"записей в Jabber или на транспортах."
+#: ../src/roster_window.py:4608
+msgid "Metacontacts are a way to regroup several contacts in one line. Generally it is used when the same person has several Jabber accounts or transport accounts."
+msgstr "Метаконтакты — это метод группировки нескольких контактов в одну запись. Обычно используется, когда один и тот же человек имеет несколько учетных записей в Jabber или на транспортах."
 
-#: ../src/roster_window.py:4675
+#: ../src/roster_window.py:4729
 msgid "Invalid file URI:"
 msgstr "Неверный файл:"
 
-#: ../src/roster_window.py:4687
+#: ../src/roster_window.py:4741
 #, python-format
 msgid "Do you want to send this file to %s:"
 msgid_plural "Do you want to send these files to %s:"
@@ -10684,17 +10169,17 @@ msgstr[0] "Хотите отправить файл %s:"
 msgstr[1] "Хотите отправить файлы %s:"
 msgstr[2] "Хотите отправить файлы %s:"
 
-#: ../src/roster_window.py:4822
+#: ../src/roster_window.py:4876
 #, python-format
 msgid "Send %s to %s"
 msgstr "Отправить %s контакту %s"
 
-#: ../src/roster_window.py:4833
+#: ../src/roster_window.py:4887
 #, python-format
 msgid "Make %s first contact"
 msgstr "Сделать %s первым контактом"
 
-#: ../src/roster_window.py:4836
+#: ../src/roster_window.py:4890
 #, python-format
 msgid "Make %s and %s metacontacts"
 msgstr "Обьединить %s и %s в метаконтакт"
@@ -10704,129 +10189,135 @@ msgstr "Обьединить %s и %s в метаконтакт"
 #. for chat_with
 #. for single message
 #. join gc
-#: ../src/roster_window.py:5296 ../src/roster_window.py:5350
-#: ../src/roster_window.py:5359 ../src/statusicon.py:277
-#: ../src/statusicon.py:324 ../src/statusicon.py:330
+#: ../src/roster_window.py:5346
+#: ../src/roster_window.py:5400
+#: ../src/roster_window.py:5409
+#: ../src/statusicon.py:277
+#: ../src/statusicon.py:324
+#: ../src/statusicon.py:330
 #, python-format
 msgid "using account %s"
 msgstr "используя учетную запись %s"
 
 #. add
-#: ../src/roster_window.py:5366
+#: ../src/roster_window.py:5416
 #, python-format
 msgid "to %s account"
 msgstr "для учетной записи %s"
 
 #. disco
-#: ../src/roster_window.py:5371
+#: ../src/roster_window.py:5421
 #, python-format
 msgid "using %s account"
 msgstr "учетной записи %s"
 
-#: ../src/roster_window.py:5410 ../src/statusicon.py:340
+#: ../src/roster_window.py:5460
+#: ../src/statusicon.py:340
 msgid "_Manage Bookmarks..."
 msgstr "Управление _закладками..."
 
 #. profile, avatar
-#: ../src/roster_window.py:5430
+#: ../src/roster_window.py:5480
 #, python-format
 msgid "of account %s"
 msgstr "для учетной записи %s"
 
-#: ../src/roster_window.py:5471
+#: ../src/roster_window.py:5521
 #, python-format
 msgid "for account %s"
 msgstr "для учетной записи %s"
 
-#: ../src/roster_window.py:5531 ../src/roster_window.py:5639
+#: ../src/roster_window.py:5581
+#: ../src/roster_window.py:5689
 msgid "_Change Status Message"
 msgstr "_Изменить сообщение о статусе"
 
-#: ../src/roster_window.py:5564
+#: ../src/roster_window.py:5614
 msgid "Publish Tune"
 msgstr "Музыка"
 
-#: ../src/roster_window.py:5566
+#: ../src/roster_window.py:5616
 msgid "Publish Location"
 msgstr "Отправлять Местоположение"
 
-#: ../src/roster_window.py:5569
+#: ../src/roster_window.py:5619
 msgid "Configure Services..."
 msgstr "Настроить Сервисы..."
 
-#: ../src/roster_window.py:5717
+#: ../src/roster_window.py:5767
 msgid "_Maximize All"
 msgstr "_Развернуть все"
 
-#: ../src/roster_window.py:5727 ../src/roster_window.py:5900
+#: ../src/roster_window.py:5777
+#: ../src/roster_window.py:5950
 msgid "Send Group M_essage"
 msgstr "_Отправить сообщение группе"
 
-#: ../src/roster_window.py:5735
+#: ../src/roster_window.py:5785
 msgid "To all users"
 msgstr "Всем пользователям"
 
-#: ../src/roster_window.py:5739
+#: ../src/roster_window.py:5789
 msgid "To all online users"
 msgstr "Всем, кто подключён"
 
 #. Manage Transport submenu
-#: ../src/roster_window.py:5920
+#: ../src/roster_window.py:5970
 msgid "_Manage Contacts"
 msgstr "_Управление контактами"
 
 #. Edit Groups
-#: ../src/roster_window.py:5929
+#: ../src/roster_window.py:5979
 msgid "Edit _Groups"
 msgstr "Редактировать _группы"
 
 #. Send single message
-#: ../src/roster_window.py:5984
+#: ../src/roster_window.py:6034
 msgid "Send Single Message"
 msgstr "Отправить одиночное сообщение"
 
 #. Execute Command
-#: ../src/roster_window.py:6031
+#: ../src/roster_window.py:6081
 msgid "Execute Command..."
 msgstr "Выполнить команду..."
 
 #. Manage Transport submenu
-#: ../src/roster_window.py:6041
+#: ../src/roster_window.py:6091
 msgid "_Manage Transport"
 msgstr "_Управление транспортом"
 
 #. Modify Transport
-#: ../src/roster_window.py:6050
+#: ../src/roster_window.py:6100
 msgid "_Modify Transport"
 msgstr "_Изменить транспорт"
 
 #. Rename
-#: ../src/roster_window.py:6060
+#: ../src/roster_window.py:6110
 msgid "_Rename"
 msgstr "П_ереименовать"
 
-#: ../src/roster_window.py:6120
+#: ../src/roster_window.py:6170
 msgid "_Maximize"
 msgstr "Развернут_ь"
 
-#: ../src/roster_window.py:6129
+#: ../src/roster_window.py:6179
 msgid "_Reconnect"
 msgstr "_Переподсоединиться"
 
-#: ../src/roster_window.py:6136
+#: ../src/roster_window.py:6186
 msgid "_Disconnect"
 msgstr "_Выйти"
 
 #. History manager
-#: ../src/roster_window.py:6230
+#: ../src/roster_window.py:6275
 msgid "History Manager"
 msgstr "Менеджер истории"
 
-#: ../src/roster_window.py:6245
+#: ../src/roster_window.py:6286
 msgid "_Join New Group Chat"
 msgstr "_Войти в новую комнату"
 
-#: ../src/roster_window.py:6473
+#: ../src/roster_window.py:6514
 msgid "Change Status Message..."
 msgstr "Изменить сообщение о статусе..."
 
@@ -10834,20 +10325,23 @@ msgstr "Изменить сообщение о статусе..."
 msgid "Waiting for results"
 msgstr "Ожидание результатов"
 
-#: ../src/search_window.py:143 ../src/search_window.py:220
+#: ../src/search_window.py:143
+#: ../src/search_window.py:220
 msgid "Error in received dataform"
 msgstr "Ошибка в принятой форме данных"
 
 #. No result
-#: ../src/search_window.py:177 ../src/search_window.py:212
+#: ../src/search_window.py:177
+#: ../src/search_window.py:212
 msgid "No result"
 msgstr "Нет результата"
 
-#: ../src/session.py:409 ../src/session.py:469
+#: ../src/session.py:411
+#: ../src/session.py:470
 msgid "Confirm these session options"
 msgstr "Подтвердить данные настройки сеанса"
 
-#: ../src/session.py:411
+#: ../src/session.py:413
 #, python-format
 msgid ""
 "The remote client wants to negotiate a session with these features:\n"
@@ -10862,7 +10356,7 @@ msgstr ""
 "\n"
 "Приемлемы ли эти настройки?"
 
-#: ../src/session.py:471
+#: ../src/session.py:472
 #, python-format
 msgid ""
 "The remote client selected these options:\n"
@@ -10877,7 +10371,7 @@ msgstr ""
 "\n"
 "Продолжить этот сеанс?"
 
-#: ../src/session.py:474
+#: ../src/session.py:475
 msgid "Always accept for this contact"
 msgstr "Всегда принимать для этого контакта"
 
@@ -10893,130 +10387,139 @@ msgstr "Скрыть _ростер"
 msgid "Hide this menu"
 msgstr "Скрыть это меню"
 
-#: ../src/tooltips.py:393 ../src/tooltips.py:614
+#: ../src/tooltips.py:393
+#: ../src/tooltips.py:613
 msgid "Jabber ID: "
 msgstr "Jabber ID: "
 
-#: ../src/tooltips.py:397 ../src/tooltips.py:619
+#: ../src/tooltips.py:396
+#: ../src/tooltips.py:617
 msgid "Resource: "
 msgstr "Ресурс: "
 
-#: ../src/tooltips.py:403
+#: ../src/tooltips.py:402
 #, python-format
 msgid "%(owner_or_admin_or_member)s of this group chat"
 msgstr "%(owner_or_admin_or_member)s этой комнаты"
 
-#: ../src/tooltips.py:511
+#: ../src/tooltips.py:510
 msgid " [blocked]"
 msgstr "[заблокировано]"
 
-#: ../src/tooltips.py:515
+#: ../src/tooltips.py:514
 msgid " [minimized]"
 msgstr "[свернуто]"
 
-#: ../src/tooltips.py:530 ../src/tooltips.py:791
+#: ../src/tooltips.py:529
+#: ../src/tooltips.py:789
 msgid "Status: "
 msgstr "Статус: "
 
-#: ../src/tooltips.py:575
+#: ../src/tooltips.py:574
 #, python-format
 msgid "Last status: %s"
 msgstr "Последний статус: %s"
 
-#: ../src/tooltips.py:577
+#: ../src/tooltips.py:576
 #, python-format
 msgid " since %s"
 msgstr " с %s"
 
-#: ../src/tooltips.py:595
+#: ../src/tooltips.py:594
 msgid "Connected"
 msgstr "Подключен"
 
-#: ../src/tooltips.py:597
+#: ../src/tooltips.py:596
 msgid "Disconnected"
 msgstr "Отключен"
 
 #. ('both' is the normal sub so we don't show it)
-#: ../src/tooltips.py:626
+#: ../src/tooltips.py:624
 msgid "Subscription: "
 msgstr "Подписка: "
 
-#: ../src/tooltips.py:636
+#: ../src/tooltips.py:634
 msgid "OpenPGP: "
 msgstr "OpenPGP: "
 
-#: ../src/tooltips.py:659
+#: ../src/tooltips.py:657
 #, python-format
 msgid "Idle since %s"
 msgstr "Бездействует с %s"
 
-#: ../src/tooltips.py:660
+#: ../src/tooltips.py:658
 #, python-format
 msgid "Idle for %s"
 msgstr "Время бездействия %s"
 
-#: ../src/tooltips.py:714
-msgid "Mood: "
-msgstr "Настроение: "
+#: ../src/tooltips.py:712
+#, python-format
+msgid "Mood: %s"
+msgstr "Настроение: %s"
 
-#: ../src/tooltips.py:718
-msgid "Activity: "
-msgstr "Занятие: "
+#: ../src/tooltips.py:716
+#, python-format
+msgid "Activity: %s"
+msgstr "Занятие: %s"
 
-#: ../src/tooltips.py:722
-msgid "Tune: "
-msgstr "Слушаю: "
+#: ../src/tooltips.py:720
+#, python-format
+msgid "Tune: %s"
+msgstr "Слушаю: %s"
 
-#: ../src/tooltips.py:726
-msgid "Location: "
-msgstr "Местоположение: "
+#: ../src/tooltips.py:724
+#, python-format
+msgid "Location: %s"
+msgstr "Местоположение: %s"
 
-#: ../src/tooltips.py:751
+#: ../src/tooltips.py:749
 msgid "Download"
 msgstr "Скачать"
 
-#: ../src/tooltips.py:757
+#: ../src/tooltips.py:755
 msgid "Upload"
 msgstr "Загрузить"
 
-#: ../src/tooltips.py:764
+#: ../src/tooltips.py:762
 msgid "Type: "
 msgstr "Тип: "
 
-#: ../src/tooltips.py:770
+#: ../src/tooltips.py:768
 msgid "Transferred: "
 msgstr "Передано: "
 
-#: ../src/tooltips.py:773 ../src/tooltips.py:790
+#: ../src/tooltips.py:771
+#: ../src/tooltips.py:788
 msgid "Not started"
 msgstr "Не начато"
 
-#: ../src/tooltips.py:775
+#: ../src/tooltips.py:773
 msgid "Stopped"
 msgstr "Остановлено"
 
-#: ../src/tooltips.py:777 ../src/tooltips.py:780
+#: ../src/tooltips.py:775
+#: ../src/tooltips.py:778
 msgid "Completed"
 msgstr "Завершено"
 
-#: ../src/tooltips.py:783
+#: ../src/tooltips.py:781
 msgid "?transfer status:Paused"
 msgstr "Приостановлено"
 
 #. stalled is not paused. it is like 'frozen' it stopped alone
-#: ../src/tooltips.py:786
+#: ../src/tooltips.py:784
 msgid "Stalled"
 msgstr "Ожидание"
 
-#: ../src/tooltips.py:788
+#: ../src/tooltips.py:786
 msgid "Transferring"
 msgstr "Передается"
 
-#: ../src/tooltips.py:825
+#: ../src/tooltips.py:823
 msgid "This service has not yet responded with detailed information"
 msgstr "Этот сервис еще не сообщил информацию о себе"
 
-#: ../src/tooltips.py:828
+#: ../src/tooltips.py:826
 msgid ""
 "This service could not respond with detailed information.\n"
 "It is most likely legacy or broken"
@@ -11024,196 +10527,74 @@ msgstr ""
 "Этот сервис не может предоставить подробную информацию о себе. \n"
 "Скорее всего, он устарел или сломан"
 
-#: ../src/vcard.py:312
+#: ../src/upower_listener.py:31
+msgid "Machine going to sleep"
+msgstr ""
+
+#: ../src/vcard.py:296
 msgid "?Client:Unknown"
 msgstr "Неизвестен"
 
-#: ../src/vcard.py:314
+#: ../src/vcard.py:298
 msgid "?OS:Unknown"
 msgstr "Неизвестна"
 
-#: ../src/vcard.py:339
+#: ../src/vcard.py:323
 msgid "?Time:Unknown"
 msgstr "?Time:Неизвестно"
 
-#: ../src/vcard.py:363 ../src/vcard.py:373 ../src/vcard.py:581
+#: ../src/vcard.py:347
+#: ../src/vcard.py:357
+#: ../src/vcard.py:565
 #, python-format
 msgid "since %s"
 msgstr "с %s"
 
-#: ../src/vcard.py:396
+#: ../src/vcard.py:380
 msgid "?Role in Group Chat:<b>Role:</b>"
 msgstr "?Роль в групповом чате:<b>Роль:</b>"
 
-#: ../src/vcard.py:400
+#: ../src/vcard.py:384
 msgid "<b>Affiliation:</b>"
 msgstr "<b>Ранг:</b>"
 
-#: ../src/vcard.py:408
-msgid ""
-"This contact is interested in your presence information, but you are not "
-"interested in his/her presence"
-msgstr ""
-"Этот контакт хочет знать о вашем присутствии, но вам информация о его или её "
-"присутствии не интересна"
+#: ../src/vcard.py:392
+msgid "This contact is interested in your presence information, but you are not interested in his/her presence"
+msgstr "Этот контакт хочет знать о вашем присутствии, но вам информация о его или её присутствии не интересна"
 
-#: ../src/vcard.py:410
-msgid ""
-"You are interested in the contact's presence information, but he/she is not "
-"interested in yours"
-msgstr ""
-"Вам хочется получать информацию о присутствии контакта, но он или она не "
-"заинтересована в вашей."
+#: ../src/vcard.py:394
+msgid "You are interested in the contact's presence information, but he/she is not interested in yours"
+msgstr "Вам хочется получать информацию о присутствии контакта, но он или она не заинтересована в вашей."
 
-#: ../src/vcard.py:412
+#: ../src/vcard.py:396
 msgid "You and the contact are interested in each other's presence information"
 msgstr "Вы и контакт оба желаете знать о присутствии друг друга"
 
 #. None
-#: ../src/vcard.py:414
-msgid ""
-"You are not interested in the contact's presence, and neither he/she is "
-"interested in yours"
+#: ../src/vcard.py:398
+msgid "You are not interested in the contact's presence, and neither he/she is interested in yours"
 msgstr "Ни вы, ни ваш контакт не желаете знать о присутствии друг друга"
 
-#: ../src/vcard.py:421
+#: ../src/vcard.py:405
 msgid "You are waiting contact's answer about your subscription request"
 msgstr "Вы ожидаете ответа контакта на запрос на подписку"
 
-#: ../src/vcard.py:423
+#: ../src/vcard.py:407
 msgid "There is no pending subscription request."
 msgstr "Нет ожидающего запроса на подписку."
 
-#: ../src/vcard.py:428 ../src/vcard.py:482 ../src/vcard.py:604
+#: ../src/vcard.py:412
+#: ../src/vcard.py:466
+#: ../src/vcard.py:588
 msgid " resource with priority "
 msgstr " ресурс с приоритетом "
 
-#~ msgid "_Allow him/her to see my status"
-#~ msgstr "_Позволить ему или ей видеть мой статус"
-
-#~ msgid "English"
-#~ msgstr "Английский"
-
-#~ msgid "Belarusian"
-#~ msgstr "Белорусский"
-
-#~ msgid "Bulgarian"
-#~ msgstr "Болгарский"
-
-#~ msgid "Breton"
-#~ msgstr "Бретонский"
-
-#~ msgid "Czech"
-#~ msgstr "Чешский"
-
-#~ msgid "German"
-#~ msgstr "Немецкий"
-
-#~ msgid "Greek"
-#~ msgstr "Греческий"
-
-#~ msgid "British"
-#~ msgstr "Британский"
-
-#~ msgid "Esperanto"
-#~ msgstr "Эсперанто"
-
-#~ msgid "Spanish"
-#~ msgstr "Испанский"
-
-#~ msgid "Basque"
-#~ msgstr "Баскский"
-
-#~ msgid "French"
-#~ msgstr "Французский"
-
-#~ msgid "Croatian"
-#~ msgstr "Хорватский"
-
-#~ msgid "Italian"
-#~ msgstr "Итальянский"
-
-#~ msgid "Norwegian (b)"
-#~ msgstr "Норвежский (букмол)"
-
-#~ msgid "Dutch"
-#~ msgstr "Голландский"
-
-#~ msgid "Norwegian"
-#~ msgstr "Норвежский"
-
-#~ msgid "Polish"
-#~ msgstr "Польский"
-
-#~ msgid "Portuguese"
-#~ msgstr "Португальский"
-
-#~ msgid "Brazilian Portuguese"
-#~ msgstr "Португальский (Бразилия)"
-
-#~ msgid "Russian"
-#~ msgstr "Русский"
-
-#~ msgid "Serbian"
-#~ msgstr "Сербский"
-
-#~ msgid "Slovak"
-#~ msgstr "Словацкий"
-
-#~ msgid "Swedish"
-#~ msgstr "Шведский"
-
-#~ msgid "Chinese (Ch)"
-#~ msgstr "Китайский"
-
-#~ msgid "Hebrew"
-#~ msgstr "Иврит"
-
-#~ msgid "Spelling language"
-#~ msgstr "Язык проверки орфографии"
-
-#~ msgid "Check your connection or try again later"
-#~ msgstr "Проверьте настройки сети или попробуйте еще раз позже"
-
-#~ msgid "Show the contact's profile (Ctrl+I)"
-#~ msgstr "Показать информацию о контакте (Ctrl+I)"
-
-#~ msgid "Display m_ood of contacts in roster"
-#~ msgstr "Показывать на_строения для контактов в ростере"
-
-#~ msgid "Display _activity of contacts in roster"
-#~ msgstr "Показывать _занятия контактов в ростере"
-
-#~ msgid ""
-#~ "If checked, Gajim will display the activity of contacts in the roster "
-#~ "window"
-#~ msgstr ""
-#~ "Если отмечено, то Gajim будет показывать занятия контактов в окне ростера"
-
-#~ msgid "Display _tunes of contacts in roster"
-#~ msgstr "Отмечать контакты, слушающие музыку (tunes)"
-
-#~ msgid ""
-#~ "If checked, Gajim will display the tunes of contacts in the roster window"
-#~ msgstr ""
-#~ "Если отмечено, то Gajim будет показывать tunes контактов в окне ростера"
-
-#~ msgid ""
-#~ "If checked, Gajim will display the location of contacts in the roster "
-#~ "window"
-#~ msgstr ""
-#~ "Если отмечено, то Gajim будет показывать местоположение контактов в окне "
-#~ "ростера"
-
-#~ msgid "Mood: %s"
-#~ msgstr "Настроение: %s"
-
-#~ msgid "Activity: %s"
-#~ msgstr "Занятие: %s"
-
 #~ msgid "Gajim Instant Messenger"
 #~ msgstr "Клиент для мгновенных сообщений Gajim"
 
+#~ msgid "Fishing"
+#~ msgstr "Рыбалка"
+
 #~ msgid "label"
 #~ msgstr "статусное сообщение"
 
@@ -11604,6 +10985,9 @@ msgstr " ресурс с приоритетом "
 #~ "История конференций\n"
 #~ "История всех чатов"
 
+#~ msgid "Manage Accounts"
+#~ msgstr "Управление учетными записями"
+
 #~ msgid "gtk-delete"
 #~ msgstr "gtk-delete"
 
diff --git a/setup_win32.py b/setup_win32.py
index 2d1bc9560fe407e88bd3c94c9babeb907c9a6c16..b257a53e8b5a5151c2185f063f2ef124898f9ed9 100644
--- a/setup_win32.py
+++ b/setup_win32.py
@@ -31,9 +31,9 @@ if 'gtk' in os.listdir('.'):
 
 options = {
    'build_exe': {
-       'includes': ['gtk.keysyms', 'dumbdbm', 'dbhash', 'bsddb', 'new',
+       'includes': ['Gdk.KEY_, 'dumbdbm', 'dbhash', 'bsddb', 'new',
             'goocanvas', 'Crypto.PublicKey.DSA', 'Crypto.Hash.HMAC',
-            'numbers'],
+            'numbers', 'win32com.client', 'win32com.server'],
        'base': 'Win32GUI',
 	   'bin_excludes': [
             'iconv.dll', 'intl.dll', 'libatk-1.0-0.dll',
diff --git a/src/adhoc_commands.py b/src/adhoc_commands.py
index 376c8c68c383567f1053d02352ec1002d5957c3c..da598e9bd2c07e81bb76757b3e2cf45627790fa8 100644
--- a/src/adhoc_commands.py
+++ b/src/adhoc_commands.py
@@ -25,8 +25,8 @@
 # FIXME: think if we need caching command list. it may be wrong if there will
 # be entities that often change the list, it may be slow to fetch it every time
 
-import gobject
-import gtk
+from gi.repository import GLib
+from gi.repository import Gtk
 
 import nbxmpp
 from common import gajim
@@ -91,7 +91,7 @@ class CommandWindow:
             self.data_form_widget.destroy()
         self.data_form_widget = dataforms_widget.DataFormWidget()
         self.data_form_widget.show()
-        self.sending_form_stage_vbox.pack_start(self.data_form_widget)
+        self.sending_form_stage_vbox.pack_start(self.data_form_widget, True, True, 0)
 
         if self.commandnode:
             # Execute command
@@ -159,7 +159,7 @@ class CommandWindow:
         return self.stage_adhoc_commands_window_delete_event(self.window)
 
     def __del__(self):
-        print 'Object has been deleted.'
+        print('Object has been deleted.')
 
 # stage 1: waiting for command list
     def stage1(self):
@@ -236,13 +236,13 @@ class CommandWindow:
         # build the commands list radiobuttons
         first_radio = None
         for (commandnode, commandname) in self.commandlist:
-            radio = gtk.RadioButton(first_radio, label=commandname)
+            radio = Gtk.RadioButton.new_with_label_from_widget(first_radio, commandname)
             radio.connect("toggled", self.on_command_radiobutton_toggled,
                 commandnode)
             if not first_radio:
                 first_radio = radio
                 self.commandnode = commandnode
-            self.command_list_vbox.pack_start(radio, expand=False)
+            self.command_list_vbox.pack_start(radio, False, True, 0)
         self.command_list_vbox.show_all()
 
         self.stage_finish = self.stage2_finish
@@ -255,9 +255,9 @@ class CommandWindow:
         """
         Remove widgets we created. Not needed when the window is destroyed
         """
-        def remove_widget(widget):
+        def remove_widget(widget, param):
             self.command_list_vbox.remove(widget)
-        self.command_list_vbox.foreach(remove_widget)
+        self.command_list_vbox.foreach(remove_widget, None)
 
     def stage2_close_button_clicked(self, widget):
         self.stage_finish()
@@ -281,8 +281,6 @@ class CommandWindow:
         # close old stage
         self.stage_finish()
 
-        assert isinstance(self.commandnode, unicode)
-
         self.form_status = None
 
         self.stages_notebook.set_current_page(
@@ -321,8 +319,8 @@ class CommandWindow:
             dialog.destroy()
             cb()
 
-        dialog = dialogs.HigDialog(self.window, gtk.MESSAGE_WARNING,
-            gtk.BUTTONS_YES_NO, _('Cancel confirmation'),
+        dialog = dialogs.HigDialog(self.window, Gtk.MessageType.WARNING,
+            Gtk.ButtonsType.YES_NO, _('Cancel confirmation'),
             _('You are in process of executing command. Do you really want to '
             'cancel it?'), on_response_yes=on_yes)
         dialog.popup()
@@ -452,7 +450,7 @@ class CommandWindow:
 
         note = command.getTag('note')
         if note:
-            self.notes_label.set_text(note.getData().decode('utf-8'))
+            self.notes_label.set_text(note.getData())
             self.notes_label.set_no_show_all(False)
             self.notes_label.show()
         else:
@@ -510,7 +508,7 @@ class CommandWindow:
             try:
                 errorname = nbxmpp.NS_STANZAS + ' ' + str(errorid)
                 errordesc = nbxmpp.ERRORS[errorname][2]
-                error = errordesc.decode('utf-8')
+                error = errordesc
                 del errorname, errordesc
             except KeyError:        # when stanza doesn't have error description
                 error = _('Service returned an error.')
@@ -550,21 +548,21 @@ class CommandWindow:
         progressbar.pulse() method
         """
         assert not self.pulse_id
-        assert isinstance(progressbar, gtk.ProgressBar)
+        assert isinstance(progressbar, Gtk.ProgressBar)
 
         def callback():
             progressbar.pulse()
             return True     # important to keep callback be called back!
 
         # 12 times per second (80 miliseconds)
-        self.pulse_id = gobject.timeout_add(80, callback)
+        self.pulse_id = GLib.timeout_add(80, callback)
 
     def remove_pulsing(self):
         """
         Stop pulsing, useful when especially when removing widget
         """
         if self.pulse_id:
-            gobject.source_remove(self.pulse_id)
+            GLib.source_remove(self.pulse_id)
         self.pulse_id = None
 
 # handling xml stanzas
@@ -608,7 +606,6 @@ class CommandWindow:
         Send the command with data form. Wait for reply
         """
         # create the stanza
-        assert isinstance(self.commandnode, unicode)
         assert action in ('execute', 'prev', 'next', 'complete')
 
         stanza = nbxmpp.Iq(typ='set', to=self.jid)
diff --git a/src/advanced_configuration_window.py b/src/advanced_configuration_window.py
index 8bc256a030ea729774f105ec7d6aa54a9b29ce5c..ed5ca4067bbd19a2b2a7d78923e8a00abf1f7319 100644
--- a/src/advanced_configuration_window.py
+++ b/src/advanced_configuration_window.py
@@ -23,11 +23,12 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gtk
+from gi.repository import Gtk
 import gtkgui_helpers
-import gobject
+from gi.repository import GLib
 
 from common import gajim
+from common import helpers
 
 (
 OPT_TYPE,
@@ -50,12 +51,12 @@ def rate_limit(rate):
         timeout = [None]
         def f(*args, **kwargs):
             if timeout[0] is not None:
-                gobject.source_remove(timeout[0])
+                GLib.source_remove(timeout[0])
                 timeout[0] = None
             def timeout_func():
                 func(*args, **kwargs)
                 timeout[0] = None
-            timeout[0] = gobject.timeout_add(int(1000.0 / rate), timeout_func)
+            timeout[0] = GLib.timeout_add(int(1000.0 / rate), timeout_func)
         return f
     return decorator
 
@@ -98,32 +99,32 @@ class AdvancedConfigurationWindow(object):
 
         treeview = self.xml.get_object('advanced_treeview')
         self.treeview = treeview
-        self.model = gtk.TreeStore(str, str, str)
+        self.model = Gtk.TreeStore(str, str, str)
         self.fill_model()
-        self.model.set_sort_column_id(0, gtk.SORT_ASCENDING)
+        self.model.set_sort_column_id(0, Gtk.SortType.ASCENDING)
         self.modelfilter = self.model.filter_new()
         self.modelfilter.set_visible_func(self.visible_func)
 
-        renderer_text = gtk.CellRendererText()
-        col = treeview.insert_column_with_attributes(-1, _('Preference Name'),
-                renderer_text, text = 0)
+        renderer_text = Gtk.CellRendererText()
+        col = Gtk.TreeViewColumn(_('Preference Name'), renderer_text, text = 0)
+        treeview.insert_column(col, -1)
         col.set_resizable(True)
 
-        renderer_text = gtk.CellRendererText()
+        renderer_text = Gtk.CellRendererText()
         renderer_text.connect('edited', self.on_config_edited)
-        col = treeview.insert_column_with_attributes(-1, _('Value'),
-                renderer_text, text = 1)
+        col = Gtk.TreeViewColumn(_('Value'),renderer_text, text = 1)
+        treeview.insert_column(col, -1)
         col.set_cell_data_func(renderer_text, self.cb_value_column_data)
 
         col.props.resizable = True
-        col.set_property('expand',True)
-        col.set_property('sizing',gtk.TREE_VIEW_COLUMN_FIXED)
+        col.props.expand = True
+        col.props.sizing = Gtk.TreeViewColumnSizing.FIXED
 
-        renderer_text = gtk.CellRendererText()
-        col = treeview.insert_column_with_attributes(-1, _('Type'),
-                renderer_text, text = 2)
-        col.set_property('expand',True)
-        col.set_property('sizing',gtk.TREE_VIEW_COLUMN_FIXED)
+        renderer_text = Gtk.CellRendererText()
+        col = Gtk.TreeViewColumn(_('Type'), renderer_text, text = 2)
+        treeview.insert_column(col, -1)
+        col.props.expand = True
+        col.props.sizing = Gtk.TreeViewColumnSizing.FIXED
 
         treeview.set_model(self.modelfilter)
 
@@ -136,7 +137,7 @@ class AdvancedConfigurationWindow(object):
         self.restart_label.hide()
         gajim.interface.instances['advanced_config'] = self
 
-    def cb_value_column_data(self, col, cell, model, iter_):
+    def cb_value_column_data(self, col, cell, model, iter_, data):
         """
         Check if it's boolen or holds password stuff and if yes  make the
         cellrenderertext not editable, else - it's editable
@@ -154,10 +155,10 @@ class AdvancedConfigurationWindow(object):
         # path[1] is the key name
         # path[2] is the root of tree
         # last two is optional
-        path = [model[iter_][0].decode('utf-8')]
+        path = [model[iter_][0]]
         parent = model.iter_parent(iter_)
         while parent:
-            path.append(model[parent][0].decode('utf-8'))
+            path.append(model[parent][0])
             parent = model.iter_parent(parent)
         return path
 
@@ -195,17 +196,18 @@ class AdvancedConfigurationWindow(object):
     def on_advanced_treeview_row_activated(self, treeview, path, column):
         modelpath = self.modelfilter.convert_path_to_child_path(path)
         modelrow = self.model[modelpath]
-        option = modelrow[0].decode('utf-8')
+        option = modelrow[0]
         if modelrow[2] == self.types['boolean']:
             for key in self.right_true_dict.keys():
                 if self.right_true_dict[key] == modelrow[1]:
-                    modelrow[1] = key
+                    modelrow[1] = str(key)
             newval = {'False': True, 'True': False}[modelrow[1]]
-            if len(modelpath) > 1:
-                optnamerow = self.model[modelpath[0]]
-                optname = optnamerow[0].decode('utf-8')
-                keyrow = self.model[modelpath[:2]]
-                key = keyrow[0].decode('utf-8')
+            if len(modelpath.get_indices()) > 1:
+                optnamerow = self.model[modelpath.get_indices()[0]]
+                optname = optnamerow[0]
+                modelpath.up()
+                keyrow = self.model[modelpath]
+                key = keyrow[0]
                 self.remember_option(option + '\n' + key + '\n' + optname,
                         modelrow[1], newval)
                 gajim.config.set_per(optname, key, option, newval)
@@ -231,15 +233,17 @@ class AdvancedConfigurationWindow(object):
 
     def on_config_edited(self, cell, path, text):
         # convert modelfilter path to model path
+        path=Gtk.TreePath.new_from_string(path)
         modelpath = self.modelfilter.convert_path_to_child_path(path)
         modelrow = self.model[modelpath]
-        option = modelrow[0].decode('utf-8')
-        text = text.decode('utf-8')
-        if len(modelpath) > 1:
-            optnamerow = self.model[modelpath[0]]
-            optname = optnamerow[0].decode('utf-8')
-            keyrow = self.model[modelpath[:2]]
-            key = keyrow[0].decode('utf-8')
+        option = modelrow[0]
+        if modelpath.get_depth() > 2:
+            modelpath.up() # Get parent
+            keyrow = self.model[modelpath]
+            key = keyrow[0]
+            modelpath.up() # Get parent
+            optnamerow = self.model[modelpath]
+            optname = optnamerow[0]
             self.remember_option(option + '\n' + key + '\n' + optname, modelrow[1],
                     text)
             gajim.config.set_per(optname, key, option, text)
@@ -268,12 +272,12 @@ class AdvancedConfigurationWindow(object):
                     return
                 modelpath = self.modelfilter.convert_path_to_child_path(path)
                 modelrow = self.model[modelpath]
-                option = modelrow[0].decode('utf-8')
+                option = modelrow[0]
                 if len(modelpath) > 1:
                     optnamerow = self.model[modelpath[0]]
-                    optname = optnamerow[0].decode('utf-8')
+                    optname = optnamerow[0]
                     keyrow = self.model[modelpath[:2]]
-                    key = keyrow[0].decode('utf-8')
+                    key = keyrow[0]
                     self.remember_option(option + '\n' + key + '\n' + optname,
                         modelrow[C_VALUE], default)
                     gajim.config.set_per(optname, key, option, default)
@@ -285,7 +289,7 @@ class AdvancedConfigurationWindow(object):
             else:
                 if str(default) == model[iter_][C_VALUE]:
                     return
-                self.on_config_edited(None, path, str(default))
+                self.on_config_edited(None, path.to_string(), str(default))
 
     def on_advanced_close_button_clicked(self, widget):
         self.window.destroy()
@@ -308,11 +312,14 @@ class AdvancedConfigurationWindow(object):
                     if type_ == self.types['boolean']:
                         value = self.right_true_dict[option]
                     else:
-                        value = option
+                        try:
+                            value = str(option)
+                        except:
+                            value = option
                 self.model.append(parent, [name, value, type_])
 
-    def visible_func(self, model, treeiter):
-        search_string  = self.entry.get_text().decode('utf-8').lower()
+    def visible_func(self, model, treeiter, data):
+        search_string  = self.entry.get_text().lower()
         for it in tree_model_pre_order(model, treeiter):
             if model[it][C_TYPE] != '':
                 opt_path = self.get_option_path(model, it)
diff --git a/src/atom_window.py b/src/atom_window.py
index 078662c20a20167d2d159fcc7b39d32c40c4de19..8930da6d36ede3f60c70242859ca8cbdf8da5937 100644
--- a/src/atom_window.py
+++ b/src/atom_window.py
@@ -22,8 +22,8 @@
 ##
 
 
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import GLib
 
 import gtkgui_helpers
 from common import helpers
@@ -70,8 +70,8 @@ class AtomWindow:
         self.xml.connect_signals(self)
         self.window.show_all()
 
-        self.entry_title_eventbox.add_events(gtk.gdk.BUTTON_PRESS_MASK)
-        self.feed_title_eventbox.add_events(gtk.gdk.BUTTON_PRESS_MASK)
+        self.entry_title_eventbox.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
+        self.feed_title_eventbox.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
 
     def displayNextEntry(self):
         """
@@ -84,24 +84,24 @@ class AtomWindow:
         # fill the fields
         if newentry.feed_link is not None:
             self.feed_title_label.set_markup(
-                u'<span foreground="blue" underline="single">%s</span>' % \
-                gobject.markup_escape_text(newentry.feed_title))
+                '<span foreground="blue" underline="single">%s</span>' % \
+                GLib.markup_escape_text(newentry.feed_title))
         else:
-            self.feed_title_label.set_markup(
-                gobject.markup_escape_text(newentry.feed_title))
+            self.feed_title_label.set_markup(GLib.markup_escape_text(
+                newentry.feed_title))
 
         self.feed_tagline_label.set_markup(
-            u'<small>%s</small>' % \
-            gobject.markup_escape_text(newentry.feed_tagline))
+            '<small>%s</small>' % GLib.markup_escape_text(
+            newentry.feed_tagline))
 
         if newentry.title:
             if newentry.uri is not None:
                 self.entry_title_label.set_markup(
-                    u'<span foreground="blue" underline="single">%s</span>' % \
-                    gobject.markup_escape_text(newentry.title))
+                    '<span foreground="blue" underline="single">%s</span>' % \
+                    GLib.markup_escape_text(newentry.title))
             else:
-                self.entry_title_label.set_markup(
-                    gobject.markup_escape_text(newentry.title))
+                self.entry_title_label.set_markup(GLib.markup_escape_text(
+                    newentry.title))
         else:
             self.entry_title_label.set_markup('')
 
diff --git a/src/cell_renderer_image.py b/src/cell_renderer_image.py
index d32da9a4c6c84b1d67cd073688c5ffde6e0997f5..4a573bc4680f301dbe61cb18aa09c3bce6b0ba3e 100644
--- a/src/cell_renderer_image.py
+++ b/src/cell_renderer_image.py
@@ -21,19 +21,20 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
+from gi.repository import GLib
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GObject
 
-import gtk
-import gobject
-
-class CellRendererImage(gtk.GenericCellRenderer):
+class CellRendererImage(Gtk.CellRendererPixbuf):
 
     __gproperties__ = {
-            'image': (gobject.TYPE_OBJECT, 'Image',
-                    'Image', gobject.PARAM_READWRITE),
+            'image': (GObject.TYPE_OBJECT, 'Image',
+                    'Image', GObject.PARAM_READWRITE),
     }
 
     def __init__(self, col_index, tv_index):
-        self.__gobject_init__()
+        super(CellRendererImage, self).__init__()
         self.image = None
         self.col_index = col_index
         self.tv_index = tv_index
@@ -45,6 +46,14 @@ class CellRendererImage(gtk.GenericCellRenderer):
     def do_get_property(self, pspec):
         return getattr(self, pspec.name)
 
+    def do_activate(event, widget, path, bg_area, cell_area, flags):
+        """Renderers cannot be activated; always return True."""
+        return True
+
+    def do_editing_started(event, widget, path, fb_area, cell_area, flags):
+        """Renderers cannot be edited; always return None."""
+        return None
+
     def func(self, model, path, iter_, image_tree):
         image, tree = image_tree
         if model.get_value(iter_, self.tv_index) != image:
@@ -53,71 +62,67 @@ class CellRendererImage(gtk.GenericCellRenderer):
         col = tree.get_column(self.col_index)
         cell_area = tree.get_cell_area(path, col)
 
-        tree.queue_draw_area(cell_area.x, cell_area.y,
-                                cell_area.width, cell_area.height)
+        tree.queue_draw_area(cell_area.x, cell_area.y, cell_area.width,
+            cell_area.height)
 
     def animation_timeout(self, tree, image):
-        if image.get_storage_type() != gtk.IMAGE_ANIMATION:
+        if image.get_storage_type() != Gtk.ImageType.ANIMATION:
             return
         self.redraw = 0
         iter_ = self.iters[image]
-        iter_.advance()
+        timeval = GLib.TimeVal()
+        timeval.tv_sec = GLib.get_monotonic_time() / 1000000
+        iter_.advance(timeval)
         model = tree.get_model()
         if model:
             model.foreach(self.func, (image, tree))
         if self.redraw:
-            gobject.timeout_add(iter_.get_delay_time(),
-                            self.animation_timeout, tree, image)
+            GLib.timeout_add(iter_.get_delay_time(),
+                self.animation_timeout, tree, image)
         elif image in self.iters:
             del self.iters[image]
 
-    def on_render(self, window, widget, background_area, cell_area,
-                                    expose_area, flags):
+    def do_render(self, ctx, widget, background_area, cell_area, flags):
         if not self.image:
             return
-        pix_rect = gtk.gdk.Rectangle()
-        pix_rect.x, pix_rect.y, pix_rect.width, pix_rect.height = \
-                self.on_get_size(widget, cell_area)
-
-        pix_rect.x += cell_area.x
-        pix_rect.y += cell_area.y
-        pix_rect.width -= 2 * self.get_property('xpad')
-        pix_rect.height -= 2 * self.get_property('ypad')
-
-        draw_rect = cell_area.intersect(pix_rect)
-        draw_rect = expose_area.intersect(draw_rect)
 
-        if self.image.get_storage_type() == gtk.IMAGE_ANIMATION:
+        if self.image.get_storage_type() == Gtk.ImageType.ANIMATION:
             if self.image not in self.iters:
-                if not isinstance(widget, gtk.TreeView):
+                if not isinstance(widget, Gtk.TreeView):
                     return
                 animation = self.image.get_animation()
-                iter_ = animation.get_iter()
+                timeval = GLib.TimeVal()
+                timeval.tv_sec = GLib.get_monotonic_time() / 1000000
+                iter_ = animation.get_iter(timeval)
                 self.iters[self.image] = iter_
-                gobject.timeout_add(iter_.get_delay_time(),
-                        self.animation_timeout, widget, self.image)
+                GLib.timeout_add(iter_.get_delay_time(), self.animation_timeout,
+                    widget, self.image)
 
             pix = self.iters[self.image].get_pixbuf()
-        elif self.image.get_storage_type() == gtk.IMAGE_PIXBUF:
+        elif self.image.get_storage_type() == Gtk.ImageType.PIXBUF:
             pix = self.image.get_pixbuf()
         else:
             return
-        if draw_rect.x < 1:
-            return
-        window.draw_pixbuf(widget.style.black_gc, pix,
-                                draw_rect.x - pix_rect.x,
-                                draw_rect.y - pix_rect.y,
-                                draw_rect.x, draw_rect.y,
-                                draw_rect.width, draw_rect.height,
-                                gtk.gdk.RGB_DITHER_NONE, 0, 0)
-
-    def on_get_size(self, widget, cell_area):
+
+        Gdk.cairo_set_source_pixbuf(ctx, pix, cell_area.x, cell_area.y)
+        ctx.paint()
+
+    def do_get_size(self, widget, cell_area):
+        """
+        Return the size we need for this cell.
+
+        Each cell is drawn individually and is only as wide as it needs
+        to be, we let the TreeViewColumn take care of making them all
+        line up.
+        """
         if not self.image:
             return 0, 0, 0, 0
-        if self.image.get_storage_type() == gtk.IMAGE_ANIMATION:
+        if self.image.get_storage_type() == Gtk.ImageType.ANIMATION:
             animation = self.image.get_animation()
-            pix = animation.get_iter().get_pixbuf()
-        elif self.image.get_storage_type() == gtk.IMAGE_PIXBUF:
+            timeval = GLib.TimeVal()
+            timeval.tv_sec = GLib.get_monotonic_time() / 1000000
+            pix = animation.get_iter(timeval).get_pixbuf()
+        elif self.image.get_storage_type() == Gtk.ImageType.PIXBUF:
             pix = self.image.get_pixbuf()
         else:
             return 0, 0, 0, 0
diff --git a/src/chat_control.py b/src/chat_control.py
index 25cce3eac5ce3afd76d465485efc532c8cb55a49..4d133a3900ed402026e0c05b48d9f8f4ebfa952b 100644
--- a/src/chat_control.py
+++ b/src/chat_control.py
@@ -29,9 +29,12 @@
 
 import os
 import time
-import gtk
-import pango
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository import Pango
+from gi.repository import GObject
+from gi.repository import GLib
 import gtkgui_helpers
 import gui_menu_builder
 import message_control
@@ -86,13 +89,13 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
     A base class containing a banner, ConversationTextview, MessageTextView
     """
 
-    keymap = gtk.gdk.keymap_get_default()
+    keymap = Gdk.Keymap.get_default()
     try:
-        keycode_c = keymap.get_entries_for_keyval(gtk.keysyms.c)[0][0]
+        keycode_c = keymap.get_entries_for_keyval(Gdk.KEY_c)[1][0].keycode
     except TypeError:
         keycode_c = 54
     try:
-        keycode_ins = keymap.get_entries_for_keyval(gtk.keysyms.Insert)[0][0]
+        keycode_ins = keymap.get_entries_for_keyval(Gdk.KEY_Insert)[1][0].keycode
     except TypeError:
         keycode_ins = 118
 
@@ -113,22 +116,22 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         bannerfontattrs = gajim.config.get_per('themes', theme, 'bannerfontattrs')
 
         if bannerfont:
-            font = pango.FontDescription(bannerfont)
+            font = Pango.FontDescription(bannerfont)
         else:
-            font = pango.FontDescription('Normal')
+            font = Pango.FontDescription('Normal')
         if bannerfontattrs:
             # B attribute is set by default
             if 'B' in bannerfontattrs:
-                font.set_weight(pango.WEIGHT_HEAVY)
+                font.set_weight(Pango.Weight.HEAVY)
             if 'I' in bannerfontattrs:
-                font.set_style(pango.STYLE_ITALIC)
+                font.set_style(Pango.Style.ITALIC)
 
         font_attrs = 'font_desc="%s"' % font.to_string()
 
         # in case there is no font specified we use x-large font size
         if font.get_size() == 0:
             font_attrs = '%s size="x-large"' % font_attrs
-        font.set_weight(pango.WEIGHT_NORMAL)
+        font.set_weight(Pango.Weight.NORMAL)
         font_attrs_small = 'font_desc="%s" size="small"' % font.to_string()
         return (font_attrs, font_attrs_small)
 
@@ -224,7 +227,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         Derives types SHOULD implement this, rather than connection to the even
         itself
         """
-        event = gtk.gdk.Event(gtk.gdk.KEY_PRESS)
+        event = Gdk.Event(Gdk.EventType.KEY_PRESS)
         event.keyval = event_keyval
         event.state = event_keymod
         event.time = 0
@@ -232,12 +235,11 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         _buffer = widget.get_buffer()
         start, end = _buffer.get_bounds()
 
-        if event.keyval -- gtk.keysyms.Tab:
+        if event.keyval -- Gdk.KEY_Tab:
             position = _buffer.get_insert()
             end = _buffer.get_iter_at_mark(position)
 
             text = _buffer.get_text(start, end, False)
-            text = text.decode('utf8')
 
             splitted = text.split()
 
@@ -279,9 +281,9 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         self.seclabel_combo = combo
         self.seclabel_combo.hide()
         self.seclabel_combo.set_no_show_all(True)
-        lb = gtk.ListStore(str)
+        lb = Gtk.ListStore(str)
         self.seclabel_combo.set_model(lb)
-        cell = gtk.CellRendererText()
+        cell = Gtk.CellRendererText()
         cell.set_property('xpad', 5)  # padding for status text
         self.seclabel_combo.pack_start(cell, True)
         # text to show is in in first column of liststore
@@ -325,11 +327,8 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         widget = self.xml.get_object('history_button')
         # set document-open-recent icon for history button
         if gtkgui_helpers.gtk_icon_theme.has_icon('document-open-recent'):
-            if widget_name == 'groupchat_control':
-                img = self.xml.get_object('image8')
-            else:
-                img = self.xml.get_object('image5')
-            img.set_from_icon_name('document-open-recent', gtk.ICON_SIZE_MENU)
+            img = self.xml.get_object('history_image')
+            img.set_from_icon_name('document-open-recent', Gtk.IconSize.MENU)
 
         id_ = widget.connect('clicked', self._on_history_menuitem_activate)
         self.handlers[id_] = widget
@@ -356,15 +355,15 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
 
         # Init DND
         self.TARGET_TYPE_URI_LIST = 80
-        self.dnd_list = [('text/uri-list', 0, self.TARGET_TYPE_URI_LIST),
-            ('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_APP, 0)]
+        self.dnd_list = [Gtk.TargetEntry.new('text/uri-list', 0,
+            self.TARGET_TYPE_URI_LIST), Gtk.TargetEntry.new('MY_TREE_MODEL_ROW',
+            Gtk.TargetFlags.SAME_APP, 0)]
         id_ = self.widget.connect('drag_data_received',
             self._on_drag_data_received)
         self.handlers[id_] = self.widget
-        self.widget.drag_dest_set(gtk.DEST_DEFAULT_MOTION |
-            gtk.DEST_DEFAULT_HIGHLIGHT |
-            gtk.DEST_DEFAULT_DROP,
-            self.dnd_list, gtk.gdk.ACTION_COPY)
+        self.widget.drag_dest_set(Gtk.DestDefaults.MOTION |
+            Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP,
+            self.dnd_list, Gdk.DragAction.COPY)
 
         # Create textviews and connect signals
         self.conv_textview = ConversationTextview(self.account)
@@ -382,10 +381,9 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         self.handlers[id_] = self.conv_textview.tv
         id_ = self.conv_textview.tv.connect('drag_leave', self._on_drag_leave)
         self.handlers[id_] = self.conv_textview.tv
-        self.conv_textview.tv.drag_dest_set(gtk.DEST_DEFAULT_MOTION |
-            gtk.DEST_DEFAULT_HIGHLIGHT |
-            gtk.DEST_DEFAULT_DROP,
-            self.dnd_list, gtk.gdk.ACTION_COPY)
+        self.conv_textview.tv.drag_dest_set(Gtk.DestDefaults.MOTION |
+            Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP,
+            self.dnd_list, Gdk.DragAction.COPY)
 
         self.conv_scrolledwindow = self.xml.get_object(
             'conversation_scrolledwindow')
@@ -415,7 +413,8 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         id_ = self.msg_textview.connect('key_press_event',
             self._on_message_textview_key_press_event)
         self.handlers[id_] = self.msg_textview
-        id_ = self.msg_textview.connect('size-request', self.size_request)
+        id_ = self.msg_textview.connect('configure-event',
+            self.on_configure_event)
         self.handlers[id_] = self.msg_textview
         id_ = self.msg_textview.connect('populate_popup',
             self.on_msg_textview_populate_popup)
@@ -424,9 +423,8 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         id_ = self.msg_textview.connect('drag_data_received',
             self._on_drag_data_received)
         self.handlers[id_] = self.msg_textview
-        self.msg_textview.drag_dest_set(gtk.DEST_DEFAULT_MOTION |
-            gtk.DEST_DEFAULT_HIGHLIGHT,
-            self.dnd_list, gtk.gdk.ACTION_COPY)
+        self.msg_textview.drag_dest_set(Gtk.DestDefaults.MOTION |
+            Gtk.DestDefaults.HIGHLIGHT, self.dnd_list, Gdk.DragAction.COPY)
 
         self.update_font()
 
@@ -502,14 +500,14 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
             try:
                 gtkspell.Spell(self.msg_textview, lang)
                 self.msg_textview.lang = lang
-            except (gobject.GError, RuntimeError, TypeError, OSError):
+            except (GObject.GError, RuntimeError, TypeError, OSError):
                 dialogs.AspellDictError(lang)
 
     def on_banner_label_populate_popup(self, label, menu):
         """
         Override the default context menu and add our own menutiems
         """
-        item = gtk.SeparatorMenuItem()
+        item = Gtk.SeparatorMenuItem.new()
         menu.prepend(item)
 
         menu2 = self.prepare_context_menu()
@@ -552,15 +550,15 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
             spell.set_language(lang)
             widget.set_active(True)
 
-        item = gtk.ImageMenuItem(gtk.STOCK_UNDO)
+        item = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_UNDO, None)
         menu.prepend(item)
         id_ = item.connect('activate', self.msg_textview.undo)
         self.handlers[id_] = item
 
-        item = gtk.SeparatorMenuItem()
+        item = Gtk.SeparatorMenuItem.new()
         menu.prepend(item)
 
-        item = gtk.ImageMenuItem(gtk.STOCK_CLEAR)
+        item = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_CLEAR, None)
         menu.prepend(item)
         id_ = item.connect('activate', self.msg_textview.clear)
         self.handlers[id_] = item
@@ -587,7 +585,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         message_buffer = self.msg_textview.get_buffer()
         start_iter = message_buffer.get_start_iter()
         end_iter = message_buffer.get_end_iter()
-        message = message_buffer.get_text(start_iter, end_iter, 0).decode('utf-8')
+        message = message_buffer.get_text(start_iter, end_iter, False)
         xhtml = self.msg_textview.get_xhtml()
 
         # send the message
@@ -607,23 +605,27 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         self.disconnect_style_event(banner_name_label)
         self.disconnect_style_event(self.banner_status_label)
         if bgcolor:
-            banner_eventbox.modify_bg(gtk.STATE_NORMAL,
-                    gtk.gdk.color_parse(bgcolor))
+            color = Gdk.RGBA()
+            Gdk.RGBA.parse(color, bgcolor)
+            banner_eventbox.override_background_color(Gtk.StateType.NORMAL,
+                color)
             default_bg = False
         else:
             default_bg = True
         if textcolor:
-            banner_name_label.modify_fg(gtk.STATE_NORMAL,
-                    gtk.gdk.color_parse(textcolor))
-            self.banner_status_label.modify_fg(gtk.STATE_NORMAL,
-                    gtk.gdk.color_parse(textcolor))
+            color = Gdk.RGBA()
+            Gdk.RGBA.parse(color, textcolor)
+            banner_name_label.override_color(Gtk.StateType.NORMAL,
+                color)
+            self.banner_status_label.override_color(
+                Gtk.StateType.NORMAL, color)
             default_fg = False
         else:
             default_fg = True
         if default_bg or default_fg:
             self._on_style_set_event(banner_name_label, None, default_fg,
                     default_bg)
-            if self.banner_status_label.flags() & gtk.REALIZED:
+            if self.banner_status_label.get_realized():
                 # Widget is realized
                 self._on_style_set_event(self.banner_status_label, None, default_fg,
                         default_bg)
@@ -639,7 +641,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
     def connect_style_event(self, widget, set_fg=False, set_bg=False):
         self.disconnect_style_event(widget)
         id_ = widget.connect('style-set', self._on_style_set_event, set_fg,
-                set_bg)
+            set_bg)
         self.handlers[id_] = widget
 
     def _on_style_set_event(self, widget, style, *opts):
@@ -650,93 +652,124 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         """
         banner_eventbox = self.xml.get_object('banner_eventbox')
         self.disconnect_style_event(widget)
+        context = widget.get_style_context()
         if opts[1]:
-            bg_color = widget.style.bg[gtk.STATE_SELECTED]
-            banner_eventbox.modify_bg(gtk.STATE_NORMAL, bg_color)
+            bg_color = context.get_background_color(Gtk.StateFlags.SELECTED)
+            banner_eventbox.override_background_color(Gtk.StateType.NORMAL, bg_color)
         if opts[0]:
-            fg_color = widget.style.fg[gtk.STATE_SELECTED]
-            widget.modify_fg(gtk.STATE_NORMAL, fg_color)
+            fg_color = context.get_color(Gtk.StateFlags.SELECTED)
+            widget.override_color(Gtk.StateType.NORMAL, fg_color)
         self.connect_style_event(widget, opts[0], opts[1])
 
     def _conv_textview_key_press_event(self, widget, event):
         # translate any layout to latin_layout
-        keymap = gtk.gdk.keymap_get_default()
-        keycode = keymap.get_entries_for_keyval(event.keyval)[0][0]
-        if (event.state & gtk.gdk.CONTROL_MASK and keycode in (self.keycode_c,
-        self.keycode_ins)) or (event.state & gtk.gdk.SHIFT_MASK and \
-        event.keyval in (gtk.keysyms.Page_Down, gtk.keysyms.Page_Up)):
+        valid, entries = self.keymap.get_entries_for_keyval(event.keyval)
+        keycode = entries[0].keycode
+        if (event.get_state() & Gdk.ModifierType.CONTROL_MASK and keycode in (
+        self.keycode_c, self.keycode_ins)) or (
+        event.get_state() & Gdk.ModifierType.SHIFT_MASK and \
+        event.keyval in (Gdk.KEY_Page_Down, Gdk.KEY_Page_Up)):
             return False
-        self.parent_win.notebook.emit('key_press_event', event)
+        self.parent_win.notebook.event(event)
         return True
 
     def show_emoticons_menu(self):
         if not gajim.config.get('emoticons_theme'):
             return
-
-        def set_emoticons_menu_position(w, msg_tv=self.msg_textview):
-            window = msg_tv.get_window(gtk.TEXT_WINDOW_WIDGET)
-            # get the window position
-            origin = window.get_origin()
-            size = window.get_size()
-            buf = msg_tv.get_buffer()
-            # get the cursor position
-            cursor = msg_tv.get_iter_location(buf.get_iter_at_mark(
-                    buf.get_insert()))
-            cursor = msg_tv.buffer_to_window_coords(gtk.TEXT_WINDOW_TEXT,
-                    cursor.x, cursor.y)
-            x = origin[0] + cursor[0]
-            y = origin[1] + size[1]
-            menu_height = gajim.interface.emoticons_menu.size_request()[1]
-            #FIXME: get_line_count is not so good
-            #get the iter of cursor, then tv.get_line_yrange
-            # so we know in which y we are typing (not how many lines we have
-            # then go show just above the current cursor line for up
-            # or just below the current cursor line for down
-            #TEST with having 3 lines and writing in the 2nd
-            if y + menu_height > gtk.gdk.screen_height():
-                # move menu just above cursor
-                y -= menu_height + (msg_tv.allocation.height / buf.get_line_count())
-            #else: # move menu just below cursor
-            #       y -= (msg_tv.allocation.height / buf.get_line_count())
-            return (x, y, True)  # push_in True
         gajim.interface.emoticon_menuitem_clicked = self.append_emoticon
-        gajim.interface.emoticons_menu.popup(None, None,
-                set_emoticons_menu_position, 1, 0)
+        gajim.interface.emoticons_menu.popup(None, None, None, None, 1, 0)
 
     def _on_message_textview_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.space:
+        if event.keyval == Gdk.KEY_space:
             self.space_pressed = True
 
         elif (self.space_pressed or self.msg_textview.undo_pressed) and \
-        event.keyval not in (gtk.keysyms.Control_L, gtk.keysyms.Control_R) and \
-        not (event.keyval == gtk.keysyms.z and event.state & gtk.gdk.CONTROL_MASK):
+        event.keyval not in (Gdk.KEY_Control_L, Gdk.KEY_Control_R) and \
+        not (event.keyval == Gdk.KEY_z and event.get_state() & Gdk.ModifierType.CONTROL_MASK):
             # If the space key has been pressed and now it hasnt,
             # we save the buffer into the undo list. But be carefull we're not
             # pressiong Control again (as in ctrl+z)
             _buffer = widget.get_buffer()
             start_iter, end_iter = _buffer.get_bounds()
-            self.msg_textview.save_undo(_buffer.get_text(start_iter, end_iter))
+            self.msg_textview.save_undo(_buffer.get_text(start_iter, end_iter, True))
             self.space_pressed = False
 
         # Ctrl [+ Shift] + Tab are not forwarded to notebook. We handle it here
         if self.widget_name == 'groupchat_control':
-            if event.keyval not in (gtk.keysyms.ISO_Left_Tab, gtk.keysyms.Tab):
+            if event.keyval not in (Gdk.KEY_ISO_Left_Tab, Gdk.KEY_Tab):
                 self.last_key_tabs = False
-        if event.state & gtk.gdk.SHIFT_MASK:
+        if event.get_state() & Gdk.ModifierType.SHIFT_MASK:
             # CTRL + SHIFT + TAB
-            if event.state & gtk.gdk.CONTROL_MASK and \
-                            event.keyval == gtk.keysyms.ISO_Left_Tab:
+            if event.get_state() & Gdk.ModifierType.CONTROL_MASK and \
+                            event.keyval == Gdk.KEY_ISO_Left_Tab:
                 self.parent_win.move_to_next_unread_tab(False)
                 return True
             # SHIFT + PAGE_[UP|DOWN]: send to conv_textview
-            elif event.keyval == gtk.keysyms.Page_Down or \
-                            event.keyval == gtk.keysyms.Page_Up:
-                self.conv_textview.tv.emit('key_press_event', event)
+            elif event.keyval == Gdk.KEY_Page_Down or \
+                            event.keyval == Gdk.KEY_Page_Up:
+                self.conv_textview.tv.event(event)
                 return True
-        elif event.state & gtk.gdk.CONTROL_MASK:
-            if event.keyval == gtk.keysyms.Tab:  # CTRL + TAB
+        elif event.get_state() & Gdk.ModifierType.CONTROL_MASK:
+            if event.keyval == Gdk.KEY_Tab:  # CTRL + TAB
                 self.parent_win.move_to_next_unread_tab(True)
                 return True
+################################################################################
+        # temporary solution instead Gtk.binding_entry_add_signal
+        message_buffer = self.msg_textview.get_buffer()
+        event_state = event.get_state()
+        if event.keyval == Gdk.KEY_Up:
+            if event_state & Gdk.ModifierType.CONTROL_MASK:
+                if event_state & Gdk.ModifierType.SHIFT_MASK: # Ctrl+Shift+UP
+                    self.scroll_messages('up', message_buffer, 'received')
+                else:  # Ctrl+UP
+                    self.scroll_messages('up', message_buffer, 'sent')
+            return True
+        elif event.keyval == Gdk.KEY_Down:
+            if event_state & Gdk.ModifierType.CONTROL_MASK:
+                if event_state & Gdk.ModifierType.SHIFT_MASK: # Ctrl+Shift+Down
+                    self.scroll_messages('down', message_buffer, 'received')
+                else:  # Ctrl+Down
+                    self.scroll_messages('down', message_buffer, 'sent')
+            return True
+
+        elif event.keyval == Gdk.KEY_Return or \
+        event.keyval == Gdk.KEY_KP_Enter:  # ENTER
+            message_textview = widget
+            message_buffer = message_textview.get_buffer()
+            start_iter, end_iter = message_buffer.get_bounds()
+            message = message_buffer.get_text(start_iter, end_iter, False)
+            xhtml = self.msg_textview.get_xhtml()
+
+            if gajim.config.get('send_on_ctrl_enter'):
+                if event_state & Gdk.ModifierType.CONTROL_MASK:  # CTRL + ENTER
+                    send_message = True
+                else:
+                    end_iter = message_buffer.get_end_iter()
+                    message_buffer.insert_at_cursor('\n')
+                    send_message = False
+
+            else: # send on Enter, do newline on Ctrl Enter
+                if event_state & Gdk.ModifierType.CONTROL_MASK:  # Ctrl + ENTER
+                    end_iter = message_buffer.get_end_iter()
+                    message_buffer.insert_at_cursor('\n')
+                    send_message = False
+                else: # ENTER
+                    send_message = True
+
+            if gajim.connections[self.account].connected < 2 and send_message:
+                # we are not connected
+                dialogs.ErrorDialog(_('A connection is not available'),
+                        _('Your message can not be sent until you are connected.'))
+                send_message = False
+
+            if send_message:
+                self.send_message(message, xhtml=xhtml) # send the message
+            return True
+        elif event.keyval == Gdk.KEY_z: # CTRL+z
+            if event_state & Gdk.ModifierType.CONTROL_MASK:
+                self.msg_textview.undo()
+                return True
+################################################################################
         return False
 
     def _on_message_textview_mykeypress_event(self, widget, event_keyval,
@@ -750,30 +783,29 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         message_textview = widget
         message_buffer = message_textview.get_buffer()
         start_iter, end_iter = message_buffer.get_bounds()
-        message = message_buffer.get_text(start_iter, end_iter, False).decode(
-                'utf-8')
+        message = message_buffer.get_text(start_iter, end_iter, False)
         xhtml = self.msg_textview.get_xhtml()
 
         # construct event instance from binding
-        event = gtk.gdk.Event(gtk.gdk.KEY_PRESS)  # it's always a key-press here
+        event = Gdk.Event(Gdk.EventType.KEY_PRESS)  # it's always a key-press here
         event.keyval = event_keyval
         event.state = event_keymod
         event.time = 0  # assign current time
 
-        if event.keyval == gtk.keysyms.Up:
-            if event.state == gtk.gdk.CONTROL_MASK:  # Ctrl+UP
+        if event.keyval == Gdk.KEY_Up:
+            if event.get_state() == Gdk.ModifierType.CONTROL_MASK:  # Ctrl+UP
                 self.scroll_messages('up', message_buffer, 'sent')
             # Ctrl+Shift+UP
-            elif event.state == (gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK):
+            elif event.get_state() == (Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK):
                 self.scroll_messages('up', message_buffer, 'received')
-        elif event.keyval == gtk.keysyms.Down:
-            if event.state == gtk.gdk.CONTROL_MASK:  # Ctrl+Down
+        elif event.keyval == Gdk.KEY_Down:
+            if event.get_state() == Gdk.ModifierType.CONTROL_MASK:  # Ctrl+Down
                 self.scroll_messages('down', message_buffer, 'sent')
             # Ctrl+Shift+Down
-            elif event.state == (gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK):
+            elif event.get_state() == (Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK):
                 self.scroll_messages('down', message_buffer, 'received')
-        elif event.keyval == gtk.keysyms.Return or \
-                event.keyval == gtk.keysyms.KP_Enter:  # ENTER
+        elif event.keyval == Gdk.KEY_Return or \
+                event.keyval == Gdk.KEY_KP_Enter:  # ENTER
             # NOTE: SHIFT + ENTER is not needed to be emulated as it is not
             # binding at all (textview's default action is newline)
 
@@ -781,14 +813,14 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
                 # here, we emulate GTK default action on ENTER (add new line)
                 # normally I would add in keypress but it gets way to complex
                 # to get instant result on changing this advanced setting
-                if event.state == 0:  # no ctrl, no shift just ENTER add newline
+                if event.get_state() == 0:  # no ctrl, no shift just ENTER add newline
                     end_iter = message_buffer.get_end_iter()
                     message_buffer.insert_at_cursor('\n')
                     send_message = False
-                elif event.state & gtk.gdk.CONTROL_MASK:  # CTRL + ENTER
+                elif event.get_state() & Gdk.ModifierType.CONTROL_MASK:  # CTRL + ENTER
                     send_message = True
             else: # send on Enter, do newline on Ctrl Enter
-                if event.state & gtk.gdk.CONTROL_MASK:  # Ctrl + ENTER
+                if event.get_state() & Gdk.ModifierType.CONTROL_MASK:  # Ctrl + ENTER
                     end_iter = message_buffer.get_end_iter()
                     message_buffer.insert_at_cursor('\n')
                     send_message = False
@@ -803,8 +835,8 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
 
             if send_message:
                 self.send_message(message, xhtml=xhtml) # send the message
-        elif event.keyval == gtk.keysyms.z: # CTRL+z
-            if event.state & gtk.gdk.CONTROL_MASK:
+        elif event.keyval == Gdk.KEY_z: # CTRL+z
+            if event.get_state() & Gdk.ModifierType.CONTROL_MASK:
                 self.msg_textview.undo()
         else:
             # Give the control itself a chance to process
@@ -894,7 +926,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         scroll = False if pos == size else True # are we scrolling?
         # we don't want size of the buffer to grow indefinately
         max_size = gajim.config.get('key_up_lines')
-        for i in xrange(size - max_size + 1):
+        for i in range(size - max_size + 1):
             if pos == 0:
                 break
             history.pop(0)
@@ -1040,7 +1072,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         """
         Popup formattings menu
         """
-        menu = gtk.Menu()
+        menu = Gtk.Menu()
 
         menuitems = ((_('Bold'), 'bold'),
         (_('Italic'), 'italic'),
@@ -1050,7 +1082,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         active_tags = self.msg_textview.get_active_tags()
 
         for menuitem in menuitems:
-            item = gtk.CheckMenuItem(menuitem[0])
+            item = Gtk.CheckMenuItem(menuitem[0])
             if menuitem[1] in active_tags:
                 item.set_active(True)
             else:
@@ -1059,44 +1091,45 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
                     menuitem[1])
             menu.append(item)
 
-        item = gtk.SeparatorMenuItem() # separator
+        item = Gtk.SeparatorMenuItem.new() # separator
         menu.append(item)
 
-        item = gtk.ImageMenuItem(_('Color'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_SELECT_COLOR, gtk.ICON_SIZE_MENU)
+        item = Gtk.ImageMenuItem(_('Color'))
+        icon = Gtk.Image.new_from_stock(Gtk.STOCK_SELECT_COLOR, Gtk.IconSize.MENU)
         item.set_image(icon)
         item.connect('activate', self.on_color_menuitem_activale)
         menu.append(item)
 
-        item = gtk.ImageMenuItem(_('Font'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_SELECT_FONT, gtk.ICON_SIZE_MENU)
+        item = Gtk.ImageMenuItem(_('Font'))
+        icon = Gtk.Image.new_from_stock(Gtk.STOCK_SELECT_FONT, Gtk.IconSize.MENU)
         item.set_image(icon)
         item.connect('activate', self.on_font_menuitem_activale)
         menu.append(item)
 
-        item = gtk.SeparatorMenuItem() # separator
+        item = Gtk.SeparatorMenuItem.new() # separator
         menu.append(item)
 
-        item = gtk.ImageMenuItem(_('Clear formating'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_CLEAR, gtk.ICON_SIZE_MENU)
+        item = Gtk.ImageMenuItem(_('Clear formating'))
+        icon = Gtk.Image.new_from_stock(Gtk.STOCK_CLEAR, Gtk.IconSize.MENU)
         item.set_image(icon)
         item.connect('activate', self.msg_textview.clear_tags)
         menu.append(item)
 
         menu.show_all()
+        menu.attach_to_widget(widget, None)
         gtkgui_helpers.popup_emoticons_under_button(menu, widget,
                 self.parent_win)
 
     def on_color_menuitem_activale(self, widget):
-        color_dialog = gtk.ColorSelectionDialog('Select a color')
-        color_dialog.connect('response', self.msg_textview.color_set,
-                color_dialog.colorsel)
+        color_dialog = Gtk.ColorChooserDialog(None, self.parent_win.window)
+        color_dialog.set_use_alpha(False)
+        color_dialog.connect('response', self.msg_textview.color_set)
         color_dialog.show_all()
 
     def on_font_menuitem_activale(self, widget):
-        font_dialog = gtk.FontSelectionDialog('Select a font')
-        font_dialog.connect('response', self.msg_textview.font_set,
-                font_dialog.fontsel)
+        font_dialog = Gtk.FontChooserDialog(None, self.parent_win.window)
+        start, finish = self.msg_textview.get_active_iters()
+        font_dialog.connect('response', self.msg_textview.font_set, start, finish)
         font_dialog.show_all()
 
     def on_actions_button_clicked(self, widget):
@@ -1105,13 +1138,14 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         """
         menu = self.prepare_context_menu(hide_buttonbar_items=True)
         menu.show_all()
+        menu.attach_to_widget(widget, None)
         gtkgui_helpers.popup_emoticons_under_button(menu, widget,
                 self.parent_win)
 
     def update_font(self):
-        font = pango.FontDescription(gajim.config.get('conversation_font'))
-        self.conv_textview.tv.modify_font(font)
-        self.msg_textview.modify_font(font)
+        font = Pango.FontDescription(gajim.config.get('conversation_font'))
+        self.conv_textview.tv.override_font(font)
+        self.msg_textview.override_font(font)
 
     def update_tags(self):
         self.conv_textview.update_tags()
@@ -1209,7 +1243,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         visible_rect = textview.get_visible_rect()
         # scroll only if expected end is not visible
         if end_rect.y >= (visible_rect.y + visible_rect.height + diff_y):
-            self.scroll_to_end_id = gobject.idle_add(self.scroll_to_end_iter,
+            self.scroll_to_end_id = GLib.idle_add(self.scroll_to_end_iter,
                     textview)
 
     def scroll_to_end_iter(self, textview):
@@ -1219,20 +1253,20 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         self.scroll_to_end_id = None
         return False
 
-    def size_request(self, msg_textview, requisition):
+    def on_configure_event(self, msg_textview, event):
         """
         When message_textview changes its size: if the new height will enlarge
         the window, enable the scrollbar automatic policy.  Also enable scrollbar
         automatic policy for horizontal scrollbar if message we have in
         message_textview is too big
         """
-        if msg_textview.window is None:
+        if msg_textview.get_window() is None:
             return
 
         min_height = self.conv_scrolledwindow.get_property('height-request')
-        conversation_height = self.conv_textview.tv.window.get_size()[1]
-        message_height = msg_textview.window.get_size()[1]
-        message_width = msg_textview.window.get_size()[0]
+        conversation_height = self.conv_textview.tv.get_window().get_size()[1]
+        message_height = msg_textview.get_window().get_size()[1]
+        message_width = msg_textview.get_window().get_size()[0]
         # new tab is not exposed yet
         if conversation_height < 2:
             return
@@ -1245,31 +1279,31 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         # but we also want to avoid window resizing so if we reach that
         # minimum for conversation_textview and maximum for message_textview
         # we set to automatic the scrollbar policy
-        diff_y = message_height - requisition.height
+        diff_y = message_height - event.height
         if diff_y != 0:
             if conversation_height + diff_y < min_height:
                 if message_height + conversation_height - min_height > min_height:
                     policy = self.msg_scrolledwindow.get_property(
                             'vscrollbar-policy')
-                    if policy != gtk.POLICY_AUTOMATIC:
+                    if policy != Gtk.PolicyType.AUTOMATIC:
                         self.msg_scrolledwindow.set_property('vscrollbar-policy',
-                                gtk.POLICY_AUTOMATIC)
+                                Gtk.PolicyType.AUTOMATIC)
                         self.msg_scrolledwindow.set_property('height-request',
                                 message_height + conversation_height - min_height)
             else:
                 self.msg_scrolledwindow.set_property('vscrollbar-policy',
-                        gtk.POLICY_NEVER)
+                        Gtk.PolicyType.NEVER)
                 self.msg_scrolledwindow.set_property('height-request', -1)
 
         self.smooth = True # reinit the flag
         # enable scrollbar automatic policy for horizontal scrollbar
         # if message we have in message_textview is too big
-        if requisition.width > message_width:
+        if event.width > message_width:
             self.msg_scrolledwindow.set_property('hscrollbar-policy',
-                    gtk.POLICY_AUTOMATIC)
+                    Gtk.PolicyType.AUTOMATIC)
         else:
             self.msg_scrolledwindow.set_property('hscrollbar-policy',
-                    gtk.POLICY_NEVER)
+                    Gtk.PolicyType.NEVER)
 
         return True
 
@@ -1282,15 +1316,15 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
                 self.conv_textview.bring_scroll_to_end(-18)
             else:
                 self.conv_textview.bring_scroll_to_end(-18, use_smooth=False)
-        self.was_at_the_end = (adjustment.upper - adjustment.value - \
-            adjustment.page_size) < 18
+        self.was_at_the_end = (adjustment.get_upper() - adjustment.get_value()\
+            - adjustment.get_page_size()) < 18
 
     def on_conversation_vadjustment_value_changed(self, adjustment):
         # stop automatic scroll when we manually scroll
         if not self.conv_textview.auto_scrolling:
             self.conv_textview.stop_scrolling()
-        self.was_at_the_end = (adjustment.upper - adjustment.value - \
-            adjustment.page_size) < 18
+        self.was_at_the_end = (adjustment.get_upper() - adjustment.get_value() \
+            - adjustment.get_page_size()) < 18
         if self.resource:
             jid = self.contact.get_full_jid()
         else:
@@ -1361,21 +1395,24 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
             # whatever is already typed
             start_iter = msg_buf.get_start_iter()
             end_iter = msg_buf.get_end_iter()
-            self.orig_msg = msg_buf.get_text(start_iter, end_iter, 0).decode(
-                'utf-8')
+            self.orig_msg = msg_buf.get_text(start_iter, end_iter, False)
         if pos == size and size > 0 and direction == 'up' and \
         msg_type == 'sent' and not self.correcting and (not \
         history[pos - 1].startswith('/') or history[pos - 1].startswith('/me')):
             self.correcting = True
-            self.old_message_tv_color = self.msg_textview.get_style().base[0]
-            self.msg_textview.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse(
-                'PaleGoldenrod'))
+            context = self.msg_textview.get_style_context()
+            state = Gtk.StateFlags.NORMAL
+            self.old_message_tv_color = context.get_background_color(state)
+            color = Gdk.RGBA()
+            Gdk.RGBA.parse(color, 'PaleGoldenrod')
+            self.msg_textview.override_background_color(Gtk.StateType.NORMAL,
+                color)
             message = history[pos - 1]
             msg_buf.set_text(message)
             return
         if self.correcting:
             # We were previously correcting
-            self.msg_textview.modify_base(gtk.STATE_NORMAL,
+            self.msg_textview.override_background_color(Gtk.StateType.NORMAL,
                 self.old_message_tv_color)
         self.correcting = False
         pos += -1 if direction == 'up' else +1
@@ -1409,7 +1446,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
         """
         # make the last message visible, when changing to "full view"
         if not state:
-            gobject.idle_add(self.conv_textview.scroll_to_end_iter)
+            GLib.idle_add(self.conv_textview.scroll_to_end_iter)
 
         widget.set_no_show_all(state)
         if state:
@@ -1499,7 +1536,7 @@ class ChatControl(ChatControlBase):
         pixbuf = gtkgui_helpers.get_icon_pixmap('document-send', quiet=True)
         if not pixbuf:
             pixbuf = gtkgui_helpers.get_icon_pixmap('gajim-upload')
-        img = gtk.image_new_from_pixbuf(pixbuf)
+        img = Gtk.Image.new_from_pixbuf(pixbuf)
         self._send_file_button.set_image(img)
         id_ = self._send_file_button.connect('clicked',
             self._on_send_file_menuitem_activate)
@@ -1593,6 +1630,12 @@ class ChatControl(ChatControlBase):
         id_ = widget.connect('button-release-event',
             self.on_location_eventbox_button_release_event)
         self.handlers[id_] = widget
+        id_ = widget.connect('enter-notify-event',
+            self.on_location_eventbox_enter_notify_event)
+        self.handlers[id_] = widget
+        id_ = widget.connect('leave-notify-event',
+            self.on_location_eventbox_leave_notify_event)
+        self.handlers[id_] = widget
 
         for key in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '0', '#'):
             widget = self.xml.get_object(key + '_button')
@@ -1602,7 +1645,7 @@ class ChatControl(ChatControlBase):
             self.handlers[id_] = widget
 
         self.dtmf_window = self.xml.get_object('dtmf_window')
-        self.dtmf_window.get_child().set_direction(gtk.TEXT_DIR_LTR)
+        self.dtmf_window.get_child().set_direction(Gtk.TextDirection.LTR)
         id_ = self.dtmf_window.connect('focus-out-event',
             self.on_dtmf_window_focus_out_event)
         self.handlers[id_] = self.dtmf_window
@@ -1619,15 +1662,15 @@ class ChatControl(ChatControlBase):
         id_ = widget.connect('value_changed', self.on_sound_hscale_value_changed)
         self.handlers[id_] = widget
 
-        self.info_bar = gtk.InfoBar()
+        self.info_bar = Gtk.InfoBar()
         content_area = self.info_bar.get_content_area()
-        self.info_bar_label = gtk.Label()
+        self.info_bar_label = Gtk.Label()
         self.info_bar_label.set_use_markup(True)
         self.info_bar_label.set_alignment(0, 0)
         content_area.add(self.info_bar_label)
         self.info_bar.set_no_show_all(True)
         widget = self.xml.get_object('vbox2')
-        widget.pack_start(self.info_bar, expand=False, padding=5)
+        widget.pack_start(self.info_bar, False, True, 5)
         widget.reorder_child(self.info_bar, 1)
 
         # List of waiting infobar messages
@@ -1773,14 +1816,15 @@ class ChatControl(ChatControlBase):
 
         # Send file
         if ((self.contact.supports(NS_FILE) or \
-        self.contact.supports(NS_JINGLE_FILE_TRANSFER)) or \
-        self.type_id == 'chat' or self.gc_contact.resource) and \
+        self.contact.supports(NS_JINGLE_FILE_TRANSFER)) and \
+        (self.type_id == 'chat' or self.gc_contact.resource)) and \
         self.contact.show != 'offline':
             self._send_file_button.set_sensitive(True)
             self._send_file_button.set_tooltip_text(_('Send files'))
         else:
             self._send_file_button.set_sensitive(False)
-            if not (self.contact.supports(NS_FILE) or self.contact.supports(NS_JINGLE_FILE_TRANSFER)):
+            if not (self.contact.supports(NS_FILE) or self.contact.supports(
+            NS_JINGLE_FILE_TRANSFER)):
                 self._send_file_button.set_tooltip_text(_(
                     "This contact does not support file transfer."))
             else:
@@ -1817,7 +1861,7 @@ class ChatControl(ChatControlBase):
         pep = self.contact.pep
         img = self._pep_images[pep_type]
         if pep_type in pep:
-            img.set_from_pixbuf(pep[pep_type].asPixbufIcon())
+            img.set_from_pixbuf(gtkgui_helpers.get_pep_as_pixbuf(pep[pep_type]))
             img.set_tooltip_markup(pep[pep_type].asMarkupText())
             img.show()
         else:
@@ -1847,16 +1891,16 @@ class ChatControl(ChatControlBase):
             banner_image.show()
         if state == self.JINGLE_STATE_CONNECTING:
             banner_image.set_from_stock(
-                    gtk.STOCK_CONVERT, 1)
+                    Gtk.STOCK_CONVERT, 1)
         elif state == self.JINGLE_STATE_CONNECTION_RECEIVED:
             banner_image.set_from_stock(
-                    gtk.STOCK_NETWORK, 1)
+                    Gtk.STOCK_NETWORK, 1)
         elif state == self.JINGLE_STATE_CONNECTED:
             banner_image.set_from_stock(
-                    gtk.STOCK_CONNECT, 1)
+                    Gtk.STOCK_CONNECT, 1)
         elif state == self.JINGLE_STATE_ERROR:
             banner_image.set_from_stock(
-                    gtk.STOCK_DIALOG_WARNING, 1)
+                    Gtk.STOCK_DIALOG_WARNING, 1)
         self.update_toolbar()
 
     def update_audio(self):
@@ -1984,8 +2028,8 @@ class ChatControl(ChatControlBase):
         if avatar_w > scaled_buf_w or avatar_h > scaled_buf_h:
             # wait for 0.5 sec in case we leave earlier
             if self.show_bigger_avatar_timeout_id is not None:
-                gobject.source_remove(self.show_bigger_avatar_timeout_id)
-            self.show_bigger_avatar_timeout_id = gobject.timeout_add(500,
+                GLib.source_remove(self.show_bigger_avatar_timeout_id)
+            self.show_bigger_avatar_timeout_id = GLib.timeout_add(500,
                     self.show_bigger_avatar, widget)
 
     def on_avatar_eventbox_leave_notify_event(self, widget, event):
@@ -1994,7 +2038,7 @@ class ChatControl(ChatControlBase):
         """
         # did we add a timeout? if yes remove it
         if self.show_bigger_avatar_timeout_id is not None:
-            gobject.source_remove(self.show_bigger_avatar_timeout_id)
+            GLib.source_remove(self.show_bigger_avatar_timeout_id)
             self.show_bigger_avatar_timeout_id = None
 
     def on_avatar_eventbox_button_press_event(self, widget, event):
@@ -2002,8 +2046,8 @@ class ChatControl(ChatControlBase):
         If right-clicked, show popup
         """
         if event.button == 3: # right click
-            menu = gtk.Menu()
-            menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS)
+            menu = Gtk.Menu()
+            menuitem = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_SAVE_AS, None)
             id_ = menuitem.connect('activate',
                 gtkgui_helpers.on_avatar_save_as_menuitem_activate,
                 self.contact.jid, self.contact.get_shown_name())
@@ -2013,7 +2057,8 @@ class ChatControl(ChatControlBase):
             menu.connect('selection-done', lambda w: w.destroy())
             # show the menu
             menu.show_all()
-            menu.popup(None, None, None, event.button, event.time)
+            menu.attach_to_widget(widget, None)
+            menu.popup(None, None, None, None, event.button, event.time)
         return True
 
     def on_location_eventbox_button_release_event(self, widget, event):
@@ -2025,6 +2070,17 @@ class ChatControl(ChatControlBase):
                         'lon': location['lon']}
                 helpers.launch_browser_mailer('url', uri)
 
+    def on_location_eventbox_leave_notify_event(self, widget, event):
+        """
+        Just moved the mouse so show the cursor
+        """
+        cursor = Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR)
+        self.parent_win.window.get_window().set_cursor(cursor)
+
+    def on_location_eventbox_enter_notify_event(self, widget, event):
+        cursor = Gdk.Cursor.new(Gdk.CursorType.HAND2)
+        self.parent_win.window.get_window().set_cursor(cursor)
+
     def _on_window_motion_notify(self, widget, event):
         """
         It gets called no matter if it is the active window or not
@@ -2035,9 +2091,9 @@ class ChatControl(ChatControlBase):
             self.mouse_over_in_last_30_secs = True
 
     def _schedule_activity_timers(self):
-        self.possible_paused_timeout_id = gobject.timeout_add_seconds(5,
+        self.possible_paused_timeout_id = GLib.timeout_add_seconds(5,
                 self.check_for_possible_paused_chatstate, None)
-        self.possible_inactive_timeout_id = gobject.timeout_add_seconds(30,
+        self.possible_inactive_timeout_id = GLib.timeout_add_seconds(30,
                 self.check_for_possible_inactive_chatstate, None)
 
     def update_ui(self):
@@ -2068,7 +2124,7 @@ class ChatControl(ChatControlBase):
             use_size_32 = False
 
         banner_status_img = self.xml.get_object('banner_status_image')
-        if banner_image.get_storage_type() == gtk.IMAGE_ANIMATION:
+        if banner_image.get_storage_type() == Gtk.ImageType.ANIMATION:
             banner_status_img.set_from_animation(banner_image.get_animation())
         else:
             pix = banner_image.get_pixbuf()
@@ -2077,7 +2133,7 @@ class ChatControl(ChatControlBase):
                     banner_status_img.set_from_pixbuf(pix)
                 else: # we need to scale 16x16 to 32x32
                     scaled_pix = pix.scale_simple(32, 32,
-                                                    gtk.gdk.INTERP_BILINEAR)
+                                                    GdkPixbuf.InterpType.BILINEAR)
                     banner_status_img.set_from_pixbuf(scaled_pix)
 
     def draw_banner_text(self):
@@ -2097,7 +2153,7 @@ class ChatControl(ChatControlBase):
             name = i18n.direction_mark +  _(
                 '%(nickname)s from group chat %(room_name)s') % \
                 {'nickname': name, 'room_name': self.room_name}
-        name = i18n.direction_mark + gobject.markup_escape_text(name)
+        name = i18n.direction_mark + GLib.markup_escape_text(name)
 
         # We know our contacts nick, but if another contact has the same nick
         # in another account we need to also display the account.
@@ -2110,20 +2166,21 @@ class ChatControl(ChatControlBase):
                 break
             for jid in gajim.contacts.get_jid_list(account):
                 other_contact_ = \
-                        gajim.contacts.get_first_contact_from_jid(account, jid)
-                if other_contact_.get_shown_name() == self.contact.get_shown_name():
+                    gajim.contacts.get_first_contact_from_jid(account, jid)
+                if other_contact_.get_shown_name() == \
+                self.contact.get_shown_name():
                     acct_info = i18n.direction_mark + ' (%s)' % \
-                            gobject.markup_escape_text(self.account)
+                        GLib.markup_escape_text(self.account)
                     break
 
         status = contact.status
         if status is not None:
-            banner_name_label.set_ellipsize(pango.ELLIPSIZE_END)
-            self.banner_status_label.set_ellipsize(pango.ELLIPSIZE_END)
+            banner_name_label.set_ellipsize(Pango.EllipsizeMode.END)
+            self.banner_status_label.set_ellipsize(Pango.EllipsizeMode.END)
             status_reduced = helpers.reduce_chars_newlines(status, max_lines=1)
         else:
             status_reduced = ''
-        status_escaped = gobject.markup_escape_text(status_reduced)
+        status_escaped = GLib.markup_escape_text(status_reduced)
 
         font_attrs, font_attrs_small = self.get_font_attrs()
         st = gajim.config.get('displayed_chat_state_notifications')
@@ -2195,12 +2252,12 @@ class ChatControl(ChatControlBase):
                         fixed = self.xml.get_object('outgoing_fixed')
                         fixed.set_no_show_all(False)
                         video_hbox.show_all()
-                        out_xid = self.xml.get_object('outgoing_drawingarea').\
-                            window.xid
+                        out_xid = self.xml.get_object(
+                            'outgoing_drawingarea').get_window().xid
                     else:
                         out_xid = None
                     video_hbox.show_all()
-                    in_xid = self.xml.get_object('incoming_drawingarea').window.xid
+                    in_xid = self.xml.get_object('incoming_drawingarea').get_window().xid
                     sid = gajim.connections[self.account].start_video(
                         self.contact.get_full_jid(), in_xid, out_xid)
                 else:
@@ -2345,8 +2402,8 @@ class ChatControl(ChatControlBase):
                 chatstate_to_send = 'active'
                 contact.our_chatstate = 'active'
 
-                gobject.source_remove(self.possible_paused_timeout_id)
-                gobject.source_remove(self.possible_inactive_timeout_id)
+                GLib.source_remove(self.possible_paused_timeout_id)
+                GLib.source_remove(self.possible_inactive_timeout_id)
                 self._schedule_activity_timers()
 
         def _on_sent(msg_stanza, message, encrypted, xhtml, label, old_txt):
@@ -2365,8 +2422,8 @@ class ChatControl(ChatControlBase):
                 self.conv_textview.correct_last_sent_message(message, xhtml,
                     self.get_our_nick(), old_txt)
                 self.correcting = False
-                self.msg_textview.modify_base(gtk.STATE_NORMAL,
-                    self.old_message_tv_color)
+                self.msg_textview.override_background_color(
+                    Gtk.StateType.NORMAL, self.old_message_tv_color)
                 return
             self.print_conversation(message, self.contact.jid,
                 encrypted=encrypted, xep0184_id=xep0184_id, xhtml=xhtml,
@@ -2569,41 +2626,47 @@ class ChatControl(ChatControlBase):
         if num_unread == 1 and not gajim.config.get('show_unread_tab_icon'):
             unread = '*'
         elif num_unread > 1:
-            unread = '[' + unicode(num_unread) + ']'
+            unread = '[' + str(num_unread) + ']'
 
         # Draw tab label using chatstate
         theme = gajim.config.get('roster_theme')
-        color = None
+        color_s = None
         if not chatstate:
             chatstate = self.contact.chatstate
         if chatstate is not None:
             if chatstate == 'composing':
-                color = gajim.config.get_per('themes', theme,
-                                'state_composing_color')
+                color_s = gajim.config.get_per('themes', theme,
+                    'state_composing_color')
             elif chatstate == 'inactive':
-                color = gajim.config.get_per('themes', theme,
-                                'state_inactive_color')
+                color_s = gajim.config.get_per('themes', theme,
+                    'state_inactive_color')
             elif chatstate == 'gone':
-                color = gajim.config.get_per('themes', theme,
-                                'state_gone_color')
+                color_s = gajim.config.get_per('themes', theme,
+                    'state_gone_color')
             elif chatstate == 'paused':
-                color = gajim.config.get_per('themes', theme,
-                                'state_paused_color')
-        if color:
+                color_s = gajim.config.get_per('themes', theme,
+                    'state_paused_color')
+
+        context = self.parent_win.notebook.get_style_context()
+        if color_s:
             # We set the color for when it's the current tab or not
-            color = gtk.gdk.colormap_get_system().alloc_color(color)
+            color = Gdk.RGBA()
+            ok = Gdk.RGBA.parse(color, color_s)
+            if not ok:
+                del color
+                color = context.get_color(Gtk.StateFlags.ACTIVE)
             # In inactive tab color to be lighter against the darker inactive
             # background
             if chatstate in ('inactive', 'gone') and\
             self.parent_win.get_active_control() != self:
                 color = self.lighten_color(color)
         else: # active or not chatstate, get color from gtk
-            color = self.parent_win.notebook.style.fg[gtk.STATE_ACTIVE]
+            color = context.get_color(Gtk.StateFlags.ACTIVE)
 
         name = self.contact.get_shown_name()
         if self.resource:
             name += '/' + self.resource
-        label_str = gobject.markup_escape_text(name)
+        label_str = GLib.markup_escape_text(name)
         if num_unread: # if unread, text in the label becomes bold
             label_str = '<b>' + unread + label_str + '</b>'
         return (label_str, color)
@@ -2644,7 +2707,11 @@ class ChatControl(ChatControlBase):
         tranasports) and file_transfer_menuitem and hide()/show() for
         add_to_roster_menuitem
         """
-        menu = gui_menu_builder.get_contact_menu(self.contact, self.account,
+        if gajim.jid_is_transport(self.contact.jid):
+            menu = gui_menu_builder.get_transport_menu(self.contact,
+                self.account)
+        else:
+            menu = gui_menu_builder.get_contact_menu(self.contact, self.account,
                 use_multiple_contacts=False, show_start_chat=False,
                 show_encryption=True, control=self,
                 show_buttonbar_items=not hide_buttonbar_items)
@@ -2741,8 +2808,8 @@ class ChatControl(ChatControlBase):
             self.session.control = None
 
         # Disconnect timer callbacks
-        gobject.source_remove(self.possible_paused_timeout_id)
-        gobject.source_remove(self.possible_inactive_timeout_id)
+        GLib.source_remove(self.possible_paused_timeout_id)
+        GLib.source_remove(self.possible_inactive_timeout_id)
         # Remove bigger avatar window
         if self.bigger_avatar_window:
             self.bigger_avatar_window.destroy()
@@ -2761,7 +2828,7 @@ class ChatControl(ChatControlBase):
                 backend=backend)
         # remove all register handlers on widgets, created by self.xml
         # to prevent circular references among objects
-        for i in self.handlers.keys():
+        for i in list(self.handlers.keys()):
             if self.handlers[i].handler_is_connected(i):
                 self.handlers[i].disconnect(i)
             del self.handlers[i]
@@ -2812,7 +2879,11 @@ class ChatControl(ChatControlBase):
         self.parent_win.redraw_tab(self, self.contact.chatstate)
 
     def _nec_caps_received(self, obj):
-        if obj.conn.name != self.account or obj.jid != self.contact.jid:
+        if obj.conn.name != self.account:
+            return
+        if self.TYPE_ID == 'chat' and obj.jid != self.contact.jid:
+            return
+        if self.TYPE_ID == 'pm' and obj.fjid != self.contact.jid:
             return
         self.update_ui()
 
@@ -2827,8 +2898,8 @@ class ChatControl(ChatControlBase):
             else:
                 self.send_chatstate('active', self.contact)
             self.reset_kbd_mouse_timeout_vars()
-            gobject.source_remove(self.possible_paused_timeout_id)
-            gobject.source_remove(self.possible_inactive_timeout_id)
+            GLib.source_remove(self.possible_paused_timeout_id)
+            GLib.source_remove(self.possible_inactive_timeout_id)
             self._schedule_activity_timers()
         else:
             self.send_chatstate('inactive', self.contact)
@@ -2906,7 +2977,7 @@ class ChatControl(ChatControlBase):
         type_ = model[iter_][2]
         if type_ != 'contact': # source is not a contact
             return
-        dropped_jid = data.decode('utf-8')
+        dropped_jid = data
 
         dropped_transport = gajim.get_transport_name_from_jid(dropped_jid)
         c_transport = gajim.get_transport_name_from_jid(c.jid)
@@ -2969,6 +3040,7 @@ class ChatControl(ChatControlBase):
                 'remove it (all history will be lost).') % common.logger.LOG_DB_PATH)
             rows = []
         local_old_kind = None
+        self.conv_textview.just_cleared = True
         for row in rows: # row[0] time, row[1] has kind, row[2] the message
             if not row[2]: # message is empty, we don't print it
                 continue
@@ -2993,14 +3065,14 @@ class ChatControl(ChatControlBase):
             xhtml = None
             if row[2].startswith('<body '):
                 xhtml = row[2]
-            if row[2].startswith('/me ') or row[2].startswith('/me\n'):
-                local_old_kind = None
-            else:
-                local_old_kind = kind
             ChatControlBase.print_conversation_line(self, row[2], kind, name,
                 tim, small_attr, small_attr + ['restored_message'],
                 small_attr + ['restored_message'], False,
                 old_kind=local_old_kind, xhtml=xhtml)
+            if row[2].startswith('/me ') or row[2].startswith('/me\n'):
+                local_old_kind = None
+            else:
+                local_old_kind = kind
         if len(rows):
             self.conv_textview.print_empty_line()
 
@@ -3070,9 +3142,9 @@ class ChatControl(ChatControlBase):
         Resize the avatar, if needed, so it has at max half the screen size and
         shows it
         """
-        if not small_avatar.window:
-            # Tab has been closed since we hovered the avatar
-            return
+        #if not small_avatar.window:
+            ### Tab has been closed since we hovered the avatar
+            #return
         avatar_pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(
                 self.contact.jid)
         if avatar_pixbuf in ('ask', None):
@@ -3084,11 +3156,12 @@ class ChatControl(ChatControlBase):
         # It's why I set it transparent.
         image = self.xml.get_object('avatar_image')
         pixbuf = image.get_pixbuf()
-        pixbuf.fill(0xffffff00L) # RGBA
-        image.queue_draw()
+        pixbuf.fill(0xffffff00) # RGBA
+        image.set_from_pixbuf(pixbuf)
+        #image.queue_draw()
 
-        screen_w = gtk.gdk.screen_width()
-        screen_h = gtk.gdk.screen_height()
+        screen_w = Gdk.Screen.width()
+        screen_h = Gdk.Screen.height()
         avatar_w = avatar_pixbuf.get_width()
         avatar_h = avatar_pixbuf.get_height()
         half_scr_w = screen_w / 2
@@ -3097,56 +3170,24 @@ class ChatControl(ChatControlBase):
             avatar_w = half_scr_w
         if avatar_h > half_scr_h:
             avatar_h = half_scr_h
-        window = gtk.Window(gtk.WINDOW_POPUP)
-        self.bigger_avatar_window = window
-        pixmap, mask = avatar_pixbuf.render_pixmap_and_mask()
-        window.set_size_request(avatar_w, avatar_h)
         # we should make the cursor visible
         # gtk+ doesn't make use of the motion notify on gtkwindow by default
         # so this line adds that
-        window.set_events(gtk.gdk.POINTER_MOTION_MASK)
-        window.set_app_paintable(True)
-        window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_TOOLTIP)
-
-        window.realize()
-        window.window.set_back_pixmap(pixmap, False) # make it transparent
-        window.window.shape_combine_mask(mask, 0, 0)
 
+        alloc = small_avatar.get_allocation()
         # make the bigger avatar window show up centered
-        x0, y0 = small_avatar.window.get_origin()
-        x0 += small_avatar.allocation.x
-        y0 += small_avatar.allocation.y
-        center_x= x0 + (small_avatar.allocation.width / 2)
-        center_y = y0 + (small_avatar.allocation.height / 2)
+        small_avatar_x, small_avatar_y = alloc.x, alloc.y
+        translated_coordinates = small_avatar.translate_coordinates(
+            gajim.interface.roster.window, 0, 0)
+        if translated_coordinates:
+            small_avatar_x, small_avatar_y = translated_coordinates
+        roster_x, roster_y  = self.parent_win.window.get_window().get_origin()[1:]
+        center_x = roster_x + small_avatar_x + (alloc.width / 2)
+        center_y = roster_y + small_avatar_y + (alloc.height / 2)
         pos_x, pos_y = center_x - (avatar_w / 2), center_y - (avatar_h / 2)
-        window.move(pos_x, pos_y)
-        # make the cursor invisible so we can see the image
-        invisible_cursor = gtkgui_helpers.get_invisible_cursor()
-        window.window.set_cursor(invisible_cursor)
-
-        # we should hide the window
-        window.connect('leave_notify_event',
-                self._on_window_avatar_leave_notify_event)
-        window.connect('motion-notify-event',
-                self._on_window_motion_notify_event)
-
-        window.show_all()
 
-    def _on_window_avatar_leave_notify_event(self, widget, event):
-        """
-        Just left the popup window that holds avatar
-        """
-        self.bigger_avatar_window.destroy()
-        self.bigger_avatar_window = None
-        # Re-show the small avatar
-        self.show_avatar()
-
-    def _on_window_motion_notify_event(self, widget, event):
-        """
-        Just moved the mouse so show the cursor
-        """
-        cursor = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR)
-        self.bigger_avatar_window.window.set_cursor(cursor)
+        dialogs.BigAvatarWindow(avatar_pixbuf, pos_x, pos_y, avatar_w,
+            avatar_h, self.show_avatar)
 
     def _on_send_file_menuitem_activate(self, widget):
         self._on_send_file()
@@ -3290,7 +3331,7 @@ class ChatControl(ChatControlBase):
         self.info_bar.show_all()
 
     def _add_info_bar_message(self, markup, buttons, args,
-    type_=gtk.MESSAGE_INFO):
+    type_=Gtk.MessageType.INFO):
         self.info_bar_queue.append((markup, buttons, args, type_))
         self._info_bar_show_message()
 
@@ -3323,12 +3364,12 @@ class ChatControl(ChatControlBase):
             markup += ' (%s)' % file_props.desc
         markup += '\n%s: %s' % (_('Size'), helpers.convert_bytes(
             file_props.size))
-        b1 = gtk.Button(_('_Accept'))
+        b1 = Gtk.Button(_('_Accept'))
         b1.connect('clicked', self._on_accept_file_request, file_props)
-        b2 = gtk.Button(stock=gtk.STOCK_CANCEL)
+        b2 = Gtk.Button(stock=Gtk.STOCK_CANCEL)
         b2.connect('clicked', self._on_cancel_file_request, file_props)
         self._add_info_bar_message(markup, [b1, b2], file_props,
-            gtk.MESSAGE_QUESTION)
+            Gtk.MessageType.QUESTION)
 
     def _on_open_ft_folder(self, widget, file_props):
         path = os.path.split(file_props.file_name)[0]
@@ -3348,17 +3389,17 @@ class ChatControl(ChatControlBase):
             file_props.name)
         if file_props.desc:
             markup += ' (%s)' % file_props.desc
-        b1 = gtk.Button(_('_Open Containing Folder'))
+        b1 = Gtk.Button(_('_Open Containing Folder'))
         b1.connect('clicked', self._on_open_ft_folder, file_props)
-        b2 = gtk.Button(stock=gtk.STOCK_OK)
+        b2 = Gtk.Button(stock=Gtk.STOCK_OK)
         b2.connect('clicked', self._on_ok, file_props, 'file-completed')
         self._add_info_bar_message(markup, [b1, b2], file_props)
 
     def _got_file_error(self, file_props, type_, pri_txt, sec_txt):
         markup = '<b>%s:</b> %s' % (pri_txt, sec_txt)
-        b = gtk.Button(stock=gtk.STOCK_OK)
+        b = Gtk.Button(stock=Gtk.STOCK_OK)
         b.connect('clicked', self._on_ok, file_props, type_)
-        self._add_info_bar_message(markup, [b], file_props, gtk.MESSAGE_ERROR)
+        self._add_info_bar_message(markup, [b], file_props, Gtk.MessageType.ERROR)
 
     def _on_accept_gc_invitation(self, widget, event):
         room_jid = event.parameters[0]
@@ -3383,12 +3424,12 @@ class ChatControl(ChatControlBase):
         markup = '<b>%s:</b> %s' % (_('Groupchat Invitation'), room_jid)
         if comment:
             markup += ' (%s)' % comment
-        b1 = gtk.Button(_('_Join'))
+        b1 = Gtk.Button(_('_Join'))
         b1.connect('clicked', self._on_accept_gc_invitation, event)
-        b2 = gtk.Button(stock=gtk.STOCK_CANCEL)
+        b2 = Gtk.Button(stock=Gtk.STOCK_CANCEL)
         b2.connect('clicked', self._on_cancel_gc_invitation, event)
         self._add_info_bar_message(markup, [b1, b2], event.parameters,
-            gtk.MESSAGE_QUESTION)
+            Gtk.MessageType.QUESTION)
 
     def on_event_added(self, event):
         if event.account != self.account:
@@ -3401,9 +3442,9 @@ class ChatControl(ChatControlBase):
             self._got_file_completed(event.parameters)
         elif event.type_ in ('file-error', 'file-stopped'):
             msg_err = ''
-            if event.parameters['error'] == -1:
+            if event.parameters.error == -1:
                 msg_err = _('Remote contact stopped transfer')
-            elif event.parameters['error'] == -6:
+            elif event.parameters.error == -6:
                 msg_err = _('Error opening file')
             self._got_file_error(event.parameters, event.type_,
                 _('File transfer stopped'), msg_err)
@@ -3444,6 +3485,6 @@ class ChatControl(ChatControlBase):
                         self.info_bar.set_no_show_all(True)
                         self.info_bar.hide()
                         # show next one?
-                        gobject.idle_add(self._info_bar_show_message)
+                        GLib.idle_add(self._info_bar_show_message)
                     break
                 i += 1
diff --git a/src/command_system/dispatcher.py b/src/command_system/dispatcher.py
index cc9f0ea7a6638405dfc8ad81844e4f4e7a956a55..488dfa341b151560ad7fb74bed24a7251cc10b81 100644
--- a/src/command_system/dispatcher.py
+++ b/src/command_system/dispatcher.py
@@ -31,8 +31,7 @@ to automatic discovery and dispatching, also features manual control
 over the process.
 """
 
-from types import NoneType
-from tools import remove
+from .tools import remove
 
 COMMANDS = {}
 CONTAINERS = {}
@@ -67,11 +66,13 @@ def traverse_commands(container):
             yield attribute
 
 def is_command(attribute):
-    from framework import Command
+    from .framework import Command
     return isinstance(attribute, Command)
 
 def is_root(namespace):
-    metaclass = namespace.get("__metaclass__", NoneType)
+    metaclass = namespace.get("__metaclass__", None)
+    if not metaclass:
+        return False
     return issubclass(metaclass, Dispatchable)
 
 def get_command(host, name):
@@ -83,7 +84,7 @@ def get_command(host, name):
 def list_commands(host):
     for container in CONTAINERS[host]:
         commands = COMMANDS[container]
-        for name, command in commands.iteritems():
+        for name, command in commands.items():
             yield name, command
 
 class Dispatchable(type):
diff --git a/src/command_system/framework.py b/src/command_system/framework.py
index 9c2dd4cb0589656ccad9f469c0e9d664672f97da..ca24695228d1c78bc1462388b3a78219f38ddf3b 100644
--- a/src/command_system/framework.py
+++ b/src/command_system/framework.py
@@ -23,12 +23,12 @@ import re
 from types import FunctionType
 from inspect import getargspec, getdoc
 
-from dispatcher import Host, Container
-from dispatcher import get_command, list_commands
-from mapping import parse_arguments, adapt_arguments
-from errors import DefinitionError, CommandError, NoCommandError
+from .dispatcher import Host, Container
+from .dispatcher import get_command, list_commands
+from .mapping import parse_arguments, adapt_arguments
+from .errors import DefinitionError, CommandError, NoCommandError
 
-class CommandHost(object):
+class CommandHost(metaclass=Host):
     """
     Command host is a hub between numerous command processors and
     command containers. Aimed to participate in a dispatching process in
@@ -40,7 +40,7 @@ class CommandHost(object):
     """
     __metaclass__ = Host
 
-class CommandContainer(object):
+class CommandContainer(metaclass=Container):
     """
     Command container is an entity which holds defined commands,
     allowing them to be dispatched and proccessed correctly. Each
@@ -143,7 +143,7 @@ class CommandProcessor(object):
     def list_commands(self):
         commands = list_commands(self.COMMAND_HOST)
         commands = dict(commands)
-        return sorted(set(commands.itervalues()))
+        return sorted(list(commands.values()), key=lambda k: k.__repr__())
 
 class Command(object):
 
@@ -153,7 +153,7 @@ class Command(object):
 
         # Automatically set all the properties passed to a constructor
         # by the command decorator.
-        for key, value in properties.iteritems():
+        for key, value in properties.items():
             setattr(self, key, value)
 
     def __call__(self, *args, **kwargs):
@@ -165,7 +165,7 @@ class Command(object):
         # command or name attributes set. They will be set to a
         # corresponding values right here in case if they was not set by
         # the one who raised an exception.
-        except CommandError, error:
+        except CommandError as error:
             if not error.command and not error.name:
                 raise CommandError(error.message, self)
             raise
@@ -181,7 +181,11 @@ class Command(object):
         return "<Command %s>" % ', '.join(self.names)
 
     def __cmp__(self, other):
-        return cmp(self.first_name, other.first_name)
+        if self.first_name > other.first_name:
+            return 1
+        if self.first_name < other.first_name:
+            return -1
+        return 0
 
     @property
     def first_name(self):
diff --git a/src/command_system/implementation/custom.py b/src/command_system/implementation/custom.py
index cc33ae39c403570399764bff8e6a603341bcbc58..95198fc522495c549d6f4702f140b3eed55ea84c 100644
--- a/src/command_system/implementation/custom.py
+++ b/src/command_system/implementation/custom.py
@@ -35,7 +35,7 @@ detected.
 """
 
 from ..framework import CommandContainer, command, doc
-from hosts import *
+from .hosts import *
 
 class CustomCommonCommands(CommandContainer):
     """
diff --git a/src/command_system/implementation/execute.py b/src/command_system/implementation/execute.py
index e81957d419c389190f10a99b0b1da6bf5602fd96..ab14f4ea165b0383f955fd9cb477d0dfdcdf2f9e 100644
--- a/src/command_system/implementation/execute.py
+++ b/src/command_system/implementation/execute.py
@@ -35,10 +35,10 @@ commands as a frontend.
 from subprocess import Popen, PIPE
 from os.path import expanduser
 
-from glib import timeout_add
+from gi.repository import GLib
 
 from ..framework import CommandContainer, command, doc
-from hosts import *
+from .hosts import *
 
 class Execute(CommandContainer):
     AUTOMATIC = True
@@ -64,11 +64,11 @@ class Execute(CommandContainer):
     @classmethod
     def monitor(cls, processor, popen):
         poller = cls.poller(processor, popen)
-        timeout_add(cls.POLL_INTERVAL, poller.next)
+        GLib.timeout_add(cls.POLL_INTERVAL, next, poller)
 
     @classmethod
     def poller(cls, processor, popen):
-        for x in xrange(cls.POLL_COUNT):
+        for x in list(range(cls.POLL_COUNT)):
             yield cls.brush(processor, popen)
         cls.overdue(processor, popen)
         yield False
@@ -101,7 +101,7 @@ class Execute(CommandContainer):
     @staticmethod
     def clean(text):
         strip = chr(10) + chr(32)
-        return text.strip(strip)
+        return text.decode().strip(strip)
 
 class Show(Execute):
 
@@ -115,6 +115,6 @@ class Show(Execute):
         stdout, stderr = cls.fetch(popen)
         success = popen.returncode == 0
         if success and stdout:
-            processor.send(stdout.decode('utf8'))
+            processor.send(stdout)
         elif not success and stderr:
             processor.echo_error(stderr)
diff --git a/src/command_system/implementation/middleware.py b/src/command_system/implementation/middleware.py
index 7c517ea51741daa54f1777d80f03593b4eedc0de..40e4bdf4e13f90a4ff5b517cd213bab5a4b9a393 100644
--- a/src/command_system/implementation/middleware.py
+++ b/src/command_system/implementation/middleware.py
@@ -31,10 +31,9 @@ support interaction between the two and a few utility methods so you
 don't need to dig up the code itself to write basic commands.
 """
 
-from types import StringTypes
 from traceback import print_exc
 
-from pango import FontDescription
+from gi.repository import Pango
 from common import gajim
 
 from ..framework import CommandProcessor
@@ -62,13 +61,13 @@ class ChatCommandProcessor(CommandProcessor):
         try:
             parents = super(ChatCommandProcessor, self)
             parents.execute_command(name, arguments)
-        except NoCommandError, error:
+        except NoCommandError as error:
             details = dict(name=error.name, message=error.message)
             message = "%(name)s: %(message)s\n" % details
             message += "Try using the //%(name)s or /say /%(name)s " % details
             message += "construct if you intended to send it as a text."
             self.echo_error(message)
-        except CommandError, error:
+        except CommandError as error:
             self.echo_error("%s: %s" % (error.name, error.message))
         except Exception:
             self.echo_error(_("Error during command execution!"))
@@ -98,7 +97,7 @@ class ChatCommandProcessor(CommandProcessor):
     def command_postprocessor(self, command, name, arguments, args, kwargs, value):
         # If command returns a string - print it to a user. A convenient
         # and sufficient in most simple cases shortcut to a using echo.
-        if value and isinstance(value, StringTypes):
+        if value and isinstance(value, str):
             self.echo(value)
 
 class CommandTools:
@@ -117,7 +116,7 @@ class CommandTools:
 
         name = gconf("/desktop/gnome/interface/monospace_font_name")
         name = name if name else "Monospace"
-        font = FontDescription(name)
+        font = Pango.FontDescription(name)
 
         command_ok_tag = buffer.create_tag("command_ok")
         command_ok_tag.set_property("font-desc", font)
diff --git a/src/command_system/implementation/standard.py b/src/command_system/implementation/standard.py
index 3994eae5903e786070fc60b3d9c6799a0c28c7bc..285d25d8243ed9e7cf328b59478879a666953daa 100644
--- a/src/command_system/implementation/standard.py
+++ b/src/command_system/implementation/standard.py
@@ -30,8 +30,8 @@ from ..errors import CommandError
 from ..framework import CommandContainer, command, doc
 from ..mapping import generate_usage
 
-from hosts import *
-import execute
+from .hosts import *
+from . import execute
 
 # This holds constants fron the logger, which we'll be using in some of our
 # commands.
@@ -136,7 +136,7 @@ class StandardCommonCommands(CommandContainer):
     def status(self, status, message):
         if status not in ('online', 'away', 'chat', 'xa', 'dnd'):
             raise CommandError("Invalid status given")
-        for connection in gajim.connections.itervalues():
+        for connection in gajim.connections.values():
             if not gajim.config.get_per('accounts', connection.name,
             'sync_with_global_status'):
                 continue
@@ -150,7 +150,7 @@ class StandardCommonCommands(CommandContainer):
         if not message:
             message = _("Away")
 
-        for connection in gajim.connections.itervalues():
+        for connection in gajim.connections.values():
             if not gajim.config.get_per('accounts', connection.name,
             'sync_with_global_status'):
                 continue
@@ -164,7 +164,7 @@ class StandardCommonCommands(CommandContainer):
         if not message:
             message = _("Available")
 
-        for connection in gajim.connections.itervalues():
+        for connection in gajim.connections.values():
             if not gajim.config.get_per('accounts', connection.name,
             'sync_with_global_status'):
                 continue
diff --git a/src/command_system/mapping.py b/src/command_system/mapping.py
index 3ba68ff4c0d5e6ec8db439650f8ba568c29cefd8..7e224907a4328b4a3f3a086a1e3e1b53f57f21e0 100644
--- a/src/command_system/mapping.py
+++ b/src/command_system/mapping.py
@@ -23,10 +23,9 @@ according to the command properties.
 """
 
 import re
-from types import BooleanType, UnicodeType
 from operator import itemgetter
 
-from errors import DefinitionError, CommandError
+from .errors import DefinitionError, CommandError
 
 # Quite complex piece of regular expression logic to parse options and
 # arguments. Might need some tweaking along the way.
@@ -62,7 +61,7 @@ def parse_arguments(arguments):
     """
     args, opts = [], []
 
-    def intersects_opts((given_start, given_end)):
+    def intersects_opts(given_start, given_end):
         """
         Check if given span intersects with any of options.
         """
@@ -71,7 +70,7 @@ def parse_arguments(arguments):
                 return True
         return False
 
-    def intersects_args((given_start, given_end)):
+    def intersects_args(given_start, given_end):
         """
         Check if given span intersects with any of arguments.
         """
@@ -97,14 +96,14 @@ def parse_arguments(arguments):
     # conflicted sectors. Remove any arguments that intersect with
     # options.
     for arg, position in args[:]:
-        if intersects_opts(position):
+        if intersects_opts(*position):
             args.remove((arg, position))
 
     # Primitive but sufficiently effective way of disposing of
     # conflicted sectors. Remove any options that intersect with
     # arguments.
     for key, value, position in opts[:]:
-        if intersects_args(position):
+        if intersects_args(*position):
             opts.remove((key, value, position))
 
     return args, opts
@@ -207,7 +206,7 @@ def adapt_arguments(command, arguments, args, opts):
     # corresponding optin has been given.
     if command.expand:
         expanded = []
-        for spec_key, spec_value in norm_kwargs.iteritems():
+        for spec_key, spec_value in norm_kwargs.items():
             letter = spec_key[0] if len(spec_key) > 1 else None
             if letter and letter not in expanded:
                 for index, (key, value, position) in enumerate(opts):
@@ -219,7 +218,7 @@ def adapt_arguments(command, arguments, args, opts):
     # Detect switches and set their values accordingly. If any of them
     # carries a value - append it to args.
     for index, (key, value, position) in enumerate(opts):
-        if isinstance(norm_kwargs.get(key), BooleanType):
+        if isinstance(norm_kwargs.get(key), bool):
             opts[index] = (key, True, position)
             if value:
                 args.append((value, position))
@@ -231,8 +230,8 @@ def adapt_arguments(command, arguments, args, opts):
 
     # Stripping down position information supplied with arguments and
     # options as it won't be needed again.
-    args = map(lambda (arg, position): arg, args)
-    opts = map(lambda (key, value, position): (key, value), opts)
+    args = list(map(lambda t: t[0], args))
+    opts = list(map(lambda t: (t[0], t[1]), opts))
 
     # If command has extra option enabled - collect all extra arguments
     # and pass them to a last positional argument command defines as a
@@ -265,16 +264,10 @@ def adapt_arguments(command, arguments, args, opts):
     # Normally this does not happen unless overlapping is enabled.
     for key, value in opts:
         initial = norm_kwargs.get(key)
-        if isinstance(initial, BooleanType):
-            if not isinstance(value, BooleanType):
+        if isinstance(initial, bool):
+            if not isinstance(value, bool):
                 raise CommandError("%s: Switch can not take an argument" % key, command)
 
-    # We need to encode every keyword argument to a simple string, not
-    # the unicode one, because ** expansion does not support it.
-    for index, (key, value) in enumerate(opts):
-        if isinstance(key, UnicodeType):
-            opts[index] = (key.encode(KEY_ENCODING), value)
-
     # Inject the source arguments as a string as a first argument, if
     # command has enabled the corresponding option.
     if command.source:
@@ -305,7 +298,7 @@ def generate_usage(command, complete=True):
         letter = key[0]
         key = key.replace('_', '-')
 
-        if isinstance(value, BooleanType):
+        if isinstance(value, bool):
             value = str()
         else:
             value = '=%s' % value
diff --git a/src/command_system/tools.py b/src/command_system/tools.py
index a5030792c4bf0faaf8d922b9c2fc24612a238514..e67720dede228a8d9d218d503bb3a65a80bc9e31 100644
--- a/src/command_system/tools.py
+++ b/src/command_system/tools.py
@@ -25,20 +25,19 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 from types import *
-from glib import GError
 
 def remove(sequence, target):
-    if isinstance(sequence, ListType):
+    if isinstance(sequence, list):
         if target in sequence:
             sequence.remove(target)
-    elif isinstance(sequence, DictType):
+    elif isinstance(sequence, dict):
         if target in sequence:
             del sequence[target]
 
 def gconf(path):
     try:
-        from gconf import client_get_default
-        client = client_get_default()
+        from gi.repository import GConf
+        client = GConf.Client.get_default()
         return client.get_string(path)
-    except ImportError, GError:
-        pass
\ No newline at end of file
+    except ImportError:
+        pass
diff --git a/src/common/atom.py b/src/common/atom.py
index 71c2a967b5959e7b9516385f8ce2f10b6162e4f7..3cc67f38594ccc2888f7d7e6a01561980cf85d24 100644
--- a/src/common/atom.py
+++ b/src/common/atom.py
@@ -100,13 +100,13 @@ class OldEntry(nbxmpp.Node, object):
 
 
         if main_feed is not None and source_feed is not None:
-            return u'%s: %s' % (main_feed, source_feed)
+            return '%s: %s' % (main_feed, source_feed)
         elif main_feed is not None:
             return main_feed
         elif source_feed is not None:
             return source_feed
         else:
-            return u''
+            return ''
 
     feed_title = property(get_feed_title, None, None,
             ''' Title of feed. It is built from entry''s original feed title and title of feed
@@ -173,4 +173,4 @@ class OldEntry(nbxmpp.Node, object):
     updated = property(get_updated, None, None,
             ''' Last significant modification time. ''')
 
-    feed_tagline = u''
+    feed_tagline = ''
diff --git a/src/common/caps_cache.py b/src/common/caps_cache.py
index 21960be5e50730e7549068fd204b4248ce04c60d..2421cabf8828d17ecbbd9b99def0ca81716236ff 100644
--- a/src/common/caps_cache.py
+++ b/src/common/caps_cache.py
@@ -130,7 +130,8 @@ def compute_caps_hash(identities, features, dataforms=[], hash_method='sha-1'):
         return 1
 
     S = ''
-    identities.sort(cmp=sort_identities_func)
+    from functools import cmp_to_key
+    identities.sort(key=cmp_to_key(sort_identities_func))
     for i in identities:
         c = i['category']
         type_ = i.get('type', '')
@@ -140,7 +141,7 @@ def compute_caps_hash(identities, features, dataforms=[], hash_method='sha-1'):
     features.sort()
     for f in features:
         S += '%s<' % f
-    dataforms.sort(cmp=sort_dataforms_func)
+    dataforms.sort(key=cmp_to_key(sort_dataforms_func))
     for dataform in dataforms:
         # fields indexed by var
         fields = {}
@@ -157,12 +158,12 @@ def compute_caps_hash(identities, features, dataforms=[], hash_method='sha-1'):
                 S += '%s<' % value
 
     if hash_method == 'sha-1':
-        hash_ = hashlib.sha1(S)
+        hash_ = hashlib.sha1(S.encode('utf-8'))
     elif hash_method == 'md5':
-        hash_ = hashlib.md5(S)
+        hash_ = hashlib.md5(S.encode('utf-8'))
     else:
         return ''
-    return base64.b64encode(hash_.digest())
+    return base64.b64encode(hash_.digest()).decode('utf-8')
 
 
 ################################################################################
diff --git a/src/common/check_X509.py b/src/common/check_X509.py
index d0e8fbfcfa65cfbeb5f16574b65ef4a78ea9aa9f..14ace64b08eb9c7045ba3fb7770043f134fb5ed7 100644
--- a/src/common/check_X509.py
+++ b/src/common/check_X509.py
@@ -173,7 +173,7 @@ try:
             return True
         return False
 except ImportError:
-    log.warn('Import of PyOpenSSL or pyasn1 failed. Cannot correctly check '
+    log.warning('Import of PyOpenSSL or pyasn1 failed. Cannot correctly check '
         'SSL certificate')
 
     def check_certificate(cert, domain):
diff --git a/src/common/check_paths.py b/src/common/check_paths.py
index 02a52e9ae67da84e5958dab5e9f42ce2fb34e5f3..393eecc756fa6a4e6591e63a23b11d0c7040c196 100644
--- a/src/common/check_paths.py
+++ b/src/common/check_paths.py
@@ -29,16 +29,16 @@ import sys
 import stat
 
 from common import gajim
-import logger
+from common import logger
 from common import jingle_xtls
 
 # DO NOT MOVE ABOVE OF import gajim
 import sqlite3 as sqlite
 
 def create_log_db():
-    print _('creating logs database')
+    print(_('creating logs database'))
     con = sqlite.connect(logger.LOG_DB_PATH)
-    os.chmod(logger.LOG_DB_PATH, 0600) # rw only for us
+    os.chmod(logger.LOG_DB_PATH, 0o600) # rw only for us
     cur = con.cursor()
     # create the tables
     # kind can be
@@ -84,9 +84,9 @@ def create_log_db():
     con.close()
 
 def create_cache_db():
-    print _('creating cache database')
+    print(_('creating cache database'))
     con = sqlite.connect(logger.CACHE_DB_PATH)
-    os.chmod(logger.CACHE_DB_PATH, 0600) # rw only for us
+    os.chmod(logger.CACHE_DB_PATH, 0o600) # rw only for us
     cur = con.cursor()
     cur.executescript(
             '''
@@ -128,16 +128,16 @@ def create_cache_db():
     con.close()
 
 def split_db():
-    print 'spliting database'
+    print('spliting database')
     if os.name == 'nt':
         try:
             import configpaths
             OLD_LOG_DB_FOLDER = os.path.join(configpaths.fse(
-                os.environ[u'appdata']), u'Gajim')
+                os.environ['appdata']), 'Gajim')
         except KeyError:
-            OLD_LOG_DB_FOLDER = u'.'
+            OLD_LOG_DB_FOLDER = '.'
     else:
-        OLD_LOG_DB_FOLDER = os.path.expanduser(u'~/.gajim')
+        OLD_LOG_DB_FOLDER = os.path.expanduser('~/.gajim')
 
     tmp = logger.CACHE_DB_PATH
     logger.CACHE_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, 'cache.db')
@@ -148,7 +148,7 @@ def split_db():
     os.chdir(back)
     cur = con.cursor()
     cur.execute('''SELECT name FROM sqlite_master WHERE type = 'table';''')
-    tables = cur.fetchall() # we get [(u'jids',), (u'unread_messages',), ...
+    tables = cur.fetchall() # we get [('jids',), ('unread_messages',), ...
     tables = [t[0] for t in tables]
     cur.execute("ATTACH DATABASE '%s' AS cache" % logger.CACHE_DB_PATH)
     for table in ('caps_cache', 'rooms_last_message_time', 'roster_entry',
@@ -161,9 +161,9 @@ def split_db():
             con.commit()
             cur.executescript('DROP TABLE %s;' % table)
             con.commit()
-        except sqlite.OperationalError, e:
-            print >> sys.stderr, 'error moving table %s to cache.db: %s' % \
-                    (table, str(e))
+        except sqlite.OperationalError as e:
+            print('error moving table %s to cache.db: %s' % (table, str(e)),
+                file=sys.stderr)
     con.close()
     logger.CACHE_DB_PATH = tmp
 
@@ -177,7 +177,7 @@ def check_and_possibly_move_config():
     vars['MY_ICONSETS_PATH'] = gajim.MY_ICONSETS_PATH
     vars['MY_MOOD_ICONSETS_PATH'] = gajim.MY_MOOD_ICONSETS_PATH
     vars['MY_ACTIVITY_ICONSETS_PATH'] = gajim.MY_ACTIVITY_ICONSETS_PATH
-    import configpaths
+    from common import configpaths
     MY_DATA = configpaths.gajimpaths['MY_DATA']
     MY_CONFIG = configpaths.gajimpaths['MY_CONFIG']
     MY_CACHE = configpaths.gajimpaths['MY_CACHE']
@@ -189,22 +189,22 @@ def check_and_possibly_move_config():
     if os.name == 'nt':
         try:
             OLD_LOG_DB_FOLDER = os.path.join(configpaths.fse(
-                os.environ[u'appdata']), u'Gajim')
+                os.environ['appdata']), 'Gajim')
         except KeyError:
-            OLD_LOG_DB_FOLDER = u'.'
+            OLD_LOG_DB_FOLDER = '.'
     else:
-        OLD_LOG_DB_FOLDER = os.path.expanduser(u'~/.gajim')
+        OLD_LOG_DB_FOLDER = os.path.expanduser('~/.gajim')
     if not os.path.exists(OLD_LOG_DB_FOLDER):
         return
-    OLD_LOG_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, u'logs.db')
-    OLD_CACHE_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, u'cache.db')
-    vars['OLD_VCARD_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'vcards')
-    vars['OLD_AVATAR_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'avatars')
-    vars['OLD_MY_EMOTS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'emoticons')
-    vars['OLD_MY_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'iconsets')
-    vars['OLD_MY_MOOD_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'moods')
+    OLD_LOG_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, 'logs.db')
+    OLD_CACHE_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, 'cache.db')
+    vars['OLD_VCARD_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, 'vcards')
+    vars['OLD_AVATAR_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, 'avatars')
+    vars['OLD_MY_EMOTS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, 'emoticons')
+    vars['OLD_MY_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, 'iconsets')
+    vars['OLD_MY_MOOD_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, 'moods')
     vars['OLD_MY_ACTIVITY_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER,
-            u'activities')
+            'activities')
     OLD_CONFIG_FILES = []
     OLD_DATA_FILES = []
     for f in os.listdir(OLD_LOG_DB_FOLDER):
@@ -249,7 +249,7 @@ def check_and_possibly_move_config():
             continue
         if not os.path.exists(src):
             continue
-        print 'moving %s to %s' % (src, dst)
+        print(_('moving %s to %s') % (src, dst))
         shutil.move(src, dst)
     gajim.logger.init_vars()
     gajim.logger.attach_cache_database()
@@ -263,7 +263,7 @@ def check_and_possibly_create_paths():
 
     VCARD_PATH = gajim.VCARD_PATH
     AVATAR_PATH = gajim.AVATAR_PATH
-    import configpaths
+    from common import configpaths
     MY_DATA = configpaths.gajimpaths['MY_DATA']
     MY_CONFIG = configpaths.gajimpaths['MY_CONFIG']
     MY_CACHE = configpaths.gajimpaths['MY_CACHE']
@@ -275,57 +275,57 @@ def check_and_possibly_create_paths():
     if not os.path.exists(MY_DATA):
         create_path(MY_DATA)
     elif os.path.isfile(MY_DATA):
-        print _('%s is a file but it should be a directory') % MY_DATA
-        print _('Gajim will now exit')
+        print(_('%s is a file but it should be a directory') % MY_DATA)
+        print(_('Gajim will now exit'))
         sys.exit()
 
     if not os.path.exists(MY_CONFIG):
         create_path(MY_CONFIG)
     elif os.path.isfile(MY_CONFIG):
-        print _('%s is a file but it should be a directory') % MY_CONFIG
-        print _('Gajim will now exit')
+        print(_('%s is a file but it should be a directory') % MY_CONFIG)
+        print(_('Gajim will now exit'))
         sys.exit()
 
     if not os.path.exists(MY_CACHE):
         create_path(MY_CACHE)
     elif os.path.isfile(MY_CACHE):
-        print _('%s is a file but it should be a directory') % MY_CACHE
-        print _('Gajim will now exit')
+        print(_('%s is a file but it should be a directory') % MY_CACHE)
+        print(_('Gajim will now exit'))
         sys.exit()
 
     if not os.path.exists(VCARD_PATH):
         create_path(VCARD_PATH)
     elif os.path.isfile(VCARD_PATH):
-        print _('%s is a file but it should be a directory') % VCARD_PATH
-        print _('Gajim will now exit')
+        print(_('%s is a file but it should be a directory') % VCARD_PATH)
+        print(_('Gajim will now exit'))
         sys.exit()
 
     if not os.path.exists(AVATAR_PATH):
         create_path(AVATAR_PATH)
     elif os.path.isfile(AVATAR_PATH):
-        print _('%s is a file but it should be a directory') % AVATAR_PATH
-        print _('Gajim will now exit')
+        print(_('%s is a file but it should be a directory') % AVATAR_PATH)
+        print(_('Gajim will now exit'))
         sys.exit()
 
     if not os.path.exists(LOG_DB_FOLDER):
         create_path(LOG_DB_FOLDER)
     elif os.path.isfile(LOG_DB_FOLDER):
-        print _('%s is a file but it should be a directory') % LOG_DB_FOLDER
-        print _('Gajim will now exit')
+        print(_('%s is a file but it should be a directory') % LOG_DB_FOLDER)
+        print(_('Gajim will now exit'))
         sys.exit()
 
     if not os.path.exists(PLUGINS_CONFIG_PATH):
         create_path(PLUGINS_CONFIG_PATH)
     elif os.path.isfile(PLUGINS_CONFIG_PATH):
-        print _('%s is a file but it should be a directory') % PLUGINS_CONFIG_PATH
-        print _('Gajim will now exit')
+        print(_('%s is a file but it should be a directory') % PLUGINS_CONFIG_PATH)
+        print(_('Gajim will now exit'))
         sys.exit()
 
     if not os.path.exists(CACHE_DB_FOLDER):
         create_path(CACHE_DB_FOLDER)
     elif os.path.isfile(CACHE_DB_FOLDER):
-        print _('%s is a file but it should be a directory') % CACHE_DB_FOLDER
-        print _('Gajim will now exit')
+        print(_('%s is a file but it should be a directory') % CACHE_DB_FOLDER)
+        print(_('Gajim will now exit'))
         sys.exit()
 
     check_and_possibly_move_config()
@@ -334,18 +334,18 @@ def check_and_possibly_create_paths():
         create_log_db()
         gajim.logger.init_vars()
     elif os.path.isdir(LOG_DB_PATH):
-        print _('%s is a directory but should be a file') % LOG_DB_PATH
-        print _('Gajim will now exit')
+        print(_('%s is a directory but should be a file') % LOG_DB_PATH)
+        print(_('Gajim will now exit'))
         sys.exit()
 
     if not os.path.exists(CACHE_DB_PATH):
         create_cache_db()
         gajim.logger.attach_cache_database()
     elif os.path.isdir(CACHE_DB_PATH):
-        print _('%s is a directory but should be a file') % CACHE_DB_PATH
-        print _('Gajim will now exit')
+        print(_('%s is a directory but should be a file') % CACHE_DB_PATH)
+        print(_('Gajim will now exit'))
         sys.exit()
-        
+
     if not os.path.exists(XTLS_CERTS):
         create_path(XTLS_CERTS)
     if not os.path.exists(LOCAL_XTLS_CERTS):
@@ -363,5 +363,5 @@ def create_path(directory):
         create_path(head)
     if os.path.exists(directory):
         return
-    print _('creating %s directory') % directory
-    os.mkdir(directory, 0700)
+    print(('creating %s directory') % directory)
+    os.mkdir(directory, 0o700)
diff --git a/src/common/commands.py b/src/common/commands.py
index 2954b9297a853aee0b711b015600cc0889186b67..f6072b2153d7b0bc3235c3c727fe4d8fd6d6cf3d 100644
--- a/src/common/commands.py
+++ b/src/common/commands.py
@@ -23,9 +23,9 @@
 ##
 
 import nbxmpp
-import helpers
-import dataforms
-import gajim
+from common import helpers
+from common import dataforms
+from common import gajim
 from common.connection_handlers_events import MessageOutgoingEvent
 
 import logging
@@ -105,12 +105,12 @@ class ChangeStatusCommand(AdHocCommand):
                                 var = 'presence-type',
                                 label = 'Type of presence:',
                                 options = [
-                                        (u'chat', _('Free for chat')),
-                                        (u'online', _('Online')),
-                                        (u'away', _('Away')),
-                                        (u'xa', _('Extended away')),
-                                        (u'dnd', _('Do not disturb')),
-                                        (u'offline', _('Offline - disconnect'))],
+                                        ('chat', _('Free for chat')),
+                                        ('online', _('Online')),
+                                        ('away', _('Away')),
+                                        ('xa', _('Extended away')),
+                                        ('dnd', _('Do not disturb')),
+                                        ('offline', _('Offline - disconnect'))],
                                 value = 'online',
                                 required = True),
                         dataforms.Field('text-multi',
@@ -147,7 +147,7 @@ class ChangeStatusCommand(AdHocCommand):
         try:
             presencedesc = form['presence-desc'].value
         except Exception:       # same exceptions as in last comment
-            presencedesc = u''
+            presencedesc = ''
 
         response, cmd = self.buildResponse(request, status = 'completed')
         cmd.addChild('note', {}, _('The status has been changed.'))
@@ -198,7 +198,7 @@ class LeaveGroupchatsCommand(AdHocCommand):
         options = []
         account = self.connection.name
         for gc in find_current_groupchats(account):
-            options.append((u'%s' %(gc[0]), _('%(nickname)s on %(room_jid)s') % \
+            options.append(('%s' %(gc[0]), _('%(nickname)s on %(room_jid)s') % \
                     {'nickname': gc[1], 'room_jid': gc[0]}))
         if not len(options):
             response, cmd = self.buildResponse(request, status = 'completed')
@@ -369,11 +369,11 @@ class ConnectionCommands:
         # buildReply don't copy the node attribute. Re-add it
         q.setAttr('node', nbxmpp.NS_COMMANDS)
 
-        for node, cmd in self.__commands.iteritems():
+        for node, cmd in self.__commands.items():
             if cmd.isVisibleFor(self.isSameJID(jid)):
                 q.addChild('item', {
                         # TODO: find the jid
-                        'jid': self.getOurBareJID() + u'/' + self.server_resource,
+                        'jid': self.getOurBareJID() + '/' + self.server_resource,
                         'node': node,
                         'name': cmd.commandname})
 
@@ -387,7 +387,7 @@ class ConnectionCommands:
         try:
             jid = helpers.get_full_jid_from_iq(iq_obj)
         except helpers.InvalidFormat:
-            log.warn('Invalid JID: %s, ignoring it' % iq_obj.getFrom())
+            log.warning('Invalid JID: %s, ignoring it' % iq_obj.getFrom())
             return
         node = iq_obj.getTagAttr('query', 'node')
 
diff --git a/src/common/config.py b/src/common/config.py
index f3a6998d8f4ed1cebcbf4e8813a087b96178385b..7b905642f661c450d79adf0728dd39ad1e024085 100644
--- a/src/common/config.py
+++ b/src/common/config.py
@@ -35,8 +35,8 @@
 import sys
 import re
 import copy
-import defs
-import gobject
+from common import defs
+from gi.repository import GLib
 
 (
 OPT_TYPE,
@@ -191,7 +191,7 @@ class Config:
             'dictionary_url': [opt_str, 'WIKTIONARY', _("Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' which means use wiktionary.")],
             'always_english_wikipedia': [opt_bool, False],
             'always_english_wiktionary': [opt_bool, True],
-            'remote_control': [opt_bool, True, _('If checked, Gajim can be controlled remotely using gajim-remote.'), True],
+            'remote_control': [opt_bool, False, _('If checked, Gajim can be controlled remotely using gajim-remote.'), True],
             'networkmanager_support': [opt_bool, True, _('If True, listen to D-Bus signals from NetworkManager and change the status of accounts (provided they do not have listen_to_network_manager set to False and they sync with global status) based upon the status of the network connection.'), True],
             'outgoing_chat_state_notifications': [opt_str, 'all', _('Sent chat state notifications. Can be one of all, composing_only, disabled.')],
             'displayed_chat_state_notifications': [opt_str, 'all', _('Displayed chat state notifications in chat windows. Can be one of all, composing_only, disabled.')],
@@ -217,7 +217,7 @@ class Config:
             'tabs_always_visible': [opt_bool, False, _('Show tab when only one conversation?')],
             'tabs_border': [opt_bool, False, _('Show tabbed notebook border in chat windows?')],
             'tabs_close_button': [opt_bool, True, _('Show close button in tab?')],
-            'esession_modp': [opt_str, '5,14', _('A list of modp groups to use in a Diffie-Hellman, highest preference first, separated by commas. Valid groups are 1, 2, 5, 14, 15, 16, 17 and 18. Higher numbers are more secure, but take longer to calculate when you start a session.')],
+            'esession_modp': [opt_str, '15,16,14', _('A list of modp groups to use in a Diffie-Hellman, highest preference first, separated by commas. Valid groups are 1, 2, 5, 14, 15, 16, 17 and 18. Higher numbers are more secure, but take longer to calculate when you start a session.')],
             'chat_avatar_width': [opt_int, 52],
             'chat_avatar_height': [opt_int, 52],
             'roster_avatar_width': [opt_int, 32],
@@ -349,7 +349,6 @@ class Config:
                     'enable_esessions': [opt_bool, True, _('Enable ESessions encryption for this account.')],
                     'autonegotiate_esessions': [opt_bool, True, _('Should Gajim automatically start an encrypted session when possible?')],
                     'connection_types': [ opt_str, 'tls ssl plain', _('Ordered list (space separated) of connection type to try. Can contain tls, ssl or plain')],
-                    'tls_version': [ opt_str, '1.0', '' ],
                     'cipher_list': [ opt_str, 'HIGH:!aNULL:RC4-SHA', '' ],
                     'action_when_plaintext_connection': [ opt_str, 'warn', _('Show a warning dialog before sending password on an plaintext connection. Can be \'warn\', \'connect\', \'disconnect\'') ],
                     'warn_when_insecure_ssl_connection': [ opt_bool, True, _('Show a warning dialog before using standard SSL library.') ],
@@ -573,7 +572,7 @@ class Config:
         Tree-like interface
         """
         if node is None:
-            for child, option in self.__options[1].iteritems():
+            for child, option in self.__options[1].items():
                 yield (child, ), option
             for grandparent in self.__options_per_key:
                 yield (grandparent, ), None
@@ -584,7 +583,7 @@ class Config:
         elif len(node) == 2:
             grandparent, parent = node
             children = self.__options_per_key[grandparent][1][parent]
-            for child, option in children.iteritems():
+            for child, option in children.items():
                 yield (grandparent, parent, child), option
         else:
             raise ValueError('Invalid node')
@@ -630,11 +629,9 @@ class Config:
 
     def set(self, optname, value):
         if optname not in self.__options[1]:
-#                       raise RuntimeError, 'option %s does not exist' % optname
             return
         value = self.is_valid(self.__options[0][optname][OPT_TYPE], value)
         if value is None:
-#                       raise RuntimeError, 'value of %s cannot be None' % optname
             return
 
         self.__options[1][optname] = value
@@ -642,7 +639,7 @@ class Config:
 
     def get(self, optname=None):
         if not optname:
-            return self.__options[1].keys()
+            return list(self.__options[1].keys())
         if optname not in self.__options[1]:
             return None
         return self.__options[1][optname]
@@ -671,7 +668,6 @@ class Config:
 
     def add_per(self, typename, name): # per_group_of_option
         if typename not in self.__options_per_key:
-#                       raise RuntimeError, 'option %s does not exist' % typename
             return
 
         opt = self.__options_per_key[typename]
@@ -685,7 +681,6 @@ class Config:
 
     def del_per(self, typename, name, subname = None): # per_group_of_option
         if typename not in self.__options_per_key:
-#                       raise RuntimeError, 'option %s does not exist' % typename
             return
 
         opt = self.__options_per_key[typename]
@@ -698,22 +693,18 @@ class Config:
 
     def set_per(self, optname, key, subname, value): # per_group_of_option
         if optname not in self.__options_per_key:
-#                       raise RuntimeError, 'option %s does not exist' % optname
             return
         if not key:
             return
         dict_ = self.__options_per_key[optname][1]
         if key not in dict_:
-#                       raise RuntimeError, '%s is not a key of %s' % (key, dict_)
             self.add_per(optname, key)
         obj = dict_[key]
         if subname not in obj:
-#                       raise RuntimeError, '%s is not a key of %s' % (subname, obj)
             return
         typ = self.__options_per_key[optname][0][subname][OPT_TYPE]
         value = self.is_valid(typ, value)
         if value is None:
-#                       raise RuntimeError, '%s of %s cannot be None' % optname
             return
         obj[subname] = value
         self._timeout_save()
@@ -723,7 +714,7 @@ class Config:
             return None
         dict_ = self.__options_per_key[optname][1]
         if not key:
-            return dict_.keys()
+            return list(dict_.keys())
         if key not in dict_:
             if subname in self.__options_per_key[optname][0]:
                 return self.__options_per_key[optname][0][subname][1]
@@ -812,7 +803,7 @@ class Config:
     def _timeout_save(self):
         if self.save_timeout_id:
             return
-        self.save_timeout_id = gobject.timeout_add(1000, self._really_save)
+        self.save_timeout_id = GLib.timeout_add(1000, self._really_save)
 
     def __init__(self):
         #init default values
diff --git a/src/common/configpaths.py b/src/common/configpaths.py
index 3c4e8f22586e5351b8798a8126716be945b79438..05b6bc225c8ba1ebd28314875376c2ab29d4133f 100644
--- a/src/common/configpaths.py
+++ b/src/common/configpaths.py
@@ -25,7 +25,7 @@
 import os
 import sys
 import tempfile
-import defs
+from common import defs
 HAVE_XDG = True
 try:
     __import__(xdg)
@@ -61,7 +61,7 @@ def fse(s):
     """
     Convert from filesystem encoding if not already Unicode
     """
-    return unicode(s, sys.getfilesystemencoding())
+    return s
 
 def windowsify(s):
     if os.name == 'nt':
@@ -82,10 +82,10 @@ class ConfigPaths:
                 # variable 'appdata' is in? Assuming it to be in filesystem
                 # encoding.
                 self.config_root = self.cache_root = self.data_root = \
-                        os.path.join(fse(os.environ[u'appdata']), u'Gajim')
+                        os.path.join(fse(os.environ['appdata']), 'Gajim')
             except KeyError:
                 # win9x, in cwd
-                self.config_root = self.cache_root = self.data_root = u'.'
+                self.config_root = self.cache_root = self.data_root = '.'
         else: # Unices
             # Pass in an Unicode string, and hopefully get one back.
             if HAVE_XDG:
@@ -93,23 +93,23 @@ class ConfigPaths:
                 if not self.config_root:
                     # Folder doesn't exist yet.
                     self.config_root = os.path.join(xdg.BaseDirectory.\
-                            xdg_config_dirs[0], u'gajim')
+                            xdg_config_dirs[0], 'gajim')
 
                 self.cache_root = os.path.join(xdg.BaseDirectory.xdg_cache_home,
-                        u'gajim')
+                        'gajim')
 
                 self.data_root = xdg.BaseDirectory.save_data_path('gajim')
                 if not self.data_root:
                     self.data_root = os.path.join(xdg.BaseDirectory.\
-                            xdg_data_dirs[0], u'gajim')
+                            xdg_data_dirs[0], 'gajim')
             else:
                 expand = os.path.expanduser
-                base = os.getenv('XDG_CONFIG_HOME') or expand(u'~/.config')
-                self.config_root = os.path.join(base, u'gajim')
-                base = os.getenv('XDG_CACHE_HOME') or expand(u'~/.cache')
-                self.cache_root = os.path.join(base, u'gajim')
-                base = os.getenv('XDG_DATA_HOME') or expand(u'~/.local/share')
-                self.data_root = os.path.join(base, u'gajim')
+                base = os.getenv('XDG_CONFIG_HOME') or expand('~/.config')
+                self.config_root = os.path.join(base, 'gajim')
+                base = os.getenv('XDG_CACHE_HOME') or expand('~/.cache')
+                self.cache_root = os.path.join(base, 'gajim')
+                base = os.getenv('XDG_DATA_HOME') or expand('~/.local/share')
+                self.data_root = os.path.join(base, 'gajim')
 
     def add(self, name, type_, path):
         self.paths[name] = (type_, path)
@@ -130,40 +130,41 @@ class ConfigPaths:
         except KeyError:
             return default
 
-    def iteritems(self):
-        for key in self.paths.iterkeys():
+    def items(self):
+        for key in self.paths.keys():
             yield (key, self[key])
 
     def init(self, root=None):
         if root is not None:
             self.config_root = self.cache_root = self.data_root = root
 
-        d = {'MY_DATA': '', 'LOG_DB': u'logs.db', 'MY_CACERTS': u'cacerts.pem',
-                'MY_EMOTS': u'emoticons', 'MY_ICONSETS': u'iconsets',
-                'MY_MOOD_ICONSETS': u'moods', 'MY_ACTIVITY_ICONSETS': u'activities',
-                'PLUGINS_USER': u'plugins', 'MY_PEER_CERTS': u'certs'}
+        d = {'MY_DATA': '', 'LOG_DB': 'logs.db', 'MY_CACERTS': 'cacerts.pem',
+            'MY_EMOTS': 'emoticons', 'MY_ICONSETS': 'iconsets',
+            'MY_MOOD_ICONSETS': 'moods', 'MY_ACTIVITY_ICONSETS': 'activities',
+            'PLUGINS_USER': 'plugins', 'MY_PEER_CERTS': 'certs',
+            'RNG_SEED': 'rng_seed'}
         for name in d:
             self.add(name, TYPE_DATA, windowsify(d[name]))
 
-        d = {'MY_CACHE': '', 'CACHE_DB': u'cache.db', 'VCARD': u'vcards',
-                'AVATAR': u'avatars'}
+        d = {'MY_CACHE': '', 'CACHE_DB': 'cache.db', 'VCARD': 'vcards',
+                'AVATAR': 'avatars'}
         for name in d:
             self.add(name, TYPE_CACHE, windowsify(d[name]))
 
         self.add('MY_CONFIG', TYPE_CONFIG, '')
         self.add('MY_CERT', TYPE_CONFIG, '')
 
-        basedir = fse(os.environ.get(u'GAJIM_BASEDIR', defs.basedir))
-        self.add('DATA', None, os.path.join(basedir, windowsify(u'data')))
-        self.add('ICONS', None, os.path.join(basedir, windowsify(u'icons')))
+        basedir = fse(os.environ.get('GAJIM_BASEDIR', defs.basedir))
+        self.add('DATA', None, os.path.join(basedir, windowsify('data')))
+        self.add('ICONS', None, os.path.join(basedir, windowsify('icons')))
         self.add('HOME', None, fse(os.path.expanduser('~')))
         self.add('PLUGINS_BASE', None, os.path.join(basedir,
-            windowsify(u'plugins')))
+            windowsify('plugins')))
         try:
             self.add('TMP', None, fse(tempfile.gettempdir()))
-        except IOError, e:
-            print >> sys.stderr, 'Error opening tmp folder: %s\nUsing %s' % (
-                    str(e), os.path.expanduser('~'))
+        except IOError as e:
+            print('Error opening tmp folder: %s\nUsing %s' % (str(e),
+                os.path.expanduser('~')), file=sys.stderr)
             self.add('TMP', None, fse(os.path.expanduser('~')))
 
         try:
@@ -173,17 +174,17 @@ class ConfigPaths:
             pass
 
     def init_profile(self, profile=''):
-        conffile = windowsify(u'config')
-        pidfile = windowsify(u'gajim')
-        secretsfile = windowsify(u'secrets')
-        pluginsconfdir = windowsify(u'pluginsconfig')
+        conffile = windowsify('config')
+        pidfile = windowsify('gajim')
+        secretsfile = windowsify('secrets')
+        pluginsconfdir = windowsify('pluginsconfig')
 
         if len(profile) > 0:
-            conffile += u'.' + profile
-            pidfile += u'.' + profile
-            secretsfile += u'.' + profile
-            pluginsconfdir += u'.' + profile
-        pidfile += u'.pid'
+            conffile += '.' + profile
+            pidfile += '.' + profile
+            secretsfile += '.' + profile
+            pluginsconfdir += '.' + profile
+        pidfile += '.pid'
         self.add('CONFIG_FILE', TYPE_CONFIG, conffile)
         self.add('PID_FILE', TYPE_CACHE, pidfile)
         self.add('SECRETS_FILE', TYPE_DATA, secretsfile)
diff --git a/src/common/connection.py b/src/common/connection.py
index 3f27510e050909408472ad084854c517c6ab0178..96e8ae0857fc17abd6bef693577c9cd75ff9a26e 100644
--- a/src/common/connection.py
+++ b/src/common/connection.py
@@ -59,7 +59,7 @@ from common import gpg
 from common import passwords
 from common import exceptions
 from common import check_X509
-from connection_handlers import *
+from common.connection_handlers import *
 
 if gajim.HAVE_PYOPENSSL:
     import OpenSSL.crypto
@@ -312,8 +312,7 @@ class CommonConnection:
             else:
                 def encrypt_thread(msg, keyID, always_trust=False):
                     # encrypt message. This function returns (msgenc, error)
-                    return self.gpg.encrypt(msg.encode('utf-8'), [keyID],
-                        always_trust)
+                    return self.gpg.encrypt(msg, [keyID], always_trust)
                 def _on_encrypted(output):
                     msgenc, error = output
                     if error == 'NOT_TRUSTED':
@@ -329,7 +328,7 @@ class CommonConnection:
                                     form_node, user_nick, keyID, attention,
                                     correction_msg, callback)
                         gajim.nec.push_incoming_event(GPGTrustKeyEvent(None,
-                            conn=self, callback=_on_always_trust))
+                            conn=self, keyID=keyID, callback=_on_always_trust))
                     else:
                         self._message_encrypted_cb(output, type_, msg, msgtxt,
                             original_message, fjid, resource, jid, xhtml,
@@ -519,7 +518,7 @@ class CommonConnection:
                             log_msg = '<body xmlns="%s">%s</body>' % (
                                 nbxmpp.NS_XHTML, xhtml)
                         gajim.logger.write(kind, jid, log_msg)
-                    except exceptions.PysqliteOperationalError, e:
+                    except exceptions.PysqliteOperationalError as e:
                         self.dispatch('DB_ERROR', (_('Disk Write Error'),
                             str(e)))
                     except exceptions.DatabaseMalformed:
@@ -680,10 +679,10 @@ class CommonConnection:
         if realm == '':
             if event == nbxmpp.transports_nb.DATA_RECEIVED:
                 gajim.nec.push_incoming_event(StanzaReceivedEvent(None,
-                    conn=self, stanza_str=unicode(data, errors='ignore')))
+                    conn=self, stanza_str=data))
             elif event == nbxmpp.transports_nb.DATA_SENT:
                 gajim.nec.push_incoming_event(StanzaSentEvent(None, conn=self,
-                    stanza_str=unicode(data)))
+                    stanza_str=data))
 
     def change_status(self, show, msg, auto=False):
         if not msg:
@@ -779,7 +778,7 @@ class Connection(CommonConnection, ConnectionHandlers):
         self.private_storage_supported = True
         self.privacy_rules_requested = False
         self.streamError = ''
-        self.secret_hmac = str(random.random())[2:]
+        self.secret_hmac = str(random.random())[2:].encode('utf-8')
 
         self.sm = Smacks(self) # Stream Management
 
@@ -981,8 +980,8 @@ class Connection(CommonConnection, ConnectionHandlers):
                             self.connection.SendAndCallForResponse(iq,
                                     _on_register_result)
                         else:
-                            if self.new_account_form.keys().sort() != \
-                            conf.keys().sort():
+                            if list(self.new_account_form.keys()).sort() != \
+                            list(conf.keys()).sort():
                                 # requested config has changed since first connection
                                 reason = _('Server %s provided a different '
                                     'registration form') % data[0]
@@ -1239,11 +1238,9 @@ class Connection(CommonConnection, ConnectionHandlers):
             if not os.path.exists(cacerts):
                 cacerts = ''
             mycerts = common.gajim.MY_CACERTS
-            tls_version = gajim.config.get_per('accounts', self.name,
-                'tls_version')
             cipher_list = gajim.config.get_per('accounts', self.name,
                 'cipher_list')
-            secure_tuple = (self._current_type, cacerts, mycerts, tls_version, cipher_list)
+            secure_tuple = (self._current_type, cacerts, mycerts, cipher_list)
 
             con = nbxmpp.NonBlockingClient(
                 domain=self._hostname,
@@ -1391,41 +1388,40 @@ class Connection(CommonConnection, ConnectionHandlers):
         cert = con.Connection.ssl_certificate
         if errnum > 0 and str(errnum) not in gajim.config.get_per('accounts',
         self.name, 'ignore_ssl_errors').split():
-            text = _('The authenticity of the %s certificate could be invlid') \
-                % hostname
+            text = _('The authenticity of the %s certificate could be invalid'
+                ) % hostname
             if errnum in ssl_error:
                 text += _('\nSSL Error: <b>%s</b>') % ssl_error[errnum]
             else:
                 text += _('\nUnknown SSL error: %d') % errnum
-            fingerprint = cert.digest('sha1')
+            fingerprint = cert.digest('sha1').decode('utf-8')
             pem = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM,
-                cert)
+                cert).decode('utf-8')
             gajim.nec.push_incoming_event(SSLErrorEvent(None, conn=self,
                 error_text=text, error_num=errnum, cert=pem,
                 fingerprint=fingerprint, certificate=cert))
             return True
         if cert:
-            fingerprint = cert.digest('sha1')
+            fingerprint = cert.digest('sha1').decode('utf-8')
             saved_fingerprint = gajim.config.get_per('accounts', self.name,
                 'ssl_fingerprint_sha1')
             if saved_fingerprint:
                 # Check sha1 fingerprint
                 if fingerprint != saved_fingerprint:
                     gajim.nec.push_incoming_event(FingerprintErrorEvent(None,
-                        conn=self, certificate=con.Connection.ssl_certificate,
+                        conn=self, certificate=cert,
                         new_fingerprint=fingerprint))
                     return True
             else:
                 gajim.config.set_per('accounts', self.name,
                     'ssl_fingerprint_sha1', fingerprint)
-            if not check_X509.check_certificate(con.Connection.ssl_certificate,
-            hostname) and '100' not in gajim.config.get_per('accounts',
-            self.name, 'ignore_ssl_errors').split():
-                fingerprint = cert.digest('sha1')
+            if not check_X509.check_certificate(cert, hostname) and \
+            '100' not in gajim.config.get_per('accounts', self.name,
+            'ignore_ssl_errors').split():
                 pem = OpenSSL.crypto.dump_certificate(
-                    OpenSSL.crypto.FILETYPE_PEM, cert)
+                    OpenSSL.crypto.FILETYPE_PEM, cert).decode('utf-8')
                 txt = _('The authenticity of the %s certificate could be '
-                    'invalid.\nThe certificate does not cover this domain.') % \
+                    'invalid.\nThe certificate does not cover this domain.') %\
                     hostname
                 gajim.nec.push_incoming_event(SSLErrorEvent(None, conn=self,
                     error_text=txt, error_num=100, cert=pem,
@@ -1523,7 +1519,7 @@ class Connection(CommonConnection, ConnectionHandlers):
             self.connection.send(' ')
 
     def _on_xmpp_ping_answer(self, iq_obj):
-        id_ = unicode(iq_obj.getAttr('id'))
+        id_ = iq_obj.getAttr('id')
         assert id_ == self.awaiting_xmpp_ping_id
         self.awaiting_xmpp_ping_id = None
 
@@ -1772,9 +1768,9 @@ class Connection(CommonConnection, ConnectionHandlers):
             gajim.nec.push_incoming_event(OurShowEvent(None, conn=self,
                 show=gajim.SHOW_LIST[self.connected]))
             gajim.nec.push_incoming_event(InformationEvent(None, conn=self,
-                level='error', pri_txt=_('Invisibility not supported',
+                level='error', pri_txt=_('Invisibility not supported'),
                 sec_txt=_('Account %s doesn\'t support invisibility.') % \
-                self.name)))
+                self.name))
             return
         # If we are already connected, and privacy rules are supported, send
         # offline presence first as it's required by XEP-0126
@@ -1800,7 +1796,7 @@ class Connection(CommonConnection, ConnectionHandlers):
         self.activate_privacy_rule('invisible')
         self.connected = gajim.SHOW_LIST.index('invisible')
         self.status = msg
-        priority = unicode(gajim.get_priority(self.name, 'invisible'))
+        priority = gajim.get_priority(self.name, 'invisible')
         p = nbxmpp.Presence(priority=priority)
         p = self.add_sha(p, True)
         if msg:
@@ -1981,7 +1977,7 @@ class Connection(CommonConnection, ConnectionHandlers):
                 p.setStatus(msg)
         else:
             signed = self.get_signed_presence(msg)
-            priority = unicode(gajim.get_priority(self.name, sshow))
+            priority = gajim.get_priority(self.name, sshow)
             p = nbxmpp.Presence(typ=None, priority=priority, show=sshow, to=jid)
             p = self.add_sha(p)
             if msg:
@@ -2005,7 +2001,7 @@ class Connection(CommonConnection, ConnectionHandlers):
 
     def _update_status(self, show, msg):
         xmpp_show = helpers.get_xmpp_show(show)
-        priority = unicode(gajim.get_priority(self.name, xmpp_show))
+        priority = gajim.get_priority(self.name, xmpp_show)
         p = nbxmpp.Presence(typ=None, priority=priority, show=xmpp_show)
         p = self.add_sha(p)
         if msg:
@@ -2047,6 +2043,8 @@ class Connection(CommonConnection, ConnectionHandlers):
                 return
             if isinstance(jid, list):
                 for j in jid:
+                    if session is None:
+                        session = self.get_or_create_session(j, '')
                     self.log_message(j, msg, forward_from, session,
                         original_message, subject, type_, xhtml)
             else:
@@ -2562,7 +2560,7 @@ class Connection(CommonConnection, ConnectionHandlers):
 
         p = nbxmpp.Presence(to='%s/%s' % (room_jid, nick),
                 show=show, status=self.status)
-        h = hmac.new(self.secret_hmac, room_jid).hexdigest()[:6]
+        h = hmac.new(self.secret_hmac, room_jid.encode('utf-8')).hexdigest()[:6]
         id_ = self.connection.getAnID()
         id_ = 'gajim_muc_' + id_ + '_' + h
         p.setID(id_)
@@ -2670,7 +2668,7 @@ class Connection(CommonConnection, ConnectionHandlers):
         xmpp_show = helpers.get_xmpp_show(show)
         p = nbxmpp.Presence(to='%s/%s' % (jid, nick), typ=ptype,
             show=xmpp_show, status=status)
-        h = hmac.new(self.secret_hmac, jid).hexdigest()[:6]
+        h = hmac.new(self.secret_hmac, jid.encode('utf-8')).hexdigest()[:6]
         id_ = self.connection.getAnID()
         id_ = 'gajim_muc_' + id_ + '_' + h
         p.setID(id_)
@@ -2847,6 +2845,19 @@ class Connection(CommonConnection, ConnectionHandlers):
         """
         Send invitation
         """
+        contact = gajim.contacts.get_contact_from_full_jid(self.name, to)
+        if contact and contact.supports(nbxmpp.NS_CONFERENCE):
+            # send direct invite
+            message=nbxmpp.Message(to=to)
+            attrs = {'jid': room}
+            if reason:
+                attrs['reason'] = reason
+            if continue_tag:
+                attrs['continue'] = 'true'
+            c = message.addChild(name='x', attrs=attrs,
+                namespace=nbxmpp.NS_CONFERENCE)
+            self.connection.send(message)
+            return
         message=nbxmpp.Message(to=room)
         c = message.addChild(name='x', namespace=nbxmpp.NS_MUC_USER)
         c = c.addChild(name='invite', attrs={'to': to})
@@ -2889,7 +2900,7 @@ class Connection(CommonConnection, ConnectionHandlers):
             return
         if self.awaiting_xmpp_ping_id:
             # We haven't got the pong in time, disco and reconnect
-            log.warn("No reply received for keepalive ping. Reconnecting.")
+            log.warning("No reply received for keepalive ping. Reconnecting.")
             self._disconnectedReconnCB()
 
     def _reconnect_alarm(self):
diff --git a/src/common/connection_handlers.py b/src/common/connection_handlers.py
index efe943ca242370a5a4fe71dc983d23b9283cd53f..5e413df1736047f4fad261db4ca4ec98799e687f 100644
--- a/src/common/connection_handlers.py
+++ b/src/common/connection_handlers.py
@@ -33,17 +33,16 @@ import base64
 import sys
 import operator
 import hashlib
-import gobject
-import locale
+from gi.repository import GLib
 
 from time import (altzone, daylight, gmtime, localtime, mktime, strftime,
         time as time_time, timezone, tzname)
 from calendar import timegm
 
 import nbxmpp
-import common.caps_cache as capscache
+from common import caps_cache as capscache
 
-from pep import LOCATION_DATA
+from common.pep import LOCATION_DATA
 from common import helpers
 from common import gajim
 from common import exceptions
@@ -188,8 +187,8 @@ class ConnectionDisco:
         if not self.connection or self.connected < 2:
             return
         frm = helpers.get_full_jid_from_iq(iq_obj)
-        to = unicode(iq_obj.getAttr('to'))
-        id_ = unicode(iq_obj.getAttr('id'))
+        to = iq_obj.getAttr('to')
+        id_ = iq_obj.getAttr('id')
         iq = nbxmpp.Iq(to=frm, typ='result', queryNS=nbxmpp.NS_DISCO, frm=to)
         iq.setAttr('id', id_)
         query = iq.setTag('query')
@@ -242,7 +241,7 @@ class ConnectionDisco:
         if self.commandInfoQuery(con, iq_obj):
             raise nbxmpp.NodeProcessed
 
-        id_ = unicode(iq_obj.getAttr('id'))
+        id_ = iq_obj.getAttr('id')
         if id_[:6] == 'Gajim_':
             # We get this request from echo.server
             raise nbxmpp.NodeProcessed
@@ -329,7 +328,7 @@ class ConnectionVcard:
                 os.remove(path)
             # create folder if needed
             if not os.path.isdir(path):
-                os.mkdir(path, 0700)
+                os.mkdir(path, 0o700)
             puny_nick = helpers.sanitize_filename(nick)
             path_to_file = os.path.join(gajim.VCARD_PATH, puny_jid, puny_nick)
         else:
@@ -338,7 +337,7 @@ class ConnectionVcard:
             fil = open(path_to_file, 'w')
             fil.write(str(card))
             fil.close()
-        except IOError, e:
+        except IOError as e:
             gajim.nec.push_incoming_event(InformationEvent(None, conn=self,
                 level='error', pri_txt=_('Disk Write Error'), sec_txt=str(e)))
 
@@ -438,7 +437,7 @@ class ConnectionVcard:
         if 'PHOTO' in vcard and isinstance(vcard['PHOTO'], dict) and \
         'BINVAL' in vcard['PHOTO']:
             photo = vcard['PHOTO']['BINVAL']
-            photo_decoded = base64.decodestring(photo)
+            photo_decoded = base64.b64decode(photo.encode('utf-8'))
             gajim.interface.save_avatar_files(our_jid, photo_decoded)
             avatar_sha = hashlib.sha1(photo_decoded).hexdigest()
             iq2.getTag('PHOTO').setTagData('SHA', avatar_sha)
@@ -565,7 +564,7 @@ class ConnectionVcard:
                     self.discover_ft_proxies()
                 gajim.nec.push_incoming_event(RosterReceivedEvent(None,
                     conn=self))
-            gobject.timeout_add_seconds(10, self.discover_servers)
+            GLib.timeout_add_seconds(10, self.discover_servers)
         elif self.awaiting_answers[id_][0] == PRIVACY_ARRIVED:
             if iq_obj.getType() != 'error':
                 self.privacy_rules_supported = True
@@ -619,7 +618,7 @@ class ConnectionVcard:
 
         elif self.awaiting_answers[id_][0] == ARCHIVING_COLLECTIONS_ARRIVED:
             # TODO
-            print 'ARCHIVING_COLLECTIONS_ARRIVED'
+            print('ARCHIVING_COLLECTIONS_ARRIVED')
 
         elif self.awaiting_answers[id_][0] == ARCHIVING_COLLECTION_ARRIVED:
             def save_if_not_exists(with_, nick, direction, tim, payload):
@@ -629,7 +628,7 @@ class ConnectionVcard:
                     gajim.logger.save_if_not_exists(with_, direction, tim,
                         msg=payload[0].getData(), nick=nick)
                 elif payload[0].getName() == 'message':
-                    print 'Not implemented'
+                    print('Not implemented')
             chat = iq_obj.getTag('chat')
             if chat:
                 with_ = chat.getAttr('with')
@@ -710,7 +709,7 @@ class ConnectionVcard:
         'BINVAL' in vcard['PHOTO']:
             photo = vcard['PHOTO']['BINVAL']
             try:
-                photo_decoded = base64.decodestring(photo)
+                photo_decoded = base64.b64decode(photo.encode('utf-8'))
                 avatar_sha = hashlib.sha1(photo_decoded).hexdigest()
             except Exception:
                 avatar_sha = ''
@@ -732,7 +731,7 @@ class ConnectionVcard:
             puny_nick = helpers.sanitize_filename(resource)
             # create folder if needed
             if not os.path.isdir(begin_path):
-                os.mkdir(begin_path, 0700)
+                os.mkdir(begin_path, 0o700)
             begin_path = os.path.join(begin_path, puny_nick)
             frm_jid += '/' + resource
         if photo_decoded:
@@ -1139,7 +1138,7 @@ class ConnectionHandlersBase:
         gajim.config.should_log(self.name, obj.jid):
             try:
                 gajim.logger.write('status', obj.jid, obj.status, obj.show)
-            except exceptions.PysqliteOperationalError, e:
+            except exceptions.PysqliteOperationalError as e:
                 self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
             except exceptions.DatabaseMalformed:
                 pritext = _('Database Error')
@@ -1162,8 +1161,7 @@ class ConnectionHandlersBase:
         decmsg = self.gpg.decrypt(encmsg, keyID)
         decmsg = self.connection.Dispatcher.replace_non_character(decmsg)
         # \x00 chars are not allowed in C (so in GTK)
-        obj.msgtxt = decmsg.replace('\x00', '').encode(
-            locale.getpreferredencoding()).decode('utf-8')
+        obj.msgtxt = decmsg.replace('\x00', '')
         obj.encrypted = 'xep27'
         self.gpg_messages_to_decrypt.remove([encmsg, keyID, obj])
 
@@ -1211,7 +1209,7 @@ class ConnectionHandlersBase:
         gc_contact = gajim.contacts.get_gc_contact(self.name, obj.jid, nick)
         if obj.receipt_request_tag and gajim.config.get_per('accounts',
         self.name, 'answer_receipts') and ((contact and contact.sub \
-        not in (u'to', u'none')) or gc_contact) and obj.mtype != 'error' and \
+        not in ('to', 'none')) or gc_contact) and obj.mtype != 'error' and \
         not obj.forwarded:
             receipt = nbxmpp.Message(to=obj.fjid, typ='chat')
             receipt.setID(obj.id_)
@@ -1264,7 +1262,7 @@ class ConnectionHandlersBase:
             try:
                 gajim.logger.write('error', frm, error_msg, tim=tim,
                     subject=subject)
-            except exceptions.PysqliteOperationalError, e:
+            except exceptions.PysqliteOperationalError as e:
                 self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
             except exceptions.DatabaseMalformed:
                 pritext = _('Database Error')
@@ -1290,7 +1288,7 @@ class ConnectionHandlersBase:
             jid = gajim.get_jid_without_resource(jid)
 
         try:
-            return self.sessions[jid].values()
+            return list(self.sessions[jid].values())
         except KeyError:
             return []
 
@@ -1352,7 +1350,7 @@ class ConnectionHandlersBase:
         received a thread_id yet and returns the session that we last sent a
         message to
         """
-        sessions = self.sessions[jid].values()
+        sessions = list(self.sessions[jid].values())
 
         # sessions that we haven't received a thread ID in
         idless = [s for s in sessions if not s.received_thread_id]
@@ -1384,7 +1382,7 @@ class ConnectionHandlersBase:
         Find an active session that doesn't have a control attached
         """
         try:
-            sessions = self.sessions[jid].values()
+            sessions = list(self.sessions[jid].values())
 
             # filter out everything except the default session type
             chat_sessions = [s for s in sessions if isinstance(s,
@@ -1767,9 +1765,8 @@ ConnectionJingle, ConnectionIBBytestream):
             iq_obj = obj.stanza.buildReply('result')
             qp = iq_obj.setQuery()
             qp.setTagData('utc', strftime('%Y%m%dT%H:%M:%S', gmtime()))
-            qp.setTagData('tz', helpers.decode_string(tzname[daylight]))
-            qp.setTagData('display', helpers.decode_string(strftime('%c',
-                localtime())))
+            qp.setTagData('tz', tzname[daylight])
+            qp.setTagData('display', strftime('%c', localtime()))
         else:
             iq_obj = obj.stanza.buildReply('error')
             err = nbxmpp.ErrorNode(name=nbxmpp.NS_STANZAS + \
diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py
index d3d9456dcc7ee92ca0252f5509053fb9a207c5e2..433ab9ec7be646eed49c0cac09588ef87f9f6cb5 100644
--- a/src/common/connection_handlers_events.py
+++ b/src/common/connection_handlers_events.py
@@ -40,7 +40,8 @@ from nbxmpp.protocol import NS_CHATSTATES
 from common.jingle_transport import JingleTransportSocks5
 from common.file_props import FilesProp
 
-import gtkgui_helpers
+if gajim.HAVE_PYOPENSSL:
+    import OpenSSL.crypto
 
 import logging
 log = logging.getLogger('gajim.c.connection_handlers_events')
@@ -221,11 +222,11 @@ class TimeResultReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
 
         try:
             t = datetime.datetime.strptime(utc_time, '%Y-%m-%dT%H:%M:%SZ')
-        except ValueError, e:
+        except ValueError:
             try:
                 t = datetime.datetime.strptime(utc_time,
                     '%Y-%m-%dT%H:%M:%S.%fZ')
-            except ValueError, e:
+            except ValueError as e:
                 log.info('Wrong time format: %s' % str(e))
                 return
 
@@ -309,7 +310,7 @@ class RosterItemExchangeEvent(nec.NetworkIncomingEvent, HelperEvent):
             try:
                 jid = helpers.parse_jid(item.getAttr('jid'))
             except helpers.InvalidFormat:
-                log.warn('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
+                log.warning('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
                 continue
             name = item.getAttr('name')
             contact = gajim.contacts.get_contact(self.conn.name, jid)
@@ -367,10 +368,10 @@ class RosterReceivedEvent(nec.NetworkIncomingEvent):
                 try:
                     j = helpers.parse_jid(jid)
                 except Exception:
-                    print >> sys.stderr, _('JID %s is not RFC compliant. It '
-                        'will not be added to your roster. Use roster '
-                        'management tools such as '
-                        'http://jru.jabberstudio.org/ to remove it') % jid
+                    print(_('JID %s is not RFC compliant. It will not be added '
+                        'to your roster. Use roster management tools such as '
+                        'http://jru.jabberstudio.org/ to remove it') % jid,
+                        file=sys.stderr)
                 else:
                     infos = raw_roster[jid]
                     if jid != our_jid and (not infos['subscription'] or \
@@ -402,7 +403,7 @@ class RosterSetReceivedEvent(nec.NetworkIncomingEvent):
             try:
                 jid = helpers.parse_jid(item.getAttr('jid'))
             except helpers.InvalidFormat:
-                log.warn('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
+                log.warning('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
                 continue
             name = item.getAttr('name')
             sub = item.getAttr('subscription')
@@ -450,7 +451,7 @@ class MucAdminReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
                 try:
                     jid = helpers.parse_jid(item.getAttr('jid'))
                 except helpers.InvalidFormat:
-                    log.warn('Invalid JID: %s, ignoring it' % \
+                    log.warning('Invalid JID: %s, ignoring it' % \
                         item.getAttr('jid'))
                     continue
                 affiliation = item.getAttr('affiliation')
@@ -492,7 +493,7 @@ class BookmarksHelper:
             try:
                 jid = helpers.parse_jid(conf.getAttr('jid'))
             except helpers.InvalidFormat:
-                log.warn('Invalid JID: %s, ignoring it' % conf.getAttr('jid'))
+                log.warning('Invalid JID: %s, ignoring it' % conf.getAttr('jid'))
                 continue
             bm = {'name': conf.getAttr('name'),
                 'jid': jid,
@@ -544,7 +545,7 @@ class PrivateStorageRosternotesReceivedEvent(nec.NetworkIncomingEvent):
             try:
                 jid = helpers.parse_jid(note.getAttr('jid'))
             except helpers.InvalidFormat:
-                log.warn('Invalid JID: %s, ignoring it' % note.getAttr('jid'))
+                log.warning('Invalid JID: %s, ignoring it' % note.getAttr('jid'))
                 continue
             annotation = note.getData()
             self.annotations[jid] = annotation
@@ -758,7 +759,7 @@ PresenceHelperEvent):
         try:
             self.get_jid_resource()
         except Exception:
-            log.warn('Invalid JID: %s, ignoring it' % self.stanza.getFrom())
+            log.warning('Invalid JID: %s, ignoring it' % self.stanza.getFrom())
             return
         jid_list = gajim.contacts.get_jid_list(self.conn.name)
         self.timestamp = None
@@ -798,7 +799,8 @@ PresenceHelperEvent):
         and self.ptype == 'error':
             # Error presences may not include sent stanza, so we don't detect
             # it's a muc presence. So detect it by ID
-            h = hmac.new(self.conn.secret_hmac, self.jid).hexdigest()[:6]
+            h = hmac.new(self.conn.secret_hmac, self.jid.encode('utf-8')).\
+                hexdigest()[:6]
             if self.id_.split('_')[-1] == h:
                 self.is_gc = True
         self.status = self.stanza.getStatus() or ''
@@ -906,7 +908,7 @@ class GcPresenceReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
             try:
                 gajim.logger.write('gcstatus', self.fjid, st,
                     self.show)
-            except exceptions.PysqliteOperationalError, e:
+            except exceptions.PysqliteOperationalError as e:
                 self.conn.dispatch('DB_ERROR', (_('Disk Write Error'),
                     str(e)))
             except exceptions.DatabaseMalformed:
@@ -1038,7 +1040,7 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
                 try:
                     self.fjid = helpers.parse_jid(address.getAttr('jid'))
                 except helpers.InvalidFormat:
-                    log.warn('Invalid JID: %s, ignoring it' % address.getAttr(
+                    log.warning('Invalid JID: %s, ignoring it' % address.getAttr(
                         'jid'))
                     return
                 self.jid = gajim.get_jid_without_resource(self.fjid)
@@ -1078,10 +1080,15 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
         self.invite_tag = None
         self.decline_tag = None
         if not self.enc_tag:
+            # Direct invitation?
             self.invite_tag = self.stanza.getTag('x',
-                namespace=nbxmpp.NS_MUC_USER)
-            if self.invite_tag and not self.invite_tag.getTag('invite'):
-                self.invite_tag = None
+                namespace=nbxmpp.NS_CONFERENCE)
+            # Mediated invitation?
+            if not self.invite_tag:
+                self.invite_tag = self.stanza.getTag('x',
+                    namespace=nbxmpp.NS_MUC_USER)
+                if self.invite_tag and not self.invite_tag.getTag('invite'):
+                    self.invite_tag = None
 
             self.decline_tag = self.stanza.getTag('x',
                 namespace=nbxmpp.NS_MUC_USER)
@@ -1182,7 +1189,6 @@ class ZeroconfMessageReceivedEvent(MessageReceivedEvent):
                     self.fjid = key
                     break
 
-        self.fjid = unicode(self.fjid)
         self.jid, self.resource = gajim.get_room_and_nick_from_fjid(self.fjid)
 
     def generate(self):
@@ -1195,25 +1201,47 @@ class GcInvitationReceivedEvent(nec.NetworkIncomingEvent):
     base_network_events = []
 
     def generate(self):
-        self.room_jid = self.msg_obj.fjid
+        invite_tag = self.msg_obj.invite_tag
+        if invite_tag.getNamespace() == nbxmpp.NS_CONFERENCE:
+            # direct invitation
+            try:
+                self.room_jid = helpers.parse_jid(invite_tag.getAttr('jid'))
+            except helpers.InvalidFormat:
+                log.warning('Invalid JID: %s, ignoring it' % invite_tag.getAttr(
+                    'jid'))
+                return
+            self.jid_from = self.msg_obj.fjid
+            self.reason = invite_tag.getAttr('reason')
+            self.password = invite_tag.getAttr('password')
+            self.is_continued = False
+            if invite_tag.getAttr('continue') == 'true':
+                self.is_continued = True
+        else:
+            self.room_jid = self.msg_obj.fjid
+            item = self.msg_obj.invite_tag.getTag('invite')
+            try:
+                self.jid_from = helpers.parse_jid(item.getAttr('from'))
+            except helpers.InvalidFormat:
+                log.warning('Invalid JID: %s, ignoring it' % item.getAttr(
+                    'from'))
+                return
 
-        item = self.msg_obj.invite_tag.getTag('invite')
-        try:
-            self.jid_from = helpers.parse_jid(item.getAttr('from'))
-        except helpers.InvalidFormat:
-            log.warn('Invalid JID: %s, ignoring it' % item.getAttr('from'))
+            self.reason = item.getTagData('reason')
+            self.password = invite_tag.getTagData('password')
+
+            self.is_continued = False
+            if item.getTag('continue'):
+                self.is_continued = True
+
+        if self.room_jid in gajim.gc_connected[self.conn.name] and \
+        gajim.gc_connected[self.conn.name][self.room_jid]:
+            # We are already in groupchat. Ignore invitation
             return
         jid = gajim.get_jid_without_resource(self.jid_from)
         if gajim.config.get_per('accounts', self.conn.name,
         'ignore_unknown_contacts') and not gajim.contacts.get_contacts(
         self.conn.name, jid):
             return
-        self.reason = item.getTagData('reason')
-        self.password = self.msg_obj.invite_tag.getTagData('password')
-
-        self.is_continued = False
-        if item.getTag('continue'):
-            self.is_continued = True
 
         return True
 
@@ -1228,7 +1256,7 @@ class GcDeclineReceivedEvent(nec.NetworkIncomingEvent):
         try:
             self.jid_from = helpers.parse_jid(item.getAttr('from'))
         except helpers.InvalidFormat:
-            log.warn('Invalid JID: %s, ignoring it' % item.getAttr('from'))
+            log.warning('Invalid JID: %s, ignoring it' % item.getAttr('from'))
             return
         jid = gajim.get_jid_without_resource(self.jid_from)
         if gajim.config.get_per('accounts', self.conn.name,
@@ -1607,12 +1635,12 @@ class NewAccountConnectedEvent(nec.NetworkIncomingEvent):
             self.ssl_msg = ssl_error.get(er, _('Unknown SSL error: %d') % \
                 self.errnum)
         self.ssl_cert = ''
-        if len(self.conn.connection.Connection.ssl_cert_pem):
-            self.ssl_cert = self.conn.connection.Connection.ssl_cert_pem
         self.ssl_fingerprint = ''
         if self.conn.connection.Connection.ssl_certificate:
-            self.ssl_fingerprint = \
-                self.conn.connection.Connection.ssl_certificate.digest('sha1')
+            cert = self.conn.connection.Connection.ssl_certificate
+            self.ssl_cert = OpenSSL.crypto.dump_certificate(
+                OpenSSL.crypto.FILETYPE_PEM, cert).decode('utf-8')
+            self.ssl_fingerprint = cert.digest('sha1').decode('utf-8')
         return True
 
 class NewAccountNotConnectedEvent(nec.NetworkIncomingEvent):
@@ -1852,6 +1880,8 @@ class MetacontactsReceivedEvent(nec.NetworkIncomingEvent):
         # Metacontact tags
         # http://www.xmpp.org/extensions/xep-0209.html
         self.meta_list = {}
+        # FIXME: disable metacontacts until they work correctly
+        return True
         query = self.stanza.getTag('query')
         storage = query.getTag('storage')
         metas = storage.getTags('meta')
@@ -1965,7 +1995,7 @@ class AgentInfoReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
         if self.id_ in self.conn.disco_info_ids:
             self.conn.disco_info_ids.remove(self.id_)
         if self.id_ is None:
-            log.warn('Invalid IQ received without an ID. Ignoring it: %s' % \
+            log.warning('Invalid IQ received without an ID. Ignoring it: %s' % \
                 self.stanza)
             return
         # According to XEP-0030:
@@ -2025,15 +2055,18 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
         self.fjid = self.conn._ft_get_from(self.stanza)
         self.jid = gajim.get_jid_without_resource(self.fjid)
         if self.jingle_content:
-            self.FT_content.use_security = bool(self.jingle_content.getTag(
-                'security'))
+            secu = self.jingle_content.getTag('security')
+            self.FT_content.use_security = bool(secu)
+            fingerprint = secu.getTag('fingerprint')
+            if fingerprint:
+                self.FT_content.x509_fingerprint = fingerprint.getData()
             if not self.FT_content.transport:
                 self.FT_content.transport = JingleTransportSocks5()
                 self.FT_content.transport.set_our_jid(
                     self.FT_content.session.ourjid)
                 self.FT_content.transport.set_connection(
                     self.FT_content.session.connection)
-            sid = unicode(self.stanza.getTag('jingle').getAttr('sid'))
+            sid = self.stanza.getTag('jingle').getAttr('sid')
             self.file_props = FilesProp.getNewFileProp(self.conn.name, sid)
             self.file_props.transport_sid = self.FT_content.transport.sid
             self.FT_content.file_props = self.file_props
@@ -2071,7 +2104,7 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
                 if name == 'name':
                     self.file_props.name = val
                 if name == 'size':
-                    self.file_props.size = val
+                    self.file_props.size = int(val)
                 if name == 'hash':
                     self.file_props.algo = child.getAttr('algo')
                     self.file_props.hash_ = val
@@ -2080,8 +2113,7 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
         else:
             si = self.stanza.getTag('si')
             self.file_props = FilesProp.getNewFileProp(self.conn.name,
-                                               unicode(si.getAttr('id'))
-                                                      )
+                si.getAttr('id'))
             profile = si.getAttr('profile')
             if profile != nbxmpp.NS_FILE:
                 self.conn.send_file_rejection(self.file_props, code='400',
@@ -2112,7 +2144,7 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
                 if name == 'name':
                     self.file_props.name = val
                 if name == 'size':
-                    self.file_props.size = val
+                    self.file_props.size = int(val)
             mime_type = si.getAttr('mime-type')
             if mime_type is not None:
                 self.file_props.mime_type = mime_type
@@ -2230,8 +2262,6 @@ class NotificationEvent(nec.NetworkIncomingEvent):
             self.popup_title = _('New Message from %(nickname)s') % \
                 {'nickname': nick}
 
-        self.popup_image = gtkgui_helpers.get_icon_path(self.popup_image, 48)
-
         if not gajim.config.get('notify_on_new_message') or \
         not self.first_unread:
             self.do_popup = False
@@ -2286,6 +2316,28 @@ class NotificationEvent(nec.NetworkIncomingEvent):
 
         self.do_popup = False
 
+    def get_path_to_generic_or_avatar(self, generic, jid=None, suffix=None):
+        """
+        Choose between avatar image and default image
+
+        Returns full path to the avatar image if it exists, otherwise returns full
+        path to the image.  generic must be with extension and suffix without
+        """
+        if jid:
+            # we want an avatar
+            puny_jid = helpers.sanitize_filename(jid)
+            path_to_file = os.path.join(gajim.AVATAR_PATH, puny_jid) + suffix
+            path_to_local_file = path_to_file + '_local'
+            for extension in ('.png', '.jpeg'):
+                path_to_local_file_full = path_to_local_file + extension
+                if os.path.exists(path_to_local_file_full):
+                    return path_to_local_file_full
+            for extension in ('.png', '.jpeg'):
+                path_to_file_full = path_to_file + extension
+                if os.path.exists(path_to_file_full):
+                    return path_to_file_full
+        return os.path.abspath(generic)
+
     def handle_incoming_pres_event(self, pres_obj):
         if gajim.jid_is_transport(pres_obj.jid):
             return True
@@ -2364,8 +2416,8 @@ class NotificationEvent(nec.NetworkIncomingEvent):
             iconset = gajim.config.get('iconset')
             img_path = os.path.join(helpers.get_iconset_path(iconset),
                 '48x48', show_image)
-        self.popup_image = gtkgui_helpers.get_path_to_generic_or_avatar(
-            img_path, jid=self.jid, suffix=suffix)
+        self.popup_image_path = self.get_path_to_generic_or_avatar(img_path,
+            jid=self.jid, suffix=suffix)
 
         self.popup_timeout = gajim.config.get('notification_timeout')
 
@@ -2411,6 +2463,7 @@ class NotificationEvent(nec.NetworkIncomingEvent):
         self.popup_event_type = ''
         self.popup_msg_type = ''
         self.popup_image = ''
+        self.popup_image_path = ''
         self.popup_timeout = -1
 
         self.do_command = False
@@ -2447,7 +2500,7 @@ class MessageOutgoingEvent(nec.NetworkOutgoingEvent):
         self.session = None
         self.forward_from = None
         self.form_node = None
-        self.original_message = ''
+        self.original_message = None
         self.delayed = None
         self.callback = None
         self.callback_args = []
diff --git a/src/common/contacts.py b/src/common/contacts.py
index 44ec63f452c888fd4469d18dd5597b09083be244..dc5d841a143d2eb7d1e2229e72fdfee8c3a128e7 100644
--- a/src/common/contacts.py
+++ b/src/common/contacts.py
@@ -28,13 +28,15 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
+from functools import cmp_to_key
+
 try:
     from common import caps_cache
     from common.account import Account
     import common.gajim
-except ImportError, e:
+except ImportError as e:
     if __name__ != "__main__":
-        raise ImportError(e)
+        raise ImportError(str(e))
 
 class XMPPEntity(object):
     """
@@ -94,6 +96,8 @@ class Contact(CommonContact):
     sub='', ask='', resource='', priority=0, keyID='', client_caps=None,
     our_chatstate=None, chatstate=None, last_status_time=None, msg_id=None,
     last_activity_time=None):
+        if not isinstance(jid, str):
+            print('no str')
 
         CommonContact.__init__(self, jid, account, resource, show, status, name,
             our_chatstate, chatstate, client_caps=client_caps)
@@ -484,17 +488,18 @@ class Contacts():
             for c in self._contacts[jid]:
                 if c.resource == resource:
                     return c
+            return self._contacts[jid][0]
 
     def iter_contacts(self):
-        for jid in self._contacts.keys():
+        for jid in list(self._contacts.keys()):
             for contact in self._contacts[jid][:]:
                 yield contact
 
     def get_jid_list(self):
-        return self._contacts.keys()
+        return list(self._contacts.keys())
 
     def get_contacts_jid_list(self):
-        return [jid for jid, contact in self._contacts.iteritems() if not
+        return [jid for jid, contact in self._contacts.items() if not
                 contact[0].is_groupchat()]
 
     def get_contact_from_full_jid(self, fjid):
@@ -562,7 +567,7 @@ class GC_Contacts():
         gc_list = self.get_gc_list()
         if not room_jid in gc_list:
             return []
-        return self._rooms[room_jid].keys()
+        return list(self._rooms[room_jid].keys())
 
     def get_gc_contact(self, room_jid, nick):
         nick_list = self.get_nick_list(room_jid)
@@ -846,7 +851,7 @@ class MetacontactManager():
         Which of the family will be the big brother under wich all others will be
         ?
         """
-        family.sort(cmp=self._compare_metacontacts)
+        family.sort(key=cmp_to_key(self._compare_metacontacts))
         return family[-1]
 
 
diff --git a/src/common/crypto.py b/src/common/crypto.py
index c787df6aadd69f10974b3e317f52b9f5cf369d27..70ef6e1e129674d700884912290c52c572ffa846 100644
--- a/src/common/crypto.py
+++ b/src/common/crypto.py
@@ -19,6 +19,7 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
+import sys
 import os
 import math
 
@@ -75,8 +76,54 @@ def base28(n):
     else:
         return base28_chr[n]
 
+def add_entropy_sources_OpenSSL():
+    # Other possibly variable data. This are very low quality sources of
+    # entropy, but some of them are installation dependent and can be hard
+    # to guess for the attacker.
+    # Data available on all platforms Unix, Windows
+    sources = [sys.argv, sys.builtin_module_names,
+        sys.copyright, sys.getfilesystemencoding(), sys.hexversion,
+        sys.modules, sys.path, sys.version, sys.api_version,
+        os.environ, os.getcwd(), os.getpid()]
+
+    for s in sources:
+        OpenSSL.rand.add(str(s).encode('utf-8'), 1)
+
+    # On Windows add the current contents of the screen to the PRNG state.
+    if os.name == 'nt':
+        OpenSSL.rand.screen()
+    # The /proc filesystem on POSIX systems contains many random variables:
+    # memory statistics, interrupt counts, network packet counts
+    if os.name == 'posix':
+        dirs = ['/proc', '/proc/net', '/proc/self']
+        for d in dirs:
+            if os.access(d, os.R_OK):
+               for filename in os.listdir(d):
+                  OpenSSL.rand.add(filename.encode('utf-8'), 0)
+                  try:
+                     with open(d + os.sep + filename, "r") as fp:
+                         # Limit the ammount of read bytes, in case a memory
+                         # file was opened
+                         OpenSSL.rand.add(str(fp.read(5000)).encode('utf-8'),
+                             1)
+                  except:
+                      # Ignore all read and access errors
+                      pass
+
+PYOPENSSL_PRNG_PRESENT = False
+try:
+    import OpenSSL.rand
+    PYOPENSSL_PRNG_PRESENT = True
+except ImportError:
+    # PyOpenSSL PRNG not available
+    pass
+
 def random_bytes(bytes_):
-    return os.urandom(bytes_)
+    if PYOPENSSL_PRNG_PRESENT:
+        OpenSSL.rand.add(os.urandom(bytes_), bytes_)
+        return OpenSSL.rand.bytes(bytes_)
+    else:
+        return os.urandom(bytes_)
 
 def generate_nonce():
     return random_bytes(8)
diff --git a/src/common/dataforms.py b/src/common/dataforms.py
index 1af92dbdb13ff96708585f9dbf09d72315aba072..2053f1fbae09a5ba04582743b9d6606af6da7e6f 100644
--- a/src/common/dataforms.py
+++ b/src/common/dataforms.py
@@ -27,7 +27,7 @@ information how to use them, read documentation
 """
 
 import nbxmpp
-import helpers
+from common import helpers
 
 # exceptions used in this module
 # base class
@@ -195,7 +195,7 @@ class DataField(ExtendedNode):
         Human-readable description of field meaning
         """
         def fget(self):
-            return self.getTagData('desc') or u''
+            return self.getTagData('desc') or ''
 
         def fset(self, value):
             assert isinstance(value, basestring)
@@ -345,10 +345,10 @@ class StringField(DataField):
     @nested_property
     def value():
         """
-        Value of field. May be any unicode string
+        Value of field. May be any string
         """
         def fget(self):
-            return self.getTagData('value') or u''
+            return self.getTagData('value') or ''
 
         def fset(self, value):
             assert isinstance(value, basestring)
@@ -494,7 +494,7 @@ class TextMultiField(DataField):
         Value held in field
         """
         def fget(self):
-            value = u''
+            value = ''
             for element in self.iterTags('value'):
                 value += '\n' + element.getData()
             return value[1:]
@@ -643,7 +643,7 @@ class DataForm(ExtendedNode):
         """
         # TODO: the same code is in TextMultiField. join them
         def fget(self):
-            value = u''
+            value = ''
             for valuenode in self.getTags('instructions'):
                 value += '\n' + valuenode.getData()
             return value[1:]
diff --git a/src/common/dbus_support.py b/src/common/dbus_support.py
index 205281093f5ab6fd2743a0dab813c4af4e0954c2..4eec752998d351ef23535d437470a9c7a1a578ea 100644
--- a/src/common/dbus_support.py
+++ b/src/common/dbus_support.py
@@ -38,8 +38,8 @@ try:
 except ImportError:
     supported = False
     if not os.name == 'nt': # only say that to non Windows users
-        print _('D-Bus python bindings are missing in this computer')
-        print _('D-Bus capabilities of Gajim cannot be used')
+        print(_('D-Bus python bindings are missing in this computer'))
+        print(_('D-Bus capabilities of Gajim cannot be used'))
 else:
     try:
         # test if dbus-x11 is installed
@@ -49,14 +49,14 @@ else:
     except dbus.DBusException:
         supported = False
         if not os.name == 'nt': # only say that to non Windows users
-            print _('D-Bus does not run correctly on this machine')
-            print _('D-Bus capabilities of Gajim cannot be used')
+            print(_('D-Bus does not run correctly on this machine'))
+            print(_('D-Bus capabilities of Gajim cannot be used'))
     except exceptions.SystemBusNotPresent:
-        print _('D-Bus does not run correctly on this machine: system bus not '
-            'present')
+        print(_('D-Bus does not run correctly on this machine: system bus not '
+            'present'))
     except exceptions.SessionBusNotPresent:
-        print _('D-Bus does not run correctly on this machine: session bus not '
-            'present')
+        print(_('D-Bus does not run correctly on this machine: session bus not '
+            'present'))
 
 class SystemBus:
     """
@@ -154,7 +154,7 @@ def get_interface(interface, path, start_service=True):
             return None
         obj = bus.get_object(interface, path)
         return dbus.Interface(obj, interface)
-    except Exception, e:
+    except Exception as e:
         gajim.log.debug(str(e))
         return None
 
diff --git a/src/common/defs.py b/src/common/defs.py
index d7d0545424c09c6406c3c67a82c8caec8a95ba2d..9b831a56cba6319b27e544a71c1fa9e5bfea9279 100644
--- a/src/common/defs.py
+++ b/src/common/defs.py
@@ -27,13 +27,13 @@ docdir = '../'
 basedir   = '../'
 localedir = '../po'
 
-version = '0.16'
+version = '0.16.10.0'
 import subprocess
 try:
     node = subprocess.Popen('hg tip --template "{node|short}"', shell=True,
         stdout=subprocess.PIPE).communicate()[0]
     if node:
-        version += '-' + node
+        version += '-' + node.decode('utf-8')
 except Exception:
     pass
 
diff --git a/src/common/exceptions.py b/src/common/exceptions.py
index 34daff108d7bbfa0e82e5560a799adcd2f1b4561..5bfc86a60c8768841e533ea84e782c2a6d3842aa 100644
--- a/src/common/exceptions.py
+++ b/src/common/exceptions.py
@@ -143,3 +143,15 @@ class PluginsystemError(Exception):
 
     def __str__(self):
         return self.text
+
+class GnomeKeyringError(Exception):
+    """
+    Error with Gnome Keyring
+    """
+
+    def __init__(self, error):
+        Exception.__init__(self)
+        self.error = error
+
+    def __str__(self):
+        return str(self.error)
diff --git a/src/common/file_props.py b/src/common/file_props.py
index 81218976343f85930c8fa55971bba143495245ce..6b47baba8d6c39b95939a0d885cd57ffdd246792 100644
--- a/src/common/file_props.py
+++ b/src/common/file_props.py
@@ -64,7 +64,7 @@ class FilesProp:
 
     @classmethod
     def getAllFileProp(cls):
-        return cls._files_props.values()
+        return list(cls._files_props.values())
 
     @classmethod
     def setFileProp(cls, fp, account, sid):
diff --git a/src/common/gajim.py b/src/common/gajim.py
index 84f729ea51461781c9455d444170f45869d588ee..65c70e4b24e471e4abb5c1bbc38204298a7169b8 100644
--- a/src/common/gajim.py
+++ b/src/common/gajim.py
@@ -31,10 +31,10 @@ import sys
 import logging
 import locale
 
-import config
+from common import config
 import nbxmpp
-import defs
-import common.ged
+from common import defs
+from common import ged as ged_module
 
 interface = None # The actual interface (the gtk one for the moment)
 thread_interface = None # Interface to run a thread and then a callback
@@ -43,16 +43,15 @@ version = config.get('version')
 connections = {} # 'account name': 'account (connection.Connection) instance'
 ipython_window = None
 
-ged = common.ged.GlobalEventsDispatcher() # Global Events Dispatcher
+ged = ged_module.GlobalEventsDispatcher() # Global Events Dispatcher
 nec = None # Network Events Controller
 plugin_manager = None # Plugins Manager
 
 log = logging.getLogger('gajim')
 
-import logger
-logger = logger.Logger() # init the logger
+logger = None
 
-import configpaths
+from common import configpaths
 gajimpaths = configpaths.gajimpaths
 
 VCARD_PATH = gajimpaths['VCARD']
@@ -84,8 +83,8 @@ else:
 
 os_info = None # used to cache os information
 
-from contacts import LegacyContactsAPI
-from events import Events
+from common.contacts import LegacyContactsAPI
+from common.events import Events
 
 gmail_domains = ['gmail.com', 'googlemail.com']
 
@@ -159,7 +158,7 @@ except ImportError:
 
 HAVE_GPG = True
 try:
-    __import__('gnupg', globals(), locals(), [], -1)
+    __import__('gnupg', globals(), locals(), [], 0)
 except ImportError:
     HAVE_GPG = False
 else:
@@ -185,6 +184,7 @@ except Exception:
 
 HAVE_FARSTREAM = True
 try:
+    raise ImportError
     farstream = __import__('farstream')
     import gst
     import glib
@@ -201,8 +201,8 @@ except ImportError:
 
 HAVE_UPNP_IGD = True
 try:
-    import gupnp.igd
-    gupnp_igd = gupnp.igd.Simple()
+    from gi.repository import GUPnPIgd
+    gupnp_igd = GUPnPIgd.SimpleIgd()
 except ImportError:
     HAVE_UPNP_IGD = False
 
@@ -223,7 +223,7 @@ gajim_common_features = [nbxmpp.NS_BYTESTREAM, nbxmpp.NS_SI, nbxmpp.NS_FILE,
     nbxmpp.NS_SSN, nbxmpp.NS_MOOD, nbxmpp.NS_ACTIVITY, nbxmpp.NS_NICK,
     nbxmpp.NS_ROSTERX, nbxmpp.NS_SECLABEL, nbxmpp.NS_HASHES,
     nbxmpp.NS_HASHES_MD5, nbxmpp.NS_HASHES_SHA1, nbxmpp.NS_HASHES_SHA256,
-    nbxmpp.NS_HASHES_SHA512, nbxmpp.NS_CORRECT]
+    nbxmpp.NS_HASHES_SHA512]
 
 # Optional features gajim supports per account
 gajim_optional_features = {}
@@ -231,9 +231,6 @@ gajim_optional_features = {}
 # Capabilities hash per account
 caps_hash = {}
 
-import caps_cache
-caps_cache.initialize(logger)
-
 global_id = 0
 def get_an_id():
     global global_id
@@ -290,13 +287,8 @@ def get_jid_without_resource(jid):
     return jid.split('/')[0]
 
 def construct_fjid(room_jid, nick):
-    """
-    Nick is in UTF-8 (taken from treeview); room_jid is in unicode
-    """
     # fake jid is the jid for a contact in a room
     # gaim@conference.jabber.org/nick
-    if isinstance(nick, str):
-        nick = unicode(nick, 'utf-8')
     return room_jid + '/' + nick
 
 def get_resource_from_jid(jid):
diff --git a/src/common/ged.py b/src/common/ged.py
index 9ac3604a2be086f5fd49001d1e457c5835f2dda3..41edd012e37958afd4cd2c53c658e9434c6b7f1c 100644
--- a/src/common/ged.py
+++ b/src/common/ged.py
@@ -79,8 +79,8 @@ class GlobalEventsDispatcher(object):
         if event_name in self.handlers:
             try:
                 self.handlers[event_name].remove((priority, handler))
-            except ValueError, error:
-                log.warn('''Function (%s) with priority "%s" never registered
+            except ValueError:
+                log.warning('''Function (%s) with priority "%s" never registered
                 as handler of event "%s". Couldn\'t remove. Error: %s'''
                                   %(handler, priority, event_name, error))
 
@@ -94,7 +94,7 @@ class GlobalEventsDispatcher(object):
                         return True
                 except NodeProcessed:
                     node_processed = True
-                except Exception, e:
+                except Exception:
                     log.error('Error while running an even handler: %s' % \
                         handler)
                     traceback.print_exc()
diff --git a/src/common/gnupg.py b/src/common/gnupg.py
index 1080d2d1eabb96cc09e4975616767bf38054271a..13b96f8203e34c08cf57b91e056a3cd0efa063ef 100644
--- a/src/common/gnupg.py
+++ b/src/common/gnupg.py
@@ -175,7 +175,7 @@ class Verify(object):
                      "PLAINTEXT_LENGTH", "POLICY_URL", "DECRYPTION_INFO",
                      "DECRYPTION_OKAY", "INV_SGNR", "FILE_START", "FILE_ERROR",
                      "FILE_DONE", "PKA_TRUST_GOOD", "PKA_TRUST_BAD", "BADMDC",
-                     "GOODMDC", "NO_SGNR"):
+                     "GOODMDC", "NO_SGNR", "NOTATION_NAME", "NOTATION_DATA"):
             pass
         elif key == "BADSIG":
             self.valid = False
diff --git a/src/common/gpg.py b/src/common/gpg.py
index c95ed2257da54188d4ff60e6a0774b383a633d08..37895d0d98a4c71c0da76a8d9024727725111cbe 100644
--- a/src/common/gpg.py
+++ b/src/common/gpg.py
@@ -22,11 +22,11 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-from gajim import HAVE_GPG
+from common.gajim import HAVE_GPG
 import os
 
 if HAVE_GPG:
-    import gnupg
+    from common import gnupg
 
     class GnuPG(gnupg.GPG):
         def __init__(self, use_agent=False):
@@ -34,7 +34,7 @@ if HAVE_GPG:
             self.decode_errors = 'replace'
             self.passphrase = None
             self.use_agent = use_agent
-            self.always_trust = False
+            self.always_trust = [] # list of keyID to always trust
 
         def _setup_my_options(self):
             self.options.armor = 1
@@ -47,8 +47,14 @@ if HAVE_GPG:
                 self.options.extra_args.append('--use-agent')
 
         def encrypt(self, str_, recipients, always_trust=False):
+            trust = always_trust
+            if not trust:
+                trust = True
+                for key in recipients:
+                    if key not in self.always_trust:
+                        trust = False
             result = super(GnuPG, self).encrypt(str_, recipients,
-                always_trust=always_trust, passphrase=self.passphrase)
+                always_trust=trust, passphrase=self.passphrase)
 
             if result.status == 'invalid recipient':
                 return '', 'NOT_TRUSTED'
@@ -80,14 +86,21 @@ if HAVE_GPG:
         def verify(self, str_, sign):
             if str_ is None:
                 return ''
-            data = '-----BEGIN PGP SIGNED MESSAGE-----' + os.linesep
-            data = data + 'Hash: SHA1' + os.linesep + os.linesep
-            data = data + str_ + os.linesep
-            data = data + self._addHeaderFooter(sign, 'SIGNATURE')
-            result = super(GnuPG, self).verify(data)
-
-            if result.valid:
-                return result.key_id
+            # Hash algorithm is not transfered in the signed presence stanza so try
+            # all algorithms. Text name for hash algorithms from RFC 4880 - section 9.4
+            hash_algorithms = ['SHA512', 'SHA384', 'SHA256', 'SHA224', 'SHA1', 'RIPEMD160']
+            for algo in hash_algorithms:
+                data = os.linesep.join(
+                    ['-----BEGIN PGP SIGNED MESSAGE-----',
+                     'Hash: ' + algo,
+                     '',
+                     str_,
+                     self._addHeaderFooter(sign, 'SIGNATURE')]
+                    )
+                result = super(GnuPG, self).verify(data)
+                if result.valid:
+                    return result.key_id
+
             return ''
 
         def get_keys(self, secret=False):
diff --git a/src/common/helpers.py b/src/common/helpers.py
index 1729f6ddb5ad03930bf67c31bffcb92d5c34ac9e..c77fb01cfebef02e802926c783f6aac5f2971ec4 100644
--- a/src/common/helpers.py
+++ b/src/common/helpers.py
@@ -35,22 +35,23 @@ import locale
 import os
 import subprocess
 import urllib
-import urllib2
+import urllib
 import webbrowser
 import errno
 import select
 import base64
 import hashlib
 import shlex
-import caps_cache
+from common import caps_cache
 import socket
 import time
 
+from gi.repository import GObject
 from encodings.punycode import punycode_encode
 from string import Template
 
-from i18n import Q_
-from i18n import ngettext
+from common.i18n import Q_
+from common.i18n import ngettext
 
 try:
     import winsound # windows-only built-in module for playing wav
@@ -121,7 +122,7 @@ def idn_to_ascii(host):
     labels = idna.dots.split(host)
     converted_labels = []
     for label in labels:
-        converted_labels.append(idna.ToASCII(label))
+        converted_labels.append(idna.ToASCII(label).decode('utf-8'))
     return ".".join(converted_labels)
 
 def ascii_to_idn(host):
@@ -143,9 +144,9 @@ def parse_resource(resource):
     if resource:
         try:
             from nbxmpp.stringprepare import resourceprep
-            return resourceprep.prepare(unicode(resource))
+            return resourceprep.prepare(resource)
         except UnicodeError:
-            raise InvalidFormat, 'Invalid character in resource.'
+            raise InvalidFormat('Invalid character in resource.')
 
 def prep(user, server, resource):
     """
@@ -155,34 +156,34 @@ def prep(user, server, resource):
     #http://svn.twistedmatrix.com/cvs/trunk/twisted/words/protocols/jabber/jid.py
     if user is not None:
         if len(user) < 1 or len(user) > 1023:
-            raise InvalidFormat, _('Username must be between 1 and 1023 chars')
+            raise InvalidFormat(_('Username must be between 1 and 1023 chars'))
         try:
             from nbxmpp.stringprepare import nodeprep
-            user = nodeprep.prepare(unicode(user))
+            user = nodeprep.prepare(user)
         except UnicodeError:
-            raise InvalidFormat, _('Invalid character in username.')
+            raise InvalidFormat(_('Invalid character in username.'))
     else:
         user = None
 
     if server is not None:
         if len(server) < 1 or len(server) > 1023:
-            raise InvalidFormat, _('Server must be between 1 and 1023 chars')
+            raise InvalidFormat(_('Server must be between 1 and 1023 chars'))
         try:
             from nbxmpp.stringprepare import nameprep
-            server = nameprep.prepare(unicode(server))
+            server = nameprep.prepare(server)
         except UnicodeError:
-            raise InvalidFormat, _('Invalid character in hostname.')
+            raise InvalidFormat(_('Invalid character in hostname.'))
     else:
-        raise InvalidFormat, _('Server address required.')
+        raise InvalidFormat(_('Server address required.'))
 
     if resource is not None:
         if len(resource) < 1 or len(resource) > 1023:
-            raise InvalidFormat, _('Resource must be between 1 and 1023 chars')
+            raise InvalidFormat(_('Resource must be between 1 and 1023 chars'))
         try:
             from nbxmpp.stringprepare import resourceprep
-            resource = resourceprep.prepare(unicode(resource))
+            resource = resourceprep.prepare(resource)
         except UnicodeError:
-            raise InvalidFormat, _('Invalid character in resource.')
+            raise InvalidFormat(_('Invalid character in resource.'))
     else:
         resource = None
 
@@ -206,7 +207,7 @@ def temp_failure_retry(func, *args, **kwargs):
     while True:
         try:
             return func(*args, **kwargs)
-        except (os.error, IOError, select.error), ex:
+        except (os.error, IOError, select.error) as ex:
             if ex.errno == errno.EINTR:
                 continue
             else:
@@ -263,7 +264,7 @@ def get_uf_show(show, use_mnemonic = False):
         uf_show = Q_('?contact has status:Unknown')
     else:
         uf_show = Q_('?contact has status:Has errors')
-    return unicode(uf_show)
+    return uf_show
 
 def get_uf_sub(sub):
     if sub == 'none':
@@ -277,7 +278,7 @@ def get_uf_sub(sub):
     else:
         uf_sub = sub
 
-    return unicode(uf_sub)
+    return uf_sub
 
 def get_uf_ask(ask):
     if ask is None:
@@ -287,7 +288,7 @@ def get_uf_ask(ask):
     else:
         uf_ask = ask
 
-    return unicode(uf_ask)
+    return uf_ask
 
 def get_uf_role(role, plural = False):
     ''' plural determines if you get Moderators or Moderator'''
@@ -397,7 +398,7 @@ def exec_command(command, use_shell=False):
     if use_shell:
         subprocess.Popen('%s &' % command, shell=True).wait()
     else:
-        args = shlex.split(command.encode('utf-8'))
+        args = shlex.split(command)
         p = subprocess.Popen(args)
         gajim.thread_interface(p.wait)
 
@@ -409,7 +410,7 @@ def build_command(executable, parameter):
     return command
 
 def get_file_path_from_dnd_dropped_uri(uri):
-    path = urllib.unquote(uri) # escape special chars
+    path = urllib.parse.unquote(uri) # escape special chars
     path = path.strip('\r\n\x00') # remove \r\n and NULL
     # get the path to file
     if re.match('^file:///[a-zA-Z]:/', path): # windows
@@ -447,33 +448,6 @@ def get_output_of_command(command):
 
     return output
 
-def decode_string(string):
-    """
-    Try to decode (to make it Unicode instance) given string
-    """
-    if isinstance(string, unicode):
-        return string
-    # by the time we go to iso15 it better be the one else we show bad characters
-    encodings = (locale.getpreferredencoding(), 'utf-8', 'iso-8859-15')
-    for encoding in encodings:
-        try:
-            string = string.decode(encoding)
-        except UnicodeError:
-            continue
-        break
-
-    return string
-
-def ensure_utf8_string(string):
-    """
-    Make sure string is in UTF-8
-    """
-    try:
-        string = decode_string(string).encode('utf-8')
-    except Exception:
-        pass
-    return string
-
 def get_windows_reg_env(varname, default=''):
     """
     Ask for paths commonly used but not exposed as ENVs in english Windows 2003
@@ -481,7 +455,7 @@ def get_windows_reg_env(varname, default=''):
             'AppData' = %USERPROFILE%\Application Data (also an ENV)
             'Desktop' = %USERPROFILE%\Desktop
             'Favorites' = %USERPROFILE%\Favorites
-            'NetHood' = %USERPROFILE%\NetHood
+            'NetHood' = %USERPROFILE%\ NetHood
             'Personal' = D:\My Documents (PATH TO MY DOCUMENTS)
             'PrintHood' = %USERPROFILE%\PrintHood
             'Programs' = %USERPROFILE%\Start Menu\Programs
@@ -540,10 +514,11 @@ def sanitize_filename(filename):
     """
     # 48 is the limit
     if len(filename) > 48:
-        hash = hashlib.md5(filename)
-        filename = base64.b64encode(hash.digest())
+        hash = hashlib.md5(filename.encode('utf-8'))
+        filename = base64.b64encode(hash.digest()).decode('utf-8')
 
-    filename = punycode_encode(filename) # make it latin chars only
+    # make it latin chars only
+    filename = punycode_encode(filename).decode('utf-8')
     filename = filename.replace('/', '_')
     if os.name == 'nt':
         filename = filename.replace('?', '_').replace(':', '_')\
@@ -565,9 +540,6 @@ def reduce_chars_newlines(text, max_chars = 0, max_lines = 0):
             string = string[:max_chars - 3] + '...'
         return string
 
-    if isinstance(text, str):
-        text = text.decode('utf-8')
-
     if max_lines == 0:
         lines = text.split('\n')
     else:
@@ -623,12 +595,10 @@ def datetime_tuple(timestamp):
     from time import strptime
     return strptime(timestamp, '%Y%m%dT%H:%M:%S')
 
-# import gajim only when needed (after decode_string is defined) see #4764
-
-import gajim
+from common import gajim
 if gajim.HAVE_PYCURL:
     import pycurl
-    from cStringIO import StringIO
+    from io import StringIO
 
 def convert_bytes(string):
     suffix = ''
@@ -636,13 +606,13 @@ def convert_bytes(string):
     # but do we use the standard?
     use_kib_mib = gajim.config.get('use_kib_mib')
     align = 1024.
-    bytes = float(string)
-    if bytes >= align:
-        bytes = round(bytes/align, 1)
-        if bytes >= align:
-            bytes = round(bytes/align, 1)
-            if bytes >= align:
-                bytes = round(bytes/align, 1)
+    bytes_ = float(string)
+    if bytes_ >= align:
+        bytes_ = round(bytes_/align, 1)
+        if bytes_ >= align:
+            bytes_ = round(bytes_/align, 1)
+            if bytes_ >= align:
+                bytes_ = round(bytes_/align, 1)
                 if use_kib_mib:
                     #GiB means gibibyte
                     suffix = _('%s GiB')
@@ -666,7 +636,7 @@ def convert_bytes(string):
     else:
         #B means bytes
         suffix = _('%s B')
-    return suffix % unicode(bytes)
+    return suffix % str(bytes_)
 
 def get_contact_dict_for_account(account):
     """
@@ -892,13 +862,13 @@ def get_icon_name_to_show(contact, account = None):
 
 def get_full_jid_from_iq(iq_obj):
     """
-    Return the full jid (with resource) from an iq as unicode
+    Return the full jid (with resource) from an iq
     """
     return parse_jid(str(iq_obj.getFrom()))
 
 def get_jid_from_iq(iq_obj):
     """
-    Return the jid (without resource) from an iq as unicode
+    Return the jid (without resource) from an iq
     """
     jid = get_full_jid_from_iq(iq_obj)
     return gajim.get_jid_without_resource(jid)
@@ -907,7 +877,8 @@ def get_auth_sha(sid, initiator, target):
     """
     Return sha of sid + initiator + target used for proxy auth
     """
-    return hashlib.sha1("%s%s%s" % (sid, initiator, target)).hexdigest()
+    return hashlib.sha1(("%s%s%s" % (sid, initiator, target)).encode('utf-8')).\
+        hexdigest()
 
 def remove_invalid_xml_chars(string):
     if string:
@@ -943,7 +914,7 @@ def get_random_string_16():
     """
     Create random string of length 16
     """
-    rng = range(65, 90)
+    rng = list(range(65, 90))
     rng.extend(range(48, 57))
     char_sequence = [chr(e) for e in rng]
     from random import sample
@@ -984,8 +955,10 @@ def get_os_info():
             p.wait()
             output = temp_failure_retry(p.stdout.readline).strip()
             # some distros put n/a in places, so remove those
-            output = output.replace('n/a', '').replace('N/A', '')
+            output = output.decode('utf-8').replace('n/a', '').replace('N/A', '')
             gajim.os_info = output
+            p.stdout.close()
+            p.stdin.close()
             return output
 
         # lsb_release executable not available, so parse files
@@ -1419,7 +1392,7 @@ def get_proxy_info(account):
                     login = ['', '']
                     addr = env_http_proxy[0].split(':')
 
-                proxy = {'host': addr[0], 'type' : u'http', 'user':login[0]}
+                proxy = {'host': addr[0], 'type' : 'http', 'user':login[0]}
 
                 if len(addr) == 2:
                     proxy['port'] = addr[1]
@@ -1430,7 +1403,7 @@ def get_proxy_info(account):
                     proxy['pass'] = login[1]
                     proxy['useauth'] = True
                 else:
-                    proxy['pass'] = u''
+                    proxy['pass'] = ''
                 return proxy
 
             except Exception:
@@ -1449,14 +1422,15 @@ def _get_img_direct(attrs):
     """
     Download an image. This function should be launched in a separated thread.
     """
-    mem, alt = '', ''
+    mem = b''
+    alt = ''
     # Wait maximum 5s for connection
     socket.setdefaulttimeout(5)
     try:
-        req = urllib2.Request(attrs['src'])
+        req = urllib.request.Request(attrs['src'])
         req.add_header('User-Agent', 'Gajim ' + gajim.version)
-        f = urllib2.urlopen(req)
-    except Exception, ex:
+        f = urllib.request.urlopen(req)
+    except Exception as ex:
         log.debug('Error loading image %s ' % attrs['src']  + str(ex))
         pixbuf = None
         alt = attrs.get('alt', 'Broken image')
@@ -1479,7 +1453,7 @@ def _get_img_direct(attrs):
                 break
             try:
                 temp = f.read(100)
-            except socket.timeout, ex:
+            except socket.timeout as ex:
                 log.debug('Timeout loading image %s ' % attrs['src'] + str(ex))
                 alt = attrs.get('alt', '')
                 if alt:
@@ -1496,6 +1470,7 @@ def _get_img_direct(attrs):
                     alt += '\n'
                 alt += _('Image is too big')
                 break
+        f.close()
     return (mem, alt)
 
 def _get_img_proxy(attrs, proxy):
@@ -1531,17 +1506,17 @@ def _get_img_proxy(attrs, proxy):
         c.close()
         t = b.getvalue()
         return (t, attrs.get('alt', ''))
-    except pycurl.error, ex:
+    except pycurl.error as ex:
         alt = attrs.get('alt', '')
         if alt:
             alt += '\n'
-        if ex[0] == pycurl.E_FILESIZE_EXCEEDED:
+        if ex.errno == pycurl.E_FILESIZE_EXCEEDED:
             alt += _('Image is too big')
-        elif ex[0] == pycurl.E_OPERATION_TIMEOUTED:
+        elif ex.errno == pycurl.E_OPERATION_TIMEOUTED:
             alt += _('Timeout loading image')
         else:
             alt += _('Error loading image')
-    except Exception, ex:
+    except Exception as ex:
         log.debug('Error loading image %s ' % attrs['src']  + str(ex))
         pixbuf = None
         alt = attrs.get('alt', 'Broken image')
diff --git a/src/common/i18n.py b/src/common/i18n.py
index c85b7da080d8b1b48bf62ae9d23e21e081d54825..fa86727cb7ada74c2261ca559686ff19c6d8ba12 100644
--- a/src/common/i18n.py
+++ b/src/common/i18n.py
@@ -24,11 +24,11 @@
 import locale
 import gettext
 import os
-import defs
+from common import defs
 import unicodedata
 
 # May be changed after GTK is imported
-direction_mark = u'\u200E'
+direction_mark = '\u200E'
 
 def paragraph_direction_mark(text):
     """
@@ -40,11 +40,11 @@ def paragraph_direction_mark(text):
     for char in text:
         bidi = unicodedata.bidirectional(char)
         if bidi == 'L':
-            return u'\u200E'
+            return '\u200E'
         elif bidi == 'AL' or bidi == 'R':
-            return u'\u200F'
+            return '\u200F'
 
-    return u'\u200E'
+    return '\u200E'
 
 APP = 'gajim'
 DIR = defs.localedir
@@ -64,9 +64,9 @@ if os.name == 'nt':
     if lang:
         os.environ['LANG'] = lang
 
-gettext.install(APP, DIR, unicode = True)
+gettext.install(APP, DIR)
 if gettext._translations:
-    _translation = gettext._translations.values()[0]
+    _translation = list(gettext._translations.values())[0]
 else:
     _translation = gettext.NullTranslations()
 
@@ -97,7 +97,7 @@ def ngettext(s_sing, s_plural, n, replace_sing = None, replace_plural = None):
 
     In other words this is a hack to ngettext() to support %s %d etc..
     """
-    text = _translation.ungettext(s_sing, s_plural, n)
+    text = _translation.ngettext(s_sing, s_plural, n)
     if n == 1 and replace_sing is not None:
         text = text % replace_sing
     elif n > 1 and replace_plural is not None:
diff --git a/src/common/idle.py b/src/common/idle.py
index 5e1bf4c0fcfddf3bbf5abc8774f40a00af89cd02..9e475c47ddd507e5206b973bac5d52e69a3c17b1 100644
--- a/src/common/idle.py
+++ b/src/common/idle.py
@@ -68,7 +68,7 @@ try:
 
     rootwindow = libX11.XDefaultRootWindow(dpy_p)
     xss_available = True
-except OSError, e:
+except OSError:
     # Logging?
     xss_available = False
 
@@ -94,6 +94,6 @@ def close():
 if __name__ == '__main__':
     import time
     time.sleep(2.1)
-    print getIdleSec()
+    print(getIdleSec())
     close()
-    print getIdleSec()
+    print(getIdleSec())
diff --git a/src/common/jingle.py b/src/common/jingle.py
index e14c8d0424c736506d4c6846f73560e0f9026260..c9d64fe7057427ec5fe8464eb1751b8dc769e035 100644
--- a/src/common/jingle.py
+++ b/src/common/jingle.py
@@ -29,14 +29,14 @@ Handles the jingle signalling protocol
 #     - codecs
 
 import nbxmpp
-import helpers
-import gajim
+from common import helpers
+from common import gajim
 
-from jingle_session import JingleSession, JingleStates
+from common.jingle_session import JingleSession, JingleStates
 if gajim.HAVE_FARSTREAM:
-    from jingle_rtp import JingleAudio, JingleVideo
-from jingle_ft import JingleFileTransfer
-from jingle_transport import JingleTransportSocks5, JingleTransportIBB
+    from common.jingle_rtp import JingleAudio, JingleVideo
+from common.jingle_ft import JingleFileTransfer
+from common.jingle_transport import JingleTransportSocks5, JingleTransportIBB
 
 import logging
 logger = logging.getLogger('gajim.c.jingle')
@@ -80,7 +80,7 @@ class ConnectionJingle(object):
         try:
             jid = helpers.get_full_jid_from_iq(stanza)
         except helpers.InvalidFormat:
-            log.warn('Invalid JID: %s, ignoring it' % stanza.getFrom())
+            logger.warn('Invalid JID: %s, ignoring it' % stanza.getFrom())
             return
         id_ = stanza.getID()
         if (jid, id_) in self.__iq_responses.keys():
@@ -170,14 +170,14 @@ class ConnectionJingle(object):
 
     def __hash_support(self, contact):
         if contact.supports(nbxmpp.NS_HASHES):
-            if contact.supports(nbxmpp.NS_HASHES_MD5):
-                return 'md5'
-            elif contact.supports(nbxmpp.NS_HASHES_SHA1):
-                return 'sha-1'
+            if contact.supports(nbxmpp.NS_HASHES_SHA512):
+                return 'sha-512'
             elif contact.supports(nbxmpp.NS_HASHES_SHA256):
                 return 'sha-256'
-            elif contact.supports(nbxmpp.NS_HASHES_SHA512):
-                return 'sha-512'
+            elif contact.supports(nbxmpp.NS_HASHES_SHA1):
+                return 'sha-1'
+            elif contact.supports(nbxmpp.NS_HASHES_MD5):
+                return 'md5'
         return None
 
     def iter_jingle_sessions(self, jid, sid=None, media=None):
@@ -224,4 +224,3 @@ class ConnectionJingle(object):
                 if session.peerjid == jid and session.get_content(media):
                     return session
         return None
-
diff --git a/src/common/jingle_content.py b/src/common/jingle_content.py
index 141677085f27c791498393bffae4e5d53152076d..2634957c64ba5d624bcb956118b5ceb47f485856 100644
--- a/src/common/jingle_content.py
+++ b/src/common/jingle_content.py
@@ -17,9 +17,12 @@
 Handles Jingle contents (XEP 0166)
 """
 
-import gajim
+import os
+from common import gajim
 import nbxmpp
-from jingle_transport import JingleTransportIBB
+from common.jingle_transport import JingleTransportIBB
+from .jingle_xtls import SELF_SIGNED_CERTIFICATE
+from .jingle_xtls import load_cert_file
 
 contents = {}
 
@@ -193,7 +196,7 @@ class JingleContent(object):
         else:
             # if the file is less than 10 mb, then it is small
             # lets calculate it right away
-            if int(self.file_props.size) < 10000000 and not \
+            if self.file_props.size < 10000000 and not \
                                         self.file_props.hash_:
                 h  = self._calcHash()
                 file_tag.addChild(node=h)
@@ -213,12 +216,18 @@ class JingleContent(object):
         if self.use_security:
             security = nbxmpp.simplexml.Node(
                 tag=nbxmpp.NS_JINGLE_XTLS + ' security')
-            # TODO: add fingerprint element
-            for m in ('x509', ): # supported authentication methods
-                method = nbxmpp.simplexml.Node(tag='method')
-                method.setAttr('name', m)
-                security.addChild(node=method)
-            content.addChild(node=security)
+            certpath = os.path.join(gajim.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE)\
+                + '.cert'
+            cert = load_cert_file(certpath)
+            if cert:
+                digest_algo = cert.get_signature_algorithm().split('With')[0]
+                security.addChild('fingerprint').addData(cert.digest(
+                    digest_algo))
+                for m in ('x509', ): # supported authentication methods
+                    method = nbxmpp.simplexml.Node(tag='method')
+                    method.setAttr('name', m)
+                    security.addChild(node=method)
+                content.addChild(node=security)
         content.addChild(node=description_node)
 
     def destroy(self):
diff --git a/src/common/jingle_ft.py b/src/common/jingle_ft.py
index 7d8e8245d27b415fdb132ef7d409ac636ffe5401..edd1d3284d5f1b6fbd0f65b3cf0a4740657db524 100644
--- a/src/common/jingle_ft.py
+++ b/src/common/jingle_ft.py
@@ -20,16 +20,17 @@ Handles  Jingle File Transfer (XEP 0234)
 """
 
 import hashlib
-import gajim
+from common import gajim
 import nbxmpp
-from jingle_content import contents, JingleContent
-from jingle_transport import *
+from . import jingle_xtls
+from common.jingle_content import contents, JingleContent
+from common.jingle_transport import *
 from common import helpers
 from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
 from common.connection_handlers_events import FileRequestReceivedEvent
 import threading
 import logging
-from jingle_ftstates import *
+from common.jingle_ftstates import *
 log = logging.getLogger('gajim.c.jingle_ft')
 
 STATE_NOT_STARTED = 0
@@ -68,6 +69,7 @@ class JingleFileTransfer(JingleContent):
         self.callbacks['transport-info'] += [self.__on_transport_info]
         self.callbacks['iq-result'] += [self.__on_iq_result]
         self.use_security = use_security
+        self.x509_fingerprint = None
         self.file_props = file_props
         self.weinitiate = self.session.weinitiate
         self.werequest = self.session.werequest
@@ -95,8 +97,8 @@ class JingleFileTransfer(JingleContent):
         if gajim.contacts.is_gc_contact(session.connection.name,
         session.peerjid):
             roomjid = session.peerjid.split('/')[0]
-            dstaddr = hashlib.sha1('%s%s%s' % (self.file_props.sid,
-                session.ourjid, roomjid)).hexdigest()
+            dstaddr = hashlib.sha1(('%s%s%s' % (self.file_props.sid,
+                session.ourjid, roomjid)).encode('utf-8')).hexdigest()
             self.file_props.dstaddr = dstaddr
         self.state = STATE_NOT_STARTED
         self.states = {STATE_INITIALIZED   : StateInitialized(self),
@@ -149,12 +151,13 @@ class JingleFileTransfer(JingleContent):
         if self.file_props.algo == None:
             return
         try:
-            file_ = open(self.file_props.file_name, 'r')
+            file_ = open(self.file_props.file_name, 'rb')
         except:
             # can't open file
             return
         h = nbxmpp.Hashes()
         hash_ = h.calculateHash(self.file_props.algo, file_)
+        file_.close()
         # DEBUG
         #hash_ = '1294809248109223'
         if not hash_:
@@ -164,17 +167,37 @@ class JingleFileTransfer(JingleContent):
         h.addHash(hash_, self.file_props.algo)
         return h
 
+    def on_cert_received(self):
+        self.session.approve_session()
+        self.session.approve_content('file', name=self.name)
+
     def __on_session_accept(self, stanza, content, error, action):
         log.info("__on_session_accept")
         con = self.session.connection
+        # We ack the session accept
+        response = stanza.buildReply('result')
+        response.delChild(response.getQuery())
+        con.connection.send(response)
         security = content.getTag('security')
         if not security: # responder can not verify our fingerprint
             self.use_security = False
+        else:
+            fingerprint = security.getTag('fingerprint')
+            if fingerprint:
+                fingerprint = fingerprint.getData()
+                self.x509_fingerprint = fingerprint
+                if not jingle_xtls.check_cert(gajim.get_jid_without_resource(
+                self.session.responder), fingerprint):
+                    id_ = jingle_xtls.send_cert_request(con,
+                        self.session.responder)
+                    jingle_xtls.key_exchange_pend(id_,
+                        self.continue_session_accept, [stanza])
+                    raise nbxmpp.NodeProcessed
+        self.continue_session_accept(stanza)
+
+    def continue_session_accept(self, stanza):
+        con = self.session.connection
         if self.state == STATE_TRANSPORT_REPLACE:
-            # We ack the session accept
-            response = stanza.buildReply('result')
-            response.delChild(response.getQuery())
-            con.connection.send(response)
             # If we are requesting we don't have the file
             if self.session.werequest:
                 raise nbxmpp.NodeProcessed
@@ -185,16 +208,13 @@ class JingleFileTransfer(JingleContent):
         # Calculate file hash in a new thread
         # if we haven't sent the hash already.
         if self.file_props.hash_ is None and self.file_props.algo and \
-                                             not self.werequest:
+        not self.werequest:
             self.hashThread = threading.Thread(target=self.__send_hash)
             self.hashThread.start()
         for host in self.file_props.streamhosts:
             host['initiator'] = self.session.initiator
             host['target'] = self.session.responder
             host['sid'] = self.file_props.sid
-        response = stanza.buildReply('result')
-        response.delChild(response.getQuery())
-        con.connection.send(response)
         fingerprint = None
         if self.use_security:
             fingerprint = 'client'
@@ -203,7 +223,7 @@ class JingleFileTransfer(JingleContent):
                 self.file_props.sid, self.on_connect,
                 self._on_connect_error, fingerprint=fingerprint,
                 receiving=False)
-            return
+            raise nbxmpp.NodeProcessed
         self.__state_changed(STATE_TRANSFERING)
         raise nbxmpp.NodeProcessed
 
diff --git a/src/common/jingle_ftstates.py b/src/common/jingle_ftstates.py
index 94d39a993cd91eec93d89a461da0330d41bca5d2..f7d894485e479b6a19502dabde916087c68f2254 100644
--- a/src/common/jingle_ftstates.py
+++ b/src/common/jingle_ftstates.py
@@ -13,9 +13,9 @@
 ## You should have received a copy of the GNU General Public License
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 
-import gajim
+from common import gajim
 import nbxmpp
-from jingle_transport import *
+from common.jingle_transport import *
 from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
 
 
diff --git a/src/common/jingle_rtp.py b/src/common/jingle_rtp.py
index 8df076f0ee30e1155ecca28ad11ee78dab8ee224..86bd35b325b2cad4ace964e74a0375cabd9994b0 100644
--- a/src/common/jingle_rtp.py
+++ b/src/common/jingle_rtp.py
@@ -19,19 +19,19 @@ Handles Jingle RTP sessions (XEP 0167)
 
 from collections import deque
 
-import gobject
+from gi.repository import GLib
 import socket
 
 import nbxmpp
-import farstream, gst
-import gst.interfaces
+import farstream
+import gst
 from glib import GError
 
-import gajim
+from common import gajim
 
-from jingle_transport import JingleTransportICEUDP
-from jingle_content import contents, JingleContent, JingleContentSetupException
-from connection_handlers_events import InformationEvent
+from common.jingle_transport import JingleTransportICEUDP
+from common.jingle_content import contents, JingleContent, JingleContentSetupException
+from common.connection_handlers_events import InformationEvent
 
 
 import logging
@@ -66,7 +66,6 @@ class JingleRTPContent(JingleContent):
         # pipeline and bus
         self.pipeline = gst.Pipeline()
         bus = self.pipeline.get_bus()
-        bus.enable_sync_message_emission()
         bus.add_signal_watch()
         bus.connect('message', self._on_gst_message)
 
@@ -90,8 +89,8 @@ class JingleRTPContent(JingleContent):
                 try:
                     ip = socket.getaddrinfo(stun_server, 0, socket.AF_UNSPEC,
                             socket.SOCK_STREAM)[0][4][0]
-                except socket.gaierror, (errnum, errstr):
-                    log.warn('Lookup of stun ip failed: %s' % errstr)
+                except socket.gaierror as e:
+                    log.warning('Lookup of stun ip failed: %s' % str(e))
                 else:
                     params['stun-ip'] = ip
 
@@ -108,13 +107,13 @@ class JingleRTPContent(JingleContent):
         try:
             bin = gst.parse_bin_from_description(pipeline, True)
             return bin
-        except GError, error_str:
+        except GError as e:
             gajim.nec.push_incoming_event(InformationEvent(None,
                 conn=self.session.connection, level='error',
                 pri_txt=_('%s configuration error') % text.capitalize(),
                 sec_txt=_("Couldn't setup %s. Check your configuration.\n\n"
                 "Pipeline was:\n%s\n\nError was:\n%s") % (text, pipeline,
-                error_str)))
+                str(e))))
             raise JingleContentSetupException
 
     def add_remote_candidates(self, candidates):
@@ -133,13 +132,13 @@ class JingleRTPContent(JingleContent):
         events = deque(events)
         self._dtmf_running = True
         self._start_dtmf(events.popleft())
-        gobject.timeout_add(500, self._next_dtmf, events)
+        GLib.timeout_add(500, self._next_dtmf, events)
 
     def _next_dtmf(self, events):
         self._stop_dtmf()
         if events:
             self._start_dtmf(events.popleft())
-            gobject.timeout_add(500, self._next_dtmf, events)
+            GLib.timeout_add(500, self._next_dtmf, events)
         else:
             self._dtmf_running = False
 
@@ -370,11 +369,8 @@ class JingleAudio(JingleRTPContent):
 
 
 class JingleVideo(JingleRTPContent):
-    def __init__(self, session, transport=None, in_xid=0, out_xid=0):
+    def __init__(self, session, transport=None):
         JingleRTPContent.__init__(self, session, 'video', transport)
-        self.in_xid = in_xid
-        self.out_xid = out_xid
-        self.out_xid_set = False
         self.setup_stream()
 
     def setup_stream(self):
@@ -382,8 +378,6 @@ class JingleVideo(JingleRTPContent):
         # sometimes, one window won't show up,
         # sometimes it'll freeze...
         JingleRTPContent.setup_stream(self, self._on_src_pad_added)
-        bus = self.pipeline.get_bus()
-        bus.connect('sync-message::element', self._on_sync_message)
 
         # the local parts
         if gajim.config.get('video_framerate'):
@@ -399,25 +393,17 @@ class JingleVideo(JingleRTPContent):
             video_size = 'video/x-raw-yuv,width=%s,height=%s ! ' % (w, h)
         else:
             video_size = ''
-        if gajim.config.get('video_see_self'):
-            tee = '! tee name=t ! queue ! videoscale ! ' + \
-                'video/x-raw-yuv,width=160,height=120 ! ffmpegcolorspace ! ' + \
-                '%s t. ! queue ' % gajim.config.get(
-                'video_output_device')
-        else:
-            tee = ''
-
         self.src_bin = self.make_bin_from_config('video_input_device',
-            '%%s %s! %svideoscale ! %sffmpegcolorspace' % (tee, framerate,
-            video_size), _("video input"))
-
+            '%%s ! %svideoscale ! %sffmpegcolorspace' % (framerate, video_size),
+            _("video input"))
+        #caps = gst.element_factory_make('capsfilter')
+        #caps.set_property('caps', gst.caps_from_string('video/x-raw-yuv, width=320, height=240'))
 
         self.pipeline.add(self.src_bin)#, caps)
-        self.pipeline.set_state(gst.STATE_PLAYING)
         #src_bin.link(caps)
 
         self.sink = self.make_bin_from_config('video_output_device',
-            'videoscale ! ffmpegcolorspace ! %s',
+            'videoscale ! ffmpegcolorspace ! %s force-aspect-ratio=True',
             _("video output"))
         self.pipeline.add(self.sink)
 
@@ -427,27 +413,11 @@ class JingleVideo(JingleRTPContent):
         # The following is needed for farstream to process ICE requests:
         self.pipeline.set_state(gst.STATE_PLAYING)
 
-    def _on_sync_message(self, bus, message):
-        if message.structure is None:
-            return False
-        if message.structure.get_name() == 'prepare-xwindow-id':
-            message.src.set_property('force-aspect-ratio', True)
-            imagesink = message.src
-            if gajim.config.get('video_see_self') and not self.out_xid_set:
-                imagesink.set_xwindow_id(self.out_xid)
-                self.out_xid_set = True
-            else:
-                imagesink.set_xwindow_id(self.in_xid)
-
     def get_fallback_src(self):
         # TODO: Use avatar?
         pipeline = 'videotestsrc is-live=true ! video/x-raw-yuv,framerate=10/1 ! ffmpegcolorspace'
         return gst.parse_bin_from_description(pipeline, True)
 
-    def destroy(self):
-        JingleRTPContent.destroy(self)
-        self.pipeline.get_bus().disconnect_by_func(self._on_sync_message)
-
 def get_content(desc):
     if desc['media'] == 'audio':
         return JingleAudio
diff --git a/src/common/jingle_session.py b/src/common/jingle_session.py
index f497a453cffefa908b5670011fcddaab5d508829..7652e88685d0121557805b1fe49cc24b7df30eda 100644
--- a/src/common/jingle_session.py
+++ b/src/common/jingle_session.py
@@ -28,12 +28,12 @@ Handles Jingle sessions (XEP 0166)
 #   - Tie-breaking
 # * timeout
 
-import gajim #Get rid of that?
+from common import gajim
 import nbxmpp
-from jingle_transport import get_jingle_transport, JingleTransportIBB
-from jingle_content import get_jingle_content, JingleContentSetupException
-from jingle_content import JingleContent
-from jingle_ft import STATE_TRANSPORT_REPLACE
+from common.jingle_transport import get_jingle_transport, JingleTransportIBB
+from common.jingle_content import get_jingle_content, JingleContentSetupException
+from common.jingle_content import JingleContent
+from common.jingle_ft import STATE_TRANSPORT_REPLACE
 from common.connection_handlers_events import *
 import logging
 log = logging.getLogger("gajim.c.jingle_session")
@@ -75,7 +75,6 @@ class JingleSession(object):
         self.contents = {} # negotiated contents
         self.connection = con # connection to use
         # our full jid
-        #FIXME: Get rid of gajim here?
         self.ourjid = gajim.get_jid_from_account(self.connection.name)
         if con.server_resource:
             self.ourjid = self.ourjid + '/' + con.server_resource
@@ -273,8 +272,8 @@ class JingleSession(object):
         """
         Return True when all codecs and candidates are ready (for all contents)
         """
-        return (any((content.is_ready() for content in self.contents.itervalues()))
-                and self.accepted)
+        return (any((content.is_ready() for content in self.contents.values()))
+            and self.accepted)
 
     def accept_session(self):
         """
@@ -592,7 +591,7 @@ class JingleSession(object):
         """
         Broadcast the stanza to all content handlers
         """
-        for content in self.contents.itervalues():
+        for content in self.contents.values():
             content.on_stanza(stanza, None, error, action)
 
     def __parse_contents(self, jingle):
diff --git a/src/common/jingle_transport.py b/src/common/jingle_transport.py
index b8c0f2016825b35ef7701256dd6a22f83c1eca09..5f6f8b7c0c1de4caecec365e233d0c442c087167 100644
--- a/src/common/jingle_transport.py
+++ b/src/common/jingle_transport.py
@@ -156,7 +156,8 @@ class JingleTransportSocks5(JingleTransport):
             candidates.append(cand)
 
             # we need this when we construct file_props on session-initiation
-        self.remote_candidates = candidates
+        if candidates:
+            self.remote_candidates = candidates
         return candidates
 
 
@@ -177,30 +178,39 @@ class JingleTransportSocks5(JingleTransport):
             return
         if not self.connection:
             return
-        local_ip_cand = []
         port = int(gajim.config.get('file_transfers_port'))
         #type preference of connection type. XEP-0260 section 2.2
         type_preference = 126
-        c = {'host': self.connection.peerhost[0]}
-        c['candidate_id'] = self.connection.connection.getAnID()
-        c['port'] = port
-        c['type'] = 'direct'
-        c['jid'] = self.ourjid
-        c['priority'] = (2**16) * type_preference
+        priority = (2**16) * type_preference
+
+        hosts = set()
+        local_ip_cand = []
 
+        c = {'host': self.connection.peerhost[0],
+             'candidate_id': self.connection.connection.getAnID(),
+             'port': port,
+             'type': 'direct',
+             'jid': self.ourjid,
+             'priority': priority}
+        hosts.add(self.connection.peerhost[0])
         local_ip_cand.append(c)
 
-        for addr in socket.getaddrinfo(socket.gethostname(), None):
-            if not addr[4][0] in local_ip_cand and not addr[4][0].startswith('127'):
-                c = {'host': addr[4][0]}
-                c['candidate_id'] = self.connection.connection.getAnID()
-                c['port'] = port
-                c['type'] = 'direct'
-                c['jid'] = self.ourjid
-                c['priority'] = (2**16) * type_preference
-                c['initiator'] = self.file_props.sender
-                c['target'] = self.file_props.receiver
-                local_ip_cand.append(c)
+        try:
+            for addrinfo in socket.getaddrinfo(socket.gethostname(), None):
+                addr = addrinfo[4][0]
+                if not addr in hosts and not addr.startswith('127'):
+                    c = {'host': addr,
+                         'candidate_id': self.connection.connection.getAnID(),
+                         'port': port,
+                         'type': 'direct',
+                         'jid': self.ourjid,
+                         'priority': priority,
+                         'initiator': self.file_props.sender,
+                         'target': self.file_props.receiver}
+                    hosts.add(addr)
+                    local_ip_cand.append(c)
+        except socket.gaierror:
+            pass # ignore address-related errors for getaddrinfo
 
         self._add_candidates(local_ip_cand)
 
@@ -208,6 +218,7 @@ class JingleTransportSocks5(JingleTransport):
         if not self.connection:
             return
         type_preference = 126
+        priority = (2**16) * type_preference
         additional_ip_cand = []
         port = int(gajim.config.get('file_transfers_port'))
         ft_add_hosts = gajim.config.get('ft_add_hosts_to_send')
@@ -215,14 +226,14 @@ class JingleTransportSocks5(JingleTransport):
         if ft_add_hosts:
             hosts = [e.strip() for e in ft_add_hosts.split(',')]
             for h in hosts:
-                c = {'host': h}
-                c['candidate_id'] = self.connection.connection.getAnID()
-                c['port'] = port
-                c['type'] = 'direct'
-                c['jid'] = self.ourjid
-                c['priority'] = (2**16) * type_preference
-                c['initiator'] = self.file_props.sender
-                c['target'] = self.file_props.receiver
+                c = {'host': h,
+                     'candidate_id': self.connection.connection.getAnID(),
+                     'port': port,
+                     'type': 'direct',
+                     'jid': self.ourjid,
+                     'priority': priority,
+                     'initiator': self.file_props.sender,
+                     'target': self.file_props.receiver}
                 additional_ip_cand.append(c)
 
         self._add_candidates(additional_ip_cand)
@@ -231,6 +242,7 @@ class JingleTransportSocks5(JingleTransport):
         if not self.connection:
             return
         type_preference = 10
+        priority = (2**16) * type_preference
         proxy_cand = []
         socks5conn = self.connection
         proxyhosts = socks5conn._get_file_transfer_proxies_from_config(self.file_props)
@@ -239,14 +251,14 @@ class JingleTransportSocks5(JingleTransport):
             self.file_props.proxyhosts = proxyhosts
 
             for proxyhost in proxyhosts:
-                c = {'host': proxyhost['host']}
-                c['candidate_id'] = self.connection.connection.getAnID()
-                c['port'] = int(proxyhost['port'])
-                c['type'] = 'proxy'
-                c['jid'] = proxyhost['jid']
-                c['priority'] = (2**16) * type_preference
-                c['initiator'] = self.file_props.sender
-                c['target'] = self.file_props.receiver
+                c = {'host': proxyhost['host'],
+                     'candidate_id': self.connection.connection.getAnID(),
+                     'port': int(proxyhost['port']),
+                     'type': 'proxy',
+                     'jid': proxyhost['jid'],
+                     'priority': priority,
+                     'initiator': self.file_props.sender,
+                     'target': self.file_props.receiver}
                 proxy_cand.append(c)
 
         self._add_candidates(proxy_cand)
@@ -298,7 +310,7 @@ class JingleTransportSocks5(JingleTransport):
                     cid = host['candidate_id']
                     break
         if cid is None:
-            raise Exception, 'cid is missing'
+            raise Exception('cid is missing')
         activated.setAttr('cid', cid)
         transport.addChild(node=activated)
         content.addChild(node=transport)
@@ -331,6 +343,7 @@ class JingleTransportIBB(JingleTransport):
         return transport
 
 try:
+    raise ImportError
     import farstream
 except Exception:
     pass
@@ -402,7 +415,7 @@ class JingleTransportICEUDP(JingleTransport):
             if 'type' in candidate and candidate['type'] in types:
                 cand.type = types[candidate['type']]
             else:
-                print 'Unknown type %s', candidate['type']
+                print('Unknown type %s' % candidate['type'])
             candidates.append(cand)
         self.remote_candidates.extend(candidates)
         return candidates
diff --git a/src/common/jingle_xtls.py b/src/common/jingle_xtls.py
index ec0fb957cb239e4fb610691d4cc52b9adec10bba..a5514025284f302198b9d40b8e967986b8d2214f 100644
--- a/src/common/jingle_xtls.py
+++ b/src/common/jingle_xtls.py
@@ -20,21 +20,22 @@ import os
 import nbxmpp
 
 import logging
-import common
 from common import gajim
 log = logging.getLogger('gajim.c.jingle_xtls')
 
 PYOPENSSL_PRESENT = False
 
-pending_contents = {} # key-exchange id -> session, accept that session once key-exchange completes
+# key-exchange id -> [callback, args], accept that session once key-exchange completes
+pending_contents = {}
 
-def key_exchange_pend(id_, content):
-    pending_contents[id_] = content
+def key_exchange_pend(id_, cb, args):
+    # args is a list
+    pending_contents[id_] = [cb, args]
 
 def approve_pending_content(id_):
-    content = pending_contents[id_]
-    content.session.approve_session()
-    content.session.approve_content('file', name=content.name)
+    cb = pending_contents[id_][0]
+    args = pending_contents[id_][1]
+    cb(*args)
 
 try:
     import OpenSSL.SSL
@@ -50,23 +51,25 @@ if PYOPENSSL_PRESENT:
     TYPE_DSA = crypto.TYPE_DSA
 
 SELF_SIGNED_CERTIFICATE = 'localcert'
+DH_PARAMS = 'dh_params.pem'
+DEFAULT_DH_PARAMS = 'dh4096.pem'
 
 def default_callback(connection, certificate, error_num, depth, return_code):
     log.info("certificate: %s" % certificate)
     return return_code
 
-def load_cert_file(cert_path, cert_store):
+def load_cert_file(cert_path, cert_store=None):
     """
     This is almost identical to the one in nbxmpp.tls_nb
     """
     if not os.path.isfile(cert_path):
-        return
+        return None
     try:
         f = open(cert_path)
-    except IOError, e:
+    except IOError as e:
         log.warning('Unable to open certificate file %s: %s' % (cert_path,
             str(e)))
-        return
+        return None
     lines = f.readlines()
     i = 0
     begin = -1
@@ -78,8 +81,10 @@ def load_cert_file(cert_path, cert_store):
             try:
                 x509cert = OpenSSL.crypto.load_certificate(
                     OpenSSL.crypto.FILETYPE_PEM, cert)
-                cert_store.add_cert(x509cert)
-            except OpenSSL.crypto.Error, exception_obj:
+                if cert_store:
+                    cert_store.add_cert(x509cert)
+                return x509cert
+            except OpenSSL.crypto.Error as exception_obj:
                 log.warning('Unable to load a certificate from file %s: %s' %\
                     (cert_path, exception_obj.args[0][0][2]))
             except:
@@ -87,13 +92,15 @@ def load_cert_file(cert_path, cert_store):
                     '%s' % cert_path)
             begin = -1
         i += 1
+    f.close()
 
-def get_context(fingerprint, verify_cb=None):
+def get_context(fingerprint, verify_cb=None, remote_jid=None):
     """
     constructs and returns the context objects
     """
     ctx = SSL.Context(SSL.SSLv23_METHOD)
-    flags = (SSL.OP_NO_SSLv2 | SSL.OP_NO_SSLv3 | SSL.OP_SINGLE_DH_USE)
+    flags = (SSL.OP_NO_SSLv2 | SSL.OP_NO_SSLv3 | SSL.OP_SINGLE_DH_USE \
+             | SSL.OP_NO_TICKET)
     ctx.set_options(flags)
     ctx.set_cipher_list('HIGH:!aNULL:!3DES')
 
@@ -106,22 +113,46 @@ def get_context(fingerprint, verify_cb=None):
     cert_name = os.path.join(gajim.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE)
     ctx.use_privatekey_file (cert_name + '.pkey')
     ctx.use_certificate_file(cert_name + '.cert')
-    store = ctx.get_cert_store()
-    for f in os.listdir(os.path.expanduser(gajim.MY_PEER_CERTS_PATH)):
-        load_cert_file(os.path.join(os.path.expanduser(
-            gajim.MY_PEER_CERTS_PATH), f), store)
-        log.debug('certificate file ' + f + ' loaded fingerprint ' + \
-            fingerprint)
+
+    # Try to load Diffie-Hellman parameters.
+    # First try user DH parameters, if this fails load the default DH parameters
+    dh_params_name = os.path.join(gajim.MY_CERT_DIR, DH_PARAMS)
+    try:
+        with open(dh_params_name, "r") as dh_params_file:
+            ctx.load_tmp_dh(str(dh_params_name).encode('utf-8'))
+    except IOError as err:
+        default_dh_params_name = os.path.join(common.gajim.DATA_DIR,
+            'other', DEFAULT_DH_PARAMS)
+        try:
+            with open(default_dh_params_name, "r") as default_dh_params_file:
+                ctx.load_tmp_dh(str(default_dh_params_name).encode('utf-8'))
+        except IOError as err:
+            log.error('Unable to load default DH parameter file: %s , %s'
+                % (default_dh_params_name, err))
+            raise
+
+    if remote_jid:
+        store = ctx.get_cert_store()
+        path = os.path.join(os.path.expanduser(gajim.MY_PEER_CERTS_PATH),
+            remote_jid) + '.cert'
+        if os.path.exists(path):
+            load_cert_file(path, cert_store=store)
+            log.debug('certificate file ' + path + ' loaded fingerprint ' + \
+                fingerprint)
     return ctx
 
+def read_cert(certpath):
+    certificate = ''
+    with open(certpath, 'r') as certfile:
+        for line in certfile.readlines():
+            if not line.startswith('-'):
+                certificate += line
+    return certificate
+
 def send_cert(con, jid_from, sid):
     certpath = os.path.join(gajim.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE) + \
         '.cert'
-    certfile = open(certpath, 'r')
-    certificate = ''
-    for line in certfile.readlines():
-        if not line.startswith('-'):
-            certificate += line
+    certificate = read_cert(certpath)
     iq = nbxmpp.Iq('result', to=jid_from);
     iq.setAttr('id', sid)
 
@@ -151,9 +182,21 @@ def handle_new_cert(con, obj, jid_from):
     f.write('-----BEGIN CERTIFICATE-----\n')
     f.write(cert)
     f.write('-----END CERTIFICATE-----\n')
+    f.close()
 
     approve_pending_content(id_)
 
+def check_cert(jid, fingerprint):
+    certpath = os.path.join(os.path.expanduser(gajim.MY_PEER_CERTS_PATH), jid)
+    certpath += '.cert'
+    if os.path.exists(certpath):
+        cert = load_cert_file(certpath)
+        if cert:
+            digest_algo = cert.get_signature_algorithm().split('With')[0]
+            if cert.digest(digest_algo) == fingerprint:
+                return True
+    return False
+
 def send_cert_request(con, to_jid):
     iq = nbxmpp.Iq('get', to=to_jid)
     id_ = con.connection.getAnID()
@@ -161,7 +204,7 @@ def send_cert_request(con, to_jid):
     pubkey = iq.setTag('pubkeys')
     pubkey.setNamespace(nbxmpp.NS_PUBKEY_PUBKEY)
     con.connection.send(iq)
-    return unicode(id_)
+    return str(id_)
 
 # the following code is partly due to pyopenssl examples
 
@@ -177,12 +220,12 @@ def createKeyPair(type, bits):
     pkey.generate_key(type, bits)
     return pkey
 
-def createCertRequest(pkey, digest="sha1", **name):
+def createCertRequest(pkey, digest="sha256", **name):
     """
     Create a certificate request.
 
     Arguments: pkey   - The key to associate with the request
-               digest - Digestion method to use for signing, default is sha1
+               digest - Digestion method to use for signing, default is sha256
                **name - The name of the subject of the request, possible
                         arguments are:
                           C     - Country name
@@ -204,7 +247,7 @@ def createCertRequest(pkey, digest="sha1", **name):
     req.sign(pkey, digest)
     return req
 
-def createCertificate(req, (issuerCert, issuerKey), serial, (notBefore, notAfter), digest="sha1"):
+def createCertificate(req, issuerCert, issuerKey, serial, notBefore, notAfter, digest="shai256"):
     """
     Generate a certificate given a certificate request.
 
@@ -216,7 +259,7 @@ def createCertificate(req, (issuerCert, issuerKey), serial, (notBefore, notAfter
                             starts being valid
                notAfter   - Timestamp (relative to now) when the certificate
                             stops being valid
-               digest     - Digest method to use for signing, default is sha1
+               digest     - Digest method to use for signing, default is sha256
     Returns:   The signed certificate in an X509 object
     """
     cert = crypto.X509()
@@ -238,13 +281,13 @@ def make_certs(filepath, CN):
     """
     key = createKeyPair(TYPE_RSA, 4096)
     req = createCertRequest(key, CN=CN)
-    cert = createCertificate(req, (req, key), 0, (0, 60*60*24*365*5)) # five years
-    private_key_file = open(filepath + '.pkey', 'w')
-    os.chmod(filepath + '.pkey', 0600)
-    private_key_file.write(crypto.dump_privatekey(
-        crypto.FILETYPE_PEM, key))
-    open(filepath + '.cert', 'w').write(crypto.dump_certificate(
-        crypto.FILETYPE_PEM, cert))
+    cert = createCertificate(req, req, key, 0, 0, 60*60*24*365*5) # five years
+    with open(filepath + '.pkey', 'wb') as f:
+        os.chmod(filepath + '.pkey', 0o600)
+        f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, key))
+    with open(filepath + '.cert', 'wb') as f:
+        f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert).decode(
+            'utf-8'))
 
 
 if __name__ == '__main__':
diff --git a/src/common/kwalletbinding.py b/src/common/kwalletbinding.py
index af320c2f865bf9770a292584b7f109a8b07c661e..750f3c8c15fbfac3e42f3f7369daf71ce9e0182f 100644
--- a/src/common/kwalletbinding.py
+++ b/src/common/kwalletbinding.py
@@ -46,14 +46,14 @@ def kwallet_get(folder, entry):
     • folder: The top-level category to use (normally the programme name)
     • entry: The key of the entry to retrieve
 
-    Returns the passphrase as unicode, False if it cannot be found,
+    Returns the passphrase, False if it cannot be found,
     or None if an error occured.
     """
     p = subprocess.Popen(["kwalletcli", "-q", "-f", folder.encode('utf-8'),
      "-e", entry.encode('utf-8')], stdout=subprocess.PIPE)
     pw = p.communicate()[0]
     if p.returncode == 0:
-        return unicode(pw.decode('utf-8'))
+        return pw
     if p.returncode == 1 or p.returncode == 4:
         # ENOENT
         return False
diff --git a/src/common/logger.py b/src/common/logger.py
index c49fd70432f26306f7748ee2096d95a7d7531506..8fb2cf714bc9db03b4e02161aa8b8a2447dcd6b4 100644
--- a/src/common/logger.py
+++ b/src/common/logger.py
@@ -33,16 +33,16 @@ import sys
 import time
 import datetime
 from gzip import GzipFile
-from cStringIO import StringIO
-import gobject
+from io import BytesIO
+from gi.repository import GLib
 
-import exceptions
-import gajim
-import ged
+from common import exceptions
+from common import gajim
+from common import ged
 
 import sqlite3 as sqlite
 
-import configpaths
+from common import configpaths
 LOG_DB_PATH = configpaths.gajimpaths['LOG_DB']
 LOG_DB_FOLDER, LOG_DB_FILE = os.path.split(LOG_DB_PATH)
 CACHE_DB_PATH = configpaths.gajimpaths['CACHE_DB']
@@ -151,7 +151,7 @@ class Logger:
         try:
             self.cur.execute("ATTACH DATABASE '%s' AS cache" % \
                 CACHE_DB_PATH.replace("'", "''"))
-        except sqlite.Error, e:
+        except sqlite.Error as e:
             log.debug("Failed to attach cache database: %s" % str(e))
 
     def set_synchronous(self, sync):
@@ -160,7 +160,7 @@ class Logger:
                 self.cur.execute("PRAGMA synchronous = NORMAL")
             else:
                 self.cur.execute("PRAGMA synchronous = OFF")
-        except sqlite.Error, e:
+        except sqlite.Error as e:
             log.debug("Failed to set_synchronous(%s): %s" % (sync, str(e)))
 
     def init_vars(self):
@@ -170,15 +170,15 @@ class Logger:
     def _really_commit(self):
         try:
             self.con.commit()
-        except sqlite.OperationalError, e:
-            print >> sys.stderr, str(e)
+        except sqlite.OperationalError as e:
+            print(str(e), file=sys.stderr)
         self.commit_timout_id = None
         return False
 
     def _timeout_commit(self):
         if self.commit_timout_id:
             return
-        self.commit_timout_id = gobject.timeout_add(500, self._really_commit)
+        self.commit_timout_id = GLib.timeout_add(500, self._really_commit)
 
     def simple_commit(self, sql_to_commit):
         """
@@ -190,7 +190,7 @@ class Logger:
     def get_jids_already_in_db(self):
         try:
             self.cur.execute('SELECT jid FROM jids')
-            # list of tupples: [(u'aaa@bbb',), (u'cc@dd',)]
+            # list of tupples: [('aaa@bbb',), ('cc@dd',)]
             rows = self.cur.fetchall()
         except sqlite.DatabaseError:
             raise exceptions.DatabaseMalformed
@@ -258,11 +258,11 @@ class Logger:
             self.cur.execute('INSERT INTO jids (jid, type) VALUES (?, ?)', (jid,
                     typ))
             self.con.commit()
-        except sqlite.IntegrityError, e:
+        except sqlite.IntegrityError:
             # Jid already in DB, maybe added by another instance. re-read DB
             self.get_jids_already_in_db()
             return self.get_jid_id(jid, typestr)
-        except sqlite.OperationalError, e:
+        except sqlite.OperationalError as e:
             raise exceptions.PysqliteOperationalError(str(e))
         jid_id = self.cur.lastrowid
         self.jids_already_in.append(jid)
@@ -413,15 +413,15 @@ class Logger:
             self.cur.execute(sql, values)
         except sqlite.DatabaseError:
             raise exceptions.DatabaseMalformed
-        except sqlite.OperationalError, e:
+        except sqlite.OperationalError as e:
             raise exceptions.PysqliteOperationalError(str(e))
         message_id = None
         if write_unread:
             try:
                 self.con.commit()
                 message_id = self.cur.lastrowid
-            except sqlite.OperationalError, e:
-                print >> sys.stderr, str(e)
+            except sqlite.OperationalError as e:
+                print(str(e), file=sys.stderr)
         else:
             self._timeout_commit()
         if message_id:
@@ -528,7 +528,7 @@ class Logger:
             # status for roster items
             try:
                 jid_id = self.get_jid_id(jid)
-            except exceptions.PysqliteOperationalError, e:
+            except exceptions.PysqliteOperationalError as e:
                 raise exceptions.PysqliteOperationalError(str(e))
             if show is None: # show is None (xmpp), but we say that 'online'
                 show_col = constants.SHOW_ONLINE
@@ -541,7 +541,7 @@ class Logger:
             try:
                 # re-get jid_id for the new jid
                 jid_id = self.get_jid_id(jid, 'ROOM')
-            except exceptions.PysqliteOperationalError, e:
+            except exceptions.PysqliteOperationalError as e:
                 raise exceptions.PysqliteOperationalError(str(e))
             contact_name_col = nick
 
@@ -555,13 +555,13 @@ class Logger:
             try:
                 # re-get jid_id for the new jid
                 jid_id = self.get_jid_id(jid, 'ROOM')
-            except exceptions.PysqliteOperationalError, e:
+            except exceptions.PysqliteOperationalError as e:
                 raise exceptions.PysqliteOperationalError(str(e))
             contact_name_col = nick
         else:
             try:
                 jid_id = self.get_jid_id(jid)
-            except exceptions.PysqliteOperationalError, e:
+            except exceptions.PysqliteOperationalError as e:
                 raise exceptions.PysqliteOperationalError(str(e))
             if kind == 'chat_msg_recv':
                 if not self.jid_is_from_pm(jid):
@@ -586,7 +586,7 @@ class Logger:
         """
         try:
             self.get_jid_id(jid)
-        except exceptions.PysqliteOperationalError, e:
+        except exceptions.PysqliteOperationalError:
             # Error trying to create a new jid_id. This means there is no log
             return []
         where_sql, jid_tuple = self._build_contact_where(account, jid)
@@ -630,7 +630,7 @@ class Logger:
         """
         try:
             self.get_jid_id(jid)
-        except exceptions.PysqliteOperationalError, e:
+        except exceptions.PysqliteOperationalError:
             # Error trying to create a new jid_id. This means there is no log
             return []
         where_sql, jid_tuple = self._build_contact_where(account, jid)
@@ -659,14 +659,14 @@ class Logger:
         """
         try:
             self.get_jid_id(jid)
-        except exceptions.PysqliteOperationalError, e:
+        except exceptions.PysqliteOperationalError:
             # Error trying to create a new jid_id. This means there is no log
             return []
 
         if False: # query.startswith('SELECT '): # it's SQL query (FIXME)
             try:
                 self.cur.execute(query)
-            except sqlite.OperationalError, e:
+            except sqlite.OperationalError as e:
                 results = [('', '', '', '', str(e))]
                 return results
 
@@ -700,7 +700,7 @@ class Logger:
         """
         try:
             self.get_jid_id(jid)
-        except exceptions.PysqliteOperationalError, e:
+        except exceptions.PysqliteOperationalError:
             # Error trying to create a new jid_id. This means there is no log
             return []
         days_with_logs = []
@@ -742,7 +742,7 @@ class Logger:
         else:
             try:
                 jid_id = self.get_jid_id(jid, 'ROOM')
-            except exceptions.PysqliteOperationalError, e:
+            except exceptions.PysqliteOperationalError:
                 # Error trying to create a new jid_id. This means there is no log
                 return None
             where_sql = 'jid_id = ?'
@@ -768,7 +768,7 @@ class Logger:
         """
         try:
             jid_id = self.get_jid_id(jid, 'ROOM')
-        except exceptions.PysqliteOperationalError, e:
+        except exceptions.PysqliteOperationalError:
             # Error trying to create a new jid_id. This means there is no log
             return None
         where_sql = 'jid_id = %s' % jid_id
@@ -808,7 +808,7 @@ class Logger:
             for user in family:
                 try:
                     jid_id = self.get_jid_id(user['jid'])
-                except exceptions.PysqliteOperationalError, e:
+                except exceptions.PysqliteOperationalError:
                     continue
                 where_sql += 'jid_id = ?'
                 jid_tuple += (jid_id,)
@@ -890,8 +890,7 @@ class Logger:
             #   ..., 'FEAT', feature1, feature2, ...).join(' '))
             # NOTE: if there's a need to do more gzip, put that to a function
             try:
-                data = GzipFile(fileobj=StringIO(str(data))).read().decode(
-                        'utf-8').split('\0')
+                data = GzipFile(fileobj=BytesIO(data)).read().decode('utf-8').split('\0')
             except IOError:
                 # This data is corrupted. It probably contains non-ascii chars
                 to_be_removed.append((hash_method, hash_))
@@ -931,16 +930,15 @@ class Logger:
         data.extend(features)
         data = '\0'.join(data)
         # if there's a need to do more gzip, put that to a function
-        string = StringIO()
+        string = BytesIO()
         gzip = GzipFile(fileobj=string, mode='w')
-        data = data.encode('utf-8') # the gzip module can't handle unicode objects
-        gzip.write(data)
+        gzip.write(data.encode('utf-8'))
         gzip.close()
         data = string.getvalue()
         self.cur.execute('''
                 INSERT INTO caps_cache ( hash_method, hash, data, last_seen )
                 VALUES (?, ?, ?, ?);
-                ''', (hash_method, hash_, buffer(data), int(time.time())))
+                ''', (hash_method, hash_, memoryview(data), int(time.time())))
         # (1) -- note above
         self._timeout_commit()
 
@@ -996,7 +994,7 @@ class Logger:
         try:
             account_jid_id = self.get_jid_id(account_jid)
             jid_id = self.get_jid_id(jid)
-        except exceptions.PysqliteOperationalError, e:
+        except exceptions.PysqliteOperationalError as e:
             raise exceptions.PysqliteOperationalError(str(e))
         self.cur.execute(
                 'DELETE FROM roster_group WHERE account_jid_id=? AND jid_id=?',
@@ -1018,7 +1016,7 @@ class Logger:
         try:
             account_jid_id = self.get_jid_id(account_jid)
             jid_id = self.get_jid_id(jid)
-        except exceptions.PysqliteOperationalError, e:
+        except exceptions.PysqliteOperationalError as e:
             raise exceptions.PysqliteOperationalError(str(e))
 
         # Update groups information
@@ -1054,6 +1052,8 @@ class Logger:
                 FROM roster_entry re, jids j
                 WHERE re.account_jid_id=? AND j.jid_id=re.jid_id''', (account_jid_id,))
         for jid, jid_id, name, subscription, ask in self.cur:
+            jid = jid
+            name = name
             data[jid] = {}
             if name:
                 data[jid]['name'] = name
@@ -1077,6 +1077,7 @@ class Logger:
                     WHERE account_jid_id=? AND jid_id=?''',
                     (account_jid_id, data[jid]['id']))
             for (group_name,) in self.cur:
+                group_name = group_name
                 data[jid]['groups'].append(group_name)
             del data[jid]['id']
 
@@ -1155,7 +1156,7 @@ class Logger:
                 # when we quit this muc
                 obj.conn.last_history_time[obj.jid] = tim_f
 
-            except exceptions.PysqliteOperationalError, e:
+            except exceptions.PysqliteOperationalError as e:
                 obj.conn.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
             except exceptions.DatabaseMalformed:
                 pritext = _('Database Error')
diff --git a/src/common/logging_helpers.py b/src/common/logging_helpers.py
index 85ec8b1692230d8bb0adae3ad09f30dca1f6c1dc..ec5dfe70dfc44bbbce3268eaa236c6ae501875f6 100644
--- a/src/common/logging_helpers.py
+++ b/src/common/logging_helpers.py
@@ -19,7 +19,7 @@
 ##
 
 import logging
-import i18n
+from common import i18n
 
 def parseLogLevel(arg):
     """
@@ -30,7 +30,7 @@ def parseLogLevel(arg):
     elif arg.isupper() and hasattr(logging, arg):
         return getattr(logging, arg)
     else:
-        print _('%s is not a valid loglevel') % repr(arg)
+        print(_('%s is not a valid loglevel') % repr(arg))
         return 0
 
 def parseLogTarget(arg):
@@ -72,7 +72,7 @@ def parseAndSetLogLevels(arg):
             target = parseLogTarget(target.strip())
             if target:
                 logging.getLogger(target).setLevel(level)
-                print "Logger %s level set to %d" % (target, level)
+                print("Logger %s level set to %d" % (target, level))
 
 
 class colors:
@@ -141,7 +141,7 @@ def init(use_color=False):
     consoleloghandler.setFormatter(
             FancyFormatter(
                     '%(asctime)s %(levelname)s %(name)s %(message)s',
-                    '%H:%M:%S',
+                    '%x %H:%M:%S',
                     use_color
             )
     )
@@ -179,13 +179,13 @@ if __name__ == '__main__':
     log = logging.getLogger('gajim')
     log.debug('debug')
     log.info('info')
-    log.warn('warn')
+    log.warning('warn')
     log.error('error')
     log.critical('critical')
 
     log = logging.getLogger('gajim.c.x.dispatcher')
     log.debug('debug')
     log.info('info')
-    log.warn('warn')
+    log.warning('warn')
     log.error('error')
     log.critical('critical')
diff --git a/src/common/message_archiving.py b/src/common/message_archiving.py
index 5a5388f63327bba8257718af1d4869f91fb04a49..69cf9a21d17af1872ec708e99d6ee8cd48fdac2c 100644
--- a/src/common/message_archiving.py
+++ b/src/common/message_archiving.py
@@ -96,7 +96,7 @@ class ConnectionArchive:
 
     def get_item_pref(self, jid):
         jid = nbxmpp.JID(jid)
-        if unicode(jid) in self.items:
+        if str(jid) in self.items:
             return self.items[jid]
 
         if jid.getStripped() in self.items:
diff --git a/src/common/multimedia_helpers.py b/src/common/multimedia_helpers.py
index 3c8798cbd090d436873efc7fde35d59515c34e73..5968b84a7f1b3ee44f41eb18761a95d141e3b9b7 100644
--- a/src/common/multimedia_helpers.py
+++ b/src/common/multimedia_helpers.py
@@ -52,7 +52,7 @@ class DeviceManager(object):
         except ImportError:
             pass
         except gst.ElementNotFoundError:
-            print 'element \'%s\' not found' % name
+            print('element \'%s\' not found' % name)
 
 
 class AudioInputManager(DeviceManager):
diff --git a/src/common/nec.py b/src/common/nec.py
index eb4fdccf0821c539b104e21a57a2d399ea625ade..b699085c13c3c8cfe10205a22643646494f3957f 100644
--- a/src/common/nec.py
+++ b/src/common/nec.py
@@ -153,7 +153,7 @@ class NetworkEvent(object):
         return True
 
     def _set_kwargs_as_attributes(self, **kwargs):
-        for k, v in kwargs.iteritems():
+        for k, v in kwargs.items():
             setattr(self, k, v)
 
 
diff --git a/src/common/optparser.py b/src/common/optparser.py
index f4ea78355fcc4e4793a82569879062a224908a3c..9033303fd2a91ce9e6ae5129f3ca55bd75e6dbee 100644
--- a/src/common/optparser.py
+++ b/src/common/optparser.py
@@ -36,7 +36,7 @@ from common import helpers
 from common import caps_cache
 
 import sqlite3 as sqlite
-import logger
+from common import logger
 
 class OptionsParser:
     def __init__(self, filename):
@@ -50,7 +50,8 @@ class OptionsParser:
         except Exception:
             if os.path.exists(self.__filename):
                 #we talk about a file
-                print _('Error: cannot open %s for reading') % self.__filename
+                print(_('Error: cannot open %s for reading') % self.__filename,
+                    file=sys.stderr)
             return False
 
         new_version = gajim.config.get('version')
@@ -59,10 +60,6 @@ class OptionsParser:
         regex = re.compile(r"(?P<optname>[^.]+)(?:(?:\.(?P<key>.+))?\.(?P<subname>[^.]+))?\s=\s(?P<value>.*)")
 
         for line in fd:
-            try:
-                line = line.decode('utf-8')
-            except UnicodeDecodeError:
-                line = line.decode(locale.getpreferredencoding())
             optname, key, subname, value = regex.match(line).groups()
             if key is None:
                 self.old_values[optname] = value
@@ -86,19 +83,12 @@ class OptionsParser:
         if value is None:
             return
         # convert to utf8 before writing to file if needed
-        if isinstance(value, unicode):
-            value = value.encode('utf-8')
-        else:
-            value = str(value)
-        if isinstance(opt, unicode):
-            opt = opt.encode('utf-8')
+        value = str(value)
         s = ''
         if parents:
             if len(parents) == 1:
                 return
             for p in parents:
-                if isinstance(p, unicode):
-                    p = p.encode('utf-8')
                 s += p + '.'
         s += opt
         fd.write(s + ' = ' + value + '\n')
@@ -108,11 +98,11 @@ class OptionsParser:
         self.__tempfile = os.path.join(base_dir, '.' + filename)
         try:
             f = open(self.__tempfile, 'w')
-        except IOError, e:
+        except IOError as e:
             return str(e)
         try:
             gajim.config.foreach(self.write_line, f)
-        except IOError, e:
+        except IOError as e:
             return str(e)
         f.flush()
         os.fsync(f.fileno())
@@ -126,9 +116,9 @@ class OptionsParser:
                     pass
         try:
             os.rename(self.__tempfile, self.__filename)
-        except IOError, e:
+        except IOError as e:
             return str(e)
-        os.chmod(self.__filename, 0600)
+        os.chmod(self.__filename, 0o600)
 
     def update_config(self, old_version, new_version):
         old_version_list = old_version.split('.') # convert '0.x.y' to (0, x, y)
@@ -381,7 +371,7 @@ class OptionsParser:
         """
         Apply indeces to the logs database
         """
-        print _('migrating logs database to indices')
+        print(_('migrating logs database to indices'))
         # FIXME see #2812
         back = os.getcwd()
         os.chdir(logger.LOG_DB_FOLDER)
@@ -654,7 +644,7 @@ class OptionsParser:
                     '''
             )
             con.commit()
-        except sqlite.OperationalError, e:
+        except sqlite.OperationalError:
             pass
         con.close()
         gajim.config.set('version', '0.11.4.4')
@@ -714,7 +704,7 @@ class OptionsParser:
         """
         dirs = ['../data', gajim.gajimpaths.data_root, gajim.DATA_DIR]
         if os.name != 'nt':
-            dirs.append(os.path.expanduser(u'~/.gajim'))
+            dirs.append(os.path.expanduser('~/.gajim'))
         for evt in gajim.config.get_per('soundevents'):
             path = gajim.config.get_per('soundevents', evt, 'path')
             # absolute and relative passes are necessary
diff --git a/src/common/passwords.py b/src/common/passwords.py
index 84822bf5a591c50cbb7ea14b1eed95d8357fc0be..aa9079eda868335bdeb838ac2946d8b034334614 100644
--- a/src/common/passwords.py
+++ b/src/common/passwords.py
@@ -29,11 +29,12 @@ __all__ = ['get_password', 'save_password']
 import warnings
 from common import gajim
 from common import kwalletbinding
+from common.exceptions import GnomeKeyringError
 
 USER_HAS_GNOMEKEYRING = False
 USER_USES_GNOMEKEYRING = False
 USER_HAS_KWALLETCLI = False
-gnomekeyring = None
+GnomeKeyring = None
 
 class PasswordStorage(object):
     def get_password(self, account_name):
@@ -61,13 +62,15 @@ class SimplePasswordStorage(PasswordStorage):
 
 class GnomePasswordStorage(PasswordStorage):
     def __init__(self):
-        self.keyring = gnomekeyring.get_default_keyring_sync()
+        (err, self.keyring) = GnomeKeyring.get_default_keyring_sync()
+        if err  != GnomeKeyring.Result.OK:
+            raise GnomeKeyringError(err)
         if self.keyring is None:
             self.keyring = 'login'
-        try:
-            gnomekeyring.create_sync(self.keyring, None)
-        except gnomekeyring.AlreadyExistsError:
-            pass
+        err = GnomeKeyring.create_sync(self.keyring, None)
+        if err not in (GnomeKeyring.Result.OK,
+        GnomeKeyring.Result.KEYRING_ALREADY_EXISTS):
+            raise GnomeKeyringError(err)
 
     def get_password(self, account_name):
         conf = gajim.config.get_per('accounts', account_name, 'password')
@@ -78,60 +81,74 @@ class GnomePasswordStorage(PasswordStorage):
             ## migrate the password over to keyring
             try:
                 self.save_password(account_name, password, update=False)
-            except gnomekeyring.NoKeyringDaemonError:
-                ## no keyring daemon: in the future, stop using it
-                set_storage(SimplePasswordStorage())
+            except GnomeKeyringError as e:
+                if e.error == GnomeKeyring.Result.NO_KEYRING_DAEMON:
+                    ## no keyring daemon: in the future, stop using it
+                    set_storage(SimplePasswordStorage())
             return password
-        try:
-            server = gajim.config.get_per('accounts', account_name, 'hostname')
-            user = gajim.config.get_per('accounts', account_name, 'name')
-            attributes1 = dict(server=str(server), user=str(user), protocol='xmpp')
-            attributes2 = dict(account_name=str(account_name), gajim=1)
-            try:
-                items = gnomekeyring.find_items_sync(
-                        gnomekeyring.ITEM_NETWORK_PASSWORD, attributes1)
-            except gnomekeyring.Error:
-                try:
-                    items = gnomekeyring.find_items_sync(
-                            gnomekeyring.ITEM_GENERIC_SECRET, attributes2)
-                    if items:
-                        # We found an old item, move it to new way of storing
-                        password = items[0].secret
-                        self.save_password(account_name, password)
-                        gnomekeyring.item_delete_sync(items[0].keyring,
-                                int(items[0].item_id))
-                except gnomekeyring.Error:
-                    items = []
-            if len(items) > 1:
-                warnings.warn("multiple gnome keyring items found for account %s;"
-                              " trying to use the first one..."
-                              % account_name)
-            if items:
-                return items[0].secret
+        server = gajim.config.get_per('accounts', account_name, 'hostname')
+        user = gajim.config.get_per('accounts', account_name, 'name')
+        attributes1 = GnomeKeyring.attribute_list_new()
+        GnomeKeyring.attribute_list_append_string(attributes1, 'server',
+            str(server))
+        GnomeKeyring.attribute_list_append_string(attributes1, 'user',
+            str(user))
+        GnomeKeyring.attribute_list_append_string(attributes1, 'protocol',
+            'xmpp')
+        attributes2 = GnomeKeyring.attribute_list_new()
+        GnomeKeyring.attribute_list_append_string(attributes2, 'account_name',
+            str(account_name))
+        GnomeKeyring.attribute_list_append_string(attributes2, 'gajim',
+            '1')
+        (err, items) = GnomeKeyring.find_items_sync(
+            GnomeKeyring.ItemType.NETWORK_PASSWORD, attributes1)
+        if err != GnomeKeyring.Result.OK:
+            (err, items) = GnomeKeyring.find_items_sync(
+                GnomeKeyring.ItemType.GENERIC_SECRET, attributes2)
+            if err == GnomeKeyring.Result.OK and len(items) > 0:
+                password = items[0].secret
+                self.save_password(account_name, password)
+                for item in items:
+                    GnomeKeyring.item_delete_sync(item.keyring,
+                        int(item.item_id))
             else:
-                return None
-        except gnomekeyring.DeniedError:
+                items = []
+        if len(items) > 1:
+            warnings.warn("multiple gnome keyring items found for account %s;"
+                " trying to use the first one..." % account_name)
+        if items:
+            return items[0].secret
+        else:
             return None
-        except gnomekeyring.NoKeyringDaemonError:
+        if err == GnomeKeyring.Result.NO_KEYRING_DAEMON:
             ## no keyring daemon: in the future, stop using it
             set_storage(SimplePasswordStorage())
-            return None
+        return None
 
     def save_password(self, account_name, password, update=True):
         server = gajim.config.get_per('accounts', account_name, 'hostname')
         user = gajim.config.get_per('accounts', account_name, 'name')
         display_name = _('XMPP account %s@%s') % (user, server)
-        attributes1 = dict(server=str(server), user=str(user), protocol='xmpp')
+        attributes1 = GnomeKeyring.attribute_list_new()
+        GnomeKeyring.attribute_list_append_string(attributes1, 'server',
+            str(server))
+        GnomeKeyring.attribute_list_append_string(attributes1, 'user',
+            str(user))
+        GnomeKeyring.attribute_list_append_string(attributes1, 'protocol',
+            'xmpp')
         if password is None:
             password = str()
-        try:
-            auth_token = gnomekeyring.item_create_sync(
-                self.keyring, gnomekeyring.ITEM_NETWORK_PASSWORD, display_name,
-                attributes1, password, update)
-        except (gnomekeyring.DeniedError, gnomekeyring.CancelledError):
-            set_storage(SimplePasswordStorage())
-            storage.save_password(account_name, password)
-            return
+        (err, auth_token) = GnomeKeyring.item_create_sync(self.keyring,
+            GnomeKeyring.ItemType.NETWORK_PASSWORD, display_name, attributes1,
+            password, update)
+        if err != GnomeKeyring.Result.OK:
+            if err in (GnomeKeyring.Result.DENIED,
+            GnomeKeyring.Result.CANCELLED):
+                set_storage(SimplePasswordStorage())
+                storage.save_password(account_name, password)
+                return
+            else:
+                raise GnomeKeyringError(err)
         gajim.config.set_per('accounts', account_name, 'password',
             'gnomekeyring:')
         if account_name in gajim.connections:
@@ -181,24 +198,25 @@ def get_storage():
     global storage
     if storage is None: # None is only in first time get_storage is called
         if gajim.config.get('use_gnomekeyring'):
-            global gnomekeyring
+            global GnomeKeyring
             try:
-                gnomekeyring = __import__('gnomekeyring')
-            except ImportError:
+                gir = __import__('gi.repository', globals(), locals(),
+                    ['GnomeKeyring'], 0)
+                GnomeKeyring = gir.GnomeKeyring
+            except (ImportError, AttributeError):
                 pass
             else:
                 global USER_HAS_GNOMEKEYRING
                 global USER_USES_GNOMEKEYRING
                 USER_HAS_GNOMEKEYRING = True
-                if gnomekeyring.is_available():
+                if GnomeKeyring.is_available():
                     USER_USES_GNOMEKEYRING = True
                 else:
                     USER_USES_GNOMEKEYRING = False
         if USER_USES_GNOMEKEYRING:
             try:
                 storage = GnomePasswordStorage()
-            except (gnomekeyring.NoKeyringDaemonError, gnomekeyring.DeniedError,
-            gnomekeyring.CancelledError):
+            except GnomeKeyringError:
                 storage = None
         if storage is None:
             if gajim.config.get('use_kwalletcli'):
diff --git a/src/common/pep.py b/src/common/pep.py
index 44ce3eb53fdcff769a37bb5388b5b14d14ec39b7..44a8294a939b44e8d7ed7d9d389037efaf3966f4 100644
--- a/src/common/pep.py
+++ b/src/common/pep.py
@@ -215,7 +215,10 @@ LOCATION_DATA = {
         'timestamp':    _('timestamp'),
         'uri':          _('uri')}
 
-import gobject
+from gi.repository import GLib
+from gi.repository import Gtk
+from gi.repository import GdkPixbuf
+
 import logging
 log = logging.getLogger('gajim.c.pep')
 
@@ -265,10 +268,6 @@ class AbstractPEP(object):
         else:
             acc.pep[self.type_] = self
 
-    def asPixbufIcon(self):
-        '''SHOULD be implemented by subclasses'''
-        return None
-
     def asMarkupText(self):
         '''SHOULD be implemented by subclasses'''
         return ''
@@ -296,18 +295,14 @@ class UserMoodPEP(AbstractPEP):
         retracted = items.getTag('retract') or not 'mood' in mood_dict
         return (mood_dict, retracted)
 
-    def asPixbufIcon(self):
-        assert not self._retracted
-        return gajim.interface.get_pep_icon(self)
-
     def asMarkupText(self):
         assert not self._retracted
         untranslated_mood = self._pep_specific_data['mood']
         mood = self._translate_mood(untranslated_mood)
-        markuptext = '<b>%s</b>' % gobject.markup_escape_text(mood)
+        markuptext = '<b>%s</b>' % GLib.markup_escape_text(mood)
         if 'text' in self._pep_specific_data:
             text = self._pep_specific_data['text']
-            markuptext += ' (%s)' % gobject.markup_escape_text(text)
+            markuptext += ' (%s)' % GLib.markup_escape_text(text)
         return markuptext
 
     def _translate_mood(self, mood):
@@ -339,21 +334,18 @@ class UserTunePEP(AbstractPEP):
             'title' in tune_dict)
         return (tune_dict, retracted)
 
-    def asPixbufIcon(self):
-        return gajim.interface.get_pep_icon(self)
-
     def asMarkupText(self):
         assert not self._retracted
         tune = self._pep_specific_data
 
         artist = tune.get('artist', _('Unknown Artist'))
-        artist = gobject.markup_escape_text(artist)
+        artist = GLib.markup_escape_text(artist)
 
         title = tune.get('title', _('Unknown Title'))
-        title = gobject.markup_escape_text(title)
+        title = GLib.markup_escape_text(title)
 
         source = tune.get('source', _('Unknown Source'))
-        source = gobject.markup_escape_text(source)
+        source = GLib.markup_escape_text(source)
 
         tune_string =  _('<b>"%(title)s"</b> by <i>%(artist)s</i>\n'
                 'from <i>%(source)s</i>') % {'title': title,
@@ -387,10 +379,6 @@ class UserActivityPEP(AbstractPEP):
         retracted = items.getTag('retract') or not 'activity' in activity_dict
         return (activity_dict, retracted)
 
-    def asPixbufIcon(self):
-        assert not self._retracted
-        return gajim.interface.get_pep_icon(self)
-
     def asMarkupText(self):
         assert not self._retracted
         pep = self._pep_specific_data
@@ -404,12 +392,12 @@ class UserActivityPEP(AbstractPEP):
                 subactivity = ACTIVITIES[activity][subactivity]
             activity = ACTIVITIES[activity]['category']
 
-        markuptext = '<b>' + gobject.markup_escape_text(activity)
+        markuptext = '<b>' + GLib.markup_escape_text(activity)
         if subactivity:
-            markuptext += ': ' + gobject.markup_escape_text(subactivity)
+            markuptext += ': ' + GLib.markup_escape_text(subactivity)
         markuptext += '</b>'
         if text:
-            markuptext += ' (%s)' % gobject.markup_escape_text(text)
+            markuptext += ' (%s)' % GLib.markup_escape_text(text)
         return markuptext
 
 
@@ -468,9 +456,6 @@ class UserLocationPEP(AbstractPEP):
         con = gajim.connections[account].location_info = \
                 self._pep_specific_data
 
-    def asPixbufIcon(self):
-        return gajim.interface.get_pep_icon(self)
-
     def asMarkupText(self):
         assert not self._retracted
         location = self._pep_specific_data
@@ -478,7 +463,7 @@ class UserLocationPEP(AbstractPEP):
 
         for entry in location.keys():
             text = location[entry]
-            text = gobject.markup_escape_text(text)
+            text = GLib.markup_escape_text(text)
             # Translate standart location tag
             tag = LOCATION_DATA.get(entry, entry)
             location_string += '\n<b>%(tag)s</b>: %(text)s' % \
@@ -488,4 +473,4 @@ class UserLocationPEP(AbstractPEP):
 
 
 SUPPORTED_PERSONAL_USER_EVENTS = [UserMoodPEP, UserTunePEP, UserActivityPEP,
-    UserNicknamePEP, UserLocationPEP]
\ No newline at end of file
+    UserNicknamePEP, UserLocationPEP]
diff --git a/src/common/protocol/bytestream.py b/src/common/protocol/bytestream.py
index 70ec62754014b627a241001ea306055a95af4808..79e97f1bfd452e86cd360db6a9b57b39a198a0fa 100644
--- a/src/common/protocol/bytestream.py
+++ b/src/common/protocol/bytestream.py
@@ -30,7 +30,7 @@
 
 import socket
 import base64
-import gobject
+from gi.repository import GLib
 import time
 
 import nbxmpp
@@ -153,17 +153,23 @@ class ConnectionBytestream:
             if not content:
                 return
             if not session.accepted:
-                if session.get_content('file', content.name).use_security:
-                    id_ = jingle_xtls.send_cert_request(self,
-                        file_props.sender)
-                    jingle_xtls.key_exchange_pend(id_, content)
-                    return
+                content = session.get_content('file', content.name)
+                if content.use_security:
+                    fingerprint = content.x509_fingerprint
+                    if not jingle_xtls.check_cert(
+                    gajim.get_jid_without_resource(file_props.sender),
+                    fingerprint):
+                        id_ = jingle_xtls.send_cert_request(self,
+                            file_props.sender)
+                        jingle_xtls.key_exchange_pend(id_,
+                            content.on_cert_received, [])
+                        return
                 session.approve_session()
 
             session.approve_content('file', content.name)
             return
 
-        iq = nbxmpp.Iq(to=unicode(file_props.sender), typ='result')
+        iq = nbxmpp.Iq(to=file_props.sender, typ='result')
         iq.setAttr('id', file_props.request_id)
         si = iq.setTag('si', namespace=nbxmpp.NS_SI)
         if file_props.offset:
@@ -195,7 +201,7 @@ class ConnectionBytestream:
             jingle = self._sessions[file_props.sid]
             jingle.cancel_session()
             return
-        iq = nbxmpp.Iq(to=unicode(file_props.sender), typ='error')
+        iq = nbxmpp.Iq(to=file_props.sender, typ='error')
         iq.setAttr('id', file_props.request_id)
         if code == '400' and typ in ('stream', 'profile'):
             name = 'bad-request'
@@ -296,7 +302,7 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
         for file_props in FilesProp.getAllFileProp():
             if is_transfer_stopped(file_props):
                 continue
-            receiver_jid = unicode(file_props.receiver)
+            receiver_jid = file_props.receiver
             if contact.get_full_jid() == receiver_jid:
                 file_props.error = -5
                 self.remove_transfer(file_props)
@@ -305,7 +311,7 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
                 gajim.nec.push_incoming_event(FileRequestErrorEvent(None,
                     conn=self, jid=contact.jid, file_props=file_props,
                     error_msg=''))
-            sender_jid = unicode(file_props.sender)
+            sender_jid = file_props.sender
             if contact.get_full_jid() == sender_jid:
                 file_props.error = -3
                 self.remove_transfer(file_props)
@@ -354,11 +360,11 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
             file_props.error = -5
             from common.connection_handlers_events import FileRequestErrorEvent
             gajim.nec.push_incoming_event(FileRequestErrorEvent(None, conn=self,
-                jid=unicode(receiver), file_props=file_props, error_msg=''))
-            self._connect_error(unicode(receiver), file_props.sid,
+                jid=receiver, file_props=file_props, error_msg=''))
+            self._connect_error(receiver, file_props.sid,
                     file_props.sid, code=406)
         else:
-            iq = nbxmpp.Iq(to=unicode(receiver), typ='set')
+            iq = nbxmpp.Iq(to=receiver, typ='set')
             file_props.request_id = 'id_' + file_props.sid
             iq.setID(file_props.request_id)
             query = iq.setTag('query', namespace=nbxmpp.NS_BYTESTREAM)
@@ -374,7 +380,7 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
         for host in hosts:
             streamhost = nbxmpp.Node(tag='streamhost')
             query.addChild(node=streamhost)
-            streamhost.setAttr('port', unicode(port))
+            streamhost.setAttr('port', str(port))
             streamhost.setAttr('host', host)
             streamhost.setAttr('jid', sender)
 
@@ -442,7 +448,7 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
 
         def cleanup_gupnp():
             if self.no_gupnp_reply_id:
-                gobject.source_remove(self.no_gupnp_reply_id)
+                GLib.source_remove(self.no_gupnp_reply_id)
                 self.no_gupnp_reply_id = 0
             gajim.gupnp_igd.disconnect(self.ok_id)
             gajim.gupnp_igd.disconnect(self.fail_id)
@@ -482,15 +488,15 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
         self.fail_id = gajim.gupnp_igd.connect('error-mapping-port', fail)
 
         port = gajim.config.get('file_transfers_port')
-        self.no_gupnp_reply_id = gobject.timeout_add_seconds(10, no_upnp_reply)
+        self.no_gupnp_reply_id = GLib.timeout_add_seconds(10, no_upnp_reply)
         gajim.gupnp_igd.add_port('TCP', 0, my_ip, port, 3600,
             'Gajim file transfer')
 
     def _add_proxy_streamhosts_to_query(self, query, file_props):
         proxyhosts = self._get_file_transfer_proxies_from_config(file_props)
         if proxyhosts:
-            file_props.proxy_receiver = unicode(file_props.receiver)
-            file_props.proxy_sender = unicode(file_props.sender)
+            file_props.proxy_receiver = file_props.receiver
+            file_props.proxy_sender = file_props.sender
             file_props.proxyhosts = proxyhosts
 
             for proxyhost in proxyhosts:
@@ -518,12 +524,12 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
                     continue
                 host_dict = {
                         'state': 0,
-                        'target': unicode(file_props.receiver),
+                        'target': file_props.receiver,
                         'id': file_props.sid,
                         'sid': file_props.sid,
                         'initiator': proxy,
                         'host': host,
-                        'port': unicode(_port),
+                        'port': str(_port),
                         'jid': jid
                 }
                 proxyhost_dicts.append(host_dict)
@@ -563,7 +569,7 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
         iq = nbxmpp.Iq(to=to,     typ='error')
         iq.setAttr('id', file_props.sid)
         err = iq.setTag('error')
-        err.setAttr('code', unicode(code))
+        err.setAttr('code', str(code))
         err.setData(msg)
         self.connection.send(iq)
         if code == 404:
@@ -593,7 +599,7 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
 
     # register xmpppy handlers for bytestream and FT stanzas
     def _bytestreamErrorCB(self, con, iq_obj):
-        id_ = unicode(iq_obj.getAttr('id'))
+        id_ = iq_obj.getAttr('id')
         frm = helpers.get_full_jid_from_iq(iq_obj)
         query = iq_obj.getTag('query')
         gajim.proxy65_manager.error_cb(frm, query)
@@ -609,10 +615,10 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
         raise nbxmpp.NodeProcessed
 
     def _bytestreamSetCB(self, con, iq_obj):
-        target = unicode(iq_obj.getAttr('to'))
-        id_ = unicode(iq_obj.getAttr('id'))
+        target = iq_obj.getAttr('to')
+        id_ = iq_obj.getAttr('id')
         query = iq_obj.getTag('query')
-        sid = unicode(query.getAttr('sid'))
+        sid = query.getAttr('sid')
         file_props = FilesProp.getFileProp(self.name, sid)
         streamhosts = []
         for item in query.getChildren():
@@ -645,7 +651,7 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
                         self.send_success_connect_reply, None)
                 raise nbxmpp.NodeProcessed
         else:
-            log.warn('Gajim got streamhosts for unknown transfer. Ignoring it.')
+            log.warning('Gajim got streamhosts for unknown transfer. Ignoring it.')
             raise nbxmpp.NodeProcessed
 
         file_props.streamhosts = streamhosts
@@ -657,7 +663,7 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
     def _ResultCB(self, con, iq_obj):
         # if we want to respect xep-0065 we have to check for proxy
         # activation result in any result iq
-        real_id = unicode(iq_obj.getAttr('id'))
+        real_id = iq_obj.getAttr('id')
         if not real_id.startswith('au_'):
             return
         frm = self._ft_get_from(iq_obj)
@@ -671,7 +677,7 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
 
     def _bytestreamResultCB(self, con, iq_obj):
         frm = self._ft_get_from(iq_obj)
-        real_id = unicode(iq_obj.getAttr('id'))
+        real_id = iq_obj.getAttr('id')
         query = iq_obj.getTag('query')
         gajim.proxy65_manager.resolve_result(frm, query)
 
@@ -692,7 +698,7 @@ class ConnectionSocks5Bytestream(ConnectionBytestream):
                     raise nbxmpp.NodeProcessed
                 for host in file_props.proxyhosts:
                     if host['initiator'] == frm and \
-                    unicode(query.getAttr('sid')) == file_props.sid:
+                    query.getAttr('sid') == file_props.sid:
                         gajim.socks5queue.activate_proxy(host['idx'])
                         break
             raise nbxmpp.NodeProcessed
@@ -873,7 +879,8 @@ class ConnectionIBBytestream(ConnectionBytestream):
                 chunk = file_props.fp.read(file_props.block_size)
                 if chunk:
                     datanode = nbxmpp.Node(nbxmpp.NS_IBB + ' data', {'sid': sid,
-                        'seq': file_props.seq}, base64.encodestring(chunk))
+                        'seq': file_props.seq}, base64.b64encode(chunk.encode(
+                        'utf-8')).decode('utf-8'))
                     file_props.seq += 1
                     file_props.started = True
                     if file_props.seq == 65536:
@@ -908,7 +915,7 @@ class ConnectionIBBytestream(ConnectionBytestream):
         log.debug('ReceiveHandler called sid->%s seq->%s' % (sid, seq))
         try:
             seq = int(seq)
-            data = base64.decodestring(data)
+            data = base64.b64decode(data.encode('utf-8')).decode('utf-8')
         except Exception:
             seq = ''
             data = ''
@@ -919,7 +926,7 @@ class ConnectionIBBytestream(ConnectionBytestream):
         else:
             if not data:
                 err = nbxmpp.ERR_BAD_REQUEST
-            elif seq <> file_props.seq:
+            elif seq != file_props.seq:
                 err = nbxmpp.ERR_UNEXPECTED_REQUEST
             else:
                 log.debug('Successfull receive sid->%s %s+%s bytes' % (sid,
@@ -1011,7 +1018,7 @@ class ConnectionIBBytestream(ConnectionBytestream):
 class ConnectionSocks5BytestreamZeroconf(ConnectionSocks5Bytestream):
 
     def _ft_get_from(self, iq_obj):
-        return unicode(iq_obj.getFrom())
+        return iq_obj.getFrom()
 
     def _ft_get_our_jid(self):
         return gajim.get_jid_from_account(self.name)
diff --git a/src/common/proxy65_manager.py b/src/common/proxy65_manager.py
index 4598dd435390971d0348ff84fc66a656b3605526..12523bb86429bec75d4437f7c99f44849a4a77f9 100644
--- a/src/common/proxy65_manager.py
+++ b/src/common/proxy65_manager.py
@@ -29,7 +29,7 @@ log = logging.getLogger('gajim.c.proxy65_manager')
 import nbxmpp
 from common import gajim
 from common import helpers
-from socks5 import Socks5
+from common.socks5 import Socks5
 from nbxmpp.idlequeue import IdleObject
 from common.file_props import FilesProp
 
@@ -117,7 +117,7 @@ class ProxyResolver:
         """
         self.host = str(host)
         self.port = int(port)
-        self.jid = unicode(jid)
+        self.jid = str(jid)
         if not self.testit:
             self.state = S_FINISHED
             return
@@ -311,7 +311,7 @@ class HostTester(Socks5, IdleObject):
             # read auth response
             if buff is None or len(buff) != 2:
                 return None
-            version, method = struct.unpack('!BB', buff[:2])
+            version, method = struct.unpack('!BB', buff[:2].encode('utf-8'))
             if version != 0x05 or method == 0xff:
                 self.pollend()
                 return
@@ -334,8 +334,8 @@ class HostTester(Socks5, IdleObject):
             log.debug('Host Connecting to %s:%s' % (self.host, self.port))
             self._send = self._sock.send
             self._recv = self._sock.recv
-        except Exception, ee:
-            errnum = ee[0]
+        except Exception as ee:
+            errnum = ee.errno
             # 56 is for freebsd
             if errnum in (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK):
                 # still trying to connect
@@ -432,7 +432,7 @@ class ReceiverTester(Socks5, IdleObject):
             # read auth response
             if buff is None or len(buff) != 2:
                 return None
-            version, method = struct.unpack('!BB', buff[:2])
+            version, method = struct.unpack('!BB', buff[:2].encode('utf-8'))
             if version != 0x05 or method == 0xff:
                 self.pollend()
                 return
@@ -444,7 +444,7 @@ class ReceiverTester(Socks5, IdleObject):
             # read connect response
             if buff is None or len(buff) < 2:
                 return None
-            version, reply = struct.unpack('!BB', buff[:2])
+            version, reply = struct.unpack('!BB', buff[:2].encode('utf-8'))
             if version != 0x05 or reply != 0x00:
                 self.pollend()
                 return
@@ -462,8 +462,8 @@ class ReceiverTester(Socks5, IdleObject):
             log.debug('Receiver Connecting to %s:%s' % (self.host, self.port))
             self._send = self._sock.send
             self._recv = self._sock.recv
-        except Exception, ee:
-            errnum = ee[0]
+        except Exception as ee:
+            errnum = ee.errno
             # 56 is for freebsd
             if errnum in (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK):
                 # still trying to connect
diff --git a/src/common/pubsub.py b/src/common/pubsub.py
index a0d9ae8f7beae6ad34405febb97fed50e65528df..601012235206d23258fc6af9b40bed967a323d85 100644
--- a/src/common/pubsub.py
+++ b/src/common/pubsub.py
@@ -22,11 +22,13 @@
 ##
 
 import nbxmpp
-import gajim
-import connection_handlers
-import ged
-from connection_handlers_events import PubsubReceivedEvent
-from connection_handlers_events import PubsubBookmarksReceivedEvent
+from common import gajim
+#TODO: Doesn't work
+#from common.connection_handlers import PEP_CONFIG
+PEP_CONFIG = 'pep_config'
+from common import ged
+from common.connection_handlers_events import PubsubReceivedEvent
+from common.connection_handlers_events import PubsubBookmarksReceivedEvent
 import logging
 log = logging.getLogger('gajim.c.pubsub')
 
@@ -220,5 +222,5 @@ class ConnectionPubSub:
         e = e.addChild('configure', {'node': node})
         id_ = self.connection.getAnID()
         query.setID(id_)
-        self.awaiting_answers[id_] = (connection_handlers.PEP_CONFIG,)
+        self.awaiting_answers[id_] = (PEP_CONFIG,)
         self.connection.send(query)
diff --git a/src/common/resolver.py b/src/common/resolver.py
index 10ed614e86a82620b6611f1f33484fc741f8b456..d790fa5d3cd69a067eb6c0ddaa054b6b0f200af8 100644
--- a/src/common/resolver.py
+++ b/src/common/resolver.py
@@ -70,33 +70,33 @@ class CommonResolver():
             # empty host, return empty list of srv records
             on_ready([])
             return
-        if self.resolved_hosts.has_key(host+type):
+        if host + type in self.resolved_hosts:
             # host is already resolved, return cached values
             log.debug('%s already resolved: %s' % (host,
-                self.resolved_hosts[host+type]))
-            on_ready(host, self.resolved_hosts[host+type])
+                self.resolved_hosts[host + type]))
+            on_ready(host, self.resolved_hosts[host + type])
             return
-        if self.handlers.has_key(host+type):
+        if host + type in self.handlers:
             # host is about to be resolved by another connection,
             # attach our callback
             log.debug('already resolving %s' % host)
-            self.handlers[host+type].append(on_ready)
+            self.handlers[host + type].append(on_ready)
         else:
             # host has never been resolved, start now
             log.debug('Starting to resolve %s using %s' % (host, self))
-            self.handlers[host+type] = [on_ready]
+            self.handlers[host + type] = [on_ready]
             self.start_resolve(host, type)
 
     def _on_ready(self, host, type, result_list):
         # practically it is impossible to be the opposite, but who knows :)
         host = host.lower()
         log.debug('Resolving result for %s: %s' % (host, result_list))
-        if not self.resolved_hosts.has_key(host+type):
-            self.resolved_hosts[host+type] = result_list
-        if self.handlers.has_key(host+type):
-            for callback in self.handlers[host+type]:
+        if host + type not in self.resolved_hosts:
+            self.resolved_hosts[host + type] = result_list
+        if host + type in self.handlers:
+            for callback in self.handlers[host + type]:
                 callback(host, result_list)
-            del(self.handlers[host+type])
+            del(self.handlers[host + type])
 
     def start_resolve(self, host, type):
         pass
@@ -251,8 +251,7 @@ class NSLookupResolver(CommonResolver):
             domain = None
             if line.startswith(fqdn):
                 domain = fqdn # For nslookup 9.5
-            elif helpers.decode_string(line).startswith(ufqdn):
-                line = helpers.decode_string(line)
+            elif line.startswith(ufqdn):
                 domain = ufqdn # For nslookup 9.6
             if domain:
                 rest = line[len(domain):].split('=')
@@ -318,8 +317,8 @@ class NsLookup(IdleCommand):
 
 # below lines is on how to use API and assist in testing
 if __name__ == '__main__':
-    import gobject
-    import gtk
+    from gi.repository import GLib
+    from gi.repository import Gtk
     from nbxmpp import idlequeue
 
     idlequeue = idlequeue.get_idlequeue()
@@ -329,21 +328,21 @@ if __name__ == '__main__':
         global resolver
         host = text_view.get_text()
         def on_result(host, result_array):
-            print 'Result:\n' + repr(result_array)
+            print('Result:\n' + repr(result_array))
         resolver.resolve(host, on_result)
-    win = gtk.Window()
+    win = Gtk.Window()
     win.set_border_width(6)
-    text_view = gtk.Entry()
+    text_view = Gtk.Entry()
     text_view.set_text('_xmpp-client._tcp.jabber.org')
-    hbox = gtk.HBox()
+    hbox = Gtk.HBox()
     hbox.set_spacing(3)
-    but = gtk.Button(' Lookup SRV ')
-    hbox.pack_start(text_view, 5)
-    hbox.pack_start(but, 0)
+    but = Gtk.Button(' Lookup SRV ')
+    hbox.pack_start(text_view, 5, True, 0)
+    hbox.pack_start(but, 0, True, 0)
     but.connect('clicked', clicked)
     win.add(hbox)
     win.show_all()
-    gobject.timeout_add(200, idlequeue.process)
+    GLib.timeout_add(200, idlequeue.process)
     if USE_LIBASYNCNS:
-        gobject.timeout_add(200, resolver.process)
-    gtk.main()
+        GLib.timeout_add(200, resolver.process)
+    Gtk.main()
diff --git a/src/common/rst_xhtml_generator.py b/src/common/rst_xhtml_generator.py
index cac9e669c8f45f3852c2ecbfebce404b2d07894e..9583b39507d02aa0fe578472e67bf7fccf5e2282 100644
--- a/src/common/rst_xhtml_generator.py
+++ b/src/common/rst_xhtml_generator.py
@@ -28,7 +28,7 @@ try:
     from docutils import nodes, utils
     from docutils.parsers.rst.roles import set_classes
 except ImportError:
-    print "Requires docutils 0.4 for set_classes to be available"
+    print("Requires docutils 0.4 for set_classes to be available")
     def create_xhtml(text):
         return None
 else:
@@ -65,7 +65,7 @@ else:
                 options={}, content=[]):
             try:
                 valid_text = validator(text)
-            except ValueError, e:
+            except ValueError as e:
                 msg = inliner.reporter.error( e.message % dict(text=text), line=lineno)
                 prb = inliner.problematic(rawtext, rawtext, msg)
                 return [prb], [msg]
@@ -120,7 +120,7 @@ else:
             # in the JEP
             # &nbsp; ==  u"\u00a0"
             self.pub.writer.translator_class.attribution_formats['dash'] = (
-                    u'\u2014', '')
+                    '\u2014', '')
             self.pub.process_programmatic_settings(settings_spec,
                     settings_overrides,
                     config_section)
@@ -137,7 +137,7 @@ else:
             output = self.pub.publish(enable_exit_status=enable_exit_status)
             # kludge until we can get docutils to stop generating (rare) &nbsp;
             # entities
-            return u'\u00a0'.join(self.pub.writer.parts['fragment'].strip().split(
+            return '\u00a0'.join(self.pub.writer.parts['fragment'].strip().split(
                     '&nbsp;'))
 
     Generator = HTMLGenerator()
@@ -147,7 +147,7 @@ else:
 
 
 if __name__ == '__main__':
-    print "test 1\n", Generator.create_xhtml("""
+    print("test 1\n" + Generator.create_xhtml("""
 test::
 
 >>> print 1
@@ -157,10 +157,10 @@ test::
 
 this `` should    trigger`` should trigger the &nbsp; problem.
 
-""")
-    print "test 2\n", Generator.create_xhtml("""
+"""))
+    print("test 2\n" + Generator.create_xhtml("""
 *test1
 
 test2_
-""")
-    print "test 3\n", Generator.create_xhtml(""":ticket:`316` implements :xep:`71`""")
+"""))
+    print("test 3\n" + Generator.create_xhtml(""":ticket:`316` implements :xep:`71`"""))
diff --git a/src/common/sleepy.py b/src/common/sleepy.py
index 5c0f39d330d4c36a58b3ed56c3e97a2500977710..820bf9858514c04ec01f8880713f74adbe12c326 100644
--- a/src/common/sleepy.py
+++ b/src/common/sleepy.py
@@ -22,7 +22,8 @@
 ##
 
 from common import gajim
-import os, sys
+import os
+import sys
 
 
 STATE_UNKNOWN  = 'OS probably not supported'
diff --git a/src/common/socks5.py b/src/common/socks5.py
index 8d252b044ade4c31648ebb8dc0d3740475176f08..86a551823565dfac8b73c8a74a5c66462192456a 100644
--- a/src/common/socks5.py
+++ b/src/common/socks5.py
@@ -33,9 +33,9 @@ from errno import EISCONN
 from errno import EINPROGRESS
 from errno import EAFNOSUPPORT
 from nbxmpp.idlequeue import IdleObject
-from file_props import FilesProp
+from common.file_props import FilesProp
 from common import gajim
-import jingle_xtls
+from common import jingle_xtls
 if jingle_xtls.PYOPENSSL_PRESENT:
     import OpenSSL
 import logging
@@ -119,8 +119,7 @@ class SocksQueue:
         streamhosts_to_test = []
         # Remove local IPs to not connect to ourself
         for streamhost in file_props.streamhosts:
-            if streamhost['host'] == '127.0.0.1' or \
-                    streamhost['host'] == '::1':
+            if streamhost['host'] == '127.0.0.1' or streamhost['host'] == '::1':
                 continue
             streamhosts_to_test.append(streamhost)
         if not streamhosts_to_test:
@@ -327,7 +326,7 @@ class SocksQueue:
         if listener.file_props.type_ == 's' and \
         not self.isHashInSockObjs(self.senders, sock_hash):
             sockobj =  Socks5SenderServer(self.idlequeue, sock_hash, self,
-                sock[0],  sock[1][0], sock[1][1], fingerprint='server',
+                sock[0], sock[1][0], sock[1][1], fingerprint='server',
                 file_props=listener.file_props)
             self._add(sockobj, self.senders, listener.file_props, sock_hash)
             # Start waiting for data
@@ -379,6 +378,7 @@ class SocksQueue:
                     self.idlequeue.remove_timeout(reader.fd)
                     if do_disconnect:
                         reader.disconnect()
+                        del self.readers[key]
                         if not remove_all:
                             break
                     else:
@@ -415,7 +415,7 @@ class SocksQueue:
                 self.connected -= 1
 
 
-class Socks5:
+class Socks5(object):
     def __init__(self, idlequeue, host, port, initiator, target, sid):
         if host is not None:
             try:
@@ -439,12 +439,20 @@ class Socks5:
         self.file = None
         self.connected = False
         self.mode = ''
+        self.ssl_cert = None
+        self.ssl_errnum = 0
 
     def _is_connected(self):
         if self.state < 5:
             return False
         return True
 
+    def ssl_verify_cb(self, ssl_conn, cert, error_num, depth, return_code):
+        if depth == 0:
+            self.ssl_cert = cert
+            self.ssl_errnum = error_num
+        return True
+
     def connect(self):
         """
         Create the socket and plug it to the idlequeue
@@ -455,14 +463,22 @@ class Socks5:
             try:
                 self._sock = socket.socket(*ai[:3])
                 if not self.fingerprint is None:
+                    if self.file_props.type_ == 's':
+                        remote_jid = gajim.get_jid_without_resource(
+                            self.file_props.receiver)
+                    else:
+                        remote_jid = gajim.get_jid_without_resource(
+                            self.file_props.sender)
                     self._sock = OpenSSL.SSL.Connection(
-                        jingle_xtls.get_context('client'), self._sock)
+                        jingle_xtls.get_context('client',
+                        verify_cb=self.ssl_verify_cb, remote_jid=remote_jid),
+                        self._sock)
                 # this will not block the GUI
                 self._sock.setblocking(False)
                 self._server = ai[4]
                 break
-            except socket.error, e:
-                if not isinstance(e, basestring) and e[0] == EINPROGRESS:
+            except socket.error as e:
+                if e.errno == EINPROGRESS:
                     break
                 # for all other errors, we try other addresses
                 continue
@@ -476,11 +492,12 @@ class Socks5:
     def do_connect(self):
         try:
             self._sock.connect(self._server)
-            self._sock.setblocking(False)
             self._send=self._sock.send
             self._recv=self._sock.recv
-        except Exception, ee:
-            errnum = ee[0]
+        except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError) as e:
+            pass
+        except Exception as ee:
+            errnum = ee.errno
             self.connect_timeout += 1
             if errnum == 111 or self.connect_timeout > 1000:
                 self.queue._connection_refused(self.streamhost, self.file_props,
@@ -531,9 +548,9 @@ class Socks5:
                     self.size = self.file_props.offset
                     self.file.seek(self.size)
                     self.file_props.received_len = self.size
-            except IOError, e:
+            except IOError as e:
                 self.close_file()
-                raise IOError, e
+                raise IOError(str(e))
 
     def close_file(self):
         # Close file we're sending from
@@ -586,9 +603,9 @@ class Socks5:
         """
         received = ''
         try:
-            add = self._recv(64)
+            add = self._recv(64).decode('utf-8')
         except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError,
-        OpenSSL.SSL.WantX509LookupError), e:
+        OpenSSL.SSL.WantX509LookupError) as e:
             log.info('SSL rehandshake request : ' + repr(e))
             raise e
         except Exception:
@@ -605,10 +622,10 @@ class Socks5:
         try:
             self._send(raw_data)
         except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError,
-        OpenSSL.SSL.WantX509LookupError), e:
+        OpenSSL.SSL.WantX509LookupError) as e:
             log.info('SSL rehandshake request :' + repr(e))
             raise e
-        except Exception, e:
+        except Exception:
             self.disconnect()
         return len(raw_data)
 
@@ -619,7 +636,7 @@ class Socks5:
         else:
             try:
                 self.open_file_for_reading()
-            except IOError, e:
+            except IOError:
                 self.state = 8 # end connection
                 self.disconnect()
                 self.file_props.error = -7 # unable to read from file
@@ -630,11 +647,11 @@ class Socks5:
             try:
                 lenn = self._send(buff)
             except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError,
-            OpenSSL.SSL.WantX509LookupError), e:
+            OpenSSL.SSL.WantX509LookupError) as e:
                 log.info('SSL rehandshake request :' + repr(e))
                 raise e
-            except Exception, e:
-                if e.args[0] not in (EINTR, ENOBUFS, EWOULDBLOCK):
+            except Exception as e:
+                if e.errno not in (EINTR, ENOBUFS, EWOULDBLOCK):
                     # peer stopped reading
                     self.state = 8 # end connection
                     self.disconnect()
@@ -646,7 +663,7 @@ class Socks5:
                 self.file_props.last_time
             self.file_props.last_time = current_time
             self.file_props.received_len = self.size
-            if self.size >= int(self.file_props.size):
+            if self.size >= self.file_props.size:
                 self.state = 8 # end connection
                 self.file_props.error = 0
                 self.disconnect()
@@ -676,7 +693,7 @@ class Socks5:
         if self.remaining_buff != '':
             try:
                 fd = self.get_fd()
-            except IOError, e:
+            except IOError:
                 self.disconnect(False)
                 self.file_props.error = -6 # file system error
                 return 0
@@ -688,7 +705,7 @@ class Socks5:
             self.file_props.last_time = current_time
             self.file_props.received_len += lenn
             self.remaining_buff = ''
-            if self.file_props.received_len == int(self.file_props.size):
+            if self.file_props.received_len == self.file_props.size:
                 self.rem_fd(fd)
                 self.disconnect()
                 self.file_props.error = 0
@@ -697,14 +714,14 @@ class Socks5:
         else:
             try:
                 fd = self.get_fd()
-            except IOError, e:
+            except IOError:
                 self.disconnect(False)
                 self.file_props.error = -6 # file system error
                 return 0
             try:
-                buff = self._recv(MAX_BUFF_LEN)
+                buff = self._recv(MAX_BUFF_LEN).decode('utf-8')
             except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError,
-            OpenSSL.SSL.WantX509LookupError), e:
+            OpenSSL.SSL.WantX509LookupError) as e:
                 log.info('SSL rehandshake request :' + repr(e))
                 raise e
             except Exception:
@@ -723,12 +740,12 @@ class Socks5:
                 return 0
             try:
                 fd.write(buff)
-            except IOError, e:
+            except IOError:
                 self.rem_fd(fd)
                 self.disconnect()
                 self.file_props.error = -6 # file system error
                 return 0
-            if self.file_props.received_len >= int(self.file_props.size):
+            if self.file_props.received_len >= self.file_props.size:
                 # transfer completed
                 self.rem_fd(fd)
                 self.disconnect()
@@ -785,9 +802,9 @@ class Socks5:
         """
         auth_mechanisms = []
         try:
-            num_auth = struct.unpack('!xB', buff[:2])[0]
-            for i in xrange(num_auth):
-                mechanism, = struct.unpack('!B', buff[1 + i])
+            num_auth = struct.unpack('!xB', buff[:2].encode('utf-8'))[0]
+            for i in list(range(num_auth)):
+                mechanism, = struct.unpack('!B', buff[1 + i].encode('utf-8'))
                 auth_mechanisms.append(mechanism)
         except Exception:
             return None
@@ -804,8 +821,8 @@ class Socks5:
         Connect request by domain name
         """
         buff = struct.pack('!BBBBB%dsBB' % len(self.host),
-            0x05, 0x01, 0x00, 0x03, len(self.host), self.host, self.port >> 8,
-            self.port & 0xff)
+            0x05, 0x01, 0x00, 0x03, len(self.host), self.host.encode('utf-8'),
+            self.port >> 8, self.port & 0xff)
         return buff
 
     def _get_request_buff(self, msg, command = 0x01):
@@ -813,28 +830,33 @@ class Socks5:
         Connect request by domain name, sid sha, instead of domain name (jep
         0096)
         """
-        buff = struct.pack('!BBBBB%dsBB' % len(msg),
-                0x05, command, 0x00, 0x03, len(msg), msg, 0, 0)
+        if isinstance(msg, str):
+            msg = msg.encode('utf-8')
+        buff = struct.pack('!BBBBB%dsBB' % len(msg), 0x05, command, 0x00, 0x03,
+            len(msg), msg, 0, 0)
         return buff
 
     def _parse_request_buff(self, buff):
         try: # don't trust on what comes from the outside
-            req_type, host_type, = struct.unpack('!xBxB', buff[:4])
+            req_type, host_type, = struct.unpack('!xBxB', buff[:4].encode(
+                'utf-8'))
             if host_type == 0x01:
-                host_arr = struct.unpack('!iiii', buff[4:8])
+                host_arr = struct.unpack('!iiii', buff[4:8].encode('utf-8'))
                 host, = '.'.join(str(s) for s in host_arr)
                 host_len = len(host)
             elif host_type == 0x03:
-                host_len,  = struct.unpack('!B', buff[4])
-                host, = struct.unpack('!%ds' % host_len, buff[5:5 + host_len])
+                host_len,  = struct.unpack('!B', buff[4].encode('utf-8'))
+                host, = struct.unpack('!%ds' % host_len, buff[5:5 + host_len].\
+                    encode('utf-8'))
             portlen = len(buff[host_len + 5:])
             if portlen == 1:
-                port, = struct.unpack('!B', buff[host_len + 5])
+                port, = struct.unpack('!B', buff[host_len + 5].encode('utf-8'))
             elif portlen == 2:
-                port, = struct.unpack('!H', buff[host_len + 5:])
+                port, = struct.unpack('!H', buff[host_len + 5:].encode('utf-8'))
             # file data, comes with auth message (Gaim bug)
             else:
-                port, = struct.unpack('!H', buff[host_len + 5: host_len + 7])
+                port, = struct.unpack('!H', buff[host_len + 5: host_len + 7].\
+                    encode('utf-8'))
                 self.remaining_buff = buff[host_len + 7:]
         except Exception:
             return (None, None, None)
@@ -845,13 +867,13 @@ class Socks5:
         Connect response: version, auth method
         """
         try:
-            buff = self._recv()
+            buff = self._recv().decode('utf-8')
         except (SSL.WantReadError, SSL.WantWriteError,
-                SSL.WantX509LookupError), e:
+        SSL.WantX509LookupError) as e:
             log.info("SSL rehandshake request : " + repr(e))
             raise e
         try:
-            version, method = struct.unpack('!BB', buff)
+            version, method = struct.unpack('!BB', buff.encode('utf-8'))
         except Exception:
             version, method = None, None
         if version != 0x05 or method == 0xff:
@@ -870,18 +892,17 @@ class Socks5:
         Get sha of sid + Initiator jid + Target jid
         """
         if self.file_props.is_a_proxy:
-            return hashlib.sha1('%s%s%s' % (self.sid,
-                self.file_props.proxy_sender, self.file_props.proxy_receiver)
-                ).hexdigest()
-        return hashlib.sha1('%s%s%s' % (self.sid, self.initiator,
-            self.target)).hexdigest()
+            return hashlib.sha1(('%s%s%s' % (self.sid,
+                self.file_props.proxy_sender, self.file_props.proxy_receiver)).\
+                encode('utf-8')).hexdigest()
+        return hashlib.sha1(('%s%s%s' % (self.sid, self.initiator,
+            self.target)).encode('utf-8')).hexdigest()
 
 
 class Socks5Sender(IdleObject):
     """
     Class for sending file to socket over socks5
     """
-
     def __init__(self, idlequeue, sock_hash, parent, _sock, host=None,
     port=None, fingerprint = None, connected=True, file_props={}):
         self.fingerprint = fingerprint
@@ -962,7 +983,6 @@ class Socks5Sender(IdleObject):
 
 
 class Socks5Receiver(IdleObject):
-
     def __init__(self, idlequeue, streamhost, sid, file_props = None,
     fingerprint=None):
         """
@@ -1094,7 +1114,7 @@ class Socks5Server(Socks5):
                     result = self.start_transfer() # send
                     self.queue.process_result(result, self)
             except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError,
-            OpenSSL.SSL.WantX509LookupError), e:
+            OpenSSL.SSL.WantX509LookupError) as e:
                 log.info('caught SSL exception, ignored')
         else:
             self.disconnect()
@@ -1132,7 +1152,7 @@ class Socks5Server(Socks5):
             else:
                 self.disconnect()
         except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError,
-        OpenSSL.SSL.WantX509LookupError), e:
+        OpenSSL.SSL.WantX509LookupError) as e:
             log.info('caught SSL exception, ignored')
             return
         if self.state < 5:
@@ -1160,7 +1180,7 @@ class Socks5Client(Socks5):
         if self.state == 2: # read auth response
             if buff is None or len(buff) != 2:
                 return None
-            version, method = struct.unpack('!BB', buff[:2])
+            version, method = struct.unpack('!BB', buff[:2].encode('utf-8'))
             if version != 0x05 or method == 0xff:
                 self.disconnect()
         elif self.state == 4: # get approve of our request
@@ -1169,18 +1189,23 @@ class Socks5Client(Socks5):
             sub_buff = buff[:4]
             if len(sub_buff) < 4:
                 return None
-            version, address_type = struct.unpack('!BxxB', buff[:4])
+            version, address_type = struct.unpack('!BxxB', buff[:4].encode(
+                'utf-8'))
             addrlen = 0
             if address_type == 0x03:
                 addrlen = ord(buff[4])
-                address = struct.unpack('!%ds' % addrlen, buff[5:addrlen + 5])
+                address = struct.unpack('!%ds' % addrlen, buff[5:addrlen + 5].\
+                    encode('utf-8'))
                 portlen = len(buff[addrlen + 5:])
                 if portlen == 1:
-                    port, = struct.unpack('!B', buff[addrlen + 5])
+                    port, = struct.unpack('!B', buff[addrlen + 5].encode(
+                        'utf-8'))
                 elif portlen == 2:
-                    port, = struct.unpack('!H', buff[addrlen + 5:])
+                    port, = struct.unpack('!H', buff[addrlen + 5:].encode(
+                        'utf-8'))
                 else: # Gaim bug :)
-                    port, = struct.unpack('!H', buff[addrlen + 5:addrlen + 7])
+                    port, = struct.unpack('!H', buff[addrlen + 5:addrlen + 7].\
+                        encode('utf-8'))
                     self.remaining_buff = buff[addrlen + 7:]
             self.state = 5 # for senders: init file_props and send '\n'
             if self.queue.on_success:
@@ -1220,6 +1245,14 @@ class Socks5Client(Socks5):
             self.state += 1
             return None
 
+    def send_file(self):
+        if self.ssl_errnum > 0:
+            log.error('remote certificate does not match the announced one.' + \
+                '\nSSL Error: %d\nCancelling file transfer' % self.ssl_errnum)
+            self.file_props.error = -12
+            return -1
+        return super(Socks5Client, self).send_file()
+
     def pollin(self):
         self.idlequeue.remove_timeout(self.fd)
         if self.connected:
@@ -1238,7 +1271,7 @@ class Socks5Client(Socks5):
                     result = self.start_transfer() # receive
                     self.queue.process_result(result, self)
             except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError,
-            OpenSSL.SSL.WantX509LookupError), e:
+            OpenSSL.SSL.WantX509LookupError) as e:
                 log.info('caught SSL exception, ignored')
                 return
         else:
@@ -1262,7 +1295,7 @@ class Socks5Client(Socks5):
                 self.queue.process_result(result, self)
                 return
         except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError,
-        OpenSSL.SSL.WantX509LookupError), e:
+        OpenSSL.SSL.WantX509LookupError) as e:
             log.info('caught SSL exception, ignored')
             return
         self.state += 1
@@ -1301,9 +1334,8 @@ class Socks5SenderServer(Socks5Server, Socks5Sender):
 
 
 class Socks5ReceiverClient(Socks5Client, Socks5Receiver):
-
     def __init__(self, idlequeue, streamhost, sid, file_props = None,
-            fingerprint=None):
+    fingerprint=None):
         Socks5Client.__init__(self, idlequeue, streamhost['host'],
             int(streamhost['port']), streamhost['initiator'],
             streamhost['target'], sid)
@@ -1355,8 +1387,8 @@ class Socks5Listener(IdleObject):
                 if self.fingerprint is not None:
                     self._serv = OpenSSL.SSL.Connection(
                         jingle_xtls.get_context('server'), self._serv)
-            except socket.error, e:
-                if e.args[0] == EAFNOSUPPORT:
+            except socket.error as e:
+                if e.errno == EAFNOSUPPORT:
                     self.ai = None
                     continue
                 raise
@@ -1425,4 +1457,3 @@ class Socks5Listener(IdleObject):
         self.connections.append(_sock[0])
         return _sock
 
-
diff --git a/src/common/stanza_session.py b/src/common/stanza_session.py
index f8ccb503a5d3654e22b92c380f4d76eaa778793b..becc4825b63b374f1d98f39617a2327db4395b96 100644
--- a/src/common/stanza_session.py
+++ b/src/common/stanza_session.py
@@ -810,7 +810,10 @@ class EncryptedStanzaSession(ArchivingStanzaSession):
 
         # the offset of the group we chose (need it to match up with the dhhash)
         group_order = 0
-        self.modp = int(form.getField('modp').getOptions()[group_order][1])
+        modp_f = form.getField('modp')
+        if not modp_f:
+            return
+        self.modp = int(modp_f.getOptions()[group_order][1])
         x.addChild(node=nbxmpp.DataField(name='modp', value=self.modp))
 
         g = dh.generators[self.modp]
@@ -818,7 +821,10 @@ class EncryptedStanzaSession(ArchivingStanzaSession):
 
         self.n_o = base64.b64decode(form['my_nonce'])
 
-        dhhashes = form.getField('dhhashes').getValues()
+        dhhashes_f = form.getField('dhhashes')
+        if not dhhashes_f:
+            return
+        dhhashes = dhhashes_f.getValues()
         self.negotiated['He'] = base64.b64decode(dhhashes[group_order].encode(
                 'utf8'))
 
diff --git a/src/common/zeroconf/client_zeroconf.py b/src/common/zeroconf/client_zeroconf.py
index 52a7ca1f0c76f4a6d0be7b0b61072da66d67ec42..07f82092a5d3e97b31c6e77dc6d7f3b600c95dad 100644
--- a/src/common/zeroconf/client_zeroconf.py
+++ b/src/common/zeroconf/client_zeroconf.py
@@ -173,7 +173,7 @@ class P2PClient(IdleObject):
                 id_ = stanza.getID()
                 if not id_:
                     id_ = self.Dispatcher.getAnID()
-                if self.conn_holder.ids_of_awaiting_messages.has_key(self.fd):
+                if self.fd in self.conn_holder.ids_of_awaiting_messages:
                     self.conn_holder.ids_of_awaiting_messages[self.fd].append((
                         id_, thread_id))
                 else:
@@ -195,7 +195,7 @@ class P2PClient(IdleObject):
             id_ = stanza.getID()
             if not id_:
                 id_ = self.Dispatcher.getAnID()
-            if self.conn_holder.ids_of_awaiting_messages.has_key(self.fd):
+            if self.fd in self.conn_holder.ids_of_awaiting_messages:
                 self.conn_holder.ids_of_awaiting_messages[self.fd].append((id_,
                     thread_id))
             else:
@@ -253,10 +253,10 @@ class P2PClient(IdleObject):
                     'Incorrect answer from server.')
             return
         if self.sock_type == TYPE_SERVER:
-            if attrs.has_key('from'):
+            if 'from' in attrs:
                 self.to = attrs['from']
             self.send_stream_header()
-            if attrs.has_key('version') and attrs['version'] == '1.0':
+            if 'version' in attrs and attrs['version'] == '1.0':
                 # other part supports stream features
                 features = Node('stream:features')
                 self.Dispatcher.send(features)
@@ -270,12 +270,12 @@ class P2PClient(IdleObject):
 
     def on_disconnect(self):
         if self.conn_holder:
-            if self.conn_holder.ids_of_awaiting_messages.has_key(self.fd):
+            if self.fd in self.conn_holder.ids_of_awaiting_messages:
                 del self.conn_holder.ids_of_awaiting_messages[self.fd]
             self.conn_holder.remove_connection(self.sock_hash)
-        if self.__dict__.has_key('Dispatcher'):
+        if 'Dispatcher' in self.__dict__:
             self.Dispatcher.PlugOut()
-        if self.__dict__.has_key('P2PConnection'):
+        if 'P2PConnection' in self.__dict__:
             self.P2PConnection.PlugOut()
         self.Connection = None
         self._caller = None
@@ -294,7 +294,7 @@ class P2PClient(IdleObject):
                 self.Dispatcher.Stream._document_attrs is None:
             return
         self.onreceive(None)
-        if self.Dispatcher.Stream._document_attrs.has_key('version') and \
+        if 'version' in self.Dispatcher.Stream._document_attrs and \
         self.Dispatcher.Stream._document_attrs['version'] == '1.0':
                 #~ self.onreceive(self._on_receive_stream_features)
                 #XXX continue with TLS
@@ -356,9 +356,9 @@ class P2PConnection(IdleObject, PlugIn):
             try:
                 self.ais = socket.getaddrinfo(host, port, socket.AF_UNSPEC,
                         socket.SOCK_STREAM)
-            except socket.gaierror, e:
-                log.info('Lookup failure for %s: %s[%s]', host, e[1],
-                    repr(e[0]), exc_info=True)
+            except socket.gaierror as e:
+                log.info('Lookup failure for %s: %s', host, str(e),
+                    exc_info=True)
             else:
                 self.connect_to_next_ip()
 
@@ -418,19 +418,12 @@ class P2PConnection(IdleObject, PlugIn):
         """
         Append stanza to the queue of messages to be send if now is False, else
         send it instantly
-
-        If supplied data is unicode string, encode it to UTF-8.
         """
         if self.state <= 0:
             return
 
         r = packet
 
-        if isinstance(r, unicode):
-            r = r.encode('utf-8')
-        elif not isinstance(r, str):
-            r = ustr(r).encode('utf-8')
-
         if now:
             self.sendqueue.insert(0, (r, is_message))
             self._do_send()
@@ -455,8 +448,9 @@ class P2PConnection(IdleObject, PlugIn):
         try:
             self._sock.connect(self._server)
             self._sock.setblocking(False)
-        except Exception, ee:
-            (errnum, errstr) = ee
+        except Exception as ee:
+            errnum = ee.errno
+            errstr = ee.strerror
         errors = (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK)
         if 'WSAEINVAL' in errno.__dict__:
             errors += (errno.WSAEINVAL,)
@@ -495,9 +489,8 @@ class P2PConnection(IdleObject, PlugIn):
         try:
             # get as many bites, as possible, but not more than RECV_BUFSIZE
             received = self._sock.recv(MAX_BUFF_LEN)
-        except Exception, e:
-            if len(e.args) > 0 and isinstance(e.args[0], int):
-                errnum = e[0]
+        except Exception as e:
+            errnum = e.errno
             # "received" will be empty anyhow
         if errnum == socket.SSL_ERROR_WANT_READ:
             pass
@@ -566,8 +559,8 @@ class P2PConnection(IdleObject, PlugIn):
                     self._plug_idle()
                 self._on_send()
 
-        except socket.error, e:
-            if e[0] == socket.SSL_ERROR_WANT_WRITE:
+        except socket.error as e:
+            if e.errno == socket.SSL_ERROR_WANT_WRITE:
                 return True
             if self.state < 0:
                 self.disconnect()
@@ -717,7 +710,7 @@ class ClientZeroconf:
             if self.ip_to_hash[i] == sock_hash:
                 del self.ip_to_hash[i]
                 break
-        if self.hash_to_port.has_key(sock_hash):
+        if sock_hash in self.hash_to_port:
             del self.hash_to_port[sock_hash]
 
     def start_listener(self, port):
@@ -737,7 +730,7 @@ class ClientZeroconf:
     def send(self, stanza, is_message=False, now=False, on_ok=None,
     on_not_ok=None):
         stanza.setFrom(self.roster.zeroconf.name)
-        to = unicode(stanza.getTo())
+        to = stanza.getTo()
         to = gajim.get_jid_without_resource(to)
 
         try:
@@ -802,7 +795,7 @@ class ClientZeroconf:
         def on_ok(_waitid):
 #            if timeout:
 #                self._owner.set_timeout(timeout)
-            to = unicode(stanza.getTo())
+            to = stanza.getTo()
             to = gajim.get_jid_without_resource(to)
 
             try:
diff --git a/src/common/zeroconf/connection_zeroconf.py b/src/common/zeroconf/connection_zeroconf.py
index 8a7a89c6bd694632ea21fd415957f490ff77bbf8..07ff5db3f77010b93d435ee4ec9880ba04f93c4d 100644
--- a/src/common/zeroconf/connection_zeroconf.py
+++ b/src/common/zeroconf/connection_zeroconf.py
@@ -39,14 +39,14 @@ import signal
 if os.name != 'nt':
     signal.signal(signal.SIGPIPE, signal.SIG_DFL)
 import getpass
-import gobject
+from gi.repository import GLib
 
 from common.connection import CommonConnection
 from common import gajim
 from common import ged
 from common.zeroconf import client_zeroconf
 from common.zeroconf import zeroconf
-from connection_handlers_zeroconf import *
+from common.zeroconf.connection_handlers_zeroconf import *
 from common.connection_handlers_events import *
 
 import locale
@@ -91,7 +91,7 @@ class ConnectionZeroconf(CommonConnection, ConnectionHandlersZeroconf):
                     'is_zeroconf', True)
             gajim.config.set_per('accounts', gajim.ZEROCONF_ACC_NAME,
                     'use_ft_proxies', False)
-        self.host = unicode(socket.gethostname(), locale.getpreferredencoding())
+        self.host = socket.gethostname()
         gajim.config.set_per('accounts', gajim.ZEROCONF_ACC_NAME, 'hostname',
                 self.host)
         self.port = gajim.config.get_per('accounts', gajim.ZEROCONF_ACC_NAME,
@@ -110,8 +110,7 @@ class ConnectionZeroconf(CommonConnection, ConnectionHandlersZeroconf):
                 'zeroconf_email')
 
         if not self.username:
-            self.username = unicode(getpass.getuser(),
-                locale.getpreferredencoding())
+            self.username = getpass.getuser()
             gajim.config.set_per('accounts', gajim.ZEROCONF_ACC_NAME, 'name',
                 self.username)
         else:
@@ -240,7 +239,7 @@ class ConnectionZeroconf(CommonConnection, ConnectionHandlersZeroconf):
 
         # refresh all contacts data every five seconds
         self.call_resolve_timeout = True
-        gobject.timeout_add_seconds(5, self._on_resolve_timeout)
+        GLib.timeout_add_seconds(5, self._on_resolve_timeout)
         return True
 
     def disconnect(self, on_purpose=False):
@@ -387,7 +386,7 @@ class ConnectionZeroconf(CommonConnection, ConnectionHandlersZeroconf):
         if realm == '':
             if event == nbxmpp.transports_nb.DATA_ERROR:
                 thread_id = data[1]
-                frm = unicode(data[0])
+                frm = data[0]
                 session = self.get_or_create_session(frm, thread_id)
                 gajim.nec.push_incoming_event(MessageErrorEvent(
                     None, conn=self, fjid=frm, error_code=-1, error_msg=_(
diff --git a/src/common/zeroconf/roster_zeroconf.py b/src/common/zeroconf/roster_zeroconf.py
index 307fd392efd146d07bfc859616df805f037ec3f6..472ded7b6e21d503213c6136070400dee5306174 100644
--- a/src/common/zeroconf/roster_zeroconf.py
+++ b/src/common/zeroconf/roster_zeroconf.py
@@ -32,7 +32,6 @@ class Roster:
             self.setItem(val[zeroconf.C_NAME])
 
     def getRoster(self):
-        #print 'roster_zeroconf.py: getRoster'
         if self._data is None:
             self._data = {}
             self.update_roster()
@@ -50,11 +49,9 @@ class Roster:
             if key in self._data:
                 if old_data[key] != self._data[key]:
                     diffs[key] = self._data[key]['status']
-        #print 'roster_zeroconf.py: diffs:' + str(diffs)
         return diffs
 
     def setItem(self, jid, name='', groups=''):
-        #print 'roster_zeroconf.py: setItem %s' % jid
         contact = self.zeroconf.get_contact(jid)
         if not contact:
             return
@@ -96,34 +93,27 @@ class Roster:
             self.setItem(jid=i['jid'], name=i['name'], groups=i['groups'])
 
     def delItem(self, jid):
-        #print 'roster_zeroconf.py: delItem %s' % jid
         if jid in self._data:
             del self._data[jid]
 
     def getItem(self, jid):
-        #print 'roster_zeroconf.py: getItem: %s' % jid
         if jid in self._data:
             return self._data[jid]
 
     def __getitem__(self, jid):
-        #print 'roster_zeroconf.py: __getitem__'
         return self._data[jid]
 
     def getItems(self):
-        #print 'roster_zeroconf.py: getItems'
         # Return list of all [bare] JIDs that the roster currently tracks.
         return self._data.keys()
 
     def keys(self):
-        #print 'roster_zeroconf.py: keys'
         return self._data.keys()
 
     def getRaw(self):
-        #print 'roster_zeroconf.py: getRaw'
         return self._data
 
     def getResources(self, jid):
-        #print 'roster_zeroconf.py: getResources(%s)' % jid
         return {}
 
     def getGroups(self, jid):
@@ -142,14 +132,12 @@ class Roster:
             return self._data[jid]['txt_dict']['msg']
 
     def getShow(self, jid):
-        #print 'roster_zeroconf.py: getShow'
         return self.getStatus(jid)
 
     def getPriority(self, jid):
         return 5
 
     def getSubscription(self, jid):
-        #print 'roster_zeroconf.py: getSubscription'
         return 'both'
 
     def Subscribe(self, jid):
diff --git a/src/common/zeroconf/zeroconf_avahi.py b/src/common/zeroconf/zeroconf_avahi.py
index 5ce4f8398dc734a18dd326107f64a08b36719b1b..e2a7c1fd4ffb1040d2990368b3c09bffab0940f4 100644
--- a/src/common/zeroconf/zeroconf_avahi.py
+++ b/src/common/zeroconf/zeroconf_avahi.py
@@ -22,7 +22,7 @@ log = logging.getLogger('gajim.c.z.zeroconf_avahi')
 
 try:
     import dbus.exceptions
-except ImportError, e:
+except ImportError:
     pass
 
 from common.zeroconf.zeroconf import C_BARE_NAME, C_INTERFACE, C_PROTOCOL, C_DOMAIN
@@ -224,14 +224,7 @@ class Zeroconf:
         return show
 
     def avahi_txt(self):
-        utf8_dict = {}
-        for key in self.txt:
-            val = self.txt[key]
-            if isinstance(val, unicode):
-                utf8_dict[key] = val.encode('utf-8')
-            else:
-                utf8_dict[key] = val
-        return self.avahi.dict_to_txt_array(utf8_dict)
+        return self.avahi.dict_to_txt_array(self.txt)
 
     def create_service(self):
         try:
@@ -246,7 +239,7 @@ class Zeroconf:
             txt = {}
 
             # remove empty keys
-            for key, val in self.txt.iteritems():
+            for key, val in self.txt.items():
                 if val:
                     txt[key] = val
 
@@ -274,7 +267,7 @@ class Zeroconf:
 
             return True
 
-        except dbus.DBusException, e:
+        except dbus.DBusException as e:
             log.debug(str(e))
             return False
 
@@ -334,7 +327,7 @@ class Zeroconf:
             self.bus.add_signal_receiver(self.avahi_dbus_connect_cb,
                     'NameOwnerChanged', 'org.freedesktop.DBus',
                     arg0='org.freedesktop.Avahi')
-        except Exception, e:
+        except Exception as e:
             # System bus is not present
             self.bus = None
             log.debug(str(e))
@@ -361,7 +354,7 @@ class Zeroconf:
                     self.avahi.DBUS_PATH_SERVER), self.avahi.DBUS_INTERFACE_SERVER)
             self.server.connect_to_signal('StateChanged',
                     self.server_state_changed_callback)
-        except Exception, e:
+        except Exception as e:
             # Avahi service is not present
             self.server = None
             log.debug(str(e))
@@ -402,14 +395,14 @@ class Zeroconf:
             if self.service_browser:
                 try:
                     self.service_browser.Free()
-                except dbus.DBusException, e:
+                except dbus.DBusException as e:
                     log.debug(str(e))
                 self.service_browser._obj._bus = None
                 self.service_browser._obj = None
             if self.domain_browser:
                 try:
                     self.domain_browser.Free()
-                except dbus.DBusException, e:
+                except dbus.DBusException as e:
                     log.debug(str(e))
                 self.domain_browser._obj._bus = None
                 self.domain_browser._obj = None
diff --git a/src/common/zeroconf/zeroconf_bonjour.py b/src/common/zeroconf/zeroconf_bonjour.py
index c8270c178b2f20bcec527144db82c27085648aca..593fa95b08a155cb9f226539d91c90fb7878cae1 100644
--- a/src/common/zeroconf/zeroconf_bonjour.py
+++ b/src/common/zeroconf/zeroconf_bonjour.py
@@ -24,7 +24,7 @@ from common.zeroconf.zeroconf import C_BARE_NAME, C_DOMAIN
 
 try:
     import pybonjour
-except ImportError, e:
+except ImportError:
     pass
 
 
@@ -224,7 +224,7 @@ class Zeroconf:
                     regtype = self.stype, port = self.port, txtRecord = self.txt,
                     callBack = self.service_added_callback)
             self.service_sdRef = sdRef
-        except pybonjour.BonjourError, e:
+        except pybonjour.BonjourError as e:
             self.service_add_fail_callback(e)
         else:
             gajim.log.debug('Publishing service %s of type %s' % (self.name, self.stype))
@@ -248,7 +248,7 @@ class Zeroconf:
             self.service_sdRef.close()
             self.announced = False
             return True
-        except pybonjour.BonjourError, e:
+        except pybonjour.BonjourError as e:
             gajim.log.debug(e)
             return False
 
@@ -282,8 +282,8 @@ class Zeroconf:
         gajim.log.debug('starting to browse')
         try:
             self.browse_sdRef = pybonjour.DNSServiceBrowse(regtype=self.stype, domain=domain, callBack=self.browse_callback)
-        except pybonjour.BonjourError, e:
-            self.error_CB("Error while browsing: %s" % e)
+        except pybonjour.BonjourError as e:
+            self.error_CB("Error while browsing: %s" % str(e))
 
     def browse_loop(self):
         ready = select.select([self.browse_sdRef], [], [], 0)
diff --git a/src/config.py b/src/config.py
index 212d7d9ee84db9eb548659d7b4d3dda50a4af14d..588c7a5c3de6759caa03fdbc5b9690322ffe33f8 100644
--- a/src/config.py
+++ b/src/config.py
@@ -31,9 +31,11 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gtk
-import pango
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import Pango
+from gi.repository import GObject
+from gi.repository import GLib
 import os, sys
 import common.config
 import common.sleepy
@@ -63,6 +65,7 @@ from common import gpg
 from common import ged
 
 try:
+    raise ImportError
     from common.multimedia_helpers import AudioInputManager, AudioOutputManager
     from common.multimedia_helpers import VideoInputManager, VideoOutputManager
     HAS_GST = True
@@ -149,10 +152,10 @@ class PreferencesWindow:
         # user themes
         if os.path.isdir(gajim.MY_EMOTS_PATH):
             emoticons_list += os.listdir(gajim.MY_EMOTS_PATH)
-        renderer_text = gtk.CellRendererText()
+        renderer_text = Gtk.CellRendererText()
         emoticons_combobox.pack_start(renderer_text, True)
         emoticons_combobox.add_attribute(renderer_text, 'text', 0)
-        model = gtk.ListStore(str)
+        model = Gtk.ListStore(str)
         emoticons_combobox.set_model(model)
         l = []
         for dir_ in emoticons_list:
@@ -162,7 +165,7 @@ class PreferencesWindow:
             if dir_ != '.svn':
                 l.append(dir_)
         l.append(_('Disabled'))
-        for i in xrange(len(l)):
+        for i in range(len(l)):
             model.append([l[i]])
             if gajim.config.get('emoticons_theme') == l[i]:
                 emoticons_combobox.set_active(i)
@@ -208,7 +211,7 @@ class PreferencesWindow:
         ### Style tab ###
         # Themes
         theme_combobox = self.xml.get_object('theme_combobox')
-        cell = gtk.CellRendererText()
+        cell = Gtk.CellRendererText()
         theme_combobox.pack_start(cell, True)
         theme_combobox.add_attribute(cell, 'text', 0)
         self.update_theme_list()
@@ -218,13 +221,13 @@ class PreferencesWindow:
         if os.path.isdir(gajim.MY_ICONSETS_PATH):
             iconsets_list += os.listdir(gajim.MY_ICONSETS_PATH)
         # new model, image in 0, string in 1
-        model = gtk.ListStore(gtk.Image, str)
+        model = Gtk.ListStore(Gtk.Image, str)
         renderer_image = cell_renderer_image.CellRendererImage(0, 0)
-        renderer_text = gtk.CellRendererText()
+        renderer_text = Gtk.CellRendererText()
         renderer_text.set_property('xpad', 5)
-        self.iconset_combobox.pack_start(renderer_image, expand = False)
-        self.iconset_combobox.pack_start(renderer_text, expand = True)
-        self.iconset_combobox.set_attributes(renderer_text, text = 1)
+        self.iconset_combobox.pack_start(renderer_image, False)
+        self.iconset_combobox.pack_start(renderer_text, True)
+        self.iconset_combobox.add_attribute(renderer_text, 'text', 1)
         self.iconset_combobox.add_attribute(renderer_image, 'image', 0)
         self.iconset_combobox.set_model(model)
         l = []
@@ -236,8 +239,8 @@ class PreferencesWindow:
                 l.append(dir)
         if l.count == 0:
             l.append(' ')
-        for i in xrange(len(l)):
-            preview = gtk.Image()
+        for i in range(len(l)):
+            preview = Gtk.Image()
             files = []
             files.append(os.path.join(helpers.get_iconset_path(l[i]), '16x16',
                     'online.png'))
@@ -390,69 +393,69 @@ class PreferencesWindow:
 
         # Default Status messages
         self.default_msg_tree = self.xml.get_object('default_msg_treeview')
-        col2 = self.default_msg_tree.rc_get_style().bg[gtk.STATE_ACTIVE].\
-            to_string()
+
+        #FIXME: That doesn't seem to work:
+        context = self.default_msg_tree.get_style_context()
+        col2 = context.get_background_color(Gtk.StateFlags.ACTIVE)
+
         # (status, translated_status, message, enabled)
-        model = gtk.ListStore(str, str, str, bool)
+        model = Gtk.ListStore(str, str, str, bool)
         self.default_msg_tree.set_model(model)
-        col = gtk.TreeViewColumn(_('Status'))
+        col = Gtk.TreeViewColumn(_('Status'))
         col.set_resizable(True)
         self.default_msg_tree.append_column(col)
-        renderer = gtk.CellRendererText()
+        renderer = Gtk.CellRendererText()
         col.pack_start(renderer, False)
-        col.set_attributes(renderer, text = 1)
-        col = gtk.TreeViewColumn(_('Default Message'))
+        col.add_attribute(renderer, 'text', 1)
+        col = Gtk.TreeViewColumn(_('Default Message'))
         col.set_resizable(True)
         self.default_msg_tree.append_column(col)
-        renderer = gtk.CellRendererText()
+        renderer = Gtk.CellRendererText()
         col.pack_start(renderer, True)
-        col.set_attributes(renderer, text = 2)
+        col.add_attribute(renderer, 'text', 2)
         renderer.connect('edited', self.on_default_msg_cell_edited)
         renderer.set_property('editable', True)
-        renderer.set_property('cell-background', col2)
-        col = gtk.TreeViewColumn(_('Enabled'))
+        renderer.set_property('cell-background-rgba', col2)
+        col = Gtk.TreeViewColumn(_('Enabled'))
         col.set_resizable(True)
         self.default_msg_tree.append_column(col)
-        renderer = gtk.CellRendererToggle()
+        renderer = Gtk.CellRendererToggle()
         col.pack_start(renderer, False)
-        col.set_attributes(renderer, active = 3)
+        col.add_attribute(renderer, 'active', 3)
         renderer.set_property('activatable', True)
         renderer.connect('toggled', self.default_msg_toggled_cb)
         self.fill_default_msg_treeview()
 
         # Status messages
         self.msg_tree = self.xml.get_object('msg_treeview')
-        model = gtk.ListStore(str, str, str, str, str, str, str)
-        self.msg_tree.set_model(model)
-        col = gtk.TreeViewColumn('name')
-        self.msg_tree.append_column(col)
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer, True)
-        col.set_attributes(renderer, text = 0)
+        renderer = Gtk.CellRendererText()
         renderer.connect('edited', self.on_msg_cell_edited)
         renderer.set_property('editable', True)
+        col = Gtk.TreeViewColumn('name', renderer, text=0)
+        self.msg_tree.append_column(col)
         self.fill_msg_treeview()
+
         buf = self.xml.get_object('msg_textview').get_buffer()
-        buf.connect('changed', self.on_msg_textview_changed)
+        buf.connect('end-user-action', self.on_msg_textview_changed)
 
         ### Audio / Video tab ###
         def create_av_combobox(opt_name, device_dict, config_name=None,
         key=None):
             combobox = self.xml.get_object(opt_name + '_combobox')
-            cell = gtk.CellRendererText()
-            cell.set_property('ellipsize', pango.ELLIPSIZE_END)
+            cell = Gtk.CellRendererText()
+            cell.set_property('ellipsize', Pango.EllipsizeMode.END)
             cell.set_property('ellipsize-set', True)
             combobox.pack_start(cell, True)
             combobox.add_attribute(cell, 'text', 0)
-            model = gtk.ListStore(str, str)
+            model = Gtk.ListStore(str, str)
             combobox.set_model(model)
             if config_name:
                 config = gajim.config.get(config_name)
             else:
                 config = gajim.config.get(opt_name + '_device')
 
-            for index, (name, value) in enumerate(sorted(device_dict.\
-            iteritems(), key=key)):
+            for index, (name, value) in enumerate(sorted(device_dict.items(),
+            key=key)):
                 model.append((name, value))
                 if config == value:
                     combobox.set_active(index)
@@ -586,10 +589,10 @@ class PreferencesWindow:
         gtkgui_helpers.possibly_move_window_in_current_desktop(self.window)
 
     def on_preferences_notebook_switch_page(self, widget, page, page_num):
-        gobject.idle_add(self.xml.get_object('close_button').grab_focus)
+        GLib.idle_add(self.xml.get_object('close_button').grab_focus)
 
     def on_preferences_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             self.window.hide()
 
     def get_per_account_option(self, opt):
@@ -673,7 +676,7 @@ class PreferencesWindow:
     def on_emoticons_combobox_changed(self, widget):
         active = widget.get_active()
         model = widget.get_model()
-        emot_theme = model[active][0].decode('utf-8')
+        emot_theme = model[active][0]
         if emot_theme == _('Disabled'):
             gajim.config.set('emoticons_theme', '')
         else:
@@ -739,7 +742,7 @@ class PreferencesWindow:
             lang = gajim.config.get('speller_language')
             if not lang:
                 lang = gajim.LANG
-            tv = gtk.TextView()
+            tv = Gtk.TextView()
             try:
                 gtkspell.Spell(tv, lang)
             except (TypeError, RuntimeError, OSError):
@@ -762,7 +765,7 @@ class PreferencesWindow:
     def on_theme_combobox_changed(self, widget):
         model = widget.get_model()
         active = widget.get_active()
-        config_theme = model[active][0].decode('utf-8').replace(' ', '_')
+        config_theme = model[active][0].replace(' ', '_')
 
         gajim.config.set('roster_theme', config_theme)
 
@@ -772,7 +775,7 @@ class PreferencesWindow:
 
     def update_theme_list(self):
         theme_combobox = self.xml.get_object('theme_combobox')
-        model = gtk.ListStore(str)
+        model = Gtk.ListStore(str)
         theme_combobox.set_model(model)
         i = 0
         for config_theme in gajim.config.get_per('themes'):
@@ -792,7 +795,7 @@ class PreferencesWindow:
     def on_iconset_combobox_changed(self, widget):
         model = widget.get_model()
         active = widget.get_active()
-        icon_string = model[active][1].decode('utf-8')
+        icon_string = model[active][1]
         gajim.config.set('iconset', icon_string)
         gtkgui_helpers.reload_jabber_state_images()
 
@@ -953,21 +956,21 @@ class PreferencesWindow:
             if col:
                 if isinstance(col_to_widget[c], list):
                     self.xml.get_object(col_to_widget[c][0]).set_color(
-                            gtk.gdk.color_parse(col))
+                            Gdk.color_parse(col))
                     self.xml.get_object(col_to_widget[c][0]).set_sensitive(True)
                     self.xml.get_object(col_to_widget[c][1]).set_active(True)
                 else:
                     self.xml.get_object(col_to_widget[c]).set_color(
-                            gtk.gdk.color_parse(col))
+                            Gdk.color_parse(col))
             else:
                 if isinstance(col_to_widget[c], list):
                     self.xml.get_object(col_to_widget[c][0]).set_color(
-                            gtk.gdk.color_parse('#000000'))
+                            Gdk.color_parse('#000000'))
                     self.xml.get_object(col_to_widget[c][0]).set_sensitive(False)
                     self.xml.get_object(col_to_widget[c][1]).set_active(False)
                 else:
                     self.xml.get_object(col_to_widget[c]).set_color(
-                            gtk.gdk.color_parse('#000000'))
+                            Gdk.color_parse('#000000'))
 
     def on_reset_colors_button_clicked(self, widget):
         col_to_widget = {'inmsgcolor': 'incoming_nick_colorbutton',
@@ -1016,7 +1019,7 @@ class PreferencesWindow:
                                 gajim.config.get('autoxatime') * 60)
 
     def on_auto_away_message_entry_changed(self, widget):
-        gajim.config.set('autoaway_message', widget.get_text().decode('utf-8'))
+        gajim.config.set('autoaway_message', widget.get_text())
 
     def on_auto_xa_checkbutton_toggled(self, widget):
         self.on_checkbutton_toggled(widget, 'autoxa',
@@ -1030,7 +1033,7 @@ class PreferencesWindow:
                                 gajim.config.get('autoxatime') * 60)
 
     def on_auto_xa_message_entry_changed(self, widget):
-        gajim.config.set('autoxa_message', widget.get_text().decode('utf-8'))
+        gajim.config.set('autoxa_message', widget.get_text())
 
     def on_prompt_online_status_message_checkbutton_toggled(self, widget):
         self.on_checkbutton_toggled(widget, 'ask_online_status')
@@ -1064,7 +1067,7 @@ class PreferencesWindow:
 
     def on_default_msg_treemodel_row_changed(self, model, path, iter_):
         status = model[iter_][0]
-        message = model[iter_][2].decode('utf-8')
+        message = model[iter_][2]
         message = helpers.to_one_line(message)
         gajim.config.set_per('defaultstatusmsg', status, 'enabled',
                 model[iter_][3])
@@ -1074,26 +1077,28 @@ class PreferencesWindow:
         eventbox = self.xml.get_object('default_status_eventbox')
         vbox = self.xml.get_object('status_vbox')
         vbox.set_child_packing(eventbox, not expander.get_expanded(), True, 0,
-                gtk.PACK_START)
+                Gtk.PACK_START)
 
     def save_status_messages(self, model):
         for msg in gajim.config.get_per('statusmsg'):
             gajim.config.del_per('statusmsg', msg)
         iter_ = model.get_iter_first()
         while iter_:
-            val = model[iter_][0].decode('utf-8')
+            val = model[iter_][0]
             if model[iter_][1]: # we have a preset message
                 if not val: # no title, use message text for title
                     val = model[iter_][1]
                 gajim.config.add_per('statusmsg', val)
-                msg = helpers.to_one_line(model[iter_][1].decode('utf-8'))
+                msg = helpers.to_one_line(model[iter_][1])
                 gajim.config.set_per('statusmsg', val, 'message', msg)
                 i = 2
                 # store mood / activity
                 for subname in ('activity', 'subactivity', 'activity_text',
                 'mood', 'mood_text'):
-                    gajim.config.set_per('statusmsg', val, subname,
-                        model[iter_][i].decode('utf-8'))
+                    val2 = model[iter_][i]
+                    if not val2:
+                        val2 = ''
+                    gajim.config.set_per('statusmsg', val, subname, val2)
                     i += 1
             iter_ = model.iter_next(iter_)
 
@@ -1106,7 +1111,7 @@ class PreferencesWindow:
     def on_av_combobox_changed(self, combobox, config_name):
         model = combobox.get_model()
         active = combobox.get_active()
-        device = model[active][1].decode('utf-8')
+        device = model[active][1]
         gajim.config.set(config_name, device)
 
     def on_audio_input_combobox_changed(self, widget):
@@ -1135,7 +1140,7 @@ class PreferencesWindow:
                 [self.xml.get_object('stun_server_entry')])
 
     def stun_server_entry_changed(self, widget):
-        gajim.config.set('stun_server', widget.get_text().decode('utf-8'))
+        gajim.config.set('stun_server', widget.get_text())
 
     def on_applications_combobox_changed(self, widget):
         if widget.get_active() == 0:
@@ -1146,13 +1151,13 @@ class PreferencesWindow:
             self.xml.get_object('custom_apps_frame').show()
 
     def on_custom_browser_entry_changed(self, widget):
-        gajim.config.set('custombrowser', widget.get_text().decode('utf-8'))
+        gajim.config.set('custombrowser', widget.get_text())
 
     def on_custom_mail_client_entry_changed(self, widget):
-        gajim.config.set('custommailapp', widget.get_text().decode('utf-8'))
+        gajim.config.set('custommailapp', widget.get_text())
 
     def on_custom_file_manager_entry_changed(self, widget):
-        gajim.config.set('custom_file_manager', widget.get_text().decode('utf-8'))
+        gajim.config.set('custom_file_manager', widget.get_text())
 
     def on_log_show_changes_checkbutton_toggled(self, widget):
         self.on_checkbutton_toggled(widget, 'log_contact_status_changes')
@@ -1212,7 +1217,10 @@ class PreferencesWindow:
         model.set_value(iter_, 0, new_text)
 
     def on_msg_treeview_cursor_changed(self, widget, data = None):
-        (model, iter_) = self.msg_tree.get_selection().get_selected()
+        sel = self.msg_tree.get_selection()
+        if not sel:
+            return
+        (model, iter_) = sel.get_selected()
         if not iter_:
             return
         self.xml.get_object('delete_msg_button').set_sensitive(True)
@@ -1223,11 +1231,15 @@ class PreferencesWindow:
     def on_new_msg_button_clicked(self, widget, data = None):
         model = self.msg_tree.get_model()
         iter_ = model.append()
-        model.set(iter_, 0, _('status message title'), 1, _('status message text'))
+        model.set(iter_, 0, _('status message title'), 1,
+            _('status message text'))
         self.msg_tree.set_cursor(model.get_path(iter_))
 
     def on_delete_msg_button_clicked(self, widget, data = None):
-        (model, iter_) = self.msg_tree.get_selection().get_selected()
+        sel = self.msg_tree.get_selection()
+        if not sel:
+            return
+        (model, iter_) = sel.get_selected()
         if not iter_:
             return
         buf = self.xml.get_object('msg_textview').get_buffer()
@@ -1236,20 +1248,23 @@ class PreferencesWindow:
         self.xml.get_object('delete_msg_button').set_sensitive(False)
 
     def on_msg_textview_changed(self, widget, data = None):
-        (model, iter_) = self.msg_tree.get_selection().get_selected()
+        sel = self.msg_tree.get_selection()
+        if not sel:
+            return
+        (model, iter_) = sel.get_selected()
         if not iter_:
             return
         buf = self.xml.get_object('msg_textview').get_buffer()
         first_iter, end_iter = buf.get_bounds()
-        model.set_value(iter_, 1, buf.get_text(first_iter, end_iter))
+        model.set_value(iter_, 1, buf.get_text(first_iter, end_iter, True))
 
     def on_msg_treeview_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Delete:
+        if event.keyval == Gdk.KEY_Delete:
             self.on_delete_msg_button_clicked(widget)
 
     def on_proxies_combobox_changed(self, widget):
         active = widget.get_active()
-        proxy = widget.get_model()[active][0].decode('utf-8')
+        proxy = widget.get_model()[active][0]
         if proxy == _('None'):
             proxy = ''
 
@@ -1259,7 +1274,8 @@ class PreferencesWindow:
         if 'manage_proxies' in gajim.interface.instances:
             gajim.interface.instances['manage_proxies'].window.present()
         else:
-            gajim.interface.instances['manage_proxies'] = ManageProxiesWindow()
+            gajim.interface.instances['manage_proxies'] = ManageProxiesWindow(
+                self.window)
 
     def update_proxy_list(self):
         our_proxy = gajim.config.get('global_proxy')
@@ -1270,7 +1286,7 @@ class PreferencesWindow:
         model.clear()
         l = gajim.config.get_per('proxies')
         l.insert(0, _('None'))
-        for i in xrange(len(l)):
+        for i in range(len(l)):
             model.append([l[i]])
             if our_proxy == l[i]:
                 proxy_combobox.set_active(i)
@@ -1284,10 +1300,10 @@ class PreferencesWindow:
 
 #---------- ManageProxiesWindow class -------------#
 class ManageProxiesWindow:
-    def __init__(self):
+    def __init__(self, transient_for=None):
         self.xml = gtkgui_helpers.get_gtk_builder('manage_proxies_window.ui')
         self.window = self.xml.get_object('manage_proxies_window')
-        self.window.set_transient_for(gajim.interface.roster.window)
+        self.window.set_transient_for(transient_for)
         self.proxies_treeview = self.xml.get_object('proxies_treeview')
         self.proxyname_entry = self.xml.get_object('proxyname_entry')
         self.proxytype_combobox = self.xml.get_object('proxytype_combobox')
@@ -1326,13 +1342,13 @@ class ManageProxiesWindow:
         self.xml.get_object('remove_proxy_button').set_sensitive(False)
         self.proxytype_combobox.set_sensitive(False)
         self.xml.get_object('proxy_table').set_sensitive(False)
-        model = gtk.ListStore(str)
+        model = Gtk.ListStore(str)
         self.proxies_treeview.set_model(model)
-        col = gtk.TreeViewColumn('Proxies')
+        col = Gtk.TreeViewColumn('Proxies')
         self.proxies_treeview.append_column(col)
-        renderer = gtk.CellRendererText()
+        renderer = Gtk.CellRendererText()
         col.pack_start(renderer, True)
-        col.set_attributes(renderer, text = 0)
+        col.add_attribute(renderer, 'text', 0)
         self.fill_proxies_treeview()
         self.xml.get_object('proxytype_combobox').set_active(0)
 
@@ -1346,18 +1362,21 @@ class ManageProxiesWindow:
         model = self.proxies_treeview.get_model()
         proxies = gajim.config.get_per('proxies')
         i = 1
-        while ('proxy' + unicode(i)) in proxies:
+        while ('proxy' + str(i)) in proxies:
             i += 1
         iter_ = model.append()
-        model.set(iter_, 0, 'proxy' + unicode(i))
-        gajim.config.add_per('proxies', 'proxy' + unicode(i))
+        model.set(iter_, 0, 'proxy' + str(i))
+        gajim.config.add_per('proxies', 'proxy' + str(i))
         self.proxies_treeview.set_cursor(model.get_path(iter_))
 
     def on_remove_proxy_button_clicked(self, widget):
-        (model, iter_) = self.proxies_treeview.get_selection().get_selected()
+        sel = self.proxies_treeview.get_selection()
+        if not sel:
+            return
+        (model, iter_) = sel.get_selected()
         if not iter_:
             return
-        proxy = model[iter_][0].decode('utf-8')
+        proxy = model[iter_][0]
         model.remove(iter_)
         gajim.config.del_per('proxies', proxy)
         self.xml.get_object('remove_proxy_button').set_sensitive(False)
@@ -1372,7 +1391,7 @@ class ManageProxiesWindow:
         if self.block_signal:
             return
         act = widget.get_active()
-        proxy = self.proxyname_entry.get_text().decode('utf-8')
+        proxy = self.proxyname_entry.get_text()
         gajim.config.set_per('proxies', proxy, 'useauth', act)
         self.xml.get_object('proxyuser_entry').set_sensitive(act)
         self.xml.get_object('proxypass_entry').set_sensitive(act)
@@ -1381,7 +1400,7 @@ class ManageProxiesWindow:
         if self.block_signal:
             return
         act = widget.get_active()
-        proxy = self.proxyname_entry.get_text().decode('utf-8')
+        proxy = self.proxyname_entry.get_text()
         gajim.config.set_per('proxies', proxy, 'bosh_useproxy', act)
         self.xml.get_object('proxyhost_entry').set_sensitive(act)
         self.xml.get_object('proxyport_entry').set_sensitive(act)
@@ -1409,7 +1428,11 @@ class ManageProxiesWindow:
         #useauth_checkbutton.set_active(False)
         #self.on_useauth_checkbutton_toggled(useauth_checkbutton)
 
-        (model, iter_) = widget.get_selection().get_selected()
+        sel = widget.get_selection()
+        if sel:
+            (model, iter_) = sel.get_selected()
+        else:
+            iter_ = None
         if not iter_:
             self.xml.get_object('proxyname_entry').set_text('')
             self.xml.get_object('proxytype_combobox').set_sensitive(False)
@@ -1437,7 +1460,7 @@ class ManageProxiesWindow:
             self.xml.get_object('proxy_table').set_sensitive(True)
             proxyhost_entry.set_text(gajim.config.get_per('proxies', proxy,
                     'host'))
-            proxyport_entry.set_text(unicode(gajim.config.get_per('proxies',
+            proxyport_entry.set_text(str(gajim.config.get_per('proxies',
                     proxy, 'port')))
             proxyuser_entry.set_text(gajim.config.get_per('proxies', proxy,
                     'user'))
@@ -1454,17 +1477,20 @@ class ManageProxiesWindow:
         self.block_signal = False
 
     def on_proxies_treeview_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Delete:
+        if event.keyval == Gdk.KEY_Delete:
             self.on_remove_proxy_button_clicked(widget)
 
     def on_proxyname_entry_changed(self, widget):
         if self.block_signal:
             return
-        (model, iter_) = self.proxies_treeview.get_selection().get_selected()
+        sel = self.proxies_treeview.get_selection()
+        if not sel:
+            return
+        (model, iter_) = sel.get_selected()
         if not iter_:
             return
-        old_name = model.get_value(iter_, 0).decode('utf-8')
-        new_name = widget.get_text().decode('utf-8')
+        old_name = model.get_value(iter_, 0)
+        new_name = widget.get_text()
         if new_name == '':
             return
         if new_name == old_name:
@@ -1482,42 +1508,42 @@ class ManageProxiesWindow:
         types = ['http', 'socks5', 'bosh']
         type_ = self.proxytype_combobox.get_active()
         self.show_bosh_fields(types[type_]=='bosh')
-        proxy = self.proxyname_entry.get_text().decode('utf-8')
+        proxy = self.proxyname_entry.get_text()
         gajim.config.set_per('proxies', proxy, 'type', types[type_])
 
     def on_proxyhost_entry_changed(self, widget):
         if self.block_signal:
             return
-        value = widget.get_text().decode('utf-8')
-        proxy = self.proxyname_entry.get_text().decode('utf-8')
+        value = widget.get_text()
+        proxy = self.proxyname_entry.get_text()
         gajim.config.set_per('proxies', proxy, 'host', value)
 
     def on_proxyport_entry_changed(self, widget):
         if self.block_signal:
             return
-        value = widget.get_text().decode('utf-8')
-        proxy = self.proxyname_entry.get_text().decode('utf-8')
+        value = widget.get_text()
+        proxy = self.proxyname_entry.get_text()
         gajim.config.set_per('proxies', proxy, 'port', value)
 
     def on_proxyuser_entry_changed(self, widget):
         if self.block_signal:
             return
-        value = widget.get_text().decode('utf-8')
-        proxy = self.proxyname_entry.get_text().decode('utf-8')
+        value = widget.get_text()
+        proxy = self.proxyname_entry.get_text()
         gajim.config.set_per('proxies', proxy, 'user', value)
 
     def on_boshuri_entry_changed(self, widget):
         if self.block_signal:
             return
-        value = widget.get_text().decode('utf-8')
-        proxy = self.proxyname_entry.get_text().decode('utf-8')
+        value = widget.get_text()
+        proxy = self.proxyname_entry.get_text()
         gajim.config.set_per('proxies', proxy, 'bosh_uri', value)
 
     def on_proxypass_entry_changed(self, widget):
         if self.block_signal:
             return
-        value = widget.get_text().decode('utf-8')
-        proxy = self.proxyname_entry.get_text().decode('utf-8')
+        value = widget.get_text()
+        proxy = self.proxyname_entry.get_text()
         gajim.config.set_per('proxies', proxy, 'pass', value)
 
 
@@ -1546,12 +1572,15 @@ class AccountsWindow:
         img.set_from_file(path_to_kbd_input_img)
         self.notebook = self.xml.get_object('notebook')
         # Name
-        model = gtk.ListStore(str)
+        model = Gtk.ListStore(str)
         self.accounts_treeview.set_model(model)
         # column
-        renderer = gtk.CellRendererText()
-        self.accounts_treeview.insert_column_with_attributes(-1, _('Name'),
-                renderer, text=0)
+        renderer = Gtk.CellRendererText()
+        col = Gtk.TreeViewColumn()
+        col.set_title(_('Name'))
+        col.pack_start(renderer, False)
+        col.add_attribute(renderer, 'text', 0)
+        self.accounts_treeview.insert_column(col, -1)
 
         self.current_account = None
         # When we fill info, we don't want to handle the changed signals
@@ -1581,15 +1610,15 @@ class AccountsWindow:
         self.xml.get_object('close_button').grab_focus()
 
     def on_accounts_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             self.check_resend_relog()
             self.window.destroy()
 
     def select_account(self, account):
         model = self.accounts_treeview.get_model()
-        iter_ = model.get_iter_root()
+        iter_ = model.get_iter_first()
         while iter_:
-            acct = model[iter_][0].decode('utf-8')
+            acct = model[iter_][0]
             if account == acct:
                 self.accounts_treeview.set_cursor(model.get_path(iter_))
                 return
@@ -1609,7 +1638,7 @@ class AccountsWindow:
             model.set(iter_, 0, account)
 
         self.selection = self.accounts_treeview.get_selection()
-        self.selection.select_iter(model.get_iter_root())
+        self.selection.select_iter(model.get_iter_first())
 
     def resend(self, account):
         if not account in gajim.connections:
@@ -1644,7 +1673,7 @@ class AccountsWindow:
                 status_before = gajim.connections[account].status
                 gajim.interface.roster.send_status(account, 'offline',
                     _('Be right back.'))
-                gobject.timeout_add(500, login, account, show_before,
+                GLib.timeout_add(500, login, account, show_before,
                     status_before)
 
             def on_yes(checked, account):
@@ -1669,11 +1698,14 @@ class AccountsWindow:
         Activate modify buttons when a row is selected, update accounts info
         """
         sel = self.accounts_treeview.get_selection()
-        (model, iter_) = sel.get_selected()
-        if iter_:
-            account = model[iter_][0].decode('utf-8')
+        if sel:
+            (model, iter_) = sel.get_selected()
+            if iter_:
+                account = model[iter_][0]
+            else:
+                account = None
         else:
-            account = None
+            iter_ = account = None
         if self.current_account and self.current_account == account:
             # We're comming back to our current account, no need to update
             # widgets
@@ -1741,11 +1773,11 @@ class AccountsWindow:
         if not our_proxy:
             our_proxy = _('None')
         proxy_combobox = self.xml.get_object('proxies_combobox1')
-        model = gtk.ListStore(str)
+        model = Gtk.ListStore(str)
         proxy_combobox.set_model(model)
         l = gajim.config.get_per('proxies')
         l.insert(0, _('None'))
-        for i in xrange(len(l)):
+        for i in range(len(l)):
             model.append([l[i]])
             if our_proxy == l[i]:
                 proxy_combobox.set_active(i)
@@ -1938,7 +1970,7 @@ class AccountsWindow:
             custom_port = 5222
             gajim.config.set_per('accounts', account, 'custom_port',
                 custom_port)
-        self.xml.get_object('custom_port_entry1').set_text(unicode(custom_port))
+        self.xml.get_object('custom_port_entry1').set_text(str(custom_port))
 
         # Personal tab
         gpg_key_label = self.xml.get_object('gpg_key_label1')
@@ -2028,7 +2060,8 @@ class AccountsWindow:
     def on_rename_button_clicked(self, widget):
         if not self.current_account:
             return
-        active = gajim.config.get_per('accounts', self.current_account, 'active')
+        active = gajim.config.get_per('accounts', self.current_account,
+            'active') and self.current_account in gajim.connections
         if active and gajim.connections[self.current_account].connected != 0:
             dialogs.ErrorDialog(
                 _('You are currently connected to the server'),
@@ -2139,7 +2172,8 @@ class AccountsWindow:
         message = _('Enter a new name for account %s') % self.current_account
         old_text = self.current_account
         dialogs.InputDialog(title, message, old_text, is_modal=False,
-                ok_handler=(on_renamed, self.current_account))
+            ok_handler=(on_renamed, self.current_account),
+            transient_for=self.window)
 
     def option_changed(self, option, value):
         return gajim.config.get_per('accounts', self.current_account, option) \
@@ -2152,11 +2186,11 @@ class AccountsWindow:
         # check if jid is conform to RFC and stringprep it
         try:
             jid = helpers.parse_jid(jid)
-        except helpers.InvalidFormat, s:
+        except helpers.InvalidFormat as s:
             if not widget.is_focus():
                 pritext = _('Invalid Jabber ID')
                 dialogs.ErrorDialog(pritext, str(s), transient_for=self.window)
-                gobject.idle_add(lambda: widget.grab_focus())
+                GLib.idle_add(lambda: widget.grab_focus())
             return True
 
         jid_splited = jid.split('@', 1)
@@ -2167,7 +2201,7 @@ class AccountsWindow:
                 sectext = \
                     _('A Jabber ID must be in the form "user@servername".')
                 dialogs.ErrorDialog(pritext, sectext, transient_for=self.window)
-                gobject.idle_add(lambda: widget.grab_focus())
+                GLib.idle_add(lambda: widget.grab_focus())
             return True
 
 
@@ -2207,8 +2241,7 @@ class AccountsWindow:
     def on_password_entry1_changed(self, widget):
         if self.ignore_events:
             return
-        passwords.save_password(self.current_account, widget.get_text().decode(
-            'utf-8'))
+        passwords.save_password(self.current_account, widget.get_text())
 
     def on_save_password_checkbutton1_toggled(self, widget):
         if self.ignore_events:
@@ -2227,15 +2260,14 @@ class AccountsWindow:
     def on_resource_entry1_focus_out_event(self, widget, event):
         if self.ignore_events:
             return
-        resource = self.xml.get_object('resource_entry1').get_text().decode(
-            'utf-8')
+        resource = self.xml.get_object('resource_entry1').get_text()
         try:
             resource = helpers.parse_resource(resource)
-        except helpers.InvalidFormat, s:
+        except helpers.InvalidFormat as s:
             if not widget.is_focus():
                 pritext = _('Invalid Jabber ID')
                 dialogs.ErrorDialog(pritext, str(s), transient_for=self.window)
-                gobject.idle_add(lambda: widget.grab_focus())
+                GLib.idle_add(lambda: widget.grab_focus())
             return True
 
         if self.option_changed('resource', resource):
@@ -2276,7 +2308,8 @@ class AccountsWindow:
                         new_password)
 
         try:
-            dialogs.ChangePasswordDialog(self.current_account, on_changed)
+            dialogs.ChangePasswordDialog(self.current_account, on_changed,
+                self.window)
         except GajimGeneralException:
             # if we showed ErrorDialog, there will not be dialog instance
             return
@@ -2335,7 +2368,7 @@ class AccountsWindow:
 
     def on_proxies_combobox1_changed(self, widget):
         active = widget.get_active()
-        proxy = widget.get_model()[active][0].decode('utf-8')
+        proxy = widget.get_model()[active][0]
         if proxy == _('None'):
             proxy = ''
 
@@ -2348,7 +2381,8 @@ class AccountsWindow:
         if 'manage_proxies' in gajim.interface.instances:
             gajim.interface.instances['manage_proxies'].window.present()
         else:
-            gajim.interface.instances['manage_proxies'] = ManageProxiesWindow()
+            gajim.interface.instances['manage_proxies'] = ManageProxiesWindow(
+                self.window)
 
     def on_warn_when_insecure_connection_checkbutton1_toggled(self, widget):
         if self.ignore_events:
@@ -2377,7 +2411,7 @@ class AccountsWindow:
     def on_custom_host_entry1_changed(self, widget):
         if self.ignore_events:
             return
-        host = widget.get_text().decode('utf-8')
+        host = widget.get_text()
         if self.option_changed('custom_host', host):
             self.need_relogin = True
         gajim.config.set_per('accounts', self.current_account, 'custom_host',
@@ -2394,7 +2428,7 @@ class AccountsWindow:
                 dialogs.ErrorDialog(_('Invalid entry'),
                     _('Custom port must be a port number.'),
                     transient_for=self.window)
-                gobject.idle_add(lambda: widget.grab_focus())
+                GLib.idle_add(lambda: widget.grab_focus())
             return True
         if self.option_changed('custom_port', custom_port):
             self.need_relogin = True
@@ -2405,7 +2439,7 @@ class AccountsWindow:
         if self.current_account in gajim.connections and \
         gajim.connections[self.current_account].gpg:
             secret_keys = gajim.connections[self.current_account].\
-                ask_gpg_secrete_keys()
+                    ask_gpg_secrete_keys()
 
         # self.current_account is None and/or gajim.connections is {}
         else:
@@ -2657,7 +2691,7 @@ class AccountsWindow:
     def on_first_name_entry2_changed(self, widget):
         if self.ignore_events:
             return
-        name = widget.get_text().decode('utf-8')
+        name = widget.get_text()
         if self.option_changed('zeroconf_first_name', name):
             self.need_relogin = True
         gajim.config.set_per('accounts', self.current_account,
@@ -2666,7 +2700,7 @@ class AccountsWindow:
     def on_last_name_entry2_changed(self, widget):
         if self.ignore_events:
             return
-        name = widget.get_text().decode('utf-8')
+        name = widget.get_text()
         if self.option_changed('zeroconf_last_name', name):
             self.need_relogin = True
         gajim.config.set_per('accounts', self.current_account,
@@ -2675,7 +2709,7 @@ class AccountsWindow:
     def on_jabber_id_entry2_changed(self, widget):
         if self.ignore_events:
             return
-        id_ = widget.get_text().decode('utf-8')
+        id_ = widget.get_text()
         if self.option_changed('zeroconf_jabber_id', id_):
             self.need_relogin = True
         gajim.config.set_per('accounts', self.current_account,
@@ -2684,20 +2718,20 @@ class AccountsWindow:
     def on_email_entry2_changed(self, widget):
         if self.ignore_events:
             return
-        email = widget.get_text().decode('utf-8')
+        email = widget.get_text()
         if self.option_changed('zeroconf_email', email):
             self.need_relogin = True
         gajim.config.set_per('accounts', self.current_account,
             'zeroconf_email', email)
 
-class FakeDataForm(gtk.Table, object):
+class FakeDataForm(Gtk.Table, object):
     """
     Class for forms that are in XML format <entry1>value1</entry1> infos in a
     table {entry1: value1}
     """
 
     def __init__(self, infos, selectable=False):
-        gtk.Table.__init__(self)
+        GObject.GObject.__init__(self)
         self.infos = infos
         self.selectable = selectable
         self.entries = {}
@@ -2711,7 +2745,7 @@ class FakeDataForm(gtk.Table, object):
         if 'instructions' in self.infos:
             nbrow = 1
             self.resize(rows = nbrow, columns = 2)
-            label = gtk.Label(self.infos['instructions'])
+            label = Gtk.Label(label=self.infos['instructions'])
             if self.selectable:
                 label.set_selectable(True)
             self.attach(label, 0, 2, 0, 1, 0, 0, 0, 0)
@@ -2723,9 +2757,9 @@ class FakeDataForm(gtk.Table, object):
 
             nbrow = nbrow + 1
             self.resize(rows = nbrow, columns = 2)
-            label = gtk.Label(name.capitalize() + ':')
+            label = Gtk.Label(label=name.capitalize() + ':')
             self.attach(label, 0, 1, nbrow - 1, nbrow, 0, 0, 0, 0)
-            entry = gtk.Entry()
+            entry = Gtk.Entry()
             entry.set_activates_default(True)
             if self.infos[name]:
                 entry.set_text(self.infos[name])
@@ -2738,7 +2772,7 @@ class FakeDataForm(gtk.Table, object):
 
     def get_infos(self):
         for name in self.entries.keys():
-            self.infos[name] = self.entries[name].get_text().decode('utf-8')
+            self.infos[name] = self.entries[name].get_text()
         return self.infos
 
 class ServiceRegistrationWindow:
@@ -2817,7 +2851,7 @@ class GroupchatConfigWindow:
             # widget
             sw = self.data_form_widget.xml.get_object(
                 'single_form_scrolledwindow')
-            sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
+            sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER)
             if self.form.title:
                 self.xml.get_object('title_label').set_text(self.form.title)
             else:
@@ -2825,7 +2859,7 @@ class GroupchatConfigWindow:
                 self.xml.get_object('title_hseparator').hide()
 
             self.data_form_widget.show()
-            config_vbox.pack_start(self.data_form_widget)
+            config_vbox.pack_start(self.data_form_widget, True, True, 0)
         else:
             self.xml.get_object('title_label').set_no_show_all(True)
             self.xml.get_object('title_label').hide()
@@ -2839,67 +2873,67 @@ class GroupchatConfigWindow:
 
         for affiliation in self.affiliation_labels.keys():
             self.start_users_dict[affiliation] = {}
-            hbox = gtk.HBox(spacing=5)
-            add_on_vbox.pack_start(hbox, False)
+            hbox = Gtk.HBox(spacing=5)
+            add_on_vbox.pack_start(hbox, False, True, 0)
 
-            label = gtk.Label(self.affiliation_labels[affiliation])
-            hbox.pack_start(label, False)
+            label = Gtk.Label(label=self.affiliation_labels[affiliation])
+            hbox.pack_start(label, False, True, 0)
 
-            bb = gtk.HButtonBox()
-            bb.set_layout(gtk.BUTTONBOX_END)
+            bb = Gtk.HButtonBox()
+            bb.set_layout(Gtk.ButtonBoxStyle.END)
             bb.set_spacing(5)
-            hbox.pack_start(bb)
-            add_button = gtk.Button(stock=gtk.STOCK_ADD)
+            hbox.pack_start(bb, True, True, 0)
+            add_button = Gtk.Button(stock=Gtk.STOCK_ADD)
             add_button.connect('clicked', self.on_add_button_clicked,
                 affiliation)
-            bb.pack_start(add_button)
-            self.remove_button[affiliation] = gtk.Button(stock=gtk.STOCK_REMOVE)
+            bb.pack_start(add_button, True, True, 0)
+            self.remove_button[affiliation] = Gtk.Button(stock=Gtk.STOCK_REMOVE)
             self.remove_button[affiliation].set_sensitive(False)
             self.remove_button[affiliation].connect('clicked',
                     self.on_remove_button_clicked, affiliation)
-            bb.pack_start(self.remove_button[affiliation])
+            bb.pack_start(self.remove_button[affiliation], True, True, 0)
 
             # jid, reason, nick, role
-            liststore = gtk.ListStore(str, str, str, str)
-            self.affiliation_treeview[affiliation] = gtk.TreeView(liststore)
+            liststore = Gtk.ListStore(str, str, str, str)
+            self.affiliation_treeview[affiliation] = Gtk.TreeView(liststore)
             self.affiliation_treeview[affiliation].get_selection().set_mode(
-                gtk.SELECTION_MULTIPLE)
+                Gtk.SelectionMode.MULTIPLE)
             self.affiliation_treeview[affiliation].connect('cursor-changed',
                 self.on_affiliation_treeview_cursor_changed, affiliation)
-            renderer = gtk.CellRendererText()
-            col = gtk.TreeViewColumn(_('JID'), renderer)
+            renderer = Gtk.CellRendererText()
+            col = Gtk.TreeViewColumn(_('JID'), renderer)
             col.add_attribute(renderer, 'text', 0)
             col.set_resizable(True)
             col.set_sort_column_id(0)
             self.affiliation_treeview[affiliation].append_column(col)
 
             if affiliation == 'outcast':
-                renderer = gtk.CellRendererText()
+                renderer = Gtk.CellRendererText()
                 renderer.set_property('editable', True)
                 renderer.connect('edited', self.on_cell_edited)
-                col = gtk.TreeViewColumn(_('Reason'), renderer)
+                col = Gtk.TreeViewColumn(_('Reason'), renderer)
                 col.add_attribute(renderer, 'text', 1)
                 col.set_resizable(True)
                 col.set_sort_column_id(1)
                 self.affiliation_treeview[affiliation].append_column(col)
             elif affiliation == 'member':
-                renderer = gtk.CellRendererText()
-                col = gtk.TreeViewColumn(_('Nick'), renderer)
+                renderer = Gtk.CellRendererText()
+                col = Gtk.TreeViewColumn(_('Nick'), renderer)
                 col.add_attribute(renderer, 'text', 2)
                 col.set_resizable(True)
                 col.set_sort_column_id(2)
                 self.affiliation_treeview[affiliation].append_column(col)
-                renderer = gtk.CellRendererText()
-                col = gtk.TreeViewColumn(_('Role'), renderer)
+                renderer = Gtk.CellRendererText()
+                col = Gtk.TreeViewColumn(_('Role'), renderer)
                 col.add_attribute(renderer, 'text', 3)
                 col.set_resizable(True)
                 col.set_sort_column_id(3)
                 self.affiliation_treeview[affiliation].append_column(col)
 
-            sw = gtk.ScrolledWindow()
-            sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
+            sw = Gtk.ScrolledWindow()
+            sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER)
             sw.add(self.affiliation_treeview[affiliation])
-            add_on_vbox.pack_start(sw)
+            add_on_vbox.pack_start(sw, True, True, 0)
             gajim.connections[self.account].get_affiliation_list(self.room_jid,
                 affiliation)
 
@@ -2911,7 +2945,7 @@ class GroupchatConfigWindow:
 
     def on_cell_edited(self, cell, path, new_text):
         model = self.affiliation_treeview['outcast'].get_model()
-        new_text = new_text.decode('utf-8')
+        new_text = new_text
         iter_ = model.get_iter(path)
         model[iter_][1] = new_text
 
@@ -2948,7 +2982,7 @@ class GroupchatConfigWindow:
         model, paths = selection.get_selected_rows()
         row_refs = []
         for path in paths:
-            row_refs.append(gtk.TreeRowReference(model, path))
+            row_refs.append(Gtk.TreeRowReference.new(model, path))
         for row_ref in row_refs:
             path = row_ref.get_path()
             iter_ = model.get_iter(path)
@@ -2989,16 +3023,15 @@ class GroupchatConfigWindow:
             iter_ = model.get_iter_first()
             # add new jid
             while iter_:
-                jid = model[iter_][0].decode('utf-8')
+                jid = model[iter_][0]
                 actual_jid_list.append(jid)
                 if jid not in self.start_users_dict[affiliation] or \
                 (affiliation == 'outcast' and 'reason' in self.start_users_dict[
                 affiliation][jid] and self.start_users_dict[affiliation][jid]\
-                ['reason'] != model[iter_][1].decode('utf-8')):
+                ['reason'] != model[iter_][1]):
                     users_dict[jid] = {'affiliation': affiliation}
                     if affiliation == 'outcast':
-                        users_dict[jid]['reason'] = model[iter_][1].decode(
-                            'utf-8')
+                        users_dict[jid]['reason'] = model[iter_][1]
                 iter_ = model.iter_next(iter_)
             # remove removed one
             for jid in self.start_users_dict[affiliation]:
@@ -3138,8 +3171,8 @@ class ManageBookmarksWindow:
 
         # Account-JID, RoomName, Room-JID, Autojoin, Minimize, Passowrd, Nick,
         # Show_Status
-        self.treestore = gtk.TreeStore(str, str, str, bool, bool, str, str, str)
-        self.treestore.set_sort_column_id(1, gtk.SORT_ASCENDING)
+        self.treestore = Gtk.TreeStore(str, str, str, bool, bool, str, str, str)
+        self.treestore.set_sort_column_id(1, Gtk.SortType.ASCENDING)
 
         # Store bookmarks in treeview.
         for account in gajim.connections:
@@ -3180,7 +3213,7 @@ class ManageBookmarksWindow:
                                 print_status ])
 
         self.print_status_combobox = self.xml.get_object('print_status_combobox')
-        model = gtk.ListStore(str, str)
+        model = Gtk.ListStore(str, str)
 
         self.option_list = {'': _('Default'), 'all': Q_('?print_status:All'),
                 'in_and_out': _('Enter and leave only'),
@@ -3196,8 +3229,8 @@ class ManageBookmarksWindow:
         self.view.set_model(self.treestore)
         self.view.expand_all()
 
-        renderer = gtk.CellRendererText()
-        column = gtk.TreeViewColumn('Bookmarks', renderer, text=1)
+        renderer = Gtk.CellRendererText()
+        column = Gtk.TreeViewColumn('Bookmarks', renderer, text=1)
         self.view.append_column(column)
 
         self.selection = self.view.get_selection()
@@ -3211,7 +3244,8 @@ class ManageBookmarksWindow:
         self.server_entry = self.xml.get_object('server_entry')
         self.server_entry.connect('changed', self.on_server_entry_changed)
         self.room_entry = self.xml.get_object('room_entry')
-        self.room_entry.connect('changed', self.on_room_entry_changed)
+        self.room_entry_changed_id = self.room_entry.connect('changed',
+            self.on_room_entry_changed)
         self.pass_entry = self.xml.get_object('pass_entry')
         self.pass_entry.connect('changed', self.on_pass_entry_changed)
         self.autojoin_checkbutton = self.xml.get_object('autojoin_checkbutton')
@@ -3220,7 +3254,7 @@ class ManageBookmarksWindow:
         self.xml.connect_signals(self)
         self.window.show_all()
         # select root iter
-        self.selection.select_iter(self.treestore.get_iter_root())
+        self.selection.select_iter(self.treestore.get_iter_first())
 
     def on_add_bookmark_button_clicked(self, widget):
         """
@@ -3241,7 +3275,7 @@ class ManageBookmarksWindow:
             # No parent, so we got an account -> add to this.
             add_to = iter_
 
-        account = model[add_to][1].decode('utf-8')
+        account = model[add_to][1]
         nick = gajim.nicks[account]
         iter_ = self.treestore.append(add_to, [account, _('New Group Chat'),
             '@', False, False, '', nick, 'in_and_out'])
@@ -3274,8 +3308,8 @@ class ManageBookmarksWindow:
             #Account data can't be changed
             return
 
-        if self.server_entry.get_text().decode('utf-8') == '' or \
-        self.room_entry.get_text().decode('utf-8') == '':
+        if self.server_entry.get_text() == '' or \
+        self.room_entry.get_text() == '':
             dialogs.ErrorDialog(_('This bookmark has invalid data'),
                     _('Please be sure to fill out server and room fields or remove this'
                     ' bookmark.'))
@@ -3295,34 +3329,26 @@ class ManageBookmarksWindow:
                 return
 
         for account in self.treestore:
-            account_unicode = account[1].decode('utf-8')
-            gajim.connections[account_unicode].bookmarks = []
+            acct = account[1]
+            gajim.connections[acct].bookmarks = []
 
             for bm in account.iterchildren():
                 # Convert True/False/None to '1' or '0'
-                autojoin = unicode(int(bm[3]))
-                minimize = unicode(int(bm[4]))
+                autojoin = str(int(bm[3]))
+                minimize = str(int(bm[4]))
                 name = bm[1]
-                if name:
-                    name = name.decode('utf-8')
                 jid = bm[2]
-                if jid:
-                    jid = jid.decode('utf-8')
                 pw = bm[5]
-                if pw:
-                    pw = pw.decode('utf-8')
                 nick = bm[6]
-                if nick:
-                    nick = nick.decode('utf-8')
 
                 # create the bookmark-dict
                 bmdict = { 'name': name, 'jid': jid, 'autojoin': autojoin,
                     'minimize': minimize, 'password': pw, 'nick': nick,
                     'print_status': bm[7]}
 
-                gajim.connections[account_unicode].bookmarks.append(bmdict)
+                gajim.connections[acct].bookmarks.append(bmdict)
 
-            gajim.connections[account_unicode].store_bookmarks()
+            gajim.connections[acct].store_bookmarks()
         gajim.interface.roster.set_actions_menu_needs_rebuild()
         self.window.destroy()
 
@@ -3358,9 +3384,11 @@ class ManageBookmarksWindow:
 
         # Fill in the data for childs
         self.title_entry.set_text(model[iter_][1])
-        room_jid = model[iter_][2].decode('utf-8')
+        room_jid = model[iter_][2]
         (room, server) = room_jid.split('@')
+        self.room_entry.handler_block(self.room_entry_changed_id)
         self.room_entry.set_text(room)
+        self.room_entry.handler_unblock(self.room_entry_changed_id)
         self.server_entry.set_text(server)
 
         self.autojoin_checkbutton.set_active(model[iter_][3])
@@ -3369,7 +3397,7 @@ class ManageBookmarksWindow:
         self.minimize_checkbutton.set_sensitive(model[iter_][3])
 
         if model[iter_][5] is not None:
-            password = model[iter_][5].decode('utf-8')
+            password = model[iter_][5]
         else:
             password = None
 
@@ -3379,7 +3407,6 @@ class ManageBookmarksWindow:
             self.pass_entry.set_text('')
         nick = model[iter_][6]
         if nick:
-            nick = nick.decode('utf-8')
             self.nick_entry.set_text(nick)
         else:
             self.nick_entry.set_text('')
@@ -3398,12 +3425,12 @@ class ManageBookmarksWindow:
     def on_nick_entry_changed(self, widget):
         (model, iter_) = self.selection.get_selected()
         if iter_:
-            nick = self.nick_entry.get_text().decode('utf-8')
+            nick = self.nick_entry.get_text()
             try:
                 nick = helpers.parse_resource(nick)
-            except helpers.InvalidFormat, e:
+            except helpers.InvalidFormat:
                 dialogs.ErrorDialog(_('Invalid nickname'),
-                        _('Character not allowed'))
+                    _('Character not allowed'), transient_for=self.window)
                 self.nick_entry.set_text(model[iter_][6])
                 return True
             model[iter_][6] = nick
@@ -3412,18 +3439,23 @@ class ManageBookmarksWindow:
         (model, iter_) = self.selection.get_selected()
         if not iter_:
             return
-        server = widget.get_text().decode('utf-8')
+        server = widget.get_text()
+        if not server:
+            return
         if '@' in server:
-            dialogs.ErrorDialog(_('Invalid server'), _('Character not allowed'))
+            dialogs.ErrorDialog(_('Invalid server'),
+                _('Character not allowed'), transient_for=self.window)
             widget.set_text(server.replace('@', ''))
 
-        room_jid = self.room_entry.get_text().decode('utf-8').strip() + '@' + \
-                server.strip()
+        room = self.room_entry.get_text().strip()
+        if not room:
+            return
+        room_jid = room + '@' + server.strip()
         try:
-            room_jid = helpers.parse_resource(room_jid)
-        except helpers.InvalidFormat, e:
+            room_jid = helpers.parse_jid(room_jid)
+        except helpers.InvalidFormat as e:
             dialogs.ErrorDialog(_('Invalid server'),
-                    _('Character not allowed'))
+                _('Character not allowed'), transient_for=self.window)
             self.server_entry.set_text(model[iter_][2].split('@')[1])
             return True
         model[iter_][2] = room_jid
@@ -3432,18 +3464,24 @@ class ManageBookmarksWindow:
         (model, iter_) = self.selection.get_selected()
         if not iter_:
             return
-        room = widget.get_text().decode('utf-8')
+        room = widget.get_text()
+        if not room:
+            return
         if '@' in room:
-            dialogs.ErrorDialog(_('Invalid server'), _('Character not allowed'))
-            widget.set_text(room.replace('@', ''))
-        room_jid = room.strip() + '@' + \
-            self.server_entry.get_text().decode('utf-8').strip()
+            room, server = room.split('@', 1)
+            widget.set_text(room)
+            if server:
+                self.server_entry.set_text(server)
+            self.server_entry.grab_focus()
+        server = self.server_entry.get_text().strip()
+        if not server:
+            return
+        room_jid = room.strip() + '@' + server
         try:
-            room_jid = helpers.parse_resource(room_jid)
-        except helpers.InvalidFormat, e:
+            room_jid = helpers.parse_jid(room_jid)
+        except helpers.InvalidFormat:
             dialogs.ErrorDialog(_('Invalid room'),
-                    _('Character not allowed'))
-            self.room_entry.set_text(model[iter_][2].split('@')[0])
+                _('Character not allowed'), transient_for=self.window)
             return True
         model[iter_][2] = room_jid
 
@@ -3487,39 +3525,23 @@ class AccountCreationWizardWindow:
         self.window = self.xml.get_object('account_creation_wizard_window')
         self.window.set_transient_for(gajim.interface.roster.window)
 
-        completion = gtk.EntryCompletion()
-        completion1 = gtk.EntryCompletion()
-        # Connect events from comboboxentry.child
+        # Connect events from comboboxentry.get_child()
         server_comboboxentry = self.xml.get_object('server_comboboxentry')
-        entry = server_comboboxentry.child
+        entry = server_comboboxentry.get_child()
         entry.connect('key_press_event',
             self.on_server_comboboxentry_key_press_event, server_comboboxentry)
-        entry.set_completion(completion)
         # Do the same for the other server comboboxentry
         server_comboboxentry1 = self.xml.get_object('server_comboboxentry1')
-        entry = server_comboboxentry1.child
-        entry.set_completion(completion1)
 
         self.update_proxy_list()
 
         # parse servers.xml
         servers_xml = os.path.join(gajim.DATA_DIR, 'other', 'servers.xml')
         servers = gtkgui_helpers.parse_server_xml(servers_xml)
-        servers_model = gtk.ListStore(str)
+        servers_model = self.xml.get_object('server_liststore')
         for server in servers:
             servers_model.append((server,))
 
-        completion.set_model(servers_model)
-        completion.set_text_column(0)
-        completion1.set_model(servers_model)
-        completion1.set_text_column(0)
-
-        # Put servers into comboboxentries
-        server_comboboxentry.set_model(servers_model)
-        server_comboboxentry.set_text_column(0)
-        server_comboboxentry1.set_model(servers_model)
-        server_comboboxentry1.set_text_column(0)
-
         # Generic widgets
         self.notebook = self.xml.get_object('notebook')
         self.cancel_button = self.xml.get_object('cancel_button')
@@ -3628,7 +3650,7 @@ class AccountCreationWizardWindow:
         self.go_online_checkbutton.show()
         img = self.xml.get_object('finish_image')
         if self.modify:
-            img.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_DIALOG)
+            img.set_from_stock(Gtk.STOCK_APPLY, Gtk.IconSize.DIALOG)
         else:
             path_to_file = gtkgui_helpers.get_icon_path('gajim', 48)
             img.set_from_file(path_to_file)
@@ -3653,20 +3675,18 @@ class AccountCreationWizardWindow:
             # We are adding an existing account
             anonymous = self.xml.get_object('anonymous_checkbutton1').\
                 get_active()
-            username = self.xml.get_object('username_entry').get_text().decode(
-                'utf-8').strip()
+            username = self.xml.get_object('username_entry').get_text().strip()
             if not username and not anonymous:
                 pritext = _('Invalid username')
                 sectext = _(
                     'You must provide a username to configure this account.')
                 dialogs.ErrorDialog(pritext, sectext)
                 return
-            server = self.xml.get_object('server_comboboxentry').child.\
-                get_text().decode('utf-8').strip()
+            server = self.xml.get_object('server_comboboxentry').get_child().\
+                get_text().strip()
             savepass = self.xml.get_object('save_password_checkbutton').\
                 get_active()
-            password = self.xml.get_object('password_entry').get_text().decode(
-                'utf-8')
+            password = self.xml.get_object('password_entry').get_text()
 
             if anonymous:
                 jid = ''
@@ -3676,7 +3696,7 @@ class AccountCreationWizardWindow:
             # check if jid is conform to RFC and stringprep it
             try:
                 jid = helpers.parse_jid(jid)
-            except helpers.InvalidFormat, s:
+            except helpers.InvalidFormat as s:
                 pritext = _('Invalid Jabber ID')
                 dialogs.ErrorDialog(pritext, str(s))
                 return
@@ -3695,8 +3715,8 @@ class AccountCreationWizardWindow:
             self.show_finish_page()
         elif cur_page == 2:
             # We are creating a new account
-            server = self.xml.get_object('server_comboboxentry1').child.\
-                get_text().decode('utf-8')
+            server = self.xml.get_object('server_comboboxentry1').get_child().\
+                get_text()
 
             if not server:
                 dialogs.ErrorDialog(_('Invalid server'),
@@ -3712,7 +3732,7 @@ class AccountCreationWizardWindow:
             # Get advanced options
             proxies_combobox = self.xml.get_object('proxies_combobox')
             active = proxies_combobox.get_active()
-            proxy = proxies_combobox.get_model()[active][0].decode('utf-8')
+            proxy = proxies_combobox.get_model()[active][0]
             if proxy == _('None'):
                 proxy = ''
             config['proxy'] = proxy
@@ -3728,7 +3748,7 @@ class AccountCreationWizardWindow:
                 return
             config['custom_port'] = custom_port
             config['custom_host'] = self.xml.get_object(
-                'custom_host_entry').get_text().decode('utf-8')
+                'custom_host_entry').get_text()
 
             if self.xml.get_object('anonymous_checkbutton2').get_active():
                 self.modify = True
@@ -3738,7 +3758,7 @@ class AccountCreationWizardWindow:
                 self.notebook.set_current_page(5) # show creating page
                 self.back_button.hide()
                 self.forward_button.hide()
-                self.update_progressbar_timeout_id = gobject.timeout_add(100,
+                self.update_progressbar_timeout_id = GLib.timeout_add(100,
                     self.update_progressbar)
                 # Get form from serveur
                 con = connection.Connection(self.account)
@@ -3780,16 +3800,16 @@ class AccountCreationWizardWindow:
             self.notebook.set_current_page(5) # show creating page
             self.back_button.hide()
             self.forward_button.hide()
-            self.update_progressbar_timeout_id = gobject.timeout_add(100,
+            self.update_progressbar_timeout_id = GLib.timeout_add(100,
                 self.update_progressbar)
 
     def update_proxy_list(self):
         proxies_combobox = self.xml.get_object('proxies_combobox')
-        model = gtk.ListStore(str)
+        model = Gtk.ListStore(str)
         proxies_combobox.set_model(model)
         l = gajim.config.get_per('proxies')
         l.insert(0, _('None'))
-        for i in xrange(len(l)):
+        for i in range(len(l)):
             model.append([l[i]])
         proxies_combobox.set_active(0)
 
@@ -3816,7 +3836,7 @@ class AccountCreationWizardWindow:
         if obj.conn.name != self.account:
             return
         if self.update_progressbar_timeout_id is not None:
-            gobject.source_remove(self.update_progressbar_timeout_id)
+            GLib.source_remove(self.update_progressbar_timeout_id)
         self.back_button.show()
         self.forward_button.show()
         self.is_form = obj.is_form
@@ -3835,7 +3855,7 @@ class AccountCreationWizardWindow:
                 empty_config = False
                 break
         self.data_form_widget.show_all()
-        self.xml.get_object('form_vbox').pack_start(self.data_form_widget)
+        self.xml.get_object('form_vbox').pack_start(self.data_form_widget, True, True, 0)
         if empty_config:
             self.forward_button.set_sensitive(False)
             self.notebook.set_current_page(4) # show form page
@@ -3874,7 +3894,7 @@ class AccountCreationWizardWindow:
         if self.account not in gajim.connections:
             return
         if self.update_progressbar_timeout_id is not None:
-            gobject.source_remove(self.update_progressbar_timeout_id)
+            GLib.source_remove(self.update_progressbar_timeout_id)
         del gajim.connections[self.account]
         if self.account in gajim.config.get_per('accounts'):
             gajim.config.del_per('accounts', self.account)
@@ -3883,7 +3903,7 @@ class AccountCreationWizardWindow:
         self.go_online_checkbutton.hide()
         self.show_vcard_checkbutton.hide()
         img = self.xml.get_object('finish_image')
-        img.set_from_stock(gtk.STOCK_DIALOG_ERROR, gtk.ICON_SIZE_DIALOG)
+        img.set_from_stock(Gtk.STOCK_DIALOG_ERROR, Gtk.IconSize.DIALOG)
         finish_text = '<big><b>%s</b></big>\n\n%s' % (
             _('An error occurred during account creation'), obj.reason)
         self.finish_label.set_markup(finish_text)
@@ -3900,7 +3920,7 @@ class AccountCreationWizardWindow:
         self.show_finish_page()
 
         if self.update_progressbar_timeout_id is not None:
-            gobject.source_remove(self.update_progressbar_timeout_id)
+            GLib.source_remove(self.update_progressbar_timeout_id)
 
     def _nec_acc_is_not_ok(self, obj):
         """
@@ -3917,14 +3937,14 @@ class AccountCreationWizardWindow:
         if self.account in gajim.config.get_per('accounts'):
             gajim.config.del_per('accounts', self.account)
         img = self.xml.get_object('finish_image')
-        img.set_from_stock(gtk.STOCK_DIALOG_ERROR, gtk.ICON_SIZE_DIALOG)
+        img.set_from_stock(Gtk.STOCK_DIALOG_ERROR, Gtk.IconSize.DIALOG)
         finish_text = '<big><b>%s</b></big>\n\n%s' % (_(
             'An error occurred during account creation'), obj.reason)
         self.finish_label.set_markup(finish_text)
         self.notebook.set_current_page(6) # show finish page
 
         if self.update_progressbar_timeout_id is not None:
-            gobject.source_remove(self.update_progressbar_timeout_id)
+            GLib.source_remove(self.update_progressbar_timeout_id)
 
     def on_advanced_button_clicked(self, widget):
         if 'accounts' in gajim.interface.instances:
@@ -3945,15 +3965,15 @@ class AccountCreationWizardWindow:
 
     def on_username_entry_key_press_event(self, widget, event):
         # Check for pressed @ and jump to combobox if found
-        if event.keyval == gtk.keysyms.at:
+        if event.keyval == Gdk.KEY_at:
             combobox = self.xml.get_object('server_comboboxentry')
             combobox.grab_focus()
-            combobox.child.set_position(-1)
+            combobox.get_child().set_position(-1)
             return True
 
     def on_server_comboboxentry_key_press_event(self, widget, event, combobox):
         # If backspace is pressed in empty field, return to the nick entry field
-        backspace = event.keyval == gtk.keysyms.BackSpace
+        backspace = event.keyval == Gdk.KEY_BackSpace
         empty = len(combobox.get_active_text()) == 0
         if backspace and empty and self.modify:
             username_entry = self.xml.get_object('username_entry')
@@ -4082,14 +4102,14 @@ class ManagePEPServicesWindow:
     def init_services(self):
         self.treeview = self.xml.get_object('services_treeview')
         # service, access_model, group
-        self.treestore = gtk.ListStore(str)
+        self.treestore = Gtk.ListStore(str)
         self.treeview.set_model(self.treestore)
 
-        col = gtk.TreeViewColumn('Service')
+        col = Gtk.TreeViewColumn('Service')
         self.treeview.append_column(col)
 
-        cellrenderer_text = gtk.CellRendererText()
-        col.pack_start(cellrenderer_text)
+        cellrenderer_text = Gtk.CellRendererText()
+        col.pack_start(cellrenderer_text, True, True, 0)
         col.add_attribute(cellrenderer_text, 'text', 0)
 
         our_jid = gajim.get_jid_from_account(self.account)
@@ -4105,7 +4125,7 @@ class ManagePEPServicesWindow:
         if jid != gajim.get_jid_from_account(self.account):
             return
         model = self.treeview.get_model()
-        iter_ = model.get_iter_root()
+        iter_ = model.get_iter_first()
         while iter_:
             if model[iter_][0] == node:
                 model.remove(iter_)
@@ -4152,43 +4172,44 @@ class ManageSoundsWindow:
     def __init__(self):
         self.xml = gtkgui_helpers.get_gtk_builder('manage_sounds_window.ui')
         self.window = self.xml.get_object('manage_sounds_window')
-
+        self.window.set_transient_for(
+            gajim.interface.instances['preferences'].window)
         # sounds treeview
         self.sound_tree = self.xml.get_object('sounds_treeview')
 
         # active, event ui name, path to sound file, event_config_name
-        model = gtk.ListStore(bool, str, str, str)
+        model = Gtk.ListStore(bool, str, str, str)
         self.sound_tree.set_model(model)
 
-        col = gtk.TreeViewColumn(_('Active'))
+        col = Gtk.TreeViewColumn(_('Active'))
         self.sound_tree.append_column(col)
-        renderer = gtk.CellRendererToggle()
+        renderer = Gtk.CellRendererToggle()
         renderer.set_property('activatable', True)
         renderer.connect('toggled', self.sound_toggled_cb)
-        col.pack_start(renderer)
-        col.set_attributes(renderer, active = 0)
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'active', 0)
 
-        col = gtk.TreeViewColumn(_('Event'))
+        col = Gtk.TreeViewColumn(_('Event'))
         self.sound_tree.append_column(col)
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer)
-        col.set_attributes(renderer, text = 1)
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'text', 1)
 
         self.fill_sound_treeview()
 
         self.xml.connect_signals(self)
 
         self.sound_tree.get_model().connect('row-changed',
-                self.on_sounds_treemodel_row_changed)
+            self.on_sounds_treemodel_row_changed)
 
         self.window.show_all()
 
     def on_sounds_treemodel_row_changed(self, model, path, iter_):
-        sound_event = model[iter_][3].decode('utf-8')
+        sound_event = model[iter_][3]
         gajim.config.set_per('soundevents', sound_event, 'enabled',
-                                bool(model[path][0]))
+            bool(model[path][0]))
         gajim.config.set_per('soundevents', sound_event, 'path',
-                                model[iter_][2].decode('utf-8'))
+            model[iter_][2])
 
     def sound_toggled_cb(self, cell, path):
         model = self.sound_tree.get_model()
@@ -4197,7 +4218,7 @@ class ManageSoundsWindow:
     def fill_sound_treeview(self):
         model = self.sound_tree.get_model()
         model.clear()
-        model.set_sort_column_id(1, gtk.SORT_ASCENDING)
+        model.set_sort_column_id(1, Gtk.SortType.ASCENDING)
 
         # NOTE: sounds_ui_names MUST have all items of
         # sounds = gajim.config.get_per('soundevents') as keys
@@ -4223,8 +4244,12 @@ class ManageSoundsWindow:
             model.append((enabled, sound_ui_name, path, sound_event_config_name))
 
     def on_treeview_sounds_cursor_changed(self, widget, data = None):
-        (model, iter_) = self.sound_tree.get_selection().get_selected()
         sounds_entry = self.xml.get_object('sounds_entry')
+        sel = self.sound_tree.get_selection()
+        if not sel:
+            sounds_entry.set_text('')
+            return
+        (model, iter_) = sel.get_selected()
         if not iter_:
             sounds_entry.set_text('')
             return
@@ -4232,7 +4257,10 @@ class ManageSoundsWindow:
         sounds_entry.set_text(path_to_snd_file)
 
     def on_browse_for_sounds_button_clicked(self, widget, data = None):
-        (model, iter_) = self.sound_tree.get_selection().get_selected()
+        sel = self.sound_tree.get_selection()
+        if not sel:
+            return
+        (model, iter_) = sel.get_selected()
         if not iter_:
             return
         def on_ok(widget, path_to_snd_file):
@@ -4254,7 +4282,7 @@ class ManageSoundsWindow:
         def on_cancel(widget):
             self.dialog.destroy()
 
-        path_to_snd_file = model[iter_][2].decode('utf-8')
+        path_to_snd_file = model[iter_][2]
         self.dialog = dialogs.SoundChooserDialog(path_to_snd_file, on_ok,
                 on_cancel)
 
@@ -4264,7 +4292,10 @@ class ManageSoundsWindow:
         model[iter_][2] = path_to_snd_file # set new path to sounds_model
 
     def on_play_button_clicked(self, widget):
-        model, iter_ = self.sound_tree.get_selection().get_selected()
+        sel = self.sound_tree.get_selection()
+        if not sel:
+            return
+        model, iter_ = sel.get_selected()
         if not iter_:
             return
         snd_event_config_name = model[iter_][3]
diff --git a/src/conversation_textview.py b/src/conversation_textview.py
index 670b90de84018ed50f710d9aecf1b57e7a448204..ee27c0903e943e4214155793dbefbc4bd8b865bc 100644
--- a/src/conversation_textview.py
+++ b/src/conversation_textview.py
@@ -29,15 +29,18 @@
 
 from threading import Timer # for smooth scrolling
 
-import gtk
-import pango
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository import Pango
+from gi.repository import GObject
+from gi.repository import GLib
 import time
 import os
 import tooltips
 import dialogs
 import locale
-import Queue
+import queue
 import urllib
 
 import gtkgui_helpers
@@ -63,9 +66,10 @@ def is_selection_modified(mark):
         return False
 
 def has_focus(widget):
-    return widget.flags() & gtk.HAS_FOCUS == gtk.HAS_FOCUS
+    return widget.get_state_flags() & Gtk.StateFlags.FOCUSED == \
+        Gtk.StateFlags.FOCUSED
 
-class TextViewImage(gtk.Image):
+class TextViewImage(Gtk.Image):
 
     def __init__(self, anchor, text):
         super(TextViewImage, self).__init__()
@@ -73,9 +77,9 @@ class TextViewImage(gtk.Image):
         self._selected = False
         self._disconnect_funcs = []
         self.connect('parent-set', self.on_parent_set)
-        self.connect('expose-event', self.on_expose)
+        self.connect('draw', self.on_expose)
         self.set_tooltip_markup(text)
-        self.anchor.set_data('plaintext', text)
+        self.anchor.plaintext = text
 
     def _get_selected(self):
         parent = self.get_parent()
@@ -91,14 +95,14 @@ class TextViewImage(gtk.Image):
     def get_state(self):
         parent = self.get_parent()
         if not parent:
-            return gtk.STATE_NORMAL
+            return Gtk.StateType.NORMAL
         if self._selected:
             if has_focus(parent):
-                return gtk.STATE_SELECTED
+                return Gtk.StateType.SELECTED
             else:
-                return gtk.STATE_ACTIVE
+                return Gtk.StateType.ACTIVE
         else:
-            return gtk.STATE_NORMAL
+            return Gtk.StateType.NORMAL
 
     def _update_selected(self):
         selected = self._get_selected()
@@ -149,30 +153,26 @@ class TextViewImage(gtk.Image):
 
     def on_expose(self, widget, event):
         state = self.get_state()
-        if state != gtk.STATE_NORMAL:
+        if state != Gtk.StateType.NORMAL:
             gc = widget.get_style().base_gc[state]
             area = widget.allocation
-            widget.window.draw_rectangle(gc, True, area.x, area.y,
-                    area.width, area.height)
+            widget.get_window(Gtk.TextWindowType.TEXT).draw_rectangle(gc, True,
+                area.x, area.y, area.width, area.height)
         return False
 
 
-class ConversationTextview(gobject.GObject):
+class ConversationTextview(GObject.GObject):
     """
     Class for the conversation textview (where user reads already said messages)
     for chat/groupchat windows
     """
     __gsignals__ = dict(
-            quote = (gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION,
+            quote = (GObject.SignalFlags.RUN_LAST | GObject.SignalFlags.ACTION,
                     None, # return value
                     (str, ) # arguments
             )
     )
 
-    FOCUS_OUT_LINE_PIXBUF = gtkgui_helpers.get_icon_pixmap(
-        'gajim-muc_separator')
-    XEP0184_WARNING_PIXBUF = gtkgui_helpers.get_icon_pixmap('gtk-no')
-    XEP0184_RECEIVED_PIXBUF = gtkgui_helpers.get_icon_pixmap('gtk-yes')
     MESSAGE_CORRECTED_PIXBUF = gtkgui_helpers.get_icon_pixmap('gtk-spell-check')
 
     # smooth scroll constants
@@ -184,7 +184,7 @@ class ConversationTextview(gobject.GObject):
         If used_in_history_window is True, then we do not show Clear menuitem in
         context menu
         """
-        gobject.GObject.__init__(self)
+        GObject.GObject.__init__(self)
         self.used_in_history_window = used_in_history_window
 
         self.fc = FuzzyClock()
@@ -199,7 +199,7 @@ class ConversationTextview(gobject.GObject):
         self.tv.set_accepts_tab(True)
         self.tv.set_editable(False)
         self.tv.set_cursor_visible(False)
-        self.tv.set_wrap_mode(gtk.WRAP_WORD_CHAR)
+        self.tv.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
         self.tv.set_left_margin(2)
         self.tv.set_right_margin(2)
         self.handlers = {}
@@ -224,8 +224,7 @@ class ConversationTextview(gobject.GObject):
                 self.on_textview_button_press_event)
         self.handlers[id_] = self.tv
 
-        id_ = self.tv.connect('expose-event',
-                self.on_textview_expose_event)
+        id_ = self.tv.connect('draw', self.on_textview_draw)
         self.handlers[id_] = self.tv
 
 
@@ -233,33 +232,33 @@ class ConversationTextview(gobject.GObject):
         self.change_cursor = False
         self.last_time_printout = 0
 
-        font = pango.FontDescription(gajim.config.get('conversation_font'))
-        self.tv.modify_font(font)
+        font = Pango.FontDescription(gajim.config.get('conversation_font'))
+        self.tv.override_font(font)
         buffer_ = self.tv.get_buffer()
         end_iter = buffer_.get_end_iter()
         buffer_.create_mark('end', end_iter, False)
 
         self.tagIn = buffer_.create_tag('incoming')
         color = gajim.config.get('inmsgcolor')
-        font = pango.FontDescription(gajim.config.get('inmsgfont'))
+        font = Pango.FontDescription(gajim.config.get('inmsgfont'))
         self.tagIn.set_property('foreground', color)
         self.tagIn.set_property('font-desc', font)
 
         self.tagOut = buffer_.create_tag('outgoing')
         color = gajim.config.get('outmsgcolor')
-        font = pango.FontDescription(gajim.config.get('outmsgfont'))
+        font = Pango.FontDescription(gajim.config.get('outmsgfont'))
         self.tagOut.set_property('foreground', color)
         self.tagOut.set_property('font-desc', font)
 
         self.tagStatus = buffer_.create_tag('status')
         color = gajim.config.get('statusmsgcolor')
-        font = pango.FontDescription(gajim.config.get('satusmsgfont'))
+        font = Pango.FontDescription(gajim.config.get('satusmsgfont'))
         self.tagStatus.set_property('foreground', color)
         self.tagStatus.set_property('font-desc', font)
 
         self.tagInText = buffer_.create_tag('incomingtxt')
         color = gajim.config.get('inmsgtxtcolor')
-        font = pango.FontDescription(gajim.config.get('inmsgtxtfont'))
+        font = Pango.FontDescription(gajim.config.get('inmsgtxtfont'))
         if color:
             self.tagInText.set_property('foreground', color)
         self.tagInText.set_property('font-desc', font)
@@ -267,7 +266,7 @@ class ConversationTextview(gobject.GObject):
         self.tagOutText = buffer_.create_tag('outgoingtxt')
         color = gajim.config.get('outmsgtxtcolor')
         if color:
-            font = pango.FontDescription(gajim.config.get('outmsgtxtfont'))
+            font = Pango.FontDescription(gajim.config.get('outmsgtxtfont'))
         self.tagOutText.set_property('foreground', color)
         self.tagOutText.set_property('font-desc', font)
 
@@ -281,40 +280,46 @@ class ConversationTextview(gobject.GObject):
         self.tagMarked = buffer_.create_tag('marked')
         color = gajim.config.get('markedmsgcolor')
         self.tagMarked.set_property('foreground', color)
-        self.tagMarked.set_property('weight', pango.WEIGHT_BOLD)
+        self.tagMarked.set_property('weight', Pango.Weight.BOLD)
 
         tag = buffer_.create_tag('time_sometimes')
         tag.set_property('foreground', 'darkgrey')
-        tag.set_property('scale', pango.SCALE_SMALL)
-        tag.set_property('justification', gtk.JUSTIFY_CENTER)
+        #Pango.SCALE_SMALL
+        tag.set_property('scale', 0.8333333333333)
+        tag.set_property('justification', Gtk.Justification.CENTER)
 
         tag = buffer_.create_tag('small')
-        tag.set_property('scale', pango.SCALE_SMALL)
+        #Pango.SCALE_SMALL
+        tag.set_property('scale', 0.8333333333333)
 
         tag = buffer_.create_tag('restored_message')
         color = gajim.config.get('restored_messages_color')
         tag.set_property('foreground', color)
 
         self.tv.create_tags()
-
+        
         tag = buffer_.create_tag('bold')
-        tag.set_property('weight', pango.WEIGHT_BOLD)
+        tag.set_property('weight', Pango.Weight.BOLD)
 
         tag = buffer_.create_tag('italic')
-        tag.set_property('style', pango.STYLE_ITALIC)
+        tag.set_property('style', Pango.Style.ITALIC)
 
         tag = buffer_.create_tag('underline')
-        tag.set_property('underline', pango.UNDERLINE_SINGLE)
+        tag.set_property('underline', Pango.Underline.SINGLE)
 
-        buffer_.create_tag('focus-out-line', justification = gtk.JUSTIFY_CENTER)
+        buffer_.create_tag('focus-out-line', justification = Gtk.Justification.CENTER)
         self.displaymarking_tags = {}
 
         tag = buffer_.create_tag('xep0184-warning')
+        tag.set_property('foreground', '#cc0000')
+
+        tag = buffer_.create_tag('xep0184-received')
+        tag.set_property('foreground', '#73d216')
 
         # One mark at the begining then 2 marks between each lines
         size = gajim.config.get('max_conversation_lines')
         size = 2 * size - 1
-        self.marks_queue = Queue.Queue(size)
+        self.marks_queue = queue.Queue(size)
 
         self.allow_focus_out_line = True
         # holds a mark at the end of --- line
@@ -323,8 +328,6 @@ class ConversationTextview(gobject.GObject):
         self.xep0184_warning_tooltip = tooltips.BaseTooltip()
 
         self.line_tooltip = tooltips.BaseTooltip()
-        # use it for hr too
-        self.tv.focus_out_line_pixbuf = ConversationTextview.FOCUS_OUT_LINE_PIXBUF
         self.smooth_id = None
         self.just_cleared = False
 
@@ -365,7 +368,7 @@ class ConversationTextview(gobject.GObject):
         if not parent:
             return False
         vadj = parent.get_vadjustment()
-        max_val = vadj.upper - vadj.page_size + 1
+        max_val = vadj.get_upper() - vadj.get_page_size() + 1
         cur_val = vadj.get_value()
         # scroll by 1/3rd of remaining distance
         onethird = cur_val + ((max_val - cur_val) / 3.0)
@@ -379,26 +382,26 @@ class ConversationTextview(gobject.GObject):
         return True
 
     def smooth_scroll_timeout(self):
-        gobject.idle_add(self.do_smooth_scroll_timeout)
+        GLib.idle_add(self.do_smooth_scroll_timeout)
         return
 
     def do_smooth_scroll_timeout(self):
         if not self.smooth_id:
             # we finished scrolling
             return
-        gobject.source_remove(self.smooth_id)
+        GLib.source_remove(self.smooth_id)
         self.smooth_id = None
         parent = self.tv.get_parent()
         if parent:
             vadj = parent.get_vadjustment()
             self.auto_scrolling = True
-            vadj.set_value(vadj.upper - vadj.page_size + 1)
+            vadj.set_value(vadj.get_upper() - vadj.get_page_size() + 1)
             self.auto_scrolling = False
 
     def smooth_scroll_to_end(self):
         if None != self.smooth_id: # already scrolling
             return False
-        self.smooth_id = gobject.timeout_add(self.SCROLL_DELAY,
+        self.smooth_id = GLib.timeout_add(self.SCROLL_DELAY,
                 self.smooth_scroll)
         self.smooth_scroll_timer = Timer(self.MAX_SCROLL_TIME,
                 self.smooth_scroll_timeout)
@@ -428,9 +431,9 @@ class ConversationTextview(gobject.GObject):
         # scroll only if expected end is not visible
         if end_rect.y >= (visible_rect.y + visible_rect.height + diff_y):
             if use_smooth:
-                gobject.idle_add(self.smooth_scroll_to_end)
+                GLib.idle_add(self.smooth_scroll_to_end)
             else:
-                gobject.idle_add(self.scroll_to_end_iter)
+                GLib.idle_add(self.scroll_to_end_iter)
 
     def scroll_to_end_iter(self):
         buffer_ = self.tv.get_buffer()
@@ -442,7 +445,7 @@ class ConversationTextview(gobject.GObject):
 
     def stop_scrolling(self):
         if self.smooth_id:
-            gobject.source_remove(self.smooth_id)
+            GLib.source_remove(self.smooth_id)
             self.smooth_id = None
             self.smooth_scroll_timer.cancel()
 
@@ -463,7 +466,7 @@ class ConversationTextview(gobject.GObject):
         buffer_ = self.tv.get_buffer()
         i1 = buffer_.get_iter_at_mark(m1)
         i2 = buffer_.get_iter_at_mark(m2)
-        txt = buffer_.get_text(i1, i2)
+        txt = buffer_.get_text(i1, i2, True)
         buffer_.delete(i1, i2)
         tag = 'outgoingtxt'
         if message.startswith('/me'):
@@ -471,7 +474,7 @@ class ConversationTextview(gobject.GObject):
         i2 = self.print_conversation_line(message, '', 'outgoing', name, None,
             xhtml=xhtml, iter_=i1)
         tt_txt = _('<b>Message was corrected. Last message was:</b>\n  %s') % \
-            gobject.markup_escape_text(old_txt)
+            GLib.markup_escape_text(old_txt)
         self.show_corrected_message_warning(i2, tt_txt)
         self.last_sent_message_marks[1] = buffer_.create_mark(None, i2,
             left_gravity=True)
@@ -484,12 +487,12 @@ class ConversationTextview(gobject.GObject):
         buffer_ = self.tv.get_buffer()
         i1 = buffer_.get_iter_at_mark(m1)
         i2 = buffer_.get_iter_at_mark(m2)
-        txt = buffer_.get_text(i1, i2)
+        txt = buffer_.get_text(i1, i2, True)
         buffer_.delete(i1, i2)
         i2 = self.print_conversation_line(message, '', 'incoming', name, None,
             xhtml=xhtml, iter_=i1)
         tt_txt = _('<b>Message was corrected. Last message was:</b>\n  %s') % \
-            gobject.markup_escape_text(old_txt)
+            GLib.markup_escape_text(old_txt)
         self.show_corrected_message_warning(i2, tt_txt)
         self.last_received_message_marks[name][1] = buffer_.create_mark(None, i2,
             left_gravity=True)
@@ -511,22 +514,11 @@ class ConversationTextview(gobject.GObject):
                 return False
 
             end_iter = buffer_.get_iter_at_mark(self.xep0184_marks[id_])
-            buffer_.insert(end_iter, ' ')
-            anchor = buffer_.create_child_anchor(end_iter)
-            img = TextViewImage(anchor, '')
-            img.set_from_pixbuf(ConversationTextview.XEP0184_WARNING_PIXBUF)
-            img.show()
-            self.tv.add_child_at_anchor(img, anchor)
-            before_img_iter = buffer_.get_iter_at_mark(self.xep0184_marks[id_])
-            before_img_iter.forward_char()
-            post_img_iter = before_img_iter.copy()
-            post_img_iter.forward_char()
-            buffer_.apply_tag_by_name('xep0184-warning', before_img_iter,
-                    post_img_iter)
+            buffer_.insert_with_tags_by_name(end_iter, ' ✖', 'xep0184-warning')
 
             self.xep0184_shown[id_] = SHOWN
             return False
-        gobject.timeout_add_seconds(3, show_it)
+        GLib.timeout_add_seconds(3, show_it)
 
         buffer_.end_user_action()
 
@@ -549,12 +541,8 @@ class ConversationTextview(gobject.GObject):
 
         if gajim.config.get('positive_184_ack'):
             begin_iter = buffer_.get_iter_at_mark(self.xep0184_marks[id_])
-            buffer_.insert(begin_iter, ' ')
-            anchor = buffer_.create_child_anchor(begin_iter)
-            img = TextViewImage(anchor, '')
-            img.set_from_pixbuf(ConversationTextview.XEP0184_RECEIVED_PIXBUF)
-            img.show()
-            self.tv.add_child_at_anchor(img, anchor)
+            buffer_.insert_with_tags_by_name(begin_iter, ' ✓',
+                'xep0184-received')
 
         self.xep0184_shown[id_] = ALREADY_RECEIVED
 
@@ -595,7 +583,7 @@ class ConversationTextview(gobject.GObject):
                         self.focus_out_end_mark)
                 begin_iter_for_previous_line = end_iter_for_previous_line.copy()
                 # img_char+1 (the '\n')
-                begin_iter_for_previous_line.backward_chars(2)
+                begin_iter_for_previous_line.backward_chars(21)
 
                 # remove focus out line
                 buffer_.delete(begin_iter_for_previous_line,
@@ -604,14 +592,12 @@ class ConversationTextview(gobject.GObject):
 
             # add the new focus out line
             end_iter = buffer_.get_end_iter()
-            buffer_.insert(end_iter, '\n')
-            buffer_.insert_pixbuf(end_iter,
-                    ConversationTextview.FOCUS_OUT_LINE_PIXBUF)
+            buffer_.insert(end_iter, '\n' + '―' * 20)
 
             end_iter = buffer_.get_end_iter()
             before_img_iter = end_iter.copy()
             # one char back (an image also takes one char)
-            before_img_iter.backward_char()
+            before_img_iter.backward_chars(20)
             buffer_.apply_tag_by_name('focus-out-line', before_img_iter, end_iter)
 
             self.allow_focus_out_line = False
@@ -625,12 +611,14 @@ class ConversationTextview(gobject.GObject):
             if scroll:
                 # scroll to the end (via idle in case the scrollbar has
                 # appeared)
-                gobject.idle_add(self.scroll_to_end)
+                GLib.idle_add(self.scroll_to_end)
 
     def show_xep0184_warning_tooltip(self):
-        pointer = self.tv.get_pointer()
-        x, y = self.tv.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT,
-                pointer[0], pointer[1])
+        w = self.tv.get_window(Gtk.TextWindowType.TEXT)
+        device = w.get_display().get_device_manager().get_client_pointer()
+        pointer = w.get_device_position(device)
+        x = pointer[1]
+        y = pointer[2]
         tags = self.tv.get_iter_at_location(x, y).get_tags()
         tag_table = self.tv.get_buffer().get_tag_table()
         xep0184_warning = False
@@ -640,16 +628,18 @@ class ConversationTextview(gobject.GObject):
                 break
         if xep0184_warning and not self.xep0184_warning_tooltip.win:
             # check if the current pointer is still over the line
-            position = self.tv.window.get_origin()
-            self.xep0184_warning_tooltip.show_tooltip(_('This icon indicates that '
-                    'this message has not yet\nbeen received by the remote end. '
-                    "If this icon stays\nfor a long time, it's likely the message got "
-                    'lost.'), 8, position[1] + pointer[1])
+            position = w.get_origin()[1:]
+            self.xep0184_warning_tooltip.show_tooltip(_('This icon indicates '
+                'that this message has not yet\nbeen received by the remote '
+                "end. If this icon stays\nfor a long time, it's likely the "
+                'message got lost.'), 8, position[1] + y)
 
     def show_line_tooltip(self):
-        pointer = self.tv.get_pointer()
-        x, y = self.tv.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT,
-                pointer[0], pointer[1])
+        w = self.tv.get_window(Gtk.TextWindowType.TEXT)
+        device = w.get_display().get_device_manager().get_client_pointer()
+        pointer = w.get_device_position(device)
+        x = pointer[1]
+        y = pointer[2]
         tags = self.tv.get_iter_at_location(x, y).get_tags()
         tag_table = self.tv.get_buffer().get_tag_table()
         over_line = False
@@ -659,12 +649,14 @@ class ConversationTextview(gobject.GObject):
                 break
         if over_line and not self.line_tooltip.win:
             # check if the current pointer is still over the line
-            position = self.tv.window.get_origin()
+            position = w.get_origin()[1:]
             self.line_tooltip.show_tooltip(_('Text below this line is what has '
-                    'been said since the\nlast time you paid attention to this group '
-                    'chat'), 8, position[1] + pointer[1])
+                'been said since the\nlast time you paid attention to this '
+                'group chat'), 8, position[1] + y)
 
-    def on_textview_expose_event(self, widget, event):
+    def on_textview_draw(self, widget, ctx):
+        return
+        #TODO
         expalloc = event.area
         exp_x0 = expalloc.x
         exp_y0 = expalloc.y
@@ -694,22 +686,23 @@ class ConversationTextview(gobject.GObject):
         """
         Change the cursor to a hand when we are over a mail or an url
         """
-        pointer_x, pointer_y = self.tv.window.get_pointer()[0:2]
-        x, y = self.tv.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT,
-                pointer_x, pointer_y)
+        w = self.tv.get_window(Gtk.TextWindowType.TEXT)
+        device = w.get_display().get_device_manager().get_client_pointer()
+        pointer = w.get_device_position(device)
+        x, y = self.tv.window_to_buffer_coords(Gtk.TextWindowType.TEXT,
+            pointer[1], pointer[2])
         tags = self.tv.get_iter_at_location(x, y).get_tags()
         if self.change_cursor:
-            self.tv.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(
-                    gtk.gdk.Cursor(gtk.gdk.XTERM))
+            w.set_cursor(Gdk.Cursor.new(Gdk.CursorType.XTERM))
             self.change_cursor = False
         tag_table = self.tv.get_buffer().get_tag_table()
         over_line = False
         xep0184_warning = False
+
         for tag in tags:
             if tag in (tag_table.lookup('url'), tag_table.lookup('mail'), \
             tag_table.lookup('xmpp'), tag_table.lookup('sth_at_sth')):
-                self.tv.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(
-                        gtk.gdk.Cursor(gtk.gdk.HAND2))
+                w.set_cursor(Gdk.Cursor.new(Gdk.CursorType.HAND2))
                 self.change_cursor = True
             elif tag == tag_table.lookup('focus-out-line'):
                 over_line = True
@@ -725,16 +718,14 @@ class ConversationTextview(gobject.GObject):
             if not xep0184_warning:
                 self.xep0184_warning_tooltip.hide_tooltip()
         if over_line and not self.line_tooltip.win:
-            self.line_tooltip.timeout = gobject.timeout_add(500,
+            self.line_tooltip.timeout = GLib.timeout_add(500,
                     self.show_line_tooltip)
-            self.tv.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(
-                    gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
+            w.set_cursor(Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR))
             self.change_cursor = True
         if xep0184_warning and not self.xep0184_warning_tooltip.win:
-            self.xep0184_warning_tooltip.timeout = gobject.timeout_add(500,
+            self.xep0184_warning_tooltip.timeout = GLib.timeout_add(500,
                     self.show_xep0184_warning_tooltip)
-            self.tv.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(
-                    gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
+            w.set_cursor(Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR))
             self.change_cursor = True
 
     def clear(self, tv = None):
@@ -746,7 +737,7 @@ class ConversationTextview(gobject.GObject):
         buffer_.delete(start, end)
         size = gajim.config.get('max_conversation_lines')
         size = 2 * size - 1
-        self.marks_queue = Queue.Queue(size)
+        self.marks_queue = queue.Queue(size)
         self.focus_out_end_mark = None
         self.just_cleared = True
 
@@ -765,33 +756,35 @@ class ConversationTextview(gobject.GObject):
         """
         separator_menuitem_was_added = False
         if not self.used_in_history_window:
-            item = gtk.SeparatorMenuItem()
+            item = Gtk.SeparatorMenuItem.new()
             menu.prepend(item)
             separator_menuitem_was_added = True
 
-            item = gtk.ImageMenuItem(gtk.STOCK_CLEAR)
+            item = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_CLEAR, None)
             menu.prepend(item)
             id_ = item.connect('activate', self.clear)
             self.handlers[id_] = item
 
         if self.selected_phrase:
             if not separator_menuitem_was_added:
-                item = gtk.SeparatorMenuItem()
+                item = Gtk.SeparatorMenuItem.new()
                 menu.prepend(item)
 
             if not self.used_in_history_window:
-                item = gtk.MenuItem(_('_Quote'))
+                item = Gtk.MenuItem.new_with_mnemonic(_('_Quote'))
                 id_ = item.connect('activate', self.on_quote)
                 self.handlers[id_] = item
                 menu.prepend(item)
 
             _selected_phrase = helpers.reduce_chars_newlines(
                     self.selected_phrase, 25, 2)
-            item = gtk.MenuItem(_('_Actions for "%s"') % _selected_phrase)
+            item = Gtk.MenuItem.new_with_mnemonic(
+                _('_Actions for "%s"') % _selected_phrase)
             menu.prepend(item)
-            submenu = gtk.Menu()
+            submenu = Gtk.Menu()
             item.set_submenu(submenu)
-            phrase_for_url = urllib.quote(self.selected_phrase.encode('utf-8'))
+            phrase_for_url = urllib.parse.quote(self.selected_phrase.encode(
+                'utf-8'))
 
             always_use_en = gajim.config.get('always_english_wikipedia')
             if always_use_en:
@@ -800,12 +793,12 @@ class ConversationTextview(gobject.GObject):
             else:
                 link = 'http://%s.wikipedia.org/wiki/Special:Search?search=%s'\
                         % (gajim.LANG, phrase_for_url)
-            item = gtk.MenuItem(_('Read _Wikipedia Article'))
+            item = Gtk.MenuItem.new_with_mnemonic(_('Read _Wikipedia Article'))
             id_ = item.connect('activate', self.visit_url_from_menuitem, link)
             self.handlers[id_] = item
             submenu.append(item)
 
-            item = gtk.MenuItem(_('Look it up in _Dictionary'))
+            item = Gtk.MenuItem.new_with_mnemonic(_('Look it up in _Dictionary'))
             dict_link = gajim.config.get('dictionary_url')
             if dict_link == 'WIKTIONARY':
                 # special link (yeah undocumented but default)
@@ -821,7 +814,7 @@ class ConversationTextview(gobject.GObject):
             else:
                 if dict_link.find('%s') == -1:
                     # we must have %s in the url if not WIKTIONARY
-                    item = gtk.MenuItem(_(
+                    item = Gtk.MenuItem(_(
                             'Dictionary URL is missing an "%s" and it is not WIKTIONARY'))
                     item.set_property('sensitive', False)
                 else:
@@ -835,16 +828,16 @@ class ConversationTextview(gobject.GObject):
             search_link = gajim.config.get('search_engine')
             if search_link.find('%s') == -1:
                 # we must have %s in the url
-                item = gtk.MenuItem(_('Web Search URL is missing an "%s"'))
+                item = Gtk.MenuItem(_('Web Search URL is missing an "%s"'))
                 item.set_property('sensitive', False)
             else:
-                item = gtk.MenuItem(_('Web _Search for it'))
+                item = Gtk.MenuItem.new_with_mnemonic(_('Web _Search for it'))
                 link =  search_link % phrase_for_url
                 id_ = item.connect('activate', self.visit_url_from_menuitem, link)
                 self.handlers[id_] = item
             submenu.append(item)
 
-            item = gtk.MenuItem(_('Open as _Link'))
+            item = Gtk.MenuItem.new_with_mnemonic(_('Open as _Link'))
             id_ = item.connect('activate', self.visit_url_from_menuitem, link)
             self.handlers[id_] = item
             submenu.append(item)
@@ -862,12 +855,11 @@ class ConversationTextview(gobject.GObject):
         if event.button != 3: # if not right click
             return False
 
-        x, y = self.tv.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT,
+        x, y = self.tv.window_to_buffer_coords(Gtk.TextWindowType.TEXT,
                 int(event.x), int(event.y))
         iter_ = self.tv.get_iter_at_location(x, y)
         tags = iter_.get_tags()
 
-
         if tags: # we clicked on sth special (it can be status message too)
             for tag in tags:
                 tag_name = tag.get_property('name')
@@ -882,9 +874,8 @@ class ConversationTextview(gobject.GObject):
         if return_val: # if sth was selected when we right-clicked
             # get the selected text
             start_sel, finish_sel = return_val[0], return_val[1]
-            self.selected_phrase = buffer_.get_text(start_sel, finish_sel).decode(
-                    'utf-8')
-        elif ord(iter_.get_char()) > 31:
+            self.selected_phrase = buffer_.get_text(start_sel, finish_sel, True)
+        elif iter_.get_char() and ord(iter_.get_char()) > 31:
             # we clicked on a word, do as if it's selected for context menu
             start_sel = iter_.copy()
             if not start_sel.starts_word():
@@ -892,15 +883,14 @@ class ConversationTextview(gobject.GObject):
             finish_sel = iter_.copy()
             if not finish_sel.ends_word():
                 finish_sel.forward_word_end()
-            self.selected_phrase = buffer_.get_text(start_sel, finish_sel).decode(
-                    'utf-8')
+            self.selected_phrase = buffer_.get_text(start_sel, finish_sel, True)
 
     def on_open_link_activate(self, widget, kind, text):
         helpers.launch_browser_mailer(kind, text)
 
     def on_copy_link_activate(self, widget, text):
-        clip = gtk.clipboard_get()
-        clip.set_text(text)
+        clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
+        clip.set_text(text, -1)
 
     def on_start_chat_activate(self, widget, jid):
         gajim.interface.new_chat_from_jid(self.account, jid)
@@ -982,10 +972,11 @@ class ConversationTextview(gobject.GObject):
                 childs[0].hide() # copy link location
             childs[1].hide() # open link in browser
 
-        menu.popup(None, None, None, event.button, event.time)
+        menu.attach_to_widget(self.tv, None)
+        menu.popup(None, None, None, None, event.button.button, event.time)
 
     def hyperlink_handler(self, texttag, widget, event, iter_, kind):
-        if event.type == gtk.gdk.BUTTON_PRESS:
+        if event.type == Gdk.EventType.BUTTON_PRESS:
             begin_iter = iter_.copy()
             # we get the begining of the tag
             while not begin_iter.begins_tag(texttag):
@@ -1006,10 +997,8 @@ class ConversationTextview(gobject.GObject):
                     # it's a JID or mail
                     kind = 'sth_at_sth'
             else:
-                word = self.tv.get_buffer().get_text(begin_iter, end_iter).decode(
-                    'utf-8')
-
-            if event.button == 3: # right click
+                word = self.tv.get_buffer().get_text(begin_iter, end_iter, True)
+            if event.button.button == 3: # right click
                 self.make_link_menu(event, kind, word)
                 return True
             else:
@@ -1036,13 +1025,17 @@ class ConversationTextview(gobject.GObject):
         after *last* special text, so we can print it in
         print_conversation_line()
         """
+        if not otext:
+            return
         buffer_ = self.tv.get_buffer()
-
-        insert_tags_func = buffer_.insert_with_tags_by_name
+        if other_tags:
+            insert_tags_func = buffer_.insert_with_tags_by_name
+        else:
+            insert_tags_func = buffer_.insert
         # detect_and_print_special_text() is also used by
-        # HtmlHandler.handle_specials() and there tags is gtk.TextTag objects,
+        # HtmlHandler.handle_specials() and there tags is Gtk.TextTag objects,
         # not strings
-        if other_tags and isinstance(other_tags[0], gtk.TextTag):
+        if other_tags and isinstance(other_tags[0], Gtk.TextTag):
             insert_tags_func = buffer_.insert_with_tags
 
         index = 0
@@ -1070,7 +1063,10 @@ class ConversationTextview(gobject.GObject):
                 if not iter_:
                     end_iter = buffer_.get_end_iter()
                 # we insert normal text
-                insert_tags_func(end_iter, text_before_special_text, *other_tags)
+                if other_tags:
+                    insert_tags_func(end_iter, text_before_special_text, *other_tags)
+                else:
+                    buffer_.insert(end_iter, text_before_special_text)
             index = end # update index
 
             # now print it
@@ -1132,10 +1128,11 @@ class ConversationTextview(gobject.GObject):
             # it's an emoticon
             emot_ascii = possible_emot_ascii_caps
             anchor = buffer_.create_child_anchor(end_iter)
-            img = TextViewImage(anchor, special_text)
+            img = TextViewImage(anchor,
+                GLib.markup_escape_text(special_text))
             animations = gajim.interface.emoticons_animations
             if not emot_ascii in animations:
-                animations[emot_ascii] = gtk.gdk.PixbufAnimation(
+                animations[emot_ascii] = GdkPixbuf.PixbufAnimation.new_from_file(
                     gajim.interface.emoticons[emot_ascii])
             img.set_from_animation(animations[emot_ascii])
             img.show()
@@ -1203,10 +1200,12 @@ class ConversationTextview(gobject.GObject):
             # It's nothing special
             if use_other_tags:
                 insert_tags_func = buffer_.insert_with_tags_by_name
-                if other_tags and isinstance(other_tags[0], gtk.TextTag):
+                if other_tags and isinstance(other_tags[0], Gtk.TextTag):
                     insert_tags_func = buffer_.insert_with_tags
-
-                insert_tags_func(end_iter, special_text, *other_tags)
+                if other_tags:
+                    insert_tags_func(end_iter, special_text, *other_tags)
+                else:
+                    buffer_.insert(end_iter, special_text)
 
         if tags:
             all_tags = tags[:]
@@ -1216,7 +1215,7 @@ class ConversationTextview(gobject.GObject):
             all_tags = [(ttt.lookup(t) if isinstance(t, str) else t) for t in all_tags]
             buffer_.insert_with_tags(end_iter, special_text, *all_tags)
             if 'url' in tags:
-                puny_text = puny_encode(special_text)
+                puny_text = puny_encode(special_text).decode('utf-8')
                 if not puny_text.endswith('-'):
                     puny_tags = []
                     if use_other_tags:
@@ -1287,9 +1286,9 @@ class ConversationTextview(gobject.GObject):
             tim = time.localtime()
         current_print_time = gajim.config.get('print_time')
         if text.startswith('/me '):
-            direction_mark = i18n.paragraph_direction_mark(unicode(text[3:]))
+            direction_mark = i18n.paragraph_direction_mark(str(text[3:]))
         else:
-            direction_mark = i18n.paragraph_direction_mark(unicode(text))
+            direction_mark = i18n.paragraph_direction_mark(text)
         # don't apply direction mark if it's status message
         if kind == 'status':
             direction_mark = i18n.direction_mark
@@ -1297,8 +1296,11 @@ class ConversationTextview(gobject.GObject):
             timestamp_str = self.get_time_to_show(tim, direction_mark)
             timestamp = time.strftime(timestamp_str, tim)
             timestamp = direction_mark + timestamp + direction_mark
-            buffer_.insert_with_tags_by_name(end_iter, timestamp,
-                *other_tags_for_time)
+            if other_tags_for_time:
+                buffer_.insert_with_tags_by_name(end_iter, timestamp,
+                    *other_tags_for_time)
+            else:
+                buffer_.insert (end_iter, timestamp)
         elif current_print_time == 'sometimes' and kind != 'info' and not simple:
             every_foo_seconds = 60 * gajim.config.get(
                 'print_ichat_every_foo_minutes')
@@ -1312,7 +1314,7 @@ class ConversationTextview(gobject.GObject):
                 else:
                     tim_format = self.get_time_to_show(tim, direction_mark)
                 buffer_.insert_with_tags_by_name(end_iter, tim_format + '\n',
-                        'time_sometimes')
+                    'time_sometimes')
         # If there's a displaymarking, print it here.
         if displaymarking:
             self.print_displaymarking(displaymarking, iter_=end_iter)
@@ -1368,9 +1370,9 @@ class ConversationTextview(gobject.GObject):
             # we are at the end or we are sending something
             # scroll to the end (via idle in case the scrollbar has appeared)
             if gajim.config.get('use_smooth_scrolling'):
-                gobject.idle_add(self.smooth_scroll_to_end)
+                GLib.idle_add(self.smooth_scroll_to_end)
             else:
-                gobject.idle_add(self.scroll_to_end)
+                GLib.idle_add(self.scroll_to_end)
 
         self.just_cleared = False
         buffer_.end_user_action()
@@ -1385,9 +1387,9 @@ class ConversationTextview(gobject.GObject):
         # get difference in days since epoch (86400 = 24*3600)
         # number of days since epoch for current time (in GMT) -
         # number of days since epoch for message (in GMT)
-        diff_day = int(timegm(time.localtime())) / 86400 -\
-                int(timegm(tim)) / 86400
-        if diff_day == 0:
+        diff_day = int(int(timegm(time.localtime())) / 86400 -\
+                int(timegm(tim)) / 86400)
+        if diff_day == 0.0:
             day_str = ''
         else:
             #%i is day in year (1-365)
@@ -1400,10 +1402,6 @@ class ConversationTextview(gobject.GObject):
         timestamp_str = helpers.from_one_line(timestamp_str)
         format_ += timestamp_str
         tim_format = time.strftime(format_, tim)
-        if locale.getpreferredencoding() not in ('KOI8-R', 'cp1251'):
-            # if tim_format comes as unicode because of day_str.
-            # we convert it to the encoding that we want (and that is utf-8)
-            tim_format = helpers.ensure_utf8_string(tim_format)
         return tim_format
 
     def detect_other_text_tag(self, text, kind):
@@ -1465,11 +1463,10 @@ class ConversationTextview(gobject.GObject):
             try:
                 if name and (text.startswith('/me ') or text.startswith('/me\n')):
                     xhtml = xhtml.replace('/me', '<i>* %s</i>' % (name,), 1)
-                self.tv.display_html(xhtml.encode('utf-8'), self.tv, self,
-                    iter_=iter_)
+                self.tv.display_html(xhtml, self.tv, self, iter_=iter_)
                 return
-            except Exception, e:
-                gajim.log.debug('Error processing xhtml' + str(e))
+            except Exception as e:
+                gajim.log.debug('Error processing xhtml: ' + str(e))
                 gajim.log.debug('with |' + xhtml + '|')
 
         # /me is replaced by name if name is given
diff --git a/src/dataforms_widget.py b/src/dataforms_widget.py
index 3eabc22f50a9f5ee9fc0d4bdb4a82aee6f5a59f2..9a0a278a1ba6afb3d56f86bb833b182bc917ae23 100644
--- a/src/dataforms_widget.py
+++ b/src/dataforms_widget.py
@@ -25,8 +25,11 @@ Words single and multiple refers here to types of data forms:
 single means these with one record of data (without <reported/> element),
 multiple - these which may contain more data (with <reported/> element).'''
 
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository import GObject
+from gi.repository import GLib
 import base64
 
 import gtkgui_helpers
@@ -37,19 +40,19 @@ from common import helpers
 
 import itertools
 
-class DataFormWidget(gtk.Alignment, object):
+class DataFormWidget(Gtk.Alignment, object):
 # "public" interface
     """
     Data Form widget. Use like any other widget
     """
 
     __gsignals__ = dict(
-        validated = (gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION, None, ())
+        validated = (GObject.SignalFlags.RUN_LAST | GObject.SignalFlags.ACTION, None, ())
     )
 
     def __init__(self, dataformnode=None):
         ''' Create a widget. '''
-        gtk.Alignment.__init__(self, xscale=1.0, yscale=1.0)
+        GObject.GObject.__init__(self, xscale=1.0, yscale=1.0)
 
         self._data_form = None
         self.selectable = False
@@ -71,10 +74,10 @@ class DataFormWidget(gtk.Alignment, object):
 
         selection = self.records_treeview.get_selection()
         selection.connect('changed', self.on_records_selection_changed)
-        selection.set_mode(gtk.SELECTION_MULTIPLE)
+        selection.set_mode(Gtk.SelectionMode.MULTIPLE)
 
     def on_data_form_vbox_key_press_event(self, widget, event):
-        print 'key pressed'
+        print('key pressed')
 
     def set_data_form(self, dataform):
         """
@@ -112,13 +115,13 @@ class DataFormWidget(gtk.Alignment, object):
 
     def get_title(self):
         """
-        Get the title of data form, as a unicode object. If no title or no form,
-        returns u''. Useful for setting window title
+        Get the title of data form. If no title or no form,
+        returns ''. Useful for setting window title
         """
         if self._data_form is not None:
             if self._data_form.title is not None:
                 return self._data_form.title
-        return u''
+        return ''
 
     title = property(get_title, None, None, 'Data form title')
 
@@ -189,7 +192,7 @@ class DataFormWidget(gtk.Alignment, object):
             fieldtypes.append(str)
             fieldvars.append(field.var)
 
-        self.multiplemodel = gtk.ListStore(*fieldtypes)
+        self.multiplemodel = Gtk.ListStore(*fieldtypes)
 
         # moving all data to model
         for item in self._data_form.iter_records():
@@ -203,7 +206,7 @@ class DataFormWidget(gtk.Alignment, object):
         for field, counter in zip(self._data_form.reported.iter_fields(),
         itertools.count()):
             self.records_treeview.append_column(
-                    gtk.TreeViewColumn(field.label, gtk.CellRendererText(),
+                    Gtk.TreeViewColumn(field.label, Gtk.CellRendererText(),
                             text=counter))
 
         self.records_treeview.set_model(self.multiplemodel)
@@ -276,8 +279,8 @@ class DataFormWidget(gtk.Alignment, object):
         selection = self.records_treeview.get_selection()
         model, rowrefs = selection.get_selected_rows()
         # rowref is a list of paths
-        for i in xrange(len(rowrefs)):
-            rowrefs[i] = gtk.TreeRowReference(model, rowrefs[i])
+        for i in list(range(len(rowrefs))):
+            rowrefs[i] = Gtk.TreeRowReference.new(model, rowrefs[i])
         # rowref is a list of row references; need to convert because we will
         # modify the model, paths would change
         for rowref in rowrefs:
@@ -305,7 +308,7 @@ class DataFormWidget(gtk.Alignment, object):
     def on_records_selection_changed(self, widget):
         self.refresh_multiple_buttons()
 
-class SingleForm(gtk.Table, object):
+class SingleForm(Gtk.Table, object):
     """
     Widget that represent DATAFORM_SINGLE mode form. Because this is used not
     only to display single forms, but to form input windows of multiple-type
@@ -313,13 +316,13 @@ class SingleForm(gtk.Table, object):
     """
 
     __gsignals__ = dict(
-        validated = (gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION, None, ())
+        validated = (GObject.SignalFlags.RUN_LAST | GObject.SignalFlags.ACTION, None, ())
     )
 
     def __init__(self, dataform, selectable=False):
         assert isinstance(dataform, dataforms.SimpleDataForm)
 
-        gtk.Table.__init__(self)
+        GObject.GObject.__init__(self)
         self.set_col_spacings(12)
         self.set_row_spacings(6)
 
@@ -330,8 +333,9 @@ class SingleForm(gtk.Table, object):
             widget
             """
             if field.description != '':
-                if widget.flags() & gtk.NO_WINDOW:
-                    evbox = gtk.EventBox()
+                if not widget.get_window():
+                #if widget.flags() & Gtk.NO_WINDOW:
+                    evbox = Gtk.EventBox()
                     evbox.add(widget)
                     widget = evbox
                 widget.set_tooltip_text(field.description)
@@ -356,7 +360,7 @@ class SingleForm(gtk.Table, object):
 
             if field.type_ == 'boolean':
                 commonlabelcenter = True
-                widget = gtk.CheckButton()
+                widget = Gtk.CheckButton()
                 widget.connect('toggled', self.on_boolean_checkbutton_toggled,
                         field)
                 widget.set_active(field.value)
@@ -369,32 +373,34 @@ class SingleForm(gtk.Table, object):
                     leftattach = 0
 
                 commonwidget = False
-                widget = gtk.Label(field.value)
+                widget = Gtk.Label(label=field.value)
                 widget.set_property('selectable', selectable)
                 widget.set_line_wrap(True)
                 self.attach(widget, leftattach, rightattach, linecounter,
-                        linecounter+1, xoptions=gtk.FILL, yoptions=gtk.FILL)
+                    linecounter+1, xoptions=Gtk.AttachOptions.FILL,
+                    yoptions=Gtk.AttachOptions.FILL)
 
             elif field.type_ == 'list-single':
                 # TODO: What if we have radio buttons and non-required field?
                 # TODO: We cannot deactivate them all...
                 if len(field.options) < 6:
                     # 5 option max: show radiobutton
-                    widget = gtk.VBox()
+                    widget = Gtk.VBox()
                     first_radio = None
                     for value, label in field.iter_options():
                         if not label:
                             label = value
-                        radio = gtk.RadioButton(first_radio, label=label)
+                        radio = Gtk.RadioButton.new_with_label_from_widget(
+                            first_radio, label)
                         radio.connect('toggled',
-                                self.on_list_single_radiobutton_toggled, field, value)
+                            self.on_list_single_radiobutton_toggled, field, value)
                         if first_radio is None:
                             first_radio = radio
                             if field.value == '':   # TODO: is None when done
                                 field.value = value
                         if value == field.value:
                             radio.set_active(True)
-                        widget.pack_start(radio, expand=False)
+                        widget.pack_start(radio, False, True, 0)
                 else:
                     # more than 5 options: show combobox
                     def on_list_single_combobox_changed(combobox, f):
@@ -413,13 +419,13 @@ class SingleForm(gtk.Table, object):
                 # TODO: When more than few choices, make a list
                 if len(field.options) < 6:
                     # 5 option max: show checkbutton
-                    widget = gtk.VBox()
+                    widget = Gtk.VBox()
                     for value, label in field.iter_options():
-                        check = gtk.CheckButton(label, use_underline=False)
+                        check = Gtk.CheckButton(label, use_underline=False)
                         check.set_active(value in field.values)
                         check.connect('toggled',
                                 self.on_list_multi_checkbutton_toggled, field, value)
-                        widget.pack_start(check, expand=False)
+                        widget.pack_start(check, False, True, 0)
                         widget.set_sensitive(readwrite)
                 else:
                     # more than 5 options: show combobox
@@ -429,8 +435,8 @@ class SingleForm(gtk.Table, object):
                         vals = []
                         selection.selected_foreach(for_selected)
                         field.values = vals[:]
-                    widget = gtk.ScrolledWindow()
-                    widget.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+                    widget = Gtk.ScrolledWindow()
+                    widget.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
                     tv = gtkgui_helpers.create_list_multi(field.options,
                             field.values)
                     widget.add(tv)
@@ -440,7 +446,7 @@ class SingleForm(gtk.Table, object):
                     tv.set_sensitive(readwrite)
 
             elif field.type_ == 'jid-single':
-                widget = gtk.Entry()
+                widget = Gtk.Entry()
                 widget.connect('changed', self.on_text_single_entry_changed, field)
                 widget.set_text(field.value)
 
@@ -452,20 +458,20 @@ class SingleForm(gtk.Table, object):
                 widget = xml.get_object('multiple_form_hbox')
                 treeview = xml.get_object('records_treeview')
 
-                listmodel = gtk.ListStore(str)
+                listmodel = Gtk.ListStore(str)
                 for value in field.iter_values():
                     # nobody will create several megabytes long stanza
                     listmodel.insert(999999, (value,))
 
                 treeview.set_model(listmodel)
 
-                renderer = gtk.CellRendererText()
+                renderer = Gtk.CellRendererText()
                 renderer.set_property('editable', True)
                 renderer.connect('edited',
                         self.on_jid_multi_cellrenderertext_edited, treeview, listmodel,
                         field)
 
-                treeview.append_column(gtk.TreeViewColumn(None, renderer,
+                treeview.append_column(Gtk.TreeViewColumn(None, renderer,
                         text=0))
 
                 decorate_with_tooltip(treeview, field)
@@ -495,7 +501,7 @@ class SingleForm(gtk.Table, object):
 
             elif field.type_ == 'text-private':
                 commonlabelcenter = True
-                widget = gtk.Entry()
+                widget = Gtk.Entry()
                 widget.connect('changed', self.on_text_single_entry_changed, field)
                 widget.set_visibility(False)
                 widget.set_text(field.value)
@@ -504,8 +510,8 @@ class SingleForm(gtk.Table, object):
                 # TODO: bigger text view
                 commonwidget = False
 
-                textwidget = gtk.TextView()
-                textwidget.set_wrap_mode(gtk.WRAP_WORD)
+                textwidget = Gtk.TextView()
+                textwidget.set_wrap_mode(Gtk.WrapMode.WORD)
                 textwidget.get_buffer().connect('changed',
                         self.on_text_multi_textbuffer_changed, field)
                 textwidget.get_buffer().set_text(field.value)
@@ -517,7 +523,7 @@ class SingleForm(gtk.Table, object):
                     else:
                         textwidget.set_sensitive(False)
 
-                widget = gtk.ScrolledWindow()
+                widget = Gtk.ScrolledWindow()
                 widget.add(textwidget)
 
                 widget=decorate_with_tooltip(widget, field)
@@ -529,66 +535,66 @@ class SingleForm(gtk.Table, object):
                 # should handle it as text-single
                 commonlabelcenter = True
                 if readwrite:
-                    widget = gtk.Entry()
+                    widget = Gtk.Entry()
                     def kpe(widget, event):
-                        if event.keyval == gtk.keysyms.Return or \
-                        event.keyval == gtk.keysyms.KP_Enter:
+                        if event.keyval == Gdk.KEY_Return or \
+                        event.keyval == Gdk.KEY_KP_Enter:
                             self.emit('validated')
                     widget.connect('key-press-event', kpe)
                     widget.connect('changed', self.on_text_single_entry_changed,
                             field)
                     widget.set_sensitive(readwrite)
                     if field.value is None:
-                        field.value = u''
+                        field.value = ''
                     widget.set_text(field.value)
                 else:
                     commonwidget=False
-                    widget = gtk.Label(field.value)
+                    widget = Gtk.Label(label=field.value)
                     widget.set_property('selectable', selectable)
                     widget.set_sensitive(True)
                     widget.set_alignment(0.0, 0.5)
                     widget=decorate_with_tooltip(widget, field)
                     self.attach(widget, 1, 2, linecounter, linecounter+1,
-                            yoptions=gtk.FILL)
+                            yoptions=Gtk.AttachOptions.FILL)
 
             if commonlabel and field.label is not None:
-                label = gtk.Label(field.label)
+                label = Gtk.Label(label=field.label)
                 if commonlabelcenter:
                     label.set_alignment(0.0, 0.5)
                 else:
                     label.set_alignment(0.0, 0.0)
                 label = decorate_with_tooltip(label, field)
                 self.attach(label, 0, 1, linecounter, linecounter+1,
-                        xoptions=gtk.FILL, yoptions=gtk.FILL)
+                        xoptions=Gtk.AttachOptions.FILL, yoptions=Gtk.AttachOptions.FILL)
 
             if field.media is not None:
                 for uri in field.media.uris:
                     if uri.type_.startswith('image/'):
                         try:
-                            img_data = base64.decodestring(uri.uri_data)
-                            pixbuf_l = gtk.gdk.PixbufLoader()
+                            img_data = base64.b64decode(uri.uri_data)
+                            pixbuf_l = GdkPixbuf.PixbufLoader()
                             pixbuf_l.write(img_data)
                             pixbuf_l.close()
-                            media = gtk.image_new_from_pixbuf(pixbuf_l.\
+                            media = Gtk.Image.new_from_pixbuf(pixbuf_l.\
                                 get_pixbuf())
                         except Exception:
-                            media = gtk.Label(_('Unable to load image'))
+                            media = Gtk.Label(label=_('Unable to load image'))
                     else:
-                        media = gtk.Label(_('Media type not supported: %s') % \
+                        media = Gtk.Label(label=_('Media type not supported: %s') % \
                             uri.type_)
                     linecounter += 1
                     self.attach(media, 0, 1, linecounter, linecounter+1,
-                        xoptions=gtk.FILL, yoptions=gtk.FILL)
+                        xoptions=Gtk.AttachOptions.FILL, yoptions=Gtk.AttachOptions.FILL)
 
             if commonwidget:
                 assert widget is not None
                 widget.set_sensitive(readwrite)
                 widget = decorate_with_tooltip(widget, field)
                 self.attach(widget, 1, 2, linecounter, linecounter+1,
-                        yoptions=gtk.FILL)
+                        yoptions=Gtk.AttachOptions.FILL)
 
             if field.required:
-                label = gtk.Label('*')
+                label = Gtk.Label(label='*')
                 label.set_tooltip_text(_('This field is required'))
                 self.attach(label, 2, 3, linecounter, linecounter+1, xoptions=0,
                     yoptions=0)
@@ -618,9 +624,8 @@ class SingleForm(gtk.Table, object):
         field.value = widget.get_text()
 
     def on_text_multi_textbuffer_changed(self, widget, field):
-        field.value = widget.get_text(
-                widget.get_start_iter(),
-                widget.get_end_iter())
+        field.value = widget.get_text(widget.get_start_iter(),
+            widget.get_end_iter(), True)
 
     def on_jid_multi_cellrenderertext_edited(self, cell, path, newtext, treeview,
     model, field):
@@ -629,14 +634,14 @@ class SingleForm(gtk.Table, object):
             return
         try:
             newtext = helpers.parse_jid(newtext)
-        except helpers.InvalidFormat, s:
+        except helpers.InvalidFormat as s:
             dialogs.ErrorDialog(_('Invalid Jabber ID'), str(s))
             return
         if newtext in field.values:
             dialogs.ErrorDialog(
                     _('Jabber ID already in list'),
                     _('The Jabber ID you entered is already in the list. Choose another one.'))
-            gobject.idle_add(treeview.set_cursor, path)
+            GLib.idle_add(treeview.set_cursor, path)
             return
         model[path][0]=newtext
 
diff --git a/src/dialogs.py b/src/dialogs.py
index 74fbc283f6a5edd6ea6dcffb1bc18e1333b31e21..bec33f23f211ca2c34e2f02a806fce7015444d3a 100644
--- a/src/dialogs.py
+++ b/src/dialogs.py
@@ -29,8 +29,12 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository import GObject
+from gi.repository import GLib
+import cairo
 import os
 import nbxmpp
 import time
@@ -101,7 +105,7 @@ class EditGroupsDialog:
                     contact.name, contact.groups)
 
     def on_edit_groups_dialog_response(self, widget, response_id):
-        if response_id == gtk.RESPONSE_CLOSE:
+        if response_id == Gtk.ResponseType.CLOSE:
             self.dialog.destroy()
 
     def remove_group(self, group):
@@ -128,7 +132,7 @@ class EditGroupsDialog:
         gajim.interface.roster.draw_group(_('General'), account)
 
     def on_add_button_clicked(self, widget):
-        group = self.xml.get_object('group_entry').get_text().decode('utf-8')
+        group = self.xml.get_object('group_entry').get_text()
         if not group:
             return
         # Do not allow special groups
@@ -136,9 +140,9 @@ class EditGroupsDialog:
             return
         # check if it already exists
         model = self.treeview.get_model()
-        iter_ = model.get_iter_root()
+        iter_ = model.get_iter_first()
         while iter_:
-            if model.get_value(iter_, 0).decode('utf-8') == group:
+            if model.get_value(iter_, 0) == group:
                 return
             iter_ = model.iter_next(iter_)
         self.changes_made = True
@@ -154,14 +158,14 @@ class EditGroupsDialog:
             model[path][1] = True
         else:
             model[path][1] = not model[path][1]
-        group = model[path][0].decode('utf-8')
+        group = model[path][0]
         if model[path][1]:
             self.add_group(group)
         else:
             self.remove_group(group)
 
     def init_list(self):
-        store = gtk.ListStore(str, bool, bool)
+        store = Gtk.ListStore(str, bool, bool)
         self.treeview.set_model(store)
         for column in self.treeview.get_columns():
             # Clear treeview when re-drawing
@@ -198,21 +202,22 @@ class EditGroupsDialog:
                     store.set(iter_, 2, False)
                 else:
                     store.set(iter_, 2, True)
-        column = gtk.TreeViewColumn(_('Group'))
+        column = Gtk.TreeViewColumn(_('Group'))
         column.set_expand(True)
         self.treeview.append_column(column)
-        renderer = gtk.CellRendererText()
-        column.pack_start(renderer)
-        column.set_attributes(renderer, text=0)
+        renderer = Gtk.CellRendererText()
+        column.pack_start(renderer, True)
+        column.add_attribute(renderer, 'text', 0)
 
-        column = gtk.TreeViewColumn(_('In the group'))
+        column = Gtk.TreeViewColumn(_('In the group'))
         column.set_expand(False)
         self.treeview.append_column(column)
-        renderer = gtk.CellRendererToggle()
-        column.pack_start(renderer)
+        renderer = Gtk.CellRendererToggle()
+        column.pack_start(renderer, True)
         renderer.set_property('activatable', True)
         renderer.connect('toggled', self.group_toggled_cb)
-        column.set_attributes(renderer, active=1, inconsistent=2)
+        column.add_attribute(renderer, 'active', 1)
+        column.add_attribute(renderer, 'inconsistent', 2)
 
 class PassphraseDialog:
     """
@@ -251,7 +256,7 @@ class PassphraseDialog:
         if not self.ok_handler:
             return
 
-        passph = self.passphrase_entry.get_text().decode('utf-8')
+        passph = self.passphrase_entry.get_text()
 
         if self.check:
             checked = self.xml.get_object('save_passphrase_checkbutton').\
@@ -291,26 +296,26 @@ class ChooseGPGKeyDialog:
         self.keys_treeview = xml.get_object('keys_treeview')
         prompt_label = xml.get_object('prompt_label')
         prompt_label.set_text(prompt_text)
-        model = gtk.ListStore(str, str)
+        model = Gtk.ListStore(str, str)
         model.set_sort_func(1, self.sort_keys)
-        model.set_sort_column_id(1, gtk.SORT_ASCENDING)
+        model.set_sort_column_id(1, Gtk.SortType.ASCENDING)
         self.keys_treeview.set_model(model)
         #columns
-        renderer = gtk.CellRendererText()
+        renderer = Gtk.CellRendererText()
         col = self.keys_treeview.insert_column_with_attributes(-1, _('KeyID'),
                 renderer, text=0)
         col.set_sort_column_id(0)
-        renderer = gtk.CellRendererText()
+        renderer = Gtk.CellRendererText()
         col = self.keys_treeview.insert_column_with_attributes(-1,
                 _('Contact name'), renderer, text=1)
         col.set_sort_column_id(1)
         self.keys_treeview.set_search_column(1)
         self.fill_tree(secret_keys, selected)
         self.window.connect('response', self.on_dialog_response)
-        self.window.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
+        self.window.set_position(Gtk.WindowPosition.CENTER_ON_PARENT)
         self.window.show_all()
 
-    def sort_keys(self, model, iter1, iter2):
+    def sort_keys(self, model, iter1, iter2, data=None):
         value1 = model[iter1][1]
         value2 = model[iter2][1]
         if value1 == _('None'):
@@ -324,9 +329,8 @@ class ChooseGPGKeyDialog:
     def on_dialog_response(self, dialog, response):
         selection = self.keys_treeview.get_selection()
         (model, iter_) = selection.get_selected()
-        if iter_ and response == gtk.RESPONSE_OK:
-            keyID = [ model[iter_][0].decode('utf-8'),
-                    model[iter_][1].decode('utf-8') ]
+        if iter_ and response == Gtk.ResponseType.OK:
+            keyID = [ model[iter_][0], model[iter_][1] ]
         else:
             keyID = None
         self.on_response(keyID)
@@ -375,14 +379,16 @@ class ChangeActivityDialog:
             act = category + '_other'
 
             if group:
-                rbtns[act] = gtk.RadioButton(group)
+                rbtns[act] = Gtk.RadioButton()
+                rbtns[act].join_group(group)
             else:
-                rbtns[act] = group = gtk.RadioButton()
+                rbtns[act] = group = Gtk.RadioButton()
 
-            hbox = gtk.HBox(False, 5)
-            hbox.pack_start(gtkgui_helpers.load_activity_icon(category), False,
-                    False, 0)
-            lbl = gtk.Label('<b>' + pep.ACTIVITIES[category]['category'] + '</b>')
+            hbox = Gtk.HBox(False, 5)
+            hbox.pack_start(gtkgui_helpers.load_activity_icon(category,
+                activity), False, False, 0)
+            lbl = Gtk.Label(label='<b>' + pep.ACTIVITIES[category]['category'] \
+                + '</b>')
             lbl.set_use_markup(True)
             hbox.pack_start(lbl, False, False, 0)
             rbtns[act].add(hbox)
@@ -394,7 +400,6 @@ class ChangeActivityDialog:
             for activity in pep.ACTIVITIES[category]:
                 activities.append(activity)
             activities.sort()
-
             for activity in activities:
                 if activity == 'category':
                     continue
@@ -402,14 +407,15 @@ class ChangeActivityDialog:
                 act = category + '_' + activity
 
                 if group:
-                    rbtns[act] = gtk.RadioButton(group)
+                    rbtns[act] = Gtk.RadioButton()
+                    rbtns[act].join_group(group)
                 else:
-                    rbtns[act] = group = gtk.RadioButton()
+                    rbtns[act] = group = Gtk.RadioButton()
 
-                hbox = gtk.HBox(False, 5)
+                hbox = Gtk.HBox(False, 5)
                 hbox.pack_start(gtkgui_helpers.load_activity_icon(category,
                         activity), False, False, 0)
-                hbox.pack_start(gtk.Label(pep.ACTIVITIES[category][activity]),
+                hbox.pack_start(Gtk.Label(pep.ACTIVITIES[category][activity]),
                         False, False, 0)
                 rbtns[act].connect('toggled', self.on_rbtn_toggled,
                         [category, activity])
@@ -438,7 +444,7 @@ class ChangeActivityDialog:
             self.checkbutton.set_active(False)
 
         self.xml.connect_signals(self)
-        self.window.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
+        self.window.set_position(Gtk.WindowPosition.CENTER_ON_PARENT)
         self.window.show_all()
 
     def on_enable_checkbutton_toggled(self, widget):
@@ -458,7 +464,7 @@ class ChangeActivityDialog:
         """
         if self.checkbutton.get_active():
             self.on_response(self.activity, self.subactivity,
-                    self.entry.get_text().decode('utf-8'))
+                    self.entry.get_text())
         else:
             self.on_response(None, None, '')
         self.window.destroy()
@@ -499,10 +505,11 @@ class ChangeMoodDialog:
         self.MOODS.sort()
 
         for mood in self.MOODS:
-            self.mood_buttons[mood] = gtk.RadioButton(no_mood_button)
+            self.mood_buttons[mood] = Gtk.RadioButton()
+            self.mood_buttons[mood].join_group(no_mood_button)
             self.mood_buttons[mood].set_mode(False)
             self.mood_buttons[mood].add(gtkgui_helpers.load_mood_icon(mood))
-            self.mood_buttons[mood].set_relief(gtk.RELIEF_NONE)
+            self.mood_buttons[mood].set_relief(Gtk.ReliefStyle.NONE)
             self.mood_buttons[mood].set_tooltip_text(pep.MOODS[mood])
             self.mood_buttons[mood].connect('clicked',
                     self.on_mood_button_clicked, mood)
@@ -526,7 +533,7 @@ class ChangeMoodDialog:
             self.entry.set_sensitive(False)
 
         self.xml.connect_signals(self)
-        self.window.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
+        self.window.set_position(Gtk.WindowPosition.CENTER_ON_PARENT)
         self.window.show_all()
 
     def on_mood_button_clicked(self, widget, data):
@@ -541,7 +548,7 @@ class ChangeMoodDialog:
 
     def on_ok_button_clicked(self, widget):
         '''Return mood and messsage (None if no mood selected)'''
-        message = self.entry.get_text().decode('utf-8')
+        message = self.entry.get_text()
         self.on_response(self.mood, message)
         self.window.destroy()
 
@@ -562,7 +569,7 @@ class TimeoutDialog:
     def run_timeout(self):
         if self.countdown_left > 0:
             self.countdown()
-            gobject.timeout_add_seconds(1, self.countdown)
+            GLib.timeout_add_seconds(1, self.countdown)
 
     def on_timeout():
         """
@@ -635,10 +642,10 @@ class ChangeStatusMessageDialog(TimeoutDialog):
             self.preset_messages_dict[msg_name] = opts
         sorted_keys_list = helpers.get_sorted_keys(self.preset_messages_dict)
 
-        self.message_liststore = gtk.ListStore(str) # msg_name
+        self.message_liststore = Gtk.ListStore(str) # msg_name
         self.message_combobox = self.xml.get_object('message_combobox')
         self.message_combobox.set_model(self.message_liststore)
-        cellrenderertext = gtk.CellRendererText()
+        cellrenderertext = Gtk.CellRendererText()
         self.message_combobox.pack_start(cellrenderertext, True)
         self.message_combobox.add_attribute(cellrenderertext, 'text', 0)
         for msg_name in sorted_keys_list:
@@ -661,7 +668,7 @@ class ChangeStatusMessageDialog(TimeoutDialog):
         self.xml.connect_signals(self)
         self.run_timeout()
         self.dialog.connect('response', self.on_dialog_response)
-        self.dialog.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
+        self.dialog.set_position(Gtk.WindowPosition.CENTER_ON_PARENT)
         self.dialog.show_all()
 
     def draw_activity(self):
@@ -708,13 +715,12 @@ class ChangeStatusMessageDialog(TimeoutDialog):
     def on_timeout(self):
         # Prevent GUI freeze when the combobox menu is opened on close
         self.message_combobox.popdown()
-        self.dialog.response(gtk.RESPONSE_OK)
+        self.dialog.response(Gtk.ResponseType.OK)
 
     def on_dialog_response(self, dialog, response):
-        if response == gtk.RESPONSE_OK:
+        if response == Gtk.ResponseType.OK:
             beg, end = self.message_buffer.get_bounds()
-            message = self.message_buffer.get_text(beg, end).decode('utf-8')\
-                    .strip()
+            message = self.message_buffer.get_text(beg, end, True).strip()
             message = helpers.remove_invalid_xml_chars(message)
             msg = helpers.to_one_line(message)
             if self.show:
@@ -742,7 +748,7 @@ class ChangeStatusMessageDialog(TimeoutDialog):
         active = widget.get_active()
         if active < 0:
             return None
-        name = model[active][0].decode('utf-8')
+        name = model[active][0]
         self.message_buffer.set_text(self.preset_messages_dict[name][0])
         self.pep_dict['activity'] = self.preset_messages_dict[name][1]
         self.pep_dict['subactivity'] = self.preset_messages_dict[name][2]
@@ -754,10 +760,10 @@ class ChangeStatusMessageDialog(TimeoutDialog):
 
     def on_change_status_message_dialog_key_press_event(self, widget, event):
         self.countdown_enabled = False
-        if event.keyval == gtk.keysyms.Return or \
-           event.keyval == gtk.keysyms.KP_Enter: # catch CTRL+ENTER
-            if (event.state & gtk.gdk.CONTROL_MASK):
-                self.dialog.response(gtk.RESPONSE_OK)
+        if event.keyval == Gdk.KEY_Return or \
+           event.keyval == Gdk.KEY_KP_Enter: # catch CTRL+ENTER
+            if (event.get_state() & Gdk.ModifierType.CONTROL_MASK):
+                self.dialog.response(Gtk.ResponseType.OK)
                 # Stop the event
                 return True
 
@@ -776,12 +782,12 @@ class ChangeStatusMessageDialog(TimeoutDialog):
         self.countdown_enabled = False
         start_iter, finish_iter = self.message_buffer.get_bounds()
         status_message_to_save_as_preset = self.message_buffer.get_text(
-                start_iter, finish_iter)
+                start_iter, finish_iter, True)
         def on_ok(msg_name):
-            msg_text = status_message_to_save_as_preset.decode('utf-8')
+            msg_text = status_message_to_save_as_preset
             msg_text_1l = helpers.to_one_line(msg_text)
             if not msg_name: # msg_name was ''
-                msg_name = msg_text_1l.decode('utf-8')
+                msg_name = msg_text_1l
 
             def on_ok2():
                 self.preset_messages_dict[msg_name] = [
@@ -915,11 +921,11 @@ class AddNewContactWindow:
                             'prompt': None}
                 self.available_types.append(type_)
         # Combobox with transport/jabber icons
-        liststore = gtk.ListStore(str, gtk.gdk.Pixbuf, str)
-        cell = gtk.CellRendererPixbuf()
+        liststore = Gtk.ListStore(str, GdkPixbuf.Pixbuf, str)
+        cell = Gtk.CellRendererPixbuf()
         self.protocol_combobox.pack_start(cell, False)
         self.protocol_combobox.add_attribute(cell, 'pixbuf', 1)
-        cell = gtk.CellRendererText()
+        cell = Gtk.CellRendererText()
         cell.set_property('xpad', 5)
         self.protocol_combobox.pack_start(cell, True)
         self.protocol_combobox.add_attribute(cell, 'text', 0)
@@ -947,7 +953,7 @@ class AddNewContactWindow:
                     gajim.connections[account].request_gateway_prompt(service)
         self.protocol_combobox.set_active(0)
         self.auto_authorize_checkbutton.show()
-        liststore = gtk.ListStore(str)
+        liststore = Gtk.ListStore(str)
         self.protocol_jid_combobox.set_model(liststore)
         if jid:
             self.jid_escaped = True
@@ -1007,7 +1013,7 @@ class AddNewContactWindow:
             self.account_label.hide()
             self.account_hbox.hide()
         else:
-            liststore = gtk.ListStore(str, str)
+            liststore = Gtk.ListStore(str, str)
             for acct in accounts:
                 liststore.append([acct, acct])
             self.account_combobox.set_model(liststore)
@@ -1036,11 +1042,13 @@ class AddNewContactWindow:
             self._nec_gateway_prompt_received)
 
     def on_register_button_clicked(self, widget):
-        jid = self.protocol_jid_combobox.get_active_text().decode('utf-8')
+        model = self.protocol_jid_combobox.get_model()
+        row = self.protocol_jid_combobox.get_active()
+        jid = model[row][0]
         gajim.connections[self.account].request_register_agent_info(jid)
 
     def on_add_new_contact_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape: # ESCAPE
+        if event.keyval == Gdk.KEY_Escape: # ESCAPE
             self.window.destroy()
 
     def on_cancel_button_clicked(self, widget):
@@ -1053,17 +1061,18 @@ class AddNewContactWindow:
         """
         When Subscribe button is clicked
         """
-        jid = self.uid_entry.get_text().decode('utf-8').strip()
+        jid = self.uid_entry.get_text().strip()
         if not jid:
             return
 
         model = self.protocol_combobox.get_model()
-        iter_ = self.protocol_combobox.get_active_iter()
-        type_ = model[iter_][2]
-        if type_ != 'jabber' and not self.jid_escaped:
-            transport = self.protocol_jid_combobox.get_active_text().decode(
-                'utf-8')
-            if self.account:
+        row = self.protocol_combobox.get_active_iter()
+        type_ = model[row][2]
+        if type_ != 'jabber':
+            model = self.protocol_jid_combobox.get_model()
+            row = self.protocol_jid_combobox.get_active()
+            transport = model[row][0]
+            if self.account and not self.jid_escaped:
                 self.adding_jid = (jid, transport, type_)
                 gajim.connections[self.account].request_gateway_prompt(
                     transport, jid)
@@ -1077,7 +1086,7 @@ class AddNewContactWindow:
         # check if jid is conform to RFC and stringprep it
         try:
             jid = helpers.parse_jid(jid)
-        except helpers.InvalidFormat, s:
+        except helpers.InvalidFormat as s:
             pritext = _('Invalid User ID')
             ErrorDialog(pritext, str(s))
             return
@@ -1093,7 +1102,7 @@ class AddNewContactWindow:
             ErrorDialog(pritext, _('You cannot add yourself to your roster.'))
             return
 
-        nickname = self.nickname_entry.get_text().decode('utf-8') or ''
+        nickname = self.nickname_entry.get_text() or ''
         # get value of account combobox, if account was not specified
         if not self.account:
             model = self.account_combobox.get_model()
@@ -1112,14 +1121,14 @@ class AddNewContactWindow:
             message_buffer = self.message_textview.get_buffer()
             start_iter = message_buffer.get_start_iter()
             end_iter = message_buffer.get_end_iter()
-            message = message_buffer.get_text(start_iter, end_iter).decode('utf-8')
+            message = message_buffer.get_text(start_iter, end_iter, True)
             if self.save_message_checkbutton.get_active():
                 msg = helpers.to_one_line(message)
                 gajim.config.set_per('accounts', self.account,
                     'subscription_request_msg', msg)
         else:
             message= ''
-        group = self.group_comboboxentry.child.get_text().decode('utf-8')
+        group = self.group_comboboxentry.get_child().get_text()
         groups = []
         if group:
             groups = [group]
@@ -1210,7 +1219,9 @@ class AddNewContactWindow:
         else:
             self.register_hbox.hide()
             if type_ != 'jabber':
-                jid = self.protocol_jid_combobox.get_active_text()
+                model = self.protocol_jid_combobox.get_model()
+                row = self.protocol_jid_combobox.get_active()
+                jid = model[row][0]
                 contact = gajim.contacts.get_first_contact_from_jid(
                     self.account, jid)
                 if contact.show in ('offline', 'error'):
@@ -1225,7 +1236,10 @@ class AddNewContactWindow:
             self.add_button.set_sensitive(True)
 
     def transport_signed_in(self, jid):
-        if self.protocol_jid_combobox.get_active_text() == jid:
+        model = self.protocol_jid_combobox.get_model()
+        row = self.protocol_jid_combobox.get_active()
+        _jid = model[row][0]
+        if _jid == jid:
             self.register_hbox.hide()
             self.connected_label.hide()
             self.subscription_table.show()
@@ -1233,7 +1247,10 @@ class AddNewContactWindow:
             self.add_button.set_sensitive(True)
 
     def transport_signed_out(self, jid):
-        if self.protocol_jid_combobox.get_active_text() == jid:
+        model = self.protocol_jid_combobox.get_model()
+        row = self.protocol_jid_combobox.get_active()
+        _jid = model[row][0]
+        if _jid == jid:
             self.subscription_table.hide()
             self.auto_authorize_checkbutton.hide()
             self.connected_label.show()
@@ -1266,26 +1283,30 @@ class AboutDialog:
     """
 
     def __init__(self):
-        dlg = gtk.AboutDialog()
+        dlg = Gtk.AboutDialog()
         dlg.set_transient_for(gajim.interface.roster.window)
         dlg.set_name('Gajim')
         dlg.set_version(gajim.version)
-        s = u'Copyright © 2003-2013 Gajim Team'
+        s = 'Copyright © 2003-2013 Gajim Team'
         dlg.set_copyright(s)
         copying_file_path = self.get_path('COPYING')
         if copying_file_path:
-            text = open(copying_file_path).read()
+            with open(copying_file_path) as a_file:
+                text = a_file.read()
             dlg.set_license(text)
 
+        gtk_ver = '%i.%i.%i' % (Gtk.get_major_version(),
+            Gtk.get_minor_version(), Gtk.get_micro_version())
+        gobject_ver = self.tuple2str(GObject.pygobject_version)
         dlg.set_comments('%s\n%s %s\n%s %s' % (_('A GTK+ Jabber/XMPP client'),
-            _('GTK+ Version:'), self.tuple2str(gtk.gtk_version), \
-            _('PyGTK Version:'), self.tuple2str(gtk.pygtk_version)))
+            _('GTK+ Version:'), gtk_ver, _('PyGobject Version:'), gobject_ver))
         dlg.set_website('http://gajim.org/')
 
         authors_file_path = self.get_path('AUTHORS')
         if authors_file_path:
             authors = []
-            authors_file = open(authors_file_path).read()
+            with open(authors_file_path) as a_file:
+                authors_file = a_file.read()
             authors_file = authors_file.split('\n')
             for author in authors_file:
                 if author == 'CURRENT DEVELOPERS:':
@@ -1298,13 +1319,13 @@ class AboutDialog:
             thanks_file_path = self.get_path('THANKS')
             if thanks_file_path:
                 authors.append('\n' + _('THANKS:'))
-
-                text = open(thanks_file_path).read()
+                with open(thanks_file_path) as a_file:
+                    text = a_file.read()
                 text_splitted = text.split('\n')
                 text = '\n'.join(text_splitted[:-2]) # remove one english sentence
                 # and add it manually as translatable
-                text += '\n%s\n' % _('Last but not least, we would like to thank all '
-                    'the package maintainers.')
+                text += '\n%s\n' % _('Last but not least, we would like to '
+                    'thank all the package maintainers.')
                 authors.append(text)
 
             dlg.set_authors(authors)
@@ -1319,15 +1340,18 @@ class AboutDialog:
 
         thanks_artists_file_path = self.get_path('THANKS.artists')
         if thanks_artists_file_path:
-            artists_text = open(thanks_artists_file_path).read()
+            with open(thanks_artists_file_path) as a_file:
+                artists_text = a_file.read()
             artists = artists_text.split('\n')
             dlg.set_artists(artists)
-        # connect close button to destroy() function
-        for button in dlg.action_area.get_children():
-            if button.get_property('label') == gtk.STOCK_CLOSE:
-                button.connect('clicked', lambda x:dlg.destroy())
+
+        dlg.connect('response', self.on_response)
         dlg.show_all()
 
+    def on_response(self, dialog, response_id):
+        if response_id == Gtk.ResponseType.CANCEL:
+            dialog.destroy()
+
     def tuple2str(self, tuple_):
         str_ = ''
         for num in tuple_:
@@ -1345,11 +1369,11 @@ class AboutDialog:
         else:
             return None
 
-class Dialog(gtk.Dialog):
+class Dialog(Gtk.Dialog):
     def __init__(self, parent, title, buttons, default=None,
     on_response_ok=None, on_response_cancel=None):
-        gtk.Dialog.__init__(self, title, parent,
-            gtk.DIALOG_DESTROY_WITH_PARENT | gtk.DIALOG_NO_SEPARATOR)
+        GObject.GObject.__init__(self, title, parent,
+            Gtk.DialogFlags.DESTROY_WITH_PARENT | Gtk.DialogFlags.NO_SEPARATOR)
 
         self.user_response_ok = on_response_ok
         self.user_response_cancel = on_response_cancel
@@ -1357,8 +1381,8 @@ class Dialog(gtk.Dialog):
         self.vbox.set_spacing(12)
         self.set_resizable(False)
 
-        possible_responses = {gtk.STOCK_OK: self.on_response_ok,
-            gtk.STOCK_CANCEL: self.on_response_cancel}
+        possible_responses = {Gtk.STOCK_OK: self.on_response_ok,
+            Gtk.STOCK_CANCEL: self.on_response_cancel}
         for stock, response in buttons:
             b = self.add_button(stock, response)
             for response in possible_responses:
@@ -1395,21 +1419,21 @@ class Dialog(gtk.Dialog):
         return index < len(buttons) and buttons[index] or None
 
 
-class HigDialog(gtk.MessageDialog):
+class HigDialog(Gtk.MessageDialog):
     def __init__(self, parent, type_, buttons, pritext, sectext,
     on_response_ok=None, on_response_cancel=None, on_response_yes=None,
     on_response_no=None):
         self.call_cancel_on_destroy = True
-        gtk.MessageDialog.__init__(self, parent,
-           gtk.DIALOG_DESTROY_WITH_PARENT | gtk.DIALOG_MODAL,
+        Gtk.MessageDialog.__init__(self, parent,
+           Gtk.DialogFlags.DESTROY_WITH_PARENT | Gtk.DialogFlags.MODAL,
            type_, buttons, message_format = pritext)
 
         self.format_secondary_markup(sectext)
 
         buttons = self.action_area.get_children()
-        self.possible_responses = {gtk.STOCK_OK: on_response_ok,
-                gtk.STOCK_CANCEL: on_response_cancel, gtk.STOCK_YES: on_response_yes,
-                gtk.STOCK_NO: on_response_no}
+        self.possible_responses = {Gtk.STOCK_OK: on_response_ok,
+                Gtk.STOCK_CANCEL: on_response_cancel, Gtk.STOCK_YES: on_response_yes,
+                Gtk.STOCK_NO: on_response_no}
         for b in buttons:
             for response in self.possible_responses:
                 if b.get_label() == response:
@@ -1429,7 +1453,7 @@ class HigDialog(gtk.MessageDialog):
     def on_dialog_destroy(self, widget):
         if not self.call_cancel_on_destroy:
             return
-        cancel_handler = self.possible_responses[gtk.STOCK_CANCEL]
+        cancel_handler = self.possible_responses[Gtk.STOCK_CANCEL]
         if not cancel_handler:
             return False
         if isinstance(cancel_handler, tuple):
@@ -1445,21 +1469,23 @@ class HigDialog(gtk.MessageDialog):
         Show dialog
         """
         vb = self.get_children()[0].get_children()[0] # Give focus to top vbox
-        vb.set_flags(gtk.CAN_FOCUS)
+#        vb.set_flags(Gtk.CAN_FOCUS)
         vb.grab_focus()
         self.show_all()
 
-class FileChooserDialog(gtk.FileChooserDialog):
+class FileChooserDialog(Gtk.FileChooserDialog):
     """
-    Non-blocking FileChooser Dialog around gtk.FileChooserDialog
+    Non-blocking FileChooser Dialog around Gtk.FileChooserDialog
     """
     def __init__(self, title_text, action, buttons, default_response,
     select_multiple=False, current_folder=None, on_response_ok=None,
-    on_response_cancel=None):
-
-        gtk.FileChooserDialog.__init__(self, title=title_text, action=action,
-            buttons=buttons)
+    on_response_cancel=None, transient_for=None):
 
+        GObject.GObject.__init__(self, title=title_text, parent=transient_for,
+            action=action)
+        self.add_button(buttons[0],buttons[1])
+        if len(buttons) ==4:
+            self.add_button(buttons[2],buttons[3])
         self.set_default_response(default_response)
         self.set_select_multiple(select_multiple)
         if current_folder and os.path.isdir(current_folder):
@@ -1474,7 +1500,7 @@ class FileChooserDialog(gtk.FileChooserDialog):
         self.show_all()
 
     def on_dialog_response(self, dialog, response):
-        if response in (gtk.RESPONSE_CANCEL, gtk.RESPONSE_CLOSE):
+        if response in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.CLOSE):
             if self.response_cancel:
                 if isinstance(self.response_cancel, tuple):
                     self.response_cancel[0](dialog, *self.response_cancel[1:])
@@ -1482,7 +1508,7 @@ class FileChooserDialog(gtk.FileChooserDialog):
                     self.response_cancel(dialog)
             else:
                 self.just_destroy(dialog)
-        elif response == gtk.RESPONSE_OK:
+        elif response == Gtk.ResponseType.OK:
             if self.response_ok:
                 if isinstance(self.response_ok, tuple):
                     self.response_ok[0](dialog, *self.response_ok[1:])
@@ -1513,7 +1539,7 @@ class ConfirmationDialog(HigDialog):
         self.user_response_ok = on_response_ok
         self.user_response_cancel = on_response_cancel
         HigDialog.__init__(self, transient_for,
-           gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, pritext, sectext,
+           Gtk.MessageType.QUESTION, Gtk.ButtonsType.OK_CANCEL, pritext, sectext,
            self.on_response_ok, self.on_response_cancel)
         self.popup()
 
@@ -1548,8 +1574,8 @@ class NonModalConfirmationDialog(HigDialog):
             parent = gajim.interface.roster.window
         else:
             parent = None
-        HigDialog.__init__(self, parent, gtk.MESSAGE_QUESTION,
-            gtk.BUTTONS_OK_CANCEL, pritext, sectext, self.on_response_ok,
+        HigDialog.__init__(self, parent, Gtk.MessageType.QUESTION,
+            Gtk.ButtonsType.OK_CANCEL, pritext, sectext, self.on_response_ok,
             self.on_response_cancel)
         self.set_modal(False)
 
@@ -1580,8 +1606,8 @@ class WarningDialog(HigDialog):
         if not transient_for and hasattr(gajim.interface, 'roster') and \
         gajim.interface.roster:
             transient_for = gajim.interface.roster.window
-        HigDialog.__init__(self, transient_for, gtk.MESSAGE_WARNING,
-            gtk.BUTTONS_OK, pritext, sectext)
+        HigDialog.__init__(self, transient_for, Gtk.MessageType.WARNING,
+            Gtk.ButtonsType.OK, pritext, sectext)
         self.set_modal(False)
         self.popup()
 
@@ -1597,7 +1623,7 @@ class InformationDialog(HigDialog):
             parent = gajim.interface.roster.window
         else:
             parent = None
-        HigDialog.__init__(self, parent, gtk.MESSAGE_INFO, gtk.BUTTONS_OK,
+        HigDialog.__init__(self, parent, Gtk.MessageType.INFO, Gtk.ButtonsType.OK,
             pritext, sectext)
         self.set_modal(False)
         self.popup()
@@ -1615,7 +1641,7 @@ class ErrorDialog(HigDialog):
             parent = gajim.interface.roster.window
         else:
             parent = None
-        HigDialog.__init__(self, parent, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
+        HigDialog.__init__(self, parent, Gtk.MessageType.ERROR, Gtk.ButtonsType.OK,
             pritext, sectext, on_response_ok=on_response_ok,
             on_response_cancel=on_response_cancel)
         self.popup()
@@ -1626,7 +1652,7 @@ class YesNoDialog(HigDialog):
     """
 
     def __init__(self, pritext, sectext='', checktext='', text_label=None,
-    on_response_yes=None, on_response_no=None, type_=gtk.MESSAGE_QUESTION,
+    on_response_yes=None, on_response_no=None, type_=Gtk.MessageType.QUESTION,
     transient_for=None):
         self.user_response_yes = on_response_yes
         self.user_response_no = on_response_no
@@ -1636,24 +1662,24 @@ class YesNoDialog(HigDialog):
             parent = gajim.interface.roster.window
         else:
             parent = None
-        HigDialog.__init__(self, parent, type_, gtk.BUTTONS_YES_NO, pritext,
+        HigDialog.__init__(self, parent, type_, Gtk.ButtonsType.YES_NO, pritext,
             sectext, on_response_yes=self.on_response_yes,
             on_response_no=self.on_response_no)
 
         if checktext:
-            self.checkbutton = gtk.CheckButton(checktext)
-            self.vbox.pack_start(self.checkbutton, expand=False, fill=True)
+            self.checkbutton = Gtk.CheckButton(checktext)
+            self.vbox.pack_start(self.checkbutton, False, True, 0)
         else:
             self.checkbutton = None
         if text_label:
-            label = gtk.Label(text_label)
-            self.vbox.pack_start(label, expand=False, fill=True)
-            buff = gtk.TextBuffer()
-            self.textview = gtk.TextView(buff)
-            frame = gtk.Frame()
-            frame.set_shadow_type(gtk.SHADOW_IN)
+            label = Gtk.Label(label=text_label)
+            self.vbox.pack_start(label, False, True, 0)
+            buff = Gtk.TextBuffer()
+            self.textview = Gtk.TextView.new_with_buffer(buff)
+            frame = Gtk.Frame()
+            frame.set_shadow_type(Gtk.ShadowType.IN)
             frame.add(self.textview)
-            self.vbox.pack_start(frame, expand=False, fill=True)
+            self.vbox.pack_start(frame, False, True, 0)
         else:
             self.textview = None
         self.set_modal(False)
@@ -1664,7 +1690,7 @@ class YesNoDialog(HigDialog):
             if self.textview:
                 buff = self.textview.get_buffer()
                 start, end = buff.get_bounds()
-                txt = self.textview.get_buffer().get_text(start, end)
+                txt = self.textview.get_buffer().get_text(start, end, True)
 
             if isinstance(self.user_response_yes, tuple):
                 if self.textview:
@@ -1686,7 +1712,7 @@ class YesNoDialog(HigDialog):
             if self.textview:
                 buff = self.textview.get_buffer()
                 start, end = buff.get_bounds()
-                txt = self.textview.get_buffer().get_text(start, end)
+                txt = self.textview.get_buffer().get_text(start, end, True)
 
             if isinstance(self.user_response_no, tuple):
                 if self.textview:
@@ -1725,17 +1751,17 @@ class ConfirmationDialogCheck(ConfirmationDialog):
             parent = gajim.interface.roster.window
         else:
             parent = None
-        HigDialog.__init__(self, parent, gtk.MESSAGE_QUESTION,
-           gtk.BUTTONS_OK_CANCEL, pritext, sectext, self.on_response_ok,
+        HigDialog.__init__(self, parent, Gtk.MessageType.QUESTION,
+           Gtk.ButtonsType.OK_CANCEL, pritext, sectext, self.on_response_ok,
            self.on_response_cancel)
 
-        self.set_default_response(gtk.RESPONSE_OK)
+        self.set_default_response(Gtk.ResponseType.OK)
 
         ok_button = self.action_area.get_children()[0] # right to left
         ok_button.grab_focus()
 
-        self.checkbutton = gtk.CheckButton(checktext)
-        self.vbox.pack_start(self.checkbutton, expand=False, fill=True)
+        self.checkbutton = Gtk.CheckButton(checktext)
+        self.vbox.pack_start(self.checkbutton, False, True, 0)
         self.set_modal(is_modal)
         self.popup()
 
@@ -1780,27 +1806,27 @@ class ConfirmationDialogDoubleCheck(ConfirmationDialog):
             parent = gajim.interface.roster.window
         else:
             parent = None
-        HigDialog.__init__(self, parent, gtk.MESSAGE_QUESTION,
-           gtk.BUTTONS_OK_CANCEL, pritext, sectext, self.on_response_ok,
+        HigDialog.__init__(self, parent, Gtk.MessageType.QUESTION,
+           Gtk.ButtonsType.OK_CANCEL, pritext, sectext, self.on_response_ok,
            self.on_response_cancel)
 
-        self.set_default_response(gtk.RESPONSE_OK)
+        self.set_default_response(Gtk.ResponseType.OK)
 
         ok_button = self.action_area.get_children()[0] # right to left
         ok_button.grab_focus()
 
         if checktext1:
-            self.checkbutton1 = gtk.CheckButton(checktext1)
+            self.checkbutton1 = Gtk.CheckButton(checktext1)
             if tooltip1:
                 self.checkbutton1.set_tooltip_text(tooltip1)
-            self.vbox.pack_start(self.checkbutton1, expand=False, fill=True)
+            self.vbox.pack_start(self.checkbutton1, False, True, 0)
         else:
             self.checkbutton1 = None
         if checktext2:
-            self.checkbutton2 = gtk.CheckButton(checktext2)
+            self.checkbutton2 = Gtk.CheckButton(checktext2)
             if tooltip2:
                 self.checkbutton2.set_tooltip_text(tooltip2)
-            self.vbox.pack_start(self.checkbutton2, expand=False, fill=True)
+            self.vbox.pack_start(self.checkbutton2, False, True, 0)
         else:
             self.checkbutton2 = None
 
@@ -1878,21 +1904,21 @@ class ConfirmationDialogDoubleRadio(ConfirmationDialog):
             parent = gajim.interface.roster.window
         else:
             parent = None
-        HigDialog.__init__(self, parent, gtk.MESSAGE_QUESTION,
-                gtk.BUTTONS_OK_CANCEL, pritext, sectext, self.on_response_ok,
+        HigDialog.__init__(self, parent, Gtk.MessageType.QUESTION,
+                Gtk.ButtonsType.OK_CANCEL, pritext, sectext, self.on_response_ok,
                 self.on_response_cancel)
 
-        self.set_default_response(gtk.RESPONSE_OK)
+        self.set_default_response(Gtk.ResponseType.OK)
 
         ok_button = self.action_area.get_children()[0] # right to left
         ok_button.grab_focus()
 
-        self.radiobutton1 = gtk.RadioButton(label=radiotext1)
-        self.vbox.pack_start(self.radiobutton1, expand=False, fill=True)
+        self.radiobutton1 = Gtk.RadioButton(label=radiotext1)
+        self.vbox.pack_start(self.radiobutton1, False, True, 0)
 
-        self.radiobutton2 = gtk.RadioButton(group=self.radiobutton1,
+        self.radiobutton2 = Gtk.RadioButton(group=self.radiobutton1,
                 label=radiotext2)
-        self.vbox.pack_start(self.radiobutton2, expand=False, fill=True)
+        self.vbox.pack_start(self.radiobutton2, False, True, 0)
 
         self.set_modal(is_modal)
         self.popup()
@@ -1934,18 +1960,20 @@ class FTOverwriteConfirmationDialog(ConfirmationDialog):
     """
 
     def __init__(self, pritext, sectext='', propose_resume=True,
-    on_response=None):
-        if hasattr(gajim.interface, 'roster') and gajim.interface.roster:
+    on_response=None, transient_for=None):
+        if transient_for:
+            parent = transient_for
+        elif hasattr(gajim.interface, 'roster') and gajim.interface.roster:
             parent = gajim.interface.roster.window
         else:
             parent = None
-        HigDialog.__init__(self, parent, gtk.MESSAGE_QUESTION,
-            gtk.BUTTONS_CANCEL, pritext, sectext)
+        HigDialog.__init__(self, parent, Gtk.MessageType.QUESTION,
+            Gtk.ButtonsType.CANCEL, pritext, sectext)
 
         self.on_response = on_response
 
         if propose_resume:
-            b = gtk.Button('', gtk.STOCK_REFRESH)
+            b = Gtk.Button('', Gtk.STOCK_REFRESH)
             align = b.get_children()[0]
             hbox = align.get_children()[0]
             label = hbox.get_children()[1]
@@ -1953,7 +1981,7 @@ class FTOverwriteConfirmationDialog(ConfirmationDialog):
             label.set_use_underline(True)
             self.add_action_widget(b, 100)
 
-        b = gtk.Button('', gtk.STOCK_SAVE_AS)
+        b = Gtk.Button('', Gtk.STOCK_SAVE_AS)
         align = b.get_children()[0]
         hbox = align.get_children()[0]
         label = hbox.get_children()[1]
@@ -2004,7 +2032,7 @@ class CommonInputDialog:
     def on_okbutton_clicked(self, widget):
         user_input = self.get_text()
         if user_input:
-            user_input = user_input.decode('utf-8')
+            user_input = user_input
         self.cancel_handler = None
         self.dialog.destroy()
         if isinstance(self.ok_handler, tuple):
@@ -2043,7 +2071,7 @@ class InputDialog(CommonInputDialog):
         self.input_entry.select_region(0, -1) # select all
 
     def get_text(self):
-        return self.input_entry.get_text().decode('utf-8')
+        return self.input_entry.get_text()
 
 class InputDialogCheck(InputDialog):
     """
@@ -2062,14 +2090,14 @@ class InputDialogCheck(InputDialog):
             self.input_entry.select_region(0, -1) # select all
 
         if checktext:
-            self.checkbutton = gtk.CheckButton(checktext)
-            self.vbox.pack_start(self.checkbutton, expand=False, fill=True)
+            self.checkbutton = Gtk.CheckButton(checktext)
+            self.vbox.pack_start(self.checkbutton, False, True, 0)
             self.checkbutton.show()
 
     def on_okbutton_clicked(self, widget):
         user_input = self.get_text()
         if user_input:
-            user_input = user_input.decode('utf-8')
+            user_input = user_input
         self.cancel_handler = None
         self.dialog.destroy()
         if isinstance(self.ok_handler, tuple):
@@ -2078,7 +2106,7 @@ class InputDialogCheck(InputDialog):
             self.ok_handler(user_input, self.is_checked())
 
     def get_text(self):
-        return self.input_entry.get_text().decode('utf-8')
+        return self.input_entry.get_text()
 
     def is_checked(self):
         """
@@ -2147,7 +2175,7 @@ class ChangeNickDialog(InputDialogCheck):
     def on_okbutton_clicked(self, widget):
         nick = self.get_text()
         if nick:
-            nick = nick.decode('utf-8')
+            nick = nick
         # send presence to room
         try:
             nick = helpers.parse_resource(nick)
@@ -2199,7 +2227,7 @@ class InputTextDialog(CommonInputDialog):
 
     def get_text(self):
         start_iter, end_iter = self.input_buffer.get_bounds()
-        return self.input_buffer.get_text(start_iter, end_iter).decode('utf-8')
+        return self.input_buffer.get_text(start_iter, end_iter, True)
 
 class DoubleInputDialog:
     """
@@ -2247,8 +2275,8 @@ class DoubleInputDialog:
             self.cancel_handler()
 
     def on_okbutton_clicked(self, widget):
-        user_input1 = self.input_entry1.get_text().decode('utf-8')
-        user_input2 = self.input_entry2.get_text().decode('utf-8')
+        user_input1 = self.input_entry1.get_text()
+        user_input2 = self.input_entry2.get_text()
         self.cancel_handler = None
         self.dialog.destroy()
         if not self.ok_handler:
@@ -2349,7 +2377,7 @@ class SubscriptionRequestWindow:
         menu = self.prepare_popup_menu()
         menu.show_all()
         gtkgui_helpers.popup_emoticons_under_button(menu, widget,
-            self.window.window)
+            self.window.get_window())
 
 
 class JoinGroupchatWindow:
@@ -2364,13 +2392,13 @@ class JoinGroupchatWindow:
             if room_jid != '' and room_jid in gajim.gc_connected[account] and \
             gajim.gc_connected[account][room_jid]:
                 ErrorDialog(_('You are already in group chat %s') % room_jid)
-                raise GajimGeneralException, 'You are already in this group chat'
+                raise GajimGeneralException('You are already in this group chat')
             if nick == '':
                 nick = gajim.nicks[account]
             if gajim.connections[account].connected < 2:
                 ErrorDialog(_('You are not connected to the server'),
                     _('You can not join a group chat unless you are connected.'))
-                raise GajimGeneralException, 'You must be connected to join a groupchat'
+                raise GajimGeneralException('You must be connected to join a groupchat')
 
         self.xml = gtkgui_helpers.get_gtk_builder('join_groupchat_window.ui')
 
@@ -2378,9 +2406,9 @@ class JoinGroupchatWindow:
         account_combobox = self.xml.get_object('account_combobox')
         account_label.set_no_show_all(False)
         account_combobox.set_no_show_all(False)
-        liststore = gtk.ListStore(str)
+        liststore = Gtk.ListStore(str)
         account_combobox.set_model(liststore)
-        cell = gtk.CellRendererText()
+        cell = Gtk.CellRendererText()
         account_combobox.pack_start(cell, True)
         account_combobox.add_attribute(cell, 'text', 0)
         account_combobox.set_active(-1)
@@ -2390,7 +2418,7 @@ class JoinGroupchatWindow:
         gajim.account_is_connected(a)]:
             if gajim.connections[acct].is_zeroconf:
                 continue
-            account_combobox.append_text(acct)
+            liststore.append([acct])
             if account and account == acct:
                 account_combobox.set_active(liststore.iter_n_children(None)-1)
 
@@ -2418,12 +2446,13 @@ class JoinGroupchatWindow:
             title = _('Join Group Chat')
         self.window.set_title(title)
 
-        self.server_comboboxentry = self.xml.get_object('server_comboboxentry')
-        self.server_model = self.server_comboboxentry.get_model()
-        server_list = []
-        # get the muc server of our server
-        if 'jabber' in gajim.connections[account].muc_jid:
-            server_list.append(gajim.connections[account].muc_jid['jabber'])
+
+        self.server_model = Gtk.ListStore(str)
+        self.server_comboboxentry = Gtk.ComboBox.new_with_model_and_entry(
+            self.server_model)
+        self.server_comboboxentry.set_entry_text_column(0)
+        hbox1 = self.xml.get_object('hbox1')
+        hbox1.pack_start(self.server_comboboxentry, False, False, 0)
 
         entry = self.server_comboboxentry.child
         entry.connect('changed', self.on_server_entry_changed)
@@ -2431,12 +2460,17 @@ class JoinGroupchatWindow:
         self.browse_button.set_sensitive(False)
 
         self.recently_combobox = self.xml.get_object('recently_combobox')
-        liststore = gtk.ListStore(str, str)
+        liststore = Gtk.ListStore(str, str)
         self.recently_combobox.set_model(liststore)
-        cell = gtk.CellRendererText()
+        cell = Gtk.CellRendererText()
         self.recently_combobox.pack_start(cell, True)
         self.recently_combobox.add_attribute(cell, 'text', 0)
         self.recently_groupchat = gajim.config.get('recently_groupchat').split()
+
+        server_list = []
+        # get the muc server of our server
+        if 'jabber' in gajim.connections[account].muc_jid:
+            server_list.append(gajim.connections[account].muc_jid['jabber'])
         for g in self.recently_groupchat:
             r_jid = gajim.get_jid_without_resource(g)
             nick = gajim.get_resource_from_jid(g)
@@ -2452,7 +2486,7 @@ class JoinGroupchatWindow:
 
         for s in server_list:
             self.server_model.append([s])
-        self.server_comboboxentry.set_active(0)
+
 
         self._set_room_jid(room_jid)
 
@@ -2495,7 +2529,7 @@ class JoinGroupchatWindow:
             del gajim.interface.instances[self.account]['join_gc']
 
     def on_join_groupchat_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape: # ESCAPE
+        if event.keyval == Gdk.KEY_Escape: # ESCAPE
             widget.destroy()
 
     def on_required_entry_changed(self, widget):
@@ -2513,31 +2547,32 @@ class JoinGroupchatWindow:
                 room_jid, server = text.split('@', 1)
                 self._room_jid_entry.set_text(room_jid)
                 if server:
-                    self.server_comboboxentry.child.set_text(server)
+                    self.server_comboboxentry.get_child().set_text(server)
                 self.server_comboboxentry.grab_focus()
 
     def on_account_combobox_changed(self, widget):
         model = widget.get_model()
         iter_ = widget.get_active_iter()
-        self.account = model[iter_][0].decode('utf-8')
+        self.account = model[iter_][0]
         self.on_required_entry_changed(self._nickname_entry)
 
     def _set_room_jid(self, full_jid):
         room_jid, nick = gajim.get_room_and_nick_from_fjid(full_jid)
         room, server = gajim.get_name_and_server_from_jid(room_jid)
         self._room_jid_entry.set_text(room)
-        self.server_comboboxentry.child.set_text(server)
+        model = self.server_comboboxentry.get_model()
+        self.server_comboboxentry.get_child().set_text(server)
         if nick:
             self._nickname_entry.set_text(nick)
 
     def on_recently_combobox_changed(self, widget):
         model = widget.get_model()
         iter_ = widget.get_active_iter()
-        full_jid = model[iter_][1].decode('utf-8')
+        full_jid = model[iter_][1]
         self._set_room_jid(full_jid)
 
     def on_browse_rooms_button_clicked(self, widget):
-        server = self.server_comboboxentry.child.get_text().decode('utf-8')
+        server = self.server_comboboxentry.get_child().get_text()
         self.requested_jid = server
         gajim.connections[self.account].discoverInfo(server)
 
@@ -2547,8 +2582,9 @@ class JoinGroupchatWindow:
         if obj.jid != self.requested_jid:
             return
         self.requested_jid = None
+        window = gajim.interface.instances[self.account]['join_gc'].window
         ErrorDialog(_('Wrong server'), _('%s is not a groupchat server') % \
-            obj.jid)
+            obj.jid, transient_for=window)
 
     def _nec_agent_info_received(self, obj):
         if obj.conn.name != self.account:
@@ -2557,8 +2593,9 @@ class JoinGroupchatWindow:
             return
         self.requested_jid = None
         if nbxmpp.NS_MUC not in obj.features:
+            window = gajim.interface.instances[self.account]['join_gc'].window
             ErrorDialog(_('Wrong server'), _('%s is not a groupchat server') % \
-                obj.jid)
+                obj.jid, transient_for=window)
             return
         if obj.jid in gajim.interface.instances[self.account]['disco']:
             gajim.interface.instances[self.account]['disco'][obj.jid].window.\
@@ -2601,12 +2638,11 @@ class JoinGroupchatWindow:
                 _('You have to choose an account from which you want to join the '
                 'groupchat.'))
             return
-        nickname = self._nickname_entry.get_text().decode('utf-8')
-        server = self.server_comboboxentry.child.get_text().decode('utf-8').\
-            strip()
-        room = self._room_jid_entry.get_text().decode('utf-8').strip()
+        nickname = self._nickname_entry.get_text()
+        server = self.server_comboboxentry.get_child().get_text()
+        room = self._room_jid_entry.get_text().strip()
         room_jid = room + '@' + server
-        password = self._password_entry.get_text().decode('utf-8')
+        password = self._password_entry.get_text()
         try:
             nickname = helpers.parse_resource(nickname)
         except Exception:
@@ -2663,18 +2699,19 @@ class SynchroniseSelectAccountDialog:
         if not account or gajim.connections[account].connected < 2:
             ErrorDialog(_('You are not connected to the server'),
                 _('Without a connection, you can not synchronise your contacts.'))
-            raise GajimGeneralException, 'You are not connected to the server'
+            raise GajimGeneralException('You are not connected to the server')
         self.account = account
         self.xml = gtkgui_helpers.get_gtk_builder('synchronise_select_account_dialog.ui')
         self.dialog = self.xml.get_object('synchronise_select_account_dialog')
+        self.dialog.set_transient_for(gajim.interface.instances['accounts'].window)
         self.accounts_treeview = self.xml.get_object('accounts_treeview')
-        model = gtk.ListStore(str, str, bool)
+        model = Gtk.ListStore(str, str, bool)
         self.accounts_treeview.set_model(model)
         # columns
-        renderer = gtk.CellRendererText()
+        renderer = Gtk.CellRendererText()
         self.accounts_treeview.insert_column_with_attributes(-1, _('Name'),
             renderer, text=0)
-        renderer = gtk.CellRendererText()
+        renderer = Gtk.CellRendererText()
         self.accounts_treeview.insert_column_with_attributes(-1, _('Server'),
             renderer, text=1)
 
@@ -2683,7 +2720,7 @@ class SynchroniseSelectAccountDialog:
         self.dialog.show_all()
 
     def on_accounts_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             self.window.destroy()
 
     def init_accounts(self):
@@ -2708,7 +2745,7 @@ class SynchroniseSelectAccountDialog:
         (model, iter_) = sel.get_selected()
         if not iter_:
             return
-        remote_account = model.get_value(iter_, 0).decode('utf-8')
+        remote_account = model.get_value(iter_, 0)
 
         if gajim.connections[remote_account].connected < 2:
             ErrorDialog(_('This account is not connected to the server'),
@@ -2730,15 +2767,15 @@ class SynchroniseSelectContactsDialog:
             'synchronise_select_contacts_dialog.ui')
         self.dialog = self.xml.get_object('synchronise_select_contacts_dialog')
         self.contacts_treeview = self.xml.get_object('contacts_treeview')
-        model = gtk.ListStore(bool, str)
+        model = Gtk.ListStore(bool, str)
         self.contacts_treeview.set_model(model)
         # columns
-        renderer1 = gtk.CellRendererToggle()
+        renderer1 = Gtk.CellRendererToggle()
         renderer1.set_property('activatable', True)
         renderer1.connect('toggled', self.toggled_callback)
         self.contacts_treeview.insert_column_with_attributes(-1,
             _('Synchronise'), renderer1, active=0)
-        renderer2 = gtk.CellRendererText()
+        renderer2 = Gtk.CellRendererText()
         self.contacts_treeview.insert_column_with_attributes(-1, _('Name'),
             renderer2, text=1)
 
@@ -2752,7 +2789,7 @@ class SynchroniseSelectContactsDialog:
         model[iter_][0] = not cell.get_active()
 
     def on_contacts_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             self.window.destroy()
 
     def init_contacts(self):
@@ -2777,11 +2814,11 @@ class SynchroniseSelectContactsDialog:
 
     def on_ok_button_clicked(self, widget):
         model = self.contacts_treeview.get_model()
-        iter_ = model.get_iter_root()
+        iter_ = model.get_iter_first()
         while iter_:
             if model[iter_][0]:
                 # it is selected
-                remote_jid = model[iter_][1].decode('utf-8')
+                remote_jid = model[iter_][1]
                 message = 'I\'m synchronizing my contacts from my %s account, could you please add this address to your contact list?' % \
                     gajim.get_hostname_from_account(self.remote_account)
                 remote_contact = gajim.contacts.get_first_contact_from_jid(
@@ -2803,6 +2840,7 @@ class NewChatDialog(InputDialog):
             title = _('Start Chat')
         prompt_text = _('Fill in the nickname or the Jabber ID of the contact you would like\nto send a chat message to:')
         InputDialog.__init__(self, title, prompt_text, is_modal=False)
+        self.input_entry.set_placeholder_text(_('Nickname / Jabber ID'))
 
         self.completion_dict = {}
         liststore = gtkgui_helpers.get_completion_liststore(self.input_entry)
@@ -2837,8 +2875,8 @@ class NewChatDialog(InputDialog):
         else:
             try:
                 jid = helpers.parse_jid(jid)
-            except helpers.InvalidFormat, e:
-                ErrorDialog(_('Invalid JID'), e[0])
+            except helpers.InvalidFormat as e:
+                ErrorDialog(_('Invalid JID'), str(e))
                 return
             except:
                 ErrorDialog(_('Invalid JID'), _('Unable to parse "%s".') % jid)
@@ -2846,16 +2884,17 @@ class NewChatDialog(InputDialog):
         gajim.interface.new_chat_from_jid(self.account, jid)
 
 class ChangePasswordDialog:
-    def __init__(self, account, on_response):
+    def __init__(self, account, on_response, transient_for=None):
         # 'account' can be None if we are about to create our first one
         if not account or gajim.connections[account].connected < 2:
             ErrorDialog(_('You are not connected to the server'),
                 _('Without a connection, you can not change your password.'))
-            raise GajimGeneralException, 'You are not connected to the server'
+            raise GajimGeneralException('You are not connected to the server')
         self.account = account
         self.on_response = on_response
         self.xml = gtkgui_helpers.get_gtk_builder('change_password_dialog.ui')
         self.dialog = self.xml.get_object('change_password_dialog')
+        self.dialog.set_transient_for(transient_for)
         self.password1_entry = self.xml.get_object('password1_entry')
         self.password2_entry = self.xml.get_object('password2_entry')
         self.dialog.connect('response', self.on_dialog_response)
@@ -2863,15 +2902,15 @@ class ChangePasswordDialog:
         self.dialog.show_all()
 
     def on_dialog_response(self, dialog, response):
-        if response != gtk.RESPONSE_OK:
+        if response != Gtk.ResponseType.OK:
             dialog.destroy()
             self.on_response(None)
             return
-        password1 = self.password1_entry.get_text().decode('utf-8')
+        password1 = self.password1_entry.get_text()
         if not password1:
             ErrorDialog(_('Invalid password'), _('You must enter a password.'))
             return
-        password2 = self.password2_entry.get_text().decode('utf-8')
+        password2 = self.password2_entry.get_text()
         if password1 != password2:
             ErrorDialog(_('Passwords do not match'),
                 _('The passwords typed in both fields must be identical.'))
@@ -2889,7 +2928,7 @@ class PopupNotificationWindow:
 
         xml = gtkgui_helpers.get_gtk_builder('popup_notification_window.ui')
         self.window = xml.get_object('popup_notification_window')
-        self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_TOOLTIP)
+        self.window.set_type_hint(Gdk.WindowTypeHint.TOOLTIP)
         close_button = xml.get_object('close_button')
         event_type_label = xml.get_object('event_type_label')
         event_description_label = xml.get_object('event_description_label')
@@ -2903,10 +2942,12 @@ class PopupNotificationWindow:
 
         event_type_label.set_markup(
             '<span foreground="black" weight="bold">%s</span>' %
-            gobject.markup_escape_text(title))
+            GLib.markup_escape_text(title))
 
         # set colors [ http://www.pitt.edu/~nisg/cis/web/cgi/rgb.html ]
-        self.window.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('black'))
+        color = Gdk.RGBA()
+        Gdk.RGBA.parse(color, 'black')
+        self.window.override_background_color(Gtk.StateType.NORMAL, color)
 
         # default image
         if not path_to_image:
@@ -2932,11 +2973,13 @@ class PopupNotificationWindow:
             bg_color = gajim.config.get('notif_status_color')
         else: # Unknown event! Shouldn't happen but deal with it
             bg_color = gajim.config.get('notif_other_color')
-        popup_bg_color = gtk.gdk.color_parse(bg_color)
-        close_button.modify_bg(gtk.STATE_NORMAL, popup_bg_color)
-        eventbox.modify_bg(gtk.STATE_NORMAL, popup_bg_color)
+        popup_bg_color = Gdk.RGBA()
+        Gdk.RGBA.parse(popup_bg_color, bg_color)
+        close_button.override_background_color(Gtk.StateType.NORMAL,
+            popup_bg_color)
+        eventbox.override_background_color(Gtk.StateType.NORMAL, popup_bg_color)
         event_description_label.set_markup('<span foreground="black">%s</span>' %
-            gobject.markup_escape_text(text))
+            GLib.markup_escape_text(text))
 
         # set the image
         image.set_from_file(path_to_image)
@@ -2946,17 +2989,17 @@ class PopupNotificationWindow:
         gajim.interface.roster.popups_notification_height += self.window_height
         pos_x = gajim.config.get('notification_position_x')
         if pos_x < 0:
-            pos_x = gtk.gdk.screen_width() - window_width + pos_x + 1
+            pos_x = Gdk.Screen.width() - window_width + pos_x + 1
         pos_y = gajim.config.get('notification_position_y')
         if pos_y < 0:
-            pos_y = gtk.gdk.screen_height() - \
+            pos_y = Gdk.Screen.height() - \
                 gajim.interface.roster.popups_notification_height + pos_y + 1
         self.window.move(pos_x, pos_y)
 
         xml.connect_signals(self)
         self.window.show_all()
         if timeout > 0:
-            gobject.timeout_add_seconds(timeout, self.on_timeout)
+            GLib.timeout_add_seconds(timeout, self.on_timeout)
 
     def on_close_button_clicked(self, widget):
         self.adjust_height_and_move_popup_notification_windows()
@@ -2981,8 +3024,8 @@ class PopupNotificationWindow:
             current_index += 1
             window_width, window_height = window_instance.window.get_size()
             gajim.interface.roster.popups_notification_height += window_height
-            window_instance.window.move(gtk.gdk.screen_width() - window_width,
-                gtk.gdk.screen_height() - \
+            window_instance.window.move(Gdk.Screen.width() - window_width,
+                Gdk.Screen.height() - \
                 gajim.interface.roster.popups_notification_height)
 
     def on_popup_notification_window_button_press_event(self, widget, event):
@@ -3066,7 +3109,7 @@ class SingleMessageWindow:
                     lang = gajim.LANG
                 gtkspell.Spell(self.conversation_textview.tv, lang)
                 gtkspell.Spell(self.message_textview, lang)
-            except (gobject.GError, TypeError, RuntimeError, OSError):
+            except (GObject.GError, TypeError, RuntimeError, OSError):
                 AspellDictError(lang)
 
         self.prepare_widgets_for(self.action)
@@ -3154,7 +3197,7 @@ class SingleMessageWindow:
                 self.cancel_button.hide()
                 self.close_button.show()
                 self.message_tv_buffer.set_text(self.message)
-                gobject.idle_add(self.set_cursor_to_end)
+                GLib.idle_add(self.set_cursor_to_end)
             else: # we write a new message (not from reply)
                 self.close_button.hide()
                 if self.to: # do we already have jid?
@@ -3207,7 +3250,7 @@ class SingleMessageWindow:
 
     def update_char_counter(self, widget):
         characters_no = self.message_tv_buffer.get_char_count()
-        self.count_chars_label.set_text(unicode(characters_no))
+        self.count_chars_label.set_text(str(characters_no))
 
     def send_single_message(self):
         if gajim.connections[self.account].connected <= 1:
@@ -3223,12 +3266,12 @@ class SingleMessageWindow:
                 else:
                     sender_list.append(i[0].jid)
         else:
-            sender_list = [j.strip() for j in self.to_entry.get_text().decode(
-                'utf-8').split(',')]
+            sender_list = [j.strip() for j in self.to_entry.get_text().split(
+                ',')]
 
-        subject = self.subject_entry.get_text().decode('utf-8')
+        subject = self.subject_entry.get_text()
         begin, end = self.message_tv_buffer.get_bounds()
-        message = self.message_tv_buffer.get_text(begin, end).decode('utf-8')
+        message = self.message_tv_buffer.get_text(begin, end, True)
 
         if self.form_widget:
             form_node = self.form_widget.data_form
@@ -3283,7 +3326,7 @@ class SingleMessageWindow:
         self.window.destroy()
 
     def on_single_message_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape: # ESCAPE
+        if event.keyval == Gdk.KEY_Escape: # ESCAPE
             self.save_pos()
             self.window.destroy()
 
@@ -3324,8 +3367,9 @@ class XMLConsoleWindow:
         self.enabled = True
         self.xml.get_object('enable_checkbutton').set_active(True)
 
-        self.input_textview.modify_text(
-            gtk.STATE_NORMAL, gtk.gdk.color_parse(color))
+        col = Gdk.RGBA()
+        Gdk.RGBA.parse(col, color)
+        self.input_textview.override_color(Gtk.StateType.NORMAL, col)
 
         if len(gajim.connections) > 1:
             title = _('XML Console for %s') % self.account
@@ -3434,7 +3478,7 @@ class XMLConsoleWindow:
         buffer.insert_with_tags_by_name(end_iter, stanza.replace('><', '>\n<') \
             + '\n\n', type_)
         if at_the_end:
-            gobject.idle_add(self.scroll_to_end)
+            GLib.idle_add(self.scroll_to_end)
 
     def _nec_stanza_received(self, obj):
         if obj.conn.name != self.account:
@@ -3454,8 +3498,7 @@ class XMLConsoleWindow:
                 self.account)
             return
         begin_iter, end_iter = self.input_tv_buffer.get_bounds()
-        stanza = self.input_tv_buffer.get_text(begin_iter, end_iter).decode(
-            'utf-8')
+        stanza = self.input_tv_buffer.get_text(begin_iter, end_iter, True)
         if stanza:
             gajim.connections[self.account].send_stanza(stanza)
             self.input_tv_buffer.set_text('') # we sent ok, clear the textview
@@ -3518,10 +3561,10 @@ class RosterItemExchangeWindow:
         else:
             self.body_scrolledwindow.hide()
         # Treeview
-        model = gtk.ListStore(bool, str, str, str, str)
+        model = Gtk.ListStore(bool, str, str, str, str)
         self.items_list_treeview.set_model(model)
         # columns
-        renderer1 = gtk.CellRendererToggle()
+        renderer1 = Gtk.CellRendererToggle()
         renderer1.set_property('activatable', True)
         renderer1.connect('toggled', self.toggled_callback)
         if self.action == 'add':
@@ -3532,13 +3575,13 @@ class RosterItemExchangeWindow:
             title = _('Delete')
         self.items_list_treeview.insert_column_with_attributes(-1, title,
             renderer1, active=0)
-        renderer2 = gtk.CellRendererText()
+        renderer2 = Gtk.CellRendererText()
         self.items_list_treeview.insert_column_with_attributes(-1, _('Jabber ID'),
             renderer2, text=1)
-        renderer3 = gtk.CellRendererText()
+        renderer3 = Gtk.CellRendererText()
         self.items_list_treeview.insert_column_with_attributes(-1, _('Name'),
             renderer3, text=2)
-        renderer4 = gtk.CellRendererText()
+        renderer4 = Gtk.CellRendererText()
         self.items_list_treeview.insert_column_with_attributes(-1, _('Groups'),
             renderer4, text=3)
 
@@ -3639,21 +3682,21 @@ class RosterItemExchangeWindow:
 
     def on_accept_button_clicked(self, widget):
         model = self.items_list_treeview.get_model()
-        iter_ = model.get_iter_root()
+        iter_ = model.get_iter_first()
         if self.action == 'add':
             a = 0
             while iter_:
                 if model[iter_][0]:
                     a+=1
                     # it is selected
-                    #remote_jid = model[iter_][1].decode('utf-8')
+                    #remote_jid = model[iter_][1]
                     message = _('%s suggested me to add you in my roster.'
                             % self.jid_from)
                     # keep same groups and same nickname
                     groups = model[iter_][3].split(', ')
                     if groups == ['']:
                         groups = []
-                    jid = model[iter_][1].decode('utf-8')
+                    jid = model[iter_][1]
                     if gajim.jid_is_transport(self.jid_from):
                         gajim.connections[self.account].automatically_added.append(
                                 jid)
@@ -3669,7 +3712,7 @@ class RosterItemExchangeWindow:
                 if model[iter_][0]:
                     a+=1
                     # it is selected
-                    jid = model[iter_][1].decode('utf-8')
+                    jid = model[iter_][1]
                     # keep same groups and same nickname
                     groups = model[iter_][3].split(', ')
                     if groups == ['']:
@@ -3694,7 +3737,7 @@ class RosterItemExchangeWindow:
                 if model[iter_][0]:
                     a+=1
                     # it is selected
-                    jid = model[iter_][1].decode('utf-8')
+                    jid = model[iter_][1]
                     gajim.connections[self.account].unsubscribe(jid)
                     gajim.interface.roster.remove_contact(jid, self.account)
                     gajim.contacts.remove_jid(self.account, jid)
@@ -3770,7 +3813,7 @@ class ItemArchivingPreferencesWindow:
         if self.item != 'Default':
             try:
                 item = helpers.parse_jid(item)
-            except helpers.InvalidFormat, s:
+            except helpers.InvalidFormat as s:
                 pritext = _('Invalid User ID')
                 ErrorDialog(pritext, str(s))
                 return
@@ -3817,8 +3860,8 @@ class ItemArchivingPreferencesWindow:
 
     def launch_progressbar(self):
         self.progressbar.show()
-        self.update_progressbar_timeout_id = gobject.timeout_add(
-            100, self.update_progressbar)
+        self.update_progressbar_timeout_id = GLib.timeout_add(100,
+            self.update_progressbar)
 
     def response_arrived(self, data):
         if self.waiting:
@@ -3865,26 +3908,26 @@ class ArchivingPreferencesWindow:
             self.method_foo_index[gajim.connections[self.account].\
                 method_manual])
 
-        model = gtk.ListStore(str, str, str, str)
+        model = Gtk.ListStore(str, str, str, str)
         self.item_treeview.set_model(model)
-        col = gtk.TreeViewColumn('jid')
+        col = Gtk.TreeViewColumn('jid')
         self.item_treeview.append_column(col)
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer, True)
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True, True, 0)
         col.set_attributes(renderer, text=0)
 
-        col = gtk.TreeViewColumn('expire')
-        col.pack_start(renderer, True)
+        col = Gtk.TreeViewColumn('expire')
+        col.pack_start(renderer, True, True, 0)
         col.set_attributes(renderer, text=1)
         self.item_treeview.append_column(col)
 
-        col = gtk.TreeViewColumn('otr')
-        col.pack_start(renderer, True)
+        col = Gtk.TreeViewColumn('otr')
+        col.pack_start(renderer, True, True, 0)
         col.set_attributes(renderer, text=2)
         self.item_treeview.append_column(col)
 
-        col = gtk.TreeViewColumn('save')
-        col.pack_start(renderer, True)
+        col = Gtk.TreeViewColumn('save')
+        col.pack_start(renderer, True, True, 0)
         col.set_attributes(renderer, text=3)
         self.item_treeview.append_column(col)
 
@@ -3892,7 +3935,7 @@ class ArchivingPreferencesWindow:
 
         self.current_item = None
 
-        def sort_items(model, iter1, iter2):
+        def sort_items(model, iter1, iter2, data=None):
             item1 = model.get_value(iter1, 0)
             item2 = model.get_value(iter2, 0)
             if item1 == 'Default':
@@ -3911,7 +3954,7 @@ class ArchivingPreferencesWindow:
             # item1 == item2 ? WTF?
             return 0
 
-        model.set_sort_column_id(0, gtk.SORT_ASCENDING)
+        model.set_sort_column_id(0, Gtk.SortType.ASCENDING)
         model.set_sort_func(0, sort_items)
 
         self.remove_button.set_sensitive(False)
@@ -4117,7 +4160,7 @@ class PrivacyListWindow:
 
         self.privacy_lists_title_label.set_label(
                 _('Privacy List <b><i>%s</i></b>') % \
-                gobject.markup_escape_text(self.privacy_list_name))
+                GLib.markup_escape_text(self.privacy_list_name))
 
         if len(gajim.connections) > 1:
             title = _('Privacy List for %s') % self.account
@@ -4131,10 +4174,10 @@ class PrivacyListWindow:
         self.list_of_rules_combobox.set_sensitive(False)
 
         # set jabber id completion
-        jids_list_store = gtk.ListStore(gobject.TYPE_STRING)
+        jids_list_store = Gtk.ListStore(GObject.TYPE_STRING)
         for jid in gajim.contacts.get_jid_list(self.account):
             jids_list_store.append([jid])
-        jid_entry_completion = gtk.EntryCompletion()
+        jid_entry_completion = Gtk.EntryCompletion()
         jid_entry_completion.set_text_column(0)
         jid_entry_completion.set_model(jids_list_store)
         jid_entry_completion.set_popup_completion(True)
@@ -4142,11 +4185,12 @@ class PrivacyListWindow:
         if action == 'EDIT':
             self.refresh_rules()
 
+        model = self.edit_type_group_combobox.get_model()
         count = 0
         for group in gajim.groups[self.account]:
             self.list_of_groups[group] = count
             count += 1
-            self.edit_type_group_combobox.append_text(group)
+            model.append([group])
         self.edit_type_group_combobox.set_active(0)
 
         self.window.set_title(title)
@@ -4183,7 +4227,8 @@ class PrivacyListWindow:
             self.privacy_list_default_checkbutton.set_active(False)
 
     def privacy_list_received(self, rules):
-        self.list_of_rules_combobox.get_model().clear()
+        model = self.list_of_rules_combobox.get_model()
+        model.clear()
         self.global_rules = {}
         for rule in rules:
             if 'type' in rule:
@@ -4197,7 +4242,7 @@ class PrivacyListWindow:
             if int(rule['order']) > self.max_order:
                 self.max_order = int(rule['order'])
             self.global_rules[text_item] = rule
-            self.list_of_rules_combobox.append_text(text_item)
+            model.append([text_item])
         if len(rules) == 0:
             self.title_hbox.set_sensitive(False)
             self.list_of_rules_combobox.set_sensitive(False)
@@ -4227,9 +4272,12 @@ class PrivacyListWindow:
         gajim.connections[self.account].get_privacy_list(self.privacy_list_name)
 
     def on_delete_rule_button_clicked(self, widget):
+        model = self.list_of_rules_combobox.get_model()
+        iter_ = self.list_of_rules_combobox.get_active_iter()
+        _rule = model[iter_][0]
         tags = []
         for rule in self.global_rules:
-            if rule != self.list_of_rules_combobox.get_active_text():
+            if rule != _rule:
                 tags.append(self.global_rules[rule])
         gajim.connections[self.account].set_privacy_list(
                 self.privacy_list_name, tags)
@@ -4248,8 +4296,9 @@ class PrivacyListWindow:
         if active_num == -1:
             self.active_rule = ''
         else:
-            self.active_rule = \
-                self.list_of_rules_combobox.get_active_text().decode('utf-8')
+            model = self.list_of_rules_combobox.get_model()
+            iter_ = self.list_of_rules_combobox.get_active_iter()
+            self.active_rule = model[iter_][0]
         if self.active_rule != '':
             rule_info = self.global_rules[self.active_rule]
             self.edit_order_spinbutton.set_value(int(rule_info['order']))
@@ -4362,7 +4411,9 @@ class PrivacyListWindow:
             edit_value = self.edit_type_jabberid_entry.get_text()
         elif self.edit_type_group_radiobutton.get_active():
             edit_type = 'group'
-            edit_value = self.edit_type_group_combobox.get_active_text()
+            model = self.edit_type_group_combobox.get_model()
+            iter_ = self.edit_type_group_combobox.get_active_iter()
+            edit_value = model[iter_][0]
         elif self.edit_type_subscription_radiobutton.get_active():
             edit_type = 'subscription'
             subs = ['none', 'both', 'from', 'to']
@@ -4486,7 +4537,8 @@ class PrivacyListsWindow:
     def add_privacy_list_to_combobox(self, privacy_list):
         if privacy_list in self.privacy_lists_save:
             return
-        self.list_of_privacy_lists_combobox.append_text(privacy_list)
+        model = self.list_of_privacy_lists_combobox.get_model()
+        model.append([privacy_list])
         self.privacy_lists_save.append(privacy_list)
 
     def draw_privacy_lists_in_combobox(self, privacy_lists):
@@ -4594,7 +4646,7 @@ class InvitationReceivedDialog:
             contact_text)
 
         if comment: # only if not None and not ''
-            comment = gobject.markup_escape_text(comment)
+            comment = GLib.markup_escape_text(comment)
             comment = _('Comment: %s') % comment
             sectext += '\n\n%s' % comment
         sectext += '\n\n' + _('Do you want to accept the invitation?')
@@ -4631,11 +4683,11 @@ class ProgressDialog:
         self.progressbar = self.xml.get_object('progressbar')
         self.dialog.set_title(title_text)
         self.dialog.set_default_size(450, 250)
-        self.window.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
+        self.window.set_position(Gtk.WindowPosition.CENTER_ON_PARENT)
         self.dialog.show_all()
         self.xml.connect_signals(self)
 
-        self.update_progressbar_timeout_id = gobject.timeout_add(100,
+        self.update_progressbar_timeout_id = GLib.timeout_add(100,
             self.update_progressbar)
 
     def update_progressbar(self):
@@ -4667,20 +4719,21 @@ class ClientCertChooserDialog(FileChooserDialog):
 
         FileChooserDialog.__init__(self,
             title_text=_('Choose Client Cert #PCKS12'),
-            action=gtk.FILE_CHOOSER_ACTION_OPEN,
-            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-            gtk.STOCK_OPEN, gtk.RESPONSE_OK),
+            transient_for=gajim.interface.instances['accounts'].window,
+            action=Gtk.FileChooserAction.OPEN,
+            buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+            Gtk.STOCK_OPEN, Gtk.ResponseType.OK),
             current_folder='',
-            default_response=gtk.RESPONSE_OK,
+            default_response=Gtk.ResponseType.OK,
             on_response_ok=(on_ok, on_response_ok),
             on_response_cancel=on_response_cancel)
 
-        filter_ = gtk.FileFilter()
+        filter_ = Gtk.FileFilter()
         filter_.set_name(_('All files'))
         filter_.add_pattern('*')
         self.add_filter(filter_)
 
-        filter_ = gtk.FileFilter()
+        filter_ = Gtk.FileFilter()
         filter_.set_name(_('PKCS12 Files'))
         filter_.add_pattern('*.p12')
         self.add_filter(filter_)
@@ -4709,20 +4762,20 @@ class SoundChooserDialog(FileChooserDialog):
                 callback(widget, path_to_snd_file)
 
         FileChooserDialog.__init__(self, title_text = _('Choose Sound'),
-           action = gtk.FILE_CHOOSER_ACTION_OPEN,
-           buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                                  gtk.STOCK_OPEN, gtk.RESPONSE_OK),
-           default_response = gtk.RESPONSE_OK,
+           action = Gtk.FileChooserAction.OPEN,
+           buttons = (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+                                  Gtk.STOCK_OPEN, Gtk.ResponseType.OK),
+           default_response = Gtk.ResponseType.OK,
            current_folder = gajim.config.get('last_sounds_dir'),
            on_response_ok = (on_ok, on_response_ok),
            on_response_cancel = on_response_cancel)
 
-        filter_ = gtk.FileFilter()
+        filter_ = Gtk.FileFilter()
         filter_.set_name(_('All files'))
         filter_.add_pattern('*')
         self.add_filter(filter_)
 
-        filter_ = gtk.FileFilter()
+        filter_ = Gtk.FileFilter()
         filter_.set_name(_('Wav Sounds'))
         filter_.add_pattern('*.wav')
         self.add_filter(filter_)
@@ -4762,10 +4815,10 @@ class ImageChooserDialog(FileChooserDialog):
             path = ''
         FileChooserDialog.__init__(self,
            title_text = _('Choose Image'),
-           action = gtk.FILE_CHOOSER_ACTION_OPEN,
-           buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                                  gtk.STOCK_OPEN, gtk.RESPONSE_OK),
-           default_response = gtk.RESPONSE_OK,
+           action = Gtk.FileChooserAction.OPEN,
+           buttons = (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+                                  Gtk.STOCK_OPEN, Gtk.ResponseType.OK),
+           default_response = Gtk.ResponseType.OK,
            current_folder = path,
            on_response_ok = (on_ok, on_response_ok),
            on_response_cancel = on_response_cancel)
@@ -4773,12 +4826,12 @@ class ImageChooserDialog(FileChooserDialog):
         if on_response_cancel:
             self.connect('destroy', on_response_cancel)
 
-        filter_ = gtk.FileFilter()
+        filter_ = Gtk.FileFilter()
         filter_.set_name(_('All files'))
         filter_.add_pattern('*')
         self.add_filter(filter_)
 
-        filter_ = gtk.FileFilter()
+        filter_ = Gtk.FileFilter()
         filter_.set_name(_('Images'))
         filter_.add_mime_type('image/png')
         filter_.add_mime_type('image/jpeg')
@@ -4793,7 +4846,7 @@ class ImageChooserDialog(FileChooserDialog):
             self.set_filename(path_to_file)
 
         self.set_use_preview_label(False)
-        self.set_preview_widget(gtk.Image())
+        self.set_preview_widget(Gtk.Image())
         self.connect('selection-changed', self.update_preview)
 
     def update_preview(self, widget):
@@ -4801,11 +4854,12 @@ class ImageChooserDialog(FileChooserDialog):
         if path_to_file is None or os.path.isdir(path_to_file):
             # nothing to preview or directory
             # make sure you clean image do show nothing
-            widget.get_preview_widget().set_from_file(None)
+            preview = widget.get_preview_widget()
+            preview.clear()
             return
         try:
-            pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(path_to_file, 100, 100)
-        except gobject.GError:
+            pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(path_to_file, 100, 100)
+        except GObject.GError:
             return
         widget.get_preview_widget().set_from_pixbuf(pixbuf)
 
@@ -4814,12 +4868,12 @@ class AvatarChooserDialog(ImageChooserDialog):
             on_response_cancel=None, on_response_clear=None):
         ImageChooserDialog.__init__(self, path_to_file, on_response_ok,
             on_response_cancel)
-        button = gtk.Button(None, gtk.STOCK_CLEAR)
+        button = Gtk.Button(None, Gtk.STOCK_CLEAR)
         self.response_clear = on_response_clear
         if on_response_clear:
             button.connect('clicked', self.on_clear)
         button.show_all()
-        self.action_area.pack_start(button)
+        self.action_area.pack_start(button, True, True, 0)
         self.action_area.reorder_child(button, 0)
 
     def on_clear(self, widget):
@@ -4850,10 +4904,10 @@ class ArchiveChooserDialog(FileChooserDialog):
 
         FileChooserDialog.__init__(self,
             title_text=_('Choose Archive'),
-            action=gtk.FILE_CHOOSER_ACTION_OPEN,
-            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                gtk.STOCK_OPEN, gtk.RESPONSE_OK),
-            default_response=gtk.RESPONSE_OK,
+            action=Gtk.FileChooserAction.OPEN,
+            buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+                Gtk.STOCK_OPEN, Gtk.ResponseType.OK),
+            default_response=Gtk.ResponseType.OK,
             current_folder=path,
             on_response_ok=(on_ok, on_response_ok),
             on_response_cancel=on_response_cancel)
@@ -4861,12 +4915,12 @@ class ArchiveChooserDialog(FileChooserDialog):
         if on_response_cancel:
             self.connect('destroy', on_response_cancel)
 
-        filter_ = gtk.FileFilter()
+        filter_ = Gtk.FileFilter()
         filter_.set_name(_('All files'))
         filter_.add_pattern('*')
         self.add_filter(filter_)
 
-        filter_ = gtk.FileFilter()
+        filter_ = Gtk.FileFilter()
         filter_.set_name(_('Zip files'))
         filter_.add_pattern('*.zip')
 
@@ -4910,7 +4964,6 @@ class AddSpecialNotificationDialog:
         if active == 1: # user selected 'choose sound'
             def on_ok(widget, path_to_snd_file):
                 pass
-                #print path_to_snd_file
 
             def on_cancel(widget):
                 widget.set_active(0) # go back to No Sound
@@ -4949,10 +5002,11 @@ class TransformChatToMUC:
             self.__dict__[widget_to_add] = self.xml.get_object(widget_to_add)
 
         server_list = []
-        self.servers = gtk.ListStore(str)
+        self.servers = Gtk.ListStore(str)
         self.server_list_comboboxentry.set_model(self.servers)
-
-        self.server_list_comboboxentry.set_text_column(0)
+        cell = Gtk.CellRendererText()
+        self.server_list_comboboxentry.pack_start(cell, True)
+        self.server_list_comboboxentry.add_attribute(cell, 'text', 0)
 
         # get the muc server of our server
         if 'jabber' in gajim.connections[account].muc_jid:
@@ -4974,18 +5028,18 @@ class TransformChatToMUC:
 
         # set treeview
         # name, jid
-        self.store = gtk.ListStore(gtk.gdk.Pixbuf, str, str)
-        self.store.set_sort_column_id(1, gtk.SORT_ASCENDING)
+        self.store = Gtk.ListStore(GdkPixbuf.Pixbuf, str, str)
+        self.store.set_sort_column_id(1, Gtk.SortType.ASCENDING)
         self.guests_treeview.set_model(self.store)
 
-        renderer1 = gtk.CellRendererText()
-        renderer2 = gtk.CellRendererPixbuf()
-        column = gtk.TreeViewColumn('Status', renderer2, pixbuf=0)
+        renderer1 = Gtk.CellRendererText()
+        renderer2 = Gtk.CellRendererPixbuf()
+        column = Gtk.TreeViewColumn('Status', renderer2, pixbuf=0)
         self.guests_treeview.append_column(column)
-        column = gtk.TreeViewColumn('Name', renderer1, text=1)
+        column = Gtk.TreeViewColumn('Name', renderer1, text=1)
         self.guests_treeview.append_column(column)
 
-        self.guests_treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
+        self.guests_treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
 
         # All contacts beside the following can be invited:
         #       transports, zeroconf contacts, minimized groupchats
@@ -5035,11 +5089,13 @@ class TransformChatToMUC:
         self.instances.remove(self)
 
     def on_chat_to_muc_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape: # ESCAPE
+        if event.keyval == Gdk.KEY_Escape: # ESCAPE
             self.window.destroy()
 
     def on_invite_button_clicked(self, widget):
-        server = self.server_list_comboboxentry.get_active_text()
+        row = self.server_list_comboboxentry.get_child().get_displayed_row()
+        model = self.server_list_comboboxentry.get_model()
+        server = model[row][0].strip()
         if server == '':
             return
         gajim.connections[self.account].check_unique_room_id_support(server, self)
@@ -5051,7 +5107,7 @@ class TransformChatToMUC:
         guests = self.guests_treeview.get_selection().get_selected_rows()
         for guest in guests[1]:
             iter_ = self.store.get_iter(guest)
-            guest_list.append(self.store[iter_][2].decode('utf-8'))
+            guest_list.append(self.store[iter_][2])
         for guest in self.auto_jids:
             guest_list.append(guest)
         room_jid = obj.room_id + '@' + obj.server
@@ -5075,8 +5131,8 @@ class TransformChatToMUC:
 class DataFormWindow(Dialog):
     def __init__(self, form, on_response_ok):
         self.df_response_ok = on_response_ok
-        Dialog.__init__(self, None, 'test', [(gtk.STOCK_CANCEL,
-            gtk.RESPONSE_REJECT), (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)],
+        Dialog.__init__(self, None, 'test', [(Gtk.STOCK_CANCEL,
+            Gtk.ResponseType.REJECT), (Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT)],
             on_response_ok=self.on_ok)
         self.set_resizable(True)
         gtkgui_helpers.resize_window(self, 600, 400)
@@ -5085,7 +5141,7 @@ class DataFormWindow(Dialog):
         self.dataform_widget.set_sensitive(True)
         self.dataform_widget.data_form = self.dataform
         self.dataform_widget.show_all()
-        self.vbox.pack_start(self.dataform_widget)
+        self.vbox.pack_start(self.dataform_widget, True, True, 0)
 
     def on_ok(self):
         form = self.dataform_widget.data_form
@@ -5107,7 +5163,7 @@ class ESessionInfoWindow:
 
         self.security_image = self.xml.get_object('security_image')
         self.verify_now_button = self.xml.get_object('verify_now_button')
-        self.button_label = self.xml.get_object('button_label')
+        self.button_label = self.xml.get_object('verification_status_label')
         self.window = self.xml.get_object('esession_info_window')
         self.update_info()
         self.window.set_transient_for(transient_for)
@@ -5175,7 +5231,7 @@ class GPGInfoWindow:
     """
     Class for displaying information about a XEP-0116 encrypted session
     """
-    def __init__(self, control):
+    def __init__(self, control, transient_for=None):
         xml = gtkgui_helpers.get_gtk_builder('esession_info_window.ui')
         security_image = xml.get_object('security_image')
         status_label = xml.get_object('verification_status_label')
@@ -5309,7 +5365,7 @@ class VoIPCallReceivedDialog(object):
 
     def on_voip_call_received_messagedialog_close(self, dialog):
         return self.on_voip_call_received_messagedialog_response(dialog,
-                gtk.RESPONSE_NO)
+                Gtk.ResponseType.NO)
 
     def on_voip_call_received_messagedialog_response(self, dialog, response):
         # we've got response from user, either stop connecting or accept the call
@@ -5318,7 +5374,7 @@ class VoIPCallReceivedDialog(object):
         if not session:
             dialog.destroy()
             return
-        if response == gtk.RESPONSE_YES:
+        if response == Gtk.ResponseType.YES:
             #TODO: Ensure that ctrl.contact.resource == resource
             jid = gajim.get_jid_without_resource(self.fjid)
             resource = gajim.get_resource_from_jid(self.fjid)
@@ -5338,12 +5394,13 @@ class VoIPCallReceivedDialog(object):
                     fixed = ctrl.xml.get_object('outgoing_fixed')
                     fixed.set_no_show_all(False)
                 video_hbox.show_all()
-                in_xid = ctrl.xml.get_object('incoming_drawingarea').window.xid
+                in_xid = ctrl.xml.get_object('incoming_drawingarea').\
+                    get_window().xid
                 content = session.get_content('video')
                 # move outgoing stream to chat window
                 if gajim.config.get('video_see_self'):
                     out_xid = ctrl.xml.get_object('outgoing_drawingarea').\
-                        window.xid
+                        get_window().xid
                     b = content.src_bin
                     found = False
                     for e in b.elements():
@@ -5364,7 +5421,7 @@ class VoIPCallReceivedDialog(object):
                 session.approve_session()
             for content in self.content_types:
                 session.approve_content(content)
-        else: # response==gtk.RESPONSE_NO
+        else: # response==Gtk.ResponseType.NO
             if not session.accepted:
                 session.decline_session()
             else:
@@ -5375,7 +5432,6 @@ class VoIPCallReceivedDialog(object):
 
 class CertificatDialog(InformationDialog):
     def __init__(self, parent, account, cert):
-        self.set_title(_('Certificate for account %s') % account)
         issuer = cert.get_issuer()
         subject = cert.get_subject()
         InformationDialog.__init__(self,
@@ -5404,6 +5460,7 @@ SHA1 Fingerprint: %(sha1)s''') % {
             'io': cert.get_notBefore(), 'eo': cert.get_notAfter(),
             'sha1': cert.digest('sha1')})
         self.set_transient_for(parent)
+        self.set_title(_('Certificate for account %s') % account)
 
 
 class CheckFingerprintDialog(YesNoDialog):
@@ -5415,14 +5472,14 @@ class CheckFingerprintDialog(YesNoDialog):
             checktext=checktext, on_response_yes=on_response_yes,
             on_response_no=on_response_no)
         self.set_title(_('SSL Certificate Verification for %s') % account)
-        b = gtk.Button(_('View cert...'))
+        b = Gtk.Button(_('View cert...'))
         b.connect('clicked', self.on_cert_clicked)
         b.show_all()
         area = self.get_action_area()
-        area.pack_start(b)
+        area.pack_start(b, True, True, 0)
 
     def on_cert_clicked(self, button):
-        d = CertificatDialog(self, self.account, self.cert)
+        CertificatDialog(self, self.account, self.cert)
 
 class SSLErrorDialog(ConfirmationDialogDoubleCheck):
     def __init__(self, account, certificate, pritext, sectext, checktext1,
@@ -5432,11 +5489,58 @@ class SSLErrorDialog(ConfirmationDialogDoubleCheck):
         ConfirmationDialogDoubleCheck.__init__(self, pritext, sectext,
             checktext1, checktext2, on_response_ok=on_response_ok,
             on_response_cancel=on_response_cancel, is_modal=False)
-        b = gtk.Button(_('View cert...'))
+        b = Gtk.Button(_('View cert...'))
         b.connect('clicked', self.on_cert_clicked)
         b.show_all()
         area = self.get_action_area()
-        area.pack_start(b)
+        area.pack_start(b, True, True, 0)
 
     def on_cert_clicked(self, button):
-        CertificatDialog(self, self.account, self.cert)
+        d = CertificatDialog(self, self.account, self.cert)
+
+
+class BigAvatarWindow(Gtk.Window):
+    def __init__(self, avatar, pos_x, pos_y, width, height, callback):
+        super(BigAvatarWindow, self).__init__(type=Gtk.WindowType.POPUP)
+        self.set_events(Gdk.EventMask.POINTER_MOTION_MASK)
+        self.avatar = avatar
+        self.callback = callback
+        self.screen = self.get_screen()
+        self.visual = self.screen.get_rgba_visual()
+        if self.visual != None and self.screen.is_composited():
+            self.set_visual(self.visual)
+        self.set_app_paintable(True)
+        self.set_size_request(width, height)
+        self.move(pos_x, pos_y)
+        self.connect("draw", self.area_draw)
+        # we should hide the window
+        self.connect('leave_notify_event', self._on_window_avatar_leave_notify)
+        self.connect('motion-notify-event', self._on_window_motion_notify)
+        self.realize()
+        # make the cursor invisible so we can see the image
+        invisible_cursor = gtkgui_helpers.get_invisible_cursor()
+        self.get_window().set_cursor(invisible_cursor)
+        self.show_all()
+
+    def area_draw(self, widget, cr):
+        cr.set_source_rgba(.2, .2, .2, 0.0)
+        cr.set_operator(cairo.OPERATOR_SOURCE)
+        Gdk.cairo_set_source_pixbuf(cr, self.avatar, 0, 0)
+        cr.paint()
+        cr.set_operator(cairo.OPERATOR_OVER)
+
+    def _on_window_avatar_leave_notify(self, widget, event):
+        """
+        Just left the popup window that holds avatar
+        """
+        self.destroy()
+        self.bigger_avatar_window = None
+        # Re-show the small avatar
+        self.callback()
+
+    def _on_window_motion_notify(self, widget, event):
+        """
+        Just moved the mouse so show the cursor
+        """
+        cursor = Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR)
+        self.get_window().set_cursor(cursor)
diff --git a/src/disco.py b/src/disco.py
index d763504904b80294d3f74a54959f31490a5b94bf..91a36b655d5c04926eb23c17193bdf1f239b044f 100644
--- a/src/disco.py
+++ b/src/disco.py
@@ -47,9 +47,11 @@
 import os
 import types
 import weakref
-import gobject
-import gtk
-import pango
+from gi.repository import GLib
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository import Pango
 
 import dialogs
 import tooltips
@@ -151,10 +153,10 @@ class CacheDictionary:
             return self.value
 
     def cleanup(self):
-        for key in self.cache.keys():
+        for key in list(self.cache.keys()):
             item = self.cache[key]
             if item.source:
-                gobject.source_remove(item.source)
+                GLib.source_remove(item.source)
             del self.cache[key]
 
     def _expire_timeout(self, key):
@@ -171,9 +173,9 @@ class CacheDictionary:
         """
         item = self.cache[key]
         if item.source:
-            gobject.source_remove(item.source)
+            GLib.source_remove(item.source)
         if self.lifetime:
-            source = gobject.timeout_add_seconds(self.lifetime/1000, self._expire_timeout, key)
+            source = GLib.timeout_add_seconds(int(self.lifetime/1000), self._expire_timeout, key)
             item.source = source
 
     def __getitem__(self, key):
@@ -190,12 +192,11 @@ class CacheDictionary:
     def __delitem__(self, key):
         item = self.cache[key]
         if item.source:
-            gobject.source_remove(item.source)
+            GLib.source_remove(item.source)
         del self.cache[key]
 
     def __contains__(self, key):
         return key in self.cache
-    has_key = __contains__
 
 _icon_cache = CacheDictionary(15)
 
@@ -224,8 +225,8 @@ class Closure(object):
         self.remove = remove
         self.removeargs = removeargs
         if isinstance(cb, types.MethodType):
-            self.meth_self = weakref.ref(cb.im_self, self._remove)
-            self.meth_name = cb.func_name
+            self.meth_self = weakref.ref(cb.__self__, self._remove)
+            self.meth_name = cb.__name__
         elif callable(cb):
             self.meth_self = None
             self.cb = weakref.ref(cb, self._remove)
@@ -523,7 +524,7 @@ class ServiceDiscoveryWindow(object):
         if gajim.connections[account].connected < 2:
             dialogs.ErrorDialog(_('You are not connected to the server'),
 _('Without a connection, you can not browse available services'))
-            raise RuntimeError, 'You must be connected to browse services'
+            raise RuntimeError('You must be connected to browse services')
 
         # Get a ServicesCache object.
         try:
@@ -553,13 +554,13 @@ _('Without a connection, you can not browse available services'))
         self.action_buttonbox = self.xml.get_object('action_buttonbox')
 
         # Address combobox
-        self.address_comboboxentry = None
+        self.address_comboboxtext = None
         address_table = self.xml.get_object('address_table')
         if address_entry:
-            self.address_comboboxentry = self.xml.get_object(
-                    'address_comboboxentry')
-            self.address_comboboxentry_entry = self.address_comboboxentry.child
-            self.address_comboboxentry_entry.set_activates_default(True)
+            self.address_comboboxtext = self.xml.get_object(
+                'address_comboboxtext')
+            self.address_comboboxtext_entry = self.xml.get_object(
+                'address_entry')
 
             self.latest_addresses = gajim.config.get(
                 'latest_disco_addresses').split()
@@ -569,16 +570,16 @@ _('Without a connection, you can not browse available services'))
             if len(self.latest_addresses) > 10:
                 self.latest_addresses = self.latest_addresses[0:10]
             for j in self.latest_addresses:
-                self.address_comboboxentry.append_text(j)
-            self.address_comboboxentry.child.set_text(jid)
+                self.address_comboboxtext.append_text(j)
+            self.address_comboboxtext.get_child().set_text(jid)
         else:
             # Don't show it at all if we didn't ask for it
             address_table.set_no_show_all(True)
             address_table.hide()
 
-        accel_group = gtk.AccelGroup()
-        keyval, mod = gtk.accelerator_parse('<Control>r')
-        accel_group.connect_group(keyval, mod, gtk.ACCEL_VISIBLE,
+        accel_group = Gtk.AccelGroup()
+        keyval, mod = Gtk.accelerator_parse('<Control>r')
+        accel_group.connect(keyval, mod, Gtk.AccelFlags.VISIBLE,
             self.accel_group_func)
         self.window.add_accel_group(accel_group)
 
@@ -599,7 +600,7 @@ _('Without a connection, you can not browse available services'))
             self.browser.account = value
 
     def accel_group_func(self, accel_group, acceleratable, keyval, modifier):
-        if (modifier & gtk.gdk.CONTROL_MASK) and (keyval == gtk.keysyms.r):
+        if (modifier & Gdk.ModifierType.CONTROL_MASK) and (keyval == Gdk.KEY_r):
             self.reload()
 
     def _initial_state(self):
@@ -621,15 +622,15 @@ _('Without a connection, you can not browse available services'))
                 'bannerfontattrs')
 
         if bannerfont:
-            font = pango.FontDescription(bannerfont)
+            font = Pango.FontDescription(bannerfont)
         else:
-            font = pango.FontDescription('Normal')
+            font = Pango.FontDescription('Normal')
         if bannerfontattrs:
             # B is attribute set by default
             if 'B' in bannerfontattrs:
-                font.set_weight(pango.WEIGHT_HEAVY)
+                font.set_weight(Pango.Weight.HEAVY)
             if 'I' in bannerfontattrs:
-                font.set_style(pango.STYLE_ITALIC)
+                font.set_style(Pango.Style.ITALIC)
 
         font_attrs = 'font_desc="%s"' % font.to_string()
         font_size = font.get_size()
@@ -639,7 +640,7 @@ _('Without a connection, you can not browse available services'))
             font_attrs = '%s size="large"' % font_attrs
         markup = '<span %s>%s</span>' % (font_attrs, text)
         if text_after:
-            font.set_weight(pango.WEIGHT_NORMAL)
+            font.set_weight(Pango.Weight.NORMAL)
             markup = '%s\n<span font_desc="%s" size="small">%s</span>' % \
                 (markup, font.to_string(), text_after)
         self.banner.set_markup(markup)
@@ -653,15 +654,18 @@ _('Without a connection, you can not browse available services'))
         textcolor = gajim.config.get_per('themes', theme, 'bannertextcolor')
         self.disconnect_style_event()
         if bgcolor:
-            color = gtk.gdk.color_parse(bgcolor)
-            self.banner_eventbox.modify_bg(gtk.STATE_NORMAL, color)
+            color = Gdk.RGBA()
+            Gdk.RGBA.parse(color, bgcolor)
+            self.banner_eventbox.override_background_color(Gtk.StateType.NORMAL,
+                color)
             default_bg = False
         else:
             default_bg = True
 
         if textcolor:
-            color = gtk.gdk.color_parse(textcolor)
-            self.banner.modify_fg(gtk.STATE_NORMAL, color)
+            color = Gdk.RGBA()
+            Gdk.RGBA.parse(color, textcolor)
+            self.banner.override_color(Gtk.StateType.NORMAL, color)
             default_fg = False
         else:
             default_fg = True
@@ -687,12 +691,14 @@ _('Without a connection, you can not browse available services'))
                 opts[1] == True -> set bg color
         """
         self.disconnect_style_event()
+        context = widget.get_style_context()
         if opts[1]:
-            bg_color = widget.style.bg[gtk.STATE_SELECTED]
-            self.banner_eventbox.modify_bg(gtk.STATE_NORMAL, bg_color)
+            bg_color = context.get_background_color(Gtk.StateFlags.SELECTED)
+            self.banner_eventbox.override_background_color(Gtk.StateType.NORMAL,
+                bg_color)
         if opts[0]:
-            fg_color = widget.style.fg[gtk.STATE_SELECTED]
-            self.banner.modify_fg(gtk.STATE_NORMAL, fg_color)
+            fg_color = context.get_color(Gtk.StateFlags.SELECTED)
+            self.banner.override_color(Gtk.StateType.NORMAL, fg_color)
         self.banner.ensure_style()
         self.connect_style_event(opts[0], opts[1])
 
@@ -763,7 +769,7 @@ _('Without a connection, you can not browse available services'))
         if self.dying or jid != self.jid or node != self.node:
             return
         if not identities:
-            if not self.address_comboboxentry:
+            if not self.address_comboboxtext:
                 # We can't travel anywhere else.
                 self.destroy()
             dialogs.ErrorDialog(_('The service could not be found'),
@@ -808,23 +814,23 @@ _('Without a connection, you can not browse available services'))
     def on_close_button_clicked(self, widget):
         self.destroy()
 
-    def on_address_comboboxentry_changed(self, widget):
-        if self.address_comboboxentry.get_active() != -1:
+    def on_address_comboboxtext_changed(self, widget):
+        if self.address_comboboxtext.get_active() != -1:
             # user selected one of the entries so do auto-visit
-            jid = self.address_comboboxentry.child.get_text().decode('utf-8')
+            jid = self.address_comboboxtext_entry.get_text()
             try:
                 jid = helpers.parse_jid(jid)
-            except helpers.InvalidFormat, s:
+            except helpers.InvalidFormat as s:
                 pritext = _('Invalid Server Name')
                 dialogs.ErrorDialog(pritext, str(s))
                 return
             self.travel(jid, '')
 
     def on_go_button_clicked(self, widget):
-        jid = self.address_comboboxentry.child.get_text().decode('utf-8')
+        jid = self.address_comboboxtext_entry.get_text()
         try:
             jid = helpers.parse_jid(jid)
-        except helpers.InvalidFormat, s:
+        except helpers.InvalidFormat as s:
             pritext = _('Invalid Server Name')
             dialogs.ErrorDialog(pritext, str(s))
             return
@@ -835,9 +841,9 @@ _('Without a connection, you can not browse available services'))
         self.latest_addresses.insert(0, jid)
         if len(self.latest_addresses) > 10:
             self.latest_addresses = self.latest_addresses[0:10]
-        self.address_comboboxentry.get_model().clear()
+        self.address_comboboxtext.get_model().clear()
         for j in self.latest_addresses:
-            self.address_comboboxentry.append_text(j)
+            self.address_comboboxtext.append_text(j)
         gajim.config.set('latest_disco_addresses',
                 ' '.join(self.latest_addresses))
         self.travel(jid, '')
@@ -890,21 +896,21 @@ class AgentBrowser:
         the JID and node of the item respectively
         """
         # JID, node, name, address
-        self.model = gtk.ListStore(str, str, str, str)
-        self.model.set_sort_column_id(3, gtk.SORT_ASCENDING)
+        self.model = Gtk.ListStore(str, str, str, str)
+        self.model.set_sort_column_id(3, Gtk.SortType.ASCENDING)
         self.window.services_treeview.set_model(self.model)
         # Name column
-        col = gtk.TreeViewColumn(_('Name'))
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer)
-        col.set_attributes(renderer, text = 2)
+        col = Gtk.TreeViewColumn(_('Name'))
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'text', 2)
         self.window.services_treeview.insert_column(col, -1)
         col.set_resizable(True)
         # Address column
-        col = gtk.TreeViewColumn(_('JID'))
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer)
-        col.set_attributes(renderer, text = 3)
+        col = Gtk.TreeViewColumn(_('JID'))
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'text', 3)
         self.window.services_treeview.insert_column(col, -1)
         col.set_resizable(True)
         self.window.services_treeview.set_headers_visible(True)
@@ -920,16 +926,13 @@ class AgentBrowser:
         Add the action buttons to the buttonbox for actions the browser can
         perform
         """
-        self.browse_button = gtk.Button()
-        image = gtk.image_new_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON)
-        label = gtk.Label(_('_Browse'))
-        label.set_use_underline(True)
-        hbox = gtk.HBox()
-        hbox.pack_start(image, False, True, 6)
-        hbox.pack_end(label, True, True)
-        self.browse_button.add(hbox)
+        self.browse_button = Gtk.Button()
         self.browse_button.connect('clicked', self.on_browse_button_clicked)
         self.window.action_buttonbox.add(self.browse_button)
+        image = Gtk.Image.new_from_stock(Gtk.STOCK_OPEN, Gtk.IconSize.BUTTON)
+        self.browse_button.set_image(image)
+        label = _('_Browse')
+        self.browse_button.set_label(label)
         self.browse_button.show_all()
 
     def _clean_actions(self):
@@ -945,9 +948,18 @@ class AgentBrowser:
         Set the window title based on agent info
         """
         # Set the banner and window title
-        if 'name' in identities[0]:
-            name = identities[0]['name']
-            self.window._set_window_banner_text(self._get_agent_address(), name)
+        name = ''
+        if len(identities) > 1:
+            # Check if an identity with server category is present
+            for i, _identity in enumerate(identities):
+                if _identity['category'] == 'server' and 'name' in _identity:
+                    name = _identity['name']
+                    break
+                elif 'name' in identities[0]:
+                    name = identities[0]['name']
+
+        if name:
+          self.window._set_window_banner_text(self._get_agent_address(), name)
 
         # Add an icon to the banner.
         pix = self.cache.get_icon(identities, addr=self._get_agent_address())
@@ -975,7 +987,7 @@ class AgentBrowser:
         # or pack_end, so we repack the close button here to make sure it's last
         close_button = self.window.xml.get_object('close_button')
         self.window.action_buttonbox.remove(close_button)
-        self.window.action_buttonbox.pack_end(close_button)
+        self.window.action_buttonbox.pack_end(close_button, True, True, 0)
         close_button.show_all()
 
         self.update_actions()
@@ -1009,9 +1021,9 @@ class AgentBrowser:
         model, iter_ = self.window.services_treeview.get_selection().get_selected()
         if not iter_:
             return
-        jid = model[iter_][0].decode('utf-8')
+        jid = model[iter_][0]
         if jid:
-            node = model[iter_][1].decode('utf-8')
+            node = model[iter_][1]
             self.window.open(jid, node)
 
     def update_actions(self):
@@ -1023,8 +1035,8 @@ class AgentBrowser:
         model, iter_ = self.window.services_treeview.get_selection().get_selected()
         if not iter_:
             return
-        jid = model[iter_][0].decode('utf-8')
-        node = model[iter_][1].decode('utf-8')
+        jid = model[iter_][0]
+        node = model[iter_][1]
         if jid:
             self.cache.get_info(jid, node, self._update_actions, nofetch = True)
 
@@ -1046,8 +1058,8 @@ class AgentBrowser:
         model, iter_ = self.window.services_treeview.get_selection().get_selected()
         if not iter_:
             return
-        jid = model[iter_][0].decode('utf-8')
-        node = model[iter_][1].decode('utf-8')
+        jid = model[iter_][0]
+        node = model[iter_][1]
         if jid:
             self.cache.get_info(jid, node, self._default_action, nofetch = True)
 
@@ -1068,7 +1080,7 @@ class AgentBrowser:
         self.model.clear()
         self._total_items = self._progress = 0
         self.window.progressbar.show()
-        self._pulse_timeout = gobject.timeout_add(250, self._pulse_timeout_cb)
+        self._pulse_timeout = GLib.timeout_add(250, self._pulse_timeout_cb)
         self.cache.get_items(self.jid, self.node, self._agent_items,
                 force=force, args=(force,))
 
@@ -1086,10 +1098,10 @@ class AgentBrowser:
         Check if an item is already in the treeview. Return an iter to it if so,
         None otherwise
         """
-        iter_ = self.model.get_iter_root()
+        iter_ = self.model.get_iter_first()
         while iter_:
-            cjid = self.model.get_value(iter_, 0).decode('utf-8')
-            cnode = self.model.get_value(iter_, 1).decode('utf-8')
+            cjid = self.model.get_value(iter_, 0)
+            cnode = self.model.get_value(iter_, 1)
             if jid == cjid and node == cnode:
                 break
             iter_ = self.model.iter_next(iter_)
@@ -1107,15 +1119,16 @@ class AgentBrowser:
         self.model.clear()
         self.add_self_line()
         self._total_items = 0
-        gobject.source_remove(self._pulse_timeout)
+        GLib.source_remove(self._pulse_timeout)
         self.window.progressbar.hide()
         # The server returned an error
         if items == 0:
-            if not self.window.address_comboboxentry:
+            if not self.window.address_comboboxtext:
                 # We can't travel anywhere else.
                 self.window.destroy()
             dialogs.ErrorDialog(_('The service is not browsable'),
-_('This service does not contain any items to browse.'))
+                _('This service does not contain any items to browse.'),
+                transient_for=self.window.window)
             return
         # We got a list of items
         def fill_partial_rows(items):
@@ -1139,7 +1152,7 @@ _('This service does not contain any items to browse.'))
             #stop idle_add()
             yield False
         loader = fill_partial_rows(items)
-        gobject.idle_add(loader.next)
+        GLib.idle_add(next, loader)
 
     def _agent_info(self, jid, node, identities, features, data):
         """
@@ -1224,7 +1237,7 @@ class ToplevelAgentBrowser(AgentBrowser):
         # Grab info on the service
         self.cache.get_info(self.jid, self.node, self._agent_info, force=False)
 
-    def _pixbuf_renderer_data_func(self, col, cell, model, iter_):
+    def _pixbuf_renderer_data_func(self, col, cell, model, iter_, data=None):
         """
         Callback for setting the pixbuf renderer's properties
         """
@@ -1236,7 +1249,7 @@ class ToplevelAgentBrowser(AgentBrowser):
         else:
             cell.set_property('visible', False)
 
-    def _text_renderer_data_func(self, col, cell, model, iter_):
+    def _text_renderer_data_func(self, col, cell, model, iter_, data=None):
         """
         Callback for setting the text renderer's properties
         """
@@ -1259,35 +1272,39 @@ class ToplevelAgentBrowser(AgentBrowser):
                 cell.set_property('cell_background_set', True)
             cell.set_property('foreground_set', False)
 
-    def _treemodel_sort_func(self, model, iter1, iter2):
+    def _treemodel_sort_func(self, model, iter1, iter2, data=None):
         """
         Sort function for our treemode
         """
         # Compare state
-        statecmp = cmp(model.get_value(iter1, 4), model.get_value(iter2, 4))
-        if statecmp == 0:
-            # These can be None, apparently
-            descr1 = model.get_value(iter1, 3)
-            if descr1:
-                descr1 = descr1.decode('utf-8')
-            descr2 = model.get_value(iter2, 3)
-            if descr2:
-                descr2 = descr2.decode('utf-8')
-            # Compare strings
-            return cmp(descr1, descr2)
-        return statecmp
+        state1 = model.get_value(iter1, 4)
+        state2 = model.get_value(iter2, 4)
+        if state1 > state2:
+            return 1
+        if state1 < state2:
+            return -1
+        descr1 = model.get_value(iter1, 3)
+        descr2 = model.get_value(iter2, 3)
+        # Compare strings
+        if descr1 > descr2:
+            return 1
+        if descr1 < descr2:
+            return -1
+        return 0
 
     def _show_tooltip(self, state):
         view = self.window.services_treeview
-        pointer = view.get_pointer()
-        props = view.get_path_at_pos(pointer[0], pointer[1])
+        w = view.get_window()
+        device = w.get_display().get_device_manager().get_client_pointer()
+        pointer = w.get_device_position(device)
+        props = view.get_path_at_pos(pointer[1], pointer[2])
         # check if the current pointer is at the same path
         # as it was before setting the timeout
         if props and self.tooltip.id == props[0]:
             # bounding rectangle of coordinates for the cell within the treeview
             rect = view.get_cell_area(props[0], props[1])
             # position of the treeview on the screen
-            position = view.window.get_origin()
+            position = w.get_origin()[1:]
             self.tooltip.show_tooltip(state, rect.height, position[1] + rect.y)
         else:
             self.tooltip.hide_tooltip()
@@ -1318,8 +1335,8 @@ class ToplevelAgentBrowser(AgentBrowser):
             if jid and state > 0 and \
             (self.tooltip.timeout == 0 or self.tooltip.id != props[0]):
                 self.tooltip.id = row
-                self.tooltip.timeout = gobject.timeout_add(500,
-                        self._show_tooltip, state)
+                self.tooltip.timeout = GLib.timeout_add(500, self._show_tooltip,
+                    state)
 
     def on_treeview_event_hide_tooltip(self, widget, event):
         """
@@ -1331,20 +1348,20 @@ class ToplevelAgentBrowser(AgentBrowser):
         # JID, node, icon, description, state
         # State means 2 when error, 1 when fetching, 0 when succes.
         view = self.window.services_treeview
-        self.model = gtk.TreeStore(str, str, gtk.gdk.Pixbuf, str, int)
+        self.model = Gtk.TreeStore(str, str, GdkPixbuf.Pixbuf, str, int)
         self.model.set_sort_func(4, self._treemodel_sort_func)
-        self.model.set_sort_column_id(4, gtk.SORT_ASCENDING)
+        self.model.set_sort_column_id(4, Gtk.SortType.ASCENDING)
         view.set_model(self.model)
 
-        col = gtk.TreeViewColumn()
+        col = Gtk.TreeViewColumn()
         # Icon Renderer
-        renderer = gtk.CellRendererPixbuf()
+        renderer = Gtk.CellRendererPixbuf()
         renderer.set_property('xpad', 6)
-        col.pack_start(renderer, expand=False)
+        col.pack_start(renderer, False)
         col.set_cell_data_func(renderer, self._pixbuf_renderer_data_func)
         # Text Renderer
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer, expand=True)
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True)
         col.set_cell_data_func(renderer, self._text_renderer_data_func)
         renderer.set_property('foreground', 'dark gray')
         # Save this so we can go along with theme changes
@@ -1381,46 +1398,37 @@ class ToplevelAgentBrowser(AgentBrowser):
 
     def _add_actions(self):
         AgentBrowser._add_actions(self)
-        self.execute_button = gtk.Button()
-        image = gtk.image_new_from_stock(gtk.STOCK_EXECUTE, gtk.ICON_SIZE_BUTTON)
-        label = gtk.Label(_('_Execute Command'))
-        label.set_use_underline(True)
-        hbox = gtk.HBox()
-        hbox.pack_start(image, False, True, 6)
-        hbox.pack_end(label, True, True)
-        self.execute_button.add(hbox)
+        self.execute_button = Gtk.Button()
         self.execute_button.connect('clicked', self.on_execute_button_clicked)
         self.window.action_buttonbox.add(self.execute_button)
+        image = Gtk.Image.new_from_stock(Gtk.STOCK_EXECUTE, Gtk.IconSize.BUTTON)
+        self.execute_button.set_image(image)
+        label = _('_Execute Command')
+        self.execute_button.set_label(label)
         self.execute_button.show_all()
 
-        self.register_button = gtk.Button(label=_("Re_gister"),
+        self.register_button = Gtk.Button(label=_("Re_gister"),
                 use_underline=True)
         self.register_button.connect('clicked', self.on_register_button_clicked)
         self.window.action_buttonbox.add(self.register_button)
         self.register_button.show_all()
 
-        self.join_button = gtk.Button()
-        image = gtk.image_new_from_stock(gtk.STOCK_CONNECT, gtk.ICON_SIZE_BUTTON)
-        label = gtk.Label(_('_Join'))
-        label.set_use_underline(True)
-        hbox = gtk.HBox()
-        hbox.pack_start(image, False, True, 6)
-        hbox.pack_end(label, True, True)
-        self.join_button.add(hbox)
+        self.join_button = Gtk.Button()
         self.join_button.connect('clicked', self.on_join_button_clicked)
         self.window.action_buttonbox.add(self.join_button)
+        image = Gtk.Image.new_from_stock(Gtk.STOCK_CONNECT, Gtk.IconSize.BUTTON)
+        self.join_button.set_image(image)
+        label = _('_Join')
+        self.join_button.set_label(label)
         self.join_button.show_all()
 
-        self.search_button = gtk.Button()
-        image = gtk.image_new_from_stock(gtk.STOCK_FIND, gtk.ICON_SIZE_BUTTON)
-        label = gtk.Label(_('_Search'))
-        label.set_use_underline(True)
-        hbox = gtk.HBox()
-        hbox.pack_start(image, False, True, 6)
-        hbox.pack_end(label, True, True)
-        self.search_button.add(hbox)
+        self.search_button = Gtk.Button()
         self.search_button.connect('clicked', self.on_search_button_clicked)
         self.window.action_buttonbox.add(self.search_button)
+        image = Gtk.Image.new_from_stock(Gtk.STOCK_FIND, Gtk.IconSize.BUTTON)
+        self.search_button.set_image(image)
+        label = _('_Search')
+        self.search_button.set_label(label)
         self.search_button.show_all()
 
     def _clean_actions(self):
@@ -1445,7 +1453,7 @@ class ToplevelAgentBrowser(AgentBrowser):
         model, iter_ = self.window.services_treeview.get_selection().get_selected()
         if not iter_:
             return
-        service = model[iter_][0].decode('utf-8')
+        service = model[iter_][0]
         if service in gajim.interface.instances[self.account]['search']:
             gajim.interface.instances[self.account]['search'][service].window.\
                     present()
@@ -1471,8 +1479,8 @@ class ToplevelAgentBrowser(AgentBrowser):
         model, iter_ = self.window.services_treeview.get_selection().get_selected()
         if not iter_:
             return
-        service = model[iter_][0].decode('utf-8')
-        node = model[iter_][1].decode('utf-8')
+        service = model[iter_][0]
+        node = model[iter_][1]
         adhoc_commands.CommandWindow(self.account, service, commandnode=node)
 
     def on_register_button_clicked(self, widget = None):
@@ -1483,7 +1491,7 @@ class ToplevelAgentBrowser(AgentBrowser):
         model, iter_ = self.window.services_treeview.get_selection().get_selected()
         if not iter_:
             return
-        jid = model[iter_][0].decode('utf-8')
+        jid = model[iter_][0]
         if jid:
             gajim.connections[self.account].request_register_agent_info(jid)
             self.window.destroy(chain = True)
@@ -1496,7 +1504,7 @@ class ToplevelAgentBrowser(AgentBrowser):
         model, iter_ = self.window.services_treeview.get_selection().get_selected()
         if not iter_:
             return
-        service = model[iter_][0].decode('utf-8')
+        service = model[iter_][0]
         if 'join_gc' not in gajim.interface.instances[self.account]:
             try:
                 dialogs.JoinGroupchatWindow(self.account, service)
@@ -1529,7 +1537,7 @@ class ToplevelAgentBrowser(AgentBrowser):
                 self.register_button.set_sensitive(True)
             # Guess what kind of service we're dealing with
             if self.browse_button:
-                jid = model[iter_][0].decode('utf-8')
+                jid = model[iter_][0]
                 type_ = gajim.get_transport_name_from_jid(jid,
                                         use_config_setting = False)
                 if type_:
@@ -1593,7 +1601,7 @@ class ToplevelAgentBrowser(AgentBrowser):
         #       self.expanding = False
         #       return False
         #self.expanding = True
-        #gobject.idle_add(expand_all)
+        #GLib.idle_add(expand_all)
         self.window.services_treeview.expand_all()
 
     def _update_progressbar(self):
@@ -1602,7 +1610,7 @@ class ToplevelAgentBrowser(AgentBrowser):
         """
         # Refresh this every update
         if self._progressbar_sourceid:
-            gobject.source_remove(self._progressbar_sourceid)
+            GLib.source_remove(self._progressbar_sourceid)
 
         fraction = 0
         if self._total_items:
@@ -1611,12 +1619,12 @@ class ToplevelAgentBrowser(AgentBrowser):
             fraction = float(self._progress) / float(self._total_items)
             if self._progress >= self._total_items:
                 # We show the progressbar for just a bit before hiding it.
-                id_ = gobject.timeout_add_seconds(2, self._hide_progressbar_cb)
+                id_ = GLib.timeout_add_seconds(2, self._hide_progressbar_cb)
                 self._progressbar_sourceid = id_
             else:
                 self.window.progressbar.show()
                 # Hide the progressbar if we're timing out anyways. (20 secs)
-                id_ = gobject.timeout_add_seconds(20, self._hide_progressbar_cb)
+                id_ = GLib.timeout_add_seconds(20, self._hide_progressbar_cb)
                 self._progressbar_sourceid = id_
         self.window.progressbar.set_fraction(fraction)
 
@@ -1658,9 +1666,9 @@ class ToplevelAgentBrowser(AgentBrowser):
         Looks up a category row and returns the iterator to it, or None
         """
         cat = self._friendly_category(cat, type_)[0]
-        iter_ = self.model.get_iter_root()
+        iter_ = self.model.get_iter_first()
         while iter_:
-            if self.model.get_value(iter_, 3).decode('utf-8') == cat:
+            if self.model.get_value(iter_, 3) == cat:
                 break
             iter_ = self.model.iter_next(iter_)
         if iter_:
@@ -1669,17 +1677,17 @@ class ToplevelAgentBrowser(AgentBrowser):
 
     def _find_item(self, jid, node):
         iter_ = None
-        cat_iter = self.model.get_iter_root()
+        cat_iter = self.model.get_iter_first()
         while cat_iter and not iter_:
-            cjid = self.model.get_value(cat_iter, 0).decode('utf-8')
-            cnode = self.model.get_value(cat_iter, 1).decode('utf-8')
+            cjid = self.model.get_value(cat_iter, 0)
+            cnode = self.model.get_value(cat_iter, 1)
             if jid == cjid and node == cnode:
                 iter_ = cat_iter
                 break
             iter_ = self.model.iter_children(cat_iter)
             while iter_:
-                cjid = self.model.get_value(iter_, 0).decode('utf-8')
-                cnode = self.model.get_value(iter_, 1).decode('utf-8')
+                cjid = self.model.get_value(iter_, 0)
+                cnode = self.model.get_value(iter_, 1)
                 if jid == cjid and node == cnode:
                     break
                 iter_ = self.model.iter_next(iter_)
@@ -1713,7 +1721,7 @@ class ToplevelAgentBrowser(AgentBrowser):
         if not cat:
             cat = self._create_category(*cat_args)
         self.model.append(cat, (jid, node, pix, descr, 1))
-        gobject.idle_add(self._expand_all)
+        GLib.idle_add(self._expand_all)
         # Grab info on the service
         self.cache.get_info(jid, node, self._agent_info, force=force)
         self._update_progressbar()
@@ -1759,7 +1767,7 @@ class ToplevelAgentBrowser(AgentBrowser):
         # Not in the right category, move it.
         self.model.remove(iter_)
 
-        old_cat = self.model.get_value(old_cat_iter, 3).decode('utf-8')
+        old_cat = self.model.get_value(old_cat_iter, 3)
         # Check if the old category is empty
         if not self.model.iter_is_valid(old_cat_iter):
             old_cat_iter = self._find_category(old_cat)
@@ -1788,40 +1796,40 @@ class MucBrowser(AgentBrowser):
         # JID, node, name, users_int, users_str, description, fetched
         # This is rather long, I'd rather not use a data_func here though.
         # Users is a string, because want to be able to leave it empty.
-        self.model = gtk.ListStore(str, str, str, int, str, str, bool)
-        self.model.set_sort_column_id(2, gtk.SORT_ASCENDING)
+        self.model = Gtk.ListStore(str, str, str, int, str, str, bool)
+        self.model.set_sort_column_id(2, Gtk.SortType.ASCENDING)
         self.window.services_treeview.set_model(self.model)
         # Name column
-        col = gtk.TreeViewColumn(_('Name'))
-        col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+        col = Gtk.TreeViewColumn(_('Name'))
+        col.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
         col.set_fixed_width(100)
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer)
-        col.set_attributes(renderer, text = 2)
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'text', 2)
         col.set_sort_column_id(2)
         self.window.services_treeview.insert_column(col, -1)
         col.set_resizable(True)
         # Users column
-        col = gtk.TreeViewColumn(_('Users'))
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer)
-        col.set_attributes(renderer, text = 4)
+        col = Gtk.TreeViewColumn(_('Users'))
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'text', 4)
         col.set_sort_column_id(3)
         self.window.services_treeview.insert_column(col, -1)
         col.set_resizable(True)
         # Description column
-        col = gtk.TreeViewColumn(_('Description'))
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer)
-        col.set_attributes(renderer, text = 5)
+        col = Gtk.TreeViewColumn(_('Description'))
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'text', 5)
         col.set_sort_column_id(4)
         self.window.services_treeview.insert_column(col, -1)
         col.set_resizable(True)
         # Id column
-        col = gtk.TreeViewColumn(_('Id'))
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer)
-        col.set_attributes(renderer, text = 0)
+        col = Gtk.TreeViewColumn(_('Id'))
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'text', 0)
         col.set_sort_column_id(0)
         self.window.services_treeview.insert_column(col, -1)
         col.set_resizable(True)
@@ -1848,11 +1856,11 @@ class MucBrowser(AgentBrowser):
         AgentBrowser._clean_treemodel(self)
 
     def _add_actions(self):
-        self.bookmark_button = gtk.Button(label=_('_Bookmark'), use_underline=True)
+        self.bookmark_button = Gtk.Button(label=_('_Bookmark'), use_underline=True)
         self.bookmark_button.connect('clicked', self.on_bookmark_button_clicked)
         self.window.action_buttonbox.add(self.bookmark_button)
         self.bookmark_button.show_all()
-        self.join_button = gtk.Button(label=_('_Join'), use_underline=True)
+        self.join_button = Gtk.Button(label=_('_Join'), use_underline=True)
         self.join_button.connect('clicked', self.on_join_button_clicked)
         self.window.action_buttonbox.add(self.join_button)
         self.join_button.show_all()
@@ -1870,7 +1878,7 @@ class MucBrowser(AgentBrowser):
         if not iter:
             return
         name = gajim.config.get_per('accounts', self.account, 'name')
-        room_jid = model[iter][0].decode('utf-8')
+        room_jid = model[iter][0]
         bm = {
                 'name': room_jid.split('@')[0],
                 'jid': room_jid,
@@ -1883,7 +1891,8 @@ class MucBrowser(AgentBrowser):
         for bookmark in gajim.connections[self.account].bookmarks:
             if bookmark['jid'] == bm['jid']:
                 dialogs.ErrorDialog( _('Bookmark already set'),
-                _('Group Chat "%s" is already in your bookmarks.') % bm['jid'])
+                _('Group Chat "%s" is already in your bookmarks.') % bm['jid'],
+                transient_for=self.window.window)
                 return
 
         gajim.connections[self.account].bookmarks.append(bm)
@@ -1893,7 +1902,8 @@ class MucBrowser(AgentBrowser):
 
         dialogs.InformationDialog(
             _('Bookmark has been added successfully'),
-            _('You can manage your bookmarks via Actions menu in your roster.'))
+            _('You can manage your bookmarks via Actions menu in your roster.'),
+            transient_for=self.window.window)
 
     def on_join_button_clicked(self, *args):
         """
@@ -1903,7 +1913,7 @@ class MucBrowser(AgentBrowser):
         model, iter_ = self.window.services_treeview.get_selection().get_selected()
         if not iter_:
             return
-        service = model[iter_][0].decode('utf-8')
+        service = model[iter_][0]
         if 'join_gc' not in gajim.interface.instances[self.account]:
             try:
                 dialogs.JoinGroupchatWindow(self.account, service)
@@ -1947,40 +1957,24 @@ class MucBrowser(AgentBrowser):
             # We're already fetching
             return
         view = self.window.services_treeview
-        if not view.flags() & gtk.REALIZED:
+        if not view.get_realized():
             # Prevent a silly warning, try again in a bit.
-            self._fetch_source = gobject.timeout_add(100, self._start_info_query)
+            self._fetch_source = GLib.timeout_add(100, self._start_info_query)
             return
-        # We have to do this in a pygtk <2.8 compatible way :/
-        #start, end = self.window.services_treeview.get_visible_range()
-        rect = view.get_visible_rect()
-        iter_ = end = None
-        # Top row
-        try:
-            sx, sy = view.tree_to_widget_coords(rect.x, rect.y)
-            spath = view.get_path_at_pos(sx, sy)[0]
-            iter_ = self.model.get_iter(spath)
-        except TypeError:
-            self._fetch_source = None
+        range_ = view.get_visible_range()
+        if not range_:
             return
-        # Bottom row
-        # Iter compare is broke, use the path instead
-        try:
-            ex, ey = view.tree_to_widget_coords(rect.x + rect.height,
-                    rect.y + rect.height)
-            end = view.get_path_at_pos(ex, ey)[0]
-            # end is the last visible, we want to query that aswell
-            end = (end[0] + 1,)
-        except TypeError:
-            # We're at the end of the model, we can leave end=None though.
-            pass
-        while iter_ and self.model.get_path(iter_) != end:
+        start, end = range_
+        iter_ = self.model.get_iter(start)
+        while iter_:
             if not self.model.get_value(iter_, 6):
-                jid = self.model.get_value(iter_, 0).decode('utf-8')
-                node = self.model.get_value(iter_, 1).decode('utf-8')
+                jid = self.model.get_value(iter_, 0)
+                node = self.model.get_value(iter_, 1)
                 self.cache.get_info(jid, node, self._agent_info)
                 self._fetch_source = True
                 return
+            if self.model.get_path(iter_) == end:
+                break
             iter_ = self.model.iter_next(iter_)
         self._fetch_source = None
 
@@ -2016,7 +2010,7 @@ class MucBrowser(AgentBrowser):
     def _add_item(self, jid, node, parent_node, item, force):
         self.model.append((jid, node, item.get('name', ''), -1, '', '', False))
         if not self._fetch_source:
-            self._fetch_source = gobject.idle_add(self._start_info_query)
+            self._fetch_source = GLib.idle_add(self._start_info_query)
 
     def _update_info(self, iter_, jid, node, identities, features, data):
         name = identities[0].get('name', '')
@@ -2030,7 +2024,7 @@ class MucBrowser(AgentBrowser):
                 if users:
                     self.model[iter_][3] = int(users.getValue())
                     self.model[iter_][4] = users.getValue()
-                if descr:
+                if descr and descr.getValue():
                     self.model[iter_][5] = descr.getValue()
                 # Only set these when we find a form with additional info
                 # Some servers don't support forms and put extra info in
@@ -2085,35 +2079,36 @@ class DiscussionGroupsBrowser(AgentBrowser):
         Create treemodel for the window
         """
         # JID, node, name (with description) - pango markup, dont have info?, subscribed?
-        self.model = gtk.TreeStore(str, str, str, bool, bool)
+        self.model = Gtk.TreeStore(str, str, str, bool, bool)
         # sort by name
-        self.model.set_sort_column_id(2, gtk.SORT_ASCENDING)
+        self.model.set_sort_column_id(2, Gtk.SortType.ASCENDING)
         self.window.services_treeview.set_model(self.model)
 
         # Name column
         # Pango markup for name and description, description printed with
         # <small/> font
-        renderer = gtk.CellRendererText()
-        col = gtk.TreeViewColumn(_('Name'))
-        col.pack_start(renderer)
-        col.set_attributes(renderer, markup=2)
+        renderer = Gtk.CellRendererText()
+        col = Gtk.TreeViewColumn(_('Name'))
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'markup', 2)
         col.set_resizable(True)
         self.window.services_treeview.insert_column(col, -1)
         self.window.services_treeview.set_headers_visible(True)
 
         # Subscription state
-        renderer = gtk.CellRendererToggle()
-        col = gtk.TreeViewColumn(_('Subscribed'))
-        col.pack_start(renderer)
-        col.set_attributes(renderer, inconsistent=3, active=4)
+        renderer = Gtk.CellRendererToggle()
+        col = Gtk.TreeViewColumn(_('Subscribed'))
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'inconsistent', 3)
+        col.add_attribute(renderer, 'active', 4)
         col.set_resizable(False)
         self.window.services_treeview.insert_column(col, -1)
 
         # Node Column
-        renderer = gtk.CellRendererText()
-        col = gtk.TreeViewColumn(_('Node'))
-        col.pack_start(renderer)
-        col.set_attributes(renderer, markup=1)
+        renderer = Gtk.CellRendererText()
+        col = Gtk.TreeViewColumn(_('Node'))
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'markup', 1)
         col.set_resizable(True)
         self.window.services_treeview.insert_column(col, -1)
 
@@ -2147,7 +2142,7 @@ class DiscussionGroupsBrowser(AgentBrowser):
             dunno = True
             subscribed = False
 
-        name = gobject.markup_escape_text(name)
+        name = GLib.markup_escape_text(name)
         name = '<b>%s</b>' % name
 
         if parent_node:
@@ -2178,19 +2173,19 @@ class DiscussionGroupsBrowser(AgentBrowser):
         return self.found_iter
 
     def _add_actions(self):
-        self.post_button = gtk.Button(label=_('New post'), use_underline=True)
+        self.post_button = Gtk.Button(label=_('New post'), use_underline=True)
         self.post_button.set_sensitive(False)
         self.post_button.connect('clicked', self.on_post_button_clicked)
         self.window.action_buttonbox.add(self.post_button)
         self.post_button.show_all()
 
-        self.subscribe_button = gtk.Button(label=_('_Subscribe'), use_underline=True)
+        self.subscribe_button = Gtk.Button(label=_('_Subscribe'), use_underline=True)
         self.subscribe_button.set_sensitive(False)
         self.subscribe_button.connect('clicked', self.on_subscribe_button_clicked)
         self.window.action_buttonbox.add(self.subscribe_button)
         self.subscribe_button.show_all()
 
-        self.unsubscribe_button = gtk.Button(label=_('_Unsubscribe'), use_underline=True)
+        self.unsubscribe_button = Gtk.Button(label=_('_Unsubscribe'), use_underline=True)
         self.unsubscribe_button.set_sensitive(False)
         self.unsubscribe_button.connect('clicked', self.on_unsubscribe_button_clicked)
         self.window.action_buttonbox.add(self.unsubscribe_button)
diff --git a/src/features_window.py b/src/features_window.py
index 8e63c594da7aa1dcbcffe4441c98d3e8378f6faf..80f6f976451810b3122359804244d3a7995a4342 100644
--- a/src/features_window.py
+++ b/src/features_window.py
@@ -25,7 +25,7 @@
 
 import os
 import sys
-import gtk
+from gi.repository import Gtk
 import gtkgui_helpers
 
 from common import gajim
@@ -67,10 +67,6 @@ class FeaturesWindow:
                 _('Autodetection of network status.'),
                 _('Requires gnome-network-manager and python-dbus.'),
                 _('Feature not available under Windows.')),
-            _('Session Management'): (self.session_management_available,
-                _('Gajim session is stored on logout and restored on login.'),
-                _('Requires python-gnome2.'),
-                _('Feature not available under Windows.')),
             _('Password encryption'): (self.some_keyring_available,
                 _('Passwords can be stored securely and not just in plaintext.'),
                 _('Requires gnome-keyring and python-gnome2-desktop, or kwalletcli.'),
@@ -114,20 +110,20 @@ class FeaturesWindow:
         }
 
         # name, supported
-        self.model = gtk.ListStore(str, bool)
+        self.model = Gtk.ListStore(str, bool)
         treeview.set_model(self.model)
 
-        col = gtk.TreeViewColumn(Q_('?features:Available'))
+        col = Gtk.TreeViewColumn(Q_('?features:Available'))
         treeview.append_column(col)
-        cell = gtk.CellRendererToggle()
+        cell = Gtk.CellRendererToggle()
         cell.set_property('radio', True)
-        col.pack_start(cell)
-        col.set_attributes(cell, active = 1)
+        col.pack_start(cell, True)
+        col.add_attribute(cell, 'active', 1)
 
-        col = gtk.TreeViewColumn(_('Feature'))
+        col = Gtk.TreeViewColumn(_('Feature'))
         treeview.append_column(col)
-        cell = gtk.CellRendererText()
-        col.pack_start(cell, expand = True)
+        cell = Gtk.CellRendererText()
+        col.pack_start(cell, True)
         col.add_attribute(cell, 'text', 0)
 
         # Fill model
@@ -136,7 +132,7 @@ class FeaturesWindow:
             rep = func()
             self.model.append([feature, rep])
 
-        self.model.set_sort_column_id(0, gtk.SORT_ASCENDING)
+        self.model.set_sort_column_id(0, Gtk.SortType.ASCENDING)
 
         self.xml.connect_signals(self)
         self.window.show_all()
@@ -153,7 +149,7 @@ class FeaturesWindow:
         if not rows:
             return
         path = rows[0]
-        feature = self.model[path][0].decode('utf-8')
+        feature = self.model[path][0]
         text = self.features[feature][1] + '\n'
         if os.name == 'nt':
             text = text + self.features[feature][3]
@@ -192,22 +188,13 @@ class FeaturesWindow:
         import network_manager_listener
         return network_manager_listener.supported
 
-    def session_management_available(self):
-        if os.name == 'nt':
-            return False
-        try:
-            __import__('gnome.ui')
-        except Exception:
-            return False
-        return True
-
     def some_keyring_available(self):
         if os.name == 'nt':
             return False
         if kwalletbinding.kwallet_available():
             return True
         try:
-            __import__('gnomekeyring')
+            from gi.repository import GnomeKeyring
         except Exception:
             return False
         return True
diff --git a/src/filetransfers_window.py b/src/filetransfers_window.py
index f0aa1fc56f660837106c3a962fdbca5685a80caf..8fd76577345ac7862a6f3c54045a532fc5530060 100644
--- a/src/filetransfers_window.py
+++ b/src/filetransfers_window.py
@@ -21,9 +21,10 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gtk
-import gobject
-import pango
+from gi.repository import Gtk
+from gi.repository import GdkPixbuf
+from gi.repository import GLib
+from gi.repository import Pango
 import os
 import time
 
@@ -66,52 +67,52 @@ class FileTransfersWindow:
         shall_notify = gajim.config.get('notify_on_file_complete')
         self.notify_ft_checkbox.set_active(shall_notify
                                                                                                 )
-        self.model = gtk.ListStore(gtk.gdk.Pixbuf, str, str, str, str, int,
+        self.model = Gtk.ListStore(GdkPixbuf.Pixbuf, str, str, str, str, int,
             int, str)
         self.tree.set_model(self.model)
-        col = gtk.TreeViewColumn()
+        col = Gtk.TreeViewColumn()
 
-        render_pixbuf = gtk.CellRendererPixbuf()
+        render_pixbuf = Gtk.CellRendererPixbuf()
 
-        col.pack_start(render_pixbuf, expand=True)
+        col.pack_start(render_pixbuf, True)
         render_pixbuf.set_property('xpad', 3)
         render_pixbuf.set_property('ypad', 3)
         render_pixbuf.set_property('yalign', .0)
         col.add_attribute(render_pixbuf, 'pixbuf', 0)
         self.tree.append_column(col)
 
-        col = gtk.TreeViewColumn(_('File'))
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer, expand=False)
+        col = Gtk.TreeViewColumn(_('File'))
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, False)
         col.add_attribute(renderer, 'markup', C_LABELS)
         renderer.set_property('yalign', 0.)
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer, expand=True)
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True)
         col.add_attribute(renderer, 'markup', C_FILE)
         renderer.set_property('xalign', 0.)
         renderer.set_property('yalign', 0.)
-        renderer.set_property('ellipsize', pango.ELLIPSIZE_END)
+        renderer.set_property('ellipsize', Pango.EllipsizeMode.END)
         col.set_resizable(True)
         col.set_expand(True)
         self.tree.append_column(col)
 
-        col = gtk.TreeViewColumn(_('Time'))
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer, expand=False)
+        col = Gtk.TreeViewColumn(_('Time'))
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, False)
         col.add_attribute(renderer, 'markup', C_TIME)
         renderer.set_property('yalign', 0.5)
         renderer.set_property('xalign', 0.5)
-        renderer = gtk.CellRendererText()
-        renderer.set_property('ellipsize', pango.ELLIPSIZE_END)
+        renderer = Gtk.CellRendererText()
+        renderer.set_property('ellipsize', Pango.EllipsizeMode.END)
         col.set_resizable(True)
         col.set_expand(False)
         self.tree.append_column(col)
 
-        col = gtk.TreeViewColumn(_('Progress'))
-        renderer = gtk.CellRendererProgress()
+        col = Gtk.TreeViewColumn(_('Progress'))
+        renderer = Gtk.CellRendererProgress()
         renderer.set_property('yalign', 0.5)
         renderer.set_property('xalign', 0.5)
-        col.pack_start(renderer, expand=False)
+        col.pack_start(renderer, False)
         col.add_attribute(renderer, 'text', C_PROGRESS)
         col.add_attribute(renderer, 'value', C_PERCENT)
         col.add_attribute(renderer, 'pulse', C_PULSE)
@@ -121,18 +122,18 @@ class FileTransfersWindow:
 
         self.images = {}
         self.icons = {
-                'upload': gtk.STOCK_GO_UP,
-                'download': gtk.STOCK_GO_DOWN,
-                'stop': gtk.STOCK_STOP,
-                'waiting': gtk.STOCK_REFRESH,
-                'pause': gtk.STOCK_MEDIA_PAUSE,
-                'continue': gtk.STOCK_MEDIA_PLAY,
-                'ok': gtk.STOCK_APPLY,
-                'computing': gtk.STOCK_EXECUTE,
-                'hash_error': gtk.STOCK_STOP,
+                'upload': Gtk.STOCK_GO_UP,
+                'download': Gtk.STOCK_GO_DOWN,
+                'stop': Gtk.STOCK_STOP,
+                'waiting': Gtk.STOCK_REFRESH,
+                'pause': Gtk.STOCK_MEDIA_PAUSE,
+                'continue': Gtk.STOCK_MEDIA_PLAY,
+                'ok': Gtk.STOCK_APPLY,
+                'computing': Gtk.STOCK_EXECUTE,
+                'hash_error': Gtk.STOCK_STOP,
         }
 
-        self.tree.get_selection().set_mode(gtk.SELECTION_SINGLE)
+        self.tree.get_selection().set_mode(Gtk.SelectionMode.SINGLE)
         self.tree.get_selection().connect('changed', self.selection_changed)
         self.tooltip = tooltips.FileTransfersTooltip()
         self.file_transfers_menu = self.xml.get_object('file_transfers_menu')
@@ -152,12 +153,12 @@ class FileTransfersWindow:
         for file_props in allfp:
             if file_props.type_ == 's' and file_props.tt_account == account:
                 # 'account' is the sender
-                receiver_jid = unicode(file_props.receiver).split('/')[0]
+                receiver_jid = file_props.receiver.split('/')[0]
                 if jid == receiver_jid and not is_transfer_stopped(file_props):
                     active_transfers[0].append(file_props)
             elif file_props.type_ == 'r' and file_props.tt_account == account:
                 # 'account' is the recipient
-                sender_jid = unicode(file_props.sender).split('/')[0]
+                sender_jid = file_props.sender.split('/')[0]
                 if jid == sender_jid and not is_transfer_stopped(file_props):
                     active_transfers[1].append(file_props)
             else:
@@ -182,12 +183,11 @@ class FileTransfersWindow:
             (file_path, file_name) = os.path.split(file_props.file_name)
         else:
             file_name = file_props.name
-        sectext = '\t' + _('Filename: %s') % gobject.markup_escape_text(
-            file_name)
+        sectext = '\t' + _('Filename: %s') % GLib.markup_escape_text(file_name)
         sectext += '\n\t' + _('Size: %s') % \
         helpers.convert_bytes(file_props.size)
         if file_props.type_ == 'r':
-            jid = unicode(file_props.sender).split('/')[0]
+            jid = file_props.sender.split('/')[0]
             sender_name = gajim.contacts.get_first_contact_from_jid(
                     file_props.tt_account, jid).get_shown_name()
             sender = sender_name
@@ -197,7 +197,7 @@ class FileTransfersWindow:
         sectext += '\n\t' + _('Sender: %s') % sender
         sectext += '\n\t' + _('Recipient: ')
         if file_props.type_ == 's':
-            jid = unicode(file_props.receiver).split('/')[0]
+            jid = file_props.receiver.split('/')[0]
             receiver_name = gajim.contacts.get_first_contact_from_jid(
                     file_props.tt_account, jid).get_shown_name()
             recipient = receiver_name
@@ -207,13 +207,13 @@ class FileTransfersWindow:
         sectext += recipient
         if file_props.type_ == 'r':
             sectext += '\n\t' + _('Saved in: %s') % file_path
-        dialog = dialogs.HigDialog(None, gtk.MESSAGE_INFO, gtk.BUTTONS_NONE,
+        dialog = dialogs.HigDialog(None, Gtk.MessageType.INFO, Gtk.ButtonsType.NONE,
                         _('File transfer completed'), sectext)
         if file_props.type_ == 'r':
-            button = gtk.Button(_('_Open Containing Folder'))
+            button = Gtk.Button(_('_Open Containing Folder'))
             button.connect('clicked', on_open, file_props)
-            dialog.action_area.pack_start(button)
-        ok_button = dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
+            dialog.action_area.pack_start(button, True, True, 0)
+        ok_button = dialog.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK)
         def on_ok(widget):
             dialog.destroy()
         ok_button.connect('clicked', on_ok)
@@ -239,8 +239,7 @@ class FileTransfersWindow:
             file_name = os.path.basename(file_props.file_name)
         else:
             file_name = file_props.name
-        sectext = '\t' + _('Filename: %s') % gobject.markup_escape_text(
-            file_name)
+        sectext = '\t' + _('Filename: %s') % GLib.markup_escape_text(file_name)
         sectext += '\n\t' + _('Recipient: %s') % jid
         if error_msg:
             sectext += '\n\t' + _('Error message: %s') % error_msg
@@ -283,12 +282,12 @@ class FileTransfersWindow:
             _('The file %(file)s has been fully received, but it seems to be '
             'wrongly received.\nDo you want to reload it?') % \
             {'file': file_name}, on_response_yes=(on_yes, jid, file_props,
-            account), type_=gtk.MESSAGE_ERROR)
+            account), type_=Gtk.MessageType.ERROR)
 
     def show_file_send_request(self, account, contact):
-        win = gtk.ScrolledWindow()
-        win.set_shadow_type(gtk.SHADOW_IN)
-        win.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
+        win = Gtk.ScrolledWindow()
+        win.set_shadow_type(Gtk.ShadowType.IN)
+        win.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER)
 
         from message_textview import MessageTextView
         desc_entry = MessageTextView()
@@ -301,7 +300,7 @@ class FileTransfersWindow:
                     files_path_list)
             text_buffer = desc_entry.get_buffer()
             desc = text_buffer.get_text(text_buffer.get_start_iter(),
-                text_buffer.get_end_iter())
+                text_buffer.get_end_iter(), True)
             for file_path in files_path_list:
                 if self.send_file(account, contact, file_path, desc) \
                 and file_dir is None:
@@ -311,22 +310,22 @@ class FileTransfersWindow:
                 dialog.destroy()
 
         dialog = dialogs.FileChooserDialog(_('Choose File to Send...'),
-                gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL),
-                gtk.RESPONSE_OK,
+                Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL),
+                Gtk.ResponseType.OK,
                 True, # select multiple true as we can select many files to send
                 gajim.config.get('last_send_dir'),
                 on_response_ok=on_ok,
                 on_response_cancel=lambda e:dialog.destroy()
                 )
 
-        btn = gtk.Button(_('_Send'))
+        btn = Gtk.Button.new_with_mnemonic(_('_Send'))
         btn.set_property('can-default', True)
         # FIXME: add send icon to this button (JUMP_TO)
-        dialog.add_action_widget(btn, gtk.RESPONSE_OK)
-        dialog.set_default_response(gtk.RESPONSE_OK)
+        dialog.add_action_widget(btn, Gtk.ResponseType.OK)
+        dialog.set_default_response(Gtk.ResponseType.OK)
 
-        desc_hbox = gtk.HBox(False, 5)
-        desc_hbox.pack_start(gtk.Label(_('Description: ')), False, False, 0)
+        desc_hbox = Gtk.HBox(False, 5)
+        desc_hbox.pack_start(Gtk.Label(_('Description: ')), False, False, 0)
         desc_hbox.pack_start(win, True, True, 0)
 
         dialog.vbox.pack_start(desc_hbox, False, False, 0)
@@ -383,7 +382,7 @@ class FileTransfersWindow:
             if os.path.exists(file_path):
                 # check if we have write permissions
                 if not os.access(file_path, os.W_OK):
-                    file_name = gobject.markup_escape_text(os.path.basename(
+                    file_name = GLib.markup_escape_text(os.path.basename(
                         file_path))
                     dialogs.ErrorDialog(
                         _('Cannot overwrite existing file "%s"' % file_name),
@@ -405,8 +404,8 @@ class FileTransfersWindow:
 
                 dialog = dialogs.FTOverwriteConfirmationDialog(
                     _('This file already exists'), _('What do you want to do?'),
-                    propose_resume=not dl_finished, on_response=on_response)
-                dialog.set_transient_for(dialog2)
+                    propose_resume=not dl_finished, on_response=on_response,
+                    transient_for=dialog2)
                 dialog.set_destroy_with_parent(True)
                 return
             else:
@@ -428,10 +427,10 @@ class FileTransfersWindow:
 
         dialog2 = dialogs.FileChooserDialog(
             title_text=_('Save File as...'),
-            action=gtk.FILE_CHOOSER_ACTION_SAVE,
-            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-            gtk.STOCK_SAVE, gtk.RESPONSE_OK),
-            default_response=gtk.RESPONSE_OK,
+            action=Gtk.FileChooserAction.SAVE,
+            buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+            Gtk.STOCK_SAVE, Gtk.ResponseType.OK),
+            default_response=Gtk.ResponseType.OK,
             current_folder=gajim.config.get('last_save_dir'),
             on_response_ok=(on_ok, account, contact, file_props),
             on_response_cancel=(on_cancel, account, contact, file_props))
@@ -447,8 +446,8 @@ class FileTransfersWindow:
         """
         if not file_props or not file_props.name:
             return
-        sec_text = '\t' + _('File: %s') % gobject.markup_escape_text(
-                file_props.name)
+        sec_text = '\t' + _('File: %s') % GLib.markup_escape_text(
+            file_props.name)
         if file_props.size:
             sec_text += '\n\t' + _('Size: %s') % \
                     helpers.convert_bytes(file_props.size)
@@ -474,7 +473,8 @@ class FileTransfersWindow:
 
     def get_icon(self, ident):
         return self.images.setdefault(ident,
-                self.window.render_icon(self.icons[ident], gtk.ICON_SIZE_MENU))
+            self.window.render_icon_pixbuf(self.icons[ident],
+                Gtk.IconSize.MENU))
 
     def set_status(self,file_props, status):
         """
@@ -483,41 +483,41 @@ class FileTransfersWindow:
         iter_ = self.get_iter_by_sid(file_props.type_, file_props.sid)
         if iter_ is None:
             return
-        self.model[iter_][C_SID].decode('utf-8')
+        self.model[iter_][C_SID]
         if status == 'stop':
             file_props.stopped = True
         elif status == 'ok':
             file_props.completed = True
             text = self._format_percent(100)
             received_size = int(file_props.received_len)
-            full_size = int(file_props.size)
+            full_size = file_props.size
             text += helpers.convert_bytes(received_size) + '/' + \
                 helpers.convert_bytes(full_size)
             self.model.set(iter_, C_PROGRESS, text)
-            self.model.set(iter_, C_PULSE, gobject.constants.G_MAXINT)
+            self.model.set(iter_, C_PULSE, GLib.MAXINT32)
         elif status == 'computing':
             self.model.set(iter_, C_PULSE, 1)
             text = _('Checking file...') + '\n'
             received_size = int(file_props.received_len)
-            full_size = int(file_props.size)
+            full_size = file_props.size
             text += helpers.convert_bytes(received_size) + '/' + \
                 helpers.convert_bytes(full_size)
             self.model.set(iter_, C_PROGRESS, text)
             def pulse():
                 p = self.model.get(iter_, C_PULSE)[0]
-                if p == gobject.constants.G_MAXINT:
+                if p == GLib.MAXINT32:
                     return False
                 self.model.set(iter_, C_PULSE, p + 1)
                 return True
-            gobject.timeout_add(100, pulse)
+            GLib.timeout_add(100, pulse)
         elif status == 'hash_error':
             text = _('File error') + '\n'
             received_size = int(file_props.received_len)
-            full_size = int(file_props.size)
+            full_size = file_props.size
             text += helpers.convert_bytes(received_size) + '/' + \
                 helpers.convert_bytes(full_size)
             self.model.set(iter_, C_PROGRESS, text)
-            self.model.set(iter_, C_PULSE, gobject.constants.G_MAXINT)
+            self.model.set(iter_, C_PULSE, GLib.MAXINT32)
         self.model.set(iter_, C_IMAGE, self.get_icon(status))
         path = self.model.get_path(iter_)
         self.select_func(path)
@@ -532,7 +532,7 @@ class FileTransfersWindow:
             _str += ' '
         if percent < 10:
             _str += ' '
-        _str += unicode(percent) + '%          \n'
+        _str += str(percent) + '%          \n'
         return _str
 
     def _format_time(self, _time):
@@ -584,7 +584,7 @@ class FileTransfersWindow:
                 other = file_props.sender
             else: # we send a file
                 other = file_props.receiver
-            if isinstance(other, unicode):
+            if isinstance(other, str):
                 jid = gajim.get_jid_without_resource(other)
             else: # It's a Contact instance
                 jid = other.jid
@@ -603,7 +603,7 @@ class FileTransfersWindow:
         Change the progress of a transfer with new transfered size
         """
         file_props = FilesProp.getFilePropByType(typ, sid)
-        full_size = int(file_props.size)
+        full_size = file_props.size
         if full_size == 0:
             percent = 0
         else:
@@ -674,9 +674,9 @@ class FileTransfersWindow:
         Return iter to the row, which holds file transfer, identified by the
         session id
         """
-        iter_ = self.model.get_iter_root()
+        iter_ = self.model.get_iter_first()
         while iter_:
-            if typ + sid == self.model[iter_][C_SID].decode('utf-8'):
+            if typ + sid == self.model[iter_][C_SID]:
                 return iter_
             iter_ = self.model.iter_next(iter_)
 
@@ -712,7 +712,7 @@ class FileTransfersWindow:
         file_props.type_ = 's'
         file_props.desc = file_desc
         file_props.elapsed_time = 0
-        file_props.size = unicode(stat[6])
+        file_props.size = stat[6]
         file_props.sender = account
         file_props.receiver = contact
         file_props.tt_account = account
@@ -737,7 +737,7 @@ class FileTransfersWindow:
             file_name = os.path.split(file_props.file_name)[1]
         else:
             file_name = file_props.name
-        text_props = gobject.markup_escape_text(file_name) + '\n'
+        text_props = GLib.markup_escape_text(file_name) + '\n'
         text_props += contact.get_shown_name()
         self.model.set(iter_, 1, text_labels, 2, text_props, C_PULSE, -1, C_SID,
                 file_props.type_ + file_props.sid)
@@ -754,9 +754,11 @@ class FileTransfersWindow:
         self.window.show_all()
 
     def on_transfers_list_motion_notify_event(self, widget, event):
-        pointer = self.tree.get_pointer()
+        w = self.tree.get_window()
+        device = w.get_display().get_device_manager().get_client_pointer()
+        pointer = w.get_device_position(device)
         props = widget.get_path_at_pos(int(event.x), int(event.y))
-        self.height_diff = pointer[1] - int(event.y)
+        self.height_diff = pointer[2] - int(event.y)
         if self.tooltip.timeout > 0:
             if not props or self.tooltip.id != props[0]:
                 self.tooltip.hide_tooltip()
@@ -768,21 +770,24 @@ class FileTransfersWindow:
             except Exception:
                 self.tooltip.hide_tooltip()
                 return
-            sid = self.model[iter_][C_SID].decode('utf-8')
+            sid = self.model[iter_][C_SID]
             file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
             if file_props is not None:
                 if self.tooltip.timeout == 0 or self.tooltip.id != props[0]:
                     self.tooltip.id = row
-                    self.tooltip.timeout = gobject.timeout_add(500,
-                            self.show_tooltip, widget)
+                    self.tooltip.timeout = GLib.timeout_add(500,
+                        self.show_tooltip, widget)
 
     def on_transfers_list_leave_notify_event(self, widget=None, event=None):
         if event is not None:
             self.height_diff = int(event.y)
         elif self.height_diff is 0:
             return
-        pointer = self.tree.get_pointer()
-        props = self.tree.get_path_at_pos(pointer[0], pointer[1] - self.height_diff)
+        w = self.tree.get_window()
+        device = w.get_display().get_device_manager().get_client_pointer()
+        pointer = w.get_device_position(device)
+        props = self.tree.get_path_at_pos(pointer[1],
+            pointer[2] - self.height_diff)
         if self.tooltip.timeout > 0:
             if not props or self.tooltip.id == props[0]:
                 self.tooltip.hide_tooltip()
@@ -823,7 +828,7 @@ class FileTransfersWindow:
             self.set_all_insensitive()
             return
         current_iter = self.model.get_iter(path)
-        sid = self.model[current_iter][C_SID].decode('utf-8')
+        sid = self.model[current_iter][C_SID]
         file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
         self.remove_menuitem.set_sensitive(is_row_selected)
         self.open_folder_menuitem.set_sensitive(is_row_selected)
@@ -881,7 +886,7 @@ class FileTransfersWindow:
         i = len(self.model) - 1
         while i >= 0:
             iter_ = self.model.get_iter((i))
-            sid = self.model[iter_][C_SID].decode('utf-8')
+            sid = self.model[iter_][C_SID]
             file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
             if is_transfer_stopped(file_props):
                 self._remove_transfer(iter_, sid, file_props)
@@ -893,8 +898,8 @@ class FileTransfersWindow:
         if status:
             label = _('Pause')
             self.pause_button.set_label(label)
-            self.pause_button.set_image(gtk.image_new_from_stock(
-                    gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_MENU))
+            self.pause_button.set_image(Gtk.Image.new_from_stock(
+                    Gtk.STOCK_MEDIA_PAUSE, Gtk.IconSize.MENU))
 
             self.pause_menuitem.set_sensitive(True)
             self.pause_menuitem.set_no_show_all(False)
@@ -904,8 +909,8 @@ class FileTransfersWindow:
         else:
             label = _('_Continue')
             self.pause_button.set_label(label)
-            self.pause_button.set_image(gtk.image_new_from_stock(
-                    gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_MENU))
+            self.pause_button.set_image(Gtk.Image.new_from_stock(
+                    Gtk.STOCK_MEDIA_PLAY, Gtk.IconSize.MENU))
             self.pause_menuitem.hide()
             self.pause_menuitem.set_no_show_all(True)
             self.continue_menuitem.set_sensitive(True)
@@ -916,7 +921,7 @@ class FileTransfersWindow:
         if selected is None or selected[1] is None:
             return
         s_iter = selected[1]
-        sid = self.model[s_iter][C_SID].decode('utf-8')
+        sid = self.model[s_iter][C_SID]
         file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
         if is_transfer_paused(file_props):
             file_props.last_time = time.time()
@@ -938,7 +943,7 @@ class FileTransfersWindow:
         if selected is None or selected[1] is None:
             return
         s_iter = selected[1]
-        sid = self.model[s_iter][C_SID].decode('utf-8')
+        sid = self.model[s_iter][C_SID]
         file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
         account = file_props.tt_account
         if account not in gajim.connections:
@@ -954,21 +959,23 @@ class FileTransfersWindow:
         if self.height_diff == 0:
             self.tooltip.hide_tooltip()
             return
-        pointer = self.tree.get_pointer()
-        props = self.tree.get_path_at_pos(pointer[0],
-                pointer[1] - self.height_diff)
+        w = self.tree.get_window()
+        device = w.get_display().get_device_manager().get_client_pointer()
+        pointer = w.get_device_position(device)
+        props = self.tree.get_path_at_pos(pointer[1],
+            pointer[2] - self.height_diff)
         # check if the current pointer is at the same path
         # as it was before setting the timeout
         if props and self.tooltip.id == props[0]:
             iter_ = self.model.get_iter(props[0])
-            sid = self.model[iter_][C_SID].decode('utf-8')
+            sid = self.model[iter_][C_SID]
             file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
             # bounding rectangle of coordinates for the cell within the treeview
             rect = self.tree.get_cell_area(props[0], props[1])
             # position of the treeview on the screen
-            position = widget.window.get_origin()
+            position = widget.get_window().get_origin()[1:]
             self.tooltip.show_tooltip(file_props, rect.height,
-                                                    position[1] + rect.y + self.height_diff)
+                position[1] + rect.y + self.height_diff)
         else:
             self.tooltip.hide_tooltip()
 
@@ -992,7 +999,7 @@ class FileTransfersWindow:
 
         event_button = gtkgui_helpers.get_possible_button_event(event)
         self.file_transfers_menu.show_all()
-        self.file_transfers_menu.popup(None, self.tree, None,
+        self.file_transfers_menu.popup(None, self.tree, None, None,
                 event_button, event.time)
 
     def on_transfers_list_key_press_event(self, widget, event):
@@ -1010,7 +1017,7 @@ class FileTransfersWindow:
             path = self.model.get_path(iter_)
             self.tree.get_selection().select_path(path)
 
-        if event.keyval == gtk.keysyms.Menu:
+        if event.keyval == Gdk.KEY_Menu:
             self.show_context_menu(event, iter_)
             return True
 
@@ -1049,7 +1056,7 @@ class FileTransfersWindow:
         if not selected or not selected[1]:
             return
         s_iter = selected[1]
-        sid = self.model[s_iter][C_SID].decode('utf-8')
+        sid = self.model[s_iter][C_SID]
         file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
         if not file_props.file_name:
             return
@@ -1071,11 +1078,11 @@ class FileTransfersWindow:
         if not selected or not selected[1]:
             return
         s_iter = selected[1]
-        sid = self.model[s_iter][C_SID].decode('utf-8')
+        sid = self.model[s_iter][C_SID]
         file_props = FilesProp.getFilePropByType(sid[0], sid[1:])
         self._remove_transfer(s_iter, sid, file_props)
         self.set_all_insensitive()
 
     def on_file_transfers_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape: # ESCAPE
+        if event.keyval == Gdk.KEY_Escape: # ESCAPE
             self.window.hide()
diff --git a/src/gajim-remote.py b/src/gajim-remote.py
index 5472474f3854c0296c652e4b0c541ac7f4b2fab2..82ec20ad2341223c3474936fcd0b870b2de81bf6 100644
--- a/src/gajim-remote.py
+++ b/src/gajim-remote.py
@@ -43,7 +43,7 @@ except Exception:
 
 def send_error(error_message):
     '''Writes error message to stderr and exits'''
-    print >> sys.stderr, error_message.encode(PREFERRED_ENCODING)
+    print(error_message, file=sys.stderr)
     sys.exit(1)
 
 try:
@@ -53,7 +53,7 @@ try:
     # test if dbus-x11 is installed
     bus = dbus.SessionBus()
 except Exception:
-    print _('D-Bus is not present on this machine or python module is missing')
+    print(_('D-Bus is not present on this machine or python module is missing'))
     sys.exit(1)
 
 OBJ_PATH = '/org/gajim/dbus/RemoteObject'
@@ -311,14 +311,15 @@ class GajimRemote:
         self.command = sys.argv[1]
         if self.command == 'help':
             if self.argv_len == 3:
-                print self.help_on_command(sys.argv[2]).encode(PREFERRED_ENCODING)
+                print(self.help_on_command(sys.argv[2]).encode(
+                    PREFERRED_ENCODING))
             else:
-                print self.compose_help().encode(PREFERRED_ENCODING)
+                print(self.compose_help().encode(PREFERRED_ENCODING))
             sys.exit(0)
         if self.command == 'handle_uri':
             self.handle_uri()
         if self.command == 'check_gajim_running':
-            print self.check_gajim_running()
+            print(self.check_gajim_running())
             sys.exit(0)
         self.init_connection()
         self.check_arguments()
@@ -354,28 +355,22 @@ class GajimRemote:
             elif self.command == 'list_accounts':
                 if isinstance(res, list):
                     for account in res:
-                        if isinstance(account, unicode):
-                            print account.encode(PREFERRED_ENCODING)
-                        else:
-                            print account
+                        print(account)
             elif self.command == 'account_info':
                 if res:
-                    print self.print_info(0, res, True)
+                    print(self.print_info(0, res, True))
             elif self.command == 'list_contacts':
                 for account_dict in res:
-                    print self.print_info(0, account_dict, True)
+                    print(self.print_info(0, account_dict, True))
             elif self.command == 'prefs_list':
                 pref_keys = sorted(res.keys())
                 for pref_key in pref_keys:
                     result = '%s = %s' % (pref_key, res[pref_key])
-                    if isinstance(result, unicode):
-                        print result.encode(PREFERRED_ENCODING)
-                    else:
-                        print result
+                    print(result)
             elif self.command == 'contact_info':
-                print self.print_info(0, res, True)
+                print(self.print_info(0, res, True))
             elif res:
-                print unicode(res).encode(PREFERRED_ENCODING)
+                print(res)
 
     def check_gajim_running(self):
         if not self.sbus:
@@ -471,7 +466,7 @@ class GajimRemote:
                     ret_str +='\t'
                 elif isinstance(val, int):
                     ret_str +='\t' + str(val)
-                elif isinstance(val, (str, unicode)):
+                elif isinstance(val, str):
                     ret_str +='\t' + val
                 elif isinstance(val, (list, tuple)):
                     res = ''
@@ -486,7 +481,7 @@ class GajimRemote:
             for key in prop_dict.keys():
                 val = prop_dict[key]
                 spacing = ' ' * level * 4
-                if isinstance(val, (unicode, int, str)):
+                if isinstance(val, (int, str)):
                     if val is not None:
                         val = val.strip()
                         ret_str += '%s%-10s: %s\n' % (spacing, key, val)
diff --git a/src/gajim.py b/src/gajim.py
index aef0378697b0b425bb01ac85f8e91b311119597a..8fb7b891b5ec58c58c08c1f685a8eed3baca2d47 100644
--- a/src/gajim.py
+++ b/src/gajim.py
@@ -42,7 +42,7 @@ import warnings
 if os.name == 'nt':
     log_path = os.path.join(os.environ['APPDATA'], 'Gajim')
     if not os.path.exists(log_path):
-        os.mkdir(log_path, 0700)
+        os.mkdir(log_path, 0o700)
     log_file = os.path.join(log_path, 'gajim.log')
     fout = open(log_file, 'a')
     sys.stdout = fout
@@ -65,16 +65,25 @@ if os.name == 'nt':
 try:
     import nbxmpp
 except ImportError:
-    print 'Gajim needs python-nbxmpp to run. Quiting...'
+    print('Gajim needs python-nbxmpp to run. Quiting...')
     sys.exit()
 
-from common import demandimport
-demandimport.enable()
-demandimport.ignore += ['gobject._gobject', 'libasyncns', 'i18n',
-    'logging.NullHandler', 'dbus.service', 'OpenSSL.SSL', 'OpenSSL.crypto',
-    'common.sleepy', 'DLFCN', 'dl', 'xml.sax', 'xml.sax.handler', 'ic',
-    'Crypto.PublicKey', 'IPython', 'contextlib', 'imp', 'gst.interfaces',
-    'monotonic', 'gtkexcepthook']
+try:
+    from distutils.version import LooseVersion as V
+    if V(nbxmpp.__version__) < V("0.3"):
+        print('Gajim needs python-nbxmpp > 0.3 to run. Quiting...')
+        sys.exit()
+except:
+    print('Gajim needs python-nbxmpp > 0.3 to run. Quiting...')
+    sys.exit()
+
+#from common import demandimport
+#demandimport.enable()
+#demandimport.ignore += ['GObject._gobject', 'libasyncns', 'i18n',
+#    'logging.NullHandler', 'dbus.service', 'OpenSSL.SSL', 'OpenSSL.crypto',
+#    'common.sleepy', 'DLFCN', 'dl', 'xml.sax', 'xml.sax.handler', 'ic',
+#    'Crypto.PublicKey', 'IPython', 'contextlib', 'imp', 'monotonic',
+#    'gtkexcepthook']
 
 if os.name == 'nt':
     import locale
@@ -85,7 +94,7 @@ if os.name == 'nt':
     os.environ['LANG'] = lang
     gettext.bindtextdomain(APP, DIR)
     gettext.textdomain(APP)
-    gettext.install(APP, DIR, unicode=True)
+    gettext.install(APP, DIR)
 
     locale.setlocale(locale.LC_ALL, '')
     import ctypes
@@ -112,6 +121,12 @@ import logging
 # gajim.gui or gajim.gtk more appropriate ?
 log = logging.getLogger('gajim.gajim')
 
+#import gi
+#gi.require_version('Gtk', '3.0')
+#gi.require_version('Gdk', '2.0')
+#gi.require_version('GObject', '2.0')
+#gi.require_version('Pango', '1.0')
+
 import getopt
 from common import i18n
 
@@ -126,13 +141,13 @@ def parseOpts():
         longargs += ' class= name= screen= gtk-module= sync g-fatal-warnings'
         longargs += ' sm-client-id= sm-client-state-file= sm-disable'
         opts = getopt.getopt(sys.argv[1:], shortargs, longargs.split())[0]
-    except getopt.error, msg1:
-        print msg1
-        print 'for help use --help'
+    except getopt.error as msg1:
+        print(str(msg1))
+        print('for help use --help')
         sys.exit(2)
     for o, a in opts:
         if o in ('-h', '--help'):
-            print _('Usage:') + \
+            print(_('Usage:') + \
                 '\n  gajim [options] filename\n\n' + \
                 _('Options:') + \
                 '\n  -h, --help         ' + \
@@ -146,7 +161,7 @@ def parseOpts():
                 '\n  -c, --config-path  ' + \
                     _('Set configuration directory') + \
                 '\n  -l, --loglevel     ' + \
-                    _('Configure logging system')
+                    _('Configure logging system') + '\n')
             sys.exit()
         elif o in ('-q', '--quiet'):
             logging_helpers.set_quiet()
@@ -162,12 +177,8 @@ def parseOpts():
 
 import locale
 profile, config_path = parseOpts()
-if config_path:
-    config_path = unicode(config_path, locale.getpreferredencoding())
 del parseOpts
 
-profile = unicode(profile, locale.getpreferredencoding())
-
 import common.configpaths
 common.configpaths.gajimpaths.init(config_path)
 del config_path
@@ -189,7 +200,7 @@ if os.name == 'nt':
             if self._file is None and self._error is None:
                 try:
                     self._file = open(fname, 'a')
-                except Exception, details:
+                except Exception as details:
                     self._error = details
             if self._file is not None:
                 self._file.write(text)
@@ -203,14 +214,16 @@ if os.name == 'nt':
 # PyGTK2.10+ only throws a warning
 warnings.filterwarnings('error', module='gtk')
 try:
-    import gobject
-    gobject.set_prgname('gajim')
-    import gtk
-except Warning, msg2:
+    from gi.repository import GObject
+    GObject.set_prgname('gajim')
+    from gi.repository import Gtk
+    from gi.repository import Gdk
+    from gi.repository import GLib
+except Warning as msg2:
     if str(msg2) == 'could not open display':
-        print >> sys.stderr, _('Gajim needs X server to run. Quiting...')
+        print(_('Gajim needs X server to run. Quiting...'), file=sys.stderr)
     else:
-        print >> sys.stderr, _('importing PyGTK failed: %s') % str(msg2)
+        print(_('importing PyGTK failed: %s') % str(msg2), file=sys.stderr)
     sys.exit()
 warnings.resetwarnings()
 
@@ -218,8 +231,8 @@ warnings.resetwarnings()
 if os.name == 'nt':
     warnings.filterwarnings(action='ignore')
 
-if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL:
-    i18n.direction_mark = u'\u200F'
+if Gtk.Widget.get_default_direction() == Gtk.TextDirection.RTL:
+    i18n.direction_mark = '\u200F'
 pritext = ''
 
 from common import exceptions
@@ -231,6 +244,10 @@ except exceptions.DatabaseMalformed:
         'http://trac.gajim.org/wiki/DatabaseBackup) or remove it (all history '
         'will be lost).') % common.logger.LOG_DB_PATH
 else:
+    from common import logger
+    gajim.logger = logger.Logger()
+    from common import caps_cache
+    caps_cache.initialize(gajim.logger)
     from common import dbus_support
     if dbus_support.supported:
         from music_track_listener import MusicTrackListener
@@ -252,12 +269,14 @@ else:
         elif sysname in ('FreeBSD', 'OpenBSD', 'NetBSD'):
             libc.setproctitle('gajim')
 
-    if gtk.pygtk_version < (2, 22, 0):
-        pritext = _('Gajim needs PyGTK 2.22 or above')
-        sectext = _('Gajim needs PyGTK 2.22 or above to run. Quiting...')
-    elif gtk.gtk_version < (2, 22, 0):
-        pritext = _('Gajim needs GTK 2.22 or above')
-        sectext = _('Gajim needs GTK 2.22 or above to run. Quiting...')
+#    if Gtk.pygtk_version < (2, 22, 0):
+#        pritext = _('Gajim needs PyGTK 2.22 or above')
+#        sectext = _('Gajim needs PyGTK 2.22 or above to run. Quiting...')
+#    elif Gtk.gtk_version < (2, 22, 0):
+#    if (Gtk.get_major_version(), Gtk.get_minor_version(),
+#    Gtk.get_micro_version()) < (2, 22, 0):
+#        pritext = _('Gajim needs GTK 2.22 or above')
+#        sectext = _('Gajim needs GTK 2.22 or above to run. Quiting...')
 
     from common import check_paths
 
@@ -272,9 +291,9 @@ else:
                 'http://sourceforge.net/project/showfiles.php?group_id=78018'
 
 if pritext:
-    dlg = gtk.MessageDialog(None,
-            gtk.DIALOG_DESTROY_WITH_PARENT | gtk.DIALOG_MODAL,
-            gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, message_format = pritext)
+    dlg = Gtk.MessageDialog(None,
+            Gtk.DialogFlags.DESTROY_WITH_PARENT | Gtk.DialogFlags.MODAL,
+            Gtk.MessageType.ERROR, Gtk.ButtonsType.OK, message_format = pritext)
 
     dlg.format_secondary_text(sectext)
     dlg.run()
@@ -293,6 +312,22 @@ gajimpaths = common.configpaths.gajimpaths
 pid_filename = gajimpaths['PID_FILE']
 config_filename = gajimpaths['CONFIG_FILE']
 
+# Seed the OpenSSL pseudo random number generator from file and initialize
+RNG_SEED = gajimpaths['RNG_SEED']
+PYOPENSSL_PRNG_PRESENT = False
+try:
+    import OpenSSL.rand
+    from common import crypto
+    PYOPENSSL_PRNG_PRESENT = True
+    # Seed from file
+    try:
+        OpenSSL.rand.load_file(RNG_SEED)
+    except TypeError:
+        OpenSSL.rand.load_file(RNG_SEED.encode('utf-8'))
+    crypto.add_entropy_sources_OpenSSL()
+except ImportError:
+    log.info("PyOpenSSL PRNG not available")
+
 import traceback
 import errno
 import dialogs
@@ -363,7 +398,7 @@ def pid_alive():
 
         try:
             f1 = open('/proc/%d/cmdline'% pid)
-        except IOError, e1:
+        except IOError as e1:
             if e1.errno == errno.ENOENT:
                 return False # file/pid does not exist
             raise
@@ -406,12 +441,12 @@ if pid_alive():
             pixs.append(pix)
     if pixs:
         # set the icon to all windows
-        gtk.window_set_default_icon_list(*pixs)
+        Gtk.Window.set_default_icon_list(*pixs)
     pritext = _('Gajim is already running')
     sectext = _('Another instance of Gajim seems to be running\nRun anyway?')
     dialog = dialogs.YesNoDialog(pritext, sectext)
     dialog.popup()
-    if dialog.run() != gtk.RESPONSE_YES:
+    if dialog.run() != Gtk.ResponseType.YES:
         sys.exit(3)
     dialog.destroy()
     # run anyway, delete pid and useless global vars
@@ -431,7 +466,7 @@ try:
     f2 = open(pid_filename, 'w')
     f2.write(str(os.getpid()))
     f2.close()
-except IOError, e2:
+except IOError as e2:
     dlg = dialogs.ErrorDialog(_('Disk Write Error'), str(e2))
     dlg.run()
     dlg.destroy()
@@ -439,6 +474,12 @@ except IOError, e2:
 del pid_dir
 
 def on_exit():
+    # Save the entropy from OpenSSL PRNG
+    if PYOPENSSL_PRNG_PRESENT:
+        try:
+            OpenSSL.rand.write_file(RNG_SEED)
+        except TypeError:
+            OpenSSL.rand.write_file(RNG_SEED.encode('utf-8'))
     # delete pid file on normal exit
     if os.path.exists(pid_filename):
         os.remove(pid_filename)
@@ -461,45 +502,12 @@ if __name__ == '__main__':
     log.info("Encodings: d:%s, fs:%s, p:%s", sys.getdefaultencoding(), \
             sys.getfilesystemencoding(), locale.getpreferredencoding())
 
-    if os.name != 'nt':
-        # Session Management support
-        try:
-            import gnome.ui
-            raise ImportError
-        except ImportError:
-            pass
-        else:
-            def die_cb(dummy):
-                gajim.interface.roster.quit_gtkgui_interface()
-            gnome.program_init('gajim', gajim.version)
-            cli = gnome.ui.master_client()
-            cli.connect('die', die_cb)
-
-            path_to_gajim_script = gtkgui_helpers.get_abspath_for_script(
-                'gajim')
-
-            if path_to_gajim_script:
-                argv = [path_to_gajim_script]
-                try:
-                    cli.set_restart_command(argv)
-                except TypeError:
-                    # Fedora systems have a broken gnome-python wrapper for this
-                    # function.
-                    cli.set_restart_command(len(argv), argv)
-
     check_paths.check_and_possibly_create_paths()
 
     interface = Interface()
     interface.run()
 
     try:
-        if os.name != 'nt':
-            # This makes Gajim unusable under windows, and threads are used only
-            # for GPG, so not under windows
-            gtk.gdk.threads_init()
-            gtk.gdk.threads_enter()
-        gtk.main()
-        if os.name != 'nt':
-            gtk.gdk.threads_leave()
+        Gtk.main()
     except KeyboardInterrupt:
-        print >> sys.stderr, 'KeyboardInterrupt'
+        print('KeyboardInterrupt', file=sys.stderr)
diff --git a/src/gajim_themes_window.py b/src/gajim_themes_window.py
index 2b923590fe22297d034e640624542c225d5a35e5..5f2d7d3d9e3cddcaee2a031831b5c2c32f774dcb 100644
--- a/src/gajim_themes_window.py
+++ b/src/gajim_themes_window.py
@@ -22,8 +22,9 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gtk
-import pango
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import Pango
 import dialogs
 import gtkgui_helpers
 
@@ -34,7 +35,8 @@ class GajimThemesWindow:
     def __init__(self):
         self.xml = gtkgui_helpers.get_gtk_builder('gajim_themes_window.ui')
         self.window = self.xml.get_object('gajim_themes_window')
-        self.window.set_transient_for(gajim.interface.roster.window)
+        self.window.set_transient_for(gajim.interface.instances[
+            'preferences'].window)
 
         self.options = ['account', 'group', 'contact', 'banner']
         self.options_combobox = self.xml.get_object('options_combobox')
@@ -54,13 +56,13 @@ class GajimThemesWindow:
         'muc_msg', 'muc_directed_msg'):
             self.colorbuttons[chatstate] = self.xml.get_object(chatstate + \
                     '_colorbutton')
-        model = gtk.ListStore(str)
+        model = Gtk.ListStore(str)
         self.themes_tree.set_model(model)
-        col = gtk.TreeViewColumn(_('Theme'))
+        col = Gtk.TreeViewColumn(_('Theme'))
         self.themes_tree.append_column(col)
-        renderer = gtk.CellRendererText()
+        renderer = Gtk.CellRendererText()
         col.pack_start(renderer, True)
-        col.set_attributes(renderer, text = 0)
+        col.add_attribute(renderer, 'text', 0)
         renderer.connect('edited', self.on_theme_cell_edited)
         renderer.set_property('editable', True)
         self.current_theme = gajim.config.get('roster_theme')
@@ -88,8 +90,7 @@ class GajimThemesWindow:
     def on_theme_cell_edited(self, cell, row, new_name):
         model = self.themes_tree.get_model()
         iter_ = model.get_iter_from_string(row)
-        old_name = model.get_value(iter_, 0).decode('utf-8')
-        new_name = new_name.decode('utf-8')
+        old_name = model.get_value(iter_, 0)
         if old_name == new_name:
             return
         if old_name == 'default':
@@ -125,7 +126,7 @@ class GajimThemesWindow:
 
     def select_active_theme(self):
         model = self.themes_tree.get_model()
-        iter_ = model.get_iter_root()
+        iter_ = model.get_iter_first()
         active_theme = gajim.config.get('roster_theme').replace('_', ' ')
         while iter_:
             theme = model[iter_][0]
@@ -149,7 +150,7 @@ class GajimThemesWindow:
             self.theme_options_vbox.set_sensitive(False)
             self.theme_options_table.set_sensitive(False)
             return
-        self.current_theme = model.get_value(iter_, 0).decode('utf-8')
+        self.current_theme = model.get_value(iter_, 0)
         self.current_theme = self.current_theme.replace(' ', '_')
         self.set_theme_options(self.current_theme)
         if self.current_theme == 'default':
@@ -168,10 +169,10 @@ class GajimThemesWindow:
         # don't confuse translators
         theme_name = _('theme name')
         theme_name_ns = theme_name.replace(' ', '_')
-        while theme_name_ns + unicode(i) in gajim.config.get_per('themes'):
+        while theme_name_ns + str(i) in gajim.config.get_per('themes'):
             i += 1
-        model.set_value(iter_, 0, theme_name + unicode(i))
-        gajim.config.add_per('themes', theme_name_ns + unicode(i))
+        model.set_value(iter_, 0, theme_name + str(i))
+        gajim.config.add_per('themes', theme_name_ns + str(i))
         self.themes_tree.get_selection().select_iter(iter_)
         col = self.themes_tree.get_column(0)
         path = model.get_path(iter_)
@@ -198,7 +199,7 @@ class GajimThemesWindow:
         textcolor = gajim.config.get_per('themes', theme, option + 'textcolor')
         if textcolor:
             state = True
-            self.text_colorbutton.set_color(gtk.gdk.color_parse(textcolor))
+            self.text_colorbutton.set_color(Gdk.color_parse(textcolor))
         else:
             state = False
         self.textcolor_checkbutton.set_active(state)
@@ -206,7 +207,7 @@ class GajimThemesWindow:
         bgcolor = gajim.config.get_per('themes', theme, option + 'bgcolor')
         if bgcolor:
             state = True
-            self.background_colorbutton.set_color(gtk.gdk.color_parse(
+            self.background_colorbutton.set_color(Gdk.color_parse(
                     bgcolor))
         else:
             state = False
@@ -231,7 +232,7 @@ class GajimThemesWindow:
         'muc_msg', 'muc_directed_msg'):
             color = gajim.config.get_per('themes', theme, 'state_' + chatstate + \
                     '_color')
-            self.colorbuttons[chatstate].set_color(gtk.gdk.color_parse(color))
+            self.colorbuttons[chatstate].set_color(Gdk.color_parse(color))
 
     def on_textcolor_checkbutton_toggled(self, widget):
         state = widget.get_active()
@@ -328,11 +329,11 @@ class GajimThemesWindow:
         """
         Return a FontDescription from togglebuttons states
         """
-        fd = pango.FontDescription()
+        fd = Pango.FontDescription()
         if self.bold_togglebutton.get_active():
-            fd.set_weight(pango.WEIGHT_BOLD)
+            fd.set_weight(Pango.Weight.BOLD)
         if self.italic_togglebutton.get_active():
-            fd.set_style(pango.STYLE_ITALIC)
+            fd.set_style(Pango.Style.ITALIC)
         return fd
 
     def _set_font_widgets(self, font_attrs):
@@ -365,10 +366,10 @@ class GajimThemesWindow:
         Get tuple of font properties: weight, style
         """
         font_props = [False, False, False]
-        font_description = pango.FontDescription(font_name)
-        if font_description.get_weight() != pango.WEIGHT_NORMAL:
+        font_description = Pango.FontDescription(font_name)
+        if font_description.get_weight() != Pango.Weight.NORMAL:
             font_props[0] = True
-        if font_description.get_style() != pango.STYLE_ITALIC:
+        if font_description.get_style() != Pango.Style.ITALIC:
             font_props[1] = True
         return font_props
 
diff --git a/src/groupchat_control.py b/src/groupchat_control.py
index 55d05b98f97c09a9c80c462f723c150d38d90278..9e727e059af14d641ebac08de11f058eddc9f4aa 100644
--- a/src/groupchat_control.py
+++ b/src/groupchat_control.py
@@ -30,9 +30,11 @@
 import os
 import time
 import locale
-import gtk
-import pango
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository import Pango
+from gi.repository import GLib
 import gtkgui_helpers
 import gui_menu_builder
 import message_control
@@ -42,6 +44,7 @@ import config
 import vcard
 import cell_renderer_image
 import dataforms_widget
+import nbxmpp
 
 from common import gajim
 from common import helpers
@@ -69,16 +72,20 @@ C_TEXT, # text shown in the cellrenderer
 C_AVATAR, # avatar of the contact
 ) = range(5)
 
+empty_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1)
+empty_pixbuf.fill(0xffffff00)
+
 def set_renderer_color(treeview, renderer, set_background=True):
     """
     Set style for group row, using PRELIGHT system color
     """
+    context = treeview.get_style_context()
     if set_background:
-        bgcolor = treeview.style.bg[gtk.STATE_PRELIGHT]
-        renderer.set_property('cell-background-gdk', bgcolor)
+        bgcolor = context.get_background_color(Gtk.StateFlags.PRELIGHT)
+        renderer.set_property('cell-background-rgba', bgcolor)
     else:
-        fgcolor = treeview.style.fg[gtk.STATE_PRELIGHT]
-        renderer.set_property('foreground-gdk', fgcolor)
+        fgcolor = context.get_color(Gtk.StateFlags.PRELIGHT)
+        renderer.set_property('foreground-rgba', fgcolor)
 
 def tree_cell_data_func(column, renderer, model, iter_, tv=None):
     # cell data func is global, because we don't want it to keep
@@ -86,7 +93,7 @@ def tree_cell_data_func(column, renderer, model, iter_, tv=None):
     theme = gajim.config.get('roster_theme')
     # allocate space for avatar only if needed
     parent_iter = model.iter_parent(iter_)
-    if isinstance(renderer, gtk.CellRendererPixbuf):
+    if isinstance(renderer, Gtk.CellRendererPixbuf):
         avatar_position = gajim.config.get('avatar_position_in_roster')
         if avatar_position == 'right':
             renderer.set_property('xalign', 1) # align pixbuf to the right
@@ -105,7 +112,7 @@ def tree_cell_data_func(column, renderer, model, iter_, tv=None):
             renderer.set_property('cell-background', bgcolor)
         else:
             renderer.set_property('cell-background', None)
-        if isinstance(renderer, gtk.CellRendererText):
+        if isinstance(renderer, Gtk.CellRendererText):
             # foreground property is only with CellRendererText
             color = gajim.config.get_per('themes', theme, 'contacttextcolor')
             if color:
@@ -120,7 +127,7 @@ def tree_cell_data_func(column, renderer, model, iter_, tv=None):
             renderer.set_property('cell-background', bgcolor)
         else:
             set_renderer_color(tv, renderer)
-        if isinstance(renderer, gtk.CellRendererText):
+        if isinstance(renderer, Gtk.CellRendererText):
             # foreground property is only with CellRendererText
             color = gajim.config.get_per('themes', theme, 'grouptextcolor')
             if color:
@@ -236,8 +243,8 @@ class PrivateChatControl(ChatControl):
                     _('Sending private message failed'),
                     #in second %s code replaces with nickname
                     _('You are no longer in group chat "%(room)s" or '
-                    '"%(nick)s" has left.') % {'room': u'\u200E' + room,
-                    'nick': nick})
+                    '"%(nick)s" has left.') % {'room': '\u200E' + room,
+                    'nick': nick}, transient_for=self.parent_win.window)
                 return
 
         ChatControl.send_message(self, message, xhtml=xhtml,
@@ -340,7 +347,7 @@ class GroupchatControl(ChatControlBase):
 
             if gtkgui_helpers.gtk_icon_theme.has_icon('bookmark-new'):
                 img = self.xml.get_object('image7')
-                img.set_from_icon_name('bookmark-new', gtk.ICON_SIZE_MENU)
+                img.set_from_icon_name('bookmark-new', Gtk.IconSize.MENU)
             widget.set_sensitive(
                 gajim.connections[self.account].private_storage_supported or \
                 (gajim.connections[self.account].pubsub_supported and \
@@ -348,8 +355,8 @@ class GroupchatControl(ChatControlBase):
             widget.show()
 
         if gtkgui_helpers.gtk_icon_theme.has_icon('document-open-recent'):
-            img = self.xml.get_object('image8')
-            img.set_from_icon_name('document-open-recent', gtk.ICON_SIZE_MENU)
+            img = self.xml.get_object('history_image')
+            img.set_from_icon_name('document-open-recent', Gtk.IconSize.MENU)
         widget = self.xml.get_object('list_treeview')
         id_ = widget.connect('row_expanded', self.on_list_treeview_row_expanded)
         self.handlers[id_] = widget
@@ -379,7 +386,7 @@ class GroupchatControl(ChatControlBase):
         self.handlers[id_] = widget
 
         self.room_jid = self.contact.jid
-        self.nick = contact.name.decode('utf-8')
+        self.nick = contact.name
         self.new_nick = ''
         self.name = ''
         for bm in gajim.connections[self.account].bookmarks:
@@ -441,13 +448,13 @@ class GroupchatControl(ChatControlBase):
         self.hpaned.set_position(hpaned_position)
 
         #status_image, shown_nick, type, nickname, avatar
-        self.columns = [gtk.Image, str, str, str, gtk.gdk.Pixbuf]
-        self.model = gtk.TreeStore(*self.columns)
+        self.columns = [Gtk.Image, str, str, str, GdkPixbuf.Pixbuf]
+        self.model = Gtk.TreeStore(*self.columns)
         self.model.set_sort_func(C_NICK, self.tree_compare_iters)
-        self.model.set_sort_column_id(C_NICK, gtk.SORT_ASCENDING)
+        self.model.set_sort_column_id(C_NICK, Gtk.SortType.ASCENDING)
 
         # columns
-        column = gtk.TreeViewColumn()
+        column = Gtk.TreeViewColumn()
         # list of renderers with attributes / properties in the form:
         # (name, renderer_object, expand?, attribute_name, attribute_value,
         # cell_data_func, func_arg)
@@ -457,9 +464,9 @@ class GroupchatControl(ChatControlBase):
         self.renderers_propertys = {}
         renderer_image = cell_renderer_image.CellRendererImage(0, 0)
         self.renderers_propertys[renderer_image] = ('width', 26)
-        renderer_text = gtk.CellRendererText()
+        renderer_text = Gtk.CellRendererText()
         self.renderers_propertys[renderer_text] = ('ellipsize',
-            pango.ELLIPSIZE_END)
+            Pango.EllipsizeMode.END)
 
         self.renderers_list += (
             # status img
@@ -470,7 +477,7 @@ class GroupchatControl(ChatControlBase):
             'markup', C_TEXT, tree_cell_data_func, self.list_treeview))
 
         # avatar img
-        avater_renderer = ('avatar', gtk.CellRendererPixbuf(),
+        avater_renderer = ('avatar', Gtk.CellRendererPixbuf(),
             False, 'pixbuf', C_AVATAR,
             tree_cell_data_func, self.list_treeview)
 
@@ -483,9 +490,9 @@ class GroupchatControl(ChatControlBase):
         self.list_treeview.append_column(column)
 
         # workaround to avoid gtk arrows to be shown
-        column = gtk.TreeViewColumn() # 2nd COLUMN
-        renderer = gtk.CellRendererPixbuf()
-        column.pack_start(renderer, expand=False)
+        column = Gtk.TreeViewColumn() # 2nd COLUMN
+        renderer = Gtk.CellRendererPixbuf()
+        column.pack_start(renderer, False)
         self.list_treeview.append_column(column)
         column.set_visible(False)
         self.list_treeview.set_expander_column(column)
@@ -523,7 +530,7 @@ class GroupchatControl(ChatControlBase):
 
     def fill_column(self, col):
         for rend in self.renderers_list:
-            col.pack_start(rend[1], expand=rend[2])
+            col.pack_start(rend[1], rend[2])
             col.add_attribute(rend[1], rend[3], rend[4])
             col.set_cell_data_func(rend[1], rend[5], rend[6])
         # set renderers propertys
@@ -531,7 +538,7 @@ class GroupchatControl(ChatControlBase):
             renderer.set_property(self.renderers_propertys[renderer][0],
                 self.renderers_propertys[renderer][1])
 
-    def tree_compare_iters(self, model, iter1, iter2):
+    def tree_compare_iters(self, model, iter1, iter2, data=None):
         """
         Compare two iters to sort them
         """
@@ -543,8 +550,6 @@ class GroupchatControl(ChatControlBase):
         nick2 = model[iter2][C_NICK]
         if not nick1 or not nick2:
             return 0
-        nick1 = nick1.decode('utf-8')
-        nick2 = nick2.decode('utf-8')
         if type1 == 'role':
             return locale.strcoll(nick1, nick2)
         if type1 == 'contact':
@@ -578,17 +583,17 @@ class GroupchatControl(ChatControlBase):
         and the ability to insert a nick
         """
         ChatControlBase.on_msg_textview_populate_popup(self, textview, menu)
-        item = gtk.SeparatorMenuItem()
+        item = Gtk.SeparatorMenuItem.new()
         menu.prepend(item)
 
-        item = gtk.MenuItem(_('Insert Nickname'))
+        item = Gtk.MenuItem(_('Insert Nickname'))
         menu.prepend(item)
-        submenu = gtk.Menu()
+        submenu = Gtk.Menu()
         item.set_submenu(submenu)
 
         for nick in sorted(gajim.contacts.get_nick_list(self.account,
         self.room_jid)):
-            item = gtk.MenuItem(nick, use_underline=False)
+            item = Gtk.MenuItem(nick, use_underline=False)
             submenu.append(item)
             id_ = item.connect('activate', self.append_nick_in_msg_textview,
                 nick)
@@ -603,14 +608,15 @@ class GroupchatControl(ChatControlBase):
             self.resize_from_another_muc = False
         # Reset the flag when everything will be redrawn, and in particular when
         # on_treeview_size_allocate will have been called.
-        gobject.idle_add(reset_flag)
+        GLib.idle_add(reset_flag)
 
     def on_hpaned_notify(self, pane, gparamspec):
         """
         The MUC treeview has resized. Move the hpaned in all tabs to match
         """
-        if gparamspec.name != 'position':
-            return
+       # print pane, dir(pane)
+        #if gparamspec.name != 'position':
+            #return
         if self.resize_from_another_muc:
             # Don't send the event to other MUC
             return
@@ -632,7 +638,7 @@ class GroupchatControl(ChatControlBase):
         """
         Iterate over all contact rows in the tree model
         """
-        role_iter = self.model.get_iter_root()
+        role_iter = self.model.get_iter_first()
         while role_iter:
             contact_iter = self.model.iter_children(role_iter)
             while contact_iter:
@@ -646,7 +652,7 @@ class GroupchatControl(ChatControlBase):
         """
         # Get the room_jid from treeview
         for contact in self.iter_contact_rows():
-            nick = contact[C_NICK].decode('utf-8')
+            nick = contact[C_NICK]
             self.draw_contact(nick)
 
     def on_list_treeview_selection_changed(self, selection):
@@ -658,7 +664,7 @@ class GroupchatControl(ChatControlBase):
             self._last_selected_contact = None
             return
         contact = model[selected_iter]
-        nick = contact[C_NICK].decode('utf-8')
+        nick = contact[C_NICK]
         self._last_selected_contact = nick
         if contact[C_TYPE] != 'contact':
             return
@@ -676,21 +682,26 @@ class GroupchatControl(ChatControlBase):
         color_name = None
         color = None
         theme = gajim.config.get('roster_theme')
+        context = self.parent_win.notebook.get_style_context()
         if chatstate == 'attention' and (not has_focus or not current_tab):
             self.attention_flag = True
             color_name = gajim.config.get_per('themes', theme,
-                                            'state_muc_directed_msg_color')
+                'state_muc_directed_msg_color')
         elif chatstate:
             if chatstate == 'active' or (current_tab and has_focus):
                 self.attention_flag = False
                 # get active color from gtk
-                color = self.parent_win.notebook.style.fg[gtk.STATE_ACTIVE]
+                color = context.get_color(Gtk.StateFlags.ACTIVE)
             elif chatstate == 'newmsg' and (not has_focus or not current_tab) \
             and not self.attention_flag:
                 color_name = gajim.config.get_per('themes', theme,
-                        'state_muc_msg_color')
+                    'state_muc_msg_color')
         if color_name:
-            color = gtk.gdk.colormap_get_system().alloc_color(color_name)
+            color = Gdk.RGBA()
+            ok = Gdk.RGBA.parse(color, color_name)
+            if not ok:
+                del color
+                color = context.get_color(Gtk.StateFlags.ACTIVE)
 
         if self.is_continued:
             # if this is a continued conversation
@@ -704,7 +715,7 @@ class GroupchatControl(ChatControlBase):
         if num_unread == 1:
             unread = '*'
         elif num_unread > 1:
-            unread = '[' + unicode(num_unread) + ']'
+            unread = '[' + str(num_unread) + ']'
         label_str = unread + label_str
         return (label_str, color)
 
@@ -722,11 +733,11 @@ class GroupchatControl(ChatControlBase):
         for nick in gajim.contacts.get_nick_list(self.account, self.room_jid):
             self.draw_contact(nick)
 
-    def _change_style(self, model, path, iter_):
+    def _change_style(self, model, path, iter_, option):
         model[iter_][C_NICK] = model[iter_][C_NICK]
 
     def change_roster_style(self):
-        self.model.foreach(self._change_style)
+        self.model.foreach(self._change_style, None)
 
     def repaint_themed_widgets(self):
         ChatControlBase.repaint_themed_widgets(self)
@@ -742,14 +753,14 @@ class GroupchatControl(ChatControlBase):
             image = 'muc_inactive'
         if '32' in images and image in images['32']:
             muc_icon = images['32'][image]
-            if muc_icon.get_storage_type() != gtk.IMAGE_EMPTY:
+            if muc_icon.get_storage_type() != Gtk.ImageType.EMPTY:
                 pix = muc_icon.get_pixbuf()
                 banner_status_img.set_from_pixbuf(pix)
                 return
         # we need to scale 16x16 to 32x32
         muc_icon = images['16'][image]
         pix = muc_icon.get_pixbuf()
-        scaled_pix = pix.scale_simple(32, 32, gtk.gdk.INTERP_BILINEAR)
+        scaled_pix = pix.scale_simple(32, 32, GdkPixbuf.InterpType.BILINEAR)
         banner_status_img.set_from_pixbuf(scaled_pix)
 
     def get_continued_conversation_name(self):
@@ -774,19 +785,19 @@ class GroupchatControl(ChatControlBase):
         Draw the text in the fat line at the top of the window that houses the
         room jid, subject
         """
-        self.name_label.set_ellipsize(pango.ELLIPSIZE_END)
-        self.banner_status_label.set_ellipsize(pango.ELLIPSIZE_END)
+        self.name_label.set_ellipsize(Pango.EllipsizeMode.END)
+        self.banner_status_label.set_ellipsize(Pango.EllipsizeMode.END)
         font_attrs, font_attrs_small = self.get_font_attrs()
         if self.is_continued:
             name = self.get_continued_conversation_name()
         else:
             name = self.room_jid
-        text = '<span %s>%s</span>' % (font_attrs, u'\u200E' + name)
+        text = '<span %s>%s</span>' % (font_attrs, '\u200E' + name)
         self.name_label.set_markup(text)
 
         if self.subject:
             subject = helpers.reduce_chars_newlines(self.subject, max_lines=2)
-            subject = gobject.markup_escape_text(subject)
+            subject = GLib.markup_escape_text(subject)
             subject_text = self.urlfinder.sub(self.make_href, subject)
             subject_text = '<span %s>%s</span>' % (font_attrs_small,
                 subject_text)
@@ -823,11 +834,13 @@ class GroupchatControl(ChatControlBase):
         request_voice_separator = xml.get_object('request_voice_separator')
 
         if gtkgui_helpers.gtk_icon_theme.has_icon('bookmark-new'):
-            gtkgui_helpers.add_image_to_menuitem(bookmark_room_menuitem,
-                'bookmark-new')
+            img = Gtk.Image()
+            img.set_from_icon_name('bookmark-new', Gtk.IconSize.MENU)
+            bookmark_room_menuitem.set_image(img)
         if gtkgui_helpers.gtk_icon_theme.has_icon('document-open-recent'):
-            gtkgui_helpers.add_image_to_menuitem(history_menuitem,
-                'document-open-recent')
+            img = Gtk.Image()
+            img.set_from_icon_name('document-open-recent', Gtk.IconSize.MENU)
+            history_menuitem.set_image(img)
 
         if hide_buttonbar_items:
             change_nick_menuitem.hide()
@@ -849,15 +862,15 @@ class GroupchatControl(ChatControlBase):
                     bookmark_separator.hide()
                     break
 
-        ag = gtk.accel_groups_from_object(self.parent_win.window)[0]
-        change_nick_menuitem.add_accelerator('activate', ag, gtk.keysyms.n,
-            gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK, gtk.ACCEL_VISIBLE)
+        ag = Gtk.accel_groups_from_object(self.parent_win.window)[0]
+        change_nick_menuitem.add_accelerator('activate', ag, Gdk.KEY_n,
+            Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK, Gtk.AccelFlags.VISIBLE)
         change_subject_menuitem.add_accelerator('activate', ag,
-            gtk.keysyms.t, gtk.gdk.MOD1_MASK, gtk.ACCEL_VISIBLE)
-        bookmark_room_menuitem.add_accelerator('activate', ag, gtk.keysyms.b,
-            gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
-        history_menuitem.add_accelerator('activate', ag, gtk.keysyms.h,
-            gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
+            Gdk.KEY_t, Gdk.ModifierType.MOD1_MASK, Gtk.AccelFlags.VISIBLE)
+        bookmark_room_menuitem.add_accelerator('activate', ag, Gdk.KEY_b,
+            Gdk.ModifierType.CONTROL_MASK, Gtk.AccelFlags.VISIBLE)
+        history_menuitem.add_accelerator('activate', ag, Gdk.KEY_h,
+            Gdk.ModifierType.CONTROL_MASK, Gtk.AccelFlags.VISIBLE)
 
         if self.contact.jid in gajim.config.get_per('accounts', self.account,
         'minimized_gc').split(' '):
@@ -932,15 +945,15 @@ class GroupchatControl(ChatControlBase):
     def destroy_menu(self, menu, change_nick_menuitem, change_subject_menuitem,
     bookmark_room_menuitem, history_menuitem):
         # destroy accelerators
-        ag = gtk.accel_groups_from_object(self.parent_win.window)[0]
-        change_nick_menuitem.remove_accelerator(ag, gtk.keysyms.n,
-            gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK)
-        change_subject_menuitem.remove_accelerator(ag, gtk.keysyms.t,
-            gtk.gdk.MOD1_MASK)
-        bookmark_room_menuitem.remove_accelerator(ag, gtk.keysyms.b,
-            gtk.gdk.CONTROL_MASK)
-        history_menuitem.remove_accelerator(ag, gtk.keysyms.h,
-            gtk.gdk.CONTROL_MASK)
+        ag = Gtk.accel_groups_from_object(self.parent_win.window)[0]
+        change_nick_menuitem.remove_accelerator(ag, Gdk.KEY_n,
+            Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK)
+        change_subject_menuitem.remove_accelerator(ag, Gdk.KEY_t,
+            Gdk.ModifierType.MOD1_MASK)
+        bookmark_room_menuitem.remove_accelerator(ag, Gdk.KEY_b,
+            Gdk.ModifierType.CONTROL_MASK)
+        history_menuitem.remove_accelerator(ag, Gdk.KEY_h,
+            Gdk.ModifierType.CONTROL_MASK)
         # destroy menu
         menu.destroy()
 
@@ -984,15 +997,15 @@ class GroupchatControl(ChatControlBase):
             self.form_widget.connect('validated', on_send_dataform_clicked)
             self.form_widget.show_all()
             vbox = self.xml.get_object('gc_textviews_vbox')
-            vbox.pack_start(self.form_widget, expand=False, fill=False)
+            vbox.pack_start(self.form_widget, False, True, 0)
 
-            valid_button = gtk.Button(stock=gtk.STOCK_OK)
+            valid_button = Gtk.Button(stock=Gtk.STOCK_OK)
             valid_button.connect('clicked', on_send_dataform_clicked)
-            self.btn_box = gtk.HButtonBox()
-            self.btn_box.set_layout(gtk.BUTTONBOX_END)
-            self.btn_box.pack_start(valid_button)
+            self.btn_box = Gtk.HButtonBox()
+            self.btn_box.set_layout(Gtk.ButtonBoxStyle.END)
+            self.btn_box.pack_start(valid_button, True, True, 0)
             self.btn_box.show_all()
-            vbox.pack_start(self.btn_box, expand=False, fill=False)
+            vbox.pack_start(self.btn_box, False, False, 0)
             if self.parent_win:
                 self.parent_win.redraw_tab(self, 'attention')
             else:
@@ -1063,7 +1076,9 @@ class GroupchatControl(ChatControlBase):
         else:
             self._start_private_message(nick)
         # Scroll to line
-        self.list_treeview.expand_row(path[0:1], False)
+        path_ = path
+        path_.up()
+        self.list_treeview.expand_row(path_, False)
         self.list_treeview.scroll_to_cell(path)
         self.list_treeview.set_cursor(path)
         contact = gajim.contacts.get_contact_with_highest_priority(
@@ -1072,11 +1087,11 @@ class GroupchatControl(ChatControlBase):
             gajim.interface.roster.draw_contact(self.room_jid, self.account)
 
     def get_contact_iter(self, nick):
-        role_iter = self.model.get_iter_root()
+        role_iter = self.model.get_iter_first()
         while role_iter:
             user_iter = self.model.iter_children(role_iter)
             while user_iter:
-                if nick == self.model[user_iter][C_NICK].decode('utf-8'):
+                if nick == self.model[user_iter][C_NICK]:
                     return user_iter
                 else:
                     user_iter = self.model.iter_next(user_iter)
@@ -1084,9 +1099,7 @@ class GroupchatControl(ChatControlBase):
         return None
 
     def print_old_conversation(self, text, contact='', tim=None, xhtml = None,
-        displaymarking=None):
-        if isinstance(text, str):
-            text = unicode(text, 'utf-8')
+    displaymarking=None):
         if contact:
             if contact == self.nick: # it's us
                 kind = 'outgoing'
@@ -1112,8 +1125,6 @@ class GroupchatControl(ChatControlBase):
         (contact = 'info' in such a case).
         If contact is not set: it's a message from the server or help.
         """
-        if isinstance(text, str):
-            text = unicode(text, 'utf-8')
         other_tags_for_name = []
         other_tags_for_text = []
         if contact:
@@ -1339,7 +1350,7 @@ class GroupchatControl(ChatControlBase):
     def got_connected(self):
         # Make autorejoin stop.
         if self.autorejoin:
-            gobject.source_remove(self.autorejoin)
+            GLib.source_remove(self.autorejoin)
         self.autorejoin = None
 
         gajim.gc_connected[self.account][self.room_jid] = True
@@ -1406,8 +1417,7 @@ class GroupchatControl(ChatControlBase):
         if self.autorejoin is None and gajim.account_is_connected(self.account):
             ar_to = gajim.config.get('muc_autorejoin_timeout')
             if ar_to:
-                self.autorejoin = gobject.timeout_add_seconds(ar_to,
-                    self.rejoin)
+                self.autorejoin = GLib.timeout_add_seconds(ar_to, self.rejoin)
 
     def rejoin(self):
         if not self.autorejoin:
@@ -1435,7 +1445,7 @@ class GroupchatControl(ChatControlBase):
         contact in a room
         """
         if nick is None:
-            nick = model[iter_][C_NICK].decode('utf-8')
+            nick = model[iter_][C_NICK]
 
         ctrl = self._start_private_message(nick)
         if ctrl and msg:
@@ -1460,7 +1470,7 @@ class GroupchatControl(ChatControlBase):
         else:
             image = state_images[gc_contact.show]
 
-        name = gobject.markup_escape_text(gc_contact.name)
+        name = GLib.markup_escape_text(gc_contact.name)
 
         # Strike name if blocked
         fjid = self.room_jid + '/' + nick
@@ -1479,14 +1489,14 @@ class GroupchatControl(ChatControlBase):
                 colorstring = "#%04x%04x%04x" % (color.red, color.green,
                     color.blue)
                 name += ('\n<span size="small" style="italic" foreground="%s">'
-                    '%s</span>') % (colorstring, gobject.markup_escape_text(
+                    '%s</span>') % (colorstring, GLib.markup_escape_text(
                     status))
 
-        if image.get_storage_type() == gtk.IMAGE_PIXBUF and \
+        if image.get_storage_type() == Gtk.ImageType.PIXBUF and \
         gc_contact.affiliation != 'none' and gajim.config.get(
         'show_affiliation_in_groupchat'):
             pixbuf1 = image.get_pixbuf().copy()
-            pixbuf2 = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, 4, 4)
+            pixbuf2 = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 4, 4)
             if gc_contact.affiliation == 'owner':
                 pixbuf2.fill(0xff0000ff) # Red
             elif gc_contact.affiliation == 'admin':
@@ -1495,8 +1505,8 @@ class GroupchatControl(ChatControlBase):
                 pixbuf2.fill(0x00ff00ff) # Green
             pixbuf2.composite(pixbuf1, 12, 12, pixbuf2.get_property('width'),
                 pixbuf2.get_property('height'), 0, 0, 1.0, 1.0,
-                gtk.gdk.INTERP_HYPER, 127)
-            image = gtk.image_new_from_pixbuf(pixbuf1)
+                GdkPixbuf.InterpType.HYPER, 127)
+            image = Gtk.Image.new_from_pixbuf(pixbuf1)
         self.model[iter_][C_IMG] = image
         self.model[iter_][C_TEXT] = name
 
@@ -1509,9 +1519,11 @@ class GroupchatControl(ChatControlBase):
         fake_jid = self.room_jid + '/' + nick
         pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(fake_jid)
         if pixbuf in ('ask', None):
-            scaled_pixbuf = None
+            scaled_pixbuf = empty_pixbuf
         else:
             scaled_pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'roster')
+            if not scaled_pixbuf:
+                scaled_pixbuf = empty_pixbuf
         self.model[iter_][C_AVATAR] = scaled_pixbuf
 
     def draw_role(self, role):
@@ -1912,9 +1924,9 @@ class GroupchatControl(ChatControlBase):
         return iter_
 
     def get_role_iter(self, role):
-        role_iter = self.model.get_iter_root()
+        role_iter = self.model.get_iter_first()
         while role_iter:
-            role_name = self.model[role_iter][C_NICK].decode('utf-8')
+            role_name = self.model[role_iter][C_NICK]
             if role == role_name:
                 return role_iter
             role_iter = self.model.iter_next(role_iter)
@@ -1961,8 +1973,8 @@ class GroupchatControl(ChatControlBase):
                 self.last_sent_msg = msg
                 if self.correcting:
                     self.correcting = False
-                    self.msg_textview.modify_base(gtk.STATE_NORMAL,
-                        self.old_message_tv_color)
+                    self.msg_textview.override_background_color(
+                        Gtk.StateType.NORMAL, self.old_message_tv_color)
 
             if self.correcting and self.last_sent_msg:
                 correction_msg = self.last_sent_msg
@@ -2073,7 +2085,7 @@ class GroupchatControl(ChatControlBase):
         gajim.config.set('gc-hpaned-position', self.hpaned.get_position())
         # remove all register handlers on wigets, created by self.xml
         # to prevent circular references among objects
-        for i in self.handlers.keys():
+        for i in list(self.handlers.keys()):
             if self.handlers[i].handler_is_connected(i):
                 self.handlers[i].disconnect(i)
             del self.handlers[i]
@@ -2202,7 +2214,7 @@ class GroupchatControl(ChatControlBase):
                 reason, jid)
 
         # Ask for a reason
-        dialogs.DoubleInputDialog(_('Destroying %s') % u'\u200E' + \
+        dialogs.DoubleInputDialog(_('Destroying %s') % '\u200E' + \
             self.room_jid, _('You are going to definitively destroy this '
             'room.\nYou may specify a reason below:'),
             _('You may also enter an alternate venue:'), ok_handler=on_ok,
@@ -2236,7 +2248,7 @@ class GroupchatControl(ChatControlBase):
         type_ = model[iter_][2]
         if type_ != 'contact': # source is not a contact
             return
-        contact_jid = data.decode('utf-8')
+        contact_jid = data
         gajim.connections[self.account].send_invite(self.room_jid, contact_jid)
         self.print_conversation(_('%(jid)s has been invited in this room') % {
             'jid': contact_jid}, graphics=False)
@@ -2250,7 +2262,7 @@ class GroupchatControl(ChatControlBase):
             # Textview is not sensitive, don't handle keypress
             return
         # construct event instance from binding
-        event = gtk.gdk.Event(gtk.gdk.KEY_PRESS) # it's always a key-press here
+        event = Gdk.Event(Gdk.EventType.KEY_PRESS) # it's always a key-press here
         event.keyval = event_keyval
         event.state = event_keymod
         event.time = 0 # assign current time
@@ -2258,7 +2270,7 @@ class GroupchatControl(ChatControlBase):
         message_buffer = widget.get_buffer()
         start_iter, end_iter = message_buffer.get_bounds()
 
-        if event.keyval == gtk.keysyms.Tab: # TAB
+        if event.keyval == Gdk.KEY_Tab: # TAB
             cursor_position = message_buffer.get_insert()
             end_iter = message_buffer.get_iter_at_mark(cursor_position)
             text = message_buffer.get_text(start_iter, end_iter, False).decode(
@@ -2301,7 +2313,7 @@ class GroupchatControl(ChatControlBase):
                 self.nick_hits = [] # clear the hit list
                 list_nick = gajim.contacts.get_nick_list(self.account,
                     self.room_jid)
-                list_nick.sort(key=unicode.lower) # case-insensitive sort
+                list_nick.sort(key=str.lower) # case-insensitive sort
                 if begin == '':
                     # empty message, show lasts nicks that highlighted us first
                     for nick in self.attention_list:
@@ -2373,7 +2385,7 @@ class GroupchatControl(ChatControlBase):
             self.last_key_tabs = False
 
     def on_list_treeview_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             selection = widget.get_selection()
             iter_ = selection.get_selected()[1]
             if iter_:
@@ -2413,7 +2425,7 @@ class GroupchatControl(ChatControlBase):
         """
         Make contact's popup menu
         """
-        nick = self.model[iter_][C_NICK].decode('utf-8')
+        nick = self.model[iter_][C_NICK]
         c = gajim.contacts.get_gc_contact(self.account, self.room_jid, nick)
         fjid = self.room_jid + '/' + nick
         jid = c.jid
@@ -2498,9 +2510,13 @@ class GroupchatControl(ChatControlBase):
         muc_icon = gtkgui_helpers.load_icon('muc_active')
         if muc_icon:
             item.set_image(muc_icon)
-        if c.jid and c.name != self.nick:
+        if jid and c.name != self.nick:
+            bookmarked = False
+            contact = gajim.contacts.get_contact(self.account, jid, c.resource)
+            if contact and contact.supports(nbxmpp.NS_CONFERENCE):
+                bookmarked=True
             gui_menu_builder.build_invite_submenu(item, ((c, self.account),),
-                ignore_rooms=[self.room_jid])
+                ignore_rooms=[self.room_jid], show_bookmarked=bookmarked)
         else:
             item.set_sensitive(False)
 
@@ -2509,6 +2525,10 @@ class GroupchatControl(ChatControlBase):
         self.handlers[id_] = item
 
         item = xml.get_object('history_menuitem')
+        if gtkgui_helpers.gtk_icon_theme.has_icon('document-open-recent'):
+            img = Gtk.Image()
+            img.set_from_icon_name('document-open-recent', Gtk.IconSize.MENU)
+            item.set_image(img)
         id_ = item.connect('activate', self.on_history, nick)
         self.handlers[id_] = item
 
@@ -2543,7 +2563,7 @@ class GroupchatControl(ChatControlBase):
         pixbuf = gtkgui_helpers.get_icon_pixmap('document-send', quiet=True)
         if not pixbuf:
             pixbuf = gtkgui_helpers.get_icon_pixmap('gajim-upload')
-        img = gtk.image_new_from_pixbuf(pixbuf)
+        img = Gtk.Image.new_from_pixbuf(pixbuf)
         item.set_image(img)
 
         if not c.resource:
@@ -2555,7 +2575,8 @@ class GroupchatControl(ChatControlBase):
         # show the popup now!
         menu = xml.get_object('gc_occupants_menu')
         menu.show_all()
-        menu.popup(None, None, None, event.button, event.time)
+        menu.attach_to_widget(gajim.interface.roster.window, None)
+        menu.popup(None, None, None, None, event.button, event.time)
 
     def _start_private_message(self, nick):
         gc_c = gajim.contacts.get_gc_contact(self.account, self.room_jid, nick)
@@ -2575,13 +2596,13 @@ class GroupchatControl(ChatControlBase):
         When an iter is activated (dubblick or single click if gnome is set this
         way
         """
-        if len(path) == 1: # It's a group
+        if path.get_depth() == 1: # It's a group
             if (widget.row_expanded(path)):
                 widget.collapse_row(path)
             else:
                 widget.expand_row(path, False)
         else: # We want to send a private message
-            nick = self.model[path][C_NICK].decode('utf-8')
+            nick = self.model[path][C_NICK]
             self._start_private_message(nick)
 
     def on_list_treeview_row_activated(self, widget, path, col=0):
@@ -2606,25 +2627,25 @@ class GroupchatControl(ChatControlBase):
         if event.button == 3: # right click
             widget.get_selection().select_path(path)
             iter_ = self.model.get_iter(path)
-            if len(path) == 2:
+            if path.get_depth() == 2:
                 self.mk_menu(event, iter_)
             return True
 
         elif event.button == 2: # middle click
             widget.get_selection().select_path(path)
             iter_ = self.model.get_iter(path)
-            if len(path) == 2:
-                nick = self.model[iter_][C_NICK].decode('utf-8')
+            if path.get_depth() == 2:
+                nick = self.model[iter_][C_NICK]
                 self._start_private_message(nick)
             return True
 
         elif event.button == 1: # left click
-            if gajim.single_click and not event.state & gtk.gdk.SHIFT_MASK:
+            if gajim.single_click and not event.get_state() & Gdk.ModifierType.SHIFT_MASK:
                 self.on_row_activated(widget, path)
                 return True
             else:
                 iter_ = self.model.get_iter(path)
-                nick = self.model[iter_][C_NICK].decode('utf-8')
+                nick = self.model[iter_][C_NICK]
                 if not nick in gajim.contacts.get_nick_list(self.account,
                 self.room_jid):
                     # it's a group
@@ -2633,7 +2654,7 @@ class GroupchatControl(ChatControlBase):
                             widget.collapse_row(path)
                         else:
                             widget.expand_row(path, False)
-                elif event.state & gtk.gdk.SHIFT_MASK:
+                elif event.get_state() & Gdk.ModifierType.SHIFT_MASK:
                     self.append_nick_in_msg_textview(self.msg_textview, nick)
                     self.msg_textview.grab_focus()
                     return True
@@ -2667,14 +2688,14 @@ class GroupchatControl(ChatControlBase):
             except Exception:
                 self.tooltip.hide_tooltip()
                 return
-            typ = self.model[iter_][C_TYPE].decode('utf-8')
+            typ = self.model[iter_][C_TYPE]
             if typ == 'contact':
                 account = self.account
 
                 if self.tooltip.timeout == 0 or self.tooltip.id != props[0]:
                     self.tooltip.id = row
-                    nick = self.model[iter_][C_NICK].decode('utf-8')
-                    self.tooltip.timeout = gobject.timeout_add(500,
+                    nick = self.model[iter_][C_NICK]
+                    self.tooltip.timeout = GLib.timeout_add(500,
                         self.show_tooltip, gajim.contacts.get_gc_contact(
                         account, self.room_jid, nick))
 
@@ -2685,16 +2706,18 @@ class GroupchatControl(ChatControlBase):
                 self.tooltip.hide_tooltip()
 
     def show_tooltip(self, contact):
-        if not self.list_treeview.window:
+        if not self.list_treeview.get_window():
             # control has been destroyed since tooltip was requested
             return
-        pointer = self.list_treeview.get_pointer()
-        props = self.list_treeview.get_path_at_pos(pointer[0], pointer[1])
+        w = self.list_treeview.get_window()
+        device = w.get_display().get_device_manager().get_client_pointer()
+        pointer = w.get_device_position(device)
+        props = self.list_treeview.get_path_at_pos(pointer[1], pointer[2])
         # check if the current pointer is at the same path
         # as it was before setting the timeout
         if props and self.tooltip.id == props[0]:
             rect = self.list_treeview.get_cell_area(props[0], props[1])
-            position = self.list_treeview.window.get_origin()
+            position = w.get_origin()[1:]
             self.tooltip.show_tooltip(contact, rect.height,
                 position[1] + rect.y)
         else:
@@ -2812,8 +2835,9 @@ class GroupchatControl(ChatControlBase):
         if fjid in connection.blocked_contacts:
             return
         max_order = connection.get_max_blocked_list_order()
-        new_rule = {'order': str(max_order + 1), 'type': u'jid', 'action': u'deny',
-            'value' : fjid, 'child': [u'message', u'iq', u'presence-out']}
+        new_rule = {'order': str(max_order + 1), 'type': 'jid',
+            'action': 'deny', 'value' : fjid, 'child': ['message', 'iq',
+            'presence-out']}
         connection.blocked_list.append(new_rule)
         connection.blocked_contacts.append(fjid)
         self.draw_contact(nick)
diff --git a/src/groups.py b/src/groups.py
index 88d661ff2d882b6477ec3fcb2e0322764a1f28c5..d3bd70d3e2b8c6564563baacb74cdd69f9e8396c 100644
--- a/src/groups.py
+++ b/src/groups.py
@@ -64,7 +64,7 @@ class GroupsPostWindow:
         item.addChild('title', {}, [self.subject_entry.get_text()])
 
         buf = self.contents_textview.get_buffer()
-        item.addChild('content', {}, [buf.get_text(buf.get_start_iter(), buf.get_end_iter())])
+        item.addChild('content', {}, [buf.get_text(buf.get_start_iter(), buf.get_end_iter(), True)])
 
         # publish it to node
         gajim.connections[self.account].send_pb_publish(self.servicejid, self.groupid, item, '0')
diff --git a/src/gtkexcepthook.py b/src/gtkexcepthook.py
index 45dfa94e7a8807798b9f5bab0075555d116d83d0..d448058d9f80562f1d491c09958db219be1b57ad 100644
--- a/src/gtkexcepthook.py
+++ b/src/gtkexcepthook.py
@@ -25,12 +25,13 @@ import os
 import traceback
 import threading
 
-import gtk
-import pango
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import Pango
 from common import i18n # installs _() function
-import dialogs
+from dialogs import HigDialog
 
-from cStringIO import StringIO
+from io import StringIO
 from common import helpers
 
 _exception_in_progress = threading.Lock()
@@ -42,7 +43,7 @@ def _info(type_, value, tb):
         _excepthook_save(type_, value, tb)
         return
 
-    dialog = dialogs.HigDialog(None, gtk.MESSAGE_WARNING, gtk.BUTTONS_NONE,
+    dialog = HigDialog(None, Gtk.MessageType.WARNING, Gtk.ButtonsType.NONE,
                             _('A programming error has been detected'),
                             _('It probably is not fatal, but should be reported '
                             'to the developers nonetheless.'))
@@ -50,20 +51,20 @@ def _info(type_, value, tb):
     dialog.set_modal(False)
     #FIXME: add icon to this button
     RESPONSE_REPORT_BUG = 42
-    dialog.add_buttons(gtk.STOCK_CLOSE, gtk.BUTTONS_CLOSE,
+    dialog.add_buttons(Gtk.STOCK_CLOSE, Gtk.ButtonsType.CLOSE,
             _('_Report Bug'), RESPONSE_REPORT_BUG)
     report_button = dialog.action_area.get_children()[0] # right to left
     report_button.grab_focus()
 
     # Details
-    textview = gtk.TextView()
+    textview = Gtk.TextView()
     textview.set_editable(False)
-    textview.modify_font(pango.FontDescription('Monospace'))
-    sw = gtk.ScrolledWindow()
-    sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+    textview.override_font(Pango.FontDescription('Monospace'))
+    sw = Gtk.ScrolledWindow()
+    sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
     sw.add(textview)
-    frame = gtk.Frame()
-    frame.set_shadow_type(gtk.SHADOW_IN)
+    frame = Gtk.Frame()
+    frame.set_shadow_type(Gtk.ShadowType.IN)
     frame.add(sw)
     frame.set_border_width(6)
     textbuffer = textview.get_buffer()
@@ -71,15 +72,15 @@ def _info(type_, value, tb):
     traceback.print_exception(type_, value, tb, None, trace)
     textbuffer.set_text(trace.getvalue())
     textview.set_size_request(
-            gtk.gdk.screen_width() / 3,
-            gtk.gdk.screen_height() / 4)
-    expander = gtk.Expander(_('Details'))
+            Gdk.Screen.width() / 3,
+            Gdk.Screen.height() / 4)
+    expander = Gtk.Expander(label=_('Details'))
     expander.add(frame)
-    dialog.vbox.add(expander)
+    dialog.vbox.pack_start(expander, True, True, 0)
 
     dialog.set_resizable(True)
     # on expand the details the dialog remains centered on screen
-    dialog.set_position(gtk.WIN_POS_CENTER_ALWAYS)
+    dialog.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
 
     def on_dialog_response(dialog, response):
         if response == RESPONSE_REPORT_BUG:
diff --git a/src/gtkgui_helpers.py b/src/gtkgui_helpers.py
index 17b9f34be09d39a0f1a8c74cf6ef67341d577093..240666b3c94d2d5cf44cd151876256890303aabb 100644
--- a/src/gtkgui_helpers.py
+++ b/src/gtkgui_helpers.py
@@ -28,26 +28,29 @@
 ##
 
 import xml.sax.saxutils
-import gtk
-import glib
-import gobject
-import pango
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository import GObject
+from gi.repository import Pango
 import os
 import sys
+import importlib
 
 import logging
 log = logging.getLogger('gajim.gtkgui_helpers')
 
 from common import i18n
 from common import gajim
+from common import pep
 
-gtk_icon_theme = gtk.icon_theme_get_default()
+gtk_icon_theme = Gtk.IconTheme.get_default()
 gtk_icon_theme.append_search_path(gajim.ICONS_DIR)
 
 def get_icon_pixmap(icon_name, size=16, quiet=False):
     try:
         return gtk_icon_theme.load_icon(icon_name, size, 0)
-    except gobject.GError, e:
+    except GObject.GError as e:
         if not quiet:
             log.error('Unable to load icon %s: %s' % (icon_name, str(e)))
 
@@ -59,7 +62,7 @@ def get_icon_path(icon_name, size=16):
             return ""
         else:
             return icon_info.get_filename()
-    except gobject.GError, e:
+    except GObject.GError as e:
         log.error("Unable to find icon %s: %s" % (icon_name, str(e)))
 
 import vcard
@@ -77,11 +80,11 @@ if os.name == 'nt':
 
 from common import helpers
 
-screen_w = gtk.gdk.screen_width()
-screen_h = gtk.gdk.screen_height()
+screen_w = Gdk.Screen.width()
+screen_h = Gdk.Screen.height()
 
 def add_image_to_menuitem(menuitem, icon_name):
-    img = gtk.Image()
+    img = Gtk.Image()
     path_img = get_icon_path(icon_name)
     img.set_from_file(path_img)
     menuitem.set_image(img)
@@ -92,7 +95,7 @@ def add_image_to_button(button, icon_name):
 GUI_DIR = os.path.join(gajim.DATA_DIR, 'gui')
 def get_gtk_builder(file_name, widget=None):
     file_path = os.path.join(GUI_DIR, file_name)
-    builder = gtk.Builder()
+    builder = Gtk.Builder()
     builder.set_translation_domain(i18n.APP)
     if widget:
         builder.add_objects_from_file(file_path, [widget])
@@ -105,16 +108,13 @@ def get_completion_liststore(entry):
     Create a completion model for entry widget completion list consists of
     (Pixbuf, Text) rows
     """
-    completion = gtk.EntryCompletion()
-    liststore = gtk.ListStore(gtk.gdk.Pixbuf, str)
+    completion = Gtk.EntryCompletion()
+    liststore = Gtk.ListStore(GdkPixbuf.Pixbuf, str)
 
-    render_pixbuf = gtk.CellRendererPixbuf()
-    completion.pack_start(render_pixbuf, expand = False)
+    render_pixbuf = Gtk.CellRendererPixbuf()
+    completion.pack_start(render_pixbuf, False)
     completion.add_attribute(render_pixbuf, 'pixbuf', 0)
 
-    render_text = gtk.CellRendererText()
-    completion.pack_start(render_text, expand = True)
-    completion.add_attribute(render_text, 'text', 1)
     completion.set_property('text_column', 1)
     completion.set_model(liststore)
     entry.set_completion(completion)
@@ -125,23 +125,28 @@ def popup_emoticons_under_button(menu, button, parent_win):
     """
     Popup the emoticons menu under button, which is in parent_win
     """
-    window_x1, window_y1 = parent_win.get_origin()
-    def position_menu_under_button(menu):
+    window_x1, window_y1 = parent_win.get_origin()[1:]
+
+    def position_menu_under_button(menu, data):
         # inline function, which will not keep refs, when used as CB
-        button_x, button_y = button.allocation.x, button.allocation.y
+        alloc = button.get_allocation()
+        button_x, button_y = alloc.x, alloc.y
+        translated_coordinates = button.translate_coordinates(
+            gajim.interface.roster.window, 0, 0)
+        if translated_coordinates:
+            button_x, button_y = translated_coordinates
 
         # now convert them to X11-relative
         window_x, window_y = window_x1, window_y1
         x = window_x + button_x
         y = window_y + button_y
 
-        menu_height = menu.size_request()[1]
+        menu_height = menu.size_request().height
 
         ## should we pop down or up?
-        if (y + button.allocation.height + menu_height
-                < gtk.gdk.screen_height()):
+        if (y + alloc.height + menu_height < Gdk.Screen.height()):
             # now move the menu below the button
-            y += button.allocation.height
+            y += alloc.height
         else:
             # now move the menu above the button
             y -= menu_height
@@ -150,21 +155,21 @@ def popup_emoticons_under_button(menu, button, parent_win):
         push_in = True
         return (x, y, push_in)
 
-    menu.popup(None, None, position_menu_under_button, 1, 0)
+    menu.popup(None, None, position_menu_under_button, None, 1, 0)
 
 def get_theme_font_for_option(theme, option):
     """
     Return string description of the font, stored in theme preferences
     """
     font_name = gajim.config.get_per('themes', theme, option)
-    font_desc = pango.FontDescription()
+    font_desc = Pango.FontDescription()
     font_prop_str =  gajim.config.get_per('themes', theme, option + 'attrs')
     if font_prop_str:
         if font_prop_str.find('B') != -1:
-            font_desc.set_weight(pango.WEIGHT_BOLD)
+            font_desc.set_weight(Pango.Weight.BOLD)
         if font_prop_str.find('I') != -1:
-            font_desc.set_style(pango.STYLE_ITALIC)
-    fd = pango.FontDescription(font_name)
+            font_desc.set_style(Pango.Style.ITALIC)
+    fd = Pango.FontDescription(font_name)
     fd.merge(font_desc, True)
     return fd.to_string()
 
@@ -174,11 +179,11 @@ def get_default_font():
     Xfce and last KDE it returns None on failure or else a string 'Font Size'
     """
     try:
-        from gconf import client_get_default
-        client = client_get_default()
+        from gi.repository import GConf
+        client = GConf.Client.get_default()
         value = client.get_string("/desktop/gnome/interface/font_name")
         return value.decode("utf8")
-    except ImportError, glib.GError:
+    except ImportError:
         pass
 
     # try to get Xfce default font
@@ -189,7 +194,7 @@ def get_default_font():
     if xdg_config_home == '':
         xdg_config_home = os.path.expanduser('~/.config') # default
     xfce_config_file = os.path.join(xdg_config_home,
-        'xfce4/mcs_settings/gtk.xml')
+        'xfce4/mcs_settings/Gtk.xml')
 
     kde_config_file = os.path.expanduser('~/.kde/share/config/kdeglobals')
 
@@ -198,11 +203,11 @@ def get_default_font():
             for line in open(xfce_config_file):
                 if line.find('name="Gtk/FontName"') != -1:
                     start = line.find('value="') + 7
-                    return line[start:line.find('"', start)].decode('utf-8')
+                    return line[start:line.find('"', start)]
         except Exception:
             #we talk about file
-            print >> sys.stderr, _('Error: cannot open %s for reading') % \
-                xfce_config_file
+            print(_('Error: cannot open %s for reading') % xfce_config_file,
+                file=sys.stderr)
 
     elif os.path.exists(kde_config_file):
         try:
@@ -214,11 +219,11 @@ def get_default_font():
                     font_name = values[0]
                     font_size = values[1]
                     font_string = '%s %s' % (font_name, font_size) # Verdana 9
-                    return font_string.decode('utf-8')
+                    return font_string
         except Exception:
             #we talk about file
-            print >> sys.stderr, _('Error: cannot open %s for reading') % \
-                kde_config_file
+            print(_('Error: cannot open %s for reading') % kde_config_file,
+                file=sys.stderr)
 
     return None
 
@@ -319,7 +324,7 @@ class HashDigest:
 
     def __str__(self):
         prettydigest = ''
-        for i in xrange(0, len(self.digest), 2):
+        for i in list(range(0, len(self.digest), 2)):
             prettydigest += self.digest[i:i + 2] + ':'
         return prettydigest[:-1]
 
@@ -345,11 +350,11 @@ def parse_server_xml(path_to_file):
         xml.sax.parse(path_to_file, handler)
         return handler.servers
     # handle exception if unable to open file
-    except IOError, message:
-        print >> sys.stderr, _('Error reading file:'), message
+    except IOError as message:
+        print(_('Error reading file:') + str(message), file=sys.stderr)
     # handle exception parsing file
-    except xml.sax.SAXParseException, message:
-        print >> sys.stderr, _('Error parsing file:'), message
+    except xml.sax.SAXParseException as message:
+        print(_('Error parsing file:') + str(message), file=sys.stderr)
 
 def set_unset_urgency_hint(window, unread_messages_no):
     """
@@ -387,12 +392,12 @@ def get_abspath_for_script(scriptname, want_type = False):
                 script += '\nexec python -OOt gajim.py $0 $@\n'
                 f.write(script)
                 f.close()
-                os.chmod(path_to_script, 0700)
+                os.chmod(path_to_script, 0o700)
             except OSError: # do not traceback (could be a permission problem)
                 #we talk about a file here
                 s = _('Could not write to %s. Session Management support will '
                     'not work') % path_to_script
-                print >> sys.stderr, s
+                print(s, file=sys.stderr)
 
     else: # normal user (not svn user)
         type_ = 'install'
@@ -407,15 +412,15 @@ def get_abspath_for_script(scriptname, want_type = False):
 
 def get_pixbuf_from_data(file_data, want_type = False):
     """
-    Get image data and returns gtk.gdk.Pixbuf if want_type is True it also
+    Get image data and returns GdkPixbuf.Pixbuf if want_type is True it also
     returns 'jpeg', 'png' etc
     """
-    pixbufloader = gtk.gdk.PixbufLoader()
+    pixbufloader = GdkPixbuf.PixbufLoader()
     try:
         pixbufloader.write(file_data)
         pixbufloader.close()
         pixbuf = pixbufloader.get_pixbuf()
-    except gobject.GError: # 'unknown image format'
+    except GObject.GError: # 'unknown image format'
         pixbufloader.close()
         pixbuf = None
         if want_type:
@@ -424,15 +429,17 @@ def get_pixbuf_from_data(file_data, want_type = False):
             return None
 
     if want_type:
-        typ = pixbufloader.get_format()['name']
+        typ = pixbufloader.get_format().get_name()
         return pixbuf, typ
     else:
         return pixbuf
 
 def get_invisible_cursor():
-    pixmap = gtk.gdk.Pixmap(None, 1, 1, 1)
-    color = gtk.gdk.Color()
-    cursor = gtk.gdk.Cursor(pixmap, pixmap, color, color, 0, 0)
+    import cairo
+    s = cairo.ImageSurface(cairo.FORMAT_A1, 1, 1)
+    cursor_pixbuf = Gdk.pixbuf_get_from_surface(s, 0, 0, 1, 1)
+    cursor = Gdk.Cursor.new_from_pixbuf(Gdk.Display.get_default(), \
+        cursor_pixbuf, 0, 0)
     return cursor
 
 def get_current_desktop(window):
@@ -458,10 +465,16 @@ def possibly_move_window_in_current_desktop(window):
 
     NOTE: Window is a GDK window.
     """
+    #TODO: property_get doesn't work:
+    #prop_atom = Gdk.Atom.intern('_NET_CURRENT_DESKTOP', False)
+    #type_atom = Gdk.Atom.intern("CARDINAL", False)
+    #w = Gdk.Screen.get_default().get_root_window()
+    #Gdk.property_get(w, prop_atom, type_atom, 0, 9999, False)
+    return False
     if os.name == 'nt':
         return False
 
-    root_window = gtk.gdk.screen_get_default().get_root_window()
+    root_window = Gdk.Screen.get_default().get_root_window()
     # current user's vd
     current_virtual_desktop_no = get_current_desktop(root_window)
 
@@ -512,25 +525,24 @@ def file_is_locked(path_to_file):
 
 def get_fade_color(treeview, selected, focused):
     """
-    Get a gdk color that is between foreground and background in 0.3
+    Get a gdk RGBA color that is between foreground and background in 0.3
     0.7 respectively colors of the cell for the given treeview
     """
-    style = treeview.style
+    context = treeview.get_style_context()
     if selected:
         if focused: # is the window focused?
-            state = gtk.STATE_SELECTED
+            state = Gtk.StateFlags.SELECTED
         else: # is it not? NOTE: many gtk themes change bg on this
-            state = gtk.STATE_ACTIVE
+            state = Gtk.StateFlags.ACTIVE
     else:
-        state = gtk.STATE_NORMAL
-    bg = style.base[state]
-    fg = style.text[state]
+        state = Gtk.StateFlags.NORMAL
+    bg = context.get_background_color(state)
+    fg = context.get_color(state)
 
     p = 0.3 # background
     q = 0.7 # foreground # p + q should do 1.0
-    return gtk.gdk.Color(int(bg.red*p + fg.red*q),
-                                    int(bg.green*p + fg.green*q),
-                                    int(bg.blue*p + fg.blue*q))
+    return Gdk.RGBA(bg.red*p + fg.red*q, bg.green*p + fg.green*q,
+        bg.blue*p + fg.blue*q)
 
 def get_scaled_pixbuf(pixbuf, kind):
     """
@@ -558,7 +570,7 @@ def get_scaled_pixbuf(pixbuf, kind):
     else:
         h = height
         w = int(h * ratio)
-    scaled_buf = pixbuf.scale_simple(w, h, gtk.gdk.INTERP_HYPER)
+    scaled_buf = pixbuf.scale_simple(w, h, GdkPixbuf.InterpType.HYPER)
     return scaled_buf
 
 def get_avatar_pixbuf_from_cache(fjid, use_local=True):
@@ -604,7 +616,7 @@ def get_avatar_pixbuf_from_cache(fjid, use_local=True):
     if not os.path.isfile(path):
         return 'ask'
 
-    vcard_dict = gajim.connections.values()[0].get_cached_vcard(fjid,
+    vcard_dict = list(gajim.connections.values())[0].get_cached_vcard(fjid,
             is_groupchat_contact)
     if not vcard_dict: # This can happen if cached vcard is too old
         return 'ask'
@@ -631,7 +643,8 @@ def make_color_string(color):
     """
     col = '#'
     for i in ('red', 'green', 'blue'):
-        h = hex(getattr(color, i) / (16*16)).split('x')[1]
+        h = hex(int(getattr(color, i) / (16*16)))
+        h = h.split('x')[1]
         if len(h) == 1:
             h = '0' + h
         col += h
@@ -642,28 +655,6 @@ def make_pixbuf_grayscale(pixbuf):
     pixbuf.saturate_and_pixelate(pixbuf2, 0.0, False)
     return pixbuf2
 
-def get_path_to_generic_or_avatar(generic, jid = None, suffix = None):
-    """
-    Choose between avatar image and default image
-
-    Returns full path to the avatar image if it exists, otherwise returns full
-    path to the image.  generic must be with extension and suffix without
-    """
-    if jid:
-        # we want an avatar
-        puny_jid = helpers.sanitize_filename(jid)
-        path_to_file = os.path.join(gajim.AVATAR_PATH, puny_jid) + suffix
-        path_to_local_file = path_to_file + '_local'
-        for extension in ('.png', '.jpeg'):
-            path_to_local_file_full = path_to_local_file + extension
-            if os.path.exists(path_to_local_file_full):
-                return path_to_local_file_full
-        for extension in ('.png', '.jpeg'):
-            path_to_file_full = path_to_file + extension
-            if os.path.exists(path_to_file_full):
-                return path_to_file_full
-    return os.path.abspath(generic)
-
 def decode_filechooser_file_paths(file_paths):
     """
     Decode as UTF-8 under Windows and ask sys.getfilesystemencoding() in POSIX
@@ -681,7 +672,7 @@ def decode_filechooser_file_paths(file_paths):
                 file_path = file_path.decode(sys.getfilesystemencoding())
             except Exception:
                 try:
-                    file_path = file_path.decode('utf-8')
+                    file_path = file_path
                 except Exception:
                     pass
             file_paths_list.append(file_path)
@@ -744,9 +735,9 @@ Description=xmpp
             gajim.config.set('check_if_gajim_is_default', False)
 
     try:
-        import gconf
+        GConf = importlib.import_module('gi.repository.GConf')
         # in try because daemon may not be there
-        client = gconf.client_get_default()
+        client = GConf.Client.get_default()
     except Exception:
         return
 
@@ -787,7 +778,7 @@ def get_state_image_from_file_path_show(file_path, show):
     files = []
     files.append(os.path.join(file_path, state_file + '.png'))
     files.append(os.path.join(file_path, state_file + '.gif'))
-    image = gtk.Image()
+    image = Gtk.Image()
     image.set_from_pixbuf(None)
     for file_ in files:
         if os.path.exists(file_):
@@ -800,7 +791,7 @@ def get_possible_button_event(event):
     """
     Mouse or keyboard caused the event?
     """
-    if event.type == gtk.gdk.KEY_PRESS:
+    if event.type == Gdk.EventType.KEY_PRESS:
         return 0 # no event.button so pass 0
     # BUTTON_PRESS event, so pass event.button
     return event.button
@@ -825,14 +816,14 @@ def on_avatar_save_as_menuitem_activate(widget, jid, default_name=''):
 
         # Save image
         try:
-            pixbuf.save(file_path, image_format)
-        except glib.GError, e:
+            pixbuf.savev(file_path, image_format, [], [])
+        except Exception as e:
             log.debug('Error saving avatar: %s' % str(e))
             if os.path.exists(file_path):
                 os.remove(file_path)
             new_file_path = '.'.join(file_path.split('.')[:-1]) + '.jpeg'
             def on_ok(file_path, pixbuf):
-                pixbuf.save(file_path, 'jpeg')
+                pixbuf.savev(file_path, 'jpeg', [], [])
             dialogs.ConfirmationDialog(_('Extension not supported'),
                 _('Image cannot be saved in %(type)s format. Save as '
                 '%(new_filename)s?') % {'type': image_format,
@@ -854,8 +845,8 @@ def on_avatar_save_as_menuitem_activate(widget, jid, default_name=''):
                 return
             dialog2 = dialogs.FTOverwriteConfirmationDialog(
                 _('This file already exists'), _('What do you want to do?'),
-                propose_resume=False, on_response=(on_continue, file_path))
-            dialog2.set_transient_for(dialog)
+                propose_resume=False, on_response=(on_continue, file_path),
+                transient_for=dialog)
             dialog2.set_destroy_with_parent(True)
         else:
             dirname = os.path.dirname(file_path)
@@ -871,9 +862,9 @@ def on_avatar_save_as_menuitem_activate(widget, jid, default_name=''):
         dialog.destroy()
 
     dialog = dialogs.FileChooserDialog(title_text=_('Save Image as...'),
-        action=gtk.FILE_CHOOSER_ACTION_SAVE, buttons=(gtk.STOCK_CANCEL,
-        gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK),
-        default_response=gtk.RESPONSE_OK,
+        action=Gtk.FileChooserAction.SAVE, buttons=(Gtk.STOCK_CANCEL,
+        Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.OK),
+        default_response=Gtk.ResponseType.OK,
         current_folder=gajim.config.get('last_save_dir'), on_response_ok=on_ok,
         on_response_cancel=on_cancel)
 
@@ -882,15 +873,15 @@ def on_avatar_save_as_menuitem_activate(widget, jid, default_name=''):
         on_cancel(widget))
 
 def on_bm_header_changed_state(widget, event):
-    widget.set_state(gtk.STATE_NORMAL) #do not allow selected_state
+    widget.set_state(Gtk.StateType.NORMAL) #do not allow selected_state
 
 def create_combobox(value_list, selected_value = None):
     """
     Value_list is [(label1, value1)]
     """
-    liststore = gtk.ListStore(str, str)
-    combobox = gtk.ComboBox(liststore)
-    cell = gtk.CellRendererText()
+    liststore = Gtk.ListStore(str, str)
+    combobox = Gtk.ComboBox.new_with_model(liststore)
+    cell = Gtk.CellRendererText()
     combobox.pack_start(cell, True)
     combobox.add_attribute(cell, 'text', 0)
     i = -1
@@ -907,14 +898,14 @@ def create_list_multi(value_list, selected_values=None):
     """
     Value_list is [(label1, value1)]
     """
-    liststore = gtk.ListStore(str, str)
-    treeview = gtk.TreeView(liststore)
-    treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
+    liststore = Gtk.ListStore(str, str)
+    treeview = Gtk.TreeView.new_with_model(liststore)
+    treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
     treeview.set_headers_visible(False)
-    col = gtk.TreeViewColumn()
+    col = Gtk.TreeViewColumn()
     treeview.append_column(col)
-    cell = gtk.CellRendererText()
-    col.pack_start(cell, True)
+    cell = Gtk.CellRendererText()
+    col.pack_start(cell, True, True, 0)
     col.set_attributes(cell, text=0)
     for value in value_list:
         iter = liststore.append(value)
@@ -971,6 +962,44 @@ def load_activity_icon(category, activity = None):
     icon_list = _load_icon_list([activity], path)
     return icon_list[activity]
 
+def get_pep_as_pixbuf(pep_class):
+    if isinstance(pep_class, pep.UserMoodPEP):
+        assert not pep_class._retracted
+        received_mood = pep_class._pep_specific_data['mood']
+        mood = received_mood if received_mood in pep.MOODS else 'unknown'
+        pixbuf = load_mood_icon(mood).get_pixbuf()
+        return pixbuf
+    elif isinstance(pep_class, pep.UserTunePEP):
+        icon = get_icon_pixmap('audio-x-generic', quiet=True)
+        if not icon:
+            path = os.path.join(gajim.DATA_DIR, 'emoticons', 'static',
+                'music.png')
+            return GdkPixbuf.Pixbuf.new_from_file(path)
+        return icon
+    elif isinstance(pep_class, pep.UserActivityPEP):
+        assert not pep_class._retracted
+        pep_ = pep_class._pep_specific_data
+        activity = pep_['activity']
+
+        has_known_activity = activity in pep.ACTIVITIES
+        has_known_subactivity = (has_known_activity  and ('subactivity' in pep_)
+                and (pep_['subactivity'] in pep.ACTIVITIES[activity]))
+
+        if has_known_activity:
+            if has_known_subactivity:
+                subactivity = pep_['subactivity']
+                return load_activity_icon(activity, subactivity).get_pixbuf()
+            else:
+                return load_activity_icon(activity).get_pixbuf()
+        else:
+            return load_activity_icon('unknown').get_pixbuf()
+    elif isinstance(pep_class, pep.UserLocationPEP):
+        icon = get_icon_pixmap('applications-internet', quiet=True)
+        if not icon:
+            icon = get_icon_pixmap('gajim-earth')
+        return icon
+    return None
+
 def load_icons_meta():
     """
     Load and return  - AND + small icons to put on top left of an icon for meta
@@ -983,7 +1012,7 @@ def load_icons_meta():
     if not os.path.isfile(path_opened):
         path_opened = os.path.join(path, 'opened.png')
     if os.path.isfile(path_opened):
-        pixo = gtk.gdk.pixbuf_new_from_file(path_opened)
+        pixo = GdkPixbuf.Pixbuf.new_from_file(path_opened)
     else:
         pixo = None
     # Same thing for closed
@@ -991,7 +1020,7 @@ def load_icons_meta():
     if not os.path.isfile(path_closed):
         path_closed = os.path.join(path, 'closed.png')
     if os.path.isfile(path_closed):
-        pixc = gtk.gdk.pixbuf_new_from_file(path_closed)
+        pixc = GdkPixbuf.Pixbuf.new_from_file(path_closed)
     else:
         pixc = None
     return pixo, pixc
@@ -1008,19 +1037,19 @@ def _load_icon_list(icons_list, path, pixbuf2 = None):
         files = []
         files.append(path + icon_file + '.gif')
         files.append(path + icon_file + '.png')
-        image = gtk.Image()
+        image = Gtk.Image()
         image.show()
         imgs[icon] = image
         for file_ in files: # loop seeking for either gif or png
             if os.path.exists(file_):
                 image.set_from_file(file_)
-                if pixbuf2 and image.get_storage_type() == gtk.IMAGE_PIXBUF:
+                if pixbuf2 and image.get_storage_type() == Gtk.ImageType.PIXBUF:
                     # add pixbuf2 on top-left corner of image
                     pixbuf1 = image.get_pixbuf()
                     pixbuf2.composite(pixbuf1, 0, 0,
                             pixbuf2.get_property('width'),
                             pixbuf2.get_property('height'), 0, 0, 1.0, 1.0,
-                            gtk.gdk.INTERP_NEAREST, 255)
+                            GdkPixbuf.InterpType.NEAREST, 255)
                     image.set_from_pixbuf(pixbuf1)
                 break
     return imgs
@@ -1059,21 +1088,21 @@ def make_jabber_state_images():
     else:
         # Resize 32x32 icons to 24x24
         for each in gajim.interface.jabber_state_images['32']:
-            img = gtk.Image()
+            img = Gtk.Image()
             pix = gajim.interface.jabber_state_images['32'][each]
             pix_type = pix.get_storage_type()
-            if pix_type == gtk.IMAGE_ANIMATION:
+            if pix_type == Gtk.ImageType.ANIMATION:
                 animation = pix.get_animation()
                 pixbuf = animation.get_static_image()
-            elif pix_type == gtk.IMAGE_EMPTY:
+            elif pix_type == Gtk.ImageType.EMPTY:
                 pix = gajim.interface.jabber_state_images['16'][each]
                 pix_16_type = pix.get_storage_type()
-                if pix_16_type == gtk.IMAGE_ANIMATION:
+                if pix_16_type == Gtk.ImageType.ANIMATION:
                     animation = pix.get_animation()
                     pixbuf = animation.get_static_image()
             else:
                 pixbuf = pix.get_pixbuf()
-            scaled_pix = pixbuf.scale_simple(24, 24, gtk.gdk.INTERP_BILINEAR)
+            scaled_pix = pixbuf.scale_simple(24, 24, GdkPixbuf.InterpType.BILINEAR)
             img.set_from_pixbuf(scaled_pix)
             gajim.interface.jabber_state_images['24'][each] = img
 
@@ -1086,11 +1115,11 @@ def label_set_autowrap(widget):
     Make labels automatically re-wrap if their containers are resized.
     Accepts label or container widgets
     """
-    if isinstance (widget, gtk.Container):
+    if isinstance (widget, Gtk.Container):
         children = widget.get_children()
-        for i in xrange (len (children)):
+        for i in list(range (len (children))):
             label_set_autowrap(children[i])
-    elif isinstance(widget, gtk.Label):
+    elif isinstance(widget, Gtk.Label):
         widget.set_line_wrap(True)
         widget.connect_after('size-allocate', __label_size_allocate)
 
@@ -1102,13 +1131,13 @@ def __label_size_allocate(widget, allocation):
 
     lw_old, lh_old = layout.get_size()
     # fixed width labels
-    if lw_old/pango.SCALE == allocation.width:
+    if lw_old/Pango.SCALE == allocation.width:
         return
 
-    # set wrap width to the pango.Layout of the labels ###
+    # set wrap width to the Pango.Layout of the labels ###
     widget.set_alignment(0.0, 0.0)
-    layout.set_width (allocation.width * pango.SCALE)
+    layout.set_width (allocation.width * Pango.SCALE)
     lh = layout.get_size()[1]
 
     if lh_old != lh:
-        widget.set_size_request (-1, lh / pango.SCALE)
+        widget.set_size_request (-1, lh / Pango.SCALE)
diff --git a/src/gtkspell.py b/src/gtkspell.py
index aa1adaec7d5845d3e8ff616cdf811c350ad6cae1..9d334c5296c101df5a5a40c54d37e8b08e88f76c 100644
--- a/src/gtkspell.py
+++ b/src/gtkspell.py
@@ -19,7 +19,7 @@
 import ctypes
 import ctypes.util
 
-import gtk
+from gi.repository import Gtk
 
 
 gboolean = ctypes.c_int
@@ -63,14 +63,15 @@ def ensure_attached(func):
 class Spell(object):
 
     def __init__(self, textview, language=None, create=True):
-        if not isinstance(textview, gtk.TextView):
-            raise TypeError("Textview must be derived from gtk.TextView")
+        if not isinstance(textview, Gtk.TextView):
+            raise TypeError("Textview must be derived from Gtk.TextView")
         tv = PyGObject.from_address(id(textview)).obj
         spell = libgtkspell.gtkspell_get_from_text_view(tv)
         if create:
             if spell:
                 raise RuntimeError("Textview has already a Spell obj attached")
-            self.spell = libgtkspell.gtkspell_new_attach(tv, language, None)
+            self.spell = libgtkspell.gtkspell_new_attach(tv, language.encode(
+                'utf-8'), None)
             if not self.spell:
                 raise OSError("Unable to attach spell object. "
                               "Language: '%s'" % str(language))
@@ -82,7 +83,8 @@ class Spell(object):
 
     @ensure_attached
     def set_language(self, language):
-        if libgtkspell.gtkspell_set_language(self.spell, language, None) == 0:
+        if libgtkspell.gtkspell_set_language(self.spell, language.encode(
+        'utf-8'), None) == 0:
             raise OSError("Unable to set language '%s'" % str(language))
 
     @ensure_attached
diff --git a/src/gui_interface.py b/src/gui_interface.py
index ef50cd5d6518f637d0c9995f60a89e1a39edec73..63f051f19ee81acc6473391f15cd43e7adda57e5 100644
--- a/src/gui_interface.py
+++ b/src/gui_interface.py
@@ -41,8 +41,9 @@ import time
 import math
 from subprocess import Popen
 
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import GdkPixbuf
+from gi.repository import GLib
 
 from common import i18n
 from common import gajim
@@ -67,7 +68,7 @@ from groupchat_control import PrivateChatControl
 from atom_window import AtomWindow
 from session import ChatControlSession
 
-import common.sleepy
+from common import sleepy
 
 from nbxmpp import idlequeue
 from nbxmpp import Hashes
@@ -93,7 +94,7 @@ import config
 from threading import Thread
 from common import ged
 
-gajimpaths = common.configpaths.gajimpaths
+from common.configpaths import gajimpaths
 config_filename = gajimpaths['CONFIG_FILE']
 
 from common import optparser
@@ -164,7 +165,7 @@ class Interface:
 
     def handle_event_iq_error(self, obj):
         #('ERROR_ANSWER', account, (id_, fjid, errmsg, errcode))
-        if unicode(obj.errcode) in ('400', '403', '406') and obj.id_:
+        if str(obj.errcode) in ('400', '403', '406') and obj.id_:
             # show the error dialog
             ft = self.instances['file_transfers']
             sid = obj.id_
@@ -172,7 +173,7 @@ class Interface:
                 sid = obj.id_[3:]
             file_props = FilesProp.getFileProp(obj.conn.name, sid)
             if file_props :
-                if unicode(obj.errcode) == '400':
+                if str(obj.errcode) == '400':
                     file_props.error = -3
                 else:
                     file_props.error = -4
@@ -181,7 +182,7 @@ class Interface:
                     error_msg=obj.errmsg))
                 obj.conn.disconnect_transfer(file_props)
                 return
-        elif unicode(obj.errcode) == '404':
+        elif str(obj.errcode) == '404':
             sid = obj.id_
             if len(obj.id_) > 3 and obj.id_[2] == '_':
                 sid = obj.id_[3:]
@@ -210,7 +211,7 @@ class Interface:
         #('STATUS', account, show)
         account = obj.conn.name
         if obj.show in ('offline', 'error'):
-            for name in self.instances[account]['online_dialog'].keys():
+            for name in list(self.instances[account]['online_dialog'].keys()):
                 # .keys() is needed to not have a dictionary length changed
                 # during iteration error
                 self.instances[account]['online_dialog'][name].destroy()
@@ -229,8 +230,8 @@ class Interface:
             # we stop blocking notifications of any kind
             # this prevents from getting the roster items as 'just signed in'
             # contacts. 30 seconds should be enough time
-            gobject.timeout_add_seconds(30,
-                self.unblock_signed_in_notifications, account)
+            GLib.timeout_add_seconds(30, self.unblock_signed_in_notifications,
+                account)
 
         if account in self.show_vcard_when_connect and obj.show not in (
         'offline', 'error'):
@@ -370,8 +371,8 @@ class Interface:
             # popup notifications for 30s
             account_jid = account + '/' + jid
             gajim.block_signed_in_notifications[account_jid] = True
-            gobject.timeout_add_seconds(30,
-                self.unblock_signed_in_notifications, account_jid)
+            GLib.timeout_add_seconds(30, self.unblock_signed_in_notifications,
+                account_jid)
 
         highest = gajim.contacts.get_contact_with_highest_priority(account, jid)
         is_highest = (highest and highest.resource == resource)
@@ -449,7 +450,7 @@ class Interface:
         if not obj.session:
             # No session. This can happen when sending a message from
             # gajim-remote
-            log.warn(msg)
+            log.warning(msg)
             return
         obj.session.roster_message(obj.jid, msg, obj.time_, obj.conn.name,
             msg_type='error')
@@ -695,7 +696,7 @@ class Interface:
         #('GPG_ALWAYS_TRUST', account, callback)
         def on_yes(checked):
             if checked:
-                obj.conn.gpg.always_trust = True
+                obj.conn.gpg.always_trust.append(obj.keyID)
             obj.callback(True)
 
         def on_no():
@@ -960,7 +961,7 @@ class Interface:
         ft_win = self.instances['file_transfers']
         if not file_props.hash_:
             # We disn't get the hash, sender probably don't support that
-            jid = unicode(file_props.sender)
+            jid = file_props.sender
             self.popup_ft_result(account, jid, file_props)
             ft_win.set_status(file_props, 'ok')
         h = Hashes()
@@ -972,15 +973,15 @@ class Interface:
         file_.close()
         # If the hash we received and the hash of the file are the same,
         # then the file is not corrupt
-        jid = unicode(file_props.sender)
+        jid = file_props.sender
         if file_props.hash_ == hash_:
-            gobject.idle_add(self.popup_ft_result, account, jid, file_props)
-            gobject.idle_add(ft_win.set_status, file_props, 'ok')
+            GLib.idle_add(self.popup_ft_result, account, jid, file_props)
+            GLib.idle_add(ft_win.set_status, file_props, 'ok')
         else:
             # wrong hash, we need to get the file again!
             file_props.error = -10
-            gobject.idle_add(self.popup_ft_result, account, jid, file_props)
-            gobject.idle_add(ft_win.set_status, file_props, 'hash_error')
+            GLib.idle_add(self.popup_ft_result, account, jid, file_props)
+            GLib.idle_add(ft_win.set_status, file_props, 'hash_error')
         # End jingle session
         if session:
             session.end_session()
@@ -996,15 +997,15 @@ class Interface:
             return
 
         if file_props.type_ == 'r' and file_props.hash_: # we receive a file
+            gajim.socks5queue.remove_receiver(file_props.sid, True, True)
             # we compare hashes
             if file_props.session_type == 'jingle':
                 # Compare hashes in a new thread
                 self.hashThread = Thread(target=self.__compare_hashes,
                     args=(account, file_props))
                 self.hashThread.start()
-            gajim.socks5queue.remove_receiver(file_props.sid, True, True)
         else: # we send a file
-            jid = unicode(file_props.receiver)
+            jid = file_props.receiver
             gajim.socks5queue.remove_sender(file_props.sid, True, True)
             self.popup_ft_result(account, jid, file_props)
 
@@ -1022,6 +1023,9 @@ class Interface:
                     error_msg=_('Error opening file'))
             elif file_props.error == -10:
                 ft.show_hash_error(jid, file_props, account)
+            elif file_props.error == -12:
+                ft.show_stopped(jid, file_props,
+                    error_msg=_('SSL certificate error'))
             return
 
         msg_type = ''
@@ -1051,7 +1055,7 @@ class Interface:
         if file_props is not None:
             if file_props.type_ == 'r':
                 # get the name of the sender, as it is in the roster
-                sender = unicode(file_props.sender).split('/')[0]
+                sender = file_props.sender.split('/')[0]
                 name = gajim.contacts.get_first_contact_from_jid(account,
                     sender).get_shown_name()
                 filename = os.path.basename(file_props.file_name)
@@ -1119,12 +1123,12 @@ class Interface:
         if gajim.config.get('ask_offline_status_on_connection'):
             # Ask offline status in 1 minute so w'are sure we got all online
             # presences
-            gobject.timeout_add_seconds(60, self.ask_offline_status, account)
-        if state != common.sleepy.STATE_UNKNOWN and connected in (2, 3):
+            GLib.timeout_add_seconds(60, self.ask_offline_status, account)
+        if state != sleepy.STATE_UNKNOWN and connected in (2, 3):
             # we go online or free for chat, so we activate auto status
             gajim.sleeper_state[account] = 'online'
-        elif not ((state == common.sleepy.STATE_AWAY and connected == 4) or \
-        (state == common.sleepy.STATE_XA and connected == 5)):
+        elif not ((state == sleepy.STATE_AWAY and connected == 4) or \
+        (state == sleepy.STATE_XA and connected == 5)):
             # If we are autoaway/xa and come back after a disconnection, do
             # nothing
             # Else disable autoaway
@@ -1175,7 +1179,7 @@ class Interface:
         dlg = dialogs.InputDialog(_('Username Conflict'),
             _('Please type a new username for your local account'),
             input_str=obj.alt_name, is_modal=True, ok_handler=on_ok,
-            cancel_handler=on_cancel)
+            cancel_handler=on_cancel, transient_for=self.roster.window)
 
     def handle_event_resource_conflict(self, obj):
         # ('RESOURCE_CONFLICT', account, ())
@@ -1567,7 +1571,7 @@ class Interface:
 
         This is part of rewriting whole events handling system to use GED.
         """
-        for event_name, event_handlers in self.handlers.iteritems():
+        for event_name, event_handlers in self.handlers.items():
             for event_handler in event_handlers:
                 prio = ged.GUI1
                 if type(event_handler) == tuple:
@@ -1688,6 +1692,8 @@ class Interface:
             event = gajim.events.get_first_event(account, fjid, type_)
             if not event:
                 event = gajim.events.get_first_event(account, jid, type_)
+            if not event:
+                return
 
             if type_ == 'printed_pm':
                 ctrl = event.parameters[2]
@@ -1757,7 +1763,7 @@ class Interface:
             self.roster.draw_contact(jid, account)
         if w:
             w.set_active_tab(ctrl)
-            w.window.window.focus(gtk.get_current_event_time())
+            w.window.get_window().focus(Gtk.get_current_event_time())
             # Using isinstance here because we want to catch all derived types
             if isinstance(ctrl, ChatControlBase):
                 tv = ctrl.conv_textview
@@ -1770,13 +1776,13 @@ class Interface:
     def image_is_ok(self, image):
         if not os.path.exists(image):
             return False
-        img = gtk.Image()
+        img = Gtk.Image()
         try:
             img.set_from_file(image)
         except Exception:
             return False
         t = img.get_storage_type()
-        if t != gtk.IMAGE_PIXBUF and t != gtk.IMAGE_ANIMATION:
+        if t != Gtk.ImageType.PIXBUF and t != Gtk.ImageType.ANIMATION:
             return False
         return True
 
@@ -1874,7 +1880,6 @@ class Interface:
             emoticons_pattern_postmatch = ''
             emoticon_length = 0
             for emoticon in keys: # travel thru emoticons list
-                emoticon = emoticon.decode('utf-8')
                 emoticon_escaped = re.escape(emoticon) # espace regexp metachars
                 # | means or in regexp
                 emoticons_pattern += emoticon_escaped + '|'
@@ -1906,8 +1911,8 @@ class Interface:
         self.sth_at_sth_dot_sth = r'\S+@\S+\.\S*[^\s)?]'
 
         # Invalid XML chars
-        self.invalid_XML_chars = u'[\x00-\x08]|[\x0b-\x0c]|[\x0e-\x1f]|'\
-            u'[\ud800-\udfff]|[\ufffe-\uffff]'
+        self.invalid_XML_chars = '[\x00-\x08]|[\x0b-\x0c]|[\x0e-\x1f]|'\
+            '[\ud800-\udfff]|[\ufffe-\uffff]'
 
     def popup_emoticons_under_button(self, button, parent_win):
         """
@@ -1917,7 +1922,7 @@ class Interface:
             button, parent_win)
 
     def prepare_emoticons_menu(self):
-        menu = gtk.Menu()
+        menu = Gtk.Menu()
         def emoticon_clicked(w, str_):
             if self.emoticon_menuitem_clicked:
                 self.emoticon_menuitem_clicked(str_)
@@ -1932,12 +1937,15 @@ class Interface:
         # Calculate the side lenght of the popup to make it a square
         size = int(round(math.sqrt(len(self.emoticons_images))))
         for image in self.emoticons_images:
-            item = gtk.MenuItem()
-            img = gtk.Image()
-            if isinstance(image[1], gtk.gdk.PixbufAnimation):
+            # In Gtk 3.6, Gtk.MenuItem() doesn't contain a label child
+            item = Gtk.MenuItem('q')
+            img = Gtk.Image()
+            if isinstance(image[1], GdkPixbuf.PixbufAnimation):
                 img.set_from_animation(image[1])
             else:
                 img.set_from_pixbuf(image[1])
+            c = item.get_child()
+            item.remove(c)
             item.add(img)
             item.connect('activate', emoticon_clicked, image[0])
             # add tooltip with ascii
@@ -1955,26 +1963,30 @@ class Interface:
         self.emoticons = dict()
         self.emoticons_animations = dict()
 
-        sys.path.append(path)
+        sys.path.insert(0, path)
         import emoticons
-        if need_reload:
-            # we need to reload else that doesn't work when changing emoticon
-            # set
-            reload(emoticons)
-        emots = emoticons.emoticons
+        try:
+            if need_reload:
+                # we need to reload else that doesn't work when changing
+                # emoticons set
+                import imp
+                imp.reload(emoticons)
+            emots = emoticons.emoticons
+        except Exception as e:
+            return True
         for emot_filename in emots:
             emot_file = os.path.join(path, emot_filename)
             if not self.image_is_ok(emot_file):
                 continue
             for emot in emots[emot_filename]:
-                emot = emot.decode('utf-8')
+                emot = emot
                 # This avoids duplicated emoticons with the same image eg. :)
                 # and :-)
                 if not emot_file in self.emoticons.values():
                     if emot_file.endswith('.gif'):
-                        pix = gtk.gdk.PixbufAnimation(emot_file)
+                        pix = GdkPixbuf.PixbufAnimation.new_from_file(emot_file)
                     else:
-                        pix = gtk.gdk.pixbuf_new_from_file_at_size(emot_file,
+                        pix = GdkPixbuf.Pixbuf.new_from_file_at_size(emot_file,
                             16, 16)
                     self.emoticons_images.append((emot, pix))
                 self.emoticons[emot.upper()] = emot_file
@@ -1986,6 +1998,10 @@ class Interface:
         if not emot_theme:
             return
 
+        transient_for = None
+        if 'preferences' in gajim.interface.instances:
+            transient_for = gajim.interface.instances['preferences'].window
+
         path = os.path.join(gajim.DATA_DIR, 'emoticons', emot_theme)
         if not os.path.exists(path):
             # It's maybe a user theme
@@ -1994,10 +2010,18 @@ class Interface:
                 # theme doesn't exist, disable emoticons
                 dialogs.WarningDialog(_('Emoticons disabled'),
                     _('Your configured emoticons theme has not been found, so '
-                    'emoticons have been disabled.'))
+                    'emoticons have been disabled.'),
+                    transient_for=transient_for)
                 gajim.config.set('emoticons_theme', '')
                 return
-        self._init_emoticons(path, need_reload)
+        if self._init_emoticons(path, need_reload):
+            dialogs.WarningDialog(_('Emoticons disabled'),
+                    _('Your configured emoticons theme cannot been loaded. You '
+                    'maybe need to update the format of emoticons.py file. See '
+                    'http://trac.gajim.org/wiki/Emoticons for more details.'),
+                    transient_for=transient_for)
+            gajim.config.set('emoticons_theme', '')
+            return
         if len(self.emoticons) == 0:
             # maybe old format of emoticons file, try to convert it
             try:
@@ -2018,7 +2042,9 @@ class Interface:
                 dialogs.WarningDialog(_('Emoticons disabled'),
                     _('Your configured emoticons theme cannot been loaded. You '
                     'maybe need to update the format of emoticons.py file. See '
-                    'http://trac.gajim.org/wiki/Emoticons for more details.'))
+                    'http://trac.gajim.org/wiki/Emoticons for more details.'),
+                    transient_for=transient_for)
+                gajim.config.set('emoticons_theme', '')
         if self.emoticons_menu:
             self.emoticons_menu.destroy()
         self.emoticons_menu = self.prepare_emoticons_menu()
@@ -2100,6 +2126,7 @@ class Interface:
         gc_control = GroupchatControl(mw, contact, account,
             is_continued=is_continued)
         mw.new_tab(gc_control)
+        mw.set_active_tab(gc_control)
 
     def new_private_chat(self, gc_contact, account, session=None):
         conn = gajim.connections[account]
@@ -2187,7 +2214,7 @@ class Interface:
         # For JEP-0172
         if added_to_roster:
             ctrl.user_nick = gajim.nicks[account]
-        gobject.idle_add(mw.window.grab_focus)
+        GLib.idle_add(mw.window.grab_focus)
 
         return ctrl
 
@@ -2295,38 +2322,6 @@ class Interface:
             gajim.connections[acct].send_tune(artist, title, source)
             gajim.connections[acct].music_track_info = music_track_info
 
-    def get_bg_fg_colors(self):
-        def gdkcolor_to_rgb (gdkcolor):
-            return [c / 65535. for c in (gdkcolor.red, gdkcolor.green,
-                gdkcolor.blue)]
-
-        def format_rgb (r, g, b):
-            return ' '.join([str(c) for c in ('rgb', r, g, b)])
-
-        def format_gdkcolor (gdkcolor):
-            return format_rgb (*gdkcolor_to_rgb (gdkcolor))
-
-        # get style colors and create string for dvipng
-        dummy = gtk.Invisible()
-        dummy.ensure_style()
-        style = dummy.get_style()
-        bg_str = format_gdkcolor(style.base[gtk.STATE_NORMAL])
-        fg_str = format_gdkcolor(style.text[gtk.STATE_NORMAL])
-        return (bg_str, fg_str)
-
-    def get_fg_color(self, fmt='hex'):
-        def format_gdkcolor (c):
-            if fmt == 'tex':
-                return ' '.join([str(s) for s in
-                    ('rgb', c.red_float, c.green_float, c.blue_float)])
-            elif fmt == 'hex':
-                return str(c)
-
-        # get foreground style color and create string
-        dummy = gtk.Invisible()
-        dummy.ensure_style()
-        return format_gdkcolor(dummy.get_style().text[gtk.STATE_NORMAL])
-
     def read_sleepy(self):
         """
         Check idle status and change that status if needed
@@ -2339,14 +2334,14 @@ class Interface:
             if account not in gajim.sleeper_state or \
             not gajim.sleeper_state[account]:
                 continue
-            if state == common.sleepy.STATE_AWAKE and \
+            if state == sleepy.STATE_AWAKE and \
             gajim.sleeper_state[account] in ('autoaway', 'autoxa'):
                 # we go online
                 self.roster.send_status(account, 'online',
                         gajim.status_before_autoaway[account])
                 gajim.status_before_autoaway[account] = ''
                 gajim.sleeper_state[account] = 'online'
-            elif state == common.sleepy.STATE_AWAY and \
+            elif state == sleepy.STATE_AWAY and \
             gajim.sleeper_state[account] == 'online' and \
             gajim.config.get('autoaway'):
                 # we save out online status
@@ -2366,7 +2361,7 @@ class Interface:
                 self.roster.send_status(account, 'away', auto_message,
                     auto=True)
                 gajim.sleeper_state[account] = 'autoaway'
-            elif state == common.sleepy.STATE_XA and \
+            elif state == sleepy.STATE_XA and \
             gajim.sleeper_state[account] in ('online', 'autoaway',
             'autoaway-forced') and gajim.config.get('autoxa'):
                 # we go extended away [we pass True to auto param]
@@ -2435,16 +2430,16 @@ class Interface:
             # Otherwise, an exception will stop our loop
             timeout, in_seconds = gajim.idlequeue.PROCESS_TIMEOUT
             if in_seconds:
-                gobject.timeout_add_seconds(timeout, self.process_connections)
+                GLib.timeout_add_seconds(timeout, self.process_connections)
             else:
-                gobject.timeout_add(timeout, self.process_connections)
+                GLib.timeout_add(timeout, self.process_connections)
             raise
         return True # renew timeout (loop for ever)
 
     def save_config(self):
         err_str = parser.write()
         if err_str is not None:
-            print >> sys.stderr, err_str
+            print(err_str, file=sys.stderr)
             # it is good to notify the user
             # in case he or she cannot see the output of the console
             dialogs.ErrorDialog(_('Could not save your settings and '
@@ -2487,8 +2482,8 @@ class Interface:
                 extension = '.png'
         path_to_original_file = path_to_file + extension
         try:
-            pixbuf.save(path_to_original_file, typ)
-        except Exception, e:
+            pixbuf.savev(path_to_original_file, typ, [], [])
+        except Exception as e:
             log.error('Error writing avatar file %s: %s' % (
                 path_to_original_file, str(e)))
         # Generate and save the resized, color avatar
@@ -2497,8 +2492,8 @@ class Interface:
             path_to_normal_file = path_to_file + '_notif_size_colored' + \
                 extension
             try:
-                pixbuf.save(path_to_normal_file, 'png')
-            except Exception, e:
+                pixbuf.savev(path_to_normal_file, 'png', [], [])
+            except Exception as e:
                 log.error('Error writing avatar file %s: %s' % \
                     (path_to_original_file, str(e)))
             # Generate and save the resized, black and white avatar
@@ -2507,8 +2502,8 @@ class Interface:
             if bwbuf:
                 path_to_bw_file = path_to_file + '_notif_size_bw' + extension
                 try:
-                    bwbuf.save(path_to_bw_file, 'png')
-                except Exception, e:
+                    bwbuf.savev(path_to_bw_file, 'png', [], [])
+                except Exception as e:
                     log.error('Error writing avatar file %s: %s' % \
                         (path_to_original_file, str(e)))
 
@@ -2639,23 +2634,23 @@ class Interface:
         try:
             from ipython_view import IPythonView
         except ImportError:
-            print 'ipython_view not found'
+            print('ipython_view not found')
             return
-        import pango
+        from gi.repository import Pango
 
         if os.name == 'nt':
             font = 'Lucida Console 9'
         else:
             font = 'Luxi Mono 10'
 
-        window = gtk.Window()
+        window = Gtk.Window()
         window.set_size_request(750, 550)
         window.set_resizable(True)
-        sw = gtk.ScrolledWindow()
-        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+        sw = Gtk.ScrolledWindow()
+        sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
         view = IPythonView()
-        view.modify_font(pango.FontDescription(font))
-        view.set_wrap_mode(gtk.WRAP_CHAR)
+        view.override_font(Pango.FontDescription(font))
+        view.set_wrap_mode(Gtk.WrapMode.CHAR)
         sw.add(view)
         window.add(sw)
         window.show_all()
@@ -2683,18 +2678,18 @@ class Interface:
         # get instances for windows/dialogs that will show_all()/hide()
         self.instances['file_transfers'] = dialogs.FileTransfersWindow()
 
-        gobject.timeout_add(100, self.autoconnect)
+        GLib.timeout_add(100, self.autoconnect)
         timeout, in_seconds = gajim.idlequeue.PROCESS_TIMEOUT
         if in_seconds:
-            gobject.timeout_add_seconds(timeout, self.process_connections)
+            GLib.timeout_add_seconds(timeout, self.process_connections)
         else:
-            gobject.timeout_add(timeout, self.process_connections)
-        gobject.timeout_add_seconds(gajim.config.get(
+            GLib.timeout_add(timeout, self.process_connections)
+        GLib.timeout_add_seconds(gajim.config.get(
                 'check_idle_every_foo_seconds'), self.read_sleepy)
 
         # when using libasyncns we need to process resolver in regular intervals
         if resolver.USE_LIBASYNCNS:
-            gobject.timeout_add(200, gajim.resolver.process)
+            GLib.timeout_add(200, gajim.resolver.process)
 
         def remote_init():
             if gajim.config.get('remote_control'):
@@ -2703,7 +2698,7 @@ class Interface:
                     self.remote_ctrl = remote_control.Remote()
                 except Exception:
                     pass
-        gobject.timeout_add_seconds(5, remote_init)
+        GLib.timeout_add_seconds(5, remote_init)
 
     def __init__(self):
         gajim.interface = self
@@ -2764,8 +2759,8 @@ class Interface:
                 break
         # Is gnome configured to activate row on single click ?
         try:
-            import gconf
-            client = gconf.client_get_default()
+            from gi.repository import GConf
+            client = GConf.Client.get_default()
             click_policy = client.get_string(
                     '/apps/nautilus/preferences/click_policy')
             if click_policy == 'single':
@@ -2848,9 +2843,9 @@ class Interface:
                 gajim.connections[account] = Connection(account)
 
         # gtk hooks
-        gtk.about_dialog_set_email_hook(self.on_launch_browser_mailer, 'mail')
-        gtk.about_dialog_set_url_hook(self.on_launch_browser_mailer, 'url')
-        gtk.link_button_set_uri_hook(self.on_launch_browser_mailer, 'url')
+#        Gtk.about_dialog_set_email_hook(self.on_launch_browser_mailer, 'mail')
+#        Gtk.about_dialog_set_url_hook(self.on_launch_browser_mailer, 'url')
+#        Gtk.link_button_set_uri_hook(self.on_launch_browser_mailer, 'url')
 
         self.instances = {}
 
@@ -2945,7 +2940,7 @@ class Interface:
 
         self.show_vcard_when_connect = []
 
-        self.sleeper = common.sleepy.Sleepy(
+        self.sleeper = sleepy.Sleepy(
             gajim.config.get('autoawaytime') * 60, # make minutes to seconds
             gajim.config.get('autoxatime') * 60)
 
@@ -2963,7 +2958,7 @@ class Interface:
                 pixs.append(pix)
         if pixs:
             # set the icon to all windows
-            gtk.window_set_default_icon_list(*pixs)
+            Gtk.Window.set_default_icon_list(pixs)
 
         self.init_emoticons()
         self.make_regexps()
@@ -2976,7 +2971,7 @@ class Interface:
             lang = gajim.config.get('speller_language')
             if not lang:
                 lang = gajim.LANG
-            tv = gtk.TextView()
+            tv = Gtk.TextView()
             try:
                 import gtkspell
                 spell = gtkspell.Spell(tv, lang)
@@ -2985,11 +2980,13 @@ class Interface:
 
         if gajim.config.get('soundplayer') == '':
             # only on first time Gajim starts
-            commands = ('aplay', 'play', 'esdplay', 'artsplay', 'ossplay')
+            commands = ('aplay', 'play', 'ossplay')
             for command in commands:
                 if helpers.is_in_path(command):
-                    if command == 'aplay':
+                    if command in ('aplay', 'play'):
                         command += ' -q'
+                    elif command == 'ossplay':
+                        command += ' -qq'
                     gajim.config.set('soundplayer', command)
                     break
 
@@ -3033,8 +3030,8 @@ class PassphraseRequest:
         self.passphrase = passphrase
         self.completed = True
         if passphrase is not None:
-            gobject.timeout_add_seconds(30,
-                gajim.interface.forget_gpg_passphrase, self.keyid)
+            GLib.timeout_add_seconds(30, gajim.interface.forget_gpg_passphrase,
+                self.keyid)
         for (account, cb) in self.callbacks:
             self.run_callback(account, cb)
         self.callbacks = []
@@ -3085,7 +3082,7 @@ class ThreadInterface:
         def thread_function(func, func_args, callback, callback_args):
             output = func(*func_args)
             if callback:
-                gobject.idle_add(callback, output, *callback_args)
+                GLib.idle_add(callback, output, *callback_args)
 
         Thread(target=thread_function, args=(func, func_args, callback,
                 callback_args)).start()
diff --git a/src/gui_menu_builder.py b/src/gui_menu_builder.py
index 0cc03fb10b81ec99005bd0fb8a30e61997d77ed4..fc1252c0ac55c8d86c95a9f8a2454f500aa321ce 100644
--- a/src/gui_menu_builder.py
+++ b/src/gui_menu_builder.py
@@ -18,7 +18,7 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gtk
+from gi.repository import Gtk
 import os
 import gtkgui_helpers
 import message_control
@@ -26,7 +26,7 @@ import message_control
 from common import gajim
 from common import helpers
 from nbxmpp.protocol import NS_COMMANDS, NS_FILE, NS_MUC, NS_ESESSION
-from nbxmpp.protocol import NS_JINGLE_FILE_TRANSFER
+from nbxmpp.protocol import NS_JINGLE_FILE_TRANSFER, NS_CONFERENCE
 
 def build_resources_submenu(contacts, account, action, room_jid=None,
                 room_account=None, cap=None):
@@ -35,7 +35,7 @@ def build_resources_submenu(contacts, account, action, room_jid=None,
     action self.on_invite_to_room
     """
     roster = gajim.interface.roster
-    sub_menu = gtk.Menu()
+    sub_menu = Gtk.Menu()
 
     iconset = gajim.config.get('iconset')
     if not iconset:
@@ -44,7 +44,7 @@ def build_resources_submenu(contacts, account, action, room_jid=None,
     for c in contacts:
         # icon MUST be different instance for every item
         state_images = gtkgui_helpers.load_iconset(path)
-        item = gtk.ImageMenuItem('%s (%s)' % (c.resource, str(c.priority)))
+        item = Gtk.ImageMenuItem('%s (%s)' % (c.resource, str(c.priority)))
         icon_name = helpers.get_icon_name_to_show(c, account)
         icon = state_images[icon_name]
         item.set_image(icon)
@@ -63,7 +63,8 @@ def build_resources_submenu(contacts, account, action, room_jid=None,
 
     return sub_menu
 
-def build_invite_submenu(invite_menuitem, list_, ignore_rooms=[]):
+def build_invite_submenu(invite_menuitem, list_, ignore_rooms=[],
+show_bookmarked=False):
     """
     list_ in a list of (contact, account)
     """
@@ -91,10 +92,11 @@ def build_invite_submenu(invite_menuitem, list_, ignore_rooms=[]):
         # they are not all from the same transport
         invite_menuitem.set_sensitive(False)
         return
-    invite_to_submenu = gtk.Menu()
+    invite_to_submenu = Gtk.Menu()
     invite_menuitem.set_submenu(invite_to_submenu)
-    invite_to_new_room_menuitem = gtk.ImageMenuItem(_('_New Group Chat'))
-    icon = gtk.image_new_from_stock(gtk.STOCK_NEW, gtk.ICON_SIZE_MENU)
+    invite_to_new_room_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(_(
+        '_New Group Chat'))
+    icon = Gtk.Image.new_from_stock(Gtk.STOCK_NEW, Gtk.IconSize.MENU)
     invite_to_new_room_menuitem.set_image(icon)
     if len(contact_list) > 1: # several resources
         invite_to_new_room_menuitem.set_submenu(build_resources_submenu(
@@ -108,8 +110,18 @@ def build_invite_submenu(invite_menuitem, list_, ignore_rooms=[]):
             resource = None
         invite_to_new_room_menuitem.connect('activate',
             roster.on_invite_to_new_room, list_, resource)
+    elif len(list_) > 1:
+        list2 = []
+        for (c, a) in list_:
+            if c.supports(NS_MUC):
+                list2.append((c, a))
+        if len(list2) > 0:
+            invite_to_new_room_menuitem.connect('activate',
+                roster.on_invite_to_new_room, list2, None)
+        else:
+            invite_menuitem.set_sensitive(False)
     else:
-        invite_menuitem.set_sensitive(True)
+        invite_menuitem.set_sensitive(False)
     # transform None in 'jabber'
     c_t = contacts_transport or 'jabber'
     muc_jid = {}
@@ -123,7 +135,7 @@ def build_invite_submenu(invite_menuitem, list_, ignore_rooms=[]):
     minimized_controls = []
     for account in connected_accounts:
         minimized_controls += \
-            gajim.interface.minimized_controls[account].values()
+            list(gajim.interface.minimized_controls[account].values())
     for gc_control in gajim.interface.msg_win_mgr.get_controls(
     message_control.TYPE_GC) + minimized_controls:
         acct = gc_control.account
@@ -137,10 +149,12 @@ def build_invite_submenu(invite_menuitem, list_, ignore_rooms=[]):
         contacts_transport in ['jabber', None]:
             rooms.append((room_jid, acct))
     if len(rooms):
-        item = gtk.SeparatorMenuItem() # separator
+        item = Gtk.SeparatorMenuItem.new() # separator
         invite_to_submenu.append(item)
         for (room_jid, account) in rooms:
-            menuitem = gtk.MenuItem(room_jid.split('@')[0])
+            menuitem = Gtk.ImageMenuItem(room_jid.split('@')[0])
+            muc_active_icon = gtkgui_helpers.load_icon('muc_active')
+            menuitem.set_image(muc_active_icon)
             if len(contact_list) > 1: # several resources
                 menuitem.set_submenu(build_resources_submenu(
                     contact_list, account, roster.on_invite_to_room, room_jid,
@@ -152,9 +166,45 @@ def build_invite_submenu(invite_menuitem, list_, ignore_rooms=[]):
                 else:
                     resource = None
                 menuitem.connect('activate', roster.on_invite_to_room, list_,
-                        room_jid, account, resource)
+                    room_jid, account, resource)
             invite_to_submenu.append(menuitem)
 
+    if not show_bookmarked:
+        return
+    rooms2 = [] # a list of (room_jid, account) tuple
+    r_jids = [] # list of room jids
+    for account in connected_accounts:
+        for room in gajim.connections[account].bookmarks:
+            r_jid = room['jid']
+            if r_jid in r_jids:
+                continue
+            if r_jid not in gajim.gc_connected[account] or not \
+            gajim.gc_connected[account][r_jid]:
+                rooms2.append((r_jid, account))
+                r_jids.append(r_jid)
+
+    if not rooms2:
+        return
+    item = Gtk.SeparatorMenuItem.new() # separator
+    invite_to_submenu.append(item)
+    for (room_jid, account) in rooms2:
+        menuitem = Gtk.ImageMenuItem(room_jid.split('@')[0])
+        muc_inactive_icon = gtkgui_helpers.load_icon('muc_inactive')
+        menuitem.set_image(muc_inactive_icon)
+        if len(contact_list) > 1: # several resources
+            menuitem.set_submenu(build_resources_submenu(
+                contact_list, account, roster.on_invite_to_room, room_jid,
+                account))
+        else:
+            # use resource if it's self contact
+            if contact.jid == gajim.get_jid_from_account(account):
+                resource = contact.resource
+            else:
+                resource = None
+            menuitem.connect('activate', roster.on_invite_to_room, list_,
+                room_jid, account, resource)
+        invite_to_submenu.append(menuitem)
+
 def get_contact_menu(contact, account, use_multiple_contacts=True,
 show_start_chat=True, show_encryption=False, show_buttonbar_items=True,
 control=None, gc_contact=None, is_anonymous=True):
@@ -210,7 +260,7 @@ control=None, gc_contact=None, is_anonymous=True):
     pixbuf = gtkgui_helpers.get_icon_pixmap('document-send', quiet=True)
     if not pixbuf:
         pixbuf = gtkgui_helpers.get_icon_pixmap('gajim-upload')
-    img = gtk.image_new_from_pixbuf(pixbuf)
+    img = Gtk.Image.new_from_pixbuf(pixbuf)
     send_file_menuitem.set_image(img)
 
     if not our_jid:
@@ -256,8 +306,9 @@ control=None, gc_contact=None, is_anonymous=True):
             account)
     history_menuitem.connect('activate', roster.on_history, contact, account)
     if gtkgui_helpers.gtk_icon_theme.has_icon('document-open-recent'):
-        gtkgui_helpers.add_image_to_menuitem(history_menuitem,
-            'document-open-recent')
+        img = Gtk.Image()
+        img.set_from_icon_name('document-open-recent', Gtk.IconSize.MENU)
+        history_menuitem.set_image(img)
 
     if control:
         convert_to_gc_menuitem.connect('activate',
@@ -331,6 +382,11 @@ control=None, gc_contact=None, is_anonymous=True):
     if not control:
         items_to_hide.append(convert_to_gc_menuitem)
 
+    # Hide items when it's a pm
+    if gc_contact:
+        items_to_hide += [rename_menuitem, edit_groups_menuitem,
+        subscription_menuitem, remove_from_roster_menuitem]
+
     for item in items_to_hide:
         item.set_no_show_all(True)
         item.hide()
@@ -379,7 +435,7 @@ control=None, gc_contact=None, is_anonymous=True):
         send_custom_status_menuitem.set_image(gtkgui_helpers.load_icon(
                 gajim.interface.status_sent_to_users[account][jid]))
     else:
-        icon = gtk.image_new_from_stock(gtk.STOCK_NETWORK, gtk.ICON_SIZE_MENU)
+        icon = Gtk.Image.new_from_stock(Gtk.STOCK_NETWORK, Gtk.IconSize.MENU)
         send_custom_status_menuitem.set_image(icon)
 
     muc_icon = gtkgui_helpers.load_icon('muc_active')
@@ -391,22 +447,29 @@ control=None, gc_contact=None, is_anonymous=True):
             # it's a pm and we don't know real JID
             invite_menuitem.set_sensitive(False)
         else:
-            build_invite_submenu(invite_menuitem, [(gc_contact, account)])
+            bookmarked = False
+            c_ = gajim.contacts.get_contact(account, gc_contact.jid,
+                gc_contact.resource)
+            if c_ and c_.supports(NS_CONFERENCE):
+                bookmarked=True
+            build_invite_submenu(invite_menuitem, [(gc_contact, account)],
+                show_bookmarked=bookmarked)
     else:
-        build_invite_submenu(invite_menuitem, [(contact, account)])
+        build_invite_submenu(invite_menuitem, [(contact, account)],
+            show_bookmarked=contact.supports(NS_CONFERENCE))
 
     if gajim.account_is_disconnected(account):
         invite_menuitem.set_sensitive(False)
 
     # One or several resource, we do the same for send_custom_status
-    status_menuitems = gtk.Menu()
+    status_menuitems = Gtk.Menu()
     send_custom_status_menuitem.set_submenu(status_menuitems)
     iconset = gajim.config.get('iconset')
     path = os.path.join(helpers.get_iconset_path(iconset), '16x16')
     for s in ('online', 'chat', 'away', 'xa', 'dnd', 'offline'):
         # icon MUST be different instance for every item
         state_images = gtkgui_helpers.load_iconset(path)
-        status_menuitem = gtk.ImageMenuItem(helpers.get_uf_show(s))
+        status_menuitem = Gtk.ImageMenuItem(helpers.get_uf_show(s))
         status_menuitem.connect('activate', roster.on_send_custom_status,
                 [(contact, account)], s)
         icon = state_images[s]
@@ -476,7 +539,8 @@ control=None, gc_contact=None, is_anonymous=True):
         if helpers.jid_is_blocked(account, jid):
             block_menuitem.set_no_show_all(True)
             block_menuitem.hide()
-            if gajim.get_transport_name_from_jid(jid, use_config_setting=False):
+            if gajim.get_transport_name_from_jid(jid, use_config_setting=False)\
+            and transport != 'jabber':
                 unblock_menuitem.set_no_show_all(True)
                 unblock_menuitem.hide()
                 unignore_menuitem.set_no_show_all(False)
@@ -488,7 +552,8 @@ control=None, gc_contact=None, is_anonymous=True):
         else:
             unblock_menuitem.set_no_show_all(True)
             unblock_menuitem.hide()
-            if gajim.get_transport_name_from_jid(jid, use_config_setting=False):
+            if gajim.get_transport_name_from_jid(jid, use_config_setting=False)\
+            and transport != 'jabber':
                 block_menuitem.set_no_show_all(True)
                 block_menuitem.hide()
                 ignore_menuitem.set_no_show_all(False)
@@ -505,3 +570,140 @@ control=None, gc_contact=None, is_anonymous=True):
     contact_context_menu.connect('selection-done', gtkgui_helpers.destroy_widget)
     contact_context_menu.show_all()
     return contact_context_menu
+
+def get_transport_menu(contact, account):
+    roster = gajim.interface.roster
+    jid = contact.jid
+
+    menu = Gtk.Menu()
+
+    # Send single message
+    item = Gtk.ImageMenuItem.new_with_mnemonic(_('Send Single _Message...'))
+    icon = Gtk.Image.new_from_stock(Gtk.STOCK_NEW, Gtk.IconSize.MENU)
+    item.set_image(icon)
+    item.connect('activate', roster.on_send_single_message_menuitem_activate,
+        account, contact)
+    menu.append(item)
+    if gajim.account_is_disconnected(account):
+        item.set_sensitive(False)
+
+    blocked = False
+    if helpers.jid_is_blocked(account, jid):
+        blocked = True
+
+    # Send Custom Status
+    send_custom_status_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(
+        _('Send Cus_tom Status'))
+    # add a special img for this menuitem
+    if blocked:
+        send_custom_status_menuitem.set_image(gtkgui_helpers.load_icon(
+            'offline'))
+        send_custom_status_menuitem.set_sensitive(False)
+    else:
+        if account in gajim.interface.status_sent_to_users and \
+        jid in gajim.interface.status_sent_to_users[account]:
+            send_custom_status_menuitem.set_image(gtkgui_helpers.load_icon(
+                gajim.interface.status_sent_to_users[account][jid]))
+        else:
+            icon = Gtk.Imag.new_from_stock(Gtk.STOCK_NETWORK,
+                Gtk.IconSize.MENU)
+            send_custom_status_menuitem.set_image(icon)
+        status_menuitems = Gtk.Menu()
+        send_custom_status_menuitem.set_submenu(status_menuitems)
+        iconset = gajim.config.get('iconset')
+        path = os.path.join(helpers.get_iconset_path(iconset), '16x16')
+        for s in ('online', 'chat', 'away', 'xa', 'dnd', 'offline'):
+            # icon MUST be different instance for every item
+            state_images = gtkgui_helpers.load_iconset(path)
+            status_menuitem = Gtk.ImageMenuItem(helpers.get_uf_show(s))
+            status_menuitem.connect('activate', roster.on_send_custom_status,
+                [(contact, account)], s)
+            icon = state_images[s]
+            status_menuitem.set_image(icon)
+            status_menuitems.append(status_menuitem)
+    menu.append(send_custom_status_menuitem)
+    if gajim.account_is_disconnected(account):
+        send_custom_status_menuitem.set_sensitive(False)
+
+    item = Gtk.SeparatorMenuItem.new() # separator
+    menu.append(item)
+
+    # Execute Command
+    item = Gtk.ImageMenuItem.new_with_mnemonic(_('E_xecute Command...'))
+    icon = Gtk.Image.new_from_stock(Gtk.STOCK_EXECUTE, Gtk.IconSize.MENU)
+    item.set_image(icon)
+    menu.append(item)
+    item.connect('activate', roster.on_execute_command, contact, account,
+        contact.resource)
+    if gajim.account_is_disconnected(account):
+        item.set_sensitive(False)
+
+    # Manage Transport submenu
+    item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Manage Transport'))
+    icon = Gtk.Image.new_from_stock(Gtk.STOCK_PROPERTIES, Gtk.IconSize.MENU)
+    item.set_image(icon)
+    manage_transport_submenu = Gtk.Menu()
+    item.set_submenu(manage_transport_submenu)
+    menu.append(item)
+
+    # Modify Transport
+    item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Modify Transport'))
+    icon = Gtk.Image.new_from_stock(Gtk.STOCK_PREFERENCES, Gtk.IconSize.MENU)
+    item.set_image(icon)
+    manage_transport_submenu.append(item)
+    item.connect('activate', roster.on_edit_agent, contact, account)
+    if gajim.account_is_disconnected(account):
+        item.set_sensitive(False)
+
+    # Rename
+    item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Rename...'))
+    # add a special img for rename menuitem
+    gtkgui_helpers.add_image_to_menuitem(item, 'gajim-kbd_input')
+    manage_transport_submenu.append(item)
+    item.connect('activate', roster.on_rename, 'agent', jid, account)
+    if gajim.account_is_disconnected(account):
+        item.set_sensitive(False)
+
+    item = Gtk.SeparatorMenuItem.new() # separator
+    manage_transport_submenu.append(item)
+
+    # Block
+    if blocked:
+        item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Unblock'))
+        item.connect('activate', roster.on_unblock, [(contact, account)])
+    else:
+        item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Block'))
+        item.connect('activate', roster.on_block, [(contact, account)])
+
+    icon = Gtk.Image.new_from_stock(Gtk.STOCK_STOP, Gtk.IconSize.MENU)
+    item.set_image(icon)
+    manage_transport_submenu.append(item)
+    if gajim.account_is_disconnected(account):
+        item.set_sensitive(False)
+
+    # Remove
+    item = Gtk.ImageMenuItem.new_with_mnemonic(_('Remo_ve'))
+    icon = Gtk.Image.new_from_stock(Gtk.STOCK_REMOVE, Gtk.IconSize.MENU)
+    item.set_image(icon)
+    manage_transport_submenu.append(item)
+    item.connect('activate', roster.on_remove_agent, [(contact, account)])
+    if gajim.account_is_disconnected(account):
+        item.set_sensitive(False)
+
+    item = Gtk.SeparatorMenuItem.new() # separator
+    menu.append(item)
+
+    # Information
+    information_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(
+        _('_Information'))
+    icon = Gtk.Image.new_from_stock(Gtk.STOCK_INFO, Gtk.IconSize.MENU)
+    information_menuitem.set_image(icon)
+    menu.append(information_menuitem)
+    information_menuitem.connect('activate', roster.on_info, contact, account)
+    if gajim.account_is_disconnected(account):
+        information_menuitem.set_sensitive(False)
+
+    menu.connect('selection-done', gtkgui_helpers.destroy_widget)
+    menu.show_all()
+    return menu
+
diff --git a/src/history_manager.py b/src/history_manager.py
index 5ecad2e96f4150c2e83b4d91005bb659ffa7f373..1102749133714489a86f00c76af1068aa057f361 100644
--- a/src/history_manager.py
+++ b/src/history_manager.py
@@ -49,8 +49,9 @@ if os.name == 'nt':
 
 import sys
 import signal
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GLib
 import time
 import locale
 
@@ -64,24 +65,24 @@ def parseOpts():
         shortargs = 'hc:'
         longargs = 'help config-path='
         opts = getopt.getopt(sys.argv[1:], shortargs, longargs.split())[0]
-    except getopt.error, msg:
-        print str(msg)
-        print 'for help use --help'
+    except getopt.error as msg:
+        print(str(msg))
+        print('for help use --help')
         sys.exit(2)
     for o, a in opts:
         if o in ('-h', '--help'):
-            print _('Usage:') + \
+            print(_('Usage:') + \
                 '\n  gajim-history-manager [options] filename\n\n' + \
                 _('Options:') + \
                 '\n  -h, --help         ' + \
                     _('Show this help message and exit') + \
-                '\n  -c, --config-path  ' + _('Set logs directory')
+                '\n  -c, --config-path  ' + _('Set logs directory') + '\n')
             sys.exit()
         elif o in ('-c', '--config-path'):
             config_path = a
     return config_path
 
-config_path = parseOpts()
+onfig_path = parseOpts()
 del parseOpts
 
 import common.configpaths
@@ -120,7 +121,7 @@ class HistoryManager:
                 pixs.append(pix)
         if pixs:
             # set the icon to all windows
-            gtk.window_set_default_icon_list(*pixs)
+            Gtk.Window.set_default_icon_list(*pixs)
 
         if not os.path.exists(LOG_DB_PATH):
             dialogs.ErrorDialog(_('Cannot find history logs database'),
@@ -158,12 +159,12 @@ class HistoryManager:
         xml.connect_signals(self)
 
     def _init_jids_listview(self):
-        self.jids_liststore = gtk.ListStore(str, str)  # jid, jid_id
+        self.jids_liststore = Gtk.ListStore(str, str)  # jid, jid_id
         self.jids_listview.set_model(self.jids_liststore)
-        self.jids_listview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
+        self.jids_listview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
 
-        renderer_text = gtk.CellRendererText()  # holds jid
-        col = gtk.TreeViewColumn(_('Jabber ID'), renderer_text, text=0)
+        renderer_text = Gtk.CellRendererText()  # holds jid
+        col = Gtk.TreeViewColumn(_('Jabber ID'), renderer_text, text=0)
         self.jids_listview.append_column(col)
 
         self.jids_listview.get_selection().connect('changed',
@@ -171,19 +172,19 @@ class HistoryManager:
 
     def _init_logs_listview(self):
         # log_line_id(HIDDEN), jid_id(HIDDEN), time, message, subject, nickname
-        self.logs_liststore = gtk.ListStore(str, str, str, str, str, str)
+        self.logs_liststore = Gtk.ListStore(str, str, str, str, str, str)
         self.logs_listview.set_model(self.logs_liststore)
-        self.logs_listview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
+        self.logs_listview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
 
-        renderer_text = gtk.CellRendererText()  # holds time
-        col = gtk.TreeViewColumn(_('Date'), renderer_text, text=C_UNIXTIME)
+        renderer_text = Gtk.CellRendererText()  # holds time
+        col = Gtk.TreeViewColumn(_('Date'), renderer_text, text=C_UNIXTIME)
         # user can click this header and sort
         col.set_sort_column_id(C_UNIXTIME)
         col.set_resizable(True)
         self.logs_listview.append_column(col)
 
-        renderer_text = gtk.CellRendererText()  # holds nickname
-        col = gtk.TreeViewColumn(_('Nickname'), renderer_text, text=C_NICKNAME)
+        renderer_text = Gtk.CellRendererText()  # holds nickname
+        col = Gtk.TreeViewColumn(_('Nickname'), renderer_text, text=C_NICKNAME)
         # user can click this header and sort
         col.set_sort_column_id(C_NICKNAME)
         col.set_resizable(True)
@@ -191,16 +192,16 @@ class HistoryManager:
         self.nickname_col_for_logs = col
         self.logs_listview.append_column(col)
 
-        renderer_text = gtk.CellRendererText()  # holds message
-        col = gtk.TreeViewColumn(_('Message'), renderer_text, markup=C_MESSAGE)
+        renderer_text = Gtk.CellRendererText()  # holds message
+        col = Gtk.TreeViewColumn(_('Message'), renderer_text, markup=C_MESSAGE)
         # user can click this header and sort
         col.set_sort_column_id(C_MESSAGE)
         col.set_resizable(True)
         self.message_col_for_logs = col
         self.logs_listview.append_column(col)
 
-        renderer_text = gtk.CellRendererText()  # holds subject
-        col = gtk.TreeViewColumn(_('Subject'), renderer_text, text=C_SUBJECT)
+        renderer_text = Gtk.CellRendererText()  # holds subject
+        col = Gtk.TreeViewColumn(_('Subject'), renderer_text, text=C_SUBJECT)
         col.set_sort_column_id(C_SUBJECT)  # user can click this header and sort
         col.set_resizable(True)
         col.set_visible(False)
@@ -209,37 +210,37 @@ class HistoryManager:
 
     def _init_search_results_listview(self):
         # log_line_id (HIDDEN), jid, time, message, subject, nickname
-        self.search_results_liststore = gtk.ListStore(str, str, str, str, str,
+        self.search_results_liststore = Gtk.ListStore(int, str, str, str, str,
             str)
         self.search_results_listview.set_model(self.search_results_liststore)
 
-        renderer_text = gtk.CellRendererText()  # holds JID (who said this)
-        col = gtk.TreeViewColumn(_('JID'), renderer_text, text=1)
+        renderer_text = Gtk.CellRendererText()  # holds JID (who said this)
+        col = Gtk.TreeViewColumn(_('JID'), renderer_text, text=1)
         col.set_sort_column_id(1)  # user can click this header and sort
         col.set_resizable(True)
         self.search_results_listview.append_column(col)
 
-        renderer_text = gtk.CellRendererText()  # holds time
-        col = gtk.TreeViewColumn(_('Date'), renderer_text, text=C_UNIXTIME)
+        renderer_text = Gtk.CellRendererText()  # holds time
+        col = Gtk.TreeViewColumn(_('Date'), renderer_text, text=C_UNIXTIME)
         # user can click this header and sort
         col.set_sort_column_id(C_UNIXTIME)
         col.set_resizable(True)
         self.search_results_listview.append_column(col)
 
-        renderer_text = gtk.CellRendererText()  # holds message
-        col = gtk.TreeViewColumn(_('Message'), renderer_text, text=C_MESSAGE)
+        renderer_text = Gtk.CellRendererText()  # holds message
+        col = Gtk.TreeViewColumn(_('Message'), renderer_text, text=C_MESSAGE)
         col.set_sort_column_id(C_MESSAGE)  # user can click this header and sort
         col.set_resizable(True)
         self.search_results_listview.append_column(col)
 
-        renderer_text = gtk.CellRendererText()  # holds subject
-        col = gtk.TreeViewColumn(_('Subject'), renderer_text, text=C_SUBJECT)
+        renderer_text = Gtk.CellRendererText()  # holds subject
+        col = Gtk.TreeViewColumn(_('Subject'), renderer_text, text=C_SUBJECT)
         col.set_sort_column_id(C_SUBJECT)  # user can click this header and sort
         col.set_resizable(True)
         self.search_results_listview.append_column(col)
 
-        renderer_text = gtk.CellRendererText()  # holds nickname
-        col = gtk.TreeViewColumn(_('Nickname'), renderer_text, text=C_NICKNAME)
+        renderer_text = Gtk.CellRendererText()  # holds nickname
+        col = Gtk.TreeViewColumn(_('Nickname'), renderer_text, text=C_NICKNAME)
         # user can click this header and sort
         col.set_sort_column_id(C_NICKNAME)
         col.set_resizable(True)
@@ -247,16 +248,16 @@ class HistoryManager:
 
     def on_history_manager_window_delete_event(self, widget, event):
         if not self.AT_LEAST_ONE_DELETION_DONE:
-            gtk.main_quit()
+            Gtk.main_quit()
             return
 
         def on_yes(clicked):
             self.cur.execute('VACUUM')
             self.con.commit()
-            gtk.main_quit()
+            Gtk.main_quit()
 
         def on_no():
-            gtk.main_quit()
+            Gtk.main_quit()
 
         dialog = dialogs.YesNoDialog(
             _('Do you want to clean up the database? '
@@ -274,11 +275,11 @@ class HistoryManager:
         # get those jids that have at least one entry in logs
         self.cur.execute('SELECT jid, jid_id FROM jids WHERE jid_id IN ('
                 'SELECT distinct logs.jid_id FROM logs) ORDER BY jid')
-        # list of tupples: [(u'aaa@bbb',), (u'cc@dd',)]
+        # list of tupples: [('aaa@bbb',), ('cc@dd',)]
         rows = self.cur.fetchall()
         for row in rows:
             self.jids_already_in.append(row[0])  # jid
-            self.jids_liststore.append(row)  # jid, jid_id
+            self.jids_liststore.append([row[0], str(row[1])])  # jid, jid_id
 
     def on_jids_listview_selection_changed(self, widget, data=None):
         liststore, list_of_paths = self.jids_listview.get_selection()\
@@ -295,13 +296,13 @@ class HistoryManager:
 
         list_of_rowrefs = []
         for path in list_of_paths:  # make them treerowrefs (it's needed)
-            list_of_rowrefs.append(gtk.TreeRowReference(liststore, path))
+            list_of_rowrefs.append(Gtk.TreeRowReference.new(liststore, path))
 
         for rowref in list_of_rowrefs:  # FILL THE STORE, for all rows selected
             path = rowref.get_path()
             if path is None:
                 continue
-            jid = liststore[path][0].decode('utf-8')  # jid
+            jid = liststore[path][0]  # jid
             self._fill_logs_listview(jid)
 
     def _get_jid_id(self, jid):
@@ -394,8 +395,7 @@ class HistoryManager:
             log_line_id, jid_id, time_, kind, message, subject, nickname, \
                 show = row
             try:
-                time_ = time.strftime('%x', time.localtime(float(time_))
-                    ).decode(locale.getpreferredencoding())
+                time_ = time.strftime('%x', time.localtime(float(time_)))
             except ValueError:
                 pass
             else:
@@ -422,10 +422,9 @@ class HistoryManager:
                 message_ = '<span'
                 if color:
                     message_ += ' foreground="%s"' % color
-                message_ += '>%s</span>' % \
-                        gobject.markup_escape_text(message)
-                self.logs_liststore.append((log_line_id, jid_id, time_,
-                    message_, subject, nickname))
+                message_ += '>%s</span>' % GLib.markup_escape_text(message)
+                self.logs_liststore.append((str(log_line_id), str(jid_id),
+                    time_, message_, subject, nickname))
 
     def _fill_search_results_listview(self, text):
         """
@@ -448,8 +447,7 @@ class HistoryManager:
             # log_line_id, jid (from jid_id), time, message, subject, nickname
             log_line_id, jid_id, time_, message, subject, nickname = row
             try:
-                time_ = time.strftime('%x', time.localtime(float(time_))
-                    ).decode(locale.getpreferredencoding())
+                time_ = time.strftime('%x', time.localtime(float(time_)))
             except ValueError:
                 pass
             else:
@@ -461,20 +459,20 @@ class HistoryManager:
     def on_logs_listview_key_press_event(self, widget, event):
         liststore, list_of_paths = self.logs_listview.get_selection()\
                 .get_selected_rows()
-        if event.keyval == gtk.keysyms.Delete:
+        if event.keyval == Gdk.KEY_Delete:
             self._delete_logs(liststore, list_of_paths)
 
     def on_listview_button_press_event(self, widget, event):
         if event.button == 3:  # right click
             xml = gtkgui_helpers.get_gtk_builder('history_manager.ui',
                 'context_menu')
-            if gtk.Buildable.get_name(widget) != 'jids_listview':
+            if Gtk.Buildable.get_name(widget) != 'jids_listview':
                 xml.get_object('export_menuitem').hide()
             xml.get_object('delete_menuitem').connect('activate',
                     self.on_delete_menuitem_activate, widget)
 
             xml.connect_signals(self)
-            xml.get_object('context_menu').popup(None, None, None,
+            xml.get_object('context_menu').popup(None, None, None, None,
                     event.button, event.time)
             return True
 
@@ -489,7 +487,7 @@ class HistoryManager:
         dlg.props.do_overwrite_confirmation = True
         response = dlg.run()
 
-        if response == gtk.RESPONSE_OK:  # user want us to export ;)
+        if response == Gtk.ResponseType.OK:  # user want us to export ;)
             liststore, list_of_paths = self.jids_listview.get_selection()\
                     .get_selected_rows()
             path_to_file = dlg.get_filename()
@@ -499,7 +497,7 @@ class HistoryManager:
         dlg.destroy()
 
     def on_delete_menuitem_activate(self, widget, listview):
-        widget_name = gtk.Buildable.get_name(listview)
+        widget_name = Gtk.Buildable.get_name(listview)
         liststore, list_of_paths = listview.get_selection().get_selected_rows()
         if widget_name == 'jids_listview':
             self._delete_jid_logs(liststore, list_of_paths)
@@ -511,7 +509,7 @@ class HistoryManager:
     def on_jids_listview_key_press_event(self, widget, event):
         liststore, list_of_paths = self.jids_listview.get_selection()\
                 .get_selected_rows()
-        if event.keyval == gtk.keysyms.Delete:
+        if event.keyval == Gdk.KEY_Delete:
             self._delete_jid_logs(liststore, list_of_paths)
 
     def _export_jids_logs_to_file(self, liststore, list_of_paths, path_to_file):
@@ -521,7 +519,7 @@ class HistoryManager:
 
         list_of_rowrefs = []
         for path in list_of_paths:  # make them treerowrefs (it's needed)
-            list_of_rowrefs.append(gtk.TreeRowReference(liststore, path))
+            list_of_rowrefs.append(Gtk.TreeRowReference.new(liststore, path))
 
         for rowref in list_of_rowrefs:
             path = rowref.get_path()
@@ -556,8 +554,7 @@ class HistoryManager:
                 continue
 
             try:
-                time_ = time.strftime('%c', time.localtime(float(time_))
-                    ).decode(locale.getpreferredencoding())
+                time_ = time.strftime('%c', time.localtime(float(time_)))
             except ValueError:
                 pass
 
@@ -573,7 +570,7 @@ class HistoryManager:
             # delete all rows from db that match jid_id
             list_of_rowrefs = []
             for path in list_of_paths:  # make them treerowrefs (it's needed)
-                list_of_rowrefs.append(gtk.TreeRowReference(liststore, path))
+                list_of_rowrefs.append(Gtk.TreeRowReference.new(liststore, path))
 
             for rowref in list_of_rowrefs:
                 path = rowref.get_path()
@@ -622,7 +619,7 @@ class HistoryManager:
             # delete rows from db that match log_line_id
             list_of_rowrefs = []
             for path in list_of_paths:  # make them treerowrefs (it's needed)
-                list_of_rowrefs.append(gtk.TreeRowReference(liststore, path))
+                list_of_rowrefs.append(Gtk.TreeRowReference.new(liststore, path))
 
             for rowref in list_of_rowrefs:
                 path = rowref.get_path()
@@ -652,7 +649,7 @@ class HistoryManager:
         dialog.set_transient_for(self.window)
 
     def on_search_db_button_clicked(self, widget):
-        text = self.search_entry.get_text().decode('utf-8')
+        text = self.search_entry.get_text()
         if not text:
             return
 
@@ -665,12 +662,12 @@ class HistoryManager:
     def on_search_results_listview_row_activated(self, widget, path, column):
         # get log_line_id, jid_id from row we double clicked
         log_line_id = self.search_results_liststore[path][0]
-        jid = self.search_results_liststore[path][1].decode('utf-8')
+        jid = self.search_results_liststore[path][1]
         # make it string as in gtk liststores I have them all as strings
         # as this is what db returns so I don't have to fight with types
         jid_id = self._get_jid_id(jid)
 
-        iter_ = self.jids_liststore.get_iter_root()
+        iter_ = self.jids_liststore.get_iter_first()
         while iter_:
             # self.jids_liststore[iter_][1] holds jid_ids
             if self.jids_liststore[iter_][1] == jid_id:
@@ -683,7 +680,7 @@ class HistoryManager:
         path = self.jids_liststore.get_path(iter_)
         self.jids_listview.set_cursor(path)
 
-        iter_ = self.logs_liststore.get_iter_root()
+        iter_ = self.logs_liststore.get_iter_first()
         while iter_:
             # self.logs_liststore[iter_][0] holds lon_line_ids
             if self.logs_liststore[iter_][0] == log_line_id:
@@ -696,4 +693,4 @@ class HistoryManager:
 if __name__ == '__main__':
     signal.signal(signal.SIGINT, signal.SIG_DFL)  # ^C exits the application
     HistoryManager()
-    gtk.main()
+    Gtk.main()
diff --git a/src/history_window.py b/src/history_window.py
index 5a2a428373ccb4a0ddfc3fe56231a8f2dc9b1535..1e67c1ee0f8417307ace2a85e3604c67cd34ac75 100644
--- a/src/history_window.py
+++ b/src/history_window.py
@@ -25,8 +25,9 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GLib
 import time
 import calendar
 
@@ -77,39 +78,38 @@ class HistoryWindow:
         self.checkbutton.connect('toggled',
             self.on_log_history_checkbutton_toggled)
         self.show_status_checkbutton = xml.get_object('show_status_checkbutton')
-        self.query_entry = xml.get_object('query_entry')
-        self.query_combobox = xml.get_object('query_combobox')
-        self.jid_entry = self.query_combobox.child
+        self.search_entry = xml.get_object('search_entry')
+        self.query_liststore = xml.get_object('query_liststore')
+        self.jid_entry = xml.get_object('query_entry')
         self.jid_entry.connect('activate', self.on_jid_entry_activate)
-        self.query_combobox.set_active(0)
         self.results_treeview = xml.get_object('results_treeview')
         self.results_window = xml.get_object('results_scrolledwindow')
         self.search_in_date = xml.get_object('search_in_date')
 
         # contact_name, date, message, time
-        model = gtk.ListStore(str, str, str, str, str)
+        model = Gtk.ListStore(str, str, str, str, str)
         self.results_treeview.set_model(model)
-        col = gtk.TreeViewColumn(_('Name'))
+        col = Gtk.TreeViewColumn(_('Name'))
         self.results_treeview.append_column(col)
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer)
-        col.set_attributes(renderer, text = C_CONTACT_NAME)
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'text', C_CONTACT_NAME)
         col.set_sort_column_id(C_CONTACT_NAME) # user can click this header and sort
         col.set_resizable(True)
 
-        col = gtk.TreeViewColumn(_('Date'))
+        col = Gtk.TreeViewColumn(_('Date'))
         self.results_treeview.append_column(col)
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer)
-        col.set_attributes(renderer, text = C_UNIXTIME)
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'text', C_UNIXTIME)
         col.set_sort_column_id(C_UNIXTIME) # user can click this header and sort
         col.set_resizable(True)
 
-        col = gtk.TreeViewColumn(_('Message'))
+        col = Gtk.TreeViewColumn(_('Message'))
         self.results_treeview.append_column(col)
-        renderer = gtk.CellRendererText()
-        col.pack_start(renderer)
-        col.set_attributes(renderer, text = C_MESSAGE)
+        renderer = Gtk.CellRendererText()
+        col.pack_start(renderer, True)
+        col.add_attribute(renderer, 'text', C_MESSAGE)
         col.set_resizable(True)
 
         self.jid = None # The history we are currently viewing
@@ -119,7 +119,8 @@ class HistoryWindow:
         self.jids_to_search = []
 
         # This will load history too
-        gobject.idle_add(self._fill_completion_dict().next)
+        task = self._fill_completion_dict()
+        GLib.idle_add(next, task)
 
         if jid:
             self.jid_entry.set_text(jid)
@@ -127,11 +128,11 @@ class HistoryWindow:
             self._load_history(None)
 
         gtkgui_helpers.resize_window(self.window,
-            gajim.config.get('history_window_width'),
-            gajim.config.get('history_window_height'))
+                gajim.config.get('history_window_width'),
+                gajim.config.get('history_window_height'))
         gtkgui_helpers.move_window(self.window,
-            gajim.config.get('history_window_x-position'),
-            gajim.config.get('history_window_y-position'))
+                gajim.config.get('history_window_x-position'),
+                gajim.config.get('history_window_y-position'))
 
         xml.connect_signals(self)
         self.window.show_all()
@@ -153,7 +154,7 @@ class HistoryWindow:
         db_jids = gajim.logger.get_jids_in_db()
         completion_dict = dict.fromkeys(db_jids)
 
-        self.accounts_seen_online = gajim.contacts.get_accounts()[:]
+        self.accounts_seen_online = list(gajim.contacts.get_accounts())
 
         # Enhance contacts of online accounts with contact. Needed for mapping below
         for account in self.accounts_seen_online:
@@ -164,12 +165,14 @@ class HistoryWindow:
         muc_active_pix = muc_active_img.get_pixbuf()
         contact_pix = contact_img.get_pixbuf()
 
-        keys = completion_dict.keys()
+        keys = list(completion_dict.keys())
         # Move the actual jid at first so we load history faster
-        actual_jid = self.jid_entry.get_text().decode('utf-8')
+        actual_jid = self.jid_entry.get_text()
         if actual_jid in keys:
             keys.remove(actual_jid)
             keys.insert(0, actual_jid)
+        if '' in keys:
+            keys.remove('')
         if None in keys:
             keys.remove(None)
         # Map jid to info tuple
@@ -203,9 +206,9 @@ class HistoryWindow:
 
             liststore.append((pix, completed))
             self.completion_dict[key] = (info_jid, info_acc, info_name,
-                info_completion)
+                    info_completion)
             self.completion_dict[completed] = (info_jid, info_acc,
-                info_name, info_completion)
+                    info_name, info_completion)
             if key == actual_jid:
                 self._load_history(info_jid, info_acc)
             yield True
@@ -232,7 +235,7 @@ class HistoryWindow:
         del gajim.interface.instances['logs']
 
     def on_history_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             self.save_state()
             self.window.destroy()
 
@@ -241,11 +244,7 @@ class HistoryWindow:
         self.window.destroy()
 
     def on_jid_entry_activate(self, widget):
-        if not self.query_combobox.get_active() < 0:
-            # Don't disable querybox when we have changed the combobox
-            # to GC or All and hit enter
-            return
-        jid = self.jid_entry.get_text().decode('utf-8')
+        jid = self.jid_entry.get_text()
         account = None # we don't know the account, could be any. Search for it!
         self._load_history(jid, account)
         self.results_window.set_property('visible', False)
@@ -259,8 +258,7 @@ class HistoryWindow:
         """
         if jid_or_name and jid_or_name in self.completion_dict:
         # a full qualified jid or a contact name was entered
-            info_jid, info_account, info_name, info_completion = \
-                self.completion_dict[jid_or_name]
+            info_jid, info_account, info_name, info_completion = self.completion_dict[jid_or_name]
             self.jids_to_search = [info_jid]
             self.jid = info_jid
 
@@ -276,14 +274,14 @@ class HistoryWindow:
             else:
                 # Are log disabled for account ?
                 if self.account in gajim.config.get_per('accounts', self.account,
-                'no_log_for').split(' '):
+                        'no_log_for').split(' '):
                     self.checkbutton.set_active(False)
                     self.checkbutton.set_sensitive(False)
                 else:
                     # Are log disabled for jid ?
                     log = True
                     if self.jid in gajim.config.get_per('accounts', self.account,
-                    'no_log_for').split(' '):
+                            'no_log_for').split(' '):
                         log = False
                     self.checkbutton.set_active(log)
                     self.checkbutton.set_sensitive(True)
@@ -292,8 +290,8 @@ class HistoryWindow:
 
             # select logs for last date we have logs with contact
             self.calendar.set_sensitive(True)
-            last_log = gajim.logger.get_last_date_that_has_logs(self.jid,
-                self.account)
+            last_log = \
+                    gajim.logger.get_last_date_that_has_logs(self.jid, self.account)
 
             date = time.localtime(last_log)
 
@@ -302,8 +300,8 @@ class HistoryWindow:
             self.calendar.select_month(gtk_month, y)
             self.calendar.select_day(d)
 
-            self.query_entry.set_sensitive(True)
-            self.query_entry.grab_focus()
+            self.search_entry.set_sensitive(True)
+            self.search_entry.grab_focus()
 
             title = _('Conversation History with %s') % info_name
             self.window.set_title(title)
@@ -315,7 +313,7 @@ class HistoryWindow:
             self.account = None
 
             self.history_buffer.set_text('') # clear the buffer
-            self.query_entry.set_sensitive(False)
+            self.search_entry.set_sensitive(False)
 
             self.checkbutton.set_sensitive(False)
             self.calendar.set_sensitive(False)
@@ -354,7 +352,7 @@ class HistoryWindow:
         try:
             log_days = gajim.logger.get_days_with_logs(self.jid, year, month,
                 days_in_this_month, self.account)
-        except exceptions.PysqliteOperationalError, e:
+        except exceptions.PysqliteOperationalError as e:
             dialogs.ErrorDialog(_('Disk Error'), str(e))
             return
         for day in log_days:
@@ -384,8 +382,7 @@ class HistoryWindow:
         self.last_time_printout = 0
         show_status = self.show_status_checkbutton.get_active()
 
-        lines = gajim.logger.get_conversation_for_date(self.jid, year, month,
-            day, self.account)
+        lines = gajim.logger.get_conversation_for_date(self.jid, year, month, day, self.account)
         # lines holds list with tupples that have:
         # contact_name, time, kind, show, message
         for line in lines:
@@ -402,7 +399,7 @@ class HistoryWindow:
         Add a new line in textbuffer
         """
         if not message and kind not in (constants.KIND_STATUS,
-        constants.KIND_GCSTATUS):
+                constants.KIND_GCSTATUS):
             return
         buf = self.history_buffer
         end_iter = buf.get_end_iter()
@@ -414,13 +411,13 @@ class HistoryWindow:
             buf.insert(end_iter, tim) # add time
         elif gajim.config.get('print_time') == 'sometimes':
             every_foo_seconds = 60 * gajim.config.get(
-                'print_ichat_every_foo_minutes')
+                    'print_ichat_every_foo_minutes')
             seconds_passed = tim - self.last_time_printout
             if seconds_passed > every_foo_seconds:
                 self.last_time_printout = tim
                 tim = time.strftime('%X ', time.localtime(float(tim)))
                 buf.insert_with_tags_by_name(end_iter, tim + '\n',
-                    'time_sometimes')
+                        'time_sometimes')
 
         tag_name = ''
         tag_msg = ''
@@ -441,7 +438,7 @@ class HistoryWindow:
             else:
                 # we don't have roster, we don't know our own nick, use first
                 # account one (urk!)
-                account = gajim.contacts.get_accounts()[0]
+                account = list(gajim.contacts.get_accounts())[0]
                 contact_name = gajim.nicks[account]
             tag_name = 'outgoing'
             tag_msg = 'outgoingtxt'
@@ -449,11 +446,11 @@ class HistoryWindow:
             # message here (if not None) is status message
             if message:
                 message = _('%(nick)s is now %(status)s: %(status_msg)s') %\
-                    {'nick': contact_name, 'status': helpers.get_uf_show(show),
-                    'status_msg': message }
+                        {'nick': contact_name, 'status': helpers.get_uf_show(show),
+                        'status_msg': message }
             else:
-                message = _('%(nick)s is now %(status)s') % {
-                    'nick': contact_name, 'status': helpers.get_uf_show(show) }
+                message = _('%(nick)s is now %(status)s') % {'nick': contact_name,
+                        'status': helpers.get_uf_show(show) }
             tag_msg = 'status'
         else: # 'status'
             # message here (if not None) is status message
@@ -464,10 +461,10 @@ class HistoryWindow:
                     message = _('Error')
             elif message:
                 message = _('Status is now: %(status)s: %(status_msg)s') % \
-                    {'status': helpers.get_uf_show(show), 'status_msg': message}
+                        {'status': helpers.get_uf_show(show), 'status_msg': message}
             else:
                 message = _('Status is now: %(status)s') % { 'status':
-                    helpers.get_uf_show(show) }
+                        helpers.get_uf_show(show) }
             tag_msg = 'status'
 
         if message.startswith('/me ') or message.startswith('/me\n'):
@@ -482,8 +479,10 @@ class HistoryWindow:
                 after_str = gajim.config.get('after_nickname')
                 after_str = helpers.from_one_line(after_str)
                 format = before_str + contact_name + after_str + ' '
-                buf.insert_with_tags_by_name(end_iter, format, tag_name)
-
+                if tag_name:
+                    buf.insert_with_tags_by_name(end_iter, format, tag_name)
+                else:
+                    buf.insert(end_iter, format)
         if subject:
             message = _('Subject: %s\n') % subject + message
         xhtml = None
@@ -492,14 +491,16 @@ class HistoryWindow:
 
         if tag_msg:
             self.history_textview.print_real_text(message, [tag_msg],
-                name=contact_name, xhtml=xhtml)
+                    name=contact_name, xhtml=xhtml)
         else:
             self.history_textview.print_real_text(message, name=contact_name,
                 xhtml=xhtml)
-        self.history_textview.print_real_text('\n')
+        buffer_ = self.history_textview.tv.get_buffer()
+        eob = buffer_.get_end_iter()
+        buffer_.insert_with_tags_by_name(eob, '\n', 'eol')
 
-    def on_query_entry_activate(self, widget):
-        text = self.query_entry.get_text()
+    def on_search_entry_activate(self, widget):
+        text = self.search_entry.get_text()
         model = self.results_treeview.get_model()
         model.clear()
         if text == '':
@@ -509,16 +510,15 @@ class HistoryWindow:
             self.results_window.set_property('visible', True)
 
         # perform search in preselected jids
-        # jids are preselected with the query_combobox (all, single jid...)
+        # jids are preselected with the query_entry
         for jid in self.jids_to_search:
             account = self.completion_dict[jid][C_INFO_ACCOUNT]
             if account is None:
-                # We do not know an account. This can only happen if the contact
-                # is offine, or if we browse a groupchat history. The account is
-                # not needed, a dummy can be set.
-                # This may leed to wrong self nick in the displayed history
-                # (Uggh!)
-                account = gajim.contacts.get_accounts()[0]
+                # We do not know an account. This can only happen if the contact is offine,
+                # or if we browse a groupchat history. The account is not needed, a dummy can
+                # be set.
+                # This may leed to wrong self nick in the displayed history (Uggh!)
+                account = list(gajim.contacts.get_accounts())[0]
 
             year, month, day = False, False, False
             if self.search_in_date.get_active():
@@ -528,8 +528,8 @@ class HistoryWindow:
             show_status = self.show_status_checkbutton.get_active()
 
             # contact_name, time, kind, show, message, subject
-            results = gajim.logger.get_search_results_for_query(jid, text,
-                account, year, month, day)
+            results = gajim.logger.get_search_results_for_query(
+                                    jid, text, account, year, month, day)
             #FIXME:
             # add "subject:  | message: " in message column if kind is single
             # also do we need show at all? (we do not search on subject)
@@ -551,31 +551,7 @@ class HistoryWindow:
 
                 #  jid (to which log is assigned to), name, date, message,
                 # time (full unix time)
-                model.append((jid, contact_name, date, message, tim))
-
-    def on_query_combobox_changed(self, widget):
-        if self.query_combobox.get_active() < 0:
-            return # custom entry
-        self.account = None
-        self.jid = None
-        self.jids_to_search = []
-        self._load_history(None) # clear textview
-
-        if self.query_combobox.get_active() == 0:
-            # JID or Contact name
-            self.query_entry.set_sensitive(False)
-            self.jid_entry.grab_focus()
-        if self.query_combobox.get_active() == 1:
-            # Groupchat Histories
-            self.query_entry.set_sensitive(True)
-            self.query_entry.grab_focus()
-            self.jids_to_search = (jid for jid in gajim.logger.get_jids_in_db()
-                if gajim.logger.jid_is_room_jid(jid))
-        if self.query_combobox.get_active() == 2:
-            # All Chat Histories
-            self.query_entry.set_sensitive(True)
-            self.query_entry.grab_focus()
-            self.jids_to_search = gajim.logger.get_jids_in_db()
+                model.append((jid, contact_name, date, message, str(tim)))
 
     def on_results_treeview_row_activated(self, widget, path, column):
         """
@@ -618,25 +594,24 @@ class HistoryWindow:
         timestamp_str = gajim.config.get('time_stamp')
         timestamp_str = helpers.from_one_line(timestamp_str)
         tim = time.strftime(timestamp_str, local_time)
-        result = start_iter.forward_search(tim, gtk.TEXT_SEARCH_VISIBLE_ONLY,
+        result = start_iter.forward_search(tim, Gtk.TextSearchFlags.VISIBLE_ONLY,
                 None)
         if result is not None:
             match_start_iter, match_end_iter = result
-            # include '[' or other character before time
-            match_start_iter.backward_char()
+            match_start_iter.backward_char() # include '[' or other character before time
             match_end_iter.forward_line() # highlight all message not just time
             self.history_buffer.apply_tag_by_name('highlight', match_start_iter,
-                match_end_iter)
+                    match_end_iter)
 
             match_start_mark = self.history_buffer.create_mark('match_start',
-                match_start_iter, True)
+                    match_start_iter, True)
             self.history_textview.tv.scroll_to_mark(match_start_mark, 0, True)
 
     def on_log_history_checkbutton_toggled(self, widget):
         # log conversation history?
         oldlog = True
         no_log_for = gajim.config.get_per('accounts', self.account,
-            'no_log_for').split()
+                'no_log_for').split()
         if self.jid in no_log_for:
             oldlog = False
         log = widget.get_active()
@@ -646,7 +621,7 @@ class HistoryWindow:
             no_log_for.remove(self.jid)
         if oldlog != log:
             gajim.config.set_per('accounts', self.account, 'no_log_for',
-                ' '.join(no_log_for))
+                    ' '.join(no_log_for))
 
     def on_show_status_checkbutton_toggled(self, widget):
         # reload logs
@@ -659,7 +634,7 @@ class HistoryWindow:
         self.jid_entry.set_text(jid)
         if account and account not in self.accounts_seen_online:
             # Update dict to not only show bare jid
-            gobject.idle_add(self._fill_completion_dict().next)
+            GLib.idle_add(next, self._fill_completion_dict())
         else:
             # Only in that case because it's called by self._fill_completion_dict()
             # otherwise
@@ -667,7 +642,7 @@ class HistoryWindow:
         self.results_window.set_property('visible', False)
 
     def save_state(self):
-        x, y = self.window.window.get_root_origin()
+        x, y = self.window.get_window().get_root_origin()
         width, height = self.window.get_size()
 
         gajim.config.set('history_window_x-position', x)
diff --git a/src/htmltextview.py b/src/htmltextview.py
index fbb24ee655ad63eae114b8c33ea3984723c79bb6..843865c8c9ef45cf0e9ca1b52b5c0b62387eb62c 100644
--- a/src/htmltextview.py
+++ b/src/htmltextview.py
@@ -26,7 +26,7 @@
 ##
 
 """
-A gtk.TextView-based renderer for XHTML-IM, as described in:
+A Gtk.TextView-based renderer for XHTML-IM, as described in:
   http://xmpp.org/extensions/xep-0071.html
 
 Starting with the version posted by Gustavo Carneiro,
@@ -35,13 +35,16 @@ with the markup that docutils generate, and also more
 modular.
 """
 
-import gobject
-import pango
-import gtk
+from gi.repository import GObject
+from gi.repository import GLib
+from gi.repository import Pango
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
 import xml.sax, xml.sax.handler
 import re
-from cStringIO import StringIO
-import urllib2
+from io import StringIO
+import urllib
 import operator
 
 if __name__ == '__main__':
@@ -64,8 +67,8 @@ whitespace_rx = re.compile('\\s+')
 allwhitespace_rx = re.compile('^\\s*$')
 
 # pixels = points * display_resolution
-display_resolution = 0.3514598*(gtk.gdk.screen_height() /
-                                        float(gtk.gdk.screen_height_mm()))
+display_resolution = 0.3514598*(Gdk.Screen.height() /
+                                        float(Gdk.Screen.height_mm()))
 
 # embryo of CSS classes
 classes = {
@@ -194,9 +197,9 @@ for name in BLOCK_HEAD:
 def _parse_css_color(color):
     if color.startswith('rgb(') and color.endswith(')'):
         r, g, b = [int(c)*257 for c in color[4:-1].split(',')]
-        return gtk.gdk.Color(r, g, b)
+        return Gdk.Color(r, g, b)
     else:
-        return gtk.gdk.color_parse(color)
+        return Gdk.color_parse(color)
 
 def style_iter(style):
     return ([x.strip() for x in item.split(':', 1)] for item in style.split(';')\
@@ -219,7 +222,7 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
         self.text = ''
         self.starting=True
         self.preserve = False
-        self.styles = [] # a gtk.TextTag or None, for each span level
+        self.styles = [] # a Gtk.TextTag or None, for each span level
         self.list_counters = [] # stack (top at head) of list
                                 # counters, or None for unordered list
 
@@ -236,7 +239,7 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
     def _get_current_attributes(self):
         attrs = self.textview.get_default_attributes()
         self.iter.backward_char()
-        self.iter.get_attributes(attrs)
+        attrs = (self.iter.get_attributes())[1]
         self.iter.forward_char()
         return attrs
 
@@ -252,13 +255,19 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
         """
         if value.endswith('%'):
             val = float(value[:-1])
-            sign = cmp(val, 0)
+            if val > 0:
+                sign = 1
+            elif val < 0:
+                sign = -1
+            else:
+                sign = 0
             # limits: 1% to 500%
             val = sign*max(1, min(abs(val), 500))
             frac = val/100
             if font_relative:
                 attrs = self._get_current_attributes()
-                font_size = attrs.font.get_size() / pango.SCALE
+                if not attrs.font:
+                    font_size = self.get_font_size()
                 callback(frac*display_resolution*font_size, *args)
             elif block_relative:
                 # CSS says 'Percentage values: refer to width of the closest
@@ -277,7 +286,12 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
 
         def get_val():
             val = float(value[:-2])
-            sign = cmp(val, 0)
+            if val > 0:
+                sign = 1
+            elif val < 0:
+                sign = -1
+            else:
+                sign = 0
             # validate length
             return sign*max(minl, min(abs(val*display_resolution), maxl))
         if value.endswith('pt'): # points
@@ -285,14 +299,17 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
 
         elif value.endswith('em'): # ems, the width of the element's font
             attrs = self._get_current_attributes()
-            font_size = attrs.font.get_size() / pango.SCALE
+            if not attrs.font:
+                font_size = self.get_font_size()
             callback(get_val()*display_resolution*font_size, *args)
 
         elif value.endswith('ex'): # x-height, ~ the height of the letter 'x'
             # FIXME: figure out how to calculate this correctly
             #        for now 'em' size is used as approximation
+
             attrs = self._get_current_attributes()
-            font_size = attrs.font.get_size() / pango.SCALE
+            if not attrs.font:
+                font_size = self.get_font_size()
             callback(get_val()*display_resolution*font_size, *args)
 
         elif value.endswith('px'): # pixels
@@ -302,7 +319,12 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
             try:
                 # TODO: isn't "no units" interpreted as pixels?
                 val = int(value)
-                sign = cmp(val, 0)
+                if val > 0:
+                    sign = 1
+                elif val < 0:
+                    sign = -1
+                else:
+                    sign = 0
                 # validate length
                 val = sign*max(minl, min(abs(val), maxl))
                 callback(val, *args)
@@ -320,26 +342,36 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
 
     def _parse_style_font_size(self, tag, value):
         try:
+            # see http://developer.gnome.org/pango/stable/pango-Text-Attributes.html#PANGO-SCALE-XX-SMALL:CAPS
+            # http://consciouslyusing.blogspot.ru/2012/01/heads-up-missing-pango-text-scale.html
             scale = {
-                    'xx-small': pango.SCALE_XX_SMALL,
-                    'x-small': pango.SCALE_X_SMALL,
-                    'small': pango.SCALE_SMALL,
-                    'medium': pango.SCALE_MEDIUM,
-                    'large': pango.SCALE_LARGE,
-                    'x-large': pango.SCALE_X_LARGE,
-                    'xx-large': pango.SCALE_XX_LARGE,
+                    #'xx-small': Pango.SCALE_XX_SMALL,
+                    #'x-small': Pango.SCALE_X_SMALL,
+                    #'small': Pango.SCALE_SMALL,
+                    #'medium': Pango.SCALE_MEDIUM,
+                    #'large': Pango.SCALE_LARGE,
+                    #'x-large': Pango.SCALE_X_LARGE,
+                    #'xx-large': Pango.SCALE_XX_LARGE,
+                    'xx-small': 0.5787037037037,
+                    'x-small': 0.6444444444444,
+                    'small': 0.8333333333333,
+                    'medium': 1.0,
+                    'large': 1.2,
+                    'x-large': 1.4399999999999,
+                    'xx-large': 1.728,
                     } [value]
         except KeyError:
             pass
         else:
             attrs = self._get_current_attributes()
-            tag.set_property('scale', scale / attrs.font_scale)
+            if attrs.font_scale ==0:
+                tag.set_property('scale', scale)
             return
         if value == 'smaller':
-            tag.set_property('scale', pango.SCALE_SMALL)
+            tag.set_property('scale', 0.8333333333333)
             return
         if value == 'larger':
-            tag.set_property('scale', pango.SCALE_LARGE)
+            tag.set_property('scale', 1.2)
             return
         # font relative (5 ~ 4pt, 110 ~ 72pt)
         self._parse_length(value, True, False, 5, 110,self.__parse_font_size_cb,
@@ -348,9 +380,9 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
     def _parse_style_font_style(self, tag, value):
         try:
             style = {
-                    'normal': pango.STYLE_NORMAL,
-                    'italic': pango.STYLE_ITALIC,
-                    'oblique': pango.STYLE_OBLIQUE,
+                    'normal': Pango.Style.NORMAL,
+                    'italic': Pango.Style.ITALIC,
+                    'oblique': Pango.Style.OBLIQUE,
                     } [value]
         except KeyError:
             log.warning('unknown font-style %s' % value)
@@ -378,17 +410,17 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
         # TODO: missing 'bolder' and 'lighter'
         try:
             weight = {
-                    '100': pango.WEIGHT_ULTRALIGHT,
-                    '200': pango.WEIGHT_ULTRALIGHT,
-                    '300': pango.WEIGHT_LIGHT,
-                    '400': pango.WEIGHT_NORMAL,
-                    '500': pango.WEIGHT_NORMAL,
-                    '600': pango.WEIGHT_BOLD,
-                    '700': pango.WEIGHT_BOLD,
-                    '800': pango.WEIGHT_ULTRABOLD,
-                    '900': pango.WEIGHT_HEAVY,
-                    'normal': pango.WEIGHT_NORMAL,
-                    'bold': pango.WEIGHT_BOLD,
+                    '100': Pango.Weight.ULTRALIGHT,
+                    '200': Pango.Weight.ULTRALIGHT,
+                    '300': Pango.Weight.LIGHT,
+                    '400': Pango.Weight.NORMAL,
+                    '500': Pango.Weight.NORMAL,
+                    '600': Pango.Weight.BOLD,
+                    '700': Pango.Weight.BOLD,
+                    '800': Pango.Weight.ULTRABOLD,
+                    '900': Pango.Weight.HEAVY,
+                    'normal': Pango.Weight.NORMAL,
+                    'bold': Pango.Weight.BOLD,
                     } [value]
         except KeyError:
             log.warning('unknown font-style %s' % value)
@@ -401,10 +433,10 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
     def _parse_style_text_align(self, tag, value):
         try:
             align = {
-                    'left': gtk.JUSTIFY_LEFT,
-                    'right': gtk.JUSTIFY_RIGHT,
-                    'center': gtk.JUSTIFY_CENTER,
-                    'justify': gtk.JUSTIFY_FILL,
+                    'left': Gtk.Justification.LEFT,
+                    'right': Gtk.Justification.RIGHT,
+                    'center': Gtk.Justification.CENTER,
+                    'justify': Gtk.Justification.FILL,
                     } [value]
         except KeyError:
             log.warning('Invalid text-align:%s requested' % value)
@@ -414,12 +446,12 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
     def _parse_style_text_decoration(self, tag, value):
         values = value.split(' ')
         if 'none' in values:
-            tag.set_property('underline', pango.UNDERLINE_NONE)
+            tag.set_property('underline', Pango.Underline.NONE)
             tag.set_property('strikethrough', False)
         if 'underline' in values:
-            tag.set_property('underline', pango.UNDERLINE_SINGLE)
+            tag.set_property('underline', Pango.Underline.SINGLE)
         else:
-            tag.set_property('underline', pango.UNDERLINE_NONE)
+            tag.set_property('underline', Pango.Underline.NONE)
         if 'line-through' in values:
             tag.set_property('strikethrough', True)
         else:
@@ -431,11 +463,11 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
 
     def _parse_style_white_space(self, tag, value):
         if value == 'pre':
-            tag.set_property('wrap_mode', gtk.WRAP_NONE)
+            tag.set_property('wrap_mode', Gtk.WrapMode.NONE)
         elif value == 'normal':
-            tag.set_property('wrap_mode', gtk.WRAP_WORD)
+            tag.set_property('wrap_mode', Gtk.WrapMode.WORD)
         elif value == 'nowrap':
-            tag.set_property('wrap_mode', gtk.WRAP_NONE)
+            tag.set_property('wrap_mode', Gtk.WrapMode.NONE)
 
     def __length_tag_cb(self, value, tag, propname):
         try:
@@ -483,15 +515,16 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
             tag.type_ = type_ # to be used by the URL handler
             tag.connect('event', self.textview.hyperlink_handler, 'url')
             tag.set_property('foreground', gajim.config.get('urlmsgcolor'))
-            tag.set_property('underline', pango.UNDERLINE_SINGLE)
+            tag.set_property('underline', Pango.Underline.SINGLE)
             tag.is_anchor = True
         if title:
             tag.title = title
         return tag
 
-    def _update_img(self, (mem, alt), attrs, img_mark):
+    def _update_img(self, output, attrs, img_mark):
         '''Callback function called after the function helpers.download_image.
         '''
+        mem, alt = output
         self._process_img(attrs, (mem, alt, img_mark))
 
     def _process_img(self, attrs, loaded=None):
@@ -507,7 +540,8 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
                 # The "data" URL scheme http://tools.ietf.org/html/rfc2397
                 import base64
                 img = attrs['src'].split(',')[1]
-                mem = base64.standard_b64decode(urllib2.unquote(img))
+                mem = base64.standard_b64decode(urllib.parse.unquote(
+                    img).encode('utf-8'))
             elif loaded is not None:
                 (mem, alt, replace_mark) = loaded
                 update = True
@@ -526,7 +560,7 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
                 # Caveat: GdkPixbuf is known not to be safe to load
                 # images from network... this program is now potentially
                 # hackable ;)
-                loader = gtk.gdk.PixbufLoader()
+                loader = GdkPixbuf.PixbufLoader()
                 dims = [0, 0]
                 def height_cb(length):
                     dims[1] = length
@@ -549,7 +583,7 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
                     """
                     FIXME: Floats should be relative to the whole textview, and
                     resize with it. This needs new pifbufs for every resize,
-                    gtk.gdk.Pixbuf.scale_simple or similar.
+                    GdkPixbuf.Pixbuf.scale_simple or similar.
                     """
                     if isinstance(dims[0], float):
                         dims[0] = int(dims[0]*w)
@@ -586,7 +620,7 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
                     self.textbuf.delete_mark(tmpmark)
             else:
                 self._insert_text('[IMG: %s]' % alt, working_iter)
-        except Exception, ex:
+        except Exception as ex:
             log.error('Error loading image ' + str(ex))
             pixbuf = None
             alt = attrs.get('alt', 'Broken image')
@@ -648,7 +682,7 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
             self._insert_text(text.strip('\n'))
 
     def _anchor_event(self, tag, textview, event, iter_, href, type_):
-        if event.type == gtk.gdk.BUTTON_PRESS:
+        if event.type == Gdk.EventType.BUTTON_PRESS:
             self.textview.emit('url-clicked', href, type_)
             return True
         return False
@@ -734,7 +768,7 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
             self.list_counters.append(0)
         elif name == 'li':
             if self.list_counters[-1] is None:
-                li_head = unichr(0x2022)
+                li_head = chr(0x2022)
             else:
                 self.list_counters[-1] += 1
                 li_head = '%i.' % self.list_counters[-1]
@@ -761,15 +795,8 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
         elif name == 'hr':
             #FIXME: plenty of unused attributes (width, height,...) :)
             self._jump_line()
-            try:
-                if self.conv_textbuf:
-                    self.conv_textbuf.insert_pixbuf(self.iter,
-                        self.conv_textview.focus_out_line_pixbuf)
-                else:
-                    self._insert_text(u'\u2550'*40)
-                self._jump_line()
-            except Exception, e:
-                log.debug(str('Error in hr'+e))
+            self._insert_text('\u2015'*40)
+            self._jump_line()
         elif name in LIST_ELEMS:
             self.list_counters.pop()
         elif name == 'li':
@@ -798,11 +825,16 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
             self._jump_line()
         self._end_span()
 
-class HtmlTextView(gtk.TextView):
+    def get_font_size(self):
+        context = self.conv_textview.tv.get_style_context()
+        font = context.get_font(Gtk.StateType.NORMAL)
+        return font.get_size() / Pango.SCALE
+
+class HtmlTextView(Gtk.TextView):
 
     def __init__(self):
-        gobject.GObject.__init__(self)
-        self.set_wrap_mode(gtk.WRAP_CHAR)
+        GObject.GObject.__init__(self)
+        self.set_wrap_mode(Gtk.WrapMode.CHAR)
         self.set_editable(False)
         self._changed_cursor = False
         self.connect('destroy', self.__destroy_event)
@@ -814,9 +846,7 @@ class HtmlTextView(gtk.TextView):
         self.connect('copy-clipboard', self.on_html_text_view_copy_clipboard)
         self.id_ = self.connect('button-release-event',
             self.on_left_mouse_button_release)
-        buffer_ = self.get_buffer()
-        buffer_.create_tag('eol')
-
+        self.get_buffer().create_tag('eol')
         self.tooltip = tooltips.BaseTooltip()
         self.config = gajim.config
         self.interface = gajim.interface
@@ -828,23 +858,23 @@ class HtmlTextView(gtk.TextView):
         self.tagURL = buffer_.create_tag('url')
         color = gajim.config.get('urlmsgcolor')
         self.tagURL.set_property('foreground', color)
-        self.tagURL.set_property('underline', pango.UNDERLINE_SINGLE)
-        self.tagURL.connect('event', self._hyperlink_handler, 'url')
+        self.tagURL.set_property('underline', Pango.Underline.SINGLE)
+        self.tagURL.connect('event', self.hyperlink_handler, 'url')
 
         self.tagMail = buffer_.create_tag('mail')
         self.tagMail.set_property('foreground', color)
-        self.tagMail.set_property('underline', pango.UNDERLINE_SINGLE)
-        self.tagMail.connect('event', self._hyperlink_handler, 'mail')
+        self.tagMail.set_property('underline', Pango.Underline.SINGLE)
+        self.tagMail.connect('event', self.hyperlink_handler, 'mail')
 
         self.tagXMPP = buffer_.create_tag('xmpp')
         self.tagXMPP.set_property('foreground', color)
-        self.tagXMPP.set_property('underline', pango.UNDERLINE_SINGLE)
-        self.tagXMPP.connect('event', self._hyperlink_handler, 'xmpp')
+        self.tagXMPP.set_property('underline', Pango.Underline.SINGLE)
+        self.tagXMPP.connect('event', self.hyperlink_handler, 'xmpp')
 
         self.tagSthAtSth = buffer_.create_tag('sth_at_sth')
         self.tagSthAtSth.set_property('foreground', color)
-        self.tagSthAtSth.set_property('underline', pango.UNDERLINE_SINGLE)
-        self.tagSthAtSth.connect('event', self._hyperlink_handler, 'sth_at_sth')
+        self.tagSthAtSth.set_property('underline', Pango.Underline.SINGLE)
+        self.tagSthAtSth.connect('event', self.hyperlink_handler, 'sth_at_sth')
 
     def __destroy_event(self, widget):
         if self.tooltip.timeout != 0:
@@ -852,15 +882,18 @@ class HtmlTextView(gtk.TextView):
 
     def __leave_event(self, widget, event):
         if self._changed_cursor:
-            window = widget.get_window(gtk.TEXT_WINDOW_TEXT)
-            window.set_cursor(gtk.gdk.Cursor(gtk.gdk.XTERM))
+            window = widget.get_window(Gtk.TextWindowType.TEXT)
+            window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.XTERM))
             self._changed_cursor = False
 
     def show_tooltip(self, tag):
         if not self.tooltip.win:
             # check if the current pointer is still over the line
-            x, y, _ = self.window.get_pointer()
-            x, y = self.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, x, y)
+            w = self.get_window(Gtk.TextWindowType.TEXT)
+            device = w.get_display().get_device_manager().get_client_pointer()
+            pointer = w.get_device_position(device)
+            x = pointer[1]
+            y = pointer[2]
             tags = self.get_iter_at_location(x, y).get_tags()
             is_over_anchor = False
             for tag_ in tags:
@@ -871,13 +904,15 @@ class HtmlTextView(gtk.TextView):
                 return
             text = getattr(tag, 'title', False)
             if text:
-                pointer = self.get_pointer()
-                position = self.window.get_origin()
-                self.tooltip.show_tooltip(text, 8, position[1] + pointer[1])
+                position = w.get_origin()[1:]
+                self.tooltip.show_tooltip(text, 8, position[1] + y)
 
     def __motion_notify_event(self, widget, event):
-        x, y, _ = widget.window.get_pointer()
-        x, y = widget.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, x, y)
+        w = widget.get_window(Gtk.TextWindowType.TEXT)
+        device = w.get_display().get_device_manager().get_client_pointer()
+        pointer = w.get_device_position(device)
+        x = pointer[1]
+        y = pointer[2]
         tags = widget.get_iter_at_location(x, y).get_tags()
         anchor_tags = [tag for tag in tags if getattr(tag, 'is_anchor', False)]
         if self.tooltip.timeout != 0:
@@ -885,14 +920,12 @@ class HtmlTextView(gtk.TextView):
             if not anchor_tags:
                 self.tooltip.hide_tooltip()
         if not self._changed_cursor and anchor_tags:
-            window = widget.get_window(gtk.TEXT_WINDOW_TEXT)
-            window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2))
+            w.set_cursor(Gdk.Cursor.new(Gdk.CursorType.HAND2))
             self._changed_cursor = True
-            self.tooltip.timeout = gobject.timeout_add(500, self.show_tooltip,
+            self.tooltip.timeout = GLib.timeout_add(500, self.show_tooltip,
                 anchor_tags[0])
         elif self._changed_cursor and not anchor_tags:
-            window = widget.get_window(gtk.TEXT_WINDOW_TEXT)
-            window.set_cursor(gtk.gdk.Cursor(gtk.gdk.XTERM))
+            w.set_cursor(Gdk.Cursor.new(Gdk.CursorType.XTERM))
             self._changed_cursor = False
         return False
 
@@ -900,8 +933,8 @@ class HtmlTextView(gtk.TextView):
         helpers.launch_browser_mailer(kind, text)
 
     def on_copy_link_activate(self, widget, text):
-        clip = gtk.clipboard_get()
-        clip.set_text(text)
+        clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
+        clip.set_text(text, -1)
 
 #    def on_start_chat_activate(self, widget, jid):
 #        gajim.interface.new_chat_from_jid(self.account, jid)
@@ -916,7 +949,8 @@ class HtmlTextView(gtk.TextView):
         dialogs.AddNewContactWindow(self.account, jid)
 
     def make_link_menu(self, event, kind, text):
-        xml = gtkgui_helpers.get_gtk_builder('chat_context_menu.ui')
+        from gtkgui_helpers import get_gtk_builder
+        xml = get_gtk_builder('chat_context_menu.ui')
         menu = xml.get_object('chat_context_menu')
         childs = menu.get_children()
         if kind == 'url':
@@ -972,7 +1006,7 @@ class HtmlTextView(gtk.TextView):
         menu.popup(None, None, None, event.button, event.time)
 
     def hyperlink_handler(self, texttag, widget, event, iter_, kind):
-        if event.type == gtk.gdk.BUTTON_PRESS:
+        if event.type == Gdk.EventType.BUTTON_PRESS:
             begin_iter = iter_.copy()
             # we get the begining of the tag
             while not begin_iter.begins_tag(texttag):
@@ -994,7 +1028,7 @@ class HtmlTextView(gtk.TextView):
                     kind = 'sth_at_sth'
             else:
                 word = self.textview.get_buffer().get_text(begin_iter,
-                    end_iter).decode('utf-8')
+                    end_iter)
 
             if event.button == 3: # right click
                 self.make_link_menu(event, kind, word)
@@ -1036,17 +1070,18 @@ class HtmlTextView(gtk.TextView):
         #    buffer_.insert(eob, '\n')
 
     def on_html_text_view_copy_clipboard(self, unused_data):
-        clipboard = self.get_clipboard(gtk.gdk.SELECTION_CLIPBOARD)
-        clipboard.set_text(self.get_selected_text())
+        clipboard = self.get_clipboard(Gdk.SELECTION_CLIPBOARD)
+        selected = self.get_selected_text()
+        clipboard.set_text(selected, -1)
         self.emit_stop_by_name('copy-clipboard')
 
     def on_html_text_view_realized(self, unused_data):
         self.get_buffer().remove_selection_clipboard(self.get_clipboard(
-            gtk.gdk.SELECTION_PRIMARY))
+            Gdk.SELECTION_PRIMARY))
 
     def on_html_text_view_unrealized(self, unused_data):
         self.get_buffer().add_selection_clipboard(self.get_clipboard(
-            gtk.gdk.SELECTION_PRIMARY))
+            Gdk.SELECTION_PRIMARY))
 
     def on_left_mouse_button_release(self, widget, event):
         if event.button != 1:
@@ -1056,8 +1091,9 @@ class HtmlTextView(gtk.TextView):
         if bounds:
             # textview can be hidden while we add a new line in it.
             if self.has_screen():
-                clipboard = self.get_clipboard(gtk.gdk.SELECTION_PRIMARY)
-                clipboard.set_text(self.get_selected_text())
+                clipboard = self.get_clipboard(Gdk.SELECTION_PRIMARY)
+                selected = self.get_selected_text()
+                clipboard.set_text(selected, -1)
 
     def get_selected_text(self):
         bounds = self.get_buffer().get_selection_bounds()
@@ -1067,10 +1103,10 @@ class HtmlTextView(gtk.TextView):
 
             while (search_iter.compare(end)):
                 character = search_iter.get_char()
-                if character == u'\ufffc':
+                if character == '\ufffc':
                     anchor = search_iter.get_child_anchor()
                     if anchor:
-                        text = anchor.get_data('plaintext')
+                        text = anchor.plaintext
                         if text:
                             selection+=text
                     else:
@@ -1099,10 +1135,6 @@ if __name__ == '__main__':
 
     htmlview = ConversationTextview(None)
 
-    path = gtkgui_helpers.get_icon_path('gajim-muc_separator')
-    # use this for hr
-    htmlview.tv.focus_out_line_pixbuf =  gtk.gdk.pixbuf_new_from_file(path)
-
     tooltip = tooltips.BaseTooltip()
 
     def on_textview_motion_notify_event(widget, event):
@@ -1110,20 +1142,20 @@ if __name__ == '__main__':
         Change the cursor to a hand when we are over a mail or an url
         """
         global change_cursor
-        pointer_x, pointer_y = htmlview.tv.window.get_pointer()[0:2]
-        x, y = htmlview.tv.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT,
-            pointer_x, pointer_y)
+        w = htmlview.tv.get_window(Gtk.TextWindowType.TEXT)
+        device = w.get_display().get_device_manager().get_client_pointer()
+        pointer = w.get_device_position(device)
+        x = pointer[1]
+        y = pointer[2]
         tags = htmlview.tv.get_iter_at_location(x, y).get_tags()
         if change_cursor:
-            htmlview.tv.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(
-                gtk.gdk.Cursor(gtk.gdk.XTERM))
+            w.set_cursor(Gdk.Cursor.new(Gdk.CursorType.XTERM))
             change_cursor = None
         tag_table = htmlview.tv.get_buffer().get_tag_table()
         for tag in tags:
             try:
                 if tag.is_anchor:
-                    htmlview.tv.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(
-                        gtk.gdk.Cursor(gtk.gdk.HAND2))
+                    w.set_cursor(Gdk.Cursor.new(Gdk.CursorType.HAND2))
                     change_cursor = tag
                 elif tag == tag_table.lookup('focus-out-line'):
                     over_line = True
@@ -1135,16 +1167,16 @@ if __name__ == '__main__':
         #       if not over_line:
         #               line_tooltip.hide_tooltip()
         #if over_line and not line_tooltip.win:
-        #       line_tooltip.timeout = gobject.timeout_add(500,
+        #       line_tooltip.timeout = GLib.timeout_add(500,
         #               show_line_tooltip)
-        #       htmlview.tv.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(
-        #               gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
+        #       htmlview.tv.get_window(Gtk.TextWindowType.TEXT).set_cursor(
+        #               Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR))
         #       change_cursor = tag
 
     htmlview.tv.connect('motion_notify_event', on_textview_motion_notify_event)
 
     def handler(texttag, widget, event, iter_, kind):
-        if event.type == gtk.gdk.BUTTON_PRESS:
+        if event.type == Gdk.EventType.BUTTON_PRESS:
             pass
 
     htmlview.tv.hyperlink_handler = htmlview.hyperlink_handler
@@ -1265,19 +1297,19 @@ hhx4dbgYKAAA7' alt='Larry'/>
     </body>
     ''')
     htmlview.tv.show()
-    sw = gtk.ScrolledWindow()
-    sw.set_property('hscrollbar-policy', gtk.POLICY_AUTOMATIC)
-    sw.set_property('vscrollbar-policy', gtk.POLICY_AUTOMATIC)
+    sw = Gtk.ScrolledWindow()
+    sw.set_property('hscrollbar-policy', Gtk.PolicyType.AUTOMATIC)
+    sw.set_property('vscrollbar-policy', Gtk.PolicyType.AUTOMATIC)
     sw.set_property('border-width', 0)
     sw.add(htmlview.tv)
     sw.show()
-    frame = gtk.Frame()
-    frame.set_shadow_type(gtk.SHADOW_IN)
+    frame = Gtk.Frame()
+    frame.set_shadow_type(Gtk.ShadowType.IN)
     frame.show()
     frame.add(sw)
-    w = gtk.Window()
+    w = Gtk.Window()
     w.add(frame)
     w.set_default_size(400, 300)
     w.show_all()
-    w.connect('destroy', lambda w: gtk.main_quit())
-    gtk.main()
+    w.connect('destroy', lambda w: Gtk.main_quit())
+    Gtk.main()
diff --git a/src/ipython_view.py b/src/ipython_view.py
index 55ec33280214b8be83a59f35925a7325b0b32239..1da9f9300a7974e078cce35ed425362823f29333 100644
--- a/src/ipython_view.py
+++ b/src/ipython_view.py
@@ -42,11 +42,13 @@ available under the terms of the BSD which accompanies this distribution, and
 is available at U{http://www.opensource.org/licenses/bsd-license.php}
 """
 
-import gtk, gobject
+from gi.repository import Gtk
+from gi.repository import GObject
+from gi.repository import GLib
 import re
 import sys
 import os
-import pango
+from gi.repository import Pango
 from StringIO import StringIO
 
 try:
@@ -128,7 +130,7 @@ class IterableIPShell:
         # Workaround for updating namespace with sys.modules
         #
         self.__update_namespace()
-        
+
     def __update_namespace(self):
         '''
         Update self.IP namespace for autocompletion with sys.modules
@@ -187,7 +189,7 @@ class IterableIPShell:
         Generate prompt depending on is_continuation value
 
         @param is_continuation
-        @type is_continuation: boolean 
+        @type is_continuation: boolean
 
         @return: The prompt string representation
         @rtype: string
@@ -308,15 +310,15 @@ class IterableIPShell:
         @param header: Header to be printed before output
         @type header: string
         """
-        if verbose or debug: print header+cmd
+        if verbose or debug: print(header+cmd)
         # flush stdout so we don't mangle python's buffering
         if not debug:
             input_, output = os.popen4(cmd)
-            print output.read()
+            print(output.read())
             output.close()
             input_.close()
 
-class ConsoleView(gtk.TextView):
+class ConsoleView(Gtk.TextView):
     """
     Specialized text view for console-like workflow
 
@@ -324,13 +326,13 @@ class ConsoleView(gtk.TextView):
     @type ANSI_COLORS: dictionary
 
     @ivar text_buffer: Widget's text buffer.
-    @type text_buffer: gtk.TextBuffer
+    @type text_buffer: Gtk.TextBuffer
     @ivar color_pat: Regex of terminal color pattern
     @type color_pat: _sre.SRE_Pattern
     @ivar mark: Scroll mark for automatic scrolling on input.
-    @type mark: gtk.TextMark
+    @type mark: Gtk.TextMark
     @ivar line_start: Start of command line mark.
-    @type line_start: gtk.TextMark
+    @type line_start: Gtk.TextMark
     """
 
     ANSI_COLORS =  {'0;30': 'Black',     '0;31': 'Red',
@@ -346,8 +348,8 @@ class ConsoleView(gtk.TextView):
         """
         Initialize console view
         """
-        gtk.TextView.__init__(self)
-        self.modify_font(pango.FontDescription('Mono'))
+        GObject.GObject.__init__(self)
+        self.override_font(Pango.FontDescription('Mono'))
         self.set_cursor_visible(True)
         self.text_buffer = self.get_buffer()
         self.mark = self.text_buffer.create_mark('scroll_mark',
@@ -366,7 +368,7 @@ class ConsoleView(gtk.TextView):
         self.connect('key-press-event', self.onKeyPress)
 
     def write(self, text, editable=False):
-        gobject.idle_add(self._write, text, editable)
+        GLib.idle_add(self._write, text, editable)
 
     def _write(self, text, editable=False):
         """
@@ -400,7 +402,7 @@ class ConsoleView(gtk.TextView):
 
 
     def showPrompt(self, prompt):
-        gobject.idle_add(self._showPrompt, prompt)
+        GLib.idle_add(self._showPrompt, prompt)
 
     def _showPrompt(self, prompt):
         """
@@ -414,7 +416,7 @@ class ConsoleView(gtk.TextView):
                                    self.text_buffer.get_end_iter())
 
     def changeLine(self, text):
-        gobject.idle_add(self._changeLine, text)
+        GLib.idle_add(self._changeLine, text)
 
     def _changeLine(self, text):
         """
@@ -441,7 +443,7 @@ class ConsoleView(gtk.TextView):
         return rv
 
     def showReturned(self, text):
-        gobject.idle_add(self._showReturned, text)
+        GLib.idle_add(self._showReturned, text)
 
     def _showReturned(self, text):
         """
@@ -470,9 +472,9 @@ class ConsoleView(gtk.TextView):
         line
 
         @param widget: Widget that key press accored in.
-        @type widget: gtk.Widget
+        @type widget: Gtk.Widget
         @param event: Event object
-        @type event: gtk.gdk.Event
+        @type event: Gdk.Event
 
         @return: Return True if event should not trickle.
         @rtype: boolean
@@ -482,14 +484,14 @@ class ConsoleView(gtk.TextView):
         selection_mark = self.text_buffer.get_selection_bound()
         selection_iter = self.text_buffer.get_iter_at_mark(selection_mark)
         start_iter = self.text_buffer.get_iter_at_mark(self.line_start)
-        if event.keyval == gtk.keysyms.Home:
-            if event.state == 0:
+        if event.keyval == Gdk.KEY_Home:
+            if event.get_state() == 0:
                 self.text_buffer.place_cursor(start_iter)
                 return True
-            elif event.state == gtk.gdk.SHIFT_MASK:
+            elif event.get_state() == Gdk.ModifierType.SHIFT_MASK:
                 self.text_buffer.move_mark(insert_mark, start_iter)
                 return True
-        elif event.keyval == gtk.keysyms.Left:
+        elif event.keyval == Gdk.KEY_Left:
             insert_iter.backward_cursor_position()
             if not insert_iter.editable(True):
                 return True
@@ -555,27 +557,27 @@ class IPythonView(ConsoleView, IterableIPShell):
         autocompletions, etc
 
         @param widget: Widget that key press occured in.
-        @type widget: gtk.Widget
+        @type widget: Gtk.Widget
         @param event: Event object.
-        @type event: gtk.gdk.Event
+        @type event: Gdk.Event
 
         @return: True if event should not trickle.
         @rtype: boolean
         """
-        if event.state & gtk.gdk.CONTROL_MASK and event.keyval == 99:
+        if event.get_state() & Gdk.ModifierType.CONTROL_MASK and event.keyval == 99:
             self.interrupt = True
             self._processLine()
             return True
-        elif event.keyval == gtk.keysyms.Return:
+        elif event.keyval == Gdk.KEY_Return:
             self._processLine()
             return True
-        elif event.keyval == gtk.keysyms.Up:
+        elif event.keyval == Gdk.KEY_Up:
             self.changeLine(self.historyBack())
             return True
-        elif event.keyval == gtk.keysyms.Down:
+        elif event.keyval == Gdk.KEY_Down:
             self.changeLine(self.historyForward())
             return True
-        elif event.keyval == gtk.keysyms.Tab:
+        elif event.keyval == Gdk.KEY_Tab:
             if not self.getCurrentLine().strip():
                 return False
             completed, possibilities = self.complete(self.getCurrentLine())
diff --git a/src/message_control.py b/src/message_control.py
index 9d3324015f3c8c268a0b77fc56f66017460ae982..2520e2a161127c4e872ace4d23aba76ab8480b68 100644
--- a/src/message_control.py
+++ b/src/message_control.py
@@ -42,7 +42,7 @@ TYPE_PM = 'pm'
 
 class MessageControl(object):
     """
-    An abstract base widget that can embed in the gtk.Notebook of a
+    An abstract base widget that can embed in the Gtk.Notebook of a
     MessageWindow
     """
 
@@ -156,7 +156,7 @@ class MessageControl(object):
 
         Derivded classes MUST implement this.
         """
-        # Return a markup'd label and optional gtk.Color in a tupple like:
+        # Return a markup'd label and optional Gtk.Color in a tupple like:
         # return (label_str, None)
         pass
 
diff --git a/src/message_textview.py b/src/message_textview.py
index 628701a42aa11ab5da3479c214b366860717f75c..ddb4b726568d727f304a7172180ce00e0ed8cd4a 100644
--- a/src/message_textview.py
+++ b/src/message_textview.py
@@ -23,35 +23,37 @@
 
 import gc
 
-import gtk
-import gobject
-import pango
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GObject
+from gi.repository import GLib
+from gi.repository import Pango
 
 import gtkgui_helpers
 from common import gajim
 
-class MessageTextView(gtk.TextView):
+class MessageTextView(Gtk.TextView):
     """
     Class for the message textview (where user writes new messages) for
     chat/groupchat windows
     """
     UNDO_LIMIT = 20
     __gsignals__ = dict(
-            mykeypress = (gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION,
+            mykeypress = (GObject.SignalFlags.RUN_LAST | GObject.SignalFlags.ACTION,
                             None, # return value
-                            (int, gtk.gdk.ModifierType ) # arguments
+                            (int, Gdk.ModifierType ) # arguments
                     )
             )
 
     def __init__(self):
-        gtk.TextView.__init__(self)
+        GObject.GObject.__init__(self)
 
         # set properties
         self.set_border_width(1)
         self.set_accepts_tab(True)
         self.set_editable(True)
         self.set_cursor_visible(True)
-        self.set_wrap_mode(gtk.WRAP_WORD_CHAR)
+        self.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
         self.set_left_margin(2)
         self.set_right_margin(2)
         self.set_pixels_above_lines(2)
@@ -69,15 +71,15 @@ class MessageTextView(gtk.TextView):
         self.fonts_tags = []
         self.other_tags = {}
         self.other_tags['bold'] = _buffer.create_tag('bold')
-        self.other_tags['bold'].set_property('weight', pango.WEIGHT_BOLD)
+        self.other_tags['bold'].set_property('weight', Pango.Weight.BOLD)
         self.begin_tags['bold'] = '<strong>'
         self.end_tags['bold'] = '</strong>'
         self.other_tags['italic'] = _buffer.create_tag('italic')
-        self.other_tags['italic'].set_property('style', pango.STYLE_ITALIC)
+        self.other_tags['italic'].set_property('style', Pango.Style.ITALIC)
         self.begin_tags['italic'] = '<em>'
         self.end_tags['italic'] = '</em>'
         self.other_tags['underline'] = _buffer.create_tag('underline')
-        self.other_tags['underline'].set_property('underline', pango.UNDERLINE_SINGLE)
+        self.other_tags['underline'].set_property('underline', Pango.Underline.SINGLE)
         self.begin_tags['underline'] = '<span style="text-decoration: underline;">'
         self.end_tags['underline'] = '</span>'
         self.other_tags['strike'] = _buffer.create_tag('strike')
@@ -145,19 +147,23 @@ class MessageTextView(gtk.TextView):
         start, finish = self.get_active_iters()
         _buffer.remove_all_tags(start, finish)
 
-    def color_set(self, widget, response, color):
-        if response == -6:
+    def color_set(self, widget, response):
+        if response == -6 or response == -4:
             widget.destroy()
             return
-        _buffer = self.get_buffer()
-        color = color.get_current_color()
+
+        color = widget.get_property('rgba')
         widget.destroy()
-        color_string = gtkgui_helpers.make_color_string(color)
+        _buffer = self.get_buffer()
+        # Create #aabbcc color string from rgba color
+        color_string = '#%02X%02X%02X' % (round(color.red*255),
+            round(color.green*255), round(color.blue*255))
+
         tag_name = 'color' + color_string
         if not tag_name in self.color_tags:
             tagColor = _buffer.create_tag(tag_name)
             tagColor.set_property('foreground', color_string)
-            self.begin_tags[tag_name] = '<span style="color: ' + color_string + ';">'
+            self.begin_tags[tag_name] = '<span style="color: %s;">' % color_string
             self.end_tags[tag_name] = '</span>'
             self.color_tags.append(tag_name)
 
@@ -168,23 +174,23 @@ class MessageTextView(gtk.TextView):
 
         _buffer.apply_tag_by_name(tag_name, start, finish)
 
-    def font_set(self, widget, response, font):
-        if response == -6:
+    def font_set(self, widget, response, start, finish):
+        if response == -6 or response == -4:
             widget.destroy()
             return
 
-        _buffer = self.get_buffer()
-
-        font = font.get_font_name()
-        font_desc = pango.FontDescription(font)
+        font = widget.get_font()
+        font_desc = widget.get_font_desc()
         family = font_desc.get_family()
         size = font_desc.get_size()
-        size = size / pango.SCALE
+        size = size / Pango.SCALE
         weight = font_desc.get_weight()
         style = font_desc.get_style()
 
         widget.destroy()
 
+        _buffer = self.get_buffer()
+
         tag_name = 'font' + font
         if not tag_name in self.fonts_tags:
             tagFont = _buffer.create_tag(tag_name)
@@ -195,19 +201,17 @@ class MessageTextView(gtk.TextView):
             self.end_tags[tag_name] = '</span>'
             self.fonts_tags.append(tag_name)
 
-        start, finish = self.get_active_iters()
-
         for tag in self.fonts_tags:
             _buffer.remove_tag_by_name(tag, start, finish)
 
         _buffer.apply_tag_by_name(tag_name, start, finish)
 
-        if weight == pango.WEIGHT_BOLD:
+        if weight == Pango.Weight.BOLD:
             _buffer.apply_tag_by_name('bold', start, finish)
         else:
             _buffer.remove_tag_by_name('bold', start, finish)
 
-        if style == pango.STYLE_ITALIC:
+        if style == Pango.Style.ITALIC:
             _buffer.apply_tag_by_name('italic', start, finish)
         else:
             _buffer.remove_tag_by_name('italic', start, finish)
@@ -217,7 +221,7 @@ class MessageTextView(gtk.TextView):
         old = _buffer.get_start_iter()
         tags = {}
         tags['bold'] = False
-        iter = _buffer.get_start_iter()
+        iter_ = _buffer.get_start_iter()
         old = _buffer.get_start_iter()
         text = ''
         modified = False
@@ -229,31 +233,31 @@ class MessageTextView(gtk.TextView):
             text = text.replace('\n', '<br />')
             return text
 
-        for tag in iter.get_toggled_tags(True):
+        for tag in iter_.get_toggled_tags(True):
             tag_name = tag.get_property('name')
             if tag_name not in self.begin_tags:
                 continue
             text += self.begin_tags[tag_name]
             modified = True
-        while (iter.forward_to_tag_toggle(None) and not iter.is_end()):
-            text += xhtml_special(_buffer.get_text(old, iter))
+        while (iter_.forward_to_tag_toggle(None) and not iter_.is_end()):
+            text += xhtml_special(_buffer.get_text(old, iter_, True))
             old.forward_to_tag_toggle(None)
             new_tags, old_tags, end_tags = [], [], []
-            for tag in iter.get_toggled_tags(True):
+            for tag in iter_.get_toggled_tags(True):
                 tag_name = tag.get_property('name')
                 if tag_name not in self.begin_tags:
                     continue
                 new_tags.append(tag_name)
                 modified = True
 
-            for tag in iter.get_tags():
+            for tag in iter_.get_tags():
                 tag_name = tag.get_property('name')
                 if tag_name not in self.begin_tags or tag_name not in self.end_tags:
                     continue
                 if tag_name not in new_tags:
                     old_tags.append(tag_name)
 
-            for tag in iter.get_toggled_tags(False):
+            for tag in iter_.get_toggled_tags(False):
                 tag_name = tag.get_property('name')
                 if tag_name not in self.end_tags:
                     continue
@@ -268,8 +272,8 @@ class MessageTextView(gtk.TextView):
             for tag in old_tags:
                 text += self.begin_tags[tag]
 
-        text += xhtml_special(_buffer.get_text(old, _buffer.get_end_iter()))
-        for tag in iter.get_toggled_tags(False):
+        text += xhtml_special(_buffer.get_text(old, _buffer.get_end_iter(), True))
+        for tag in iter_.get_toggled_tags(False):
             tag_name = tag.get_property('name')
             if tag_name not in self.end_tags:
                 continue
@@ -281,7 +285,7 @@ class MessageTextView(gtk.TextView):
             return None
 
     def destroy(self):
-        gobject.idle_add(gc.collect)
+        GLib.idle_add(gc.collect)
 
     def clear(self, widget = None):
         """
@@ -322,62 +326,62 @@ class MessageTextView(gtk.TextView):
 # and we also return True there to stop the default action from running
 
 # CTRL + SHIFT + TAB
-gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.ISO_Left_Tab,
-        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.ISO_Left_Tab,
-        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
-
-# CTRL + TAB
-gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Tab,
-        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Tab,
-        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
-
-# TAB
-gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Tab,
-        0, 'mykeypress', int, gtk.keysyms.Tab,  gtk.gdk.ModifierType, 0)
-
-# CTRL + UP
-gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Up,
-        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Up,
-        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
-
-# CTRL + DOWN
-gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Down,
-        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Down,
-        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
-
-# CTRL + SHIFT + UP
-gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Up,
-        gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK, 'mykeypress', int,
-        gtk.keysyms.Up, gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK |
-        gtk.gdk.SHIFT_MASK)
-
-# CTRL + SHIFT + DOWN
-gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Down,
-        gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK, 'mykeypress', int,
-        gtk.keysyms.Down, gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK |
-        gtk.gdk.SHIFT_MASK)
-
-# ENTER
-gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Return,
-        0, 'mykeypress', int, gtk.keysyms.Return,
-        gtk.gdk.ModifierType, 0)
-
-# Ctrl + Enter
-gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Return,
-        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Return,
-        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
-
-# Keypad Enter
-gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.KP_Enter,
-        0, 'mykeypress', int, gtk.keysyms.KP_Enter,
-        gtk.gdk.ModifierType, 0)
-
-# Ctrl + Keypad Enter
-gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.KP_Enter,
-        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.KP_Enter,
-        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
-
-# Ctrl + z
-gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.z,
-        gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.z,
-        gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
+#Gtk.binding_entry_add_signal(MessageTextView, Gdk.KEY_ISO_Left_Tab,
+        #Gdk.ModifierType.CONTROL_MASK, 'mykeypress', int, Gdk.KEY_ISO_Left_Tab,
+        #Gdk.ModifierType, Gdk.ModifierType.CONTROL_MASK)
+
+## CTRL + TAB
+#Gtk.binding_entry_add_signal(MessageTextView, Gdk.KEY_Tab,
+        #Gdk.ModifierType.CONTROL_MASK, 'mykeypress', int, Gdk.KEY_Tab,
+        #Gdk.ModifierType, Gdk.ModifierType.CONTROL_MASK)
+
+## TAB
+#Gtk.binding_entry_add_signal(MessageTextView, Gdk.KEY_Tab,
+        #0, 'mykeypress', int, Gdk.KEY_Tab,  Gdk.ModifierType, 0)
+
+## CTRL + UP
+#Gtk.binding_entry_add_signal(MessageTextView, Gdk.KEY_Up,
+        #Gdk.ModifierType.CONTROL_MASK, 'mykeypress', int, Gdk.KEY_Up,
+        #Gdk.ModifierType, Gdk.ModifierType.CONTROL_MASK)
+
+## CTRL + DOWN
+#Gtk.binding_entry_add_signal(MessageTextView, Gdk.KEY_Down,
+        #Gdk.ModifierType.CONTROL_MASK, 'mykeypress', int, Gdk.KEY_Down,
+        #Gdk.ModifierType, Gdk.ModifierType.CONTROL_MASK)
+
+## CTRL + SHIFT + UP
+#Gtk.binding_entry_add_signal(MessageTextView, Gdk.KEY_Up,
+        #Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK, 'mykeypress', int,
+        #Gdk.KEY_Up, Gdk.ModifierType, Gdk.ModifierType.CONTROL_MASK |
+        #Gdk.ModifierType.SHIFT_MASK)
+
+## CTRL + SHIFT + DOWN
+#Gtk.binding_entry_add_signal(MessageTextView, Gdk.KEY_Down,
+        #Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK, 'mykeypress', int,
+        #Gdk.KEY_Down, Gdk.ModifierType, Gdk.ModifierType.CONTROL_MASK |
+        #Gdk.ModifierType.SHIFT_MASK)
+
+## ENTER
+#Gtk.binding_entry_add_signal(MessageTextView, Gdk.KEY_Return,
+        #0, 'mykeypress', int, Gdk.KEY_Return,
+        #Gdk.ModifierType, 0)
+
+## Ctrl + Enter
+#Gtk.binding_entry_add_signal(MessageTextView, Gdk.KEY_Return,
+        #Gdk.ModifierType.CONTROL_MASK, 'mykeypress', int, Gdk.KEY_Return,
+        #Gdk.ModifierType, Gdk.ModifierType.CONTROL_MASK)
+
+## Keypad Enter
+#Gtk.binding_entry_add_signal(MessageTextView, Gdk.KEY_KP_Enter,
+        #0, 'mykeypress', int, Gdk.KEY_KP_Enter,
+        #Gdk.ModifierType, 0)
+
+## Ctrl + Keypad Enter
+#Gtk.binding_entry_add_signal(MessageTextView, Gdk.KEY_KP_Enter,
+        #Gdk.ModifierType.CONTROL_MASK, 'mykeypress', int, Gdk.KEY_KP_Enter,
+        #Gdk.ModifierType, Gdk.ModifierType.CONTROL_MASK)
+
+## Ctrl + z
+#Gtk.binding_entry_add_signal(MessageTextView, Gdk.KEY_z,
+        #Gdk.ModifierType.CONTROL_MASK, 'mykeypress', int, Gdk.KEY_z,
+        #Gdk.ModifierType, Gdk.ModifierType.CONTROL_MASK)
diff --git a/src/message_window.py b/src/message_window.py
index 17ba02ff78a772dacd4f5b695ed06dd305c4de01..a0f82ad6d73ab87c3dd48542dfc422e6a2efb84a 100644
--- a/src/message_window.py
+++ b/src/message_window.py
@@ -27,8 +27,10 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GObject
+from gi.repository import GLib
 import time
 
 import common
@@ -105,17 +107,17 @@ class MessageWindow(object):
                 '<Control>b', '<Control>F4',
                 '<Control>w', '<Control>Page_Up', '<Control>Page_Down', '<Alt>Right',
                 '<Alt>Left', '<Alt>d', '<Alt>c', '<Alt>m', '<Alt>t', 'Escape'] + \
-                ['<Alt>'+str(i) for i in xrange(10)]
-        accel_group = gtk.AccelGroup()
+                ['<Alt>'+str(i) for i in list(range(10))]
+        accel_group = Gtk.AccelGroup()
         for key in keys:
-            keyval, mod = gtk.accelerator_parse(key)
-            accel_group.connect_group(keyval, mod, gtk.ACCEL_VISIBLE,
+            keyval, mod = Gtk.accelerator_parse(key)
+            accel_group.connect(keyval, mod, Gtk.AccelFlags.VISIBLE,
                 self.accel_group_func)
         self.window.add_accel_group(accel_group)
 
         # gtk+ doesn't make use of the motion notify on gtkwindow by default
         # so this line adds that
-        self.window.add_events(gtk.gdk.POINTER_MOTION_MASK)
+        self.window.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
 
         id_ = self.notebook.connect('switch-page',
             self._on_notebook_switch_page)
@@ -127,13 +129,13 @@ class MessageWindow(object):
         # Tab customizations
         pref_pos = gajim.config.get('tabs_position')
         if pref_pos == 'bottom':
-            nb_pos = gtk.POS_BOTTOM
+            nb_pos = Gtk.PositionType.BOTTOM
         elif pref_pos == 'left':
-            nb_pos = gtk.POS_LEFT
+            nb_pos = Gtk.PositionType.LEFT
         elif pref_pos == 'right':
-            nb_pos = gtk.POS_RIGHT
+            nb_pos = Gtk.PositionType.RIGHT
         else:
-            nb_pos = gtk.POS_TOP
+            nb_pos = Gtk.PositionType.TOP
         self.notebook.set_tab_pos(nb_pos)
         window_mode = gajim.interface.msg_win_mgr.mode
         if gajim.config.get('tabs_always_visible') or \
@@ -252,7 +254,7 @@ class MessageWindow(object):
         self._controls.clear()
         # Clean up handlers connected to the parent window, this is important since
         # self.window may be the RosterWindow
-        for i in self.handlers.keys():
+        for i in list(self.handlers.keys()):
             if self.handlers[i].handler_is_connected(i):
                 self.handlers[i].disconnect(i)
             del self.handlers[i]
@@ -276,17 +278,17 @@ class MessageWindow(object):
                 scrolled = True
             self.notebook.set_show_tabs(True)
             if scrolled:
-                gobject.idle_add(conv_textview.scroll_to_end_iter)
+                GLib.idle_add(conv_textview.scroll_to_end_iter)
 
         # Add notebook page and connect up to the tab's close button
         xml = gtkgui_helpers.get_gtk_builder('message_window.ui', 'chat_tab_ebox')
         tab_label_box = xml.get_object('chat_tab_ebox')
         widget = xml.get_object('tab_close_button')
-        #this reduces the size of the button
-        style = gtk.RcStyle()
-        style.xthickness = 0
-        style.ythickness = 0
-        widget.modify_style(style)
+        # this reduces the size of the button
+#        style = Gtk.RcStyle()
+#        style.xthickness = 0
+#        style.ythickness = 0
+#        widget.modify_style(style)
 
         id_ = widget.connect('clicked', self._on_close_button_clicked, control)
         control.handlers[id_] = widget
@@ -306,7 +308,7 @@ class MessageWindow(object):
         # NOTE: we do not call set_control_active(True) since we don't know
         # whether the tab is the active one.
         self.show_title()
-        gobject.timeout_add(500, control.msg_textview.grab_focus)
+        GLib.timeout_add(500, control.msg_textview.grab_focus)
 
     def on_tab_eventbox_button_press_event(self, widget, event, child):
         if event.button == 3: # right click
@@ -318,28 +320,28 @@ class MessageWindow(object):
             self.remove_tab(ctrl, self.CLOSE_TAB_MIDDLE_CLICK)
         else:
             ctrl = self._widget_to_control(child)
-            gobject.idle_add(ctrl.msg_textview.grab_focus)
+            GLib.idle_add(ctrl.msg_textview.grab_focus)
 
     def _on_message_textview_mykeypress_event(self, widget, event_keyval,
             event_keymod):
         # NOTE: handles mykeypress which is custom signal; see message_textview.py
 
         # construct event instance from binding
-        event = gtk.gdk.Event(gtk.gdk.KEY_PRESS) # it's always a key-press here
+        event = Gdk.Event(Gdk.EventType.KEY_PRESS) # it's always a key-press here
         event.keyval = event_keyval
         event.state = event_keymod
         event.time = 0 # assign current time
 
-        if event.state & gtk.gdk.CONTROL_MASK:
+        if event.get_state() & Gdk.ModifierType.CONTROL_MASK:
             # Tab switch bindings
-            if event.keyval == gtk.keysyms.Tab: # CTRL + TAB
+            if event.keyval == Gdk.KEY_Tab: # CTRL + TAB
                 self.move_to_next_unread_tab(True)
-            elif event.keyval == gtk.keysyms.ISO_Left_Tab: # CTRL + SHIFT + TAB
+            elif event.keyval == Gdk.KEY_ISO_Left_Tab: # CTRL + SHIFT + TAB
                 self.move_to_next_unread_tab(False)
-            elif event.keyval == gtk.keysyms.Page_Down: # CTRL + PAGE DOWN
-                self.notebook.emit('key_press_event', event)
-            elif event.keyval == gtk.keysyms.Page_Up: # CTRL + PAGE UP
-                self.notebook.emit('key_press_event', event)
+            elif event.keyval == Gdk.KEY_Page_Down: # CTRL + PAGE DOWN
+                self.notebook.event(event)
+            elif event.keyval == Gdk.KEY_Page_Up: # CTRL + PAGE UP
+                self.notebook.event(event)
 
     def accel_group_func(self, accel_group, acceleratable, keyval, modifier):
         st = '1234567890' # alt+1 means the first tab (tab 0)
@@ -349,76 +351,76 @@ class MessageWindow(object):
             return
 
         # CTRL mask
-        if modifier & gtk.gdk.CONTROL_MASK:
-            if keyval == gtk.keysyms.h: # CTRL + h
-                if gtk.settings_get_default().get_property(
+        if modifier & Gdk.ModifierType.CONTROL_MASK:
+            if keyval == Gdk.KEY_h: # CTRL + h
+                if Gtk.Settings.get_default().get_property(
                 'gtk-key-theme-name') != 'Emacs':
                     control._on_history_menuitem_activate()
                     return True
             elif control.type_id == message_control.TYPE_CHAT and \
-            keyval == gtk.keysyms.f: # CTRL + f
+            keyval == Gdk.KEY_f: # CTRL + f
                 # CTRL + f moves cursor one char forward when user uses Emacs
                 # theme
-                if not gtk.settings_get_default().get_property(
+                if not Gtk.Settings.get_default().get_property(
                 'gtk-key-theme-name') == 'Emacs':
                     control._on_send_file_menuitem_activate(None)
                     return True
             elif control.type_id == message_control.TYPE_CHAT and \
-            keyval == gtk.keysyms.g: # CTRL + g
+            keyval == Gdk.KEY_g: # CTRL + g
                 control._on_convert_to_gc_menuitem_activate(None)
                 return True
             elif control.type_id in (message_control.TYPE_CHAT,
-            message_control.TYPE_PM) and keyval == gtk.keysyms.i: # CTRL + i
+            message_control.TYPE_PM) and keyval == Gdk.KEY_i: # CTRL + i
                 control._on_contact_information_menuitem_activate(None)
                 return True
-            elif keyval == gtk.keysyms.l or keyval == gtk.keysyms.L: # CTRL + l|L
+            elif keyval == Gdk.KEY_l or keyval == Gdk.KEY_L: # CTRL + l|L
                 control.conv_textview.clear()
                 return True
-            elif keyval == gtk.keysyms.u: # CTRL + u: emacs style clear line
+            elif keyval == Gdk.KEY_u: # CTRL + u: emacs style clear line
                 control.clear(control.msg_textview)
                 return True
             elif control.type_id == message_control.TYPE_GC and \
-            keyval == gtk.keysyms.b: # CTRL + b
+            keyval == Gdk.KEY_b: # CTRL + b
                 control._on_bookmark_room_menuitem_activate(None)
                 return True
             # Tab switch bindings
-            elif keyval == gtk.keysyms.F4: # CTRL + F4
+            elif keyval == Gdk.KEY_F4: # CTRL + F4
                 self.remove_tab(control, self.CLOSE_CTRL_KEY)
                 return True
-            elif keyval == gtk.keysyms.w: # CTRL + w
+            elif keyval == Gdk.KEY_w: # CTRL + w
                 # CTRL + w removes latest word before sursor when User uses emacs
                 # theme
-                if not gtk.settings_get_default().get_property(
+                if not Gtk.Settings.get_default().get_property(
                 'gtk-key-theme-name') == 'Emacs':
                     self.remove_tab(control, self.CLOSE_CTRL_KEY)
                     return True
-            elif keyval in (gtk.keysyms.Page_Up, gtk.keysyms.Page_Down):
+            elif keyval in (Gdk.KEY_Page_Up, Gdk.KEY_Page_Down):
                 # CTRL + PageUp | PageDown
                 # Create event and send it to notebook
-                event = gtk.gdk.Event(gtk.gdk.KEY_PRESS)
-                event.window = self.window.window
+                event = Gdk.Event(Gdk.EventType.KEY_PRESS)
+                event.window = self.window.get_window()
                 event.time = int(time.time())
-                event.state = gtk.gdk.CONTROL_MASK
+                event.state = Gdk.ModifierType.CONTROL_MASK
                 event.keyval = int(keyval)
-                self.notebook.emit('key_press_event', event)
+                self.notebook.event(event)
                 return True
 
-            if modifier & gtk.gdk.SHIFT_MASK:
+            if modifier & Gdk.ModifierType.SHIFT_MASK:
                 # CTRL + SHIFT
                 if control.type_id == message_control.TYPE_GC and \
-                keyval == gtk.keysyms.n: # CTRL + SHIFT + n
+                keyval == Gdk.KEY_n: # CTRL + SHIFT + n
                     control._on_change_nick_menuitem_activate(None)
                     return True
         # MOD1 (ALT) mask
-        elif modifier & gtk.gdk.MOD1_MASK:
+        elif modifier & Gdk.ModifierType.MOD1_MASK:
             # Tab switch bindings
-            if keyval == gtk.keysyms.Right: # ALT + RIGHT
+            if keyval == Gdk.KEY_Right: # ALT + RIGHT
                 new = self.notebook.get_current_page() + 1
                 if new >= self.notebook.get_n_pages():
                     new = 0
                 self.notebook.set_current_page(new)
                 return True
-            elif keyval == gtk.keysyms.Left: # ALT + LEFT
+            elif keyval == Gdk.KEY_Left: # ALT + LEFT
                 new = self.notebook.get_current_page() - 1
                 if new < 0:
                     new = self.notebook.get_n_pages() - 1
@@ -427,23 +429,23 @@ class MessageWindow(object):
             elif chr(keyval) in st: # ALT + 1,2,3..
                 self.notebook.set_current_page(st.index(chr(keyval)))
                 return True
-            elif keyval == gtk.keysyms.c: # ALT + C toggles chat buttons
+            elif keyval == Gdk.KEY_c: # ALT + C toggles chat buttons
                 control.chat_buttons_set_visible(not control.hide_chat_buttons)
                 return True
-            elif keyval == gtk.keysyms.m: # ALT + M show emoticons menu
+            elif keyval == Gdk.KEY_m: # ALT + M show emoticons menu
                 control.show_emoticons_menu()
                 return True
-            elif keyval == gtk.keysyms.d: # ALT + D show actions menu
-                if gtk.settings_get_default().get_property(
+            elif keyval == Gdk.KEY_d: # ALT + D show actions menu
+                if Gtk.Settings.get_default().get_property(
                 'gtk-key-theme-name') != 'Emacs':
                     control.on_actions_button_clicked(control.actions_button)
                     return True
             elif control.type_id == message_control.TYPE_GC and \
-            keyval == gtk.keysyms.t: # ALT + t
+            keyval == Gdk.KEY_t: # ALT + t
                 control._on_change_subject_menuitem_activate(None)
                 return True
         # Close tab bindings
-        elif keyval == gtk.keysyms.Escape and \
+        elif keyval == Gdk.KEY_Escape and \
         gajim.config.get('escape_key_closes'): # Escape
             self.remove_tab(control, self.CLOSE_ESC)
             return True
@@ -498,7 +500,7 @@ class MessageWindow(object):
 
         unread_str = ''
         if unread > 1:
-            unread_str = '[' + unicode(unread) + '] '
+            unread_str = '[' + str(unread) + '] '
         elif unread == 1:
             unread_str = '* '
         else:
@@ -546,7 +548,7 @@ class MessageWindow(object):
         ctrl_page = self.notebook.page_num(ctrl.widget)
         self.notebook.set_current_page(ctrl_page)
         self.window.present()
-        gobject.idle_add(ctrl.msg_textview.grab_focus)
+        GLib.idle_add(ctrl.msg_textview.grab_focus)
 
     def remove_tab(self, ctrl, method, reason = None, force = False):
         """
@@ -623,7 +625,10 @@ class MessageWindow(object):
             self.notebook.set_show_tabs(show_tabs_if_one_tab)
 
     def redraw_tab(self, ctrl, chatstate = None):
-        hbox = self.notebook.get_tab_label(ctrl.widget).get_children()[0]
+        tab = self.notebook.get_tab_label(ctrl.widget)
+        if not tab:
+            return
+        hbox = tab.get_children()[0]
         status_img = hbox.get_children()[0]
         nick_label = hbox.get_children()[1]
 
@@ -639,12 +644,12 @@ class MessageWindow(object):
         (tab_label_str, tab_label_color) = ctrl.get_tab_label(chatstate)
         nick_label.set_markup(tab_label_str)
         if tab_label_color:
-            nick_label.modify_fg(gtk.STATE_NORMAL, tab_label_color)
-            nick_label.modify_fg(gtk.STATE_ACTIVE, tab_label_color)
+            nick_label.override_color(Gtk.StateFlags.NORMAL, tab_label_color)
+            nick_label.override_color(Gtk.StateFlags.ACTIVE, tab_label_color)
 
         tab_img = ctrl.get_tab_image()
         if tab_img:
-            if tab_img.get_storage_type() == gtk.IMAGE_ANIMATION:
+            if tab_img.get_storage_type() == Gtk.ImageType.ANIMATION:
                 status_img.set_from_animation(tab_img.get_animation())
             else:
                 status_img.set_from_pixbuf(tab_img.get_pixbuf())
@@ -686,17 +691,15 @@ class MessageWindow(object):
         return self.window.is_active()
 
     def get_origin(self):
-        return self.window.window.get_origin()
+        return self.window.get_window().get_origin()
 
     def get_control(self, key, acct):
         """
         Return the MessageControl for jid or n, where n is a notebook page index.
         When key is an int index acct may be None
         """
-        if isinstance(key, str):
-            key = unicode(key, 'utf-8')
 
-        if isinstance(key, unicode):
+        if isinstance(key, str):
             jid = key
             try:
                 return self._controls[acct][jid]
@@ -736,8 +739,8 @@ class MessageWindow(object):
             del gajim.last_message_time[acct][old_jid]
 
     def controls(self):
-        for jid_dict in self._controls.values():
-            for ctrl in jid_dict.values():
+        for jid_dict in list(self._controls.values()):
+            for ctrl in list(jid_dict.values()):
                 yield ctrl
 
     def get_nb_controls(self):
@@ -791,8 +794,9 @@ class MessageWindow(object):
     def popup_menu(self, event):
         menu = self.get_active_control().prepare_context_menu()
         # show the menu
-        menu.popup(None, None, None, event.button, event.time)
+        menu.attach_to_widget(gajim.interface.roster.window, None)
         menu.show_all()
+        menu.popup(None, None, None, None, event.button, event.time)
 
     def _on_notebook_switch_page(self, notebook, page, page_num):
         old_no = notebook.get_current_page()
@@ -811,42 +815,42 @@ class MessageWindow(object):
     def _on_notebook_key_press(self, widget, event):
         # when tab itself is selected,
         # make sure <- and -> are allowed for navigating between tabs
-        if event.keyval in (gtk.keysyms.Left, gtk.keysyms.Right):
+        if event.keyval in (Gdk.KEY_Left, Gdk.KEY_Right):
             return False
 
         control = self.get_active_control()
 
-        if event.state & gtk.gdk.SHIFT_MASK:
+        if event.get_state() & Gdk.ModifierType.SHIFT_MASK:
             # CTRL + SHIFT + TAB
-            if event.state & gtk.gdk.CONTROL_MASK and \
-            event.keyval == gtk.keysyms.ISO_Left_Tab:
+            if event.get_state() & Gdk.ModifierType.CONTROL_MASK and \
+            event.keyval == Gdk.KEY_ISO_Left_Tab:
                 self.move_to_next_unread_tab(False)
                 return True
             # SHIFT + PAGE_[UP|DOWN]: send to conv_textview
-            elif event.keyval in (gtk.keysyms.Page_Down, gtk.keysyms.Page_Up):
-                control.conv_textview.tv.emit('key_press_event', event)
+            elif event.keyval in (Gdk.KEY_Page_Down, Gdk.KEY_Page_Up):
+                control.conv_textview.tv.event(event)
                 return True
-        elif event.state & gtk.gdk.CONTROL_MASK:
-            if event.keyval == gtk.keysyms.Tab: # CTRL + TAB
+        elif event.get_state() & Gdk.ModifierType.CONTROL_MASK:
+            if event.keyval == Gdk.KEY_Tab: # CTRL + TAB
                 self.move_to_next_unread_tab(True)
                 return True
             # Ctrl+PageUP / DOWN has to be handled by notebook
-            elif event.keyval == gtk.keysyms.Page_Down:
+            elif event.keyval == Gdk.KEY_Page_Down:
                 self.move_to_next_unread_tab(True)
                 return True
-            elif event.keyval == gtk.keysyms.Page_Up:
+            elif event.keyval == Gdk.KEY_Page_Up:
                 self.move_to_next_unread_tab(False)
                 return True
-        if event.keyval in (gtk.keysyms.Shift_L, gtk.keysyms.Shift_R,
-        gtk.keysyms.Control_L, gtk.keysyms.Control_R, gtk.keysyms.Caps_Lock,
-        gtk.keysyms.Shift_Lock, gtk.keysyms.Meta_L, gtk.keysyms.Meta_R,
-        gtk.keysyms.Alt_L, gtk.keysyms.Alt_R, gtk.keysyms.Super_L,
-        gtk.keysyms.Super_R, gtk.keysyms.Hyper_L, gtk.keysyms.Hyper_R):
+        if event.keyval in (Gdk.KEY_Shift_L, Gdk.KEY_Shift_R,
+        Gdk.KEY_Control_L, Gdk.KEY_Control_R, Gdk.KEY_Caps_Lock,
+        Gdk.KEY_Shift_Lock, Gdk.KEY_Meta_L, Gdk.KEY_Meta_R,
+        Gdk.KEY_Alt_L, Gdk.KEY_Alt_R, Gdk.KEY_Super_L,
+        Gdk.KEY_Super_R, Gdk.KEY_Hyper_L, Gdk.KEY_Hyper_R):
             return True
 
         if isinstance(control, ChatControlBase):
             # we forwarded it to message textview
-            control.msg_textview.emit('key_press_event', event)
+            control.msg_textview.event(event)
             control.msg_textview.grab_focus()
 
     def get_tab_at_xy(self, x, y):
@@ -856,9 +860,9 @@ class MessageWindow(object):
         """
         page_num = -1
         to_right = False
-        horiz = self.notebook.get_tab_pos() == gtk.POS_TOP or \
-                self.notebook.get_tab_pos() == gtk.POS_BOTTOM
-        for i in xrange(self.notebook.get_n_pages()):
+        horiz = self.notebook.get_tab_pos() == Gtk.PositionType.TOP or \
+                self.notebook.get_tab_pos() == Gtk.PositionType.BOTTOM
+        for i in list(range(self.notebook.get_n_pages())):
             page = self.notebook.get_nth_page(i)
             tab = self.notebook.get_tab_label(page)
             tab_alloc = tab.get_allocation()
@@ -884,7 +888,7 @@ class MessageWindow(object):
         Find the page num of the tab label
         """
         page_num = -1
-        for i in xrange(self.notebook.get_n_pages()):
+        for i in list(range(self.notebook.get_n_pages())):
             page = self.notebook.get_nth_page(i)
             tab = self.notebook.get_tab_label(page)
             if tab == tab_label:
@@ -893,13 +897,13 @@ class MessageWindow(object):
         return page_num
 
 ################################################################################
-class MessageWindowMgr(gobject.GObject):
+class MessageWindowMgr(GObject.GObject):
     """
     A manager and factory for MessageWindow objects
     """
 
     __gsignals__ = {
-            'window-delete': (gobject.SIGNAL_RUN_LAST, None, (object,)),
+            'window-delete': (GObject.SignalFlags.RUN_LAST, None, (object,)),
     }
 
     # These constants map to common.config.opt_one_window_types indices
@@ -924,7 +928,7 @@ class MessageWindowMgr(gobject.GObject):
             ONE_MSG_WINDOW_PERACCT: The key is the account name
             ONE_MSG_WINDOW_PERTYPE: The key is a message type constant
         """
-        gobject.GObject.__init__(self)
+        GObject.GObject.__init__(self)
         self._windows = {}
 
         # Map the mode to a int constant for frequent compares
@@ -985,7 +989,10 @@ class MessageWindowMgr(gobject.GObject):
                 parent_size = win.window.get_size()
                 # Need to add the size of the now visible paned handle, otherwise
                 # the saved width of the message window decreases by this amount
-                handle_size = win.parent_paned.style_get_property('handle-size')
+                s = GObject.Value()
+                s.init(GObject.TYPE_INT)
+                win.parent_paned.style_get_property('handle-size', s)
+                handle_size = s.get_int()
                 size = (parent_size[0] + size[0] + handle_size, size[1])
         elif self.mode == self.ONE_MSG_WINDOW_PERACCT:
             size = (gajim.config.get_per('accounts', acct, 'msgwin-width'),
@@ -1149,7 +1156,7 @@ class MessageWindowMgr(gobject.GObject):
         return ctrls
 
     def windows(self):
-        for w in self._windows.values():
+        for w in list(self._windows.values()):
             yield w
 
     def controls(self):
@@ -1196,7 +1203,7 @@ class MessageWindowMgr(gobject.GObject):
             size_height_key = type_ + '-msgwin-height'
         elif self.mode == self.ONE_MSG_WINDOW_ALWAYS_WITH_ROSTER:
             # Ignore any hpaned width
-            width = msg_win.notebook.allocation.width
+            width = msg_win.notebook.get_allocation().width
 
         if acct:
             gajim.config.set_per('accounts', acct, size_width_key, width)
@@ -1207,8 +1214,8 @@ class MessageWindowMgr(gobject.GObject):
                 gajim.config.set_per('accounts', acct, pos_y_key, y)
 
         else:
-            win_maximized = msg_win.window.window.get_state() == \
-                    gtk.gdk.WINDOW_STATE_MAXIMIZED
+            win_maximized = msg_win.window.get_window().get_state() == \
+                    Gdk.WindowState.MAXIMIZED
             gajim.config.set(max_win_key, win_maximized)
             width += width_adjust
             gajim.config.set(size_width_key, width)
@@ -1236,7 +1243,7 @@ class MessageWindowMgr(gobject.GObject):
             else:
                 # Stash current size so it can be restored if the MessageWindow
                 # is not longer embedded
-                roster_width = w.parent_paned.get_child1().allocation.width
+                roster_width = w.parent_paned.get_position()
                 gajim.config.set('roster_width', roster_width)
 
             while w.notebook.get_n_pages():
diff --git a/src/music_track_listener.py b/src/music_track_listener.py
index ced9268babdab355aecef77f74ec13b219ba05e1..4768f90db53d45ae88a480caae57e409d8ba18f5 100644
--- a/src/music_track_listener.py
+++ b/src/music_track_listener.py
@@ -23,7 +23,7 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gobject
+from gi.repository import GObject
 if __name__ == '__main__':
     # install _() func before importing dbus_support
     from common import i18n
@@ -36,9 +36,9 @@ class MusicTrackInfo(object):
     __slots__ = ['title', 'album', 'artist', 'duration', 'track_number',
             'paused']
 
-class MusicTrackListener(gobject.GObject):
+class MusicTrackListener(GObject.GObject):
     __gsignals__ = {
-            'music-track-changed': (gobject.SIGNAL_RUN_LAST, None, (object,)),
+            'music-track-changed': (GObject.SignalFlags.RUN_LAST, None, (object,)),
     }
 
     _instance = None
@@ -290,14 +290,14 @@ class MusicTrackListener(gobject.GObject):
 if __name__ == '__main__':
     def music_track_change_cb(listener, music_track_info):
         if music_track_info is None:
-            print 'Stop!'
+            print('Stop!')
         else:
-            print music_track_info.title
+            print(music_track_info.title)
     listener = MusicTrackListener.get()
     listener.connect('music-track-changed', music_track_change_cb)
     track = listener.get_playing_track()
     if track is None:
-        print 'Now not playing anything'
+        print('Now not playing anything')
     else:
-        print 'Now playing: "%s" by %s' % (track.title, track.artist)
-    gobject.MainLoop().run()
+        print('Now playing: "%s" by %s' % (track.title, track.artist))
+    GObject.MainLoop().run()
diff --git a/src/negotiation.py b/src/negotiation.py
index f1135147da187891cd77f63d4f8a9dc29e9e7831..800e10c432a36abb6d84f2a92fe9f53898ca1c1f 100644
--- a/src/negotiation.py
+++ b/src/negotiation.py
@@ -49,7 +49,7 @@ class FeatureNegotiationWindow:
         dataform = dataforms.ExtendForm(node = self.form)
         self.data_form_widget = dataforms_widget.DataFormWidget(dataform)
         self.data_form_widget.show()
-        config_vbox.pack_start(self.data_form_widget)
+        config_vbox.pack_start(self.data_form_widget, True, True, 0)
 
         self.xml.connect_signals(self)
         self.window.show_all()
diff --git a/src/network_manager_listener.py b/src/network_manager_listener.py
index ce29e9bd5a60b2156fadd0a283f5d4ba851e2c1c..504bf3fbe35d1d663733f56464f69c5311df005d 100644
--- a/src/network_manager_listener.py
+++ b/src/network_manager_listener.py
@@ -29,7 +29,7 @@ def device_now_active(self, *args):
     """
     For Network Manager 0.6
     """
-    for connection in gajim.connections.itervalues():
+    for connection in gajim.connections.values():
         if gajim.config.get_per('accounts', connection.name,
         'listen_to_network_manager') and connection.time_to_reconnect:
             connection._reconnect()
@@ -38,7 +38,7 @@ def device_no_longer_active(self, *args):
     """
     For Network Manager 0.6
     """
-    for connection in gajim.connections.itervalues():
+    for connection in gajim.connections.values():
         if gajim.config.get_per('accounts', connection.name,
         'listen_to_network_manager') and connection.connected > 1:
             connection._disconnectedReconnCB()
@@ -49,12 +49,12 @@ def state_changed(state):
     """
     nm_state = props.Get("org.freedesktop.NetworkManager", "State")
     if nm_state == 3 or nm_state == 70:
-        for connection in gajim.connections.itervalues():
+        for connection in gajim.connections.values():
             if gajim.config.get_per('accounts', connection.name,
             'listen_to_network_manager') and connection.time_to_reconnect:
                 connection._reconnect()
     else:
-        for connection in gajim.connections.itervalues():
+        for connection in gajim.connections.values():
             if gajim.config.get_per('accounts', connection.name,
             'listen_to_network_manager') and connection.connected > 1:
                 connection._disconnectedReconnCB()
diff --git a/src/notify.py b/src/notify.py
index 704d3266f656ea820c1bc47b42dd9668edfdecbc..2e0d0e0f9f8b1c86aec0d789b2628f7454eb55ad 100644
--- a/src/notify.py
+++ b/src/notify.py
@@ -30,9 +30,10 @@
 import os
 import time
 from dialogs import PopupNotificationWindow
-import gobject
+from gi.repository import GObject
+from gi.repository import GLib
 import gtkgui_helpers
-import gtk
+from gi.repository import Gtk
 
 from common import gajim
 from common import helpers
@@ -45,8 +46,8 @@ if dbus_support.supported:
 
 USER_HAS_PYNOTIFY = True # user has pynotify module
 try:
-    import pynotify
-    pynotify.init('Gajim Notification')
+    from gi.repository import Notify
+    Notify.init('Gajim Notification')
 except ImportError:
     USER_HAS_PYNOTIFY = False
 
@@ -89,12 +90,12 @@ text=None, timeout=-1):
     if gajim.config.get('use_notif_daemon') and dbus_support.supported:
         try:
             DesktopNotification(event_type, jid, account, msg_type,
-                path_to_image, title, gobject.markup_escape_text(text), timeout)
+                path_to_image, title, GLib.markup_escape_text(text), timeout)
             return  # sucessfully did D-Bus Notification procedure!
-        except dbus.DBusException, e:
+        except dbus.DBusException as e:
             # Connection to D-Bus failed
             gajim.log.debug(str(e))
-        except TypeError, e:
+        except TypeError as e:
             # This means that we sent the message incorrectly
             gajim.log.debug(str(e))
 
@@ -103,17 +104,17 @@ text=None, timeout=-1):
         if not text and event_type == 'new_message':
             # empty text for new_message means do_preview = False
             # -> default value for text
-            _text = gobject.markup_escape_text(
-                gajim.get_name_from_jid(account, jid))
+            _text = GLib.markup_escape_text(gajim.get_name_from_jid(account,
+                jid))
         else:
-            _text = gobject.markup_escape_text(text)
+            _text = GLib.markup_escape_text(text)
 
         if not title:
             _title = ''
         else:
             _title = title
 
-        notification = pynotify.Notification(_title, _text)
+        notification = Notify.Notification(_title, _text)
         notification.set_timeout(timeout*1000)
 
         notification.set_category(event_type)
@@ -122,14 +123,14 @@ text=None, timeout=-1):
         notification.set_data('account', account)
         notification.set_data('msg_type', msg_type)
         notification.set_property('icon-name', path_to_image)
-        if 'actions' in pynotify.get_server_caps():
+        if 'actions' in Notify.get_server_caps():
             notification.add_action('default', 'Default Action',
                     on_pynotify_notification_clicked)
 
         try:
             notification.show()
             return
-        except gobject.GError, e:
+        except GObject.GError as e:
             # Connection to notification-daemon failed, see #2893
             gajim.log.debug(str(e))
 
@@ -156,8 +157,16 @@ class Notification:
 
     def _nec_notification(self, obj):
         if obj.do_popup:
+            if obj.popup_image:
+                icon_path = gtkgui_helpers.get_icon_path(obj.popup_image, 48)
+                if icon_path:
+                    image_path = icon_path
+            elif obj.popup_image_path:
+                image_path = obj.popup_image_path
+            else:
+                image_path = ''
             popup(obj.popup_event_type, obj.jid, obj.conn.name,
-                obj.popup_msg_type, path_to_image=obj.popup_image,
+                obj.popup_msg_type, path_to_image=image_path,
                 title=obj.popup_title, text=obj.popup_text,
                 timeout=obj.popup_timeout)
 
@@ -357,7 +366,8 @@ class DesktopNotification:
             if gajim.interface.systray_enabled and \
             gajim.config.get('attach_notifications_to_systray'):
                 status_icon = gajim.interface.systray.status_icon
-                x, y, width, height = status_icon.get_geometry()[1]
+                rect = status_icon.get_geometry()[2]
+                x, y, width, height = rect.x, rect.y, rect.width, rect.height
                 pos_x = x + (width / 2)
                 pos_y = y + (height / 2)
                 hints = {'x': pos_x, 'y': pos_y}
@@ -397,7 +407,7 @@ class DesktopNotification:
                         dbus.UInt32(self.timeout*1000),
                         reply_handler=self.attach_by_id,
                         error_handler=self.notify_another_way)
-                except Exception, e:
+                except Exception as e:
                     self.notify_another_way(e)
             else:
                 try:
@@ -412,7 +422,7 @@ class DesktopNotification:
                         dbus.UInt32(self.timeout*1000),
                         reply_handler=self.attach_by_id,
                         error_handler=self.notify_another_way)
-                except Exception, e:
+                except Exception as e:
                     self.notify_another_way(e)
 
     def attach_by_id(self, id_):
diff --git a/src/plugins/__init__.py b/src/plugins/__init__.py
index 0d5d18fda2885d02b94e8a64b898491f791f3320..07b0b6c5613d530a4b03dbdc5c40750e7499833f 100644
--- a/src/plugins/__init__.py
+++ b/src/plugins/__init__.py
@@ -24,7 +24,7 @@ Main file of plugins package.
 :license: GPL
 '''
 
-from pluginmanager import PluginManager
-from plugin import GajimPlugin
+from .pluginmanager import PluginManager
+from .plugin import GajimPlugin
 
 __all__ = ['PluginManager', 'GajimPlugin']
diff --git a/src/plugins/gui.py b/src/plugins/gui.py
index 864c929721856f1f2f9fb998e0ebf0c23c148437..bc99e52cf1865e90c8d12b14b117b535f3040dd2 100644
--- a/src/plugins/gui.py
+++ b/src/plugins/gui.py
@@ -26,8 +26,11 @@ GUI classes related to plug-in management.
 
 __all__ = ['PluginsWindow']
 
-import pango
-import gtk, gobject, os
+from gi.repository import Pango
+from gi.repository import Gtk
+from gi.repository import GdkPixbuf
+from gi.repository import GLib
+import os
 
 import gtkgui_helpers
 from dialogs import WarningDialog, YesNoDialog, ArchiveChooserDialog
@@ -68,45 +71,43 @@ class PluginsWindow(object):
         self.plugin_description_textview = HtmlTextView()
         sw = self.xml.get_object('scrolledwindow2')
         sw.add(self.plugin_description_textview)
-        attr_list = pango.AttrList()
-        attr_list.insert(pango.AttrWeight(pango.WEIGHT_BOLD, 0, -1))
-        self.plugin_name_label.set_attributes(attr_list)
-
-        self.installed_plugins_model = gtk.ListStore(gobject.TYPE_PYOBJECT,
-            gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, gobject.TYPE_BOOLEAN,
-            gtk.gdk.Pixbuf)
+        self.installed_plugins_model = Gtk.ListStore(object, str, bool, bool,
+            GdkPixbuf.Pixbuf)
         self.installed_plugins_treeview.set_model(self.installed_plugins_model)
         self.installed_plugins_treeview.set_rules_hint(True)
 
-        renderer = gtk.CellRendererText()
-        col = gtk.TreeViewColumn(_('Plugin'))#, renderer, text=NAME)
-        cell = gtk.CellRendererPixbuf()
+        renderer = Gtk.CellRendererText()
+        col = Gtk.TreeViewColumn(_('Plugin'))#, renderer, text=NAME)
+        cell = Gtk.CellRendererPixbuf()
         col.pack_start(cell, False)
         col.add_attribute(cell, 'pixbuf', ICON)
         col.pack_start(renderer, True)
         col.add_attribute(renderer, 'text', NAME)
+        col.set_property('expand', True)
         self.installed_plugins_treeview.append_column(col)
 
-        renderer = gtk.CellRendererToggle()
+        renderer = Gtk.CellRendererToggle()
         renderer.connect('toggled', self.installed_plugins_toggled_cb)
-        col = gtk.TreeViewColumn(_('Active'), renderer, active=ACTIVE,
+        col = Gtk.TreeViewColumn(_('Active'), renderer, active=ACTIVE,
             activatable=ACTIVATABLE)
         self.installed_plugins_treeview.append_column(col)
 
-        icon = gtk.Image()
-        self.def_icon = icon.render_icon(gtk.STOCK_PREFERENCES,
-            gtk.ICON_SIZE_MENU)
+        icon = Gtk.Image()
+        self.def_icon = icon.render_icon_pixbuf(Gtk.STOCK_PREFERENCES,
+            Gtk.IconSize.MENU)
 
         # connect signal for selection change
         selection = self.installed_plugins_treeview.get_selection()
         selection.connect('changed',
             self.installed_plugins_treeview_selection_changed)
-        selection.set_mode(gtk.SELECTION_SINGLE)
+        selection.set_mode(Gtk.SelectionMode.SINGLE)
 
         self._clear_installed_plugin_info()
 
         self.fill_installed_plugins_model()
-        selection.select_iter(self.installed_plugins_model.get_iter_root())
+        root_iter = self.installed_plugins_model.get_iter_first()
+        if root_iter:
+            selection.select_iter(root_iter )
 
         self.xml.connect_signals(self)
 
@@ -118,7 +119,7 @@ class PluginsWindow(object):
 
 
     def on_plugins_notebook_switch_page(self, widget, page, page_num):
-        gobject.idle_add(self.xml.get_object('close_button').grab_focus)
+        GLib.idle_add(self.xml.get_object('close_button').grab_focus)
 
     @log_calls('PluginsWindow')
     def installed_plugins_treeview_selection_changed(self, treeview_selection):
@@ -136,11 +137,12 @@ class PluginsWindow(object):
         self.plugin_name_label.set_text(plugin.name)
         self.plugin_version_label.set_text(plugin.version)
         self.plugin_authors_label.set_text(plugin.authors)
-        label = self.plugin_homepage_linkbutton.get_children()[0]
-        label.set_ellipsize(pango.ELLIPSIZE_END)
         self.plugin_homepage_linkbutton.set_uri(plugin.homepage)
         self.plugin_homepage_linkbutton.set_label(plugin.homepage)
+        label = self.plugin_homepage_linkbutton.get_children()[0]
+        label.set_ellipsize(Pango.EllipsizeMode.END)
         self.plugin_homepage_linkbutton.set_property('sensitive', True)
+
         desc_textbuffer = self.plugin_description_textview.get_buffer()
         desc_textbuffer.set_text('')
         txt = plugin.description
@@ -152,13 +154,12 @@ class PluginsWindow(object):
         txt += ' </body>'
         self.plugin_description_textview.display_html(txt,
             self.plugin_description_textview, None)
+
         self.plugin_description_textview.set_property('sensitive', True)
         self.uninstall_plugin_button.set_property('sensitive',
             gajim.PLUGINS_DIRS[1] in plugin.__path__)
-        if plugin.config_dialog is None:
-            self.configure_plugin_button.set_property('sensitive', False)
-        else:
-            self.configure_plugin_button.set_property('sensitive', True)
+        self.configure_plugin_button.set_property(
+            'sensitive', not plugin.config_dialog is None)
 
     def _clear_installed_plugin_info(self):
         self.plugin_name_label.set_text('')
@@ -178,7 +179,7 @@ class PluginsWindow(object):
     def fill_installed_plugins_model(self):
         pm = gajim.plugin_manager
         self.installed_plugins_model.clear()
-        self.installed_plugins_model.set_sort_column_id(1, gtk.SORT_ASCENDING)
+        self.installed_plugins_model.set_sort_column_id(1, Gtk.SortType.ASCENDING)
 
         for plugin in pm.plugins:
             icon = self.get_plugin_icon(plugin)
@@ -190,7 +191,7 @@ class PluginsWindow(object):
                 plugin.__path__)[1]) + '.png'
         icon = self.def_icon
         if os.path.isfile(icon_file):
-            icon = gtk.gdk.pixbuf_new_from_file_at_size(icon_file, 16, 16)
+            icon = GdkPixbuf.Pixbuf.new_from_file_at_size(icon_file, 16, 16)
         return icon
 
     @log_calls('PluginsWindow')
@@ -203,7 +204,7 @@ class PluginsWindow(object):
         else:
             try:
                 gajim.plugin_manager.activate_plugin(plugin)
-            except GajimPluginActivateException, e:
+            except GajimPluginActivateException as e:
                 WarningDialog(_('Plugin failed'), str(e),
                     transient_for=self.window)
                 return
@@ -244,11 +245,11 @@ class PluginsWindow(object):
         model, iter = selection.get_selected()
         if iter:
             plugin = model.get_value(iter, PLUGIN)
-            plugin_name = model.get_value(iter, NAME).decode('utf-8')
+            plugin_name = model.get_value(iter, NAME)
             is_active = model.get_value(iter, ACTIVE)
             try:
                 gajim.plugin_manager.remove_plugin(plugin)
-            except PluginsystemError, e:
+            except PluginsystemError as e:
                 WarningDialog(_('Unable to properly remove the plugin'),
                     str(e), self.window)
                 return
@@ -271,7 +272,7 @@ class PluginsWindow(object):
                     return
                 model = self.installed_plugins_model
 
-                for row in xrange(len(model)):
+                for row in list(range(len(model))):
                     if plugin == model[row][PLUGIN]:
                         model.remove(model.get_iter((row, PLUGIN)))
                         break
@@ -282,12 +283,12 @@ class PluginsWindow(object):
                 sel.select_iter(iter_)
 
             YesNoDialog(_('Plugin already exists'), sectext=_('Overwrite?'),
-                on_response_yes=on_yes)
+                on_response_yes=on_yes, transient_for=self.window)
 
         def _try_install(zip_filename):
             try:
                 plugin = gajim.plugin_manager.install_from_zip(zip_filename)
-            except PluginsystemError, er_type:
+            except PluginsystemError as er_type:
                 error_text = str(er_type)
                 if error_text == _('Plugin already exists'):
                     _on_plugin_exists(zip_filename)
@@ -307,19 +308,24 @@ class PluginsWindow(object):
         self.dialog = ArchiveChooserDialog(on_response_ok=_try_install)
 
 
-class GajimPluginConfigDialog(gtk.Dialog):
+class GajimPluginConfigDialog(Gtk.Dialog):
 
     @log_calls('GajimPluginConfigDialog')
     def __init__(self, plugin, **kwargs):
-        gtk.Dialog.__init__(self, '%s %s'%(plugin.name, _('Configuration')),
+        Gtk.Dialog.__init__(self, '%s %s'%(plugin.name, _('Configuration')),
                                                                     **kwargs)
         self.plugin = plugin
-        button = self.add_button('gtk-close', gtk.RESPONSE_CLOSE)
+        button = self.add_button('gtk-close', Gtk.ResponseType.CLOSE)
         button.connect('clicked', self.on_close_button_clicked)
-        self.child.set_spacing(3)
+
+        self.get_child().set_spacing(3)
 
         self.init()
 
+    def on_close_dialog(self, widget, data):
+        self.hide()
+        return True
+
     def on_close_button_clicked(self, widget):
         self.hide()
 
@@ -328,6 +334,7 @@ class GajimPluginConfigDialog(gtk.Dialog):
         self.set_transient_for(parent)
         self.on_run()
         self.show_all()
+        self.connect('delete-event', self.on_close_dialog)
         result =  super(GajimPluginConfigDialog, self)
         return result
 
diff --git a/src/plugins/helpers.py b/src/plugins/helpers.py
index 18c747527add960c6f1480240f62ad6e4f12570e..b37076a87284d424655411b577576ffaabb02536 100644
--- a/src/plugins/helpers.py
+++ b/src/plugins/helpers.py
@@ -97,7 +97,7 @@ class log_calls(object):
         :rtype: function
         '''
 
-        self.full_func_name += f.func_name
+        self.full_func_name += f.__name__
         if self.log_this_class:
             @functools.wraps(f)
             def wrapper(*args, **kwargs):
diff --git a/src/plugins/plugin.py b/src/plugins/plugin.py
index b668c276576c590c59d612355e5e3e28bec588e1..b87689093fdcd5fd0a2add88a3e9891e261643fb 100644
--- a/src/plugins/plugin.py
+++ b/src/plugins/plugin.py
@@ -40,30 +40,30 @@ class GajimPlugin(object):
     '''
     Base class for implementing Gajim plugins.
     '''
-    name = u''
+    name = ''
     '''
     Name of plugin.
 
     Will be shown in plugins management GUI.
 
-    :type: unicode
+    :type: str
     '''
-    short_name = u''
+    short_name = ''
     '''
     Short name of plugin.
 
     Used for quick indentification of plugin.
 
-    :type: unicode
+    :type: str
 
     :todo: decide whether we really need this one, because class name (with
             module name) can act as such short name
     '''
-    version = u''
+    version = ''
     '''
     Version of plugin.
 
-    :type: unicode
+    :type: str
 
     :todo: decide how to compare version between each other (which one
             is higher). Also rethink: do we really need to compare versions
@@ -71,11 +71,11 @@ class GajimPlugin(object):
             same plugin class but with different version and we want only the newest
             one to be active - is such policy good?
     '''
-    description = u''
+    description = ''
     '''
     Plugin description.
 
-    :type: unicode
+    :type: str
 
     :todo: should be allow rich text here (like HTML or reStructuredText)?
     '''
@@ -83,16 +83,16 @@ class GajimPlugin(object):
     '''
     Plugin authors.
 
-    :type: [] of unicode
+    :type: [] of str
 
     :todo: should we decide on any particular format of author strings?
             Especially: should we force format of giving author's e-mail?
     '''
-    homepage = u''
+    homepage = ''
     '''
     URL to plug-in's homepage.
 
-    :type: unicode
+    :type: str
 
     :todo: should we check whether provided string is valid URI? (Maybe
     using 'property')
@@ -120,7 +120,7 @@ class GajimPlugin(object):
 
     Values are tuples: (default_value, option_description). The first one can
     be anything (this is the advantage of using shelve/pickle instead of
-    custom-made     config I/O handling); the second one should be unicode (gettext
+    custom-made     config I/O handling); the second one should be str (gettext
     can be used if need and/or translation is planned).
 
     :type: {} of 2-element tuples
@@ -196,15 +196,14 @@ class GajimPlugin(object):
     def deactivate(self):
         pass
 
-import cPickle
+import pickle
 
 class GajimPluginConfig():
     @log_calls('GajimPluginConfig')
     def __init__(self, plugin):
         self.plugin = plugin
         self.FILE_PATH = os.path.join(gajim.PLUGINS_CONFIG_DIR,
-            self.plugin.short_name).decode('utf-8').encode(
-            locale.getpreferredencoding())
+            self.plugin.short_name).encode(locale.getpreferredencoding())
         self.data = {}
 
     @log_calls('GajimPluginConfig')
@@ -242,7 +241,7 @@ class GajimPluginConfig():
     @log_calls('GajimPluginConfig')
     def save(self):
         fd = open(self.FILE_PATH, 'wb')
-        cPickle.dump(self.data, fd)
+        pickle.dump(self.data, fd)
         fd.close()
 
     @log_calls('GajimPluginConfig')
@@ -250,21 +249,21 @@ class GajimPluginConfig():
         if os.path.isfile(self.FILE_PATH):
             fd = open(self.FILE_PATH, 'rb')
             try:
-                self.data = cPickle.load(fd)
+                self.data = pickle.load(fd)
                 fd.close()
             except:
                 fd.close()
                 try:
                     import shelve
                     s = shelve.open(self.FILE_PATH)
-                    for (k, v) in s.iteritems():
+                    for (k, v) in s.items():
                         self.data[k] = v
                     if not isinstance(self.data, dict):
                         raise GajimPluginException
                     s.close()
                     self.save()
                 except:
-                    log.warn('%s plugin config file not readable. Saving it as '
+                    log.warning('%s plugin config file not readable. Saving it as '
                         '%s and creating a new one' % (self.plugin.short_name,
                         self.FILE_PATH + '.bak'))
                     if os.path.exists(self.FILE_PATH + '.bak'):
diff --git a/src/plugins/pluginmanager.py b/src/plugins/pluginmanager.py
index 2a0f163718afa6bbceff071cf679b02ed8695f6c..bcad829ff60ad5bc93b2884ffd576d6dc291cd64 100644
--- a/src/plugins/pluginmanager.py
+++ b/src/plugins/pluginmanager.py
@@ -31,7 +31,7 @@ import sys
 import fnmatch
 import zipfile
 from shutil import rmtree
-import ConfigParser
+import configparser
 
 from common import gajim
 from common import nec
@@ -41,7 +41,7 @@ from plugins.helpers import log, log_calls, Singleton
 from plugins.helpers import GajimPluginActivateException
 from plugins.plugin import GajimPlugin, GajimPluginException
 
-class PluginManager(object):
+class PluginManager(metaclass=Singleton):
     '''
     Main plug-in management class.
 
@@ -158,7 +158,7 @@ class PluginManager(object):
         active yet).
 
         :param gui_extpoint_name: name of GUI extension point.
-        :type gui_extpoint_name: unicode
+        :type gui_extpoint_name: str
         :param args: parameters to be passed to extension point handlers
                 (typically and object that invokes `gui_extension_point`;
                 however, this can be practically anything)
@@ -209,7 +209,7 @@ class PluginManager(object):
                 freedom, but is this necessary?
 
         :param gui_extpoint_name: name of GUI extension point.
-        :type gui_extpoint_name: unicode
+        :type gui_extpoint_name: str
         :param args: arguments that `PluginManager.gui_extension_point` was
                 called with for this extension point. This is used (along with
                 extension point name) to identify element to be removed.
@@ -258,14 +258,14 @@ class PluginManager(object):
                 handlers[0](*args)
 
     def _register_events_handlers_in_ged(self, plugin):
-        for event_name, handler in plugin.events_handlers.iteritems():
+        for event_name, handler in plugin.events_handlers.items():
             priority = handler[0]
             handler_function = handler[1]
             gajim.ged.register_event_handler(event_name, priority,
                 handler_function)
 
     def _remove_events_handler_from_ged(self, plugin):
-        for event_name, handler in plugin.events_handlers.iteritems():
+        for event_name, handler in plugin.events_handlers.items():
             priority = handler[0]
             handler_function = handler[1]
             gajim.ged.remove_event_handler(event_name, priority,
@@ -302,7 +302,7 @@ class PluginManager(object):
             self.active_plugins.append(plugin)
             try:
                 plugin.activate()
-            except GajimPluginException, e:
+            except GajimPluginException as e:
                 self.deactivate_plugin(plugin)
                 raise GajimPluginActivateException(str(e))
             self._set_plugin_active_in_global_config(plugin)
@@ -312,7 +312,7 @@ class PluginManager(object):
         # remove GUI extension points handlers (provided by plug-in) from
         # handlers list
         for gui_extpoint_name, gui_extpoint_handlers in \
-        plugin.gui_extension_points.iteritems():
+        plugin.gui_extension_points.items():
             self.gui_extension_points_handlers[gui_extpoint_name].remove(
                 gui_extpoint_handlers)
 
@@ -320,7 +320,7 @@ class PluginManager(object):
         # cleaning up method that must be provided by plug-in developer
         # for each handled GUI extension point)
         for gui_extpoint_name, gui_extpoint_handlers in \
-        plugin.gui_extension_points.iteritems():
+        plugin.gui_extension_points.items():
             if gui_extpoint_name in self.gui_extension_points:
                 for gui_extension_point_args in self.gui_extension_points[
                 gui_extpoint_name]:
@@ -344,14 +344,14 @@ class PluginManager(object):
     @log_calls('PluginManager')
     def _add_gui_extension_points_handlers_from_plugin(self, plugin):
         for gui_extpoint_name, gui_extpoint_handlers in \
-        plugin.gui_extension_points.iteritems():
+        plugin.gui_extension_points.items():
             self.gui_extension_points_handlers.setdefault(gui_extpoint_name,
                 []).append(gui_extpoint_handlers)
 
     @log_calls('PluginManager')
     def _handle_all_gui_extension_points_with_plugin(self, plugin):
         for gui_extpoint_name, gui_extpoint_handlers in \
-        plugin.gui_extension_points.iteritems():
+        plugin.gui_extension_points.items():
             if gui_extpoint_name in self.gui_extension_points:
                 for gui_extension_point_args in self.gui_extension_points[
                 gui_extpoint_name]:
@@ -394,7 +394,7 @@ class PluginManager(object):
         Scans given directory for plugin classes.
 
         :param path: directory to scan for plugins
-        :type path: unicode
+        :type path: str
 
         :return: list of found plugin classes (subclasses of `GajimPlugin`
         :rtype: [] of class objects
@@ -407,7 +407,7 @@ class PluginManager(object):
         '''
         from plugins.plugins_i18n import _
         plugins_found = []
-        conf = ConfigParser.ConfigParser()
+        conf = configparser.ConfigParser()
         fields = ('name', 'short_name', 'version', 'description', 'authors',
             'homepage')
         if not os.path.isdir(path):
@@ -420,39 +420,61 @@ class PluginManager(object):
         for elem_name in dir_list:
             file_path = os.path.join(path, elem_name)
 
-            module = None
-
             if os.path.isfile(file_path) and fnmatch.fnmatch(file_path, '*.py'):
                 module_name = os.path.splitext(elem_name)[0]
-                try:
-                    module = __import__(module_name)
-                except ValueError, value_error:
-                    log.debug(value_error)
-                except ImportError, import_error:
-                    log.debug(import_error)
-
             elif os.path.isdir(file_path) and scan_dirs:
                 module_name = elem_name
-                if module_name in sys.modules:
-                # do not load the module twice
-                    continue
                 file_path += os.path.sep
-                try:
-                    module = __import__(module_name)
-                except ValueError, value_error:
-                    log.debug(value_error)
-                except ImportError, import_error:
-                    log.debug(import_error)
-
-
-            if module is None:
-                continue
 
             manifest_path = os.path.join(os.path.dirname(file_path),
                 'manifest.ini')
             if scan_dirs and (not os.path.isfile(manifest_path)):
                 continue
 
+            # read metadata from manifest.ini
+            conf.remove_section('info')
+            conf_file = open(manifest_path)
+            conf.read_file(conf_file)
+            conf_file.close()
+
+            try:
+                min_v = conf.get('info', 'min_gajim_version')
+            except Exception:
+                min_v = None
+            try:
+                max_v = conf.get('info', 'max_gajim_version')
+            except Exception:
+                max_v = None
+
+            gajim_v = gajim.config.get('version')
+            gajim_v = gajim_v.split('-', 1)[0]
+            gajim_v = gajim_v.split('.')
+
+            if min_v:
+                min_v = min_v.split('.')
+                if gajim_v < min_v:
+                    continue
+            if max_v:
+                max_v = max_v.split('.')
+                if gajim_v > max_v:
+                    continue
+
+
+            module = None
+
+            if module_name in sys.modules:
+            # do not load the module twice
+                continue
+            try:
+                module = __import__(module_name)
+            except ValueError as value_error:
+                log.debug(str(value_error))
+            except ImportError as import_error:
+                log.debug(str(import_error))
+
+            if module is None:
+                continue
+
             log.debug('Attributes processing started')
             for module_attr_name in [attr_name for attr_name in dir(module)
             if not (attr_name.startswith('__') or attr_name.endswith('__'))]:
@@ -467,34 +489,30 @@ class PluginManager(object):
                     module_attr.__path__ = os.path.abspath(
                         os.path.dirname(file_path))
 
-                    # read metadata from manifest.ini
-                    conf.readfp(open(manifest_path, 'r'))
                     for option in fields:
                         if conf.get('info', option) is '':
-                            raise ConfigParser.NoOptionError, 'field empty'
+                            raise configparser.NoOptionError('field empty')
                         if option == 'description':
                             setattr(module_attr, option, _(conf.get('info', option)))
                             continue
                         setattr(module_attr, option, conf.get('info', option))
-                    conf.remove_section('info')
 
                     plugins_found.append(module_attr)
-
-                except TypeError, type_error:
+                except TypeError:
                     # set plugin localization
                     try:
                         module_attr._ = _
-                    except AttributeError, type_error:
+                    except AttributeError:
                         pass
-                except ConfigParser.NoOptionError, type_error:
+                except configparser.NoOptionError:
                     # all fields are required
                     log.debug('%s : %s' % (module_attr_name,
                         'wrong manifest file. all fields are required!'))
-                except ConfigParser.NoSectionError, type_error:
+                except configparser.NoSectionError:
                     # info section are required
                     log.debug('%s : %s' % (module_attr_name,
                         'wrong manifest file. info section are required!'))
-                except ConfigParser.MissingSectionHeaderError, type_error:
+                except configparser.MissingSectionHeaderError:
                     # info section are required
                     log.debug('%s : %s' % (module_attr_name,
                         'wrong manifest file. section are required!'))
@@ -507,10 +525,10 @@ class PluginManager(object):
         '''
         try:
             zip_file = zipfile.ZipFile(zip_filename)
-        except zipfile.BadZipfile, e:
+        except zipfile.BadZipfile:
             # it is not zip file
             raise PluginsystemError(_('Archive corrupted'))
-        except IOError,e:
+        except IOError:
             raise PluginsystemError(_('Archive empty'))
 
         if zip_file.testzip():
diff --git a/src/plugins/plugins_i18n.py b/src/plugins/plugins_i18n.py
index 769d8b06031b45a28291ef1c4b51212a2afc98e6..91ee811dc89e36fdb72fc2bdabdc6c7c6387a796 100644
--- a/src/plugins/plugins_i18n.py
+++ b/src/plugins/plugins_i18n.py
@@ -36,6 +36,6 @@ if os.name != 'nt':
 try:
     t = gettext.translation(APP, plugins_locale_dir)
     _ = t.gettext
-except IOError, msg:
+except IOError:
     from common import i18n
     _ = gettext.gettext
diff --git a/src/profile_window.py b/src/profile_window.py
index 0b0f5b051ce2537c2385f8334c7285a9e36f172a..d5dd9fd92b7294e5a5276380c94ce8340cc72d3b 100644
--- a/src/profile_window.py
+++ b/src/profile_window.py
@@ -22,8 +22,11 @@
 
 # THIS FILE IS FOR **OUR** PROFILE (when we edit our INFO)
 
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository import GObject
+from gi.repository import GLib
 import base64
 import mimetypes
 import os
@@ -58,12 +61,12 @@ class ProfileWindow:
         self.avatar_encoded = None
         self.message_id = self.statusbar.push(self.context_id,
             _('Retrieving profile...'))
-        self.update_progressbar_timeout_id = gobject.timeout_add(100,
+        self.update_progressbar_timeout_id = GLib.timeout_add(100,
             self.update_progressbar)
         self.remove_statusbar_timeout_id = None
 
         # Create Image for avatar button
-        image = gtk.Image()
+        image = Gtk.Image()
         self.xml.get_object('PHOTO_button').set_image(image)
         self.xml.connect_signals(self)
         gajim.ged.register_event_handler('vcard-published', ged.GUI1,
@@ -76,21 +79,21 @@ class ProfileWindow:
         self.xml.get_object('ok_button').grab_focus()
 
     def on_information_notebook_switch_page(self, widget, page, page_num):
-        gobject.idle_add(self.xml.get_object('ok_button').grab_focus)
+        GLib.idle_add(self.xml.get_object('ok_button').grab_focus)
 
     def update_progressbar(self):
         self.progressbar.pulse()
         return True # loop forever
 
     def remove_statusbar(self, message_id):
-        self.statusbar.remove_message(self.context_id, message_id)
+        self.statusbar.remove(self.context_id, message_id)
         self.remove_statusbar_timeout_id = None
 
     def on_profile_window_destroy(self, widget):
         if self.update_progressbar_timeout_id is not None:
-            gobject.source_remove(self.update_progressbar_timeout_id)
+            GLib.source_remove(self.update_progressbar_timeout_id)
         if self.remove_statusbar_timeout_id is not None:
-            gobject.source_remove(self.remove_statusbar_timeout_id)
+            GLib.source_remove(self.remove_statusbar_timeout_id)
         gajim.ged.remove_event_handler('vcard-published', ged.GUI1,
             self._nec_vcard_published)
         gajim.ged.remove_event_handler('vcard-not-published', ged.GUI1,
@@ -102,7 +105,7 @@ class ProfileWindow:
             self.dialog.destroy()
 
     def on_profile_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             self.window.destroy()
 
     def on_clear_button_clicked(self, widget):
@@ -132,12 +135,12 @@ class ProfileWindow:
                 msg = _('File does not exist')
             if not invalid_file and filesize > 16384: # 16 kb
                 try:
-                    pixbuf = gtk.gdk.pixbuf_new_from_file(path_to_file)
+                    pixbuf = GdkPixbuf.Pixbuf.new_from_file(path_to_file)
                     # get the image at 'notification size'
                     # and hope that user did not specify in ACE crazy size
                     scaled_pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf,
                             'tooltip')
-                except gobject.GError, msg: # unknown format
+                except GObject.GError as msg: # unknown format
                     # msg should be string, not object instance
                     msg = str(msg)
                     invalid_file = True
@@ -150,11 +153,11 @@ class ProfileWindow:
                 if scaled_pixbuf:
                     path_to_file = os.path.join(gajim.TMP,
                             'avatar_scaled.png')
-                    scaled_pixbuf.save(path_to_file, 'png')
+                    scaled_pixbuf.savev(path_to_file, 'png', [], [])
                     must_delete = True
 
-            fd = open(path_to_file, 'rb')
-            data = fd.read()
+            with open(path_to_file, 'rb') as fd:
+                data = fd.read()
             pixbuf = gtkgui_helpers.get_pixbuf_from_data(data)
             try:
                 # rescale it
@@ -171,7 +174,7 @@ class ProfileWindow:
             button.show()
             text_button = self.xml.get_object('NOPHOTO_button')
             text_button.hide()
-            self.avatar_encoded = base64.encodestring(data)
+            self.avatar_encoded = base64.b64encode(data).decode('utf-8')
             # returns None if unknown type
             self.avatar_mime_type = mimetypes.guess_type(path_to_file)[0]
             if must_delete:
@@ -200,7 +203,7 @@ class ProfileWindow:
         If right-clicked, show popup
         """
         if event.button == 3 and self.avatar_encoded: # right click
-            menu = gtk.Menu()
+            menu = Gtk.Menu()
 
             # Try to get pixbuf
             pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(self.jid,
@@ -208,19 +211,21 @@ class ProfileWindow:
 
             if pixbuf not in (None, 'ask'):
                 nick = gajim.config.get_per('accounts', self.account, 'name')
-                menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS)
+                menuitem = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_SAVE_AS,
+                    None)
                 menuitem.connect('activate',
                     gtkgui_helpers.on_avatar_save_as_menuitem_activate,
                     self.jid, nick)
                 menu.append(menuitem)
             # show clear
-            menuitem = gtk.ImageMenuItem(gtk.STOCK_CLEAR)
+            menuitem = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_CLEAR, None)
             menuitem.connect('activate', self.on_clear_button_clicked)
             menu.append(menuitem)
             menu.connect('selection-done', lambda w:w.destroy())
             # show the menu
             menu.show_all()
-            menu.popup(None, None, None, event.button, event.time)
+            menu.attach_to_widget(widget, None)
+            menu.popup(None, None, None, None, event.button, event.time)
         elif event.button == 1: # left click
             self.on_set_avatar_button_clicked(widget)
 
@@ -235,7 +240,7 @@ class ProfileWindow:
                 pritext = _('Wrong date format')
                 dialogs.ErrorDialog(pritext, _('Format of the date must be '
                     'YYYY-MM-DD'), transient_for=self.window)
-                gobject.idle_add(lambda: widget.grab_focus())
+                GLib.idle_add(lambda: widget.grab_focus())
             return True
 
     def set_value(self, entry_name, value):
@@ -289,12 +294,12 @@ class ProfileWindow:
                     self.set_value(i + '_entry', vcard_[i])
         if self.update_progressbar_timeout_id is not None:
             if self.message_id:
-                self.statusbar.remove_message(self.context_id, self.message_id)
+                self.statusbar.remove(self.context_id, self.message_id)
             self.message_id = self.statusbar.push(self.context_id,
                     _('Information received'))
-            self.remove_statusbar_timeout_id = gobject.timeout_add_seconds(3,
-                    self.remove_statusbar, self.message_id)
-            gobject.source_remove(self.update_progressbar_timeout_id)
+            self.remove_statusbar_timeout_id = GLib.timeout_add_seconds(3,
+                self.remove_statusbar, self.message_id)
+            GLib.source_remove(self.update_progressbar_timeout_id)
             self.progressbar.hide()
             self.progressbar.set_fraction(0)
             self.update_progressbar_timeout_id = None
@@ -344,7 +349,7 @@ class ProfileWindow:
                 'ADR_WORK_REGION', 'ADR_WORK_PCODE', 'ADR_WORK_CTRY']
         vcard_ = {}
         for e in entries:
-            txt = self.xml.get_object(e + '_entry').get_text().decode('utf-8')
+            txt = self.xml.get_object(e + '_entry').get_text()
             if txt != '':
                 vcard_ = self.add_to_vcard(vcard_, e, txt)
 
@@ -352,9 +357,9 @@ class ProfileWindow:
         buff = self.xml.get_object('DESC_textview').get_buffer()
         start_iter = buff.get_start_iter()
         end_iter = buff.get_end_iter()
-        txt = buff.get_text(start_iter, end_iter, 0)
+        txt = buff.get_text(start_iter, end_iter, False)
         if txt != '':
-            vcard_['DESC'] = txt.decode('utf-8')
+            vcard_['DESC'] = txt
 
         # Avatar
         if self.avatar_encoded:
@@ -384,14 +389,14 @@ class ProfileWindow:
         self.message_id = self.statusbar.push(self.context_id,
                 _('Sending profile...'))
         self.progressbar.show()
-        self.update_progressbar_timeout_id = gobject.timeout_add(100,
-                self.update_progressbar)
+        self.update_progressbar_timeout_id = GLib.timeout_add(100,
+            self.update_progressbar)
 
     def _nec_vcard_published(self, obj):
         if obj.conn.name != self.account:
             return
         if self.update_progressbar_timeout_id is not None:
-            gobject.source_remove(self.update_progressbar_timeout_id)
+            GLib.source_remove(self.update_progressbar_timeout_id)
             self.update_progressbar_timeout_id = None
         self.window.destroy()
 
@@ -399,13 +404,13 @@ class ProfileWindow:
         if obj.conn.name != self.account:
             return
         if self.message_id:
-            self.statusbar.remove_message(self.context_id, self.message_id)
+            self.statusbar.remove(self.context_id, self.message_id)
         self.message_id = self.statusbar.push(self.context_id,
             _('Information NOT published'))
-        self.remove_statusbar_timeout_id = gobject.timeout_add_seconds(3,
+        self.remove_statusbar_timeout_id = GLib.timeout_add_seconds(3,
             self.remove_statusbar, self.message_id)
         if self.update_progressbar_timeout_id is not None:
-            gobject.source_remove(self.update_progressbar_timeout_id)
+            GLib.source_remove(self.update_progressbar_timeout_id)
             self.progressbar.set_fraction(0)
             self.update_progressbar_timeout_id = None
         dialogs.InformationDialog(_('vCard publication failed'),
diff --git a/src/remote_control.py b/src/remote_control.py
index 6fc4edd76ec7f10a4c834d6eabd9246499133336..c77d4ff03a077913636bb3c9c69162862d775cdb 100644
--- a/src/remote_control.py
+++ b/src/remote_control.py
@@ -26,8 +26,8 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gobject
-import gtk
+from gi.repository import GLib
+from gi.repository import Gtk
 import os
 import base64
 import mimetypes
@@ -75,7 +75,7 @@ def get_dbus_struct(obj):
     """
     if obj is None:
         return DBUS_NONE()
-    if isinstance(obj, (unicode, str)):
+    if isinstance(obj, str):
         return DBUS_STRING(obj)
     if isinstance(obj, int):
         return DBUS_INT32(obj)
@@ -539,7 +539,7 @@ class SignalObject(dbus.service.Object):
             win = gajim.interface.msg_win_mgr.get_window(jid,
                     connected_account).window
             if win.get_property('visible'):
-                win.window.focus(gtk.get_current_event_time())
+                win.window.focus(Gtk.get_current_event_time())
             return DBUS_BOOLEAN(True)
         return DBUS_BOOLEAN(False)
 
@@ -557,8 +557,8 @@ class SignalObject(dbus.service.Object):
                 if account not in gajim.connections:
                     return DBUS_BOOLEAN(False)
                 status = gajim.SHOW_LIST[gajim.connections[account].connected]
-            gobject.idle_add(gajim.interface.roster.send_status, account,
-                    status, message)
+            GLib.idle_add(gajim.interface.roster.send_status, account, status,
+                message)
         else:
             # account not specified, so change the status of all accounts
             for acc in gajim.contacts.get_accounts():
@@ -571,8 +571,8 @@ class SignalObject(dbus.service.Object):
                     if acc not in gajim.connections:
                         continue
                     status_ = gajim.SHOW_LIST[gajim.connections[acc].connected]
-                gobject.idle_add(gajim.interface.roster.send_status, acc,
-                        status_, message)
+                GLib.idle_add(gajim.interface.roster.send_status, acc, status_,
+                    message)
         return DBUS_BOOLEAN(False)
 
     @dbus.service.method(INTERFACE, in_signature='ss', out_signature='')
@@ -585,8 +585,8 @@ class SignalObject(dbus.service.Object):
             gajim.config.set_per('accounts', account, 'priority', prio)
             show = gajim.SHOW_LIST[gajim.connections[account].connected]
             status = gajim.connections[account].status
-            gobject.idle_add(gajim.connections[account].change_status, show,
-                    status)
+            GLib.idle_add(gajim.connections[account].change_status, show,
+                status)
         else:
             # account not specified, so change prio of all accounts
             for acc in gajim.contacts.get_accounts():
@@ -598,8 +598,8 @@ class SignalObject(dbus.service.Object):
                 gajim.config.set_per('accounts', acc, 'priority', prio)
                 show = gajim.SHOW_LIST[gajim.connections[acc].connected]
                 status = gajim.connections[acc].status
-                gobject.idle_add(gajim.connections[acc].change_status, show,
-                        status)
+                GLib.idle_add(gajim.connections[acc].change_status, show,
+                    status)
 
     @dbus.service.method(INTERFACE, in_signature='', out_signature='')
     def show_next_pending_event(self):
@@ -617,13 +617,13 @@ class SignalObject(dbus.service.Object):
         """
         Get vcard info for a contact. Return cached value of the vcard
         """
-        if not isinstance(jid, unicode):
-            jid = unicode(jid)
+        if not isinstance(jid, str):
+            jid = str(jid)
         if not jid:
             raise dbus_support.MissingArgument()
         jid = self._get_real_jid(jid)
 
-        cached_vcard = gajim.connections.values()[0].get_cached_vcard(jid)
+        cached_vcard = list(gajim.connections.values())[0].get_cached_vcard(jid)
         if cached_vcard:
             return get_dbus_struct(cached_vcard)
 
@@ -656,9 +656,9 @@ class SignalObject(dbus.service.Object):
             result['name'] = DBUS_STRING(con.name)
             result['jid'] = DBUS_STRING(gajim.get_jid_from_account(con.name))
             result['message'] = DBUS_STRING(con.status)
-            result['priority'] = DBUS_STRING(unicode(con.priority))
-            result['resource'] = DBUS_STRING(unicode(gajim.config.get_per(
-                    'accounts', con.name, 'resource')))
+            result['priority'] = DBUS_STRING(str(con.priority))
+            result['resource'] = DBUS_STRING(gajim.config.get_per('accounts',
+                con.name, 'resource'))
         return result
 
     @dbus.service.method(INTERFACE, in_signature='s', out_signature='aa{sv}')
@@ -691,12 +691,12 @@ class SignalObject(dbus.service.Object):
         """
         win = gajim.interface.roster.window
         if win.get_property('visible'):
-            gobject.idle_add(win.hide)
+            GLib.idle_add(win.hide)
         else:
             win.present()
             # preserve the 'steal focus preservation'
             if self._is_first():
-                win.window.focus(gtk.get_current_event_time())
+                win.window.focus(Gtk.get_current_event_time())
             else:
                 win.window.focus(long(time()))
 
@@ -709,7 +709,7 @@ class SignalObject(dbus.service.Object):
         win.present()
         # preserve the 'steal focus preservation'
         if self._is_first():
-            win.window.focus(gtk.get_current_event_time())
+            win.window.focus(Gtk.get_current_event_time())
         else:
             win.window.focus(long(time()))
 
@@ -721,7 +721,7 @@ class SignalObject(dbus.service.Object):
         win = gajim.ipython_window
         if win:
             if win.window.is_visible():
-                gobject.idle_add(win.hide)
+                GLib.idle_add(win.hide)
             else:
                 win.show_all()
                 win.present()
@@ -747,7 +747,7 @@ class SignalObject(dbus.service.Object):
     def prefs_store(self):
         try:
             gajim.interface.save_config()
-        except Exception, e:
+        except Exception:
             return DBUS_BOOLEAN(False)
         return DBUS_BOOLEAN(True)
 
@@ -909,9 +909,9 @@ class SignalObject(dbus.service.Object):
         else:
             invalid_file = True
         if not invalid_file and filesize < 16384:
-            fd = open(picture, 'rb')
-            data = fd.read()
-            avatar = base64.encodestring(data)
+            with open(picture, 'rb') as fb:
+                data = fd.read()
+            avatar = base64.b64encode(data).decode('utf-8')
             avatar_mime_type = mimetypes.guess_type(picture)[0]
             vcard={}
             vcard['PHOTO'] = {'BINVAL': avatar}
diff --git a/src/roster_window.py b/src/roster_window.py
index b7801021a9b7f3e052bb299f693c17092099c976..04241cb61ac0c9d99f3d1f7374bd0bceb6b9aecd 100644
--- a/src/roster_window.py
+++ b/src/roster_window.py
@@ -32,9 +32,12 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gtk
-import pango
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository import Pango
+from gi.repository import GObject
+from gi.repository import GLib
 import os
 import sys
 import time
@@ -70,7 +73,7 @@ from common import dbus_support
 if dbus_support.supported:
     import dbus
 
-from nbxmpp.protocol import NS_FILE, NS_ROSTERX
+from nbxmpp.protocol import NS_FILE, NS_ROSTERX, NS_CONFERENCE
 from common.pep import MOODS, ACTIVITIES
 
 #(icon, name, type, jid, account, editable, second pixbuf)
@@ -88,6 +91,10 @@ from common.pep import MOODS, ACTIVITIES
     C_PADLOCK_PIXBUF, # use for account row only
 ) = range(11)
 
+empty_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1)
+empty_pixbuf.fill(0xffffff00)
+
+
 class RosterWindow:
     """
     Class for main window of the GTK+ interface
@@ -95,7 +102,7 @@ class RosterWindow:
 
     def _get_account_iter(self, name, model=None):
         """
-        Return the gtk.TreeIter of the given account or None if not found
+        Return the Gtk.TreeIter of the given account or None if not found
 
         Keyword arguments:
         name -- the account name
@@ -113,14 +120,17 @@ class RosterWindow:
         if model == self.model or it is None:
             return it
         try:
-            return self.modelfilter.convert_child_iter_to_iter(it)
+            (ok, it) = self.modelfilter.convert_child_iter_to_iter(it)
+            if ok:
+                return it
+            return None
         except RuntimeError:
             return None
 
 
     def _get_group_iter(self, name, account, model=None):
         """
-        Return the gtk.TreeIter of the given group or None if not found
+        Return the Gtk.TreeIter of the given group or None if not found
 
         Keyword arguments:
         name -- the group name
@@ -142,14 +152,17 @@ class RosterWindow:
         if model == self.model or it is None:
             return it
         try:
-            return self.modelfilter.convert_child_iter_to_iter(it)
+            (ok, it) = self.modelfilter.convert_child_iter_to_iter(it)
+            if ok:
+                return it
+            return None
         except RuntimeError:
             return None
 
 
     def _get_self_contact_iter(self, account, model=None):
         """
-        Return the gtk.TreeIter of SelfContact or None if not found
+        Return the Gtk.TreeIter of SelfContact or None if not found
 
         Keyword arguments:
         account -- the account of SelfContact
@@ -164,7 +177,7 @@ class RosterWindow:
 
     def _get_contact_iter(self, jid, account, contact=None, model=None):
         """
-        Return a list of gtk.TreeIter of the given contact
+        Return a list of Gtk.TreeIter of the given contact
 
         Keyword arguments:
         jid -- the jid without resource
@@ -201,19 +214,21 @@ class RosterWindow:
         its2 = []
         for it in its:
             try:
-                its2.append(self.modelfilter.convert_child_iter_to_iter(it))
+                (ok, it) = self.modelfilter.convert_child_iter_to_iter(it)
+                if ok:
+                    its2.append(it)
             except RuntimeError:
                 pass
         return its2
 
 
-    def _iter_is_separator(self, model, titer):
+    def _iter_is_separator(self, model, titer, dummy):
         """
         Return True if the given iter is a separator
 
         Keyword arguments:
         model -- the data model
-        iter -- the gtk.TreeIter to test
+        iter -- the Gtk.TreeIter to test
         """
         if model[titer][0] == 'SEPARATOR':
             return True
@@ -247,13 +262,12 @@ class RosterWindow:
             tls_pixbuf = None
             if gajim.account_is_securely_connected(account):
                 # the only way to create a pixbuf from stock
-                tls_pixbuf = self.window.render_icon(
-                        gtk.STOCK_DIALOG_AUTHENTICATION,
-                        gtk.ICON_SIZE_MENU)
+                tls_pixbuf = self.window.render_icon_pixbuf(
+                    Gtk.STOCK_DIALOG_AUTHENTICATION, Gtk.IconSize.MENU)
 
             it = self.model.append(None, [
                 gajim.interface.jabber_state_images['16'][show],
-                gobject.markup_escape_text(account), 'account', our_jid,
+                GLib.markup_escape_text(account), 'account', our_jid,
                 account, None, None, None, None, None, tls_pixbuf] +
                 [None] * self.nb_ext_renderers)
             self._iters[account]['account'] = it
@@ -313,7 +327,7 @@ class RosterWindow:
             iter_parent = self._get_account_iter(account, self.model)
         iter_group = self.model.append(iter_parent,
             [gajim.interface.jabber_state_images['16']['closed'],
-            gobject.markup_escape_text(group), 'group', group, account, None,
+            GLib.markup_escape_text(group), 'group', group, account, None,
             None, None, None, None, None] + [None] * self.nb_ext_renderers)
         self.draw_group(group, account)
         self._iters[account_group]['groups'][group] = iter_group
@@ -450,7 +464,7 @@ class RosterWindow:
                     account_group = 'MERGED'
                 else:
                     account_group = account
-                group = self.model[parent_i][C_JID].decode('utf-8')
+                group = self.model[parent_i][C_JID]
                 if group in gajim.groups[account]:
                     del gajim.groups[account][group]
                 to_be_removed = parent_i
@@ -1025,11 +1039,11 @@ class RosterWindow:
         if gajim.account_is_securely_connected(account) and not self.regroup or\
         self.regroup and num_of_secured and num_of_secured == num_of_accounts:
             # the only way to create a pixbuf from stock
-            tls_pixbuf = self.window.render_icon(
-                gtk.STOCK_DIALOG_AUTHENTICATION, gtk.ICON_SIZE_MENU)
+            tls_pixbuf = self.window.render_icon_pixbuf(
+                Gtk.STOCK_DIALOG_AUTHENTICATION, Gtk.IconSize.MENU)
             self.model[child_iter][C_PADLOCK_PIXBUF] = tls_pixbuf
         else:
-            self.model[child_iter][C_PADLOCK_PIXBUF] = None
+            self.model[child_iter][C_PADLOCK_PIXBUF] = empty_pixbuf
 
         if self.regroup:
             account_name = _('Merged accounts')
@@ -1053,30 +1067,30 @@ class RosterWindow:
 
         pep_dict = gajim.connections[account].pep
         if gajim.config.get('show_mood_in_roster') and 'mood' in pep_dict:
-            self.model[child_iter][C_MOOD_PIXBUF] = pep_dict['mood'].\
-                asPixbufIcon()
+            self.model[child_iter][C_MOOD_PIXBUF] = \
+                gtkgui_helpers.get_pep_as_pixbuf(pep_dict['mood'])
         else:
-            self.model[child_iter][C_MOOD_PIXBUF] = None
+            self.model[child_iter][C_MOOD_PIXBUF] = empty_pixbuf
 
         if gajim.config.get('show_activity_in_roster') and 'activity' in \
         pep_dict:
-            self.model[child_iter][C_ACTIVITY_PIXBUF] = pep_dict['activity'].\
-                asPixbufIcon()
+            self.model[child_iter][C_ACTIVITY_PIXBUF] = \
+                gtkgui_helpers.get_pep_as_pixbuf(pep_dict['activity'])
         else:
-            self.model[child_iter][C_ACTIVITY_PIXBUF] = None
+            self.model[child_iter][C_ACTIVITY_PIXBUF] = empty_pixbuf
 
         if gajim.config.get('show_tunes_in_roster') and 'tune' in pep_dict:
-            self.model[child_iter][C_TUNE_PIXBUF] = pep_dict['tune'].\
-                asPixbufIcon()
+            self.model[child_iter][C_TUNE_PIXBUF] = \
+                gtkgui_helpers.get_pep_as_pixbuf(pep_dict['tune'])
         else:
-            self.model[child_iter][C_TUNE_PIXBUF] = None
+            self.model[child_iter][C_TUNE_PIXBUF] = empty_pixbuf
 
         if gajim.config.get('show_location_in_roster') and 'location' in \
         pep_dict:
-            self.model[child_iter][C_LOCATION_PIXBUF] = pep_dict['location'].\
-                asPixbufIcon()
+            self.model[child_iter][C_LOCATION_PIXBUF] = \
+                gtkgui_helpers.get_pep_as_pixbuf(pep_dict['location'])
         else:
-            self.model[child_iter][C_LOCATION_PIXBUF] = None
+            self.model[child_iter][C_LOCATION_PIXBUF] = empty_pixbuf
 
     def _really_draw_accounts(self):
         for acct in self.accounts_to_draw:
@@ -1089,7 +1103,7 @@ class RosterWindow:
             return
         self.accounts_to_draw.append(account)
         if len(self.accounts_to_draw) == 1:
-            gobject.timeout_add(200, self._really_draw_accounts)
+            GLib.timeout_add(200, self._really_draw_accounts)
 
     def _really_draw_group(self, group, account):
         child_iter = self._get_group_iter(group, account, model=self.model)
@@ -1101,7 +1115,7 @@ class RosterWindow:
             accounts = []
         else:
             accounts = [account]
-        text = gobject.markup_escape_text(group)
+        text = GLib.markup_escape_text(group)
         if helpers.group_is_blocked(account, group):
             text = '<span strikethrough="true">%s</span>' % text
         if gajim.config.get('show_contacts_number'):
@@ -1125,7 +1139,7 @@ class RosterWindow:
             return
         self.groups_to_draw[ag] = {'group': group, 'account': account}
         if len(self.groups_to_draw) == 1:
-            gobject.timeout_add(200, self._really_draw_groups)
+            GLib.timeout_add(200, self._really_draw_groups)
 
     def draw_parent_contact(self, jid, account):
         child_iters = self._get_contact_iter(jid, account, model=self.model)
@@ -1135,8 +1149,8 @@ class RosterWindow:
         if self.model[parent_iter][C_TYPE] != 'contact':
             # parent is not a contact
             return
-        parent_jid = self.model[parent_iter][C_JID].decode('utf-8')
-        parent_account = self.model[parent_iter][C_ACCOUNT].decode('utf-8')
+        parent_jid = self.model[parent_iter][C_JID]
+        parent_account = self.model[parent_iter][C_ACCOUNT]
         self.draw_contact(parent_jid, parent_account)
         return False
 
@@ -1160,7 +1174,7 @@ class RosterWindow:
         if not child_iters:
             return False
 
-        name = gobject.markup_escape_text(contact.get_shown_name())
+        name = GLib.markup_escape_text(contact.get_shown_name())
 
         # gets number of unread gc marked messages
         if jid in gajim.interface.minimized_controls[account] and \
@@ -1194,8 +1208,8 @@ class RosterWindow:
                 nb_connected_contact += 1
         if nb_connected_contact > 1:
             # switch back to default writing direction
-            name += i18n.paragraph_direction_mark(unicode(name))
-            name += u' (%d)' % nb_connected_contact
+            name += i18n.paragraph_direction_mark(name)
+            name += ' (%d)' % nb_connected_contact
 
         # add status msg, if not empty, under contact name in
         # the treeview
@@ -1213,7 +1227,7 @@ class RosterWindow:
                     color.blue)
                 name += '\n<span size="small" style="italic" ' \
                     'foreground="%s">%s</span>' % (colorstring,
-                    gobject.markup_escape_text(status))
+                    GLib.markup_escape_text(status))
 
         icon_name = helpers.get_icon_name_to_show(contact, account)
         # look if another resource has awaiting events
@@ -1248,8 +1262,8 @@ class RosterWindow:
                     iterC = self.model.iter_children(child_iter)
                     while iterC:
                         # a child has awaiting messages?
-                        jidC = self.model[iterC][C_JID].decode('utf-8')
-                        accountC = self.model[iterC][C_ACCOUNT].decode('utf-8')
+                        jidC = self.model[iterC][C_JID]
+                        accountC = self.model[iterC][C_ACCOUNT]
                         if len(gajim.events.get_events(accountC, jidC)):
                             icon_name = 'event'
                             break
@@ -1332,9 +1346,9 @@ class RosterWindow:
         if not contact:
             contact = gajim.contacts.get_contact(account, jid)
         if pep_type in contact.pep:
-            pixbuf = contact.pep[pep_type].asPixbufIcon()
+            pixbuf = gtkgui_helpers.get_pep_as_pixbuf(contact.pep[pep_type])
         else:
-            pixbuf = None
+            pixbuf = empty_pixbuf
         for child_iter in iters:
             self.model[child_iter][model_column] = pixbuf
 
@@ -1342,10 +1356,10 @@ class RosterWindow:
         iters = self._get_contact_iter(jid, account, model=self.model)
         if not iters or not gajim.config.get('show_avatars_in_roster'):
             return
-        jid = self.model[iters[0]][C_JID].decode('utf-8')
+        jid = self.model[iters[0]][C_JID]
         pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(jid)
         if pixbuf in (None, 'ask'):
-            scaled_pixbuf = None
+            scaled_pixbuf = empty_pixbuf
         else:
             scaled_pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'roster')
         for child_iter in iters:
@@ -1406,19 +1420,22 @@ class RosterWindow:
             yield False
 
         task = _draw_all_contacts(jids, account)
-        gobject.idle_add(task.next)
+        GLib.idle_add(next, task)
 
     def _before_fill(self):
         self.tree.freeze_child_notify()
         self.tree.set_model(None)
         # disable sorting
-        self.model.set_sort_column_id(-2, gtk.SORT_ASCENDING)
+        self.model.set_sort_column_id(-2, Gtk.SortType.ASCENDING)
         self.starting = True
         self.starting_filtering = True
 
     def _after_fill(self):
         self.starting = False
+        accounts_list = gajim.contacts.get_accounts()
         for account in gajim.connections:
+            if account not in accounts_list:
+                continue
 
             jids = gajim.contacts.get_jid_list(account)
             for jid in jids:
@@ -1429,7 +1446,7 @@ class RosterWindow:
                 self.draw_group(group, account)
             self.draw_account(account)
 
-        self.model.set_sort_column_id(1, gtk.SORT_ASCENDING)
+        self.model.set_sort_column_id(1, Gtk.SortType.ASCENDING)
         self.tree.set_model(self.modelfilter)
         self.tree.thaw_child_notify()
         self.starting_filtering = False
@@ -1440,10 +1457,10 @@ class RosterWindow:
         Create new empty model and draw roster
         """
         self.modelfilter = None
-        self.model = gtk.TreeStore(*self.columns)
+        self.model = Gtk.TreeStore(*self.columns)
 
         self.model.set_sort_func(1, self._compareIters)
-        self.model.set_sort_column_id(1, gtk.SORT_ASCENDING)
+        self.model.set_sort_column_id(1, Gtk.SortType.ASCENDING)
         self.modelfilter = self.model.filter_new()
         self.modelfilter.set_visible_func(self._visible_func)
         self.modelfilter.connect('row-has-child-toggled',
@@ -1482,15 +1499,16 @@ class RosterWindow:
             # do not change selection while DND'ing
             return
         # Expand his parent, so this path is visible, don't expand it.
-        self.tree.expand_to_path(path[:-1])
+        path.up()
+        self.tree.expand_to_path(path)
         self.tree.scroll_to_cell(path)
         self.tree.set_cursor(path)
 
     def _readjust_expand_collapse_state(self):
-        def func(model, path, iter_):
+        def func(model, path, iter_, param):
             type_ = model[iter_][C_TYPE]
-            acct = model[iter_][C_ACCOUNT].decode('utf-8')
-            jid = model[iter_][C_JID].decode('utf-8')
+            acct = model[iter_][C_ACCOUNT]
+            jid = model[iter_][C_JID]
             key = None
             if type_ == 'account':
                 key = acct
@@ -1500,14 +1518,14 @@ class RosterWindow:
                 parent_iter = model.iter_parent(iter_)
                 ptype = model[parent_iter][C_TYPE]
                 if ptype == 'group':
-                    grp = model[parent_iter][C_JID].decode('utf-8')
+                    grp = model[parent_iter][C_JID]
                     key = acct + grp + jid
             if key:
                 if key in self.collapsed_rows:
                     self.tree.collapse_row(path)
                 else:
                     self.tree.expand_row(path, False)
-        self.modelfilter.foreach(func)
+        self.modelfilter.foreach(func, None)
 
     def _adjust_account_expand_collapse_state(self, account):
         """
@@ -1554,6 +1572,8 @@ class RosterWindow:
 ##############################################################################
 
     def refilter_shown_roster_items(self):
+        if self.filtering:
+            return
         self.filtering = True
         self.modelfilter.refilter()
         self.filtering = False
@@ -1587,7 +1607,7 @@ class RosterWindow:
             return False
         return True
 
-    def _visible_func(self, model, titer):
+    def _visible_func(self, model, titer, dummy):
         """
         Determine whether iter should be visible in the treeview
         """
@@ -1604,11 +1624,10 @@ class RosterWindow:
         if not account:
             return False
 
-        account = account.decode('utf-8')
         jid = model[titer][C_JID]
         if not jid:
             return False
-        jid = jid.decode('utf-8')
+
         if type_ == 'group':
             group = jid
             if group == _('Transports'):
@@ -1659,12 +1678,10 @@ class RosterWindow:
                 if model.iter_has_child(titer):
                     iter_c = model.iter_children(titer)
                     while iter_c:
-                        if self.rfilter_string in model[iter_c][C_NAME].decode(
-                        'utf-8').lower():
+                        if self.rfilter_string in model[iter_c][C_NAME].lower():
                             return True
                         iter_c = model.iter_next(iter_c)
-                return self.rfilter_string in model[titer][C_NAME].decode(
-                    'utf-8').lower()
+                return self.rfilter_string in model[titer][C_NAME].lower()
             if gajim.config.get('showoffline'):
                 return True
             bb_jid = None
@@ -1689,8 +1706,7 @@ class RosterWindow:
                 return self.contact_is_visible(contact, account)
         if type_ == 'agent':
             if self.rfilter_enabled:
-                return self.rfilter_string in model[titer][C_NAME].decode(
-                    'utf-8').lower()
+                return self.rfilter_string in model[titer][C_NAME].lower()
             contact = gajim.contacts.get_contact_with_highest_priority(account,
                 jid)
             return self.contact_has_pending_roster_events(contact, account) or \
@@ -1698,8 +1714,7 @@ class RosterWindow:
                 (gajim.account_is_connected(account) or \
                 gajim.config.get('showoffline')))
         if type_ == 'groupchat' and self.rfilter_enabled:
-            return self.rfilter_string in model[titer][C_NAME].decode('utf-8').\
-                lower()
+            return self.rfilter_string in model[titer][C_NAME].lower()
         return True
 
     def _compareIters(self, model, iter1, iter2, data=None):
@@ -1710,8 +1725,8 @@ class RosterWindow:
         name2 = model[iter2][C_NAME]
         if not name1 or not name2:
             return 0
-        name1 = name1.decode('utf-8')
-        name2 = name2.decode('utf-8')
+        name1 = name1
+        name2 = name2
         type1 = model[iter1][C_TYPE]
         type2 = model[iter2][C_TYPE]
         if type1 == 'self_contact':
@@ -1721,10 +1736,10 @@ class RosterWindow:
         if type1 == 'group':
             name1 = model[iter1][C_JID]
             if name1:
-                name1 = name1.decode('utf-8')
+                name1 = name1
             name2 = model[iter2][C_JID]
             if name2:
-                name2 = name2.decode('utf-8')
+                name2 = name2
             if name1 == _('Transports'):
                 return 1
             if name2 == _('Transports'):
@@ -1741,12 +1756,12 @@ class RosterWindow:
         account2 = model[iter2][C_ACCOUNT]
         if not account1 or not account2:
             return 0
-        account1 = account1.decode('utf-8')
-        account2 = account2.decode('utf-8')
+        account1 = account1
+        account2 = account2
         if type1 == 'account':
             return locale.strcoll(account1, account2)
-        jid1 = model[iter1][C_JID].decode('utf-8')
-        jid2 = model[iter2][C_JID].decode('utf-8')
+        jid1 = model[iter1][C_JID]
+        jid2 = model[iter2][C_JID]
         if type1 == 'contact':
             lcontact1 = gajim.contacts.get_contacts(account1, jid1)
             contact1 = gajim.contacts.get_first_contact_from_jid(account1, jid1)
@@ -1865,7 +1880,7 @@ class RosterWindow:
                 'groups': ['self_contact'], 'subscription': 'both',
                 'ask': 'none'}
         # .keys() is needed
-        for jid in array.keys():
+        for jid in list(array.keys()):
             # Remove the contact in roster. It might has changed
             self.remove_contact(jid, account, force=True)
             # Remove old Contact instances
@@ -1923,7 +1938,7 @@ class RosterWindow:
                 chat_control.contact = contact1
 
     def connected_rooms(self, account):
-        if account in gajim.gc_connected[account].values():
+        if account in list(gajim.gc_connected[account].values()):
             return True
         return False
 
@@ -1953,7 +1968,7 @@ class RosterWindow:
             self.draw_contact(jid, account)
             # Remove contacts in roster if removal was requested
             key = (jid, account)
-            if key in self.contacts_to_be_removed.keys():
+            if key in list(self.contacts_to_be_removed.keys()):
                 backend = self.contacts_to_be_removed[key]['backend']
                 del self.contacts_to_be_removed[key]
                 # Remove contact will delay removal if there are more events
@@ -1997,6 +2012,7 @@ class RosterWindow:
         elif event.type_ == 'file-hash-error':
             ft.show_hash_error(jid, data, account)
             gajim.events.remove_events(account, jid, event)
+            return True
         elif event.type_ == 'file-completed':
             ft.show_completed(jid, data)
             gajim.events.remove_events(account, jid, event)
@@ -2035,8 +2051,10 @@ class RosterWindow:
             vb.set_no_show_all(True)
 
     def show_tooltip(self, contact):
-        pointer = self.tree.get_pointer()
-        props = self.tree.get_path_at_pos(pointer[0], pointer[1])
+        device = self.tree.get_window().get_display().get_device_manager().\
+            get_client_pointer()
+        pointer = self.tree.get_window().get_device_position(device)
+        props = self.tree.get_path_at_pos(pointer[1], pointer[2])
         # check if the current pointer is at the same path
         # as it was before setting the timeout
         if props and self.tooltip.id == props[0]:
@@ -2044,8 +2062,8 @@ class RosterWindow:
             rect = self.tree.get_cell_area(props[0], props[1])
 
             # position of the treeview on the screen
-            position = self.tree.window.get_origin()
-            self.tooltip.show_tooltip(contact, rect.height, position[1] + \
+            position = self.tree.get_window().get_origin()
+            self.tooltip.show_tooltip(contact, rect.height, position[2] + \
                 rect.y)
         else:
             self.tooltip.hide_tooltip()
@@ -2184,7 +2202,7 @@ class RosterWindow:
                 gajim.interface.status_sent_to_groups[account] = {}
             for gc_control in gajim.interface.msg_win_mgr.get_controls(
             message_control.TYPE_GC) + \
-            gajim.interface.minimized_controls[account].values():
+            list(gajim.interface.minimized_controls[account].values()):
                 if gc_control.account == account:
                     if gajim.gc_connected[account][gc_control.room_jid]:
                         gajim.connections[account].send_gc_status(
@@ -2279,10 +2297,10 @@ class RosterWindow:
             else:
                 # No need to redraw contacts if we're quitting
                 if child_iterA:
-                    self.model[child_iterA][C_AVATAR_PIXBUF] = None
+                    self.model[child_iterA][C_AVATAR_PIXBUF] = empty_pixbuf
                 if account in gajim.con_types:
                     gajim.con_types[account] = None
-                for jid in gajim.contacts.get_jid_list(account):
+                for jid in list(gajim.contacts.get_jid_list(account)):
                     lcontact = gajim.contacts.get_contacts(account, jid)
                     ctrl = gajim.interface.msg_win_mgr.get_gc_control(jid,
                         account)
@@ -2343,10 +2361,12 @@ class RosterWindow:
         table = {'offline':9, 'connecting':9, 'online':0, 'chat':1, 'away':2,
             'xa':3, 'dnd':4, 'invisible':5}
 
+        liststore = self.status_combobox.get_model()
         # we check if there are more options in the combobox that it should
         # if yes, we remove the first ones
-        while len(self.status_combobox.get_model()) > len(table)+2:
-            self.status_combobox.remove_text(0)
+        while len(liststore) > len(table)+2:
+            titer = liststore.get_iter_first()
+            liststore.remove(titer)
 
         show = helpers.get_global_show()
         # temporarily block signal in order not to send status that we show
@@ -2356,7 +2376,6 @@ class RosterWindow:
             self.status_combobox.set_active(table[show])
         else:
             uf_show = helpers.get_uf_show(show)
-            liststore = self.status_combobox.get_model()
             liststore.prepend(['SEPARATOR', None, '', True])
             status_combobox_text = uf_show + ' (' + _("desync'ed") +')'
             liststore.prepend([status_combobox_text,
@@ -2387,7 +2406,7 @@ class RosterWindow:
         """
         Close all the windows in the given dictionary
         """
-        for w in dic.values():
+        for w in list(dic.values()):
             if isinstance(w, dict):
                 self.close_all_from_dict(w)
             else:
@@ -2402,7 +2421,7 @@ class RosterWindow:
             self.close_all_from_dict(gajim.interface.instances[account])
         for ctrl in gajim.interface.msg_win_mgr.get_controls(acct=account):
             ctrl.parent_win.remove_tab(ctrl, ctrl.parent_win.CLOSE_CLOSE_BUTTON,
-                    force = force)
+                force=force)
 
     def on_roster_window_delete_event(self, widget, event):
         """
@@ -2436,15 +2455,15 @@ class RosterWindow:
 
         # in case show_roster_on_start is False and roster is never shown
         # window.window is None
-        if self.window.window is not None:
+        if self.window.get_window() is not None:
             if gajim.config.get('save-roster-position'):
-                x, y = self.window.window.get_root_origin()
+                x, y = self.window.get_window().get_root_origin()
                 gajim.config.set('roster_x-position', x)
                 gajim.config.set('roster_y-position', y)
             width, height = self.window.get_size()
             # For the width use the size of the vbox containing the tree and
             # status combo, this will cancel out any hpaned width
-            width = self.xml.get_object('roster_vbox2').allocation.width
+            width = self.xml.get_object('roster_vbox2').get_allocation().width
             gajim.config.set('roster_width', width)
             gajim.config.set('roster_height', height)
             if not self.xml.get_object('roster_vbox2').get_property('visible'):
@@ -2471,7 +2490,7 @@ class RosterWindow:
         When we quit the gtk interface - exit gtk
         """
         self.prepare_quit()
-        gtk.main_quit()
+        Gtk.main_quit()
 
     def on_quit_request(self, widget=None):
         """
@@ -2479,7 +2498,7 @@ class RosterWindow:
         Terminate all sessions and send offline to all connected account. We do
         NOT really quit gajim here
         """
-        accounts = gajim.connections.keys()
+        accounts = list(gajim.connections.keys())
         get_msg = False
         for acct in accounts:
             if gajim.connections[acct].connected:
@@ -2572,11 +2591,11 @@ class RosterWindow:
         if jid in jid_list or jid == gajim.get_jid_from_account(account):
             if not gajim.jid_is_transport(jid) and len(obj.contact_list) == 1:
                 if obj.old_show == 0 and obj.new_show > 1:
-                    gobject.timeout_add_seconds(5, self.remove_newly_added, jid,
+                    GLib.timeout_add_seconds(5, self.remove_newly_added, jid,
                         account)
                 elif obj.old_show > 1 and obj.new_show == 0 and \
                 obj.conn.connected > 1:
-                    gobject.timeout_add_seconds(5, self.remove_to_be_removed,
+                    GLib.timeout_add_seconds(5, self.remove_to_be_removed,
                         jid, account)
 
         if obj.need_redraw:
@@ -2599,7 +2618,7 @@ class RosterWindow:
         if obj.popup:
             ctrl = gajim.interface.msg_win_mgr.search_control(jid, account)
             if ctrl:
-                gobject.idle_add(ctrl.parent_win.set_active_tab, ctrl)
+                GLib.idle_add(ctrl.parent_win.set_active_tab, ctrl)
             else:
                 ctrl = gajim.interface.new_chat(obj.contact, account)
                 if len(gajim.events.get_events(account, obj.jid)):
@@ -2635,11 +2654,13 @@ class RosterWindow:
                         contact = \
                             gajim.contacts.get_contact_with_highest_priority(
                             account, jid)
+                        if not contact:
+                            continue
                         gajim.interface.on_open_chat_window(None, contact,
                             account)
                 gajim.config.set_per('accounts', account,
                     'opened_chat_controls', '')
-            gobject.idle_add(self.refilter_shown_roster_items)
+            GLib.idle_add(self.refilter_shown_roster_items)
 
     def _nec_anonymous_auth(self, obj):
         """
@@ -2700,7 +2721,14 @@ class RosterWindow:
             return True
         if obj.mtype not in ('normal', 'chat'):
             return
-        if obj.session.control:
+        if obj.mtype == 'normal' and obj.popup:
+            # it's single message to be autopopuped
+            dialogs.SingleMessageWindow(obj.conn.name, obj.jid,
+                action='receive', from_whom=obj.jid, subject=obj.subject,
+                message=obj.msgtxt, resource=obj.resource, session=obj.session,
+                form_node=obj.form_node)
+            return
+        if obj.session.control and obj.mtype == 'chat':
             typ = ''
             if obj.mtype == 'error':
                 typ = 'error'
@@ -2717,7 +2745,7 @@ class RosterWindow:
                 if not pw or (pw.get_active_control() and obj.session.control \
                 == pw.get_active_control() and pw.is_active() and end):
                     gajim.logger.set_read_messages([obj.msg_id])
-        elif obj.popup:
+        elif obj.popup and obj.mtype == 'chat':
             contact = gajim.contacts.get_contact(obj.conn.name, obj.jid)
             obj.session.control = gajim.interface.new_chat(contact,
                 obj.conn.name, session=obj.session)
@@ -2857,8 +2885,8 @@ class RosterWindow:
             if model[titer][C_TYPE] in ('contact', 'self_contact'):
                 # we're on a contact entry in the roster
                 if self.tooltip.timeout == 0 or self.tooltip.id != props[0]:
-                    account = model[titer][C_ACCOUNT].decode('utf-8')
-                    jid = model[titer][C_JID].decode('utf-8')
+                    account = model[titer][C_ACCOUNT]
+                    jid = model[titer][C_JID]
                     self.tooltip.id = row
                     contacts = gajim.contacts.get_contacts(account, jid)
                     connected_contacts = []
@@ -2869,25 +2897,25 @@ class RosterWindow:
                         # no connected contacts, show the ofline one
                         connected_contacts = contacts
                     self.tooltip.account = account
-                    self.tooltip.timeout = gobject.timeout_add(500,
+                    self.tooltip.timeout = GLib.timeout_add(500,
                         self.show_tooltip, connected_contacts)
             elif model[titer][C_TYPE] == 'groupchat':
                 if self.tooltip.timeout == 0 or self.tooltip.id != props[0]:
-                    account = model[titer][C_ACCOUNT].decode('utf-8')
-                    jid = model[titer][C_JID].decode('utf-8')
+                    account = model[titer][C_ACCOUNT]
+                    jid = model[titer][C_JID]
                     self.tooltip.id = row
                     contact = gajim.contacts.get_contacts(account, jid)
                     self.tooltip.account = account
-                    self.tooltip.timeout = gobject.timeout_add(500,
+                    self.tooltip.timeout = GLib.timeout_add(500,
                         self.show_tooltip, contact)
             elif model[titer][C_TYPE] == 'account':
                 # we're on an account entry in the roster
                 if self.tooltip.timeout == 0 or self.tooltip.id != props[0]:
-                    account = model[titer][C_ACCOUNT].decode('utf-8')
+                    account = model[titer][C_ACCOUNT]
                     if account == 'all':
                         self.tooltip.id = row
                         self.tooltip.account = None
-                        self.tooltip.timeout = gobject.timeout_add(500,
+                        self.tooltip.timeout = GLib.timeout_add(500,
                             self.show_tooltip, [])
                         return
                     jid = gajim.get_jid_from_account(account)
@@ -2941,7 +2969,7 @@ class RosterWindow:
                                 contacts.append(contact)
                     self.tooltip.id = row
                     self.tooltip.account = None
-                    self.tooltip.timeout = gobject.timeout_add(500,
+                    self.tooltip.timeout = GLib.timeout_add(500,
                         self.show_tooltip, contacts)
 
     def on_agent_logging(self, widget, jid, state, account):
@@ -3012,6 +3040,7 @@ class RosterWindow:
             if msg is None:
                 # user pressed Cancel to change status message dialog
                 return
+            accounts = []
             accounts = set(i[1] for i in list_ if gajim.connections[i[1]].\
                 privacy_rules_supported)
             if group is None:
@@ -3091,7 +3120,7 @@ class RosterWindow:
             old_text = jid
             title = _('Rename Group')
             message = _('Enter a new name for group %s') % \
-                    gobject.markup_escape_text(jid)
+                GLib.markup_escape_text(jid)
 
         def on_renamed(new_text, account, row_type, jid, old_text):
             if 'rename' in gajim.interface.instances:
@@ -3145,7 +3174,7 @@ class RosterWindow:
                 'attached_gpg_keys').split()
         keys = {}
         keyID = _('None')
-        for i in xrange(len(attached_keys)/2):
+        for i in list(range(len(attached_keys)/2)):
             keys[attached_keys[2*i]] = attached_keys[2*i+1]
             if attached_keys[2*i] == contact.jid:
                 keyID = attached_keys[2*i+1]
@@ -3197,12 +3226,12 @@ class RosterWindow:
                 dialogs.ErrorDialog(_('Could not load image'), msg)
                 return
             try:
-                pixbuf = gtk.gdk.pixbuf_new_from_file(path_to_file)
+                pixbuf = GdkPixbuf.Pixbuf.new_from_file(path_to_file)
                 if filesize > 16384: # 16 kb
                     # get the image at 'tooltip size'
                     # and hope that user did not specify in ACE crazy size
                     pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'tooltip')
-            except gobject.GError, msg: # unknown format
+            except GObject.GError as msg: # unknown format
                 # msg should be string, not object instance
                 msg = str(msg)
                 dialogs.ErrorDialog(_('Could not load image'), msg)
@@ -3306,7 +3335,7 @@ class RosterWindow:
                 break
 
     def on_invite_to_room(self, widget, list_, room_jid, room_account,
-                    resource=None):
+    resource=None):
         """
         Resource parameter MUST NOT be used if more than one contact in list
         """
@@ -3338,7 +3367,7 @@ class RosterWindow:
             if gc_control:
                 mw = gajim.interface.msg_win_mgr.get_window(jid, account)
                 mw.set_active_tab(gc_control)
-                mw.window.window.focus(gtk.get_current_event_time())
+                mw.window.get_window().focus(Gtk.get_current_event_time())
             return
         ctrl = gajim.interface.minimized_controls[account][jid]
         mw = gajim.interface.msg_win_mgr.get_window(jid, account)
@@ -3348,7 +3377,7 @@ class RosterWindow:
         ctrl.parent_win = mw
         mw.new_tab(ctrl)
         mw.set_active_tab(ctrl)
-        mw.window.window.focus(gtk.get_current_event_time())
+        mw.window.get_window().focus(Gtk.get_current_event_time())
         self.remove_groupchat(jid, account)
 
     def on_edit_account(self, widget, account):
@@ -3384,12 +3413,12 @@ class RosterWindow:
         When a key is pressed in the treeviews
         """
         self.tooltip.hide_tooltip()
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             if self.rfilter_enabled:
                 self.disable_rfilter()
             else:
                 self.tree.get_selection().unselect_all()
-        elif event.keyval == gtk.keysyms.F2:
+        elif event.keyval == Gdk.KEY_F2:
             treeselection = self.tree.get_selection()
             model, list_of_paths = treeselection.get_selected_rows()
             if len(list_of_paths) != 1:
@@ -3397,17 +3426,17 @@ class RosterWindow:
             path = list_of_paths[0]
             type_ = model[path][C_TYPE]
             if type_ in ('contact', 'group', 'agent'):
-                jid = model[path][C_JID].decode('utf-8')
-                account = model[path][C_ACCOUNT].decode('utf-8')
+                jid = model[path][C_JID]
+                account = model[path][C_ACCOUNT]
                 self.on_rename(widget, type_, jid, account)
 
-        elif event.keyval == gtk.keysyms.Delete:
+        elif event.keyval == Gdk.KEY_Delete:
             treeselection = self.tree.get_selection()
             model, list_of_paths = treeselection.get_selected_rows()
             if not len(list_of_paths):
                 return
             type_ = model[list_of_paths[0]][C_TYPE]
-            account = model[list_of_paths[0]][C_ACCOUNT].decode('utf-8')
+            account = model[list_of_paths[0]][C_ACCOUNT]
             if type_ in ('account', 'group', 'self_contact') or \
             account == gajim.ZEROCONF_ACC_NAME:
                 return
@@ -3415,8 +3444,8 @@ class RosterWindow:
             for path in list_of_paths:
                 if model[path][C_TYPE] != type_:
                     return
-                jid = model[path][C_JID].decode('utf-8')
-                account = model[path][C_ACCOUNT].decode('utf-8')
+                jid = model[path][C_JID]
+                account = model[path][C_ACCOUNT]
                 contact = gajim.contacts.get_contact_with_highest_priority(
                     account, jid)
                 list_.append((contact, account))
@@ -3425,18 +3454,20 @@ class RosterWindow:
             elif type_ == 'agent':
                 self.on_remove_agent(widget, list_)
 
-        elif not (event.state & (gtk.gdk.CONTROL_MASK | gtk.gdk.MOD1_MASK)) and\
-        gtk.gdk.keyval_to_unicode(event.keyval):
-            # if we got unicode symbol without ctrl / alt
-            num = gtk.gdk.keyval_to_unicode(event.keyval)
-            self.enable_rfilter(unichr(num))
+        elif not (event.get_state() & (Gdk.ModifierType.CONTROL_MASK | \
+        Gdk.ModifierType.MOD1_MASK)):
+            num = Gdk.keyval_to_unicode(event.keyval)
+            if num and num > 31:
+                # if we got unicode symbol without ctrl / alt
+                self.enable_rfilter(chr(num))
 
-        elif event.state & gtk.gdk.CONTROL_MASK and \
-        event.state & gtk.gdk.SHIFT_MASK and event.keyval == gtk.keysyms.U:
+        elif event.get_state() & Gdk.ModifierType.CONTROL_MASK and \
+        event.get_state() & Gdk.ModifierType.SHIFT_MASK and \
+        event.keyval == Gdk.KEY_U:
             self.enable_rfilter('')
-            self.rfilter_entry.emit('key_press_event', event)
+            self.rfilter_entry.event(event)
 
-        elif event.keyval == gtk.keysyms.Left:
+        elif event.keyval == Gdk.KEY_Left:
             treeselection = self.tree.get_selection()
             model, list_of_paths = treeselection.get_selected_rows()
             if len(list_of_paths) != 1:
@@ -3446,10 +3477,10 @@ class RosterWindow:
             if model.iter_has_child(iter_) and self.tree.row_expanded(path):
                 self.tree.collapse_row(path)
                 return True
-            elif len(path) > 1:
+            elif path.get_depth() > 1:
                 self.tree.set_cursor(path[:-1])
                 return True
-        elif event.keyval == gtk.keysyms.Right:
+        elif event.keyval == Gdk.KEY_Right:
             treeselection = self.tree.get_selection()
             model, list_of_paths = treeselection.get_selected_rows()
             if len(list_of_paths) != 1:
@@ -3467,8 +3498,8 @@ class RosterWindow:
             return False
 
         if event.button == 1: # Left click
-            if gajim.single_click and not event.state & gtk.gdk.SHIFT_MASK and \
-            not event.state & gtk.gdk.CONTROL_MASK:
+            if gajim.single_click and not event.get_state() & Gdk.ModifierType.SHIFT_MASK and \
+            not event.get_state() & Gdk.ModifierType.CONTROL_MASK:
                 # Check if button has been pressed on the same row
                 if self.clicked_path == path:
                     self.on_row_activated(widget, path)
@@ -3476,12 +3507,11 @@ class RosterWindow:
 
     def accel_group_func(self, accel_group, acceleratable, keyval, modifier):
         # CTRL mask
-        if modifier & gtk.gdk.CONTROL_MASK:
-            if keyval == gtk.keysyms.s: # CTRL + s
+        if modifier & Gdk.ModifierType.CONTROL_MASK:
+            if keyval == Gdk.KEY_s: # CTRL + s
                 model = self.status_combobox.get_model()
-                accounts = gajim.connections.keys()
-                status = model[self.previous_status_combobox_active][2].decode(
-                    'utf-8')
+                accounts = list(gajim.connections.keys())
+                status = model[self.previous_status_combobox_active][2]
                 def on_response(message, pep_dict):
                     if message is not None: # None if user pressed Cancel
                         for account in accounts:
@@ -3494,7 +3524,7 @@ class RosterWindow:
                             self.send_pep(account, pep_dict)
                 dialogs.ChangeStatusMessageDialog(on_response, status)
                 return True
-            elif keyval == gtk.keysyms.k: # CTRL + k
+            elif keyval == Gdk.KEY_k: # CTRL + k
                 self.enable_rfilter('')
 
     def on_roster_treeview_button_press_event(self, widget, event):
@@ -3531,7 +3561,7 @@ class RosterWindow:
             if type_ in ('agent', 'contact', 'self_contact', 'groupchat'):
                 self.on_row_activated(widget, path)
             elif type_ == 'account':
-                account = model[path][C_ACCOUNT].decode('utf-8')
+                account = model[path][C_ACCOUNT]
                 if account != 'all':
                     show = gajim.connections[account].connected
                     if show > 1: # We are connected
@@ -3562,8 +3592,8 @@ class RosterWindow:
                 x_min = gajim.config.get('roster_avatar_width')
             else:
                 x_min = 0
-            if gajim.single_click and not event.state & gtk.gdk.SHIFT_MASK and \
-            not event.state & gtk.gdk.CONTROL_MASK:
+            if gajim.single_click and not event.get_state() & Gdk.ModifierType.SHIFT_MASK and \
+            not event.get_state() & Gdk.ModifierType.CONTROL_MASK:
                 # Don't handle double click if we press icon of a metacontact
                 titer = model.get_iter(path)
                 if x > x_min and x < x_min + 27 and type_ == 'contact' and \
@@ -3738,22 +3768,21 @@ class RosterWindow:
         if not self.combobox_callback_active:
             self.previous_status_combobox_active = active
             return
-        accounts = gajim.connections.keys()
+        accounts = list(gajim.connections.keys())
         if len(accounts) == 0:
             dialogs.ErrorDialog(_('No account available'),
                 _('You must create an account before you can chat with other '
                 'contacts.'))
             self.update_status_combobox()
             return
-        status = model[active][2].decode('utf-8')
+        status = model[active][2]
         # status "desync'ed" or not
         statuses_unified = helpers.statuses_unified()
         if (active == 7 and statuses_unified) or (active == 9 and \
         not statuses_unified):
             # 'Change status message' selected:
             # do not change show, just show change status dialog
-            status = model[self.previous_status_combobox_active][2].decode(
-                'utf-8')
+            status = model[self.previous_status_combobox_active][2]
             def on_response(message, pep_dict):
                 if message is not None: # None if user pressed Cancel
                     for account in accounts:
@@ -3839,7 +3868,7 @@ class RosterWindow:
                 )
 
     def on_plugins_menuitem_activate(self, widget):
-        if gajim.interface.instances.has_key('plugins'):
+        if 'plugins' in gajim.interface.instances:
             gajim.interface.instances['plugins'].window.present()
         else:
             gajim.interface.instances['plugins'] = plugins.gui.PluginsWindow()
@@ -3962,7 +3991,7 @@ class RosterWindow:
         """
         jid = contact.jid
         if resource is not None:
-            jid = jid + u'/' + resource
+            jid = jid + '/' + resource
         adhoc_commands.CommandWindow(account, jid)
 
     def on_roster_window_focus_in_event(self, widget, event):
@@ -3987,7 +4016,7 @@ class RosterWindow:
                 self.draw_contact(jid, account, selected=True, focus=False)
 
     def on_roster_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             if self.rfilter_enabled:
                 self.disable_rfilter()
                 return
@@ -4003,20 +4032,20 @@ class RosterWindow:
             'allow_hide_roster')):
                 self.tooltip.hide_tooltip()
                 self.window.hide()
-        elif event.state & gtk.gdk.CONTROL_MASK and event.keyval == \
-        gtk.keysyms.i:
+        elif event.get_state() & Gdk.ModifierType.CONTROL_MASK and event.keyval == \
+        Gdk.KEY_i:
             treeselection = self.tree.get_selection()
             model, list_of_paths = treeselection.get_selected_rows()
             for path in list_of_paths:
                 type_ = model[path][C_TYPE]
                 if type_ in ('contact', 'agent'):
-                    jid = model[path][C_JID].decode('utf-8')
-                    account = model[path][C_ACCOUNT].decode('utf-8')
+                    jid = model[path][C_JID]
+                    account = model[path][C_ACCOUNT]
                     contact = gajim.contacts.get_first_contact_from_jid(account,
                         jid)
                     self.on_info(widget, contact, account)
-        elif event.state & gtk.gdk.CONTROL_MASK and event.keyval == \
-        gtk.keysyms.h:
+        elif event.get_state() & Gdk.ModifierType.CONTROL_MASK and event.keyval == \
+        Gdk.KEY_h:
             treeselection = self.tree.get_selection()
             model, list_of_paths = treeselection.get_selected_rows()
             if len(list_of_paths) != 1:
@@ -4024,14 +4053,14 @@ class RosterWindow:
             path = list_of_paths[0]
             type_ = model[path][C_TYPE]
             if type_ in ('contact', 'agent'):
-                jid = model[path][C_JID].decode('utf-8')
-                account = model[path][C_ACCOUNT].decode('utf-8')
+                jid = model[path][C_JID]
+                account = model[path][C_ACCOUNT]
                 contact = gajim.contacts.get_first_contact_from_jid(account,
                     jid)
                 self.on_history(widget, contact, account)
 
     def on_roster_window_popup_menu(self, widget):
-        event = gtk.gdk.Event(gtk.gdk.KEY_PRESS)
+        event = Gdk.Event(Gdk.EventType.KEY_PRESS)
         self.show_treeview_menu(event)
 
     def on_row_activated(self, widget, path):
@@ -4040,7 +4069,7 @@ class RosterWindow:
         this way)
         """
         model = self.modelfilter
-        account = model[path][C_ACCOUNT].decode('utf-8')
+        account = model[path][C_ACCOUNT]
         type_ = model[path][C_TYPE]
         if type_ in ('group', 'account'):
             if self.tree.row_expanded(path):
@@ -4049,8 +4078,8 @@ class RosterWindow:
                 self.tree.expand_row(path, False)
             return
         if self.rfilter_enabled:
-            gobject.idle_add(self.disable_rfilter)
-        jid = model[path][C_JID].decode('utf-8')
+            Gobject.idle_add(self.disable_rfilter)
+        jid = model[path][C_JID]
         resource = None
         contact = gajim.contacts.get_contact_with_highest_priority(account, jid)
         titer = model.get_iter(path)
@@ -4077,7 +4106,7 @@ class RosterWindow:
         if not first_ev and model.iter_has_child(titer):
             child_iter = model.iter_children(titer)
             while not first_ev and child_iter:
-                child_jid = model[child_iter][C_JID].decode('utf-8')
+                child_jid = model[child_iter][C_JID]
                 first_ev = gajim.events.get_first_event(account, child_jid)
                 if first_ev:
                     jid = child_jid
@@ -4120,13 +4149,13 @@ class RosterWindow:
         child_iter =  model.convert_iter_to_child_iter(titer)
 
         if self.regroup: # merged accounts
-            accounts = gajim.connections.keys()
+            accounts = list(gajim.connections.keys())
         else:
-            accounts = [model[titer][C_ACCOUNT].decode('utf-8')]
+            accounts = [model[titer][C_ACCOUNT]]
 
         type_ = model[titer][C_TYPE]
         if type_ == 'group':
-            group = model[titer][C_JID].decode('utf-8')
+            group = model[titer][C_JID]
             child_model[child_iter][C_IMG] = \
                 gajim.interface.jabber_state_images['16']['opened']
             if self.rfilter_enabled:
@@ -4146,7 +4175,7 @@ class RosterWindow:
                             path = model.get_path(titer)
                             self.tree.expand_row(path, False)
         elif type_ == 'account':
-            account = accounts[0] # There is only one cause we don't use merge
+            account = list(accounts)[0] # There is only one cause we don't use merge
             if account in self.collapsed_rows:
                 self.collapsed_rows.remove(account)
             self.draw_account(account)
@@ -4159,8 +4188,8 @@ class RosterWindow:
                         self.tree.expand_row(path, False)
         elif type_ == 'contact':
             # Metacontact got toggled, update icon
-            jid = model[titer][C_JID].decode('utf-8')
-            account = model[titer][C_ACCOUNT].decode('utf-8')
+            jid = model[titer][C_JID]
+            account = model[titer][C_ACCOUNT]
             contact = gajim.contacts.get_contact(account, jid)
             for group in contact.groups:
                 if account + group + jid in self.collapsed_rows:
@@ -4184,9 +4213,9 @@ class RosterWindow:
         child_iter =  model.convert_iter_to_child_iter(titer)
 
         if self.regroup: # merged accounts
-            accounts = gajim.connections.keys()
+            accounts = list(gajim.connections.keys())
         else:
-            accounts = [model[titer][C_ACCOUNT].decode('utf-8')]
+            accounts = [model[titer][C_ACCOUNT]]
 
         type_ = model[titer][C_TYPE]
         if type_ == 'group':
@@ -4194,7 +4223,7 @@ class RosterWindow:
                 jabber_state_images['16']['closed']
             if self.rfilter_enabled:
                 return
-            group = model[titer][C_JID].decode('utf-8')
+            group = model[titer][C_JID]
             for account in accounts:
                 if group in gajim.groups[account]: # This account has this group
                     gajim.groups[account][group]['expand'] = False
@@ -4207,8 +4236,8 @@ class RosterWindow:
             self.draw_account(account)
         elif type_ == 'contact':
             # Metacontact got toggled, update icon
-            jid = model[titer][C_JID].decode('utf-8')
-            account = model[titer][C_ACCOUNT].decode('utf-8')
+            jid = model[titer][C_JID]
+            account = model[titer][C_ACCOUNT]
             contact = gajim.contacts.get_contact(account, jid)
             groups = contact.groups
             if not groups:
@@ -4240,8 +4269,6 @@ class RosterWindow:
         if not account:
             return
 
-        account = account.decode('utf-8')
-
         if type_ == 'contact':
             child_iter = model.convert_iter_to_child_iter(titer)
             if self.model.iter_has_child(child_iter):
@@ -4249,10 +4276,10 @@ class RosterWindow:
                 # redraw us to show/hide expand icon
                 if self.filtering:
                     # Prevent endless loops
-                    jid = model[titer][C_JID].decode('utf-8')
-                    gobject.idle_add(self.draw_contact, jid, account)
+                    jid = model[titer][C_JID]
+                    GLib.idle_add(self.draw_contact, jid, account)
         elif type_ == 'group':
-            group = model[titer][C_JID].decode('utf-8')
+            group = model[titer][C_JID]
             self._adjust_group_expand_collapse_state(group, account)
         elif type_ == 'account':
             self._adjust_account_expand_collapse_state(account)
@@ -4272,7 +4299,7 @@ class RosterWindow:
 #               if len(self._last_selected_contact):
 #                       # update unselected rows
 #                       for (jid, account) in self._last_selected_contact:
-#                               gobject.idle_add(self.draw_contact, jid,
+#                               GLib.idle_add(self.draw_contact, jid,
 #                                       account)
 #               self._last_selected_contact = []
 #               if len(list_of_paths) == 0:
@@ -4282,10 +4309,10 @@ class RosterWindow:
 #                       if row[C_TYPE] != 'contact':
 #                               self._last_selected_contact = []
 #                               return
-#                       jid = row[C_JID].decode('utf-8')
-#                       account = row[C_ACCOUNT].decode('utf-8')
+#                       jid = row[C_JID]
+#                       account = row[C_ACCOUNT]
 #                       self._last_selected_contact.append((jid, account))
-#                       gobject.idle_add(self.draw_contact, jid, account, True)
+#                       GLib.idle_add(self.draw_contact, jid, account, True)
 
     def on_service_disco_menuitem_activate(self, widget, account):
         server_jid = gajim.config.get_per('accounts', account, 'hostname')
@@ -4331,6 +4358,7 @@ class RosterWindow:
             w.set_sensitive(True)
 
     def on_view_menu_activate(self, widget):
+        self.make_menu()
         # Hide the show roster menu if we are not in the right windowing mode.
         if self.hpaned.get_child2() is not None:
             self.xml.get_object('show_roster_menuitem').show()
@@ -4345,19 +4373,19 @@ class RosterWindow:
 
     def on_rfilter_entry_changed(self, widget):
         """ When we update the content of the filter """
-        self.rfilter_string = widget.get_text().decode('utf-8').lower()
+        self.rfilter_string = widget.get_text().lower()
         if self.rfilter_string == '':
             self.disable_rfilter()
         self.refilter_shown_roster_items()
         # select first row
         self.tree.get_selection().unselect_all()
-        def _func(model, path, iter_):
+        def _func(model, path, iter_, param):
             if model[iter_][C_TYPE] == 'contact' and self.rfilter_string in \
-            model[iter_][C_NAME].decode('utf-8').lower():
+            model[iter_][C_NAME].lower():
                 col = self.tree.get_column(0)
-                self.tree.set_cursor_on_cell(path, col)
+                self.tree.set_cursor_on_cell(path, col, None, False)
                 return True
-        self.modelfilter.foreach(_func)
+        self.modelfilter.foreach(_func, None)
 
     def on_rfilter_entry_icon_press(self, widget, icon, event):
         """
@@ -4366,16 +4394,16 @@ class RosterWindow:
         self.disable_rfilter()
 
     def on_rfilter_entry_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             self.disable_rfilter()
-        elif event.keyval == gtk.keysyms.Return:
+        elif event.keyval == Gdk.KEY_Return:
             self.tree.grab_focus()
-            self.tree.emit('key_press_event', event)
+            self.tree.event(event)
             self.disable_rfilter()
-        elif event.keyval in (gtk.keysyms.Up, gtk.keysyms.Down):
+        elif event.keyval in (Gdk.KEY_Up, Gdk.KEY_Down):
             self.tree.grab_focus()
-            self.tree.emit('key_press_event', event)
-        elif event.keyval == gtk.keysyms.BackSpace:
+            self.tree.event(event)
+        elif event.keyval == Gdk.KEY_BackSpace:
             if widget.get_text() == '':
                 self.disable_rfilter()
 
@@ -4411,10 +4439,10 @@ class RosterWindow:
     def on_roster_hpaned_notify(self, pane, gparamspec):
         """
         Keep changing the width of the roster
-        (when a gtk.Paned widget handle is dragged)
+        (when a Gtk.Paned widget handle is dragged)
         """
-        if gparamspec.name == 'position':
-            roster_width = pane.get_child1().allocation.width
+        if gparamspec and gparamspec.name == 'position':
+            roster_width = pane.get_child1().get_allocation().width
             gajim.config.set('roster_width', roster_width)
             gajim.config.set('roster_hpaned_position', pane.get_position())
 
@@ -4429,9 +4457,9 @@ class RosterWindow:
             return
         path = list_of_paths[0]
         data = ''
-        if len(path) >= 2:
+        if path.get_depth() >= 2:
             data = model[path][C_JID]
-        selection.set(selection.target, 8, data)
+        selection.set_text(data, -1)
 
     def drag_begin(self, treeview, context):
         self.dragging = True
@@ -4543,8 +4571,12 @@ class RosterWindow:
             self.draw_account(account_source)
             context.finish(True, True, etime)
 
+        dest_family = gajim.contacts.get_metacontacts_family(account_dest,
+            c_dest.jid)
+        source_family = gajim.contacts.get_metacontacts_family(account_source,
+            c_source.jid)
         confirm_metacontacts = gajim.config.get('confirm_metacontacts')
-        if confirm_metacontacts == 'no':
+        if confirm_metacontacts == 'no' or dest_family == source_family:
             merge_contacts()
             return
         pritext = _('You are about to create a metacontact. Are you sure you '
@@ -4597,46 +4629,47 @@ class RosterWindow:
                     self.remove_contact_from_groups(c_source.jid, account,
                         [grp_source])
 
-        if context.action in (gtk.gdk.ACTION_MOVE, gtk.gdk.ACTION_COPY):
+        if context.get_action() in (Gdk.DragAction.MOVE, Gdk.DragAction.COPY):
             context.finish(True, True, etime)
 
     def drag_drop(self, treeview, context, x, y, timestamp):
         target_list = treeview.drag_dest_get_target_list()
         target = treeview.drag_dest_find_target(context, target_list)
-        treeview.drag_get_data(context, target)
-        context.finish(False, True)
+        treeview.drag_get_data(context, target, 0)
+        context.finish(False, True, 0)
         return True
 
     def move_group(self, old_name, new_name, account):
-        for group in gajim.groups[account].keys():
+        for group in list(gajim.groups[account].keys()):
             if group.startswith(old_name):
                 self.rename_group(group, group.replace(old_name, new_name),
                     account)
 
     def drag_data_received_data(self, treeview, context, x, y, selection, info,
     etime):
-        treeview.stop_emission('drag_data_received')
+        treeview.stop_emission_by_name('drag_data_received')
         drop_info = treeview.get_dest_row_at_pos(x, y)
         if not drop_info:
             return
-        if not selection.data:
+        data = selection.get_data().decode()
+        if not data:
             return # prevents tb when several entrys are dragged
         model = treeview.get_model()
-        data = selection.data
+
         path_dest, position = drop_info
 
-        if position == gtk.TREE_VIEW_DROP_BEFORE and len(path_dest) == 2 \
+        if position == Gtk.TreeViewDropPosition.BEFORE and len(path_dest) == 2 \
         and path_dest[1] == 0: # dropped before the first group
             return
-        if position == gtk.TREE_VIEW_DROP_BEFORE and len(path_dest) == 2:
+        if position == Gtk.TreeViewDropPosition.BEFORE and len(path_dest) == 2:
             # dropped before a group: we drop it in the previous group every
             # time
             path_dest = (path_dest[0], path_dest[1]-1)
         # destination: the row something got dropped on
         iter_dest = model.get_iter(path_dest)
-        type_dest = model[iter_dest][C_TYPE].decode('utf-8')
-        jid_dest = model[iter_dest][C_JID].decode('utf-8')
-        account_dest = model[iter_dest][C_ACCOUNT].decode('utf-8')
+        type_dest = model[iter_dest][C_TYPE]
+        jid_dest = model[iter_dest][C_JID]
+        account_dest = model[iter_dest][C_ACCOUNT]
 
         # drop on account row in merged mode, we cannot know the desired account
         if account_dest == 'all':
@@ -4700,7 +4733,7 @@ class RosterWindow:
         path_source = treeview.get_selection().get_selected_rows()[1][0]
         iter_source = model.get_iter(path_source)
         type_source = model[iter_source][C_TYPE]
-        account_source = model[iter_source][C_ACCOUNT].decode('utf-8')
+        account_source = model[iter_source][C_ACCOUNT]
 
         if gajim.config.get_per('accounts', account_source, 'is_zeroconf'):
             return
@@ -4718,14 +4751,14 @@ class RosterWindow:
             if account_source != account_dest:
                 # drop on another account
                 return
-            grp_source = model[iter_source][C_JID].decode('utf-8')
+            grp_source = model[iter_source][C_JID]
             delimiter = gajim.connections[account_source].nested_group_delimiter
             grp_source_list = grp_source.split(delimiter)
             new_grp = None
             if type_dest == 'account':
                 new_grp = grp_source_list[-1]
             elif type_dest == 'group':
-                new_grp = model[iter_dest][C_JID].decode('utf-8') + delimiter +\
+                new_grp = model[iter_dest][C_JID] + delimiter +\
                     grp_source_list[-1]
             if new_grp:
                 self.move_group(grp_source, new_grp, account_source)
@@ -4747,26 +4780,26 @@ class RosterWindow:
         it = iter_source
         while model[it][C_TYPE] == 'contact':
             it = model.iter_parent(it)
-        grp_source = model[it][C_JID].decode('utf-8')
+        grp_source = model[it][C_JID]
         if grp_source in helpers.special_groups and \
                 grp_source not in ('Not in Roster', 'Observers'):
             # a transport or a minimized groupchat was dragged
             # we can add it to other accounts but not move it to another group,
             # see below
             return
-        jid_source = data.decode('utf-8')
+        jid_source = data
         c_source = gajim.contacts.get_contact_with_highest_priority(
             account_source, jid_source)
 
         # Get destination group
         grp_dest = None
         if type_dest == 'group':
-            grp_dest = model[iter_dest][C_JID].decode('utf-8')
+            grp_dest = model[iter_dest][C_JID]
         elif type_dest in ('contact', 'agent'):
             it = iter_dest
             while model[it][C_TYPE] != 'group':
                 it = model.iter_parent(it)
-            grp_dest = model[it][C_JID].decode('utf-8')
+            grp_dest = model[it][C_JID]
         if grp_dest in helpers.special_groups:
             return
 
@@ -4795,30 +4828,31 @@ class RosterWindow:
 
         drop_in_middle_of_meta = False
         if type_dest == 'contact':
-            if position == gtk.TREE_VIEW_DROP_BEFORE and len(path_dest) == 4:
+            if position == Gtk.TreeViewDropPosition.BEFORE and len(path_dest) == 4:
                 drop_in_middle_of_meta = True
-            if position == gtk.TREE_VIEW_DROP_AFTER and (len(path_dest) == 4 or\
+            if position == Gtk.TreeViewDropPosition.AFTER and (len(path_dest) == 4 or\
             self.modelfilter.iter_has_child(iter_dest)):
                 drop_in_middle_of_meta = True
         # Contact drop on group row or between two contacts that are
         # not metacontacts
-        if (type_dest == 'group' or position in (gtk.TREE_VIEW_DROP_BEFORE,
-        gtk.TREE_VIEW_DROP_AFTER)) and not drop_in_middle_of_meta:
+        if (type_dest == 'group' or position in (Gtk.TreeViewDropPosition.BEFORE,
+        Gtk.TreeViewDropPosition.AFTER)) and not drop_in_middle_of_meta:
             self.on_drop_in_group(None, account_source, c_source, grp_dest,
                 is_big_brother, context, etime, grp_source)
             return
 
         # Contact drop on another contact, make meta contacts
-        if position == gtk.TREE_VIEW_DROP_INTO_OR_AFTER or \
-        position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE or drop_in_middle_of_meta:
+        if position == Gtk.TreeViewDropPosition.INTO_OR_AFTER or \
+        position == Gtk.TreeViewDropPosition.INTO_OR_BEFORE or drop_in_middle_of_meta:
             c_dest = gajim.contacts.get_contact_with_highest_priority(
                 account_dest, jid_dest)
             if not c_dest:
                 # c_dest is None if jid_dest doesn't belong to account
                 return
-            menu = gtk.Menu()
-            item = gtk.MenuItem(_('Send %s to %s') % (c_source.get_shown_name(),
-                    c_dest.get_shown_name()))
+            menu = Gtk.Menu()
+            item = Gtk.MenuItem(_('Send %s to %s') % (
+                c_source.get_shown_name(), c_dest.get_shown_name()),
+                use_underline=False)
             item.connect('activate', self.on_drop_rosterx, account_source,
             c_source, account_dest, c_dest, is_big_brother, context, etime)
             menu.append(item)
@@ -4827,12 +4861,13 @@ class RosterWindow:
                 c_dest.jid)
             source_family = gajim.contacts.get_metacontacts_family(
                 account_source, c_source.jid)
-            if dest_family == source_family and dest_family:
-                item = gtk.MenuItem(_('Make %s first contact') % (
-                    c_source.get_shown_name()))
+            if dest_family == source_family  and dest_family:
+                item = Gtk.MenuItem(_('Make %s first contact') % (
+                    c_source.get_shown_name()), use_underline=False)
             else:
-                item = gtk.MenuItem(_('Make %s and %s metacontacts') % (
-                    c_source.get_shown_name(), c_dest.get_shown_name()))
+                item = Gtk.MenuItem(_('Make %s and %s metacontacts') % (
+                    c_source.get_shown_name(), c_dest.get_shown_name()),
+                    use_underline=False)
 
             item.connect('activate', self.on_drop_in_contact, account_source,
             c_source, account_dest, c_dest, is_big_brother, context, etime)
@@ -4842,7 +4877,7 @@ class RosterWindow:
             menu.attach_to_widget(self.tree, None)
             menu.connect('selection-done', gtkgui_helpers.destroy_widget)
             menu.show_all()
-            menu.popup(None, None, None, 1, etime)
+            menu.popup(None, None, None, None, 1, etime)
 
 ################################################################################
 ### Everything about images and icons....
@@ -4892,7 +4927,7 @@ class RosterWindow:
         self.setup_and_draw_roster()
         # Update the status combobox
         model = self.status_combobox.get_model()
-        titer = model.get_iter_root()
+        titer = model.get_iter_first()
         while titer:
             if model[titer][2] != '':
                 # If it's not change status message iter
@@ -4976,7 +5011,7 @@ class RosterWindow:
         for account in gajim.connections:
             for addr in gajim.interface.instances[account]['disco']:
                 gajim.interface.instances[account]['disco'][addr].paint_banner()
-            for ctrl in gajim.interface.minimized_controls[account].values():
+            for ctrl in list(gajim.interface.minimized_controls[account].values()):
                 ctrl.repaint_themed_widgets()
 
     def update_avatar_in_gui(self, jid, account):
@@ -4993,11 +5028,13 @@ class RosterWindow:
         Set style for treeview cell, using PRELIGHT system color
         """
         if set_background:
-            bgcolor = self.tree.style.bg[style]
-            renderer.set_property('cell-background-gdk', bgcolor)
+            context = self.tree.get_style_context()
+            bgcolor = context.get_background_color(style)
+            renderer.set_property('cell-background-rgba', bgcolor)
         else:
-            fgcolor = self.tree.style.fg[style]
-            renderer.set_property('foreground-gdk', fgcolor)
+            context = self.tree.get_style_context()
+            fgcolor = context.get_color(style)
+            renderer.set_property('foreground-rgba', fgcolor)
 
     def _iconCellDataFunc(self, column, renderer, model, titer, data=None):
         """
@@ -5022,8 +5059,8 @@ class RosterWindow:
             if not model[titer][C_JID] or not model[titer][C_ACCOUNT]:
                 # This can append when at the moment we add the row
                 return
-            jid = model[titer][C_JID].decode('utf-8')
-            account = model[titer][C_ACCOUNT].decode('utf-8')
+            jid = model[titer][C_JID]
+            account = model[titer][C_ACCOUNT]
             self._set_contact_row_background_color(renderer, jid, account)
             parent_iter = model.iter_parent(titer)
             if model[parent_iter][C_TYPE] == 'contact':
@@ -5046,7 +5083,7 @@ class RosterWindow:
             if color:
                 renderer.set_property('foreground', color)
             else:
-                self.set_renderer_color(renderer, gtk.STATE_ACTIVE, False)
+                self.set_renderer_color(renderer, Gtk.StateFlags.ACTIVE, False)
             renderer.set_property('font',
                 gtkgui_helpers.get_theme_font_for_option(theme, 'accountfont'))
             renderer.set_property('xpad', 0)
@@ -5057,7 +5094,7 @@ class RosterWindow:
             if color:
                 renderer.set_property('foreground', color)
             else:
-                self.set_renderer_color(renderer, gtk.STATE_PRELIGHT, False)
+                self.set_renderer_color(renderer, Gtk.StateFlags.PRELIGHT, False)
             renderer.set_property('font',
                 gtkgui_helpers.get_theme_font_for_option(theme, 'groupfont'))
             parent_iter = model.iter_parent(titer)
@@ -5071,8 +5108,8 @@ class RosterWindow:
             if not model[titer][C_JID] or not model[titer][C_ACCOUNT]:
                 # This can append when at the moment we add the row
                 return
-            jid = model[titer][C_JID].decode('utf-8')
-            account = model[titer][C_ACCOUNT].decode('utf-8')
+            jid = model[titer][C_JID]
+            account = model[titer][C_ACCOUNT]
             color = None
             if type_ == 'groupchat':
                 ctrl = gajim.interface.minimized_controls[account].get(jid,
@@ -5108,7 +5145,7 @@ class RosterWindow:
             return
 
         # allocate space for the icon only if needed
-        if not model[titer][data]:
+        if not model[titer][data] or model[titer][data] == empty_pixbuf:
             renderer.set_property('visible', False)
         else:
             renderer.set_property('visible', True)
@@ -5120,8 +5157,8 @@ class RosterWindow:
                 if not model[titer][C_JID] or not model[titer][C_ACCOUNT]:
                     # This can append at the moment we add the row
                     return
-                jid = model[titer][C_JID].decode('utf-8')
-                account = model[titer][C_ACCOUNT].decode('utf-8')
+                jid = model[titer][C_JID]
+                account = model[titer][C_ACCOUNT]
                 self._set_contact_row_background_color(renderer, jid, account)
 
     def _fill_avatar_pixbuf_renderer(self, column, renderer, model, titer,
@@ -5147,11 +5184,14 @@ class RosterWindow:
                 if not model[titer][C_JID] or not model[titer][C_ACCOUNT]:
                     # This can append at the moment we add the row
                     return
-                jid = model[titer][C_JID].decode('utf-8')
-                account = model[titer][C_ACCOUNT].decode('utf-8')
+                jid = model[titer][C_JID]
+                account = model[titer][C_ACCOUNT]
                 self._set_contact_row_background_color(renderer, jid, account)
         else:
             renderer.set_property('visible', False)
+        if model[titer][C_AVATAR_PIXBUF] == empty_pixbuf and \
+        gajim.config.get('avatar_position_in_roster') != 'left':
+            renderer.set_property('visible', False)
 
         if gajim.config.get('avatar_position_in_roster') == 'left':
             renderer.set_property('width', gajim.config.get(
@@ -5184,7 +5224,7 @@ class RosterWindow:
         if color:
             renderer.set_property('cell-background', color)
         else:
-            self.set_renderer_color(renderer, gtk.STATE_ACTIVE)
+            self.set_renderer_color(renderer, Gtk.StateFlags.ACTIVE)
 
     def _set_contact_row_background_color(self, renderer, jid, account):
         theme = gajim.config.get('roster_theme')
@@ -5204,7 +5244,7 @@ class RosterWindow:
         if color:
             renderer.set_property('cell-background', color)
         else:
-            self.set_renderer_color(renderer, gtk.STATE_PRELIGHT)
+            self.set_renderer_color(renderer, Gtk.StateFlags.PRELIGHT)
 
 ################################################################################
 ### Everything about building menus
@@ -5219,8 +5259,9 @@ class RosterWindow:
             return
         history_menuitem = self.xml.get_object('history_menuitem')
         if gtkgui_helpers.gtk_icon_theme.has_icon('document-open-recent'):
-            gtkgui_helpers.add_image_to_menuitem(history_menuitem,
-                'document-open-recent')
+            img = Gtk.Image()
+            img.set_from_icon_name('document-open-recent', Gtk.IconSize.MENU)
+            history_menuitem.set_image(img)
         new_chat_menuitem = self.xml.get_object('new_chat_menuitem')
         single_message_menuitem = self.xml.get_object(
                 'send_single_message_menuitem')
@@ -5263,14 +5304,14 @@ class RosterWindow:
             self.profile_avatar_menuitem_handler_id = None
 
         # remove the existing submenus
-        add_new_contact_menuitem.remove_submenu()
-        service_disco_menuitem.remove_submenu()
-        join_gc_menuitem.remove_submenu()
-        single_message_menuitem.remove_submenu()
-        advanced_menuitem.remove_submenu()
-        profile_avatar_menuitem.remove_submenu()
-
-        gc_sub_menu = gtk.Menu() # gc is always a submenu
+        add_new_contact_menuitem.set_submenu(None)
+        service_disco_menuitem.set_submenu(None)
+        join_gc_menuitem.set_submenu(None)
+        single_message_menuitem.set_submenu(None)
+        advanced_menuitem.set_submenu(None)
+        profile_avatar_menuitem.set_submenu(None)
+
+        gc_sub_menu = Gtk.Menu() # gc is always a submenu
         join_gc_menuitem.set_submenu(gc_sub_menu)
 
         connected_accounts = gajim.get_number_of_connected_accounts()
@@ -5282,7 +5323,7 @@ class RosterWindow:
         if connected_accounts > 2 or \
         (connected_accounts > 1 and not gajim.zeroconf_is_connected()):
             # 2 or more "real" (no zeroconf) accounts? make submenus
-            new_chat_sub_menu = gtk.Menu()
+            new_chat_sub_menu = Gtk.Menu()
 
             for account in accounts_list:
                 if gajim.connections[account].connected <= 1 or \
@@ -5291,8 +5332,8 @@ class RosterWindow:
                     continue
 
                 # new chat
-                new_chat_item = gtk.MenuItem(_('using account %s') % account,
-                    False)
+                new_chat_item = Gtk.MenuItem(_('using account %s') % account,
+                    use_underline=False)
                 new_chat_sub_menu.append(new_chat_item)
                 new_chat_item.connect('activate',
                     self.on_new_chat_menuitem_activate, account)
@@ -5334,9 +5375,9 @@ class RosterWindow:
                     break # No other account connected
         else:
             # 2 or more 'real' accounts are connected, make submenus
-            single_message_sub_menu = gtk.Menu()
-            add_sub_menu = gtk.Menu()
-            disco_sub_menu = gtk.Menu()
+            single_message_sub_menu = Gtk.Menu()
+            add_sub_menu = Gtk.Menu()
+            disco_sub_menu = Gtk.Menu()
 
             for account in accounts_list:
                 if gajim.connections[account].connected <= 1 or \
@@ -5345,8 +5386,8 @@ class RosterWindow:
                     continue
 
                 # single message
-                single_message_item = gtk.MenuItem(_('using account %s') % \
-                    account, False)
+                single_message_item = Gtk.MenuItem(_('using account %s') % \
+                    account, use_underline=False)
                 single_message_sub_menu.append(single_message_item)
                 single_message_item.connect('activate',
                     self.on_send_single_message_menuitem_activate, account)
@@ -5354,20 +5395,22 @@ class RosterWindow:
                 # join gc
                 if gajim.connections[account].private_storage_supported:
                     connected_accounts_with_private_storage += 1
-                gc_item = gtk.MenuItem(_('using account %s') % account, False)
+                gc_item = Gtk.MenuItem(_('using account %s') % account,
+                    use_underline=False)
                 gc_sub_menu.append(gc_item)
-                gc_menuitem_menu = gtk.Menu()
+                gc_menuitem_menu = Gtk.Menu()
                 self.add_bookmarks_list(gc_menuitem_menu, account)
                 gc_item.set_submenu(gc_menuitem_menu)
 
                 # add
-                add_item = gtk.MenuItem(_('to %s account') % account, False)
+                add_item = Gtk.MenuItem(_('to %s account') % account,
+                    use_underline=False)
                 add_sub_menu.append(add_item)
                 add_item.connect('activate', self.on_add_new_contact, account)
 
                 # disco
-                disco_item = gtk.MenuItem(_('using %s account') % account,
-                    False)
+                disco_item = Gtk.MenuItem(_('using %s account') % account,
+                    use_underline=False)
                 disco_sub_menu.append(disco_item)
                 disco_item.connect('activate',
                     self.on_service_disco_menuitem_activate, account)
@@ -5402,12 +5445,12 @@ class RosterWindow:
                             item.set_sensitive(False)
 
         # Manage GC bookmarks
-        newitem = gtk.SeparatorMenuItem() # separator
+        newitem = Gtk.SeparatorMenuItem.new() # separator
         gc_sub_menu.append(newitem)
 
-        newitem = gtk.ImageMenuItem(_('_Manage Bookmarks...'))
-        img = gtk.image_new_from_stock(gtk.STOCK_PREFERENCES,
-            gtk.ICON_SIZE_MENU)
+        newitem = Gtk.ImageMenuItem.new_with_mnemonic(_('_Manage Bookmarks...'))
+        img = Gtk.Image.new_from_stock(Gtk.STOCK_PREFERENCES,
+            Gtk.IconSize.MENU)
         newitem.set_image(img)
         newitem.connect('activate', self.on_manage_bookmarks_menuitem_activate)
         gc_sub_menu.append(newitem)
@@ -5422,11 +5465,11 @@ class RosterWindow:
                 connected_accounts_with_vcard.append(account)
         if len(connected_accounts_with_vcard) > 1:
             # 2 or more accounts? make submenus
-            profile_avatar_sub_menu = gtk.Menu()
+            profile_avatar_sub_menu = Gtk.Menu()
             for account in connected_accounts_with_vcard:
                 # profile, avatar
-                profile_avatar_item = gtk.MenuItem(_('of account %s') % account,
-                    False)
+                profile_avatar_item = Gtk.MenuItem(_('of account %s') % account,
+                    use_underline=False)
                 profile_avatar_sub_menu.append(profile_avatar_item)
                 profile_avatar_item.connect('activate',
                     self.on_profile_avatar_menuitem_activate, account)
@@ -5450,7 +5493,7 @@ class RosterWindow:
         if len(gajim.connections) == 0: # user has no accounts
             advanced_menuitem.set_sensitive(False)
         elif len(gajim.connections) == 1: # we have one acccount
-            account = gajim.connections.keys()[0]
+            account = list(gajim.connections.keys())[0]
             advanced_menuitem_menu = \
                 self.get_and_connect_advanced_menuitem_menu(account)
             self.advanced_menus.append(advanced_menuitem_menu)
@@ -5460,14 +5503,14 @@ class RosterWindow:
             advanced_menuitem.set_submenu(advanced_menuitem_menu)
             advanced_menuitem_menu.show_all()
         else: # user has *more* than one account : build advanced submenus
-            advanced_sub_menu = gtk.Menu()
+            advanced_sub_menu = Gtk.Menu()
             accounts = [] # Put accounts in a list to sort them
             for account in gajim.connections:
                 accounts.append(account)
             accounts.sort()
             for account in accounts:
-                advanced_item = gtk.MenuItem(_('for account %s') % account,
-                    False)
+                advanced_item = Gtk.MenuItem(_('for account %s') % account,
+                    use_underline=False)
                 advanced_sub_menu.append(advanced_item)
                 advanced_menuitem_menu = \
                     self.get_and_connect_advanced_menuitem_menu(account)
@@ -5507,12 +5550,12 @@ class RosterWindow:
             execute_command_menuitem = xml.get_object(
                 'execute_command_menuitem')
             edit_account_menuitem = xml.get_object('edit_account_menuitem')
-            sub_menu = gtk.Menu()
+            sub_menu = Gtk.Menu()
             status_menuitem.set_submenu(sub_menu)
 
             for show in ('online', 'chat', 'away', 'xa', 'dnd', 'invisible'):
                 uf_show = helpers.get_uf_show(show, use_mnemonic=True)
-                item = gtk.ImageMenuItem(uf_show)
+                item = Gtk.ImageMenuItem.new_with_mnemonic(uf_show)
                 icon = state_images[show]
                 item.set_image(icon)
                 sub_menu.append(item)
@@ -5523,10 +5566,10 @@ class RosterWindow:
                 else:
                     item.connect('activate', self.change_status, account, show)
 
-            item = gtk.SeparatorMenuItem()
+            item = Gtk.SeparatorMenuItem.new()
             sub_menu.append(item)
 
-            item = gtk.ImageMenuItem(_('_Change Status Message'))
+            item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Change Status Message'))
             gtkgui_helpers.add_image_to_menuitem(item, 'gajim-kbd_input')
             sub_menu.append(item)
             item.connect('activate', self.on_change_status_message_activate,
@@ -5534,11 +5577,11 @@ class RosterWindow:
             if gajim.connections[account].connected < 2:
                 item.set_sensitive(False)
 
-            item = gtk.SeparatorMenuItem()
+            item = Gtk.SeparatorMenuItem.new()
             sub_menu.append(item)
 
             uf_show = helpers.get_uf_show('offline', use_mnemonic=True)
-            item = gtk.ImageMenuItem(uf_show)
+            item = Gtk.ImageMenuItem.new_with_mnemonic(uf_show)
             icon = state_images['offline']
             item.set_image(icon)
             sub_menu.append(item)
@@ -5546,10 +5589,10 @@ class RosterWindow:
 
             pep_menuitem = xml.get_object('pep_menuitem')
             if gajim.connections[account].pep_supported:
-                pep_submenu = gtk.Menu()
+                pep_submenu = Gtk.Menu()
                 pep_menuitem.set_submenu(pep_submenu)
                 def add_item(label, opt_name, func):
-                    item = gtk.CheckMenuItem(label)
+                    item = Gtk.CheckMenuItem(label)
                     pep_submenu.append(item)
                     if not dbus_support.supported:
                         item.set_sensitive(False)
@@ -5564,15 +5607,15 @@ class RosterWindow:
                 add_item(_('Publish Location'), 'publish_location',
                     self.on_publish_location_toggled)
 
-                pep_config = gtk.ImageMenuItem(_('Configure Services...'))
-                item = gtk.SeparatorMenuItem()
+                pep_config = Gtk.ImageMenuItem(_('Configure Services...'))
+                item = Gtk.SeparatorMenuItem.new()
                 pep_submenu.append(item)
                 pep_config.set_sensitive(True)
                 pep_submenu.append(pep_config)
                 pep_config.connect('activate',
                     self.on_pep_services_menuitem_activate, account)
-                img = gtk.image_new_from_stock(gtk.STOCK_PREFERENCES,
-                    gtk.ICON_SIZE_MENU)
+                img = Gtk.Image.new_from_stock(Gtk.STOCK_PREFERENCES,
+                    Gtk.IconSize.MENU)
                 pep_config.set_image(img)
 
             else:
@@ -5603,7 +5646,7 @@ class RosterWindow:
             start_chat_menuitem.connect('activate',
                 self.on_new_chat_menuitem_activate, account)
 
-            gc_sub_menu = gtk.Menu() # gc is always a submenu
+            gc_sub_menu = Gtk.Menu() # gc is always a submenu
             join_group_chat_menuitem.set_submenu(gc_sub_menu)
             self.add_bookmarks_list(gc_sub_menu, account)
 
@@ -5620,21 +5663,21 @@ class RosterWindow:
             status_menuitem = xml.get_object('status_menuitem')
             zeroconf_properties_menuitem = xml.get_object(
                     'zeroconf_properties_menuitem')
-            sub_menu = gtk.Menu()
+            sub_menu = Gtk.Menu()
             status_menuitem.set_submenu(sub_menu)
 
             for show in ('online', 'away', 'dnd', 'invisible'):
                 uf_show = helpers.get_uf_show(show, use_mnemonic=True)
-                item = gtk.ImageMenuItem(uf_show)
+                item = Gtk.ImageMenuItem.new_with_mnemonic(uf_show)
                 icon = state_images[show]
                 item.set_image(icon)
                 sub_menu.append(item)
                 item.connect('activate', self.change_status, account, show)
 
-            item = gtk.SeparatorMenuItem()
+            item = Gtk.SeparatorMenuItem.new()
             sub_menu.append(item)
 
-            item = gtk.ImageMenuItem(_('_Change Status Message'))
+            item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Change Status Message'))
             gtkgui_helpers.add_image_to_menuitem(item, 'gajim-kbd_input')
             sub_menu.append(item)
             item.connect('activate', self.on_change_status_message_activate,
@@ -5643,7 +5686,7 @@ class RosterWindow:
                 item.set_sensitive(False)
 
             uf_show = helpers.get_uf_show('offline', use_mnemonic=True)
-            item = gtk.ImageMenuItem(uf_show)
+            item = Gtk.ImageMenuItem.new_with_mnemonic(uf_show)
             icon = state_images['offline']
             item.set_image(icon)
             sub_menu.append(item)
@@ -5659,12 +5702,12 @@ class RosterWindow:
         Make account's popup menu
         """
         model = self.modelfilter
-        account = model[titer][C_ACCOUNT].decode('utf-8')
+        account = model[titer][C_ACCOUNT]
 
         if account != 'all': # not in merged mode
             menu = self.build_account_menu(account)
         else:
-            menu = gtk.Menu()
+            menu = Gtk.Menu()
             iconset = gajim.config.get('iconset')
             path = os.path.join(helpers.get_iconset_path(iconset), '16x16')
             accounts = [] # Put accounts in a list to sort them
@@ -5673,7 +5716,7 @@ class RosterWindow:
             accounts.sort()
             for account in accounts:
                 state_images = gtkgui_helpers.load_iconset(path)
-                item = gtk.ImageMenuItem(account)
+                item = Gtk.ImageMenuItem(account)
                 show = gajim.SHOW_LIST[gajim.connections[account].connected]
                 icon = state_images[show]
                 item.set_image(icon)
@@ -5686,7 +5729,7 @@ class RosterWindow:
         menu.attach_to_widget(self.tree, None)
         menu.connect('selection-done', gtkgui_helpers.destroy_widget)
         menu.show_all()
-        menu.popup(None, None, None, event_button, event.time)
+        menu.popup(None, None, None, None, event_button, event.time)
 
     def make_group_menu(self, event, titer):
         """
@@ -5694,12 +5737,13 @@ class RosterWindow:
         """
         model = self.modelfilter
         path = model.get_path(titer)
-        group = model[titer][C_JID].decode('utf-8')
-        account = model[titer][C_ACCOUNT].decode('utf-8')
+        group = model[titer][C_JID]
+        account = model[titer][C_ACCOUNT]
 
-        list_ = [] # list of (jid, account) tuples
-        list_online = [] # list of (jid, account) tuples
+        list_ = [] # list of (contact, account) tuples
+        list_online = [] # list of (contact, account) tuples
 
+        show_bookmarked = True
         group = model[titer][C_JID]
         for jid in gajim.contacts.get_jid_list(account):
             contact = gajim.contacts.get_contact_with_highest_priority(account,
@@ -5707,33 +5751,38 @@ class RosterWindow:
             if group in contact.get_shown_groups():
                 if contact.show not in ('offline', 'error'):
                     list_online.append((contact, account))
+                    # Check that all contacts support direct NUC invite
+                    if not contact.supports(NS_CONFERENCE):
+                        show_bookmarked = False
                 list_.append((contact, account))
-        menu = gtk.Menu()
+        menu = Gtk.Menu()
 
         # Make special context menu if group is Groupchats
         if group == _('Groupchats'):
-            maximize_menuitem = gtk.ImageMenuItem(_('_Maximize All'))
-            icon = gtk.image_new_from_stock(gtk.STOCK_GOTO_TOP,
-                gtk.ICON_SIZE_MENU)
+            maximize_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(_(
+                '_Maximize All'))
+            icon = Gtk.Image.new_from_stock(Gtk.STOCK_GOTO_TOP,
+                Gtk.IconSize.MENU)
             maximize_menuitem.set_image(icon)
             maximize_menuitem.connect('activate',
                 self.on_all_groupchat_maximized, list_)
             menu.append(maximize_menuitem)
         else:
             # Send Group Message
-            send_group_message_item = gtk.ImageMenuItem(
+            send_group_message_item = Gtk.ImageMenuItem.new_with_mnemonic(
                 _('Send Group M_essage'))
-            icon = gtk.image_new_from_stock(gtk.STOCK_NEW, gtk.ICON_SIZE_MENU)
+            icon = Gtk.Image.new_from_stock(Gtk.STOCK_NEW, Gtk.IconSize.MENU)
             send_group_message_item.set_image(icon)
 
-            send_group_message_submenu = gtk.Menu()
+            send_group_message_submenu = Gtk.Menu()
             send_group_message_item.set_submenu(send_group_message_submenu)
             menu.append(send_group_message_item)
 
-            group_message_to_all_item = gtk.MenuItem(_('To all users'))
+            group_message_to_all_item = Gtk.MenuItem.new_with_mnemonic(_(
+                'To all users'))
             send_group_message_submenu.append(group_message_to_all_item)
 
-            group_message_to_all_online_item = gtk.MenuItem(
+            group_message_to_all_online_item = Gtk.MenuItem.new_with_mnemonic(
                 _('To all online users'))
             send_group_message_submenu.append(group_message_to_all_online_item)
 
@@ -5744,16 +5793,19 @@ class RosterWindow:
                 self.on_send_single_message_menuitem_activate, account, list_)
 
             # Invite to
-            invite_menuitem = gtk.ImageMenuItem(_('In_vite to'))
-            muc_icon = gtkgui_helpers.load_icon('muc_active')
-            if muc_icon:
-                invite_menuitem.set_image(muc_icon)
+            if group != _('Transports'):
+                invite_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(
+                    _('In_vite to'))
+                muc_icon = gtkgui_helpers.load_icon('muc_active')
+                if muc_icon:
+                    invite_menuitem.set_image(muc_icon)
 
-            gui_menu_builder.build_invite_submenu(invite_menuitem, list_online)
-            menu.append(invite_menuitem)
+                gui_menu_builder.build_invite_submenu(invite_menuitem,
+                    list_online, show_bookmarked=show_bookmarked)
+                menu.append(invite_menuitem)
 
             # Send Custom Status
-            send_custom_status_menuitem = gtk.ImageMenuItem(
+            send_custom_status_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(
                 _('Send Cus_tom Status'))
             # add a special img for this menuitem
             if helpers.group_is_blocked(account, group):
@@ -5761,17 +5813,17 @@ class RosterWindow:
                     'offline'))
                 send_custom_status_menuitem.set_sensitive(False)
             else:
-                icon = gtk.image_new_from_stock(gtk.STOCK_NETWORK,
-                    gtk.ICON_SIZE_MENU)
+                icon = Gtk.Image.new_from_stock(Gtk.STOCK_NETWORK,
+                    Gtk.IconSize.MENU)
                 send_custom_status_menuitem.set_image(icon)
-            status_menuitems = gtk.Menu()
+            status_menuitems = Gtk.Menu()
             send_custom_status_menuitem.set_submenu(status_menuitems)
             iconset = gajim.config.get('iconset')
             path = os.path.join(helpers.get_iconset_path(iconset), '16x16')
             for s in ('online', 'chat', 'away', 'xa', 'dnd', 'offline'):
                 # icon MUST be different instance for every item
                 state_images = gtkgui_helpers.load_iconset(path)
-                status_menuitem = gtk.ImageMenuItem(helpers.get_uf_show(s))
+                status_menuitem = Gtk.ImageMenuItem(helpers.get_uf_show(s))
                 status_menuitem.connect('activate', self.on_send_custom_status,
                     list_, s, group)
                 icon = state_images[s]
@@ -5790,11 +5842,11 @@ class RosterWindow:
                 send_custom_status_menuitem.set_sensitive(False)
 
         if not group in helpers.special_groups:
-            item = gtk.SeparatorMenuItem() # separator
+            item = Gtk.SeparatorMenuItem.new() # separator
             menu.append(item)
 
             # Rename
-            rename_item = gtk.ImageMenuItem(_('Re_name'))
+            rename_item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Rename...'))
             # add a special img for rename menuitem
             gtkgui_helpers.add_image_to_menuitem(rename_item, 'gajim-kbd_input')
             menu.append(rename_item)
@@ -5813,17 +5865,18 @@ class RosterWindow:
 
             if is_blocked and gajim.connections[account].\
             privacy_rules_supported:
-                unblock_menuitem = gtk.ImageMenuItem(_('_Unblock'))
-                icon = gtk.image_new_from_stock(gtk.STOCK_STOP,
-                    gtk.ICON_SIZE_MENU)
+                unblock_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(_(
+                    '_Unblock'))
+                icon = Gtk.Image.new_from_stock(Gtk.STOCK_STOP,
+                    Gtk.IconSize.MENU)
                 unblock_menuitem.set_image(icon)
                 unblock_menuitem.connect('activate', self.on_unblock, list_,
                     group)
                 menu.append(unblock_menuitem)
             else:
-                block_menuitem = gtk.ImageMenuItem(_('_Block'))
-                icon = gtk.image_new_from_stock(gtk.STOCK_STOP,
-                    gtk.ICON_SIZE_MENU)
+                block_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(_('_Block'))
+                icon = Gtk.Image.new_from_stock(Gtk.STOCK_STOP,
+                    Gtk.IconSize.MENU)
                 block_menuitem.set_image(icon)
                 block_menuitem.connect('activate', self.on_block, list_, group)
                 menu.append(block_menuitem)
@@ -5831,9 +5884,9 @@ class RosterWindow:
                     block_menuitem.set_sensitive(False)
 
             # Remove group
-            remove_item = gtk.ImageMenuItem(_('_Remove'))
-            icon = gtk.image_new_from_stock(gtk.STOCK_REMOVE,
-                gtk.ICON_SIZE_MENU)
+            remove_item = Gtk.ImageMenuItem.new_with_mnemonic(_('Remo_ve'))
+            icon = Gtk.Image.new_from_stock(Gtk.STOCK_REMOVE,
+                Gtk.IconSize.MENU)
             remove_item.set_image(icon)
             menu.append(remove_item)
             remove_item.connect('activate', self.on_remove_group_item_activated,
@@ -5853,20 +5906,20 @@ class RosterWindow:
         menu.attach_to_widget(self.tree, None)
         menu.connect('selection-done', gtkgui_helpers.destroy_widget)
         menu.show_all()
-        menu.popup(None, None, None, event_button, event.time)
+        menu.popup(None, None, None, None, event_button, event.time)
 
     def make_contact_menu(self, event, titer):
         """
         Make contact's popup menu
         """
         model = self.modelfilter
-        jid = model[titer][C_JID].decode('utf-8')
-        account = model[titer][C_ACCOUNT].decode('utf-8')
+        jid = model[titer][C_JID]
+        account = model[titer][C_ACCOUNT]
         contact = gajim.contacts.get_contact_with_highest_priority(account, jid)
         menu = gui_menu_builder.get_contact_menu(contact, account)
         event_button = gtkgui_helpers.get_possible_button_event(event)
         menu.attach_to_widget(self.tree, None)
-        menu.popup(None, None, None, event_button, event.time)
+        menu.popup(None, None, None, None, event_button, event.time)
 
     def make_multiple_contact_menu(self, event, iters):
         """
@@ -5878,19 +5931,19 @@ class RosterWindow:
         is_blocked = True
         privacy_rules_supported = True
         for titer in iters:
-            jid = model[titer][C_JID].decode('utf-8')
-            account = model[titer][C_ACCOUNT].decode('utf-8')
+            jid = model[titer][C_JID]
+            account = model[titer][C_ACCOUNT]
             if gajim.connections[account].connected < 2:
                 one_account_offline = True
             if not gajim.connections[account].privacy_rules_supported:
                 privacy_rules_supported = False
             contact = gajim.contacts.get_contact_with_highest_priority(account,
                 jid)
-            if helpers.jid_is_blocked(account, jid):
+            if not helpers.jid_is_blocked(account, jid):
                 is_blocked = False
             list_.append((contact, account))
 
-        menu = gtk.Menu()
+        menu = Gtk.Menu()
         account = None
         for (contact, current_account) in list_:
             # check that we use the same account for every sender
@@ -5898,56 +5951,64 @@ class RosterWindow:
                 account = None
                 break
             account = current_account
+        show_bookmarked = True
+        for (contact, current_account) in list_:
+            # Check that all contacts support direct NUC invite
+            if not contact.supports(NS_CONFERENCE):
+                show_bookmarked = False
+                break
         if account is not None:
-            send_group_message_item = gtk.ImageMenuItem(
+            send_group_message_item = Gtk.ImageMenuItem.new_with_mnemonic(
                 _('Send Group M_essage'))
-            icon = gtk.image_new_from_stock(gtk.STOCK_NEW, gtk.ICON_SIZE_MENU)
+            icon = Gtk.Image.new_from_stock(Gtk.STOCK_NEW, Gtk.IconSize.MENU)
             send_group_message_item.set_image(icon)
             menu.append(send_group_message_item)
             send_group_message_item.connect('activate',
                 self.on_send_single_message_menuitem_activate, account, list_)
 
         # Invite to Groupchat
-        invite_item = gtk.ImageMenuItem(_('In_vite to'))
+        invite_item = Gtk.ImageMenuItem.new_with_mnemonic(_('In_vite to'))
         muc_icon = gtkgui_helpers.load_icon('muc_active')
         if muc_icon:
             invite_item.set_image(muc_icon)
 
-        gui_menu_builder.build_invite_submenu(invite_item, list_)
+        gui_menu_builder.build_invite_submenu(invite_item, list_,
+            show_bookmarked=show_bookmarked)
         menu.append(invite_item)
 
-        item = gtk.SeparatorMenuItem() # separator
+        item = Gtk.SeparatorMenuItem.new() # separator
         menu.append(item)
 
         # Manage Transport submenu
-        item = gtk.ImageMenuItem(_('_Manage Contacts'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_PROPERTIES,
-            gtk.ICON_SIZE_MENU)
+        item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Manage Contacts'))
+        icon = Gtk.Image.new_from_stock(Gtk.STOCK_PROPERTIES,
+            Gtk.IconSize.MENU)
         item.set_image(icon)
-        manage_contacts_submenu = gtk.Menu()
+        manage_contacts_submenu = Gtk.Menu()
         item.set_submenu(manage_contacts_submenu)
         menu.append(item)
 
         # Edit Groups
-        edit_groups_item = gtk.ImageMenuItem(_('Edit _Groups'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_EDIT, gtk.ICON_SIZE_MENU)
+        edit_groups_item = Gtk.ImageMenuItem.new_with_mnemonic(_(
+            'Edit _Groups...'))
+        icon = Gtk.Image.new_from_stock(Gtk.STOCK_EDIT, Gtk.IconSize.MENU)
         edit_groups_item.set_image(icon)
         manage_contacts_submenu.append(edit_groups_item)
         edit_groups_item.connect('activate', self.on_edit_groups, list_)
 
-        item = gtk.SeparatorMenuItem() # separator
+        item = Gtk.SeparatorMenuItem.new() # separator
         manage_contacts_submenu.append(item)
 
         # Block
         if is_blocked and privacy_rules_supported:
-            unblock_menuitem = gtk.ImageMenuItem(_('_Unblock'))
-            icon = gtk.image_new_from_stock(gtk.STOCK_STOP, gtk.ICON_SIZE_MENU)
+            unblock_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(_('_Unblock'))
+            icon = Gtk.Image.new_from_stock(Gtk.STOCK_STOP, Gtk.IconSize.MENU)
             unblock_menuitem.set_image(icon)
             unblock_menuitem.connect('activate', self.on_unblock, list_)
             manage_contacts_submenu.append(unblock_menuitem)
         else:
-            block_menuitem = gtk.ImageMenuItem(_('_Block'))
-            icon = gtk.image_new_from_stock(gtk.STOCK_STOP, gtk.ICON_SIZE_MENU)
+            block_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(_('_Block'))
+            icon = Gtk.Image.new_from_stock(Gtk.STOCK_STOP, Gtk.IconSize.MENU)
             block_menuitem.set_image(icon)
             block_menuitem.connect('activate', self.on_block, list_)
             manage_contacts_submenu.append(block_menuitem)
@@ -5956,8 +6017,8 @@ class RosterWindow:
                 block_menuitem.set_sensitive(False)
 
         # Remove
-        remove_item = gtk.ImageMenuItem(_('_Remove'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_MENU)
+        remove_item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Remove'))
+        icon = Gtk.Image.new_from_stock(Gtk.STOCK_REMOVE, Gtk.IconSize.MENU)
         remove_item.set_image(icon)
         manage_contacts_submenu.append(remove_item)
         remove_item.connect('activate', self.on_req_usub, list_)
@@ -5970,197 +6031,72 @@ class RosterWindow:
         menu.attach_to_widget(self.tree, None)
         menu.connect('selection-done', gtkgui_helpers.destroy_widget)
         menu.show_all()
-        menu.popup(None, None, None, event_button, event.time)
+        menu.popup(None, None, None, None, event_button, event.time)
 
     def make_transport_menu(self, event, titer):
         """
         Make transport's popup menu
         """
         model = self.modelfilter
-        jid = model[titer][C_JID].decode('utf-8')
+        jid = model[titer][C_JID]
         path = model.get_path(titer)
-        account = model[titer][C_ACCOUNT].decode('utf-8')
+        account = model[titer][C_ACCOUNT]
         contact = gajim.contacts.get_contact_with_highest_priority(account, jid)
-        menu = gtk.Menu()
-
-        # Send single message
-        item = gtk.ImageMenuItem(_('Send Single Message'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_NEW, gtk.ICON_SIZE_MENU)
-        item.set_image(icon)
-        item.connect('activate',
-            self.on_send_single_message_menuitem_activate, account, contact)
-        menu.append(item)
-        if gajim.account_is_disconnected(account):
-            item.set_sensitive(False)
-
-        blocked = False
-        if helpers.jid_is_blocked(account, jid):
-            blocked = True
-
-        # Send Custom Status
-        send_custom_status_menuitem = gtk.ImageMenuItem(
-            _('Send Cus_tom Status'))
-        # add a special img for this menuitem
-        if blocked:
-            send_custom_status_menuitem.set_image(gtkgui_helpers.load_icon(
-                'offline'))
-            send_custom_status_menuitem.set_sensitive(False)
-        else:
-            if account in gajim.interface.status_sent_to_users and \
-            jid in gajim.interface.status_sent_to_users[account]:
-                send_custom_status_menuitem.set_image(gtkgui_helpers.load_icon(
-                    gajim.interface.status_sent_to_users[account][jid]))
-            else:
-                icon = gtk.image_new_from_stock(gtk.STOCK_NETWORK,
-                    gtk.ICON_SIZE_MENU)
-                send_custom_status_menuitem.set_image(icon)
-            status_menuitems = gtk.Menu()
-            send_custom_status_menuitem.set_submenu(status_menuitems)
-            iconset = gajim.config.get('iconset')
-            path = os.path.join(helpers.get_iconset_path(iconset), '16x16')
-            for s in ('online', 'chat', 'away', 'xa', 'dnd', 'offline'):
-                # icon MUST be different instance for every item
-                state_images = gtkgui_helpers.load_iconset(path)
-                status_menuitem = gtk.ImageMenuItem(helpers.get_uf_show(s))
-                status_menuitem.connect('activate', self.on_send_custom_status,
-                    [(contact, account)], s)
-                icon = state_images[s]
-                status_menuitem.set_image(icon)
-                status_menuitems.append(status_menuitem)
-        menu.append(send_custom_status_menuitem)
-        if gajim.account_is_disconnected(account):
-            send_custom_status_menuitem.set_sensitive(False)
-
-        item = gtk.SeparatorMenuItem() # separator
-        menu.append(item)
-
-        # Execute Command
-        item = gtk.ImageMenuItem(_('Execute Command...'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_EXECUTE, gtk.ICON_SIZE_MENU)
-        item.set_image(icon)
-        menu.append(item)
-        item.connect('activate', self.on_execute_command, contact, account,
-            contact.resource)
-        if gajim.account_is_disconnected(account):
-            item.set_sensitive(False)
-
-        # Manage Transport submenu
-        item = gtk.ImageMenuItem(_('_Manage Transport'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_PROPERTIES,
-            gtk.ICON_SIZE_MENU)
-        item.set_image(icon)
-        manage_transport_submenu = gtk.Menu()
-        item.set_submenu(manage_transport_submenu)
-        menu.append(item)
-
-        # Modify Transport
-        item = gtk.ImageMenuItem(_('_Modify Transport'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_PREFERENCES,
-            gtk.ICON_SIZE_MENU)
-        item.set_image(icon)
-        manage_transport_submenu.append(item)
-        item.connect('activate', self.on_edit_agent, contact, account)
-        if gajim.account_is_disconnected(account):
-            item.set_sensitive(False)
-
-        # Rename
-        item = gtk.ImageMenuItem(_('_Rename'))
-        # add a special img for rename menuitem
-        gtkgui_helpers.add_image_to_menuitem(item, 'gajim-kbd_input')
-        manage_transport_submenu.append(item)
-        item.connect('activate', self.on_rename, 'agent', jid, account)
-        if gajim.account_is_disconnected(account):
-            item.set_sensitive(False)
-
-        item = gtk.SeparatorMenuItem() # separator
-        manage_transport_submenu.append(item)
-
-        # Block
-        if blocked:
-            item = gtk.ImageMenuItem(_('_Unblock'))
-            item.connect('activate', self.on_unblock, [(contact, account)])
-        else:
-            item = gtk.ImageMenuItem(_('_Block'))
-            item.connect('activate', self.on_block, [(contact, account)])
-
-        icon = gtk.image_new_from_stock(gtk.STOCK_STOP, gtk.ICON_SIZE_MENU)
-        item.set_image(icon)
-        manage_transport_submenu.append(item)
-        if gajim.account_is_disconnected(account):
-            item.set_sensitive(False)
-
-        # Remove
-        item = gtk.ImageMenuItem(_('_Remove'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_MENU)
-        item.set_image(icon)
-        manage_transport_submenu.append(item)
-        item.connect('activate', self.on_remove_agent, [(contact, account)])
-        if gajim.account_is_disconnected(account):
-            item.set_sensitive(False)
-
-        item = gtk.SeparatorMenuItem() # separator
-        menu.append(item)
-
-        # Information
-        information_menuitem = gtk.ImageMenuItem(_('_Information'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_INFO, gtk.ICON_SIZE_MENU)
-        information_menuitem.set_image(icon)
-        menu.append(information_menuitem)
-        information_menuitem.connect('activate', self.on_info, contact, account)
-        if gajim.account_is_disconnected(account):
-            information_menuitem.set_sensitive(False)
-
+        menu = gui_menu_builder.get_transport_menu(contact, account)
         event_button = gtkgui_helpers.get_possible_button_event(event)
-
         menu.attach_to_widget(self.tree, None)
-        menu.connect('selection-done', gtkgui_helpers.destroy_widget)
-        menu.show_all()
-        menu.popup(None, None, None, event_button, event.time)
+        menu.popup(None, None, None, None, event_button, event.time)
 
     def make_groupchat_menu(self, event, titer):
         model = self.modelfilter
 
-        jid = model[titer][C_JID].decode('utf-8')
-        account = model[titer][C_ACCOUNT].decode('utf-8')
+        jid = model[titer][C_JID]
+        account = model[titer][C_ACCOUNT]
         contact = gajim.contacts.get_contact_with_highest_priority(account, jid)
-        menu = gtk.Menu()
+        menu = Gtk.Menu()
 
         if jid in gajim.interface.minimized_controls[account]:
-            maximize_menuitem = gtk.ImageMenuItem(_('_Maximize'))
-            icon = gtk.image_new_from_stock(gtk.STOCK_GOTO_TOP,
-                gtk.ICON_SIZE_MENU)
+            maximize_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(_(
+                '_Maximize'))
+            icon = Gtk.Image.new_from_stock(Gtk.STOCK_GOTO_TOP,
+                Gtk.IconSize.MENU)
             maximize_menuitem.set_image(icon)
             maximize_menuitem.connect('activate', self.on_groupchat_maximized, \
                 jid, account)
             menu.append(maximize_menuitem)
 
         if not gajim.gc_connected[account].get(jid, False):
-            connect_menuitem = gtk.ImageMenuItem(_('_Reconnect'))
-            connect_icon = gtk.image_new_from_stock(gtk.STOCK_CONNECT, \
-                gtk.ICON_SIZE_MENU)
+            connect_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(_(
+                '_Reconnect'))
+            connect_icon = Gtk.Image.new_from_stock(Gtk.STOCK_CONNECT, \
+                Gtk.IconSize.MENU)
             connect_menuitem.set_image(connect_icon)
             connect_menuitem.connect('activate', self.on_reconnect, jid,
                 account)
             menu.append(connect_menuitem)
-        disconnect_menuitem = gtk.ImageMenuItem(_('_Disconnect'))
-        disconnect_icon = gtk.image_new_from_stock(gtk.STOCK_DISCONNECT, \
-            gtk.ICON_SIZE_MENU)
+        disconnect_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(_(
+            '_Disconnect'))
+        disconnect_icon = Gtk.Image.new_from_stock(Gtk.STOCK_DISCONNECT, \
+            Gtk.IconSize.MENU)
         disconnect_menuitem.set_image(disconnect_icon)
         disconnect_menuitem.connect('activate', self.on_disconnect, jid,
             account)
         menu.append(disconnect_menuitem)
 
-        item = gtk.SeparatorMenuItem() # separator
+        item = Gtk.SeparatorMenuItem.new() # separator
         menu.append(item)
 
-        history_menuitem = gtk.ImageMenuItem(_('_History'))
+        history_menuitem = Gtk.ImageMenuItem.new_with_mnemonic(_('_History'))
         if gtkgui_helpers.gtk_icon_theme.has_icon('document-open-recent'):
-            history_icon = gtk.Image()
+            history_icon = Gtk.Image()
             history_icon.set_from_icon_name('document-open-recent',
-                gtk.ICON_SIZE_MENU)
+                Gtk.IconSize.MENU)
         else:
-            history_icon = gtk.image_new_from_stock(gtk.STOCK_JUSTIFY_FILL,
-                gtk.ICON_SIZE_MENU)
+            history_icon = Gtk.Image.new_from_stock(Gtk.STOCK_JUSTIFY_FILL, \
+                Gtk.IconSize.MENU)
+        if gtkgui_helpers.gtk_icon_theme.has_icon('document-open-recent'):
+            history_icon = Gtk.Image()
+            history_icon.set_from_icon_name('document-open-recent', Gtk.IconSize.MENU)
         history_menuitem.set_image(history_icon)
         history_menuitem .connect('activate', self.on_history, contact, account)
         menu.append(history_menuitem)
@@ -6170,7 +6106,7 @@ class RosterWindow:
         menu.attach_to_widget(self.tree, None)
         menu.connect('selection-done', gtkgui_helpers.destroy_widget)
         menu.show_all()
-        menu.popup(None, None, None, event_button, event.time)
+        menu.popup(None, None, None, None, event_button, event.time)
 
     def get_and_connect_advanced_menuitem_menu(self, account):
         """
@@ -6232,17 +6168,17 @@ class RosterWindow:
         """
         Add a seperator and History Manager menuitem BELOW for account menuitems
         """
-        item = gtk.SeparatorMenuItem() # separator
+        item = Gtk.SeparatorMenuItem.new() # separator
         menu.append(item)
 
         # History manager
-        item = gtk.ImageMenuItem(_('History Manager'))
+        item = Gtk.ImageMenuItem.new_with_mnemonic(_('History Manager'))
         if gtkgui_helpers.gtk_icon_theme.has_icon('document-open-recent'):
-            icon = gtk.Image()
-            icon.set_from_icon_name('document-open-recent', gtk.ICON_SIZE_MENU)
+            icon = Gtk.Image()
+            icon.set_from_icon_name('document-open-recent', Gtk.IconSize.MENU)
         else:
-            icon = gtk.image_new_from_stock(gtk.STOCK_JUSTIFY_FILL,
-                gtk.ICON_SIZE_MENU)
+            icon = Gtk.Image.new_from_stock(Gtk.STOCK_JUSTIFY_FILL,
+                Gtk.IconSize.MENU)
         item.set_image(icon)
         menu.append(item)
         item.connect('activate', self.on_history_manager_menuitem_activate)
@@ -6251,8 +6187,8 @@ class RosterWindow:
         """
         Show join new group chat item and bookmarks list for an account
         """
-        item = gtk.ImageMenuItem(_('_Join New Group Chat'))
-        icon = gtk.image_new_from_stock(gtk.STOCK_NEW, gtk.ICON_SIZE_MENU)
+        item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Join New Group Chat'))
+        icon = Gtk.Image.new_from_stock(Gtk.STOCK_NEW, Gtk.IconSize.MENU)
         item.set_image(icon)
         item.connect('activate', self.on_join_gc_activate, account)
 
@@ -6260,12 +6196,12 @@ class RosterWindow:
 
         # User has at least one bookmark.
         if gajim.connections[account].bookmarks:
-            item = gtk.SeparatorMenuItem()
+            item = Gtk.SeparatorMenuItem.new()
             gc_sub_menu.append(item)
 
         for bookmark in gajim.connections[account].bookmarks:
             # Do not use underline.
-            item = gtk.MenuItem(bookmark['name'], False)
+            item = Gtk.MenuItem(bookmark['name'], use_underline=False)
             item.connect('activate', self.on_bookmark_menuitem_activate,
                     account, bookmark)
             gc_sub_menu.append(item)
@@ -6275,14 +6211,14 @@ class RosterWindow:
         # Just handle new_chat_menuitem to have ctrl+N working even if we don't
         # open the menu
         new_chat_menuitem = self.xml.get_object('new_chat_menuitem')
-        ag = gtk.accel_groups_from_object(self.window)[0]
+        ag = Gtk.accel_groups_from_object(self.window)#[0]
 
         if self.new_chat_menuitem_handler_id:
             new_chat_menuitem.handler_disconnect(
                 self.new_chat_menuitem_handler_id)
             self.new_chat_menuitem_handler_id = None
 
-        new_chat_menuitem.remove_submenu()
+        new_chat_menuitem.set_submenu(None)
 
         connected_accounts = gajim.get_number_of_connected_accounts()
         if connected_accounts == 1 or (connected_accounts == 2 and \
@@ -6352,7 +6288,7 @@ class RosterWindow:
 
     def fill_column(self, col):
         for rend in self.renderers_list:
-            col.pack_start(rend[1], expand=rend[2])
+            col.pack_start(rend[1], rend[2])
             col.add_attribute(rend[1], rend[3], rend[4])
             col.set_cell_data_func(rend[1], rend[5], rend[6])
         # set renderers propertys
@@ -6375,9 +6311,9 @@ class RosterWindow:
         # [icon, name, type, jid, account, editable, mood_pixbuf,
         # activity_pixbuf, tune_pixbuf, location_pixbuf, avatar_pixbuf,
         # padlock_pixbuf]
-        self.columns = [gtk.Image, str, str, str, str,
-            gtk.gdk.Pixbuf, gtk.gdk.Pixbuf, gtk.gdk.Pixbuf, gtk.gdk.Pixbuf,
-            gtk.gdk.Pixbuf, gtk.gdk.Pixbuf]
+        self.columns = [Gtk.Image, str, str, str, str,
+            GdkPixbuf.Pixbuf, GdkPixbuf.Pixbuf, GdkPixbuf.Pixbuf, GdkPixbuf.Pixbuf,
+            GdkPixbuf.Pixbuf, GdkPixbuf.Pixbuf]
         self.xml = gtkgui_helpers.get_gtk_builder('roster_window.ui')
         self.window = self.xml.get_object('roster_window')
         self.hpaned = self.xml.get_object('roster_hpaned')
@@ -6389,7 +6325,7 @@ class RosterWindow:
             self.window.set_property('skip-taskbar-hint', True)
         self.tree = self.xml.get_object('roster_treeview')
         sel = self.tree.get_selection()
-        sel.set_mode(gtk.SELECTION_MULTIPLE)
+        sel.set_mode(Gtk.SelectionMode.MULTIPLE)
         # sel.connect('changed',
         #       self.on_treeview_selection_changed)
 
@@ -6444,7 +6380,7 @@ class RosterWindow:
         self.accounts_to_draw = []
 
         # uf_show, img, show, sensitive
-        liststore = gtk.ListStore(str, gtk.Image, str, bool)
+        liststore = Gtk.ListStore(str, Gtk.Image, str, bool)
         self.status_combobox = self.xml.get_object('status_combobox')
 
         cell = cell_renderer_image.CellRendererImage(0, 1)
@@ -6457,7 +6393,8 @@ class RosterWindow:
         # if we want False (so we add it for img_cell too)
         self.status_combobox.add_attribute(cell, 'sensitive', 3)
 
-        cell = gtk.CellRendererText()
+        cell = Gtk.CellRendererText()
+        cell.set_property('ellipsize', Pango.EllipsizeMode.END)
         cell.set_property('xpad', 5) # padding for status text
         self.status_combobox.pack_start(cell, True)
         # text to show is in in first column of liststore
@@ -6465,7 +6402,7 @@ class RosterWindow:
         # if it will be sensitive or not it is in the fourth column
         self.status_combobox.add_attribute(cell, 'sensitive', 3)
 
-        self.status_combobox.set_row_separator_func(self._iter_is_separator)
+        self.status_combobox.set_row_separator_func(self._iter_is_separator, None)
 
         for show in ('online', 'chat', 'away', 'xa', 'dnd', 'invisible'):
             uf_show = helpers.get_uf_show(show)
@@ -6475,12 +6412,12 @@ class RosterWindow:
         liststore.append(['SEPARATOR', None, '', True])
 
         path = gtkgui_helpers.get_icon_path('gajim-plugins')
-        img = gtk.Image()
+        img = Gtk.Image()
         img.set_from_file(path)
         self.xml.get_object('plugins_menuitem').set_image(img)
 
         path = gtkgui_helpers.get_icon_path('gajim-kbd_input')
-        img = gtk.Image()
+        img = Gtk.Image()
         img.set_from_file(path)
         # sensitivity to False because by default we're offline
         self.status_message_menuitem_iter = liststore.append(
@@ -6525,8 +6462,15 @@ class RosterWindow:
 
         self.xml.get_object('show_roster_menuitem').set_active(True)
 
+        if gtkgui_helpers.gtk_icon_theme.has_icon('document-open-recent'):
+            history_icon = Gtk.Image()
+            history_icon.set_from_icon_name('document-open-recent',
+                Gtk.IconSize.MENU)
+            history_menuitem = self.xml.get_object('history_menuitem')
+            history_menuitem.set_image(history_icon)
+
         # columns
-        col = gtk.TreeViewColumn()
+        col = Gtk.TreeViewColumn()
         # list of renderers with attributes / properties in the form:
         # (name, renderer_object, expand?, attribute_name, attribute_value,
         # cell_data_func, func_arg)
@@ -6536,12 +6480,12 @@ class RosterWindow:
             'activity': C_ACTIVITY_PIXBUF, 'tune': C_TUNE_PIXBUF,
             'location': C_LOCATION_PIXBUF}
 
-        renderer_text = gtk.CellRendererText()
+        renderer_text = Gtk.CellRendererText()
         self.renderers_propertys[renderer_text] = ('ellipsize',
-            pango.ELLIPSIZE_END)
+            Pango.EllipsizeMode.END)
 
         def add_avatar_renderer():
-            self.renderers_list.append(('avatar', gtk.CellRendererPixbuf(),
+            self.renderers_list.append(('avatar', Gtk.CellRendererPixbuf(),
                 False, 'pixbuf', C_AVATAR_PIXBUF,
                 self._fill_avatar_pixbuf_renderer, None))
 
@@ -6555,26 +6499,26 @@ class RosterWindow:
                 ('name', renderer_text, True,
                 'markup', C_NAME, self._nameCellDataFunc, None),
 
-                ('mood', gtk.CellRendererPixbuf(), False,
+                ('mood', Gtk.CellRendererPixbuf(), False,
                 'pixbuf', C_MOOD_PIXBUF,
                 self._fill_pep_pixbuf_renderer, C_MOOD_PIXBUF),
 
-                ('activity', gtk.CellRendererPixbuf(), False,
+                ('activity', Gtk.CellRendererPixbuf(), False,
                 'pixbuf', C_ACTIVITY_PIXBUF,
                 self._fill_pep_pixbuf_renderer, C_ACTIVITY_PIXBUF),
 
-                ('tune', gtk.CellRendererPixbuf(), False,
+                ('tune', Gtk.CellRendererPixbuf(), False,
                 'pixbuf', C_TUNE_PIXBUF,
                 self._fill_pep_pixbuf_renderer, C_TUNE_PIXBUF),
 
-                ('location', gtk.CellRendererPixbuf(), False,
+                ('location', Gtk.CellRendererPixbuf(), False,
                 'pixbuf', C_LOCATION_PIXBUF,
                 self._fill_pep_pixbuf_renderer, C_LOCATION_PIXBUF))
 
         if gajim.config.get('avatar_position_in_roster') == 'right':
             add_avatar_renderer()
 
-        self.renderers_list.append(('padlock', gtk.CellRendererPixbuf(), False,
+        self.renderers_list.append(('padlock', Gtk.CellRendererPixbuf(), False,
                 'pixbuf', C_PADLOCK_PIXBUF,
                 self._fill_padlock_pixbuf_renderer, None))
 
@@ -6583,22 +6527,24 @@ class RosterWindow:
         self.tree.append_column(col)
 
         # do not show gtk arrows workaround
-        col = gtk.TreeViewColumn()
-        render_pixbuf = gtk.CellRendererPixbuf()
-        col.pack_start(render_pixbuf, expand=False)
+        col = Gtk.TreeViewColumn()
+        render_pixbuf = Gtk.CellRendererPixbuf()
+        col.pack_start(render_pixbuf, False)
         self.tree.append_column(col)
         col.set_visible(False)
         self.tree.set_expander_column(col)
 
         # signals
         self.TARGET_TYPE_URI_LIST = 80
-        TARGETS = [('MY_TREE_MODEL_ROW',
-            gtk.TARGET_SAME_APP | gtk.TARGET_SAME_WIDGET, 0)]
-        TARGETS2 = [('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0),
-            ('text/uri-list', 0, self.TARGET_TYPE_URI_LIST)]
-        self.tree.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, TARGETS,
-            gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_MOVE | gtk.gdk.ACTION_COPY)
-        self.tree.enable_model_drag_dest(TARGETS2, gtk.gdk.ACTION_DEFAULT)
+        self.tree.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK,
+            [], Gdk.DragAction.DEFAULT | Gdk.DragAction.MOVE | \
+            Gdk.DragAction.COPY)
+        self.tree.drag_source_add_text_targets()
+        self.tree.enable_model_drag_dest([], Gdk.DragAction.DEFAULT)
+        dst_targets = Gtk.TargetList.new([])
+        dst_targets.add_text_targets(0)
+        dst_targets.add_uri_targets(self.TARGET_TYPE_URI_LIST)
+        self.tree.drag_dest_set_target_list(dst_targets)
         self.tree.connect('drag_begin', self.drag_begin)
         self.tree.connect('drag_end', self.drag_end)
         self.tree.connect('drag_drop', self.drag_drop)
@@ -6635,7 +6581,7 @@ class RosterWindow:
                     config.AccountCreationWizardWindow()
             # Open wizard only after roster is created, so we can make it
             # transient for the roster window
-            gobject.idle_add(_open_wizard)
+            GLib.idle_add(_open_wizard)
         if not gajim.ZEROCONF_ACC_NAME in gajim.config.get_per('accounts'):
             # Create zeroconf in config file
             from common.zeroconf import connection_zeroconf
@@ -6643,24 +6589,24 @@ class RosterWindow:
 
         # Setting CTRL+J to be the shortcut for bringing up the dialog to join a
         # conference.
-        accel_group = gtk.accel_groups_from_object(self.window)[0]
-        accel_group.connect_group(gtk.keysyms.j, gtk.gdk.CONTROL_MASK,
-                gtk.ACCEL_MASK, self.on_ctrl_j)
+        accel_group = Gtk.accel_groups_from_object(self.window)[0]
+        accel_group.connect(Gdk.KEY_j, Gdk.ModifierType.CONTROL_MASK,
+                Gtk.AccelFlags.MASK, self.on_ctrl_j)
 
         # Setting CTRL+N to be the shortcut for show Start chat dialog
         new_chat_menuitem = self.xml.get_object('new_chat_menuitem')
         new_chat_menuitem.add_accelerator('activate', accel_group,
-            gtk.keysyms.n, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
+            Gdk.KEY_n, Gdk.ModifierType.CONTROL_MASK, Gtk.AccelFlags.VISIBLE)
 
         # Setting CTRL+S to be the shortcut to change status message
-        accel_group = gtk.AccelGroup()
-        keyval, mod = gtk.accelerator_parse('<Control>s')
-        accel_group.connect_group(keyval, mod, gtk.ACCEL_VISIBLE,
+        accel_group = Gtk.AccelGroup()
+        keyval, mod = Gtk.accelerator_parse('<Control>s')
+        accel_group.connect(keyval, mod, Gtk.AccelFlags.VISIBLE,
             self.accel_group_func)
 
         # Setting CTRL+k to focus rfilter_entry
-        keyval, mod = gtk.accelerator_parse('<Control>k')
-        accel_group.connect_group(keyval, mod, gtk.ACCEL_VISIBLE,
+        keyval, mod = Gtk.accelerator_parse('<Control>k')
+        accel_group.connect(keyval, mod, Gtk.AccelFlags.VISIBLE,
             self.accel_group_func)
         self.window.add_accel_group(accel_group)
 
diff --git a/src/search_window.py b/src/search_window.py
index 074714fd240db2de2e8a6d6812737a2c151605c3..9a9ea1a31783f981dd3ede3aff4cfffd9814b287 100644
--- a/src/search_window.py
+++ b/src/search_window.py
@@ -19,8 +19,8 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gobject
-import gtk
+from gi.repository import GLib
+from gi.repository import Gtk
 
 from common import gajim
 from common import dataforms
@@ -52,7 +52,7 @@ class SearchWindow:
         self.xml.connect_signals(self)
         self.window.show_all()
         self.request_form()
-        self.pulse_id = gobject.timeout_add(80, self.pulse_callback)
+        self.pulse_id = GLib.timeout_add(80, self.pulse_callback)
 
         self.is_form = None
 
@@ -72,12 +72,12 @@ class SearchWindow:
         return True
 
     def on_search_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             self.window.destroy()
 
     def on_search_window_destroy(self, widget):
         if self.pulse_id:
-            gobject.source_remove(self.pulse_id)
+            GLib.source_remove(self.pulse_id)
         del gajim.interface.instances[self.account]['search'][self.jid]
         gajim.ged.remove_event_handler('search-form-received', ged.GUI1,
             self._nec_search_form_received)
@@ -104,7 +104,7 @@ class SearchWindow:
         self.progressbar.show()
         self.label.set_text(_('Waiting for results'))
         self.label.show()
-        self.pulse_id = gobject.timeout_add(80, self.pulse_callback)
+        self.pulse_id = GLib.timeout_add(80, self.pulse_callback)
         self.search_button.hide()
 
     def on_add_contact_button_clicked(self, widget):
@@ -128,7 +128,7 @@ class SearchWindow:
 
     def _nec_search_form_received(self, obj):
         if self.pulse_id:
-            gobject.source_remove(self.pulse_id)
+            GLib.source_remove(self.pulse_id)
         self.progressbar.hide()
         self.label.hide()
 
@@ -151,7 +151,7 @@ class SearchWindow:
             self.data_form_widget = config.FakeDataForm(obj.data)
 
         self.data_form_widget.show_all()
-        self.search_vbox.pack_start(self.data_form_widget)
+        self.search_vbox.pack_start(self.data_form_widget, True, True, 0)
 
     def on_result_treeview_cursor_changed(self, treeview):
         if self.jid_column == -1:
@@ -168,7 +168,7 @@ class SearchWindow:
 
     def _nec_search_result_received(self, obj):
         if self.pulse_id:
-            gobject.source_remove(self.pulse_id)
+            GLib.source_remove(self.pulse_id)
         self.progressbar.hide()
         self.label.hide()
 
@@ -178,29 +178,29 @@ class SearchWindow:
                 self.label.show()
                 return
             # We suppose all items have the same fields
-            sw = gtk.ScrolledWindow()
-            sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
-            self.result_treeview = gtk.TreeView()
+            sw = Gtk.ScrolledWindow()
+            sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+            self.result_treeview = Gtk.TreeView()
             self.result_treeview.connect('cursor-changed',
                 self.on_result_treeview_cursor_changed)
             sw.add(self.result_treeview)
             # Create model
             fieldtypes = [str]*len(obj.data[0])
-            model = gtk.ListStore(*fieldtypes)
+            model = Gtk.ListStore(*fieldtypes)
             # Copy data to model
             for item in obj.data:
                 model.append(item.values())
             # Create columns
             counter = 0
             for field in obj.data[0].keys():
-                self.result_treeview.append_column(gtk.TreeViewColumn(field,
-                    gtk.CellRendererText(), text=counter))
+                self.result_treeview.append_column(Gtk.TreeViewColumn(field,
+                    Gtk.CellRendererText(), text=counter))
                 if field == 'jid':
                     self.jid_column = counter
                 counter += 1
             self.result_treeview.set_model(model)
             sw.show_all()
-            self.search_vbox.pack_start(sw)
+            self.search_vbox.pack_start(sw, True, True, 0)
             if self.jid_column > -1:
                 self.add_contact_button.show()
                 self.information_button.show()
@@ -223,7 +223,7 @@ class SearchWindow:
 
         self.result_treeview = self.data_form_widget.records_treeview
         selection = self.result_treeview.get_selection()
-        selection.set_mode(gtk.SELECTION_SINGLE)
+        selection.set_mode(Gtk.SelectionMode.SINGLE)
         self.result_treeview.connect('cursor-changed',
             self.on_result_treeview_cursor_changed)
 
@@ -233,7 +233,7 @@ class SearchWindow:
                 self.jid_column = counter
                 break
             counter += 1
-        self.search_vbox.pack_start(self.data_form_widget)
+        self.search_vbox.pack_start(self.data_form_widget, True, True, 0)
         self.data_form_widget.show()
         if self.jid_column > -1:
             self.add_contact_button.show()
diff --git a/src/session.py b/src/session.py
index 8133583778d3e2e8e207a2c4ed4241d6cf8b24d6..e54eaff4cb70b622da3dc62f1e86e6a3e9fc07b9 100644
--- a/src/session.py
+++ b/src/session.py
@@ -90,7 +90,7 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
                     msg_to_log = obj.msgtxt
                 obj.msg_id = gajim.logger.write(log_type, obj.fjid,
                     msg_to_log, tim=obj.timestamp, subject=obj.subject)
-            except exceptions.PysqliteOperationalError, e:
+            except exceptions.PysqliteOperationalError as e:
                 gajim.nec.push_incoming_event(InformationEvent(None,
                     conn=self.conn, level='error', pri_txt=_('Disk Write Error'),
                     sec_txt=str(e)))
@@ -237,7 +237,8 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
             obj.show_in_systray = notify.get_show_in_systray(event_type,
                 self.conn.name, contact)
 
-        if not self.control:
+        if (not self.control and obj.mtype != 'normal') or \
+        (obj.mtype == 'normal' and not obj.popup):
             event = gajim.events.create_event(type_, (obj.msgtxt, obj.subject,
                 obj.mtype, obj.timestamp, obj.encrypted, obj.resource,
                 obj.msg_id, obj.xhtml, self, obj.form_node, obj.displaymarking,
@@ -424,7 +425,7 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
             'submit':
                 try:
                     self.archiving_accepted(form)
-                except exceptions.NegotiationError, details:
+                except exceptions.NegotiationError as details:
                     self.fail_bad_negotiation(details)
 
                 return
@@ -453,7 +454,7 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
 
                         try:
                             self.accept_e2e_alice(form, negotiated)
-                        except exceptions.NegotiationError, details:
+                        except exceptions.NegotiationError as details:
                             self.fail_bad_negotiation(details)
 
                     def reject_nondefault_options():
@@ -478,7 +479,7 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
                 else:
                     try:
                         self.accept_e2e_alice(form, negotiated)
-                    except exceptions.NegotiationError, details:
+                    except exceptions.NegotiationError as details:
                         self.fail_bad_negotiation(details)
 
                 return
@@ -486,21 +487,21 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
             'result':
                 try:
                     self.we_accept_archiving(form)
-                except exceptions.NegotiationError, details:
+                except exceptions.NegotiationError as details:
                     self.fail_bad_negotiation(details)
 
                 return
             elif self.status == 'responded-e2e' and form.getType() == 'result':
                 try:
                     self.accept_e2e_bob(form)
-                except exceptions.NegotiationError, details:
+                except exceptions.NegotiationError as details:
                     self.fail_bad_negotiation(details)
 
                 return
             elif self.status == 'identified-alice' and form.getType() == 'result':
                 try:
                     self.final_steps_alice(form)
-                except exceptions.NegotiationError, details:
+                except exceptions.NegotiationError as details:
                     self.fail_bad_negotiation(details)
 
                 return
diff --git a/src/statusicon.py b/src/statusicon.py
index 383762b229856fb78e6a7224d40d5554e5745c7d..01e4b71a7811b9bfc977a3cd623801826e195977 100644
--- a/src/statusicon.py
+++ b/src/statusicon.py
@@ -24,8 +24,8 @@
 ##
 
 import sys
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import GObject
 import os
 
 import dialogs
@@ -86,7 +86,7 @@ class StatusIcon:
 
     def show_icon(self):
         if not self.status_icon:
-            self.status_icon = gtk.StatusIcon()
+            self.status_icon = Gtk.StatusIcon()
             self.statusicon_size = '16'
             self.status_icon.set_property('has-tooltip', True)
             self.status_icon.connect('activate', self.on_status_icon_left_clicked)
@@ -135,11 +135,11 @@ class StatusIcon:
         Apart from image, we also update tooltip text here
         """
         def really_set_img():
-            if image.get_storage_type() == gtk.IMAGE_PIXBUF:
+            if image.get_storage_type() == Gtk.ImageType.PIXBUF:
                 self.status_icon.set_from_pixbuf(image.get_pixbuf())
             # FIXME: oops they forgot to support GIF animation?
             # or they were lazy to get it to work under Windows! WTF!
-            elif image.get_storage_type() == gtk.IMAGE_ANIMATION:
+            elif image.get_storage_type() == Gtk.ImageType.ANIMATION:
                 self.status_icon.set_from_pixbuf(
                         image.get_animation().get_static_image())
             #       self.status_icon.set_from_animation(image.get_animation())
@@ -150,16 +150,16 @@ class StatusIcon:
             self.status_icon.set_visible(True)
         if gajim.events.get_nb_systray_events():
             self.status_icon.set_visible(True)
-            if gajim.config.get('trayicon_blink'):
-                self.status_icon.set_blinking(True)
-            else:
-                image = gtkgui_helpers.load_icon('event')
-                really_set_img()
-                return
+#            if gajim.config.get('trayicon_blink'):
+#                self.status_icon.set_blinking(True)
+#            else:
+            image = gtkgui_helpers.load_icon('event')
+            really_set_img()
+            return
         else:
             if gajim.config.get('trayicon') == 'on_event':
                 self.status_icon.set_visible(False)
-            self.status_icon.set_blinking(False)
+#            self.status_icon.set_blinking(False)
 
         image = gajim.interface.jabber_state_images[self.statusicon_size][
                                                                 self.status]
@@ -213,11 +213,11 @@ class StatusIcon:
             chat_with_menuitem.disconnect(self.new_chat_handler_id)
             self.new_chat_handler_id = None
 
-        sub_menu = gtk.Menu()
+        sub_menu = Gtk.Menu()
         self.popup_menus.append(sub_menu)
         status_menuitem.set_submenu(sub_menu)
 
-        gc_sub_menu = gtk.Menu() # gc is always a submenu
+        gc_sub_menu = Gtk.Menu() # gc is always a submenu
         join_gc_menuitem.set_submenu(gc_sub_menu)
 
         # We need our own set of status icons, let's make 'em!
@@ -229,16 +229,16 @@ class StatusIcon:
             join_gc_menuitem.set_image(state_images['muc_active'])
 
         for show in ('online', 'chat', 'away', 'xa', 'dnd', 'invisible'):
-            uf_show = helpers.get_uf_show(show, use_mnemonic = True)
-            item = gtk.ImageMenuItem(uf_show)
+            uf_show = helpers.get_uf_show(show, use_mnemonic=True)
+            item = Gtk.ImageMenuItem.new_with_mnemonic(uf_show)
             item.set_image(state_images[show])
             sub_menu.append(item)
             item.connect('activate', self.on_show_menuitem_activate, show)
 
-        item = gtk.SeparatorMenuItem()
+        item = Gtk.SeparatorMenuItem.new()
         sub_menu.append(item)
 
-        item = gtk.ImageMenuItem(_('_Change Status Message...'))
+        item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Change Status Message...'))
         gtkgui_helpers.add_image_to_menuitem(item, 'gajim-kbd_input')
         sub_menu.append(item)
         item.connect('activate', self.on_change_status_message_activate)
@@ -249,11 +249,11 @@ class StatusIcon:
 
         connected_accounts_with_private_storage = 0
 
-        item = gtk.SeparatorMenuItem()
+        item = Gtk.SeparatorMenuItem.new()
         sub_menu.append(item)
 
-        uf_show = helpers.get_uf_show('offline', use_mnemonic = True)
-        item = gtk.ImageMenuItem(uf_show)
+        uf_show = helpers.get_uf_show('offline', use_mnemonic=True)
+        item = Gtk.ImageMenuItem.new_with_mnemonic(uf_show)
         item.set_image(state_images['offline'])
         sub_menu.append(item)
         item.connect('activate', self.on_show_menuitem_activate, 'offline')
@@ -267,14 +267,14 @@ class StatusIcon:
         accounts_list = sorted(gajim.contacts.get_accounts())
         # items that get shown whether an account is zeroconf or not
         if connected_accounts > 1: # 2 or more connections? make submenus
-            account_menu_for_chat_with = gtk.Menu()
+            account_menu_for_chat_with = Gtk.Menu()
             chat_with_menuitem.set_submenu(account_menu_for_chat_with)
             self.popup_menus.append(account_menu_for_chat_with)
 
             for account in accounts_list:
                 if gajim.account_is_connected(account):
                     # for chat_with
-                    item = gtk.MenuItem(_('using account %s') % account)
+                    item = Gtk.MenuItem(_('using account %s') % account)
                     account_menu_for_chat_with.append(item)
                     item.connect('activate', self.on_new_chat, account)
 
@@ -299,7 +299,7 @@ class StatusIcon:
                         connected_accounts_with_private_storage += 1
 
                     # for single message
-                    single_message_menuitem.remove_submenu()
+                    single_message_menuitem.set_submenu(None)
                     self.single_message_handler_id = single_message_menuitem.\
                             connect('activate',
                             self.on_single_message_menuitem_activate, account)
@@ -309,7 +309,7 @@ class StatusIcon:
                     break # No other account connected
         else:
             # 2 or more 'real' accounts are connected, make submenus
-            account_menu_for_single_message = gtk.Menu()
+            account_menu_for_single_message = Gtk.Menu()
             single_message_menuitem.set_submenu(
                     account_menu_for_single_message)
             self.popup_menus.append(account_menu_for_single_message)
@@ -321,24 +321,25 @@ class StatusIcon:
                 if gajim.connections[account].private_storage_supported:
                     connected_accounts_with_private_storage += 1
                 # for single message
-                item = gtk.MenuItem(_('using account %s') % account)
+                item = Gtk.MenuItem(_('using account %s') % account)
                 item.connect('activate',
                         self.on_single_message_menuitem_activate, account)
                 account_menu_for_single_message.append(item)
 
                 # join gc
-                gc_item = gtk.MenuItem(_('using account %s') % account, False)
+                gc_item = Gtk.MenuItem(_('using account %s') % account,
+                    use_underline=False)
                 gc_sub_menu.append(gc_item)
-                gc_menuitem_menu = gtk.Menu()
+                gc_menuitem_menu = Gtk.Menu()
                 gajim.interface.roster.add_bookmarks_list(gc_menuitem_menu,
                         account)
                 gc_item.set_submenu(gc_menuitem_menu)
                 gc_sub_menu.show_all()
 
-        newitem = gtk.SeparatorMenuItem() # separator
+        newitem = Gtk.SeparatorMenuItem.new() # separator
         gc_sub_menu.append(newitem)
-        newitem = gtk.ImageMenuItem(_('_Manage Bookmarks...'))
-        img = gtk.image_new_from_stock(gtk.STOCK_PREFERENCES, gtk.ICON_SIZE_MENU)
+        newitem = Gtk.ImageMenuItem.new_with_mnemonic(_('_Manage Bookmarks...'))
+        img = Gtk.Image.new_from_stock(Gtk.STOCK_PREFERENCES, Gtk.IconSize.MENU)
         newitem.set_image(img)
         newitem.connect('activate',
                 gajim.interface.roster.on_manage_bookmarks_menuitem_activate)
@@ -362,14 +363,13 @@ class StatusIcon:
 
         if os.name == 'nt':
             if self.added_hide_menuitem is False:
-                self.systray_context_menu.prepend(gtk.SeparatorMenuItem())
-                item = gtk.MenuItem(_('Hide this menu'))
+                self.systray_context_menu.prepend(Gtk.SeparatorMenuItem.new())
+                item = Gtk.MenuItem(_('Hide this menu'))
                 self.systray_context_menu.prepend(item)
                 self.added_hide_menuitem = True
 
         self.systray_context_menu.show_all()
-        self.systray_context_menu.popup(None, None, None, 0,
-                event_time)
+        self.systray_context_menu.popup(None, None, None, None, 0, event_time)
 
     def on_show_all_events_menuitem_activate(self, widget):
         events = gajim.events.get_systray_events()
@@ -423,7 +423,7 @@ class StatusIcon:
                             gajim.config.get('roster_y-position'))
                 if not gajim.config.get('roster_window_skip_taskbar'):
                     win.set_property('skip-taskbar-hint', False)
-                win.present_with_time(gtk.get_current_event_time())
+                win.present_with_time(Gtk.get_current_event_time())
         else:
             self.handle_first_event()
 
@@ -452,7 +452,7 @@ class StatusIcon:
 
     def on_clicked(self, widget, event):
         self.on_tray_leave_notify_event(widget, None)
-        if event.type_ != gtk.gdk.BUTTON_PRESS:
+        if event.type_ != Gdk.EventType.BUTTON_PRESS:
             return
         if event.button == 1: # Left click
             self.on_left_click()
@@ -477,7 +477,7 @@ class StatusIcon:
     def on_change_status_message_activate(self, widget):
         model = gajim.interface.roster.status_combobox.get_model()
         active = gajim.interface.roster.status_combobox.get_active()
-        status = model[active][2].decode('utf-8')
+        status = model[active][2]
         def on_response(message, pep_dict):
             if message is None: # None if user press Cancel
                 return
diff --git a/src/tooltips.py b/src/tooltips.py
index 5c71f3497a81ae3e10e83cd8eebe6b61af73a014..6521a7ed7309cef3891159573ed51f2d109b64eb 100644
--- a/src/tooltips.py
+++ b/src/tooltips.py
@@ -28,8 +28,9 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GLib
 import os
 import time
 import locale
@@ -78,22 +79,21 @@ class BaseTooltip:
         implementation: show data as value of a label
         """
         self.create_window()
-        self.win.add(gtk.Label(data))
+        self.win.add(Gtk.Label(label=data))
 
     def create_window(self):
         """
         Create a popup window each time tooltip is requested
         """
-        self.win = gtk.Window(gtk.WINDOW_POPUP)
+        self.win = Gtk.Window(Gtk.WindowType.POPUP)
         self.win.set_title('tooltip')
         self.win.set_border_width(3)
         self.win.set_resizable(False)
         self.win.set_name('gtk-tooltips')
-        self.win.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_TOOLTIP)
+        self.win.set_type_hint(Gdk.WindowTypeHint.TOOLTIP)
 
-        self.win.set_events(gtk.gdk.POINTER_MOTION_MASK)
-        self.win.connect_after('expose_event', self.expose)
-        self.win.connect('size-request', self.on_size_request)
+        self.win.set_events(Gdk.EventMask.POINTER_MOTION_MASK)
+        self.win.connect('size-allocate', self.on_size_allocate)
         self.win.connect('motion-notify-event', self.motion_notify_event)
         self.screen = self.win.get_screen()
 
@@ -113,32 +113,33 @@ class BaseTooltip:
     def motion_notify_event(self, widget, event):
         self.hide_tooltip()
 
-    def on_size_request(self, widget, requisition):
-        half_width = requisition.width / 2 + 1
+    def on_size_allocate(self, widget, rect):
+        half_width = rect.width / 2 + 1
+        if self.preferred_position[1] + rect.height > self.screen.get_height():
+             # flip tooltip up
+            self.preferred_position[1] -= rect.height + self.widget_height + 8
+            if self.preferred_position[1] < 0:
+                self.preferred_position[1] = self.screen.get_height() - \
+                    rect.height - 2
+
+                if self.preferred_position[0] + rect.width + 7 < \
+                self.screen.get_width():
+                    self.preferred_position[0] = self.preferred_position[0] + 7
+                else:
+                    self.preferred_position[0] = self.preferred_position[0] - \
+                        rect.width - 7
+                self.win.move(self.preferred_position[0],
+                    self.preferred_position[1])
+                return
         if self.preferred_position[0] < half_width:
             self.preferred_position[0] = 0
-        elif self.preferred_position[0] + requisition.width > \
-                self.screen.get_width() + half_width:
-            self.preferred_position[0] = self.screen.get_width() - \
-                    requisition.width
+        elif self.preferred_position[0] + rect.width > \
+        self.screen.get_width() + half_width:
+            self.preferred_position[0] = self.screen.get_width() - rect.width
         elif not self.check_last_time:
             self.preferred_position[0] -= half_width
-        if self.preferred_position[1] + requisition.height > \
-                self.screen.get_height():
-            # flip tooltip up
-            self.preferred_position[1] -= requisition.height + \
-                    self.widget_height + 8
-        if self.preferred_position[1] < 0:
-            self.preferred_position[1] = 0
         self.win.move(self.preferred_position[0], self.preferred_position[1])
 
-    def expose(self, widget, event):
-        style = self.win.get_style()
-        size = self.win.get_size()
-        style.paint_shadow(self.win.window, gtk.STATE_NORMAL, gtk.SHADOW_OUT,
-            None, self.win, 'tooltip', 0, 0, size[0], size[1])
-        return True
-
     def show_tooltip(self, data, widget_height, widget_y_position):
         """
         Show tooltip on widget
@@ -152,7 +153,8 @@ class BaseTooltip:
         self.populate(data)
 
         # get the X position of mouse pointer on the screen
-        pointer_x = self.screen.get_display().get_pointer()[1]
+        pointer_x = self.screen.get_display().get_device_manager().\
+            get_client_pointer().get_position()[1]
 
         # get the prefered X position of the tooltip on the screen in case this position is >
         # than the height of the screen, tooltip will be shown above the widget
@@ -160,12 +162,11 @@ class BaseTooltip:
 
         self.preferred_position = [pointer_x, preferred_y]
         self.widget_height = widget_height
-        self.win.ensure_style()
         self.win.show_all()
 
     def hide_tooltip(self):
         if self.timeout > 0:
-            gobject.source_remove(self.timeout)
+            GLib.source_remove(self.timeout)
             self.timeout = 0
         if self.win:
             self.win.destroy()
@@ -231,69 +232,67 @@ class StatusTable:
         self.spacer_label = '   '
 
     def create_table(self):
-        self.table = gtk.Table(4, 1)
+        self.table = Gtk.Grid()
+        self.table.insert_row(0)
+        self.table.insert_row(0)
+        self.table.insert_column(0)
         self.table.set_property('column-spacing', 2)
 
     def add_text_row(self, text, col_inc = 0):
         self.current_row += 1
-        self.text_label = gtk.Label()
+        self.text_label = Gtk.Label()
         self.text_label.set_line_wrap(True)
         self.text_label.set_alignment(0, 0)
         self.text_label.set_selectable(False)
         self.text_label.set_markup(text)
-        self.table.attach(self.text_label, 1 + col_inc, 4, self.current_row,
-                self.current_row + 1)
+        self.table.attach(self.text_label, 1 + col_inc, self.current_row,
+            3 - col_inc, 1)
 
     def get_status_info(self, resource, priority, show, status):
-        str_status = resource + ' (' + unicode(priority) + ')'
+        str_status = resource + ' (' + str(priority) + ')'
         if status:
             status = status.strip()
             if status != '':
-                # make sure 'status' is unicode before we send to to reduce_chars
-                if isinstance(status, str):
-                    status = unicode(status, encoding='utf-8')
                 # reduce to 100 chars, 1 line
                 status = helpers.reduce_chars_newlines(status, 100, 1)
-                str_status = gobject.markup_escape_text(str_status)
-                status = gobject.markup_escape_text(status)
+                str_status = GLib.markup_escape_text(str_status)
+                status = GLib.markup_escape_text(status)
                 str_status += ' - <i>' + status + '</i>'
         return str_status
 
     def add_status_row(self, file_path, show, str_status, status_time=None,
-                    show_lock=False, indent=True):
+    show_lock=False, indent=True):
         """
         Append a new row with status icon to the table
         """
+        self.table.insert_row(0)
+        self.table.insert_row(0)
         self.current_row += 1
         state_file = show.replace(' ', '_')
         files = []
         files.append(os.path.join(file_path, state_file + '.png'))
         files.append(os.path.join(file_path, state_file + '.gif'))
-        image = gtk.Image()
+        image = Gtk.Image()
         image.set_from_pixbuf(None)
         for f in files:
             if os.path.exists(f):
                 image.set_from_file(f)
                 break
-        spacer = gtk.Label(self.spacer_label)
+        spacer = Gtk.Label(label=self.spacer_label)
         image.set_alignment(1, 0.5)
         if indent:
-            self.table.attach(spacer, 1, 2, self.current_row,
-                    self.current_row + 1, 0, 0, 0, 0)
-        self.table.attach(image, 2, 3, self.current_row,
-                self.current_row + 1, gtk.FILL, gtk.FILL, 2, 0)
-        status_label = gtk.Label()
+            self.table.attach(spacer, 1, self.current_row, 1, 1)
+        self.table.attach(image, 2, self.current_row, 1, 1)
+        status_label = Gtk.Label()
         status_label.set_markup(str_status)
         status_label.set_alignment(0, 0)
         status_label.set_line_wrap(True)
-        self.table.attach(status_label, 3, 4, self.current_row,
-                self.current_row + 1, gtk.FILL | gtk.EXPAND, 0, 0, 0)
+        self.table.attach(status_label, 3, self.current_row, 1, 1)
         if show_lock:
-            lock_image = gtk.Image()
-            lock_image.set_from_stock(gtk.STOCK_DIALOG_AUTHENTICATION,
-                    gtk.ICON_SIZE_MENU)
-            self.table.attach(lock_image, 4, 5, self.current_row,
-                    self.current_row + 1, 0, 0, 0, 0)
+            lock_image = Gtk.Image()
+            lock_image.set_from_stock(Gtk.STOCK_DIALOG_AUTHENTICATION,
+                Gtk.IconSize.MENU)
+            self.table.attach(lock_image, 4, self.current_row, 1, 1)
 
 class NotificationAreaTooltip(BaseTooltip, StatusTable):
     """
@@ -311,12 +310,8 @@ class NotificationAreaTooltip(BaseTooltip, StatusTable):
         file_path = os.path.join(helpers.get_iconset_path(iconset), '16x16')
         for acct in accounts:
             message = acct['message']
-            # before reducing the chars we should assure we send unicode, else
-            # there are possible pango TBs on 'set_markup'
-            if isinstance(message, str):
-                message = unicode(message, encoding = 'utf-8')
             message = helpers.reduce_chars_newlines(message, 100, 1)
-            message = gobject.markup_escape_text(message)
+            message = GLib.markup_escape_text(message)
             if acct['name'] in gajim.con_types and \
                     gajim.con_types[acct['name']] in ('tls', 'ssl'):
                 show_lock = True
@@ -324,12 +319,12 @@ class NotificationAreaTooltip(BaseTooltip, StatusTable):
                 show_lock = False
             if message:
                 self.add_status_row(file_path, acct['show'],
-                        gobject.markup_escape_text(acct['name']) + \
-                        ' - ' + message, show_lock=show_lock, indent=False)
+                    GLib.markup_escape_text(acct['name']) + ' - ' + message,
+                    show_lock=show_lock, indent=False)
             else:
                 self.add_status_row(file_path, acct['show'],
-                        gobject.markup_escape_text(acct['name'])
-                        , show_lock=show_lock, indent=False)
+                    GLib.markup_escape_text(acct['name']), show_lock=show_lock,
+                    indent=False)
             for line in acct['event_lines']:
                 self.add_text_row('  ' + line, 1)
 
@@ -338,9 +333,8 @@ class NotificationAreaTooltip(BaseTooltip, StatusTable):
         self.create_table()
 
         accounts = helpers.get_notification_icon_tooltip_dict()
-        self.table.resize(2, 1)
         self.fill_table_with_accounts(accounts)
-        self.hbox = gtk.HBox()
+        self.hbox = Gtk.HBox()
         self.table.set_property('column-spacing', 1)
 
         self.hbox.add(self.table)
@@ -353,11 +347,11 @@ class GCTooltip(BaseTooltip):
 
     def __init__(self):
         self.account = None
-        self.text_label = gtk.Label()
+        self.text_label = Gtk.Label()
         self.text_label.set_line_wrap(True)
         self.text_label.set_alignment(0, 0)
         self.text_label.set_selectable(False)
-        self.avatar_image = gtk.Image()
+        self.avatar_image = Gtk.Image()
 
         BaseTooltip.__init__(self)
 
@@ -365,15 +359,17 @@ class GCTooltip(BaseTooltip):
         if not contact:
             return
         self.create_window()
-        vcard_table = gtk.Table(3, 1)
+        vcard_table = Gtk.Grid()
+        vcard_table.insert_row(0)
+        vcard_table.insert_row(0)
+        vcard_table.insert_row(0)
+        vcard_table.insert_column(0)
         vcard_table.set_property('column-spacing', 2)
-        vcard_table.set_homogeneous(False)
         vcard_current_row = 1
         properties = []
 
-        nick_markup = '<b>' + \
-                gobject.markup_escape_text(contact.get_shown_name()) \
-                + '</b>'
+        nick_markup = '<b>' + GLib.markup_escape_text(contact.get_shown_name())\
+            + '</b>'
         properties.append((nick_markup, None))
 
         if contact.status: # status message
@@ -381,8 +377,7 @@ class GCTooltip(BaseTooltip):
             if status != '':
                 # escape markup entities
                 status = helpers.reduce_chars_newlines(status, 300, 5)
-                status = '<i>' +\
-                        gobject.markup_escape_text(status) + '</i>'
+                status = '<i>' + GLib.markup_escape_text(status) + '</i>'
                 properties.append((status, None))
 
         show = helpers.get_uf_show(contact.show)
@@ -390,26 +385,26 @@ class GCTooltip(BaseTooltip):
         properties.append((show, None))
 
         if contact.jid.strip():
-            properties.append((_('Jabber ID: '), u'\u200E' + "<b>%s</b>" % \
+            properties.append((_('Jabber ID: '), '\u200E' + "<b>%s</b>" % \
                 contact.jid))
 
         if hasattr(contact, 'resource') and contact.resource.strip():
-            properties.append((_('Resource: '),
-                    gobject.markup_escape_text(contact.resource)))
+            properties.append((_('Resource: '), GLib.markup_escape_text(
+                contact.resource)))
 
         if contact.affiliation != 'none':
             uf_affiliation = helpers.get_uf_affiliation(contact.affiliation)
-            uf_affiliation =\
-                    _('%(owner_or_admin_or_member)s of this group chat') %\
-                    {'owner_or_admin_or_member': uf_affiliation}
+            uf_affiliation = \
+                _('%(owner_or_admin_or_member)s of this group chat') % \
+                {'owner_or_admin_or_member': uf_affiliation}
             uf_affiliation = self.colorize_affiliation(uf_affiliation)
             properties.append((uf_affiliation, None))
 
         # Add avatar
         puny_name = helpers.sanitize_filename(contact.name)
         puny_room = helpers.sanitize_filename(contact.room_jid)
-        file_ = helpers.get_avatar_path(os.path.join(gajim.AVATAR_PATH, puny_room,
-                puny_name))
+        file_ = helpers.get_avatar_path(os.path.join(gajim.AVATAR_PATH,
+            puny_room, puny_name))
         if file_:
             self.avatar_image.set_from_file(file_)
             pix = self.avatar_image.get_pixbuf()
@@ -420,31 +415,27 @@ class GCTooltip(BaseTooltip):
         while properties:
             property_ = properties.pop(0)
             vcard_current_row += 1
-            vertical_fill = gtk.FILL
+            label = Gtk.Label()
             if not properties:
-                vertical_fill |= gtk.EXPAND
-            label = gtk.Label()
+                label.set_vexpand(True)
             label.set_alignment(0, 0)
             if property_[1]:
                 label.set_markup(property_[0])
-                vcard_table.attach(label, 1, 2, vcard_current_row,
-                        vcard_current_row + 1, gtk.FILL, vertical_fill, 0, 0)
-                label = gtk.Label()
+                vcard_table.attach(label, 1, vcard_current_row, 1, 1)
+                label = Gtk.Label()
+                if not properties:
+                    label.set_vexpand(True)
                 label.set_alignment(0, 0)
                 label.set_markup(property_[1])
                 label.set_line_wrap(True)
-                vcard_table.attach(label, 2, 3, vcard_current_row,
-                        vcard_current_row + 1, gtk.EXPAND | gtk.FILL,
-                        vertical_fill, 0, 0)
+                vcard_table.attach(label, 2, vcard_current_row, 1, 1)
             else:
                 label.set_markup(property_[0])
                 label.set_line_wrap(True)
-                vcard_table.attach(label, 1, 3, vcard_current_row,
-                        vcard_current_row + 1, gtk.FILL, vertical_fill, 0)
+                vcard_table.attach(label, 1, vcard_current_row, 2, 1)
 
         self.avatar_image.set_alignment(0, 0)
-        vcard_table.attach(self.avatar_image, 3, 4, 2, vcard_current_row + 1,
-                gtk.FILL, gtk.FILL | gtk.EXPAND, 3, 3)
+        vcard_table.attach(self.avatar_image, 3, 2, 1, vcard_current_row - 1)
         gajim.plugin_manager.gui_extension_point('gc_tooltip_populate',
             self, contact, vcard_table)
         self.win.add(vcard_table)
@@ -456,11 +447,11 @@ class RosterTooltip(NotificationAreaTooltip):
 
     def __init__(self):
         self.account = None
-        self.image = gtk.Image()
+        self.image = Gtk.Image()
         self.image.set_alignment(0, 0)
         # padding is independent of the total length and better than alignment
         self.image.set_padding(1, 2)
-        self.avatar_image = gtk.Image()
+        self.avatar_image = Gtk.Image()
         NotificationAreaTooltip.__init__(self)
 
     def populate(self, contacts):
@@ -470,7 +461,6 @@ class RosterTooltip(NotificationAreaTooltip):
         if not contacts or len(contacts) == 0:
             # Tooltip for merged accounts row
             accounts = helpers.get_notification_icon_tooltip_dict()
-            self.table.resize(2, 1)
             self.spacer_label = ''
             self.fill_table_with_accounts(accounts)
             self.win.add(self.table)
@@ -478,12 +468,13 @@ class RosterTooltip(NotificationAreaTooltip):
 
         # primary contact
         prim_contact = gajim.contacts.get_highest_prio_contact_from_contacts(
-                contacts)
+            contacts)
 
         puny_jid = helpers.sanitize_filename(prim_contact.jid)
         table_size = 3
 
-        file_ = helpers.get_avatar_path(os.path.join(gajim.AVATAR_PATH, puny_jid))
+        file_ = helpers.get_avatar_path(os.path.join(gajim.AVATAR_PATH,
+            puny_jid))
         if file_:
             self.avatar_image.set_from_file(file_)
             pix = self.avatar_image.get_pixbuf()
@@ -492,19 +483,20 @@ class RosterTooltip(NotificationAreaTooltip):
             table_size = 4
         else:
             self.avatar_image.set_from_pixbuf(None)
-        vcard_table = gtk.Table(1,table_size)
+        vcard_table = Gtk.Grid()
+        vcard_table.insert_row(0)
+        for i in range(0, table_size):
+            vcard_table.insert_column(0)
         vcard_table.set_property('column-spacing', 2)
-        vcard_table.set_homogeneous(False)
         vcard_current_row = 1
         properties = []
 
-        name_markup = u'<span weight="bold">' + \
-                gobject.markup_escape_text(prim_contact.get_shown_name())\
-                + '</span>'
+        name_markup = '<span weight="bold">' + GLib.markup_escape_text(
+            prim_contact.get_shown_name()) + '</span>'
         if gajim.config.get('mergeaccounts'):
-            name_markup += u" <span foreground='%s'>(%s)</span>" % (
+            name_markup += " <span foreground='%s'>(%s)</span>" % (
                 gajim.config.get('tooltip_account_name_color'),
-                gobject.markup_escape_text(prim_contact.account.name))
+                GLib.markup_escape_text(prim_contact.account.name))
 
         if self.account and helpers.jid_is_blocked(self.account,
         prim_contact.jid):
@@ -522,17 +514,16 @@ class RosterTooltip(NotificationAreaTooltip):
             if contact.resource:
                 num_resources += 1
                 if contact.priority in contacts_dict:
-                    contacts_dict[contact.priority].append(contact)
+                    contacts_dict[int(contact.priority)].append(contact)
                 else:
-                    contacts_dict[contact.priority] = [contact]
+                    contacts_dict[int(contact.priority)] = [contact]
 
         if num_resources > 1:
             properties.append((_('Status: '),       ' '))
-            transport = gajim.get_transport_name_from_jid(
-                    prim_contact.jid)
+            transport = gajim.get_transport_name_from_jid(prim_contact.jid)
             if transport:
                 file_path = os.path.join(helpers.get_transport_path(transport),
-                        '16x16')
+                    '16x16')
             else:
                 iconset = gajim.config.get('iconset')
                 if not iconset:
@@ -545,11 +536,11 @@ class RosterTooltip(NotificationAreaTooltip):
             for priority in contact_keys:
                 for acontact in contacts_dict[priority]:
                     status_line = self.get_status_info(acontact.resource,
-                            acontact.priority, acontact.show, acontact.status)
+                        acontact.priority, acontact.show, acontact.status)
 
                     icon_name = self._get_icon_name_for_tooltip(acontact)
                     self.add_status_row(file_path, icon_name, status_line,
-                            acontact.last_status_time)
+                        acontact.last_status_time)
             properties.append((self.table,  None))
 
         else: # only one resource
@@ -558,13 +549,14 @@ class RosterTooltip(NotificationAreaTooltip):
                 if not self.check_last_time and self.account:
                     if contact.show == 'offline':
                         if not contact.last_status_time:
-                            gajim.connections[self.account].request_last_status_time(
-                                    contact.jid, '')
+                            gajim.connections[self.account].\
+                                request_last_status_time(contact.jid, '')
                         else:
                             self.check_last_time = contact.last_status_time
                     elif contact.resource:
-                        gajim.connections[self.account].request_last_status_time(
-                                contact.jid, contact.resource)
+                        gajim.connections[self.account].\
+                            request_last_status_time(
+                            contact.jid, contact.resource)
                         if contact.last_activity_time:
                             self.check_last_time = contact.last_activity_time
                 else:
@@ -576,17 +568,16 @@ class RosterTooltip(NotificationAreaTooltip):
                     else:
                         text = _(' since %s')
 
-                    if time.strftime('%j', time.localtime())== \
-                                    time.strftime('%j', contact.last_status_time):
-                    # it's today, show only the locale hour representation
+                    if time.strftime('%j', time.localtime()) == \
+                        time.strftime('%j', contact.last_status_time):
+                        # it's today, show only the locale hour representation
                         local_time = time.strftime('%X',
-                                contact.last_status_time)
+                            contact.last_status_time)
                     else:
                         # time.strftime returns locale encoded string
                         local_time = time.strftime('%c',
-                                contact.last_status_time)
-                    local_time = local_time.decode(
-                            locale.getpreferredencoding())
+                            contact.last_status_time)
+
                     text = text % local_time
                     show += text
                 if self.account and \
@@ -601,30 +592,30 @@ class RosterTooltip(NotificationAreaTooltip):
                     status = contact.status.strip()
                     if status:
                         # reduce long status
-                        # (no more than 300 chars on line and no more than 5 lines)
+                        # (no more than 300 chars on line and no more than
+                        # 5 lines)
                         # status is wrapped
                         status = helpers.reduce_chars_newlines(status, 300, 5)
                         # escape markup entities.
-                        status = gobject.markup_escape_text(status)
+                        status = GLib.markup_escape_text(status)
                         properties.append(('<i>%s</i>' % status, None))
                 properties.append((show, None))
 
         self._append_pep_info(contact, properties)
 
-        properties.append((_('Jabber ID: '), u'\u200E' + "<b>%s</b>" % \
+        properties.append((_('Jabber ID: '), '\u200E' + "<b>%s</b>" % \
             prim_contact.jid))
 
         # contact has only one ressource
         if num_resources == 1 and contact.resource:
-            properties.append((_('Resource: '),
-                    gobject.markup_escape_text(contact.resource) +\
-                    ' (' + unicode(contact.priority) + ')'))
+            properties.append((_('Resource: '), GLib.markup_escape_text(
+                contact.resource) + ' (' + str(contact.priority) + ')'))
 
         if self.account and prim_contact.sub and prim_contact.sub != 'both' and\
         prim_contact.jid not in gajim.gc_connected[self.account]:
             # ('both' is the normal sub so we don't show it)
-            properties.append(( _('Subscription: '),
-                    gobject.markup_escape_text(helpers.get_uf_sub(prim_contact.sub))))
+            properties.append(( _('Subscription: '), GLib.markup_escape_text(
+                helpers.get_uf_sub(prim_contact.sub))))
 
         if prim_contact.keyID:
             keyID = None
@@ -633,8 +624,8 @@ class RosterTooltip(NotificationAreaTooltip):
             elif len(prim_contact.keyID) == 16:
                 keyID = prim_contact.keyID[8:]
             if keyID:
-                properties.append((_('OpenPGP: '),
-                        gobject.markup_escape_text(keyID)))
+                properties.append((_('OpenPGP: '), GLib.markup_escape_text(
+                    keyID)))
 
         if contact.last_activity_time:
             last_active = datetime(*contact.last_activity_time[:6])
@@ -656,40 +647,38 @@ class RosterTooltip(NotificationAreaTooltip):
                     'tooltip_idle_color')
                 cs += '%s</span>'
                 properties.append((str(), None))
-                properties.append(((cs % _("Idle since %s")) % formatted, None))
-                properties.append(((cs % _("Idle for %s")) % str(diff), None))
+                idle_since = cs % _("Idle since %s")
+                properties.append((idle_since % formatted, None))
+                idle_for = cs % _("Idle for %s")
+                properties.append((idle_for % str(diff), None))
 
         while properties:
             property_ = properties.pop(0)
             vcard_current_row += 1
-            vertical_fill = gtk.FILL
+            label = Gtk.Label()
             if not properties and table_size == 4:
-                vertical_fill |= gtk.EXPAND
-            label = gtk.Label()
+                label.set_vexpand(True)
             label.set_alignment(0, 0)
             if property_[1]:
                 label.set_markup(property_[0])
-                vcard_table.attach(label, 1, 2, vcard_current_row,
-                        vcard_current_row + 1, gtk.FILL, vertical_fill, 0, 0)
-                label = gtk.Label()
+                vcard_table.attach(label, 1, vcard_current_row, 1, 1)
+                label = Gtk.Label()
+                if not properties and table_size == 4:
+                    label.set_vexpand(True)
                 label.set_alignment(0, 0)
                 label.set_markup(property_[1])
                 label.set_line_wrap(True)
-                vcard_table.attach(label, 2, 3, vcard_current_row,
-                        vcard_current_row + 1, gtk.EXPAND | gtk.FILL,
-                                vertical_fill, 0, 0)
+                vcard_table.attach(label, 2, vcard_current_row, 1, 1)
             else:
-                if isinstance(property_[0], (unicode, str)): # FIXME: rm unicode?
+                if isinstance(property_[0], str):
                     label.set_markup(property_[0])
                     label.set_line_wrap(True)
                 else:
                     label = property_[0]
-                vcard_table.attach(label, 1, 3, vcard_current_row,
-                        vcard_current_row + 1, gtk.FILL, vertical_fill, 0)
+                vcard_table.attach(label, 1, vcard_current_row, 2, 1)
         self.avatar_image.set_alignment(0, 0)
         if table_size == 4:
-            vcard_table.attach(self.avatar_image, 3, 4, 2,
-                vcard_current_row + 1, gtk.FILL, gtk.FILL | gtk.EXPAND, 3, 3)
+            vcard_table.attach(self.avatar_image, 3, 2, 1, vcard_current_row - 1)
 
         gajim.plugin_manager.gui_extension_point('roster_tooltip_populate',
             self, contacts, vcard_table)
@@ -701,7 +690,6 @@ class RosterTooltip(NotificationAreaTooltip):
             self.win.destroy()
             self.win = None
             self.populate(self.cur_data)
-            self.win.ensure_style()
             self.win.show_all()
 
     def _append_pep_info(self, contact, properties):
@@ -735,7 +723,7 @@ class FileTransfersTooltip(BaseTooltip):
         BaseTooltip.__init__(self)
 
     def populate(self, file_props):
-        ft_table = gtk.Table(2, 1)
+        ft_table = Gtk.Table(2, 1)
         ft_table.set_property('column-spacing', 2)
         current_row = 1
         self.create_window()
@@ -745,12 +733,11 @@ class FileTransfersTooltip(BaseTooltip):
             file_name = os.path.split(file_props.file_name)[1]
         else:
             file_name = file_props.name
-        properties.append((_('Name: '),
-                gobject.markup_escape_text(file_name)))
+        properties.append((_('Name: '), GLib.markup_escape_text(file_name)))
         if file_props.type_ == 'r':
             type_ = _('Download')
             actor = _('Sender: ')
-            sender = unicode(file_props.sender).split('/')[0]
+            sender = file_props.sender.split('/')[0]
             name = gajim.contacts.get_first_contact_from_jid(
                     file_props.tt_account, sender).get_shown_name()
         else:
@@ -762,7 +749,7 @@ class FileTransfersTooltip(BaseTooltip):
             else:
                 name = receiver.split('/')[0]
         properties.append((_('Type: '), type_))
-        properties.append((actor, gobject.markup_escape_text(name)))
+        properties.append((actor, GLib.markup_escape_text(name)))
 
         transfered_len = file_props.received_len
         if not transfered_len:
@@ -790,22 +777,22 @@ class FileTransfersTooltip(BaseTooltip):
             status = _('Not started')
         properties.append((_('Status: '), status))
         file_desc = file_props.desc
-        properties.append((_('Description: '), gobject.markup_escape_text(
-                file_desc)))
+        properties.append((_('Description: '), GLib.markup_escape_text(
+            file_desc)))
         while properties:
             property_ = properties.pop(0)
             current_row += 1
-            label = gtk.Label()
+            label = Gtk.Label()
             label.set_alignment(0, 0)
             label.set_markup(property_[0])
             ft_table.attach(label, 1, 2, current_row, current_row + 1,
-                    gtk.FILL, gtk.FILL, 0, 0)
-            label = gtk.Label()
+                    Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL, 0, 0)
+            label = Gtk.Label()
             label.set_alignment(0, 0)
             label.set_line_wrap(True)
             label.set_markup(property_[1])
             ft_table.attach(label, 2, 3, current_row, current_row + 1,
-                    gtk.EXPAND | gtk.FILL, gtk.FILL, 0, 0)
+                    Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL, 0, 0)
 
         self.win.add(ft_table)
 
@@ -816,7 +803,7 @@ class ServiceDiscoveryTooltip(BaseTooltip):
     """
     def populate(self, status):
         self.create_window()
-        label = gtk.Label()
+        label = Gtk.Label()
         label.set_line_wrap(True)
         label.set_alignment(0, 0)
         label.set_selectable(False)
diff --git a/src/vcard.py b/src/vcard.py
index c402d373dfcccf74092439a1d8fe3d6016c3ba25..309160f0842c6af8ec2db8667d4676767bc0a9e7 100644
--- a/src/vcard.py
+++ b/src/vcard.py
@@ -31,8 +31,9 @@
 
 # THIS FILE IS FOR **OTHERS'** PROFILE (when we VIEW their INFO)
 
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import GLib
+from gi.repository import Gdk
 import base64
 import time
 import locale
@@ -60,7 +61,7 @@ def get_avatar_pixbuf_encoded_mime(photo):
         img_encoded = photo['BINVAL']
         avatar_encoded = img_encoded
         try:
-            img_decoded = base64.decodestring(img_encoded)
+            img_decoded = base64.b64decode(img_encoded.encode('utf-8'))
         except Exception:
             pass
     if img_decoded:
@@ -123,8 +124,8 @@ class VcardWindow:
         self.vcard_arrived = False
         self.os_info_arrived = False
         self.entity_time_arrived = False
-        self.update_progressbar_timeout_id = gobject.timeout_add(100,
-                self.update_progressbar)
+        self.update_progressbar_timeout_id = GLib.timeout_add(100,
+            self.update_progressbar)
 
         gajim.ged.register_event_handler('version-result-received', ged.GUI1,
             self.set_os_info)
@@ -151,11 +152,11 @@ class VcardWindow:
 
     def on_vcard_information_window_destroy(self, widget):
         if self.update_progressbar_timeout_id is not None:
-            gobject.source_remove(self.update_progressbar_timeout_id)
+            GLib.source_remove(self.update_progressbar_timeout_id)
         del gajim.interface.instances[self.account]['infos'][self.contact.jid]
         buffer_ = self.xml.get_object('textview_annotation').get_buffer()
         annotation = buffer_.get_text(buffer_.get_start_iter(),
-                buffer_.get_end_iter())
+                buffer_.get_end_iter(), True)
         connection = gajim.connections[self.account]
         if annotation != connection.annotations.get(self.contact.jid, ''):
             connection.annotations[self.contact.jid] = annotation
@@ -170,19 +171,19 @@ class VcardWindow:
             self._nec_vcard_received)
 
     def on_vcard_information_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             self.window.destroy()
 
     def on_information_notebook_switch_page(self, widget, page, page_num):
-        gobject.idle_add(self.xml.get_object('close_button').grab_focus)
+        GLib.idle_add(self.xml.get_object('close_button').grab_focus)
 
     def on_PHOTO_eventbox_button_press_event(self, widget, event):
         """
         If right-clicked, show popup
         """
         if event.button == 3: # right click
-            menu = gtk.Menu()
-            menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS)
+            menu = Gtk.Menu()
+            menuitem = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_SAVE_AS, None)
             menuitem.connect('activate',
                     gtkgui_helpers.on_avatar_save_as_menuitem_activate,
                     self.contact.jid, self.contact.get_shown_name())
@@ -190,12 +191,13 @@ class VcardWindow:
             menu.connect('selection-done', lambda w:w.destroy())
             # show the menu
             menu.show_all()
-            menu.popup(None, None, None, event.button, event.time)
+            menu.attach_to_widget(widget, None)
+            menu.popup(None, None, None, None, event.button, event.time)
 
     def set_value(self, entry_name, value):
         try:
             if value and entry_name == 'URL_label':
-                widget = gtk.LinkButton(value, value)
+                widget = Gtk.LinkButton(value, value)
                 widget.set_alignment(0, 0)
                 widget.show()
                 table = self.xml.get_object('personal_info_table')
@@ -220,7 +222,7 @@ class VcardWindow:
                 self.xml.get_object('user_avatar_label').show()
                 if not pixbuf:
                     image.set_from_icon_name('stock_person',
-                            gtk.ICON_SIZE_DIALOG)
+                            Gtk.IconSize.DIALOG)
                     continue
                 pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'vcard')
                 image.set_from_pixbuf(pixbuf)
@@ -275,7 +277,7 @@ class VcardWindow:
     def test_remove_progressbar(self):
         if self.update_progressbar_timeout_id is not None and \
         self.vcard_arrived and self.os_info_arrived and self.entity_time_arrived:
-            gobject.source_remove(self.update_progressbar_timeout_id)
+            GLib.source_remove(self.update_progressbar_timeout_id)
             self.progressbar.hide()
             self.update_progressbar_timeout_id = None
 
@@ -361,8 +363,7 @@ class VcardWindow:
                 stats += ': ' + self.contact.status
             if self.contact.last_status_time:
                 stats += '\n' + _('since %s') % time.strftime('%c',
-                        self.contact.last_status_time).decode(
-                        locale.getpreferredencoding())
+                        self.contact.last_status_time)
             for c in connected_contact_list:
                 if c.resource != self.contact.resource:
                     stats += '\n'
@@ -371,7 +372,7 @@ class VcardWindow:
                         stats += ': ' + c.status
                     if c.last_status_time:
                         stats += '\n' + _('since %s') % time.strftime('%c',
-                                c.last_status_time).decode(locale.getpreferredencoding())
+                                c.last_status_time)
         else: # Maybe gc_vcard ?
             stats = helpers.get_uf_show(self.contact.show)
             if self.contact.status:
@@ -423,10 +424,10 @@ class VcardWindow:
                 tt_text = _("There is no pending subscription request.")
             eb.set_tooltip_text(tt_text)
 
-        resources = '%s (%s)' % (self.contact.resource, unicode(
-                self.contact.priority))
+        resources = '%s (%s)' % (self.contact.resource, str(
+            self.contact.priority))
         uf_resources = self.contact.resource + _(' resource with priority ')\
-                + unicode(self.contact.priority)
+                + str(self.contact.priority)
         if not self.contact.status:
             self.contact.status = ''
 
@@ -448,11 +449,11 @@ class VcardWindow:
         else: # Request os info if contact is connected
             if self.gc_contact:
                 j, r = gajim.get_room_and_nick_from_fjid(self.real_jid)
-                gobject.idle_add(gajim.connections[self.account].request_os_info,
-                        j, r, self.contact.jid)
+                GLib.idle_add(gajim.connections[self.account].request_os_info,
+                    j, r, self.contact.jid)
             else:
-                gobject.idle_add(gajim.connections[self.account].request_os_info,
-                        self.contact.jid, self.contact.resource)
+                GLib.idle_add(gajim.connections[self.account].request_os_info,
+                    self.contact.jid, self.contact.resource)
 
         # do not wait for entity_time if contact is not connected or has error
         # additional check for observer is needed, as show is offline for him
@@ -462,11 +463,11 @@ class VcardWindow:
         else: # Request entity time if contact is connected
             if self.gc_contact:
                 j, r = gajim.get_room_and_nick_from_fjid(self.real_jid)
-                gobject.idle_add(gajim.connections[self.account].\
-                        request_entity_time, j, r, self.contact.jid)
+                GLib.idle_add(gajim.connections[self.account].\
+                    request_entity_time, j, r, self.contact.jid)
             else:
-                gobject.idle_add(gajim.connections[self.account].\
-                        request_entity_time, self.contact.jid, self.contact.resource)
+                GLib.idle_add(gajim.connections[self.account].\
+                    request_entity_time, self.contact.jid, self.contact.resource)
 
         self.os_info = {0: {'resource': self.real_resource, 'client': '',
                 'os': ''}}
@@ -477,15 +478,14 @@ class VcardWindow:
             for c in contact_list:
                 if c.resource != self.contact.resource:
                     resources += '\n%s (%s)' % (c.resource,
-                            unicode(c.priority))
+                            str(c.priority))
                     uf_resources += '\n' + c.resource + \
-                            _(' resource with priority ') + unicode(c.priority)
+                            _(' resource with priority ') + str(c.priority)
                     if c.show not in ('offline', 'error'):
-                        gobject.idle_add(
-                                gajim.connections[self.account].request_os_info, c.jid,
-                                c.resource)
-                        gobject.idle_add(gajim.connections[self.account].\
-                                request_entity_time, c.jid, c.resource)
+                        GLib.idle_add(gajim.connections[self.account].\
+                            request_os_info, c.jid, c.resource)
+                        GLib.idle_add(gajim.connections[self.account].\
+                            request_entity_time, c.jid, c.resource)
                     self.os_info[i] = {'resource': c.resource, 'client': '',
                             'os': ''}
                     self.time_info[i] = {'resource': c.resource, 'time': ''}
@@ -532,7 +532,7 @@ class ZeroconfVcardWindow:
         del gajim.interface.instances[self.account]['infos'][self.contact.jid]
 
     def on_zeroconf_information_window_key_press_event(self, widget, event):
-        if event.keyval == gtk.keysyms.Escape:
+        if event.keyval == Gdk.KEY_Escape:
             self.window.destroy()
 
     def on_PHOTO_eventbox_button_press_event(self, widget, event):
@@ -540,8 +540,8 @@ class ZeroconfVcardWindow:
         If right-clicked, show popup
         """
         if event.button == 3: # right click
-            menu = gtk.Menu()
-            menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS)
+            menu = Gtk.Menu()
+            menuitem = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_SAVE_AS, None)
             menuitem.connect('activate',
                     gtkgui_helpers.on_avatar_save_as_menuitem_activate,
                     self.contact.jid, self.contact.get_shown_name())
@@ -549,12 +549,13 @@ class ZeroconfVcardWindow:
             menu.connect('selection-done', lambda w:w.destroy())
             # show the menu
             menu.show_all()
-            menu.popup(None, None, None, event.button, event.time)
+            menu.attach_to_widget(widget, None)
+            menu.popup(None, None, None, None, event.button, event.time)
 
     def set_value(self, entry_name, value):
         try:
             if value and entry_name == 'URL_label':
-                widget = gtk.LinkButton(value, value)
+                widget = Gtk.LinkButton(value, value)
                 widget.set_alignment(0, 0)
                 table = self.xml.get_object('personal_info_table')
                 table.attach(widget, 1, 4, 3, 4, yoptions = 0)
@@ -599,10 +600,10 @@ class ZeroconfVcardWindow:
                 '</span></b>')
         self.xml.get_object('local_jid_label').set_text(self.contact.jid)
 
-        resources = '%s (%s)' % (self.contact.resource, unicode(
-                self.contact.priority))
+        resources = '%s (%s)' % (self.contact.resource, str(
+            self.contact.priority))
         uf_resources = self.contact.resource + _(' resource with priority ')\
-                + unicode(self.contact.priority)
+                + str(self.contact.priority)
         if not self.contact.status:
             self.contact.status = ''
 
diff --git a/test/integration/test_resolver.py b/test/integration/test_resolver.py
index d80ffee87720fe9d3af320901e67c7f3f930c121..2de36d8e8b725929ed05a2df25fe21786e201a9c 100644
--- a/test/integration/test_resolver.py
+++ b/test/integration/test_resolver.py
@@ -46,7 +46,7 @@ class TestResolver(unittest.TestCase):
     def testLibAsyncNSResolver(self):
         self._reset()
         if not resolver.USE_LIBASYNCNS:
-            print 'testLibAsyncResolver: libasyncns-python not installed'
+            print('testLibAsyncResolver: libasyncns-python not installed')
             return
         self.resolver = resolver.LibAsyncNSResolver()
 
diff --git a/test/integration/test_roster.py b/test/integration/test_roster.py
index 43f40ed766dfbfc1a0aa090fcbcf976cf32c76b0..5b81f582490d85013f53173b16cba41e0f002513 100644
--- a/test/integration/test_roster.py
+++ b/test/integration/test_roster.py
@@ -186,13 +186,13 @@ class TestRosterWindowMetaContacts(TestRosterWindowRegrouped):
     def test_connect_new_metacontact(self):
         self.test_fill_roster_model()
 
-        jid = u'coolstuff@gajim.org'
+        jid = 'coolstuff@gajim.org'
         contact = gajim.contacts.create_contact(jid, account1)
         gajim.contacts.add_contact(account1, contact)
         self.roster.add_contact(jid, account1)
         self.roster.chg_contact_status(contact, 'offline', '', account1)
 
-        gajim.contacts.add_metacontact(account1, u'samejid@gajim.org',
+        gajim.contacts.add_metacontact(account1, 'samejid@gajim.org',
                 account1, jid)
         self.roster.chg_contact_status(contact, 'online', '', account1)
 
diff --git a/test/lib/data.py b/test/lib/data.py
index af2a870575fea970de1c247b4c225e789f271614..584af050e464531740a5d8ae49b51bcace55fec8 100755
--- a/test/lib/data.py
+++ b/test/lib/data.py
@@ -1,77 +1,77 @@
 # -*- coding: utf-8 -*-
-account1 = u'acc1'
-account2 = u'Cool"chârßéµö'
-account3 = u'dingdong.org'
+account1 = 'acc1'
+account2 = 'Cool"chârßéµö'
+account3 = 'dingdong.org'
 
 contacts = {}
 contacts[account1] = {
-        u'myjid@'+account1: {
+        'myjid@'+account1: {
                           'ask': None, 'groups': [], 'name': None, 'resources': {},
-                          'subscription': u'both'},
-        u'default1@gajim.org': {
+                          'subscription': 'both'},
+        'default1@gajim.org': {
                           'ask': None, 'groups': [], 'name': None, 'resources': {},
-                          'subscription': u'both'},
-        u'default2@gajim.org': {
-                          'ask': None, 'groups': [u'GroupA',], 'name': None, 'resources': {},
-                          'subscription': u'both'},
-        u'Cool"chârßéµö@gajim.org': {
-                          'ask': None, 'groups': [u'<Cool"chârßéµö', u'GroupB'],
-                          'name': None, 'resources': {}, 'subscription': u'both'},
-        u'samejid@gajim.org': {
-                          'ask': None, 'groups': [u'GroupA',], 'name': None, 'resources': {},
-                          'subscription': u'both'}
+                          'subscription': 'both'},
+        'default2@gajim.org': {
+                          'ask': None, 'groups': ['GroupA',], 'name': None, 'resources': {},
+                          'subscription': 'both'},
+        'Cool"chârßéµö@gajim.org': {
+                          'ask': None, 'groups': ['<Cool"chârßéµö', 'GroupB'],
+                          'name': None, 'resources': {}, 'subscription': 'both'},
+        'samejid@gajim.org': {
+                          'ask': None, 'groups': ['GroupA',], 'name': None, 'resources': {},
+                          'subscription': 'both'}
 }
 contacts[account2] = {
-        u'myjid@'+account2: {
+        'myjid@'+account2: {
                           'ask': None, 'groups': [], 'name': None, 'resources': {},
-                          'subscription': u'both'},
-        u'default3@gajim.org': {
-                          'ask': None, 'groups': [u'GroupC',], 'name': None, 'resources': {},
-                          'subscription': u'both'},
-        u'asksubfrom@gajim.org': {
-                          'ask': u'subscribe', 'groups': [u'GroupA',], 'name': None,
-                          'resources': {}, 'subscription': u'from'},
-        u'subto@gajim.org': {
-                          'ask': None, 'groups': [u'GroupB'], 'name': None, 'resources': {},
-                          'subscription': u'to'},
-        u'samejid@gajim.org': {
-                          'ask': None, 'groups': [u'GroupA', u'GroupB'], 'name': None,
-                          'resources': {}, 'subscription': u'both'}
+                          'subscription': 'both'},
+        'default3@gajim.org': {
+                          'ask': None, 'groups': ['GroupC',], 'name': None, 'resources': {},
+                          'subscription': 'both'},
+        'asksubfrom@gajim.org': {
+                          'ask': 'subscribe', 'groups': ['GroupA',], 'name': None,
+                          'resources': {}, 'subscription': 'from'},
+        'subto@gajim.org': {
+                          'ask': None, 'groups': ['GroupB'], 'name': None, 'resources': {},
+                          'subscription': 'to'},
+        'samejid@gajim.org': {
+                          'ask': None, 'groups': ['GroupA', 'GroupB'], 'name': None,
+                          'resources': {}, 'subscription': 'both'}
 }
 contacts[account3] = {
-        #u'guypsych0\\40h.com@msn.dingdong.org': {
+        #'guypsych0\\40h.com@msn.dingdong.org': {
         #                 'ask': None, 'groups': [], 'name': None, 'resources': {},
-        #                 'subscription': u'both'},
-        u'guypsych0%h.com@msn.delx.cjb.net': {
-                          'ask': u'subscribe', 'groups': [], 'name': None,
-                          'resources': {}, 'subscription': u'from'},
-        #u'guypsych0%h.com@msn.jabber.wiretrip.org': {
+        #                 'subscription': 'both'},
+        'guypsych0%h.com@msn.delx.cjb.net': {
+                          'ask': 'subscribe', 'groups': [], 'name': None,
+                          'resources': {}, 'subscription': 'from'},
+        #'guypsych0%h.com@msn.jabber.wiretrip.org': {
         #                 'ask': None, 'groups': [], 'name': None, 'resources': {},
-        #                 'subscription': u'to'},
-        #u'guypsycho\\40g.com@gtalk.dingdong.org': {
+        #                 'subscription': 'to'},
+        #'guypsycho\\40g.com@gtalk.dingdong.org': {
         #                 'ask': None, 'groups': [], 'name': None,
-        #                 'resources': {}, 'subscription': u'both'}
+        #                 'resources': {}, 'subscription': 'both'}
 }
 
 # We have contacts that are not in roster but only specified in the metadata
 metacontact_data = [
         [{'account': account3,
-          'jid': u'guypsych0\\40h.com@msn.dingdong.org',
+          'jid': 'guypsych0\\40h.com@msn.dingdong.org',
           'order': 0},
          {'account': account3,
-          'jid': u'guypsych0%h.com@msn.delx.cjb.net',
+          'jid': 'guypsych0%h.com@msn.delx.cjb.net',
           'order': 0},
          {'account': account3,
-          'jid': u'guypsych0%h.com@msn.jabber.wiretrip.org',
+          'jid': 'guypsych0%h.com@msn.jabber.wiretrip.org',
           'order': 0},
          {'account': account3,
-          'jid': u'guypsycho\\40g.com@gtalk.dingdong.org',
+          'jid': 'guypsycho\\40g.com@gtalk.dingdong.org',
           'order': 0}],
 
         [{'account': account1,
-          'jid': u'samejid@gajim.org',
+          'jid': 'samejid@gajim.org',
           'order': 0},
          {'account': account2,
-          'jid': u'samejid@gajim.org',
+          'jid': 'samejid@gajim.org',
           'order': 0}]
         ]
diff --git a/test/lib/mock.py b/test/lib/mock.py
index fdaf000dbb932a4c6debc347f4f383cdecbba340..e2a2b6c0317b38efa2aa1e380cf7d256a1d01654 100644
--- a/test/lib/mock.py
+++ b/test/lib/mock.py
@@ -212,7 +212,7 @@ class MockCall:
         elif isinstance(n, str):
             return self.kwparams[n]
         else:
-            raise IndexError, 'illegal index type for getParam'
+            raise IndexError('illegal index type for getParam')
 
     def getNumParams(self):
         return len(self.params)
diff --git a/test/runtests.py b/test/runtests.py
index 7dd4ec4c5da6247ac9823b3cb156ca1d2b63ed0c..128814780f1da6a6629282df18b904a3dbb97616 100755
--- a/test/runtests.py
+++ b/test/runtests.py
@@ -17,13 +17,13 @@ try:
     shortargs = 'hnv:'
     longargs = 'help no-x verbose='
     opts, args = getopt.getopt(sys.argv[1:], shortargs, longargs.split())
-except getopt.error, msg:
-    print msg
-    print 'for help use --help'
+except getopt.error as msg:
+    print(msg)
+    print('for help use --help')
     sys.exit(2)
 for o, a in opts:
     if o in ('-h', '--help'):
-        print 'runtests [--help] [--no-x] [--verbose level]'
+        print('runtests [--help] [--no-x] [--verbose level]')
         sys.exit()
     elif o in ('-n', '--no-x'):
         use_x = False
@@ -31,7 +31,7 @@ for o, a in opts:
         try:
             verbose = int(a)
         except Exception:
-            print 'verbose must be a number >= 0'
+            print('verbose must be a number >= 0')
             sys.exit(2)
 
 # new test modules need to be added manually
diff --git a/test/unit/test_jingle.py b/test/unit/test_jingle.py
index 94131ede7ea6aa604b210afd9202834aab41496b..ce9edeb6656a0f092302408c4ad6a4c3aa4820eb 100644
--- a/test/unit/test_jingle.py
+++ b/test/unit/test_jingle.py
@@ -17,7 +17,7 @@ from common.socks5 import SocksQueue
 import common
 
 
-session_init = ''' 
+session_init = '''
 <iq xmlns="jabber:client" to="jingleft@thiessen.im/Gajim" type="set" id="43">
 <jingle xmlns="urn:xmpp:jingle:1" action="session-initiate" initiator="jtest@thiessen.im/Gajim" sid="38">
 <content name="fileWL1Y2JIPTM5RAD68" creator="initiator">
@@ -38,10 +38,10 @@ session_init = '''
 </transport>
 </content>
 </jingle>
-</iq>   
+</iq>
         '''
-        
-        
+
+
 transport_info = '''
 <iq from='jtest@thiessen.im/Gajim'
     id='hjdi8'
@@ -64,19 +64,19 @@ transport_info = '''
 
 class Connection(Mock, ConnectionJingle, ConnectionSocks5Bytestream,
                  ConnectionIBBytestream):
-    
+
     def __init__(self):
         Mock.__init__(self)
         ConnectionJingle.__init__(self)
         ConnectionSocks5Bytestream.__init__(self)
         ConnectionIBBytestream.__init__(self)
         self.connected = 2 # This tells gajim we are connected
-        
+
 
     def send(self, stanza=None, when=None):
         # Called when gajim wants to send something
-        print str(stanza)
-        
+        print(str(stanza))
+
 class TestJingle(unittest.TestCase):
 
     def setUp(self):
@@ -92,33 +92,33 @@ class TestJingle(unittest.TestCase):
         self.con = self.client.Connection
         self.con.server_resource = None
         self.con.connection = Connection()
-        
-        ''' 
+
+        '''
         Fake file_props when we recieve a file. Gajim creates a file_props
         out of a FileRequestRecieve event and from then on it changes in
-        a lot of places. It is easier to just copy it in here. 
-        If the session_initiate stanza changes, this also must change.   
+        a lot of places. It is easier to just copy it in here.
+        If the session_initiate stanza changes, this also must change.
         '''
-        self.recieve_file = {'stream-methods': 
-                             'http://jabber.org/protocol/bytestreams', 
-                             'sender': u'jtest@thiessen.im/Gajim', 
-                             'file-name': u'test_recieved_file', 
-                             'request-id': u'43', 'sid': u'39', 
-                             'session-sid': u'38', 'session-type': 'jingle', 
-                             'transfered_size': [], 'receiver': 
-                             u'jingleft@thiessen.im/Gajim', 'desc': '',
-                              u'size': u'2273', 'type': 'r', 
-                              'streamhosts': [{'initiator': 
-                            u'jtest@thiessen.im/Gajim', 
-                            'target': u'jingleft@thiessen.im/Gajim', 
-                            'cid': u'41', 'state': 0, 'host': u'192.168.2.100',
-                             'type': u'direct', 'port': u'28011'}, 
-                            {'initiator': u'jtest@thiessen.im/Gajim',
-                              'target': u'jingleft@thiessen.im/Gajim', 
-                              'cid': u'42', 'state': 0, 'host': u'192.168.2.100', 
-                              'type': u'proxy', 'port': u'5000'}], 
-                             u'name': u'to'}
-        
+        self.recieve_file = {'stream-methods':
+                             'http://jabber.org/protocol/bytestreams',
+                             'sender': 'jtest@thiessen.im/Gajim',
+                             'file-name': 'test_recieved_file',
+                             'request-id': '43', 'sid': '39',
+                             'session-sid': '38', 'session-type': 'jingle',
+                             'transfered_size': [], 'receiver':
+                             'jingleft@thiessen.im/Gajim', 'desc': '',
+                              'size': '2273', 'type': 'r',
+                              'streamhosts': [{'initiator':
+                            'jtest@thiessen.im/Gajim',
+                            'target': 'jingleft@thiessen.im/Gajim',
+                            'cid': '41', 'state': 0, 'host': '192.168.2.100',
+                             'type': 'direct', 'port': '28011'},
+                            {'initiator': 'jtest@thiessen.im/Gajim',
+                              'target': 'jingleft@thiessen.im/Gajim',
+                              'cid': '42', 'state': 0, 'host': '192.168.2.100',
+                              'type': 'proxy', 'port': '5000'}],
+                             'name': 'to'}
+
     def tearDown(self):
         # Unplug if needed
         if hasattr(self.dispatcher, '_owner'):
@@ -126,31 +126,31 @@ class TestJingle(unittest.TestCase):
 
     def _simulate_connect(self):
         self.dispatcher.PlugIn(self.client) # client is owner
-        # Simulate that we have established a connection    
+        # Simulate that we have established a connection
         self.dispatcher.StreamInit()
         self.dispatcher.ProcessNonBlocking("<stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client'>")
-    
+
     def _simulate_jingle_session(self):
-        
+
         self.dispatcher.RegisterHandler('iq', self.con._JingleCB, 'set'
                                         , common.xmpp.NS_JINGLE)
         self.dispatcher.ProcessNonBlocking(session_init)
-        session = self.con._sessions.values()[0] # The only session we have
-        jft = session.contents.values()[0] # jingleFT object
+        session = list(self.con._sessions.values())[0] # The only session we have
+        jft = list(session.contents.values())[0] # jingleFT object
         jft.file_props = self.recieve_file # We plug file_props manually
         # The user accepts to recieve the file
         # we have to manually simulate this behavior
         session.approve_session()
         self.con.send_file_approval(self.recieve_file)
-        
+
         self.dispatcher.ProcessNonBlocking(transport_info)
-        
+
 
     def test_jingle_session(self):
         self._simulate_connect()
         self._simulate_jingle_session()
-        
-        
+
+
 
 
 if __name__ == '__main__':
diff --git a/test/unit/test_socks5.py b/test/unit/test_socks5.py
index 3d5d929437c37cb8a34c2f2ffaa163577f50bd51..f137d7aedd04d2c8eaab66bd75a2a206c4f8e069 100644
--- a/test/unit/test_socks5.py
+++ b/test/unit/test_socks5.py
@@ -15,50 +15,47 @@ from common import jingle_xtls
 
 class fake_sock(Mock):
     def __init__(self, sockobj):
-         Mock.__init__(self)
-         
-         self.sockobj = sockobj
-         
-    
+        Mock.__init__(self)
+
+        self.sockobj = sockobj
+
+
     def setup_stream(self):
-         sha1 = self.sockobj._get_sha1_auth()
-
-         self.incoming = []
-         self.incoming.append(self.sockobj._get_auth_response())
-         self.incoming.append(
-                self.sockobj._get_request_buff(sha1, 0x00)
-                             )
-         self.outgoing = []
-         self.outgoing.append(self.sockobj._get_auth_buff())
-         self.outgoing.append(self.sockobj._get_request_buff(
-                                                sha1
-                                                       ))
+        sha1 = self.sockobj._get_sha1_auth()
+
+        self.incoming = []
+        self.incoming.append(self.sockobj._get_auth_response())
+        self.incoming.append(self.sockobj._get_request_buff(sha1, 0x00))
+        self.outgoing = []
+        self.outgoing.append(self.sockobj._get_auth_buff())
+        self.outgoing.append(self.sockobj._get_request_buff(sha1))
+
     def switch_stream(self):
         # Roles are reversed, client will be expecting server stream
         # and server will be expecting client stream
-        
+
         temp = self.incoming
         self.incoming = self.outgoing
         self.outgoing = temp
 
     def _recv(self, foo):
         return self.incoming.pop(0)
-        
+
     def _send(self, data):
-        # This method is surrounded by a try block, 
+        # This method is surrounded by a try block,
         # we can't use assert here
-        
+
         if data != self.outgoing[0]:
-            print 'FAILED SENDING TEST'
+            print('FAILED SENDING TEST')
         self.outgoing.pop(0)
 
 class fake_idlequeue(Mock):
 
     def __init__(self):
-          Mock.__init__(self)
-         
+        Mock.__init__(self)
+
     def plug_idle(self, obj, writable=True, readable=True):
-        
+
         if readable:
             obj.pollin()
         if writable:
@@ -77,7 +74,7 @@ class TestSocks5(unittest.TestCase):
         queue.file_props = {}
         #self.sockobj = Socks5Receiver(fake_idlequeue(), streamhost, None)
         self.sockobj = Socks5Sender(fake_idlequeue(), None, 'server', Mock() ,
-                                    None, None, True, file_props={}) 
+                                    None, None, True, file_props={})
         sock = fake_sock(self.sockobj)
         self.sockobj._sock = sock
         self.sockobj._recv = sock._recv
@@ -85,70 +82,70 @@ class TestSocks5(unittest.TestCase):
         self.sockobj.state = 1
         self.sockobj.connected = True
         self.sockobj.pollend = self._pollend
-        
+
         # Something that the receiver needs
         #self.sockobj.file_props['type'] = 'r'
-        
+
         # Something that the sender needs
         self.sockobj.file_props = {}
         self.sockobj.file_props['type'] = 'r'
         self.sockobj.file_props['paused'] = ''
         self.sockobj.queue = Mock()
         self.sockobj.queue.process_result = self._pollend
-        
+
     def _pollend(self, foo = None, duu = None):
         # This is a disconnect function
         sys.exit("end of the road")
 
     def _check_inout(self):
         # Check if there isn't anything else to receive or send
-        sock = self.sockobj._sock 
+        sock = self.sockobj._sock
         assert(sock.incoming == [])
         assert(sock.outgoing == [])
-    
+
     def test_connection_server(self):
         return
         mocksock = self.sockobj._sock
         mocksock.setup_stream()
-        #self.sockobj._sock.switch_stream() 
+        #self.sockobj._sock.switch_stream()
         s = socket.socket(2, 1, 6)
         server = ('127.0.0.1', 28000)
 
         s.connect(server)
-        
+
         s.send(mocksock.outgoing.pop(0))
-        self.assertEquals(s.recv(64), mocksock.incoming.pop(0)) 
-        
+        self.assertEquals(s.recv(64), mocksock.incoming.pop(0))
+
         s.send(mocksock.outgoing.pop(0))
         self.assertEquals(s.recv(64), mocksock.incoming.pop(0))
-        
+
     def test_connection_client(self):
-        
-        
+
+
         mocksock = self.sockobj._sock
         mocksock.setup_stream()
-        mocksock.switch_stream() 
+        mocksock.switch_stream()
         s = socket.socket(10, 1, 6)
-        
-        
+
+
         s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
         s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
         s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
-        
+
         netadd = ('::', 28000, 0, 0)
         s.bind(netadd)
         s.listen(socket.SOMAXCONN)
         (s, address) = s.accept()
-        
-       
-        self.assertEquals(s.recv(64), mocksock.incoming.pop(0)) 
+
+
+        self.assertEquals(s.recv(64), mocksock.incoming.pop(0))
         s.send(mocksock.outgoing.pop(0))
-        
+
         buff = s.recv(64)
         inco = mocksock.incoming.pop(0)
         #self.assertEquals(s.recv(64), mocksock.incoming.pop(0))
         s.send(mocksock.outgoing.pop(0))
-    
+
     def test_client_negoc(self):
         return
         self.sockobj._sock.setup_stream()
@@ -156,22 +153,22 @@ class TestSocks5(unittest.TestCase):
             self.sockobj.pollout()
         except SystemExit:
             pass
-        
-        self._check_inout()    
-        
+
+        self._check_inout()
+
     def test_server_negoc(self):
         return
         self.sockobj._sock.setup_stream()
-        self.sockobj._sock.switch_stream() 
+        self.sockobj._sock.switch_stream()
         try:
             self.sockobj.idlequeue.plug_idle(self.sockobj, False, True)
         except SystemExit:
             pass
         self._check_inout()
-        
 
-    
-        
+
+
+
 if __name__ == '__main__':
-    
+
     unittest.main()