[gnome-subtitles/gtk3: 2/2] Upgrading to gtk3



commit 99aa6918a629bfdb3d768a152aac8b5f0e1918ff
Author: Pedro Castro <pedro gnomesubtitles org>
Date:   Sun Nov 12 11:32:08 2017 +0000

    Upgrading to gtk3

 configure.ac                                       |   33 +-
 data/Makefile.am                                   |   17 +-
 data/gnome-subtitles.schemas                       |  303 ----
 data/org.gnome.GnomeSubtitles.gschema.xml          |  147 ++
 gnome-subtitles.csproj                             |  335 ++++
 gnome-subtitles.mdp                                |  277 ---
 gnome-subtitles.mds                                |   30 -
 gnome-subtitles.sln                                |  206 +++
 src/External/GStreamerPlaybin/Events.cs            |   22 +-
 src/Glade/AboutDialog.ui                           |  104 ++
 src/Glade/{MainWindow.glade => MainWindow.ui}      | 1902 ++++++++++----------
 src/Glade/VideoOpenDialog.ui                       |   72 +
 src/Glade/{ => old.glade}/MainWindow.glade         |    0
 src/GnomeSubtitles/Core/Backup.cs                  |    8 +-
 src/GnomeSubtitles/Core/Base.cs                    |    8 +-
 .../Core/Command/InsertSubtitleCommand.cs          |    6 +-
 .../Core/Command/SplitSubtitlesCommand.cs          |    4 +-
 src/GnomeSubtitles/Core/Config.cs                  |  496 +++---
 src/GnomeSubtitles/Core/Document.cs                |    8 +-
 src/GnomeSubtitles/Core/EventHandlers.cs           |   62 +-
 src/GnomeSubtitles/Core/SpellLanguages.cs          |   14 +-
 src/GnomeSubtitles/Core/Util.cs                    |    6 +-
 src/GnomeSubtitles/Dialog/AboutDialog.cs           |   12 +-
 .../Dialog/{GladeDialog.cs => BuilderDialog.cs}    |   31 +-
 src/GnomeSubtitles/Dialog/EncodingsDialog.cs       |   18 +-
 src/GnomeSubtitles/Dialog/FileOpenDialog.cs        |   24 +-
 src/GnomeSubtitles/Dialog/FilePropertiesDialog.cs  |   16 +-
 src/GnomeSubtitles/Dialog/HeadersDialog.cs         |  100 +-
 src/GnomeSubtitles/Dialog/PreferencesDialog.cs     |  118 +-
 src/GnomeSubtitles/Dialog/SearchDialog.cs          |   28 +-
 src/GnomeSubtitles/Dialog/SetLanguageDialog.cs     |   10 +-
 .../Dialog/SubtitleFileSaveAsDialog.cs             |   36 +-
 src/GnomeSubtitles/Dialog/TimingsAdjustDialog.cs   |   26 +-
 src/GnomeSubtitles/Dialog/TimingsShiftDialog.cs    |   18 +-
 .../Dialog/TimingsSynchronizeDialog.cs             |   24 +-
 src/GnomeSubtitles/Dialog/VideoOpenDialog.cs       |    6 +-
 src/GnomeSubtitles/Dialog/VideoSeekToDialog.cs     |    8 +-
 src/GnomeSubtitles/Execution/BugReporter.cs        |    9 +-
 src/GnomeSubtitles/Execution/ExecutionContext.cs   |   10 +-
 src/GnomeSubtitles/Ui/Component/ComboBoxUtil.cs    |    4 +-
 .../Ui/Component/EncodingComboBox.cs               |   10 +-
 .../Ui/Component/NewlineTypeComboBox.cs            |    6 +-
 .../Ui/Component/SubtitleFormatComboBox.cs         |    6 +-
 src/GnomeSubtitles/Ui/Edit/SubtitleEdit.cs         |    6 +-
 .../Ui/Edit/SubtitleEditSpinButtons.cs             |    6 +-
 src/GnomeSubtitles/Ui/Edit/SubtitleEditTextView.cs |    6 +-
 .../Ui/Edit/SubtitleEditTextViewMargin.cs          |   98 +-
 src/GnomeSubtitles/Ui/MainUi.cs                    |   28 +-
 src/GnomeSubtitles/Ui/Menus.cs                     |   12 +-
 src/GnomeSubtitles/Ui/VideoPreview/Player.cs       |   21 +-
 .../Ui/VideoPreview/PlayerPositionWatcher.cs       |   21 +-
 .../Ui/VideoPreview/SubtitleOverlay.cs             |   75 +-
 .../Ui/VideoPreview/SubtitleTracker.cs             |   56 +-
 src/GnomeSubtitles/Ui/VideoPreview/Video.cs        |   45 +-
 .../Ui/VideoPreview/VideoPosition.cs               |   23 +-
 src/GnomeSubtitles/Ui/View/SubtitleView.cs         |   22 +-
 src/GnomeSubtitles/Ui/View/Subtitles.cs            |    6 +-
 src/GnomeSubtitles/Ui/WidgetNames.cs               |    5 +-
 src/Makefile.am                                    |   30 +-
 src/SubLib/Core/Search/SearchOperator.cs           |   53 +-
 60 files changed, 2746 insertions(+), 2347 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 1c0d049..a6edb77 100644
--- a/configure.ac
+++ b/configure.ac
@@ -59,9 +59,9 @@ then
 fi
 
 dnl pkg-config
-MONO_REQUIRED_VERSION=1.1
-GTKSHARP_REQUIRED_VERSION=2.12
-GTK_REQUIRED_VERSION=2.12
+MONO_REQUIRED_VERSION=3.0
+GTKSHARP_REQUIRED_VERSION=3.0
+GTK_REQUIRED_VERSION=3.12
 
 PKG_CHECK_MODULES(gstreamer, [gstreamer-video-1.0 >= 1.0])
 PKG_CHECK_MODULES(gstreamer_plugins_base, [gstreamer-plugins-base-1.0 >= 1.0])
@@ -69,27 +69,29 @@ AC_SUBST(gstreamer_CFLAGS)
 AC_SUBST(gstreamer_LIBS)
 
 PKG_CHECK_MODULES(MONO, mono >= $MONO_REQUIRED_VERSION)
-PKG_CHECK_MODULES(GTKSHARP, gtk-sharp-2.0 glade-sharp-2.0 gconf-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION)
-PKG_CHECK_MODULES(GTK, gtk+-2.0 >= $GTK_REQUIRED_VERSION,, [
-       PKG_CHECK_MODULES(GTK, gtk+-3.0 >= $GTK_REQUIRED_VERSION)
-])
+PKG_CHECK_MODULES(GTKSHARP, gtk-sharp-3.0 >= $GTKSHARP_REQUIRED_VERSION)
+PKG_CHECK_MODULES(GTK, gtk+-3.0 >= $GTK_REQUIRED_VERSION)
+
 
 dnl Check gtk-sharp version
-PKG_CHECK_MODULES(GTKSHARP_INVALID, gtk-sharp-2.0 >= 2.12.2 gtk-sharp-2.0 <= 2.12.6, gtksharp_invalid=true, 
gtksharp_invalid=false)
+#PKG_CHECK_MODULES(GTKSHARP_INVALID, gtk-sharp-2.0 >= 2.12.2 gtk-sharp-2.0 <= 2.12.6, gtksharp_invalid=true, 
gtksharp_invalid=false)
 
-if test "x$gtksharp_invalid" = "xtrue"; then
-       AC_MSG_ERROR([gtk-sharp versions between 2.12.2 and 2.12.6 (inclusive) are not supported.])
-fi
+#if test "x$gtksharp_invalid" = "xtrue"; then
+#      AC_MSG_ERROR([gtk-sharp versions between 2.12.2 and 2.12.6 (inclusive) are not supported.])
+#fi
 
 PKG_PROG_PKG_CONFIG()
 
 AC_SUBST(MCS)
 
 dnl Handle GConf
-AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
-AM_GCONF_SOURCE_2
+#AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
+#AM_GCONF_SOURCE_2
+
+dnl Handle GSettings
+GLIB_GSETTINGS
 
-AC_OUTPUT([
+AC_CONFIG_FILES([
 Makefile
 data/Makefile
 data/gnome-subtitles.appdata.xml
@@ -99,3 +101,6 @@ src/GnomeSubtitles/Execution/AssemblyInfo.cs
 src/GnomeSubtitles/Execution/gnome-subtitles
 help/Makefile
 po/Makefile.in])
+
+AC_OUTPUT
+
diff --git a/data/Makefile.am b/data/Makefile.am
index c010561..038434b 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -7,8 +7,11 @@ appdata_DATA = gnome-subtitles.appdata.xml
 gnomesubtitlesicondir = $(datadir)/pixmaps
 gnomesubtitlesicon_DATA = gnome-subtitles.svg
 
-schemadir = $(GCONF_SCHEMA_FILE_DIR)
-schema_DATA = gnome-subtitles.schemas
+gsettings_SCHEMAS=org.gnome.GnomeSubtitles.gschema.xml
+@GSETTINGS_RULES@      
+
+#schemadir = $(GCONF_SCHEMA_FILE_DIR)
+#schema_DATA = gnome-subtitles.schemas
 
 man_MANS = gnome-subtitles.1
 
@@ -17,9 +20,9 @@ EXTRA_DIST =                          \
        $(appdata_DATA)                 \
        $(gnomesubtitlesicon_DATA)      \
        $(man_MANS)                     \
-       $(schema_DATA)
+       $(gsettings_SCHEMAS)
 
-if GCONF_SCHEMAS_INSTALL
-install-data-local:
-       GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA)
-endif
+#if GCONF_SCHEMAS_INSTALL
+#install-data-local:
+#      GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA)
+#endif
diff --git a/data/org.gnome.GnomeSubtitles.gschema.xml b/data/org.gnome.GnomeSubtitles.gschema.xml
new file mode 100644
index 0000000..a8db5e8
--- /dev/null
+++ b/data/org.gnome.GnomeSubtitles.gschema.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist>
+  <schema id="org.gnome.GnomeSubtitles" path="/org/gnome/gnome-subtitles/">
+
+    <key name="file-encodings-shown-in-menu" type="as">
+      <default>[ 'ISO-8859-1' ]</default>
+      <summary>Encodings shown in menu</summary>
+      <description>List of encodings shown in the File Open/Save dialogs.</description>
+    </key>
+    <key name="file-open-encoding-option" type="s">
+      <default>'AutoDetect'</default>
+      <summary>File Open encoding option</summary>
+      <description>Encoding option to use by default when opening files. Possible values are: "AutoDetect" 
to use auto detection, "RememberLastUsed" to remember the last used encoding, "CurrentLocale" to use the 
current locale, and "Specific" to use a specific encoding. The encoding for "RememberLastUsed" and "Specific" 
is stored in the file_open_encoding key.</description>
+    </key>
+    <key name="file-open-encoding" type="s">
+      <default>''</default>
+      <summary>File Open encoding</summary>
+      <description>Encoding to use when opening files. Besides the actual encoding, used when 
"RememberLastUsed" or "Specific" are set in the file_open_encoding_option key, other possible values are 
"AutoDetect" and "CurrentLocale".</description>
+    </key>
+    <key name="file-open-fallback" type="s">
+      <default>'ISO-8859-1'</default>
+      <summary>Auto detection fallback encoding</summary>
+      <description>Encoding to use when auto detection fails.</description>
+    </key>
+    <key name="file-save-encoding-option" type="s">
+      <default>'KeepExisting'</default>
+      <summary>File Save encoding option</summary>
+      <description>Encoding option to use by default when saving files. Possible values are: "KeepExisting" 
to use the existing file's encoding, "RememberLastUsed" to remember the last used encoding, "CurrentLocale" 
to use the current locale, and "Specific" to use a specific encoding. The encoding for "RememberLastUsed" and 
"Specific" is stored in the file_save_encoding key.</description>
+    </key>
+    <key name="file-save-encoding" type="s">
+      <default>''</default>
+      <summary>File Save encoding</summary>
+      <description>Encoding to use when saving files. Besides the actual encoding, used when 
"RememberLastUsed" or "Specific" are set in the file_save_encoding_option key, other possible values are 
"KeepExisting" and "CurrentLocale".</description>
+    </key>
+    <key name="file-save-format-option" type="s">
+      <default>'KeepExisting'</default>
+      <summary>File Save format option</summary>
+      <description>Subtitle format option to use by default when saving files. Possible values are: 
"KeepExisting" to use the existing file's format, "RememberLastUsed" to remember the last used format, and 
"Specific" to use a specific format. The subtitle format for "RememberLastUsed" and "Specific" is stored in 
the file_save_format key.</description>
+    </key>
+    <key name="file-save-format" type="s">
+      <default>''</default>
+      <summary>File Save format</summary>
+      <description>Subtitle format to use when saving files. Besides the actual format, used when 
"RememberLastUsed" or "Specific" are set in the file_save_format_option key, other possible values are 
"KeepExisting" and "CurrentLocale".</description>
+    </key>
+    <key name="file-save-newline-option" type="s">
+      <default>'Specific'</default>
+      <summary>File Save newline option</summary>
+      <description>Newline option to use by default when saving files. Possible values are: 
"RememberLastUsed" to remember the last used newline type, and "Specific" to use a specific newline type. The 
newline type for "RememberLastUsed" and "Specific" is stored in the file_save_newline key.</description>
+    </key>
+    <key name="file-save-newline" type="s">
+      <default>'Windows'</default>
+      <summary>File Save newline</summary>
+      <description>Newline type to use when saving files.</description>
+    </key>
+    <key name="file-translation-save-all" type="b">
+      <default>true</default>
+      <summary>Save translation when saving subtitles</summary>
+      <description>Whether to save existing translations when saving subtitles.</description>
+    </key>
+
+    <key name="video-auto-choose-file" type="b">
+      <default>true</default>
+      <summary>Automatically choose the video file</summary>
+      <description>Whether to automatically choose the video file to open, when opening a subtitle file. A 
video file is chosen based on the name of the subtitle file.</description>
+    </key>
+    <key name="video-apply-reaction-delay" type="b">
+      <default>true</default>
+      <summary>Apply reaction delay</summary>
+      <description>Whether to apply a reaction delay when setting the start or end times of a subtitle with 
the video playing.</description>
+    </key>
+    <key name="video-reaction-delay" type="i">
+      <default>200</default>
+      <summary>Reaction delay</summary>
+      <description>Time, in milliseconds, to subtract from the start or end times when setting them with the 
video playing.</description>
+    </key>
+    <key name="video-seek-on-change" type="b">
+      <default>true</default>
+      <summary>Seek the video on subtitles change</summary>
+      <description>Whether to seek the video to the start of the first subtitle when one or more subtitles 
are changed.</description>
+    </key>
+    <key name="video-seek-on-change-rewind" type="i">
+      <default>200</default>
+      <summary>Seek on change rewind</summary>
+      <description>Time, in milliseconds, to rewind the video when seeking on subtitles change.</description>
+    </key>
+
+    <key name="view-line-lengths" type="b">
+      <default>true</default>
+      <summary>View line lengths</summary>
+      <description>Whether to view line lengths as characters counts in the subtitle list.</description>
+    </key>
+    <key name="view-window-width" type="i">
+      <default>690</default>
+      <summary>Window width</summary>
+      <description>The width of the Main Window.</description>
+    </key>
+    <key name="view-window-height" type="i">
+      <default>600</default>
+      <summary>Window height</summary>
+      <description>The height of the Main Window.</description>
+    </key>
+
+    <key name="spellcheck-text-language" type="s">
+      <default>''</default>
+      <summary>Active spellcheck language for text</summary>
+      <description>The language used to check the spelling of subtitle text.</description>
+    </key>
+    <key name="spellcheck-translation-language" type="s">
+      <default>''</default>
+      <summary>Active spellcheck language for translation</summary>
+      <description>The language used to check the spelling of subtitle translation.</description>
+    </key>
+    <key name="spellcheck-auto" type="b">
+      <default>false</default>
+      <summary>Autocheck spelling</summary>
+      <description>Whether to automatically check the spelling of subtitle text.</description>
+    </key>
+
+    <key name="backup-auto" type="b">
+      <default>true</default>
+      <summary>Auto backup</summary>
+      <description>Whether to automatically backup files. A copy of the file will be periodically saved with 
a ~ suffix.</description>
+    </key>
+    <key name="backup-time" type="i">
+      <default>120</default>
+      <summary>Backup time</summary>
+      <description>Time interval, in seconds, to automatically backup files. A minimum of 30 seconds is 
recommended.</description>
+    </key>
+
+    <key name="timings-time-step" type="i">
+      <default>100</default>
+      <summary>Time step increment</summary>
+      <description>Time, in milliseconds, to add or subtract when adjusting times in spinbutton controls 
(e.g., start, end and duration).</description>
+    </key>
+    <key name="timings-frames-step" type="i">
+      <default>2</default>
+      <summary>Frames step increment</summary>
+      <description>Frames to add or subtract when adjusting frames in spinbutton controls (e.g., start, end 
and duration).</description>
+    </key>
+    <key name="timings-time-between-subs" type="i">
+      <default>100</default>
+      <summary>Time between subtitles</summary>
+      <description>Recommended time between subtitles, in milliseconds, used for example when splitting a 
subtitle in two.</description>
+    </key>
+
+  </schema>
+</schemalist>
diff --git a/gnome-subtitles.csproj b/gnome-subtitles.csproj
new file mode 100644
index 0000000..ba6b249
--- /dev/null
+++ b/gnome-subtitles.csproj
@@ -0,0 +1,335 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProjectGuid>{A82B0920-1925-4BFB-AE07-37B732F2729D}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>gnomesubtitles</RootNamespace>
+    <AssemblyName>gnome-subtitles</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <UseMSBuildEngine>False</UseMSBuildEngine>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>build</OutputPath>
+    <DefineConstants>DEBUG;</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+    <PlatformTarget>x86</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <DebugType>full</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>build</OutputPath>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+    <PlatformTarget>x86</PlatformTarget>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="Mono.Posix" />
+    <Reference Include="System.Web" />
+    <Reference Include="gtk-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+      <Package>gtk-sharp-3.0</Package>
+    </Reference>
+    <Reference Include="atk-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+      <Package>gtk-sharp-3.0</Package>
+    </Reference>
+    <Reference Include="pango-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+      <Package>gtk-sharp-3.0</Package>
+    </Reference>
+    <Reference Include="gdk-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+      <Package>gdk-sharp-3.0</Package>
+    </Reference>
+    <Reference Include="cairo-sharp, Version=1.10.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756">
+      <Package>gtk-sharp-3.0</Package>
+    </Reference>
+    <Reference Include="gio-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+      <Package>gio-sharp-3.0</Package>
+    </Reference>
+    <Reference Include="glib-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+      <Package>glib-sharp-3.0</Package>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="src\Glade\AboutDialog.glade">
+      <LogicalName>AboutDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\EncodingsDialog.glade">
+      <LogicalName>EncodingsDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\FileOpenDialog.glade">
+      <LogicalName>FileOpenDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\FilePropertiesDialog.glade">
+      <LogicalName>FilePropertiesDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\FileSaveAsDialog.glade">
+      <LogicalName>FileSaveAsDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\HeadersDialog.glade">
+      <LogicalName>HeadersDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\PreferencesDialog.glade">
+      <LogicalName>PreferencesDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\SearchDialog.glade">
+      <LogicalName>SearchDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\SetLanguageDialog.glade">
+      <LogicalName>SetLanguageDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\TimingsAdjustDialog.glade">
+      <LogicalName>TimingsAdjustDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\TimingsShiftDialog.glade">
+      <LogicalName>TimingsShiftDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\TimingsSynchronizeDialog.glade">
+      <LogicalName>TimingsSynchronizeDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\VideoSeekToDialog.glade">
+      <LogicalName>VideoSeekToDialog.glade</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="data\gnome-subtitles.svg">
+      <DeployService-Deploy>True</DeployService-Deploy>
+      <LogicalName>gnome-subtitles.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="data\video-set-subtitle-end-16x.png">
+      <LogicalName>video-set-subtitle-end-16x.png</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="data\video-set-subtitle-start-16x.png">
+      <LogicalName>video-set-subtitle-start-16x.png</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="data\video-set-subtitle-start-end-30x.png">
+      <LogicalName>video-set-subtitle-start-end-30x.png</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\MainWindow.ui">
+      <LogicalName>MainWindow.ui</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="src\Glade\VideoOpenDialog.ui">
+      <LogicalName>VideoOpenDialog.ui</LogicalName>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="src\External\GStreamerPlaybin\Engine.cs" />
+    <Compile Include="src\External\GStreamerPlaybin\Events.cs" />
+    <Compile Include="src\External\NCharDet\Big5Statistics.cs" />
+    <Compile Include="src\External\NCharDet\EUCJPStatistics.cs" />
+    <Compile Include="src\External\NCharDet\EUCKRStatistics.cs" />
+    <Compile Include="src\External\NCharDet\EUCTWStatistics.cs" />
+    <Compile Include="src\External\NCharDet\GB2312Statistics.cs" />
+    <Compile Include="src\External\NCharDet\nsBIG5Verifier.cs" />
+    <Compile Include="src\External\NCharDet\nsCP1252Verifier.cs" />
+    <Compile Include="src\External\NCharDet\nsDetector.cs" />
+    <Compile Include="src\External\NCharDet\nsEUCJPVerifier.cs" />
+    <Compile Include="src\External\NCharDet\nsEUCKRVerifier.cs" />
+    <Compile Include="src\External\NCharDet\nsEUCSampler.cs" />
+    <Compile Include="src\External\NCharDet\nsEUCStatistics.cs" />
+    <Compile Include="src\External\NCharDet\nsEUCTWVerifier.cs" />
+    <Compile Include="src\External\NCharDet\nsGB18030Verifier.cs" />
+    <Compile Include="src\External\NCharDet\nsGB2312Verifier.cs" />
+    <Compile Include="src\External\NCharDet\nsHZVerifier.cs" />
+    <Compile Include="src\External\NCharDet\nsICharsetDetectionObserver.cs" />
+    <Compile Include="src\External\NCharDet\nsICharsetDetector.cs" />
+    <Compile Include="src\External\NCharDet\nsISO2022CNVerifier.cs" />
+    <Compile Include="src\External\NCharDet\nsISO2022JPVerifier.cs" />
+    <Compile Include="src\External\NCharDet\nsISO2022KRVerifier.cs" />
+    <Compile Include="src\External\NCharDet\nsPSMDetector.cs" />
+    <Compile Include="src\External\NCharDet\nsSJISVerifier.cs" />
+    <Compile Include="src\External\NCharDet\nsUCS2BEVerifier.cs" />
+    <Compile Include="src\External\NCharDet\nsUCS2LEVerifier.cs" />
+    <Compile Include="src\External\NCharDet\nsUTF8Verifier.cs" />
+    <Compile Include="src\External\NCharDet\nsVerifier.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Backup.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Base.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Clipboards.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Config.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Document.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\DragDrop.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\EncodingDescription.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Encodings.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\EventHandlers.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\GlobalAccelerators.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Search.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\SpellLanguage.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\SpellLanguages.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\SyncPoints.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Util.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\AdjustTimingsCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\BaseCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\ChangeFrameRateCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\ChangeStyleCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\ChangeTimingCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\CommandActivatedArgs.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\CommandActivatedHandler.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\CommandManager.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\CommandTarget.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\DeleteSubtitlesCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\DeleteTextCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\DeleteTextContentCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\DeleteTranslationCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\FixedMultipleSelectionCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\FixedSingleSelectionCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\InsertSubtitleCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\InsertTextCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\InsertTextContentCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\InsertTranslationCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\MergeSubtitlesCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\MultipleSelectionCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\ReplaceAllCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\ShiftTimingsCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\SingleSelectionCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\SplitSubtitlesCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\SynchronizeTimingsCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\TranslatorCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Core\Command\VideoSetSubtitleTimingCommand.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\AboutDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\BaseDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\DialogScope.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\Dialogs.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\EncodingsDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\FileOpenDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\FilePropertiesDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\FileSaveAsDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\FileTranslationOpenDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\HeadersDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\MessageDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\PreferencesDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\SearchDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\SetLanguageDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\SetTextLanguageDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\SetTranslationLanguageDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\SubtitleFileSaveAsDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\TimingsAdjustDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\TimingsShiftDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\TimingsSynchronizeDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\TranslationSaveAsDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\Util.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\VideoOpenDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\VideoSeekToDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\Unmanaged\BasicErrorDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\Unmanaged\ErrorDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\Unmanaged\FileOpenErrorDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\Unmanaged\FileSaveErrorDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\Unmanaged\SaveConfirmationDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\Unmanaged\SubtitleFileOpenErrorDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\Unmanaged\VideoErrorDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\Unmanaged\WarningDialog.cs" />
+    <Compile Include="src\GnomeSubtitles\Execution\AssemblyInfo.cs" />
+    <Compile Include="src\GnomeSubtitles\Execution\BugReporter.cs" />
+    <Compile Include="src\GnomeSubtitles\Execution\Executable.cs" />
+    <Compile Include="src\GnomeSubtitles\Execution\ExecutionContext.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\MainUi.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\Menus.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\Status.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\WidgetNames.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\Component\ComboBoxUtil.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\Component\EncodingComboBox.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\Component\NewlineTypeComboBox.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\Component\SubtitleFormatComboBox.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\Edit\SubtitleEdit.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\Edit\SubtitleEditSpinButtons.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\Edit\SubtitleEditText.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\Edit\SubtitleEditTextView.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\Edit\SubtitleEditTextViewMargin.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\Edit\SubtitleEditTranslation.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\VideoPreview\Player.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\VideoPreview\PlayerPositionWatcher.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\VideoPreview\SubtitleOverlay.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\VideoPreview\SubtitleTracker.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\VideoPreview\Video.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\VideoPreview\VideoFiles.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\VideoPreview\VideoPosition.cs" />
+    <Compile 
Include="src\GnomeSubtitles\Ui\VideoPreview\Exceptions\PlayerCouldNotInitiateEngineException.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\VideoPreview\Exceptions\PlayerEngineException.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\View\CellRendererCenteredText.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\View\SelectionIntended.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\View\SelectionType.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\View\SubtitleSelection.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\View\SubtitleView.cs" />
+    <Compile Include="src\GnomeSubtitles\Ui\View\Subtitles.cs" />
+    <Compile Include="src\SubLib\Core\MatchEvaluationCounter.cs" />
+    <Compile Include="src\SubLib\Core\SubtitleFactory.cs" />
+    <Compile Include="src\SubLib\Core\SubtitleSaver.cs" />
+    <Compile Include="src\SubLib\Core\Translations.cs" />
+    <Compile Include="src\SubLib\Core\Translator.cs" />
+    <Compile Include="src\SubLib\Core\Domain\Enumerations.cs" />
+    <Compile Include="src\SubLib\Core\Domain\FileProperties.cs" />
+    <Compile Include="src\SubLib\Core\Domain\Frames.cs" />
+    <Compile Include="src\SubLib\Core\Domain\Headers.cs" />
+    <Compile Include="src\SubLib\Core\Domain\IncompleteSubtitle.cs" />
+    <Compile Include="src\SubLib\Core\Domain\IncompleteSubtitleCollection.cs" />
+    <Compile Include="src\SubLib\Core\Domain\Style.cs" />
+    <Compile Include="src\SubLib\Core\Domain\Subtitle.cs" />
+    <Compile Include="src\SubLib\Core\Domain\SubtitleCollection.cs" />
+    <Compile Include="src\SubLib\Core\Domain\SubtitleConstants.cs" />
+    <Compile Include="src\SubLib\Core\Domain\SubtitleHeaders.cs" />
+    <Compile Include="src\SubLib\Core\Domain\SubtitleProperties.cs" />
+    <Compile Include="src\SubLib\Core\Domain\SubtitleText.cs" />
+    <Compile Include="src\SubLib\Core\Domain\SubtitleTypeInfo.cs" />
+    <Compile Include="src\SubLib\Core\Domain\Subtitles.cs" />
+    <Compile Include="src\SubLib\Core\Domain\SyncPoint.cs" />
+    <Compile Include="src\SubLib\Core\Domain\SyncPoints.cs" />
+    <Compile Include="src\SubLib\Core\Domain\Times.cs" />
+    <Compile Include="src\SubLib\Core\Domain\Timing.cs" />
+    <Compile Include="src\SubLib\Core\Search\SearchOperator.cs" />
+    <Compile Include="src\SubLib\Core\Search\SubtitleReplaceResult.cs" />
+    <Compile Include="src\SubLib\Core\Search\SubtitleSearchOptions.cs" />
+    <Compile Include="src\SubLib\Core\Search\SubtitleSearchResults.cs" />
+    <Compile Include="src\SubLib\Core\Timing\AdjustOperator.cs" />
+    <Compile Include="src\SubLib\Core\Timing\FrameRateOperator.cs" />
+    <Compile Include="src\SubLib\Core\Timing\MergeOperator.cs" />
+    <Compile Include="src\SubLib\Core\Timing\ShiftOperator.cs" />
+    <Compile Include="src\SubLib\Core\Timing\SplitOperator.cs" />
+    <Compile Include="src\SubLib\Core\Timing\SyncUtil.cs" />
+    <Compile Include="src\SubLib\Core\Timing\SynchronizeOperator.cs" />
+    <Compile Include="src\SubLib\Core\Timing\TimingUtil.cs" />
+    <Compile Include="src\SubLib\Exceptions\EncodingNotSupportedException.cs" />
+    <Compile Include="src\SubLib\Exceptions\FileTooLargeException.cs" />
+    <Compile Include="src\SubLib\Exceptions\TranslatorException.cs" />
+    <Compile Include="src\SubLib\Exceptions\UnknownEncodingException.cs" />
+    <Compile Include="src\SubLib\Exceptions\UnknownSubtitleFormatException.cs" />
+    <Compile Include="src\SubLib\IO\FileInputOutput.cs" />
+    <Compile Include="src\SubLib\IO\Input\ParsingProperties.cs" />
+    <Compile Include="src\SubLib\IO\Input\PlainTextParser.cs" />
+    <Compile Include="src\SubLib\IO\Input\SubtitleInput.cs" />
+    <Compile Include="src\SubLib\IO\Input\SubtitleParser.cs" />
+    <Compile Include="src\SubLib\IO\Output\SubtitleOutput.cs" />
+    <Compile Include="src\SubLib\IO\Output\VerboseConsole.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\BuiltInSubtitleFormats.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormat.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatAQTitle.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatAdobeEncoreDVD.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatAdvancedSubStationAlpha.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatDKSSubtitleFormat.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatFABSubtitler.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatKaraokeLyricsLRC.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatKaraokeLyricsVKT.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatMPSub.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatMPlayer.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatMPlayer2.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatMacSUB.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatMicroDVD.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatPanimator.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatPhoenixJapanimationSociety.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatPowerDivX.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatSofni.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatSubCreator1x.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatSubRip.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatSubStationAlpha.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatSubViewer1.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatSubViewer2.cs" />
+    <Compile Include="src\SubLib\IO\SubtitleFormats\SubtitleFormatViPlaySubtitleFile.cs" />
+    <Compile Include="src\GnomeSubtitles\Dialog\BuilderDialog.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <ItemGroup>
+    <Folder Include="Properties\" />
+  </ItemGroup>
+</Project>
diff --git a/gnome-subtitles.sln b/gnome-subtitles.sln
new file mode 100644
index 0000000..5994e50
--- /dev/null
+++ b/gnome-subtitles.sln
@@ -0,0 +1,206 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gnome-subtitles", "gnome-subtitles.csproj", 
"{A82B0920-1925-4BFB-AE07-37B732F2729D}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|x86 = Debug|x86
+               Release|x86 = Release|x86
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {A82B0920-1925-4BFB-AE07-37B732F2729D}.Debug|x86.ActiveCfg = Debug|x86
+               {A82B0920-1925-4BFB-AE07-37B732F2729D}.Debug|x86.Build.0 = Debug|x86
+               {A82B0920-1925-4BFB-AE07-37B732F2729D}.Release|x86.ActiveCfg = Release|x86
+               {A82B0920-1925-4BFB-AE07-37B732F2729D}.Release|x86.Build.0 = Release|x86
+       EndGlobalSection
+       GlobalSection(MonoDevelopProperties) = preSolution
+               Policies = $0
+               $0.TextStylePolicy = $1
+               $1.FileWidth = 120
+               $1.TabsToSpaces = False
+               $1.EolMarker = Unix
+               $1.inheritsSet = VisualStudio
+               $1.inheritsScope = text/plain
+               $1.scope = text/x-csharp
+               $0.CSharpFormattingPolicy = $2
+               $2.IndentNamespaceBody = False
+               $2.IndentSwitchBody = True
+               $2.NamespaceBraceStyle = EndOfLine
+               $2.ClassBraceStyle = EndOfLine
+               $2.InterfaceBraceStyle = EndOfLine
+               $2.StructBraceStyle = EndOfLine
+               $2.EnumBraceStyle = EndOfLine
+               $2.MethodBraceStyle = EndOfLine
+               $2.ConstructorBraceStyle = EndOfLine
+               $2.DestructorBraceStyle = EndOfLine
+               $2.ArrayInitializerWrapping = DoNotChange
+               $2.BeforeMethodDeclarationParentheses = False
+               $2.BeforeMethodCallParentheses = False
+               $2.BeforeConstructorDeclarationParentheses = False
+               $2.NewLineBeforeConstructorInitializerColon = SameLine
+               $2.NewLineAfterConstructorInitializerColon = SameLine
+               $2.BeforeIndexerDeclarationBracket = False
+               $2.BeforeDelegateDeclarationParentheses = False
+               $2.NewParentheses = False
+               $2.SpacesBeforeBrackets = False
+               $2.inheritsSet = Mono
+               $2.inheritsScope = text/x-csharp
+               $2.scope = text/x-csharp
+               $0.NameConventionPolicy = $3
+               $3.Rules = $4
+               $4.NamingRule = $5
+               $5.Name = Namespaces
+               $5.AffectedEntity = Namespace
+               $5.VisibilityMask = VisibilityMask
+               $5.NamingStyle = PascalCase
+               $5.IncludeInstanceMembers = True
+               $5.IncludeStaticEntities = True
+               $4.NamingRule = $6
+               $6.Name = Types
+               $6.AffectedEntity = Class, Struct, Enum, Delegate
+               $6.VisibilityMask = Public
+               $6.NamingStyle = PascalCase
+               $6.IncludeInstanceMembers = True
+               $6.IncludeStaticEntities = True
+               $4.NamingRule = $7
+               $7.Name = Interfaces
+               $7.RequiredPrefixes = $8
+               $8.String = I
+               $7.AffectedEntity = Interface
+               $7.VisibilityMask = Public
+               $7.NamingStyle = PascalCase
+               $7.IncludeInstanceMembers = True
+               $7.IncludeStaticEntities = True
+               $4.NamingRule = $9
+               $9.Name = Attributes
+               $9.RequiredSuffixes = $10
+               $10.String = Attribute
+               $9.AffectedEntity = CustomAttributes
+               $9.VisibilityMask = Public
+               $9.NamingStyle = PascalCase
+               $9.IncludeInstanceMembers = True
+               $9.IncludeStaticEntities = True
+               $4.NamingRule = $11
+               $11.Name = Event Arguments
+               $11.RequiredSuffixes = $12
+               $12.String = EventArgs
+               $11.AffectedEntity = CustomEventArgs
+               $11.VisibilityMask = Public
+               $11.NamingStyle = PascalCase
+               $11.IncludeInstanceMembers = True
+               $11.IncludeStaticEntities = True
+               $4.NamingRule = $13
+               $13.Name = Exceptions
+               $13.RequiredSuffixes = $14
+               $14.String = Exception
+               $13.AffectedEntity = CustomExceptions
+               $13.VisibilityMask = VisibilityMask
+               $13.NamingStyle = PascalCase
+               $13.IncludeInstanceMembers = True
+               $13.IncludeStaticEntities = True
+               $4.NamingRule = $15
+               $15.Name = Methods
+               $15.AffectedEntity = Methods
+               $15.VisibilityMask = Protected, Public
+               $15.NamingStyle = PascalCase
+               $15.IncludeInstanceMembers = True
+               $15.IncludeStaticEntities = True
+               $4.NamingRule = $16
+               $16.Name = Static Readonly Fields
+               $16.AffectedEntity = ReadonlyField
+               $16.VisibilityMask = Protected, Public
+               $16.NamingStyle = PascalCase
+               $16.IncludeInstanceMembers = False
+               $16.IncludeStaticEntities = True
+               $4.NamingRule = $17
+               $17.Name = Fields
+               $17.AffectedEntity = Field
+               $17.VisibilityMask = Protected, Public
+               $17.NamingStyle = PascalCase
+               $17.IncludeInstanceMembers = True
+               $17.IncludeStaticEntities = True
+               $4.NamingRule = $18
+               $18.Name = ReadOnly Fields
+               $18.AffectedEntity = ReadonlyField
+               $18.VisibilityMask = Protected, Public
+               $18.NamingStyle = PascalCase
+               $18.IncludeInstanceMembers = True
+               $18.IncludeStaticEntities = False
+               $4.NamingRule = $19
+               $19.Name = Constant Fields
+               $19.AffectedEntity = ConstantField
+               $19.VisibilityMask = Protected, Public
+               $19.NamingStyle = PascalCase
+               $19.IncludeInstanceMembers = True
+               $19.IncludeStaticEntities = True
+               $4.NamingRule = $20
+               $20.Name = Properties
+               $20.AffectedEntity = Property
+               $20.VisibilityMask = Protected, Public
+               $20.NamingStyle = PascalCase
+               $20.IncludeInstanceMembers = True
+               $20.IncludeStaticEntities = True
+               $4.NamingRule = $21
+               $21.Name = Events
+               $21.AffectedEntity = Event
+               $21.VisibilityMask = Protected, Public
+               $21.NamingStyle = PascalCase
+               $21.IncludeInstanceMembers = True
+               $21.IncludeStaticEntities = True
+               $4.NamingRule = $22
+               $22.Name = Enum Members
+               $22.AffectedEntity = EnumMember
+               $22.VisibilityMask = VisibilityMask
+               $22.NamingStyle = PascalCase
+               $22.IncludeInstanceMembers = True
+               $22.IncludeStaticEntities = True
+               $4.NamingRule = $23
+               $23.Name = Parameters
+               $23.AffectedEntity = Parameter
+               $23.VisibilityMask = VisibilityMask
+               $23.NamingStyle = CamelCase
+               $23.IncludeInstanceMembers = True
+               $23.IncludeStaticEntities = True
+               $4.NamingRule = $24
+               $24.Name = Type Parameters
+               $24.RequiredPrefixes = $25
+               $25.String = T
+               $24.AffectedEntity = TypeParameter
+               $24.VisibilityMask = VisibilityMask
+               $24.NamingStyle = PascalCase
+               $24.IncludeInstanceMembers = True
+               $24.IncludeStaticEntities = True
+               $0.DotNetNamingPolicy = $26
+               $26.DirectoryNamespaceAssociation = None
+               $26.ResourceNamePolicy = FileFormatDefault
+               $0.TextStylePolicy = $27
+               $27.inheritsSet = null
+               $27.scope = application/glade+xml
+               $0.XmlFormattingPolicy = $28
+               $28.inheritsSet = null
+               $28.scope = application/glade+xml
+               $0.TextStylePolicy = $29
+               $29.inheritsSet = null
+               $29.scope = application/xml
+               $0.XmlFormattingPolicy = $30
+               $30.inheritsSet = Mono
+               $30.inheritsScope = application/xml
+               $30.scope = application/xml
+               $0.TextStylePolicy = $31
+               $31.FileWidth = 120
+               $31.TabsToSpaces = False
+               $31.inheritsSet = VisualStudio
+               $31.inheritsScope = text/plain
+               $31.scope = text/plain
+               $0.TextStylePolicy = $32
+               $32.inheritsSet = null
+               $32.scope = image/svg+xml
+               $0.XmlFormattingPolicy = $33
+               $33.inheritsSet = null
+               $33.scope = image/svg+xml
+               $0.StandardHeader = $34
+               $34.Text = 
+               $34.IncludeInNewFiles = True
+       EndGlobalSection
+EndGlobal
diff --git a/src/External/GStreamerPlaybin/Events.cs b/src/External/GStreamerPlaybin/Events.cs
index 2e44425..116dd30 100644
--- a/src/External/GStreamerPlaybin/Events.cs
+++ b/src/External/GStreamerPlaybin/Events.cs
@@ -31,7 +31,7 @@ namespace GStreamer
        /// Arguments for a raised error.
        /// </summary>
        public sealed class ErrorEventArgs
-       {
+       {
                string error, debug;
 
                internal ErrorEventArgs (string error, string debug)
@@ -41,7 +41,7 @@ namespace GStreamer
                }
 
         public string Error { get{ return error; } }
-               public string Debug { get{ return debug; } }
+               public string Debug { get{ return debug; } }
     }
 
 
@@ -50,13 +50,13 @@ namespace GStreamer
        /// Arguments for a raised buffer event.
        /// </summary>
        public sealed class BufferEventArgs
-       {
+       {
                int progress;
 
                internal BufferEventArgs (int progress)
                { this.progress = progress; }
 
-        public int Progress { get{ return progress; } }
+        public int Progress { get{ return progress; } }
     }
 
 
@@ -65,13 +65,13 @@ namespace GStreamer
        /// Arguments for a raised video info event.
        /// </summary>
        public sealed class VideoInfoEventArgs
-       {
+       {
                VideoInfo video_info;
 
                internal VideoInfoEventArgs (VideoInfo video_info)
                { this.video_info = video_info; }
 
-        public VideoInfo VideoInfo { get{ return video_info; } }
+        public VideoInfo VideoInfo { get{ return video_info; } }
     }
 
 
@@ -80,28 +80,28 @@ namespace GStreamer
        /// Arguments for a raised video info event.
        /// </summary>
        public sealed class TagEventArgs
-       {
+       {
                Tag tag;
 
                internal TagEventArgs (Tag tag)
                { this.tag = tag; }
 
-        public Tag Tag { get{ return tag; } }
+        public Tag Tag { get{ return tag; } }
     }
 
 
 
        /// <summary>
        /// Arguments for a raised state.
-       /// </summary>
+       /// </summary>
     public sealed class StateEventArgs
-    {
+    {
        MediaStatus state;
 
        internal StateEventArgs (MediaStatus state)
        { this.state = state; }
 
-       public MediaStatus State { get{ return state; } }
+       public MediaStatus State { get{ return state; } }
     }
 
 }
\ No newline at end of file
diff --git a/src/Glade/AboutDialog.ui b/src/Glade/AboutDialog.ui
new file mode 100644
index 0000000..7a67bc1
--- /dev/null
+++ b/src/Glade/AboutDialog.ui
@@ -0,0 +1,104 @@
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 2.16 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkAboutDialog" id="dialog">
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">About Gnome Subtitles</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="destroy_with_parent">True</property>
+    <property name="type_hint">dialog</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="skip_pager_hint">True</property>
+    <property name="program_name">Gnome Subtitles</property>
+    <property name="copyright">Copyright &#xA9; 2006-2013 Pedro Castro</property>
+    <property name="comments" translatable="yes">Video subtitling for the GNOME desktop</property>
+    <property name="website">http://gnomesubtitles.org</property>
+    <property name="license" translatable="yes">Gnome Subtitles is free software; you can redistribute it 
and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+Gnome Subtitles is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA</property>
+    <property name="authors">Primary Development:
+    Pedro Castro (Author and Maintainer)
+
+Contributors:
+    Arx Cruz
+    Cristina Yenyxe (Past Maintainer)
+    David Krkoska
+    Dominique Leuenberger
+    Fernando Zorrilla
+    Gy&#xF6;rgy Ball&#xF3;
+    Keith Madill
+    Micha&#x142; Sawicz
+    Miguel Filho
+    Nazar Kulyk
+    Pawe&#x142; Brzeski
+    Valmir Sena
+</property>
+    <property name="documenters">Erin Bloom</property>
+    <property name="translator_credits">Djihed Afifi (ar)
+Alexander Shopov, Svetoslav Stefanov (bg)
+Joan Duran (ca)
+Carles Ferrando, Joan Duran (ca@valencia)
+Kamil Paral, Lucas Lommer, Marek &#x10C;ernock&#xFD;, Petr Kovar, Rinu (cs)
+Joe Hansen, Kenneth Nielsen, Kristian Kj&#xE6;rgaard (da)
+Felix Braun, Mario Bl&#xE4;ttermann (de)
+Yumkee Lhamo (dz)
+Efstathios Iosifidis, Mel Argyropoulou, Nick Agianniotis, Simos Xenitellis (el)
+Philip Withnall (en_GB)
+Daniel Mustieles, Francisco Serrador, Gabriel Ruiz, Jorge Gonz&#xE1;lez, Paulino Padial (es)
+Ilkka Tuohela (fi)
+Alain Lojewski, Alexandre Imache, Bruno Brouard, Claude Paroz, Frederic Peters, St&#xE9;phane Raimbault (fr)
+Ant&#xF3;n M&#xE9;ixome, Fran Di&#xE9;guez, Leandro Regueiro, Lois, Marcos Lans (gl)
+Mark Krapivner, Yair Hershkovitz, Yaron Shahrabani (he)
+Gabor Kelemen, Laszlo Csordas (hu)
+Claudio Arseni, Luca Ferretti, Simone Oberti (it)
+Kjartan Maraas (nb)
+Yannig Marchegay (oc)
+A S Alam (pa)
+Piotr Dr&#x105;g, Tomasz Sa&#x142;aci&#x144;ski (pl)
+Ant&#xF3;nio Lima (pt)
+C&#xE9;sar Veiga, Djavan Fagundes, F&#xE1;bio Nogueira, Henrique Machado, Krix Apolin&#xE1;rio, Leonardo 
Fontenelle, Marco de Freitas, Rafael Ferreira, Raphael Higino (pt_BR)
+Daniel &#x218;erb&#x103;nescu, Lucian Grijincu (ro)
+Nickolay V. Shmyrev, Yuri Myasoedov (ru)
+Andrej &#x17D;nidar&#x161;i&#x10D;, Matej Urban&#x10D;i&#x10D; (sl)
+&#x110;or&#x111;e Vasiljevi&#x107;, Miroslav Nikoli&#x107; (sr)
+Daniel Nylander (sv)
+Baris Cicek, Serkan Y&#x131;lmaz (tr)
+Aron Xu, Yinghua Wang (zh_CN)
+Chao-Hsiung Liao (zh_HK)
+Chao-Hsiung Liao (zh_TW)</property>
+    <property name="artists">Stefan A. Keel (Sak)</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialogVBox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialogActionArea">
+            <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="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/Glade/MainWindow.glade b/src/Glade/MainWindow.ui
similarity index 58%
copy from src/Glade/MainWindow.glade
copy to src/Glade/MainWindow.ui
index 2019e31..7ea7415 100644
--- a/src/Glade/MainWindow.glade
+++ b/src/Glade/MainWindow.ui
@@ -1,1529 +1,1519 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<glade-interface>
-  <!-- interface-requires gtk+ 2.16 -->
-  <!-- interface-naming-policy toplevel-contextual -->
-  <widget class="GtkWindow" id="window">
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.12"/>
+  <object class="GtkAdjustment" id="durationSpinButtonAdjustment">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="endSpinButtonAdjustment">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="startSpinButtonAdjustment">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="videoSliderAdjustment">
+    <property name="upper">100</property>
+    <property name="step_increment">0.5</property>
+    <property name="page_increment">10</property>
+    <property name="page_size">10</property>
+  </object>
+  <object class="GtkApplicationWindow" id="window">
+    <property name="can_focus">False</property>
     <property name="title">Gnome Subtitles</property>
-    <signal name="size_allocate" handler="OnSizeAllocated"/>
-    <signal name="delete_event" handler="OnWindowDelete"/>
+    <signal name="delete-event" handler="OnWindowDelete" swapped="no"/>
+    <signal name="size-allocate" handler="OnSizeAllocated" swapped="no"/>
     <child>
-      <widget class="GtkVBox" id="mainWindowVBox">
+      <object class="GtkBox" id="box1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
         <child>
-          <widget class="GtkMenuBar" id="menubar">
+          <object class="GtkMenuBar" id="menubar">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
-              <widget class="GtkMenuItem" id="file">
+              <object class="GtkMenuItem" id="file">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_File</property>
                 <property name="use_underline">True</property>
-                <child>
-                  <widget class="GtkMenu" id="fileMenu">
+                <child type="submenu">
+                  <object class="GtkMenu" id="fileMenu">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
-                      <widget class="GtkImageMenuItem" id="fileNew">
-                        <property name="label">gtk-new</property>
+                      <object class="GtkMenuItem" id="fileNew">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_New</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnFileNew"/>
-                      </widget>
+                        <signal name="activate" handler="OnFileNew" swapped="no"/>
+                        <accelerator key="n" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="fileOpen">
-                        <property name="label">gtk-open</property>
+                      <object class="GtkMenuItem" id="fileOpen">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Open</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnFileOpen"/>
-                      </widget>
+                        <signal name="activate" handler="OnFileOpen" swapped="no"/>
+                        <accelerator key="o" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="fileSave">
-                        <property name="label">gtk-save</property>
+                      <object class="GtkMenuItem" id="fileSave">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Save</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnFileSave"/>
-                      </widget>
+                        <signal name="activate" handler="OnFileSave" swapped="no"/>
+                        <accelerator key="s" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="fileSaveAs">
-                        <property name="label">gtk-save-as</property>
+                      <object class="GtkMenuItem" id="fileSaveAs">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Save _As</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnFileSaveAs"/>
-                        <accelerator key="S" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
-                      </widget>
+                        <signal name="activate" handler="OnFileSaveAs" swapped="no"/>
+                        <accelerator key="s" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="fileSeparator1">
+                      <object class="GtkSeparatorMenuItem" id="fileSeparator1">
                         <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>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="fileTranslation">
+                      <object class="GtkMenuItem" id="fileTranslation">
                         <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="can_focus">False</property>
                         <property name="label" translatable="yes">_Translation</property>
                         <property name="use_underline">True</property>
-                        <child>
-                          <widget class="GtkMenu" id="fileTranslationMenu">
+                        <child type="submenu">
+                          <object class="GtkMenu" id="fileTranslationMenu">
                             <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="can_focus">False</property>
                             <child>
-                              <widget class="GtkImageMenuItem" id="fileTranslationNew">
-                                <property name="label" translatable="yes">_New</property>
+                              <object class="GtkMenuItem" id="fileTranslationNew">
                                 <property name="visible">True</property>
-                                <property name="sensitive">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="can_focus">False</property>
+                                <property name="label" translatable="yes">_New</property>
                                 <property name="use_underline">True</property>
-                                <property name="use_stock">False</property>
-                                <signal name="activate" handler="OnFileTranslationNew"/>
-                                <child internal-child="image">
-                                  <widget class="GtkImage" id="fileTranslationNewImage">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-new</property>
-                                    <property name="icon-size">1</property>
-                                  </widget>
-                                </child>
-                              </widget>
+                                <signal name="activate" handler="OnFileTranslationNew" swapped="no"/>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkImageMenuItem" id="fileTranslationOpen">
-                                <property name="label" translatable="yes">_Open</property>
+                              <object class="GtkMenuItem" id="fileTranslationOpen">
                                 <property name="visible">True</property>
-                                <property name="sensitive">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="can_focus">False</property>
+                                <property name="label" translatable="yes">_Open</property>
                                 <property name="use_underline">True</property>
-                                <property name="use_stock">False</property>
-                                <signal name="activate" handler="OnFileTranslationOpen"/>
+                                <signal name="activate" handler="OnFileTranslationOpen" swapped="no"/>
                                 <accelerator key="o" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
-                                <child internal-child="image">
-                                  <widget class="GtkImage" id="fileTranslationOpenImage">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-open</property>
-                                    <property name="icon-size">1</property>
-                                  </widget>
-                                </child>
-                              </widget>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkImageMenuItem" id="fileTranslationReload">
-                                <property name="label" translatable="yes">_Reload</property>
+                              <object class="GtkMenuItem" id="fileTranslationReload">
                                 <property name="visible">True</property>
-                                <property name="sensitive">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="can_focus">False</property>
+                                <property name="label" translatable="yes">_Reload</property>
                                 <property name="use_underline">True</property>
-                                <property name="use_stock">False</property>
-                                <signal name="activate" handler="OnFileTranslationReload"/>
-                                <accelerator key="r" modifiers="GDK_SHIFT_MASK | GDK_MOD1_MASK" 
signal="activate" />
-                                <child internal-child="image">
-                                  <widget class="GtkImage" id="fileTranslationReloadImage">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-refresh</property>
-                                    <property name="icon-size">1</property>
-                                  </widget>
-                                </child>
-                              </widget>
+                                <signal name="activate" handler="OnFileTranslationReload" swapped="no"/>
+                                <accelerator key="r" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_MOD1_MASK"/>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkImageMenuItem" id="fileTranslationSave">
-                                <property name="label" translatable="yes">_Save</property>
+                              <object class="GtkMenuItem" id="fileTranslationSave">
                                 <property name="visible">True</property>
-                                <property name="sensitive">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="can_focus">False</property>
+                                <property name="label" translatable="yes">_Save</property>
                                 <property name="use_underline">True</property>
-                                <property name="use_stock">False</property>
-                                <signal name="activate" handler="OnFileTranslationSave"/>
-                                <child internal-child="image">
-                                  <widget class="GtkImage" id="fileTranslationSaveImage">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-save</property>
-                                    <property name="icon-size">1</property>
-                                  </widget>
-                                </child>
-                              </widget>
+                                <signal name="activate" handler="OnFileTranslationSave" swapped="no"/>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkImageMenuItem" id="fileTranslationSaveAs">
-                                <property name="label" translatable="yes">Save _As</property>
+                              <object class="GtkMenuItem" id="fileTranslationSaveAs">
                                 <property name="visible">True</property>
-                                <property name="sensitive">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="can_focus">False</property>
+                                <property name="label" translatable="yes">Save _As</property>
                                 <property name="use_underline">True</property>
-                                <property name="use_stock">False</property>
-                                <signal name="activate" handler="OnFileTranslationSaveAs"/>
-                                <child internal-child="image">
-                                  <widget class="GtkImage" id="fileTranslationSaveAsImage">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-save-as</property>
-                                    <property name="icon-size">1</property>
-                                  </widget>
-                                </child>
-                              </widget>
+                                <signal name="activate" handler="OnFileTranslationSaveAs" swapped="no"/>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkImageMenuItem" id="fileTranslationClose">
-                                <property name="label" translatable="yes">_Close</property>
+                              <object class="GtkMenuItem" id="fileTranslationClose">
                                 <property name="visible">True</property>
-                                <property name="sensitive">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="can_focus">False</property>
+                                <property name="label" translatable="yes">_Close</property>
                                 <property name="use_underline">True</property>
-                                <property name="use_stock">False</property>
-                                <signal name="activate" handler="OnFileTranslationClose"/>
-                                <child internal-child="image">
-                                  <widget class="GtkImage" id="fileTranslationCloseImage">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-close</property>
-                                    <property name="icon-size">1</property>
-                                  </widget>
-                                </child>
-                              </widget>
+                                <signal name="activate" handler="OnFileTranslationClose" swapped="no"/>
+                              </object>
                             </child>
-                          </widget>
+                          </object>
                         </child>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="fileSeparator2">
+                      <object class="GtkSeparatorMenuItem" id="fileSeparator2">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="fileHeaders">
+                      <object class="GtkMenuItem" id="fileHeaders">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Headers</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnFileHeaders"/>
-                      </widget>
+                        <signal name="activate" handler="OnFileHeaders" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="fileProperties">
-                        <property name="label">gtk-properties</property>
+                      <object class="GtkMenuItem" id="fileProperties">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Properties</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnFileProperties"/>
-                      </widget>
+                        <signal name="activate" handler="OnFileProperties" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="fileSeparator3">
+                      <object class="GtkSeparatorMenuItem" id="fileSeparator3">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="fileClose">
-                        <property name="label">gtk-close</property>
+                      <object class="GtkMenuItem" id="fileClose">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Close</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnFileClose"/>
-                      </widget>
+                        <signal name="activate" handler="OnFileClose" swapped="no"/>
+                        <accelerator key="w" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="fileQuit">
-                        <property name="label">gtk-quit</property>
+                      <object class="GtkMenuItem" id="fileQuit">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Quit</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnFileQuit"/>
-                      </widget>
+                        <signal name="activate" handler="OnFileQuit" swapped="no"/>
+                        <accelerator key="q" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
-                  </widget>
+                  </object>
                 </child>
-              </widget>
+              </object>
             </child>
             <child>
-              <widget class="GtkMenuItem" id="edit">
+              <object class="GtkMenuItem" id="edit">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_Edit</property>
                 <property name="use_underline">True</property>
-                <child>
-                  <widget class="GtkMenu" id="editMenu">
+                <child type="submenu">
+                  <object class="GtkMenu" id="editMenu">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
-                      <widget class="GtkImageMenuItem" id="editUndo">
-                        <property name="label">gtk-undo</property>
+                      <object class="GtkMenuItem" id="editUndo">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Undo</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnEditUndo"/>
-                        <accelerator key="Z" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                      </widget>
+                        <signal name="activate" handler="OnEditUndo" swapped="no"/>
+                        <accelerator key="z" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="editRedo">
-                        <property name="label">gtk-redo</property>
+                      <object class="GtkMenuItem" id="editRedo">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Redo</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnEditRedo"/>
-                        <accelerator key="Y" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <accelerator key="Z" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
-                      </widget>
+                        <signal name="activate" handler="OnEditRedo" swapped="no"/>
+                        <accelerator key="y" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <accelerator key="z" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="editSeparator1">
+                      <object class="GtkSeparatorMenuItem" id="editSeparator1">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="editCut">
-                        <property name="label">gtk-cut</property>
+                      <object class="GtkMenuItem" id="editCut">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Cu_t</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnEditCut"/>
-                      </widget>
+                        <signal name="activate" handler="OnEditCut" swapped="no"/>
+                        <accelerator key="x" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="editCopy">
-                        <property name="label">gtk-copy</property>
+                      <object class="GtkMenuItem" id="editCopy">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Copy</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnEditCopy"/>
-                      </widget>
+                        <signal name="activate" handler="OnEditCopy" swapped="no"/>
+                        <accelerator key="c" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="editPaste">
-                        <property name="label">gtk-paste</property>
+                      <object class="GtkMenuItem" id="editPaste">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Paste</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnEditPaste"/>
-                      </widget>
+                        <signal name="activate" handler="OnEditPaste" swapped="no"/>
+                        <accelerator key="v" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="editSeparator2">
+                      <object class="GtkSeparatorMenuItem" id="editSeparator2">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="editFormat">
+                      <object class="GtkMenuItem" id="editFormat">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Format</property>
                         <property name="use_underline">True</property>
-                        <child>
-                          <widget class="GtkMenu" id="editFormatMenu">
+                        <child type="submenu">
+                          <object class="GtkMenu" id="editFormatMenu">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <child>
-                              <widget class="GtkCheckMenuItem" id="editFormatBold">
+                              <object class="GtkCheckMenuItem" id="editFormatBold">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
                                 <property name="label" translatable="yes">_Bold</property>
                                 <property name="use_underline">True</property>
-                                <signal name="toggled" handler="OnEditFormatBold"/>
-                                <accelerator key="B" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                              </widget>
+                                <signal name="toggled" handler="OnEditFormatBold" swapped="no"/>
+                                <accelerator key="b" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkCheckMenuItem" id="editFormatItalic">
+                              <object class="GtkCheckMenuItem" id="editFormatItalic">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
                                 <property name="label" translatable="yes">_Italic</property>
                                 <property name="use_underline">True</property>
-                                <signal name="toggled" handler="OnEditFormatItalic"/>
-                                <accelerator key="I" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                              </widget>
+                                <signal name="toggled" handler="OnEditFormatItalic" swapped="no"/>
+                                <accelerator key="i" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkCheckMenuItem" id="editFormatUnderline">
+                              <object class="GtkCheckMenuItem" id="editFormatUnderline">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
                                 <property name="label" translatable="yes">_Underline</property>
                                 <property name="use_underline">True</property>
-                                <signal name="toggled" handler="OnEditFormatUnderline"/>
-                                <accelerator key="U" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                              </widget>
+                                <signal name="toggled" handler="OnEditFormatUnderline" swapped="no"/>
+                                <accelerator key="u" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                              </object>
                             </child>
-                          </widget>
+                          </object>
                         </child>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="editSeparator3">
+                      <object class="GtkSeparatorMenuItem" id="editSeparator3">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="editSplit">
+                      <object class="GtkMenuItem" id="editSplit">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Split</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnEditSplit"/>
+                        <signal name="activate" handler="OnEditSplit" swapped="no"/>
                         <accelerator key="m" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="editMerge">
+                      <object class="GtkMenuItem" id="editMerge">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Merge</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnEditMerge"/>
+                        <signal name="activate" handler="OnEditMerge" swapped="no"/>
                         <accelerator key="m" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="editSeparator4">
+                      <object class="GtkSeparatorMenuItem" id="editSeparator4">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="editInsertSubtitle">
+                      <object class="GtkMenuItem" id="editInsertSubtitle">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Insert Subtitle</property>
                         <property name="use_underline">True</property>
-                        <child>
-                          <widget class="GtkMenu" id="editInsertSubtitleMenu">
+                        <child type="submenu">
+                          <object class="GtkMenu" id="editInsertSubtitleMenu">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <child>
-                              <widget class="GtkImageMenuItem" id="editInsertSubtitleBefore">
-                                <property name="label" translatable="yes">_Before</property>
+                              <object class="GtkMenuItem" id="editInsertSubtitleBefore">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">_Before</property>
                                 <property name="use_underline">True</property>
-                                <property name="use_stock">False</property>
-                                <signal name="activate" handler="OnEditInsertSubtitleBefore"/>
+                                <signal name="activate" handler="OnEditInsertSubtitleBefore" swapped="no"/>
                                 <accelerator key="Return" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
-                                <child internal-child="image">
-                                  <widget class="GtkImage" id="editInsertSubtitleBeforeImage">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-go-up</property>
-                                    <property name="icon-size">1</property>
-                                  </widget>
-                                </child>
-                              </widget>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkImageMenuItem" id="editInsertSubtitleAfter">
-                                <property name="label" translatable="yes">_After</property>
+                              <object class="GtkMenuItem" id="editInsertSubtitleAfter">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">_After</property>
                                 <property name="use_underline">True</property>
-                                <property name="use_stock">False</property>
-                                <signal name="activate" handler="OnEditInsertSubtitleAfter"/>
+                                <signal name="activate" handler="OnEditInsertSubtitleAfter" swapped="no"/>
                                 <accelerator key="Return" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                                <child internal-child="image">
-                                  <widget class="GtkImage" id="editInsertSubtitleAfterImage">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-go-down</property>
-                                    <property name="icon-size">1</property>
-                                  </widget>
-                                </child>
-                              </widget>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkImageMenuItem" id="editInsertSubtitleAVideoPosition">
-                                <property name="label" translatable="yes">At _Video Position</property>
+                              <object class="GtkMenuItem" id="editInsertSubtitleAtVideoPosition">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">At _Video Position</property>
                                 <property name="use_underline">True</property>
-                                <property name="use_stock">False</property>
-                                <signal name="activate" handler="OnEditInsertSubtitleAtVideoPosition"/>
-                                <accelerator key="D" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
-                                <child internal-child="image">
-                                  <widget class="GtkImage" id="editInsertSubtitleAtVideoPosition">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-go-forward</property>
-                                    <property name="icon-size">1</property>
-                                  </widget>
-                                </child>
-                              </widget>
+                                <signal name="activate" handler="OnEditInsertSubtitleAtVideoPosition" 
swapped="no"/>
+                                <accelerator key="d" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
+                              </object>
                             </child>
-                          </widget>
+                          </object>
                         </child>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="editDeleteSubtitles">
-                        <property name="label" translatable="yes">_Delete Subtitles</property>
+                      <object class="GtkMenuItem" id="editDeleteSubtitles">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Delete Subtitles</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="OnEditDeleteSubtitles"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="editDeleteSubtitlesImage">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-delete</property>
-                            <property name="icon-size">1</property>
-                          </widget>
-                        </child>
-                      </widget>
+                        <signal name="activate" handler="OnEditDeleteSubtitles" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="editSeparator5">
+                      <object class="GtkSeparatorMenuItem" id="editSeparator5">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="editPreferences">
-                        <property name="label" translatable="yes">Pr_eferences</property>
+                      <object class="GtkMenuItem" id="editPreferences">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Pr_eferences</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="OnEditPreferences"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="image1">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-preferences</property>
-                            <property name="icon-size">1</property>
-                          </widget>
-                        </child>
-                      </widget>
+                        <signal name="activate" handler="OnEditPreferences" swapped="no"/>
+                      </object>
                     </child>
-                  </widget>
+                  </object>
                 </child>
-              </widget>
+              </object>
             </child>
             <child>
-              <widget class="GtkMenuItem" id="view">
+              <object class="GtkMenuItem" id="view">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_View</property>
                 <property name="use_underline">True</property>
-                <child>
-                  <widget class="GtkMenu" id="viewMenu">
+                <child type="submenu">
+                  <object class="GtkMenu" id="viewMenu">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
-                      <widget class="GtkRadioMenuItem" id="viewFrames">
+                      <object class="GtkRadioMenuItem" id="viewFrames">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Frames</property>
                         <property name="use_underline">True</property>
-                        <signal name="toggled" handler="OnViewFrames"/>
-                      </widget>
+                        <property name="draw_as_radio">True</property>
+                        <property name="group">viewTimes</property>
+                        <signal name="toggled" handler="OnViewFrames" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkRadioMenuItem" id="viewTimes">
+                      <object class="GtkRadioMenuItem" id="viewTimes">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Times</property>
                         <property name="use_underline">True</property>
                         <property name="active">True</property>
-                        <property name="group">viewFrames</property>
-                        <signal name="toggled" handler="OnViewTimes"/>
-                      </widget>
+                        <property name="draw_as_radio">True</property>
+                        <signal name="toggled" handler="OnViewTimes" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="viewSeparator1">
+                      <object class="GtkSeparatorMenuItem" id="viewSeparator1">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkCheckMenuItem" id="viewLineLengths">
+                      <object class="GtkCheckMenuItem" id="viewLineLengths">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Line Lengths</property>
                         <property name="use_underline">True</property>
-                        <signal name="toggled" handler="OnViewLineLengthsToggled"/>
-                      </widget>
+                        <signal name="toggled" handler="OnViewLineLengthsToggled" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="viewSeparator2">
+                      <object class="GtkSeparatorMenuItem" id="viewSeparator2">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkCheckMenuItem" id="viewVideo">
+                      <object class="GtkCheckMenuItem" id="viewVideo">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Video</property>
                         <property name="use_underline">True</property>
-                        <signal name="toggled" handler="OnViewVideo"/>
-                      </widget>
+                        <signal name="toggled" handler="OnViewVideo" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="viewVideoSubtitles">
+                      <object class="GtkMenuItem" id="viewVideoSubtitles">
                         <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="can_focus">False</property>
                         <property name="label" translatable="yes">Video _Subtitles</property>
                         <property name="use_underline">True</property>
-                        <child>
-                          <widget class="GtkMenu" id="viewVideoSubtitlesMenu">
+                        <child type="submenu">
+                          <object class="GtkMenu" id="viewVideoSubtitlesMenu">
                             <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="can_focus">False</property>
                             <child>
-                              <widget class="GtkRadioMenuItem" id="viewVideoSubtitlesText">
+                              <object class="GtkRadioMenuItem" id="viewVideoSubtitlesText">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
                                 <property name="label" translatable="yes">_Text</property>
                                 <property name="use_underline">True</property>
                                 <property name="active">True</property>
                                 <property name="draw_as_radio">True</property>
-                                <signal name="toggled" handler="OnViewVideoSubtitlesText"/>
-                              </widget>
+                                <signal name="toggled" handler="OnViewVideoSubtitlesText" swapped="no"/>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkRadioMenuItem" id="viewVideoSubtitlesTranslation">
+                              <object class="GtkRadioMenuItem" id="viewVideoSubtitlesTranslation">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
                                 <property name="label" translatable="yes">Translatio_n</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
                                 <property name="group">viewVideoSubtitlesText</property>
-                                <signal name="toggled" handler="OnViewVideoSubtitlesTranslation"/>
-                              </widget>
+                                <signal name="toggled" handler="OnViewVideoSubtitlesTranslation" 
swapped="no"/>
+                              </object>
                             </child>
-                          </widget>
+                          </object>
                         </child>
-                      </widget>
+                      </object>
                     </child>
-                  </widget>
+                  </object>
                 </child>
-              </widget>
+              </object>
             </child>
             <child>
-              <widget class="GtkMenuItem" id="search">
+              <object class="GtkMenuItem" id="search">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">_Search</property>
                 <property name="use_underline">True</property>
-                <child>
-                  <widget class="GtkMenu" id="searchMenu">
+                <child type="submenu">
+                  <object class="GtkMenu" id="searchMenu">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
-                      <widget class="GtkImageMenuItem" id="searchFind">
-                        <property name="label">gtk-find</property>
+                      <object class="GtkMenuItem" id="searchFind">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Find</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnSearchFind"/>
-                      </widget>
+                        <signal name="activate" handler="OnSearchFind" swapped="no"/>
+                        <accelerator key="f" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="searchFindNext">
+                      <object class="GtkMenuItem" id="searchFindNext">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">Find Ne_xt</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnSearchFindNext"/>
+                        <signal name="activate" handler="OnSearchFindNext" swapped="no"/>
                         <accelerator key="F3" signal="activate"/>
                         <accelerator key="g" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="searchFindPrevious">
+                      <object class="GtkMenuItem" id="searchFindPrevious">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">Find Pre_vious</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnSearchFindPrevious"/>
+                        <signal name="activate" handler="OnSearchFindPrevious" swapped="no"/>
                         <accelerator key="F3" signal="activate" modifiers="GDK_SHIFT_MASK"/>
                         <accelerator key="g" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="searchSeparator1">
+                      <object class="GtkSeparatorMenuItem" id="searchSeparator1">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="searchReplace">
-                        <property name="label" translatable="yes">_Replace</property>
+                      <object class="GtkMenuItem" id="searchReplace">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Replace</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="OnSearchReplace"/>
-                        <accelerator key="H" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="searchReplaceImage">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-find-and-replace</property>
-                            <property name="icon-size">1</property>
-                          </widget>
-                        </child>
-                      </widget>
+                        <signal name="activate" handler="OnSearchReplace" swapped="no"/>
+                        <accelerator key="h" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
-                  </widget>
+                  </object>
                 </child>
-              </widget>
+              </object>
             </child>
             <child>
-              <widget class="GtkMenuItem" id="timings">
+              <object class="GtkMenuItem" id="timings">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">T_imings</property>
                 <property name="use_underline">True</property>
-                <child>
-                  <widget class="GtkMenu" id="timingsMenu">
+                <child type="submenu">
+                  <object class="GtkMenu" id="timingsMenu">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
-                      <widget class="GtkMenuItem" id="timingsInputFrameRate">
+                      <object class="GtkMenuItem" id="timingsInputFrameRate">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Input Frame Rate</property>
                         <property name="use_underline">True</property>
-                        <child>
-                          <widget class="GtkMenu" id="timingsInputFrameRateMenu">
+                        <child type="submenu">
+                          <object class="GtkMenu" id="timingsInputFrameRateMenu">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <child>
-                              <widget class="GtkRadioMenuItem" id="timingsInputFrameRate23">
+                              <object class="GtkRadioMenuItem" id="timingsInputFrameRate23">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="label">23.976</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
-                              </widget>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkRadioMenuItem" id="timingsInputFrameRate24">
+                              <object class="GtkRadioMenuItem" id="timingsInputFrameRate24">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="label">24</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
                                 <property name="group">timingsInputFrameRate23</property>
-                              </widget>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkRadioMenuItem" id="timingsInputFrameRate25">
+                              <object class="GtkRadioMenuItem" id="timingsInputFrameRate25">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="label">25 (PAL)</property>
                                 <property name="use_underline">True</property>
-                                <property name="active">True</property>
                                 <property name="draw_as_radio">True</property>
                                 <property name="group">timingsInputFrameRate23</property>
-                              </widget>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkRadioMenuItem" id="timingsInputFrameRate29">
+                              <object class="GtkRadioMenuItem" id="timingsInputFrameRate29">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="label">29.97 (NTSC)</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
                                 <property name="group">timingsInputFrameRate23</property>
-                              </widget>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkRadioMenuItem" id="timingsInputFrameRate30">
+                              <object class="GtkRadioMenuItem" id="timingsInputFrameRate30">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="label">30</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
                                 <property name="group">timingsInputFrameRate23</property>
-                              </widget>
+                              </object>
                             </child>
-                          </widget>
+                          </object>
                         </child>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="timingsVideoFrameRate">
+                      <object class="GtkMenuItem" id="timingsVideoFrameRate">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Video Frame Rate</property>
                         <property name="use_underline">True</property>
-                        <child>
-                          <widget class="GtkMenu" id="timingsVideoFrameRateMenu">
+                        <child type="submenu">
+                          <object class="GtkMenu" id="timingsVideoFrameRateMenu">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <child>
-                              <widget class="GtkRadioMenuItem" id="timingsVideoFrameRate23">
+                              <object class="GtkRadioMenuItem" id="timingsVideoFrameRate23">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
                                 <property name="label">23.976</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
-                              </widget>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkRadioMenuItem" id="timingsVideoFrameRate24">
+                              <object class="GtkRadioMenuItem" id="timingsVideoFrameRate24">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
                                 <property name="label">24</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
                                 <property name="group">timingsVideoFrameRate23</property>
-                              </widget>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkRadioMenuItem" id="timingsVideoFrameRate25">
+                              <object class="GtkRadioMenuItem" id="timingsVideoFrameRate25">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
                                 <property name="label">25 (PAL)</property>
                                 <property name="use_underline">True</property>
-                                <property name="active">True</property>
                                 <property name="draw_as_radio">True</property>
                                 <property name="group">timingsVideoFrameRate23</property>
-                              </widget>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkRadioMenuItem" id="timingsVideoFrameRate29">
+                              <object class="GtkRadioMenuItem" id="timingsVideoFrameRate29">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
                                 <property name="label">29.97 (NTSC)</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
                                 <property name="group">timingsVideoFrameRate23</property>
-                              </widget>
+                              </object>
                             </child>
                             <child>
-                              <widget class="GtkRadioMenuItem" id="timingsVideoFrameRate30">
+                              <object class="GtkRadioMenuItem" id="timingsVideoFrameRate30">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
-                                <property name="label">30 </property>
+                                <property name="can_focus">False</property>
+                                <property name="label">30</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
                                 <property name="group">timingsVideoFrameRate23</property>
-                              </widget>
+                              </object>
                             </child>
-                          </widget>
+                          </object>
                         </child>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="timingsSeparator1">
+                      <object class="GtkSeparatorMenuItem" id="timingsSeparator1">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="timingsSynchronize">
+                      <object class="GtkMenuItem" id="timingsSynchronize">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Synchronize</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnTimingsSynchronize"/>
-                      </widget>
+                        <signal name="activate" handler="OnTimingsSynchronize" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="timingsAdjust">
+                      <object class="GtkMenuItem" id="timingsAdjust">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Adjust</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnTimingsAdjust"/>
-                      </widget>
+                        <signal name="activate" handler="OnTimingsAdjust" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="timingsShift">
+                      <object class="GtkMenuItem" id="timingsShift">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">Sh_ift</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnTimingsShift"/>
-                      </widget>
+                        <signal name="activate" handler="OnTimingsShift" swapped="no"/>
+                      </object>
                     </child>
-                  </widget>
+                  </object>
                 </child>
-              </widget>
+              </object>
             </child>
             <child>
-              <widget class="GtkMenuItem" id="video">
+              <object class="GtkMenuItem" id="video">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">Vide_o</property>
                 <property name="use_underline">True</property>
-                <child>
-                  <widget class="GtkMenu" id="videoMenu">
+                <child type="submenu">
+                  <object class="GtkMenu" id="videoMenu">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
-                      <widget class="GtkImageMenuItem" id="videoOpen">
-                        <property name="label" translatable="yes">_Open</property>
+                      <object class="GtkMenuItem" id="videoOpen">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Open</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="OnVideoOpen"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="videoOpenImage">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-open</property>
-                            <property name="icon-size">1</property>
-                          </widget>
-                        </child>
-                      </widget>
+                        <signal name="activate" handler="OnVideoOpen" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="videoClose">
-                        <property name="label" translatable="yes">_Close</property>
+                      <object class="GtkMenuItem" id="videoClose">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Close</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="OnVideoClose"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="videoCloseImage">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-close</property>
-                            <property name="icon-size">1</property>
-                          </widget>
-                        </child>
-                      </widget>
+                        <signal name="activate" handler="OnVideoClose" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="videoSeparator1">
+                      <object class="GtkSeparatorMenuItem" id="videoSeparator1">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="videoPlayPause">
-                        <property name="label" translatable="yes">_Play / Pause</property>
+                      <object class="GtkMenuItem" id="videoPlayPause">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Play / Pause</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="OnVideoPlayPause"/>
+                        <signal name="activate" handler="OnVideoPlayPause" swapped="no"/>
                         <accelerator key="F5" signal="activate"/>
                         <accelerator key="p" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="videoPlayPauseImage">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-media-play</property>
-                            <property name="icon-size">1</property>
-                          </widget>
-                        </child>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkCheckMenuItem" id="videoLoopSelectionPlayback">
+                      <object class="GtkMenuItem" id="videoLoopSelectionPlayback">
                         <property name="visible">True</property>
+                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Loop Selection</property>
                         <property name="use_underline">True</property>
-                        <signal name="toggled" handler="OnVideoLoopSelectionPlayback"/>
+                        <signal name="activate" handler="OnVideoLoopSelectionPlayback" swapped="no"/>
                         <accelerator key="F11" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="videoRewind">
-                        <property name="label" translatable="yes">R_ewind</property>
+                      <object class="GtkMenuItem" id="videoRewind">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">R_ewind</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="OnVideoRewind"/>
+                        <signal name="activate" handler="OnVideoRewind" swapped="no"/>
                         <accelerator key="F6" signal="activate"/>
                         <accelerator key="k" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="videoRewindImage">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-media-rewind</property>
-                            <property name="icon-size">1</property>
-                          </widget>
-                        </child>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="videoForward">
-                        <property name="label" translatable="yes">_Forward</property>
+                      <object class="GtkMenuItem" id="videoForward">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Forward</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="OnVideoForward"/>
+                        <signal name="activate" handler="OnVideoForward" swapped="no"/>
                         <accelerator key="F7" signal="activate"/>
                         <accelerator key="l" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="videoForwardImage">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-media-forward</property>
-                            <property name="icon-size">1</property>
-                          </widget>
-                        </child>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="videoSeparator2">
+                      <object class="GtkSeparatorMenuItem" id="videoSeparator2">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="videoSeekTo">
-                        <property name="label" translatable="yes">_Seek to…</property>
+                      <object class="GtkMenuItem" id="videoSeekTo">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Seek to…</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="OnVideoSeekTo"/>
+                        <signal name="activate" handler="OnVideoSeekTo" swapped="no"/>
                         <accelerator key="t" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="videoSeekToImage">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-jump-to</property>
-                            <property name="icon-size">1</property>
-                          </widget>
-                        </child>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="videoSeekToSelection">
+                      <object class="GtkMenuItem" id="videoSeekToSelection">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">Seek _to Selection</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnVideoSeekToSelection"/>
+                        <signal name="activate" handler="OnVideoSeekToSelection" swapped="no"/>
                         <accelerator key="F4" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
                         <accelerator key="r" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="videoSelectNearestSubtitle">
+                      <object class="GtkMenuItem" id="videoSelectNearestSubtitle">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
-                        <property name="label" translatable="yes">Select Nearest Subtitle</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Select _Nearest Subtitle</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnVideoSelectNearestSubtitle"/>
-                        <accelerator key="r" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <signal name="activate" handler="OnVideoSelectNearestSubtitle" swapped="no"/>
                         <accelerator key="F4" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                      </widget>
+                        <accelerator key="r" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkCheckMenuItem" id="videoAutoSelectSubtitles">
+                      <object class="GtkCheckMenuItem" id="videoAutoSelectSubtitles">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">Auto Select Subtitle</property>
+                        <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">A_uto Select Subtitle</property>
                         <property name="use_underline">True</property>
-                        <signal name="toggled" handler="OnVideoAutoSelectSubtitles"/>
+                        <signal name="toggled" handler="OnVideoAutoSelectSubtitles" swapped="no"/>
                         <accelerator key="F3" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="videoSeparator3">
+                      <object class="GtkSeparatorMenuItem" id="videoSeparator3">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="videoSetSubtitleStart">
+                      <object class="GtkMenuItem" id="videoSetSubtitleStart">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">Set Subtitle St_art</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnVideoSetSubtitleStart"/>
+                        <signal name="activate" handler="OnVideoSetSubtitleStart" swapped="no"/>
                         <accelerator key="d" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="videoSetSubtitleEnd">
+                      <object class="GtkMenuItem" id="videoSetSubtitleEnd">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">Set Subtitle En_d</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnVideoSetSubtitleEnd"/>
+                        <signal name="activate" handler="OnVideoSetSubtitleEnd" swapped="no"/>
                         <accelerator key="e" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                      </widget>
+                      </object>
                     </child>
-                  </widget>
+                  </object>
                 </child>
-              </widget>
+              </object>
             </child>
             <child>
-              <widget class="GtkMenuItem" id="tools">
+              <object class="GtkMenuItem" id="tools">
                 <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="can_focus">False</property>
                 <property name="label" translatable="yes">_Tools</property>
                 <property name="use_underline">True</property>
-                <child>
-                  <widget class="GtkMenu" id="toolsMenu">
+                <child type="submenu">
+                  <object class="GtkMenu" id="toolsMenu">
                     <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="can_focus">False</property>
                     <child>
-                      <widget class="GtkCheckMenuItem" id="toolsAutocheckSpelling">
+                      <object class="GtkCheckMenuItem" id="toolsAutocheckSpelling">
                         <property name="visible">True</property>
                         <property name="sensitive">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="can_focus">False</property>
                         <property name="label" translatable="yes">_Autocheck Spelling</property>
                         <property name="use_underline">True</property>
-                        <signal name="toggled" handler="OnToolsAutocheckSpelling"/>
-                      </widget>
+                        <signal name="toggled" handler="OnToolsAutocheckSpelling" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="toolsSetTextLanguage">
+                      <object class="GtkMenuItem" id="toolsSetTextLanguage">
                         <property name="visible">True</property>
                         <property name="sensitive">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="can_focus">False</property>
                         <property name="label" translatable="yes">Set T_ext Language</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnToolsSetTextLanguage"/>
-                      </widget>
+                        <signal name="activate" handler="OnToolsSetTextLanguage" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="toolsSetTranslationLanguage">
+                      <object class="GtkMenuItem" id="toolsSetTranslationLanguage">
                         <property name="visible">True</property>
                         <property name="sensitive">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="can_focus">False</property>
                         <property name="label" translatable="yes">Set Translati_on Language</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnToolsSetTranslationLanguage"/>
-                      </widget>
+                        <signal name="activate" handler="OnToolsSetTranslationLanguage" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="toolsSeparator1"/>
+                      <object class="GtkSeparatorMenuItem" id="toolsSeparator1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="toolsTranslateText">
+                      <object class="GtkMenuItem" id="toolsTranslateText">
+                        <property name="visible">True</property>
                         <property name="sensitive">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="can_focus">False</property>
                         <property name="label" translatable="yes">Translate _Text → Translation</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnToolsTranslateText"/>
-                      </widget>
+                        <signal name="activate" handler="OnToolsTranslateText" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="toolsTranslateTranslation">
+                      <object class="GtkMenuItem" id="toolsTranslateTranslation">
+                        <property name="visible">True</property>
                         <property name="sensitive">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="can_focus">False</property>
                         <property name="label" translatable="yes">Translate Translatio_n → Text</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnToolsTranslateTranslation"/>
-                      </widget>
+                        <signal name="activate" handler="OnToolsTranslateTranslation" swapped="no"/>
+                      </object>
                     </child>
-                  </widget>
+                  </object>
                 </child>
-              </widget>
+              </object>
             </child>
             <child>
-              <widget class="GtkMenuItem" id="help">
+              <object class="GtkMenuItem" id="help">
                 <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>
-                  <widget class="GtkMenu" id="helpMenu">
+                <child type="submenu">
+                  <object class="GtkMenu" id="helpMenu">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <child>
-                      <widget class="GtkImageMenuItem" id="helpContents">
-                        <property name="label" translatable="yes">_Contents</property>
+                      <object class="GtkMenuItem" id="helpContents">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Contents</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="OnHelpContents"/>
+                        <signal name="activate" handler="OnHelpContents" swapped="no"/>
                         <accelerator key="F1" signal="activate"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="helpContentsImage">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-help</property>
-                            <property name="icon-size">1</property>
-                          </widget>
-                        </child>
-                      </widget>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkMenuItem" id="helpKeyboardShortcuts">
+                      <object class="GtkMenuItem" id="helpKeyboardShortcuts">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Keyboard Shortcuts</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="OnHelpKeyboardShortcuts"/>
-                      </widget>
+                        <signal name="activate" handler="OnHelpKeyboardShortcuts" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="helpSeparator1">
+                      <object class="GtkSeparatorMenuItem" id="helpSeparator1">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="helpRequestFeature">
-                        <property name="label" translatable="yes">Request a _Feature</property>
+                      <object class="GtkMenuItem" id="helpRequestFeature">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Request a _Feature</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="OnHelpRequestFeature"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="helpRequestFeatureImage">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-dialog-info</property>
-                            <property name="icon-size">1</property>
-                          </widget>
-                        </child>
-                      </widget>
+                        <signal name="activate" handler="OnHelpRequestFeature" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="helpReportBug">
-                        <property name="label" translatable="yes">Report a _Bug</property>
+                      <object class="GtkMenuItem" id="helpReportBug">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Report a _Bug</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="OnHelpReportBug"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="helpReportBugImage">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-dialog-warning</property>
-                            <property name="icon-size">1</property>
-                          </widget>
-                        </child>
-                      </widget>
+                        <signal name="activate" handler="OnHelpReportBug" swapped="no"/>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkSeparatorMenuItem" id="helpSeparator2">
+                      <object class="GtkSeparatorMenuItem" id="helpSeparator2">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </object>
                     </child>
                     <child>
-                      <widget class="GtkImageMenuItem" id="helpAbout">
-                        <property name="label">gtk-about</property>
+                      <object class="GtkMenuItem" id="helpAbout">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_About</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="OnHelpAbout"/>
-                      </widget>
+                        <signal name="activate" handler="OnHelpAbout" swapped="no"/>
+                      </object>
                     </child>
-                  </widget>
+                  </object>
                 </child>
-              </widget>
+              </object>
             </child>
-          </widget>
+          </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">0</property>
           </packing>
         </child>
         <child>
-          <widget class="GtkToolbar" id="toolbar">
+          <object class="GtkToolbar" id="toolbar">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
-              <widget class="GtkToolButton" id="newToolButton">
+              <object class="GtkToolButton" id="newToolButton">
                 <property name="visible">True</property>
-                <property name="tooltip" translatable="yes">New File</property>
+                <property name="can_focus">False</property>
+                <property name="tooltip_text" translatable="yes">New File</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-new</property>
-                <signal name="clicked" handler="OnFileNew"/>
-              </widget>
+                <signal name="clicked" handler="OnFileNew" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="openToolButton">
+              <object class="GtkToolButton" id="openToolButton">
                 <property name="visible">True</property>
-                <property name="tooltip" translatable="yes">Open File</property>
+                <property name="can_focus">False</property>
+                <property name="tooltip_text" translatable="yes">Open File</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-open</property>
-                <signal name="clicked" handler="OnFileOpen"/>
-              </widget>
+                <signal name="clicked" handler="OnFileOpen" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="saveToolButton">
+              <object class="GtkToolButton" id="saveToolButton">
                 <property name="visible">True</property>
-                <property name="sensitive">False</property>
-                <property name="tooltip" translatable="yes">Save File</property>
+                <property name="can_focus">False</property>
+                <property name="tooltip_text" translatable="yes">Save File</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-save</property>
-                <signal name="clicked" handler="OnFileSave"/>
-              </widget>
+                <signal name="clicked" handler="OnFileSave" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkSeparatorToolItem" id="toolbarSeparator1">
+              <object class="GtkSeparatorToolItem" id="toolbarSeparator1">
                 <property name="visible">True</property>
-              </widget>
+                <property name="can_focus">False</property>
+              </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="undoToolButton">
+              <object class="GtkToolButton" id="undoToolButton">
                 <property name="visible">True</property>
-                <property name="sensitive">False</property>
+                <property name="can_focus">False</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-undo</property>
-                <signal name="clicked" handler="OnEditUndo"/>
-              </widget>
+                <signal name="clicked" handler="OnEditUndo" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="redoToolButton">
+              <object class="GtkToolButton" id="redoToolButton">
                 <property name="visible">True</property>
-                <property name="sensitive">False</property>
+                <property name="can_focus">False</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-redo</property>
-                <signal name="clicked" handler="OnEditRedo"/>
-              </widget>
+                <signal name="clicked" handler="OnEditRedo" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkSeparatorToolItem" id="toolbarSeparator2">
+              <object class="GtkSeparatorToolItem" id="toolbarSeparator2">
                 <property name="visible">True</property>
-              </widget>
+                <property name="can_focus">False</property>
+              </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="cutToolButton">
+              <object class="GtkToolButton" id="cutToolButton">
                 <property name="visible">True</property>
-                <property name="sensitive">False</property>
+                <property name="can_focus">False</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-cut</property>
-                <signal name="clicked" handler="OnEditCut"/>
-              </widget>
+                <signal name="clicked" handler="OnEditCut" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="copyToolButton">
+              <object class="GtkToolButton" id="copyToolButton">
                 <property name="visible">True</property>
-                <property name="sensitive">False</property>
+                <property name="can_focus">False</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-copy</property>
-                <signal name="clicked" handler="OnEditCopy"/>
-              </widget>
+                <signal name="clicked" handler="OnEditCopy" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="pasteToolButton">
+              <object class="GtkToolButton" id="pasteToolButton">
                 <property name="visible">True</property>
-                <property name="sensitive">False</property>
+                <property name="can_focus">False</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-paste</property>
-                <signal name="clicked" handler="OnEditPaste"/>
-              </widget>
+                <signal name="clicked" handler="OnEditPaste" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkSeparatorToolItem" id="toolbarSeparator3">
+              <object class="GtkSeparatorToolItem" id="toolbarSeparator3">
                 <property name="visible">True</property>
-              </widget>
+                <property name="can_focus">False</property>
+              </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="insertSubtitleToolButton">
+              <object class="GtkToolButton" id="insertSubtitleToolButton">
                 <property name="visible">True</property>
-                <property name="sensitive">False</property>
-                <property name="label" translatable="yes">Insert</property>
+                <property name="can_focus">False</property>
+                <property name="tooltip_text" translatable="yes">Insert</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-add</property>
-                <signal name="clicked" handler="OnEditInsertSubtitleAfter"/>
-              </widget>
+                <signal name="clicked" handler="OnEditInsertSubtitleAfter" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="deleteSubtitlesToolButton">
+              <object class="GtkToolButton" id="deleteSubtitlesToolButton">
                 <property name="visible">True</property>
-                <property name="sensitive">False</property>
-                <property name="label" translatable="yes">Delete</property>
+                <property name="can_focus">False</property>
+                <property name="tooltip_text" translatable="yes">Delete</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-remove</property>
-                <signal name="clicked" handler="OnEditDeleteSubtitles"/>
-              </widget>
+                <signal name="clicked" handler="OnEditDeleteSubtitles" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkSeparatorToolItem" id="toolbarSeparator4">
+              <object class="GtkSeparatorToolItem" id="toolbarSeparator4">
                 <property name="visible">True</property>
-              </widget>
+                <property name="can_focus">False</property>
+              </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToggleToolButton" id="boldToolButton">
+              <object class="GtkToggleToolButton" id="boldToolButton">
                 <property name="visible">True</property>
-                <property name="sensitive">False</property>
+                <property name="can_focus">False</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-bold</property>
-                <signal name="toggled" handler="OnEditFormatBold"/>
-              </widget>
+                <signal name="toggled" handler="OnEditFormatBold" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToggleToolButton" id="italicToolButton">
+              <object class="GtkToggleToolButton" id="italicToolButton">
                 <property name="visible">True</property>
-                <property name="sensitive">False</property>
+                <property name="can_focus">False</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-italic</property>
-                <signal name="toggled" handler="OnEditFormatItalic"/>
-              </widget>
+                <signal name="toggled" handler="OnEditFormatItalic" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToggleToolButton" id="underlineToolButton">
+              <object class="GtkToggleToolButton" id="underlineToolButton">
                 <property name="visible">True</property>
-                <property name="sensitive">False</property>
+                <property name="can_focus">False</property>
+                <property name="use_underline">True</property>
                 <property name="stock_id">gtk-underline</property>
-                <signal name="toggled" handler="OnEditFormatUnderline"/>
-              </widget>
+                <signal name="toggled" handler="OnEditFormatUnderline" swapped="no"/>
+              </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="homogeneous">True</property>
+                <property name="homogeneous">False</property>
               </packing>
             </child>
-          </widget>
+            <style>
+              <class name="primary-toolbar"/>
+            </style>
+          </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
         <child>
-          <widget class="GtkVPaned" id="mainPaned">
+          <object class="GtkPaned" id="mainPaned">
             <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="orientation">vertical</property>
             <child>
-              <widget class="GtkHBox" id="videoAreaHBox">
+              <object class="GtkBox" id="videoAreaHBox">
                 <property name="height_request">200</property>
+                <property name="can_focus">False</property>
                 <property name="border_width">5</property>
                 <property name="spacing">7</property>
-                <signal name="drag_data_received" handler="OnVideoAreaDragDataReceived"/>
+                <signal name="drag-data-received" handler="OnVideoAreaDragDataReceived" swapped="no"/>
                 <child>
-                  <widget class="GtkVBox" id="videoTimingsVBox">
+                  <object class="GtkBox" id="videoTimingsVBox">
                     <property name="visible">True</property>
                     <property name="sensitive">False</property>
+                    <property name="can_focus">False</property>
                     <property name="border_width">4</property>
+                    <property name="orientation">vertical</property>
                     <property name="spacing">8</property>
                     <child>
-                      <widget class="GtkVBox" id="videoTimingsPositionVBox">
+                      <object class="GtkBox" id="videoTimingsPositionVBox">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="orientation">vertical</property>
                         <property name="spacing">1</property>
                         <child>
-                          <widget class="GtkLabel" id="videoControlsPositionLabel">
+                          <object class="GtkLabel" id="videoControlsPositionLabel">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">Time</property>
                             <property name="xalign">0</property>
                             <property name="yalign">0</property>
-                            <property name="label" translatable="yes">&lt;b&gt;Time&lt;/b&gt;</property>
-                            <property name="use_markup">True</property>
-                          </widget>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
+                          </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkLabel" id="videoControlsPositionValueLabel">
+                          <object class="GtkLabel" id="videoControlsPositionValueLabel">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">00:00:00.000</property>
                             <property name="xalign">0</property>
                             <property name="yalign">0</property>
-                            <property name="label">00:00:00.000</property>
-                          </widget>
+                          </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkLabel" id="videoControlsLengthLabel">
+                          <object class="GtkLabel" id="videoControlsLengthLabel">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">Length   </property>
                             <property name="xalign">0</property>
                             <property name="yalign">0</property>
-                            <property name="label" translatable="yes">&lt;b&gt;Length&lt;/b&gt;</property>
-                            <property name="use_markup">True</property>
-                          </widget>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
+                          </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">2</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkLabel" id="videoControlsLengthValueLabel">
+                          <object class="GtkLabel" id="videoControlsLengthValueLabel">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">00:00:00.000</property>
                             <property name="xalign">0</property>
                             <property name="yalign">0</property>
-                            <property name="label">00:00:00.000</property>
-                          </widget>
+                          </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">3</property>
                           </packing>
                         </child>
-                      </widget>
+                      </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkHSeparator" id="videoTimingsSeparator1">
+                      <object class="GtkSeparator" id="videoTimingsSeparator1">
                         <property name="visible">True</property>
-                      </widget>
+                        <property name="can_focus">False</property>
+                      </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>
-                      <widget class="GtkTable" id="table1">
+                      <object class="GtkGrid" id="grid1">
                         <property name="visible">True</property>
-                        <property name="n_rows">2</property>
-                        <property name="n_columns">2</property>
-                        <property name="column_spacing">1</property>
+                        <property name="can_focus">False</property>
                         <property name="row_spacing">4</property>
-                        <property name="homogeneous">True</property>
+                        <property name="column_spacing">1</property>
+                        <property name="row_homogeneous">True</property>
+                        <property name="column_homogeneous">True</property>
                         <child>
-                          <widget class="GtkButton" id="videoSetSubtitleStartButton">
+                          <object class="GtkButton" id="videoSetSubtitleStartButton">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
+                            <property name="receives_default">True</property>
                             <property name="relief">none</property>
-                            <signal name="clicked" handler="OnVideoSetSubtitleStart"/>
+                            <signal name="clicked" handler="OnVideoSetSubtitleStart" swapped="no"/>
                             <child>
-                              <widget class="GtkImage" id="videoSetSubtitleStartButtonImage">
+                              <object class="GtkImage" id="videoSetSubtitleStartButtonImage">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xpad">7</property>
                                 <property name="ypad">4</property>
                                 <property name="stock">gtk-missing-image</property>
-                              </widget>
+                              </object>
                             </child>
-                          </widget>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                          </packing>
                         </child>
                         <child>
-                          <widget class="GtkButton" id="videoSetSubtitleEndButton">
+                          <object class="GtkButton" id="videoSetSubtitleEndButton">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
+                            <property name="receives_default">True</property>
                             <property name="relief">none</property>
-                            <signal name="clicked" handler="OnVideoSetSubtitleEnd"/>
+                            <property name="yalign">0.49000000953674316</property>
+                            <signal name="clicked" handler="OnVideoSetSubtitleEnd" swapped="no"/>
                             <child>
-                              <widget class="GtkImage" id="videoSetSubtitleEndButtonImage">
+                              <object class="GtkImage" id="videoSetSubtitleEndButtonImage">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xpad">7</property>
                                 <property name="ypad">4</property>
                                 <property name="stock">gtk-missing-image</property>
-                              </widget>
+                              </object>
                             </child>
-                          </widget>
+                          </object>
                           <packing>
                             <property name="left_attach">1</property>
-                            <property name="right_attach">2</property>
+                            <property name="top_attach">0</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkButton" id="videoSetSubtitleStartEndButton">
+                          <object class="GtkButton" id="videoSetSubtitleStartEndButton">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
+                            <property name="receives_default">True</property>
                             <property name="relief">none</property>
-                            <signal name="pressed" handler="OnVideoSetSubtitleStart"/>
-                            <signal name="grab_focus" handler="OnVideoSetSubtitleStartEndGrabFocus"/>
-                            <signal name="released" handler="OnVideoSetSubtitleStartEnd"/>
-                            <signal name="key_release_event" handler="OnVideoSetSubtitleStartEndKeyRelease"/>
-                            <accelerator key="j" signal="grab-focus" modifiers="GDK_CONTROL_MASK"/>
+                            <signal name="button-press-event" 
handler="OnVideoSetSubtitleStartEndButtonPress" swapped="no"/>
+                            <signal name="button-release-event" 
handler="OnVideoSetSubtitleStartEndButtonRelease" swapped="no"/>
+                            <signal name="grab-focus" handler="OnVideoSetSubtitleStartEndGrabFocus" 
swapped="no"/>
+                            <signal name="key-release-event" handler="OnVideoSetSubtitleStartEndKeyRelease" 
swapped="no"/>
                             <child>
-                              <widget class="GtkImage" id="videoSetSubtitleStartEndButtonImage">
+                              <object class="GtkImage" id="videoSetSubtitleStartEndButtonImage">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="xpad">7</property>
                                 <property name="ypad">4</property>
                                 <property name="stock">gtk-missing-image</property>
-                              </widget>
+                              </object>
                             </child>
-                          </widget>
+                            <accelerator key="j" signal="grab-focus" modifiers="GDK_CONTROL_MASK"/>
+                          </object>
                           <packing>
+                            <property name="left_attach">0</property>
                             <property name="top_attach">1</property>
-                            <property name="bottom_attach">2</property>
                           </packing>
                         </child>
                         <child>
                           <placeholder/>
                         </child>
-                      </widget>
+                      </object>
                       <packing>
                         <property name="expand">False</property>
                         <property name="fill">False</property>
                         <property name="position">2</property>
                       </packing>
                     </child>
-                  </widget>
+                  </object>
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">False</property>
@@ -1531,9 +1521,11 @@
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkVSeparator" id="videoAreaSeparator">
+                  <object class="GtkSeparator" id="videoAreaSeparator">
                     <property name="visible">True</property>
-                  </widget>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
+                  </object>
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">False</property>
@@ -1541,72 +1533,63 @@
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkVBox" id="videoPreviewVBox">
+                  <object class="GtkBox" id="videoPreviewVBox">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="border_width">4</property>
+                    <property name="orientation">vertical</property>
                     <property name="spacing">7</property>
                     <child>
-                      <widget class="GtkTable" id="videoImageTable">
+                      <object class="GtkOverlay" id="videoImageOverlay">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="hexpand">True</property>
+                        <property name="vexpand">True</property>
                         <child>
-                          <widget class="GtkVBox" id="videoImageVBox">
-                            <property name="visible">True</property>
-                            <child>
-                              <widget class="GtkEventBox" id="videoSubtitleEventBox">
-                                <property name="visible">True</property>
-                                <child>
-                                  <widget class="GtkLabel" id="videoSubtitle">
-                                    <property name="visible">True</property>
-                                    <property name="justify">center</property>
-                                    <property name="wrap">True</property>
-                                    <property name="wrap_mode">word-char</property>
-                                  </widget>
-                                </child>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="pack_type">end</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                          </widget>
+                          <placeholder/>
                         </child>
-                      </widget>
+                      </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkHBox" id="videoPlaybackHBox">
+                      <object class="GtkBox" id="videoPlaybackHBox">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="spacing">10</property>
                         <child>
-                          <widget class="GtkHBox" id="videoControlsHBox">
+                          <object class="GtkBox" id="videoControlsHBox">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="spacing">10</property>
                             <child>
-                              <widget class="GtkToggleButton" id="videoPlayPauseButton">
+                              <object class="GtkToggleButton" id="videoPlayPauseButton">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="receives_default">False</property>
+                                <property name="receives_default">True</property>
                                 <property name="relief">none</property>
                                 <child>
-                                  <widget class="GtkAlignment" id="playPauseButtonAlignment">
+                                  <object class="GtkAlignment" id="playPauseButtonAlignment">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="xscale">0</property>
                                     <property name="yscale">0</property>
                                     <child>
-                                      <widget class="GtkHBox" id="playPauseButtonHBox">
+                                      <object class="GtkBox" id="playPauseButtonHBox">
                                         <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
                                         <property name="spacing">5</property>
                                         <child>
-                                          <widget class="GtkImage" id="playPauseButtonPlayImage">
+                                          <object class="GtkImage" id="playPauseButtonPlayImage">
                                             <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
                                             <property name="stock">gtk-media-play</property>
-                                            <property name="icon-size">1</property>
-                                          </widget>
+                                            <property name="icon_size">1</property>
+                                          </object>
                                           <packing>
                                             <property name="expand">False</property>
                                             <property name="fill">False</property>
@@ -1614,77 +1597,87 @@
                                           </packing>
                                         </child>
                                         <child>
-                                          <widget class="GtkImage" id="playPauseButtonPauseImage">
+                                          <object class="GtkImage" id="playPauseButtonPauseImage">
                                             <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
                                             <property name="stock">gtk-media-pause</property>
-                                            <property name="icon-size">1</property>
-                                          </widget>
+                                            <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>
-                                      </widget>
+                                      </object>
                                     </child>
-                                  </widget>
+                                  </object>
                                 </child>
-                              </widget>
+                              </object>
                               <packing>
                                 <property name="expand">False</property>
-                                <property name="fill">False</property>
+                                <property name="fill">True</property>
                                 <property name="position">0</property>
                               </packing>
                             </child>
                             <child>
-                              <widget class="GtkHBox" id="rewindForwardHBox">
+                              <object class="GtkBox" id="rewindForwardHBox">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="spacing">4</property>
                                 <property name="homogeneous">True</property>
                                 <child>
-                                  <widget class="GtkButton" id="videoRewindButton">
+                                  <object class="GtkButton" id="videoRewindButton">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
+                                    <property name="receives_default">True</property>
                                     <property name="relief">none</property>
-                                    <signal name="clicked" handler="OnVideoRewind"/>
+                                    <signal name="clicked" handler="OnVideoRewind" swapped="no"/>
                                     <child>
-                                      <widget class="GtkImage" id="rewindButtonImage">
+                                      <object class="GtkImage" id="rewindButtonImage">
                                         <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
                                         <property name="stock">gtk-media-rewind</property>
-                                        <property name="icon-size">1</property>
-                                      </widget>
+                                        <property name="icon_size">1</property>
+                                      </object>
                                     </child>
-                                  </widget>
+                                  </object>
                                   <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
                                     <property name="position">0</property>
                                   </packing>
                                 </child>
                                 <child>
-                                  <widget class="GtkButton" id="videoForwardButton">
+                                  <object class="GtkButton" id="videoForwardButton">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
+                                    <property name="receives_default">True</property>
                                     <property name="relief">none</property>
-                                    <signal name="clicked" handler="OnVideoForward"/>
+                                    <signal name="clicked" handler="OnVideoForward" swapped="no"/>
                                     <child>
-                                      <widget class="GtkImage" id="forwardButtonImage">
+                                      <object class="GtkImage" id="forwardButtonImage">
                                         <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
                                         <property name="stock">gtk-media-forward</property>
-                                        <property name="icon-size">1</property>
-                                      </widget>
+                                        <property name="icon_size">1</property>
+                                      </object>
                                     </child>
-                                  </widget>
+                                  </object>
                                   <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
-                              </widget>
+                              </object>
                               <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
                                 <property name="position">1</property>
                               </packing>
                             </child>
-                          </widget>
+                          </object>
                           <packing>
                             <property name="expand">False</property>
                             <property name="fill">False</property>
@@ -1692,24 +1685,26 @@
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkHBox" id="speedHBox">
+                          <object class="GtkBox" id="speedHBox">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <child>
-                              <widget class="GtkButton" id="videoSpeedDownButton">
+                              <object class="GtkButton" id="videoSpeedDownButton">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
                                 <property name="relief">none</property>
-                                <signal name="clicked" handler="OnVideoSpeedDown"/>
-                                <accelerator key="F8" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
+                                <signal name="clicked" handler="OnVideoSpeedDown" swapped="no"/>
                                 <child>
-                                  <widget class="GtkImage" id="videoSpeedDownButtonImage">
+                                  <object class="GtkImage" id="videoSpeedDownButtonImage">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="stock">gtk-remove</property>
-                                    <property name="icon-size">1</property>
-                                  </widget>
+                                    <property name="icon_size">1</property>
+                                  </object>
                                 </child>
-                              </widget>
+                                <accelerator key="F8" signal="activate" modifiers="GDK_SHIFT_MASK | 
GDK_CONTROL_MASK"/>
+                              </object>
                               <packing>
                                 <property name="expand">False</property>
                                 <property name="fill">False</property>
@@ -1717,15 +1712,15 @@
                               </packing>
                             </child>
                             <child>
-                              <widget class="GtkButton" id="videoSpeedButton">
-                                <property name="label">1.0x</property>
+                              <object class="GtkButton" id="videoSpeedButton">
+                                <property name="label" translatable="yes">1.0x</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="focus_on_click">False</property>
-                                <signal name="clicked" handler="OnVideoSpeed"/>
-                              </widget>
+                                <signal name="clicked" handler="OnVideoSpeed" swapped="no"/>
+                              </object>
                               <packing>
                                 <property name="expand">False</property>
                                 <property name="fill">False</property>
@@ -1733,28 +1728,29 @@
                               </packing>
                             </child>
                             <child>
-                              <widget class="GtkButton" id="videoSpeedUpButton">
+                              <object class="GtkButton" id="videoSpeedUpButton">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
                                 <property name="relief">none</property>
-                                <signal name="clicked" handler="OnVideoSpeedUp"/>
-                                <accelerator key="F8" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                                <signal name="clicked" handler="OnVideoSpeedUp" swapped="no"/>
                                 <child>
-                                  <widget class="GtkImage" id="videoSpeedUpButtonImage">
+                                  <object class="GtkImage" id="videoSpeedUpButtonImage">
                                     <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
                                     <property name="stock">gtk-add</property>
-                                    <property name="icon-size">1</property>
-                                  </widget>
+                                    <property name="icon_size">1</property>
+                                  </object>
                                 </child>
-                              </widget>
+                                <accelerator key="F8" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                              </object>
                               <packing>
                                 <property name="expand">False</property>
                                 <property name="fill">False</property>
                                 <property name="position">2</property>
                               </packing>
                             </child>
-                          </widget>
+                          </object>
                           <packing>
                             <property name="expand">False</property>
                             <property name="fill">False</property>
@@ -1762,248 +1758,266 @@
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkHScale" id="videoSlider">
+                          <object class="GtkScale" id="videoSlider">
                             <property name="visible">True</property>
-                            <property name="adjustment">0 0 100 0.5 10 10</property>
+                            <property name="can_focus">True</property>
+                            <property name="adjustment">videoSliderAdjustment</property>
+                            <property name="round_digits">1</property>
                             <property name="draw_value">False</property>
-                            <property name="value_pos">bottom</property>
-                          </widget>
+                          </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">2</property>
                           </packing>
                         </child>
-                      </widget>
+                      </object>
                       <packing>
                         <property name="expand">False</property>
                         <property name="fill">False</property>
-                        <property name="position">1</property>
+                        <property name="position">2</property>
                       </packing>
                     </child>
-                  </widget>
+                  </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">2</property>
                   </packing>
                 </child>
-              </widget>
+              </object>
               <packing>
                 <property name="resize">False</property>
                 <property name="shrink">False</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkVBox" id="subtitleAreaVBox">
+              <object class="GtkBox" id="subtitleAreaVBox">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="border_width">4</property>
+                <property name="orientation">vertical</property>
                 <property name="spacing">5</property>
-                <signal name="drag_data_received" handler="OnSubtitleAreaDragDataReceived"/>
+                <signal name="drag-data-received" handler="OnSubtitleAreaDragDataReceived" swapped="no"/>
                 <child>
-                  <widget class="GtkScrolledWindow" id="subtitleViewScrolledWindow">
+                  <object class="GtkScrolledWindow" id="subtitleViewScrolledWindow">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="hscrollbar_policy">automatic</property>
-                    <property name="vscrollbar_policy">automatic</property>
                     <property name="shadow_type">out</property>
                     <child>
-                      <widget class="GtkTreeView" id="subtitleView">
+                      <object class="GtkTreeView" id="subtitleView">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
                         <property name="can_focus">True</property>
                         <property name="border_width">1</property>
                         <property name="rules_hint">True</property>
                         <property name="enable_search">False</property>
-                        <signal name="key_press_event" handler="OnSubtitleViewKeyPressed"/>
-                        <signal name="row_activated" handler="OnRowActivated"/>
-                      </widget>
+                        <signal name="key-press-event" handler="OnSubtitleViewKeyPressed" swapped="no"/>
+                        <signal name="row-activated" handler="OnRowActivated" swapped="no"/>
+                        <child internal-child="selection">
+                          <object class="GtkTreeSelection" id="treeview-selection2"/>
+                        </child>
+                      </object>
                     </child>
-                  </widget>
+                  </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkHBox" id="subtitleEdit">
+                  <object class="GtkBox" id="subtitleEdit">
                     <property name="visible">True</property>
                     <property name="sensitive">False</property>
+                    <property name="can_focus">False</property>
                     <property name="spacing">4</property>
                     <child>
-                      <widget class="GtkTable" id="subtitleEditTable">
+                      <object class="GtkGrid" id="subtitleEditTable">
                         <property name="visible">True</property>
-                        <property name="n_rows">3</property>
-                        <property name="n_columns">2</property>
-                        <property name="column_spacing">4</property>
+                        <property name="can_focus">False</property>
                         <property name="row_spacing">2</property>
+                        <property name="column_spacing">4</property>
                         <child>
-                          <widget class="GtkSpinButton" id="startSpinButton">
+                          <object class="GtkLabel" id="startLabel">
                             <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="xalign">0.5</property>
-                            <property name="adjustment">0 0 100 1 10 0</property>
-                            <property name="climb_rate">1</property>
-                            <property name="numeric">True</property>
-                          </widget>
+                            <property name="can_focus">False</property>
+                            <property name="tooltip_text" translatable="yes">Tip: use Ctrl+Plus/Minus and 
Alt+Plus/Minus (on the numpad) to adjust start and end timings.
+Shift+Plus/Minus (on the numpad) shifts timings.</property>
+                            <property name="label" translatable="yes" comments="This is the start time/frame 
of a subtitle.">Start:</property>
+                            <property name="xalign">0</property>
+                          </object>
                           <packing>
-                            <property name="left_attach">1</property>
-                            <property name="right_attach">2</property>
-                            <property name="y_options"></property>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkSpinButton" id="durationSpinButton">
+                          <object class="GtkLabel" id="endLabel">
                             <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="xalign">0.5</property>
-                            <property name="adjustment">0 0 100 1 10 0</property>
-                            <property name="climb_rate">1</property>
-                          </widget>
+                            <property name="can_focus">False</property>
+                            <property name="tooltip_text" translatable="yes">Tip: use Ctrl+Plus/Minus and 
Alt+Plus/Minus (on the numpad) to adjust start and end timings.
+Shift+Plus/Minus (on the numpad) shifts timings.</property>
+                            <property name="label" translatable="yes">End:</property>
+                            <property name="xalign">0</property>
+                          </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="left_attach">0</property>
+                            <property name="top_attach">1</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkSpinButton" id="endSpinButton">
+                          <object class="GtkLabel" id="durationLabel">
                             <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="xalign">0.5</property>
-                            <property name="adjustment">0 0 100 1 10 0</property>
-                            <property name="climb_rate">1</property>
-                          </widget>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes" comments="This is the duration of a 
subtitle.">Duration:</property>
+                            <property name="xalign">0</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="left_attach">0</property>
+                            <property name="top_attach">2</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkLabel" id="durationLabel">
+                          <object class="GtkSpinButton" id="startSpinButton">
                             <property name="visible">True</property>
-                            <property name="tooltip" translatable="yes">Tip: use Ctrl+Plus/Minus and 
Alt+Plus/Minus (on the numpad) to adjust start and end timings.
-Shift+Plus/Minus (on the numpad) shifts timings.</property>
-                            <property name="xalign">0</property>
-                            <property name="label" translatable="yes" comments="This is the duration of a 
subtitle.">Duration:</property>
-                          </widget>
+                            <property name="can_focus">True</property>
+                            <property name="width_chars">10</property>
+                            <property name="max_width_chars">10</property>
+                            <property name="xalign">0.5</property>
+                            <property name="adjustment">startSpinButtonAdjustment</property>
+                            <property name="climb_rate">1</property>
+                          </object>
                           <packing>
-                            <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="left_attach">1</property>
+                            <property name="top_attach">0</property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkLabel" id="endLabel">
+                          <object class="GtkSpinButton" id="endSpinButton">
                             <property name="visible">True</property>
-                            <property name="tooltip" translatable="yes">Tip: use Ctrl+Plus/Minus and 
Alt+Plus/Minus (on the numpad) to adjust start and end timings.
-Shift+Plus/Minus (on the numpad) shifts timings.</property>
-                            <property name="xalign">0</property>
-                            <property name="label" translatable="yes" comments="This is the end time/frame 
of a subtitle.">End:</property>
-                          </widget>
+                            <property name="can_focus">True</property>
+                            <property name="width_chars">10</property>
+                            <property name="max_width_chars">10</property>
+                            <property name="xalign">0.5</property>
+                            <property name="adjustment">endSpinButtonAdjustment</property>
+                            <property name="climb_rate">1</property>
+                          </object>
                           <packing>
+                            <property name="left_attach">1</property>
                             <property name="top_attach">1</property>
-                            <property name="bottom_attach">2</property>
-                            <property name="x_options">GTK_FILL</property>
-                            <property name="y_options"></property>
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkLabel" id="startLabel">
+                          <object class="GtkSpinButton" id="durationSpinButton">
                             <property name="visible">True</property>
-                            <property name="tooltip" translatable="yes">Tip: use Ctrl+Plus/Minus and 
Alt+Plus/Minus (on the numpad) to adjust start and end timings.
-Shift+Plus/Minus (on the numpad) shifts timings.</property>
-                            <property name="xalign">0</property>
-                            <property name="label" translatable="yes" comments="This is the start time/frame 
of a subtitle.">Start:</property>
-                          </widget>
+                            <property name="can_focus">True</property>
+                            <property name="width_chars">10</property>
+                            <property name="max_width_chars">10</property>
+                            <property name="xalign">0.5</property>
+                            <property name="adjustment">durationSpinButtonAdjustment</property>
+                            <property name="climb_rate">1</property>
+                          </object>
                           <packing>
-                            <property name="x_options">GTK_FILL</property>
-                            <property name="y_options"></property>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">2</property>
                           </packing>
                         </child>
-                      </widget>
+                      </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkScrolledWindow" id="subtitleEditTextScrolledWindow">
+                      <object class="GtkScrolledWindow" id="subtitleEditTextScrolledWindow">
                         <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>
-                          <widget class="GtkTextView" id="subtitleEditText">
+                          <object class="GtkTextView" id="subtitleEditText">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="pixels_above_lines">5</property>
                             <property name="justification">center</property>
                             <property name="accepts_tab">False</property>
-                          </widget>
+                          </object>
                         </child>
-                      </widget>
+                      </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkScrolledWindow" id="subtitleEditTranslationScrolledWindow">
+                      <object class="GtkScrolledWindow" id="subtitleEditTranslationScrolledWindow">
                         <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>
-                          <widget class="GtkTextView" id="subtitleEditTranslation">
+                          <object class="GtkTextView" id="subtitleEditTranslation">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="pixels_above_lines">5</property>
                             <property name="justification">center</property>
                             <property name="accepts_tab">False</property>
-                          </widget>
+                          </object>
                         </child>
-                      </widget>
+                      </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">2</property>
                       </packing>
                     </child>
-                  </widget>
+                  </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
-              </widget>
+              </object>
               <packing>
                 <property name="resize">True</property>
                 <property name="shrink">False</property>
               </packing>
             </child>
-          </widget>
+          </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">2</property>
           </packing>
         </child>
         <child>
-          <widget class="GtkHBox" id="hbox1">
+          <object class="GtkBox" id="statusbarHBox">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
-              <widget class="GtkStatusbar" id="messageStatusbar">
+              <object class="GtkStatusbar" id="messageStatusbar">
                 <property name="visible">True</property>
-                <property name="has_resize_grip">False</property>
-              </widget>
+                <property name="can_focus">False</property>
+                <property name="margin_start">10</property>
+                <property name="margin_end">10</property>
+                <property name="spacing">2</property>
+              </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkStatusbar" id="positionStatusbar">
+              <object class="GtkStatusbar" id="positionStatusbar">
                 <property name="width_request">120</property>
                 <property name="visible">True</property>
-                <property name="has_resize_grip">False</property>
-              </widget>
+                <property name="can_focus">False</property>
+                <property name="margin_start">10</property>
+                <property name="margin_end">10</property>
+                <property name="spacing">2</property>
+              </object>
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">False</property>
@@ -2011,24 +2025,28 @@ Shift+Plus/Minus (on the numpad) shifts timings.</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkStatusbar" id="overwriteStatusbar">
+              <object class="GtkStatusbar" id="overwriteStatusbar">
                 <property name="width_request">80</property>
                 <property name="visible">True</property>
-              </widget>
+                <property name="can_focus">False</property>
+                <property name="margin_start">10</property>
+                <property name="margin_end">10</property>
+                <property name="spacing">2</property>
+              </object>
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">False</property>
                 <property name="position">2</property>
               </packing>
             </child>
-          </widget>
+          </object>
           <packing>
             <property name="expand">False</property>
             <property name="fill">False</property>
             <property name="position">3</property>
           </packing>
         </child>
-      </widget>
+      </object>
     </child>
-  </widget>
-</glade-interface>
+  </object>
+</interface>
diff --git a/src/Glade/VideoOpenDialog.ui b/src/Glade/VideoOpenDialog.ui
new file mode 100644
index 0000000..93ec6aa
--- /dev/null
+++ b/src/Glade/VideoOpenDialog.ui
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.12"/>
+  <object class="GtkFileChooserDialog" id="dialog">
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">Open Video</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="destroy_with_parent">True</property>
+    <property name="type_hint">dialog</property>
+    <property name="preview_widget_active">False</property>
+    <property name="use_preview_label">False</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialogVBox">
+        <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 | GDK_ENTER_NOTIFY_MASK</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">15</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialogActionArea">
+            <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 | GDK_ENTER_NOTIFY_MASK</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="buttonCancel">
+                <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="buttonOpen">
+                <property name="label">gtk-open</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="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-6">buttonCancel</action-widget>
+      <action-widget response="-5">buttonOpen</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/src/Glade/MainWindow.glade b/src/Glade/old.glade/MainWindow.glade
similarity index 100%
rename from src/Glade/MainWindow.glade
rename to src/Glade/old.glade/MainWindow.glade
diff --git a/src/GnomeSubtitles/Core/Backup.cs b/src/GnomeSubtitles/Core/Backup.cs
index d3ab63f..8bae72f 100644
--- a/src/GnomeSubtitles/Core/Backup.cs
+++ b/src/GnomeSubtitles/Core/Backup.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2010 Pedro Castro
+ * Copyright (C) 2010-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -43,7 +43,7 @@ public class Backup {
                        Disable();
                }
 
-               if (Base.Config.PrefsBackupAutoBackup) {
+               if (Base.Config.BackupAuto) {
                        Enable();
                }
        }
@@ -57,7 +57,7 @@ public class Backup {
 
        private void Enable() {
                if (backupTimeoutId == 0)
-                       backupTimeoutId = GLib.Timeout.Add((uint)Base.Config.PrefsBackupBackupTime * 1000, 
DoBackup); //milliseconds
+                       backupTimeoutId = GLib.Timeout.Add((uint)Base.Config.BackupTime * 1000, DoBackup); 
//milliseconds
        }
 
        private void Disable() {
@@ -126,7 +126,7 @@ public class Backup {
        /* Event members */
 
        private void OnBaseInitFinished () {
-               if (Base.Config.PrefsBackupAutoBackup) {
+               if (Base.Config.BackupAuto) {
                        Enable();
                }
     }
diff --git a/src/GnomeSubtitles/Core/Base.cs b/src/GnomeSubtitles/Core/Base.cs
index 7f8fcb7..3f91fb3 100644
--- a/src/GnomeSubtitles/Core/Base.cs
+++ b/src/GnomeSubtitles/Core/Base.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -37,8 +37,6 @@ public delegate void TimingModeChangedHandler (TimingMode timingMode);
 public delegate void BasicEventHandler ();
 
 public class Base {
-       private static Glade.XML glade = null;
-
        private static MainUi ui = null;
        private static ExecutionContext executionContext = null;
        private static EventHandlers handlers = null;
@@ -263,7 +261,7 @@ public class Base {
        }
 
        public static Widget GetWidget (string name) {
-               return glade.GetWidget(name);
+               return MainUi.GetWidget(name);
        }
 
        /* Private members */
@@ -294,7 +292,7 @@ public class Base {
                backup = new Backup();
 
                /* Initialize the GUI */
-               ui = new MainUi(handlers, out glade);
+               ui = new MainUi(handlers);
                clipboards.WatchPrimaryChanges = true;
                Catalog.Init(ExecutionContext.TranslationDomain, ExecutionContext.LocaleDir);
 
diff --git a/src/GnomeSubtitles/Core/Command/InsertSubtitleCommand.cs 
b/src/GnomeSubtitles/Core/Command/InsertSubtitleCommand.cs
index 2ed9b64..9a30203 100644
--- a/src/GnomeSubtitles/Core/Command/InsertSubtitleCommand.cs
+++ b/src/GnomeSubtitles/Core/Command/InsertSubtitleCommand.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -131,8 +131,8 @@ public class InsertSubtitleAtVideoPositionCommand : InsertSubtitleCommand {
 
        protected override TreePath GetNewPath () {
                subtitleTime = Base.Ui.Video.Position.CurrentTime;
-               if (Base.Ui.Video.IsStatePlaying && Base.Config.PrefsVideoApplyReactionDelay) {
-                       subtitleTime -= TimeSpan.FromMilliseconds(Base.Config.PrefsVideoReactionDelay);
+               if (Base.Ui.Video.IsStatePlaying && Base.Config.VideoApplyReactionDelay) {
+                       subtitleTime -= TimeSpan.FromMilliseconds(Base.Config.VideoReactionDelay);
                }
 
                if (Base.Document.Subtitles.Count == 0)
diff --git a/src/GnomeSubtitles/Core/Command/SplitSubtitlesCommand.cs 
b/src/GnomeSubtitles/Core/Command/SplitSubtitlesCommand.cs
index 426e03b..5bde4dd 100644
--- a/src/GnomeSubtitles/Core/Command/SplitSubtitlesCommand.cs
+++ b/src/GnomeSubtitles/Core/Command/SplitSubtitlesCommand.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2011 Pedro Castro
+ * Copyright (C) 2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -41,7 +41,7 @@ public class SplitSubtitlesCommand : MultipleSelectionCommand {
                ArrayList subtitlesBefore = new ArrayList();
                ArrayList pathsAfter = new ArrayList();
 
-               SplitOperator splitOperator = new SplitOperator(subtitles, 
Base.Config.PrefsTimingsTimeBetweenSubtitles);
+               SplitOperator splitOperator = new SplitOperator(subtitles, 
Base.Config.TimingsTimeBetweenSubtitles);
 
                foreach (TreePath path in Paths) {
                        int subtitleIndex = Util.PathToInt(path) + subtitlesBefore.Count; //need to account 
for subtitles already added in this loop
diff --git a/src/GnomeSubtitles/Core/Config.cs b/src/GnomeSubtitles/Core/Config.cs
index ed89a3b..e975d13 100644
--- a/src/GnomeSubtitles/Core/Config.cs
+++ b/src/GnomeSubtitles/Core/Config.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2007-2011 Pedro Castro
+ * Copyright (C) 2007-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,10 +17,12 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-using GConf;
+using GLib;
 using SubLib.Core.Domain;
 using System;
 
+//TODO clean commented code
+//TODO implement a runtime variable that allows to run the app without a config schema installed
 namespace GnomeSubtitles.Core {
 
 /* Enumerations */
@@ -33,302 +35,320 @@ public enum ConfigFileSaveFormatOption { KeepExisting = 0, RememberLastUsed = 1,
 public enum ConfigFileSaveFormat { KeepExisting = -1, Fixed = 0 }; //KeepExisting=-1 because it doesn't 
appear
 public enum ConfigFileSaveNewlineOption { RememberLastUsed = 0, Specific = 2 }; //Values match ordering 
where the options are used
 
+/* Note: when changing the schema file, in order to run the application from the development workspace,
+ * the new schema needs to be installed to a dir recognized by GSettings. The XML file needs to be placed
+ * inside /usr/share/glib-2.0/schemas (location may vary - the glib-2.0 dir must be found inside one of
+ * the $XDG_DATA_DIRS) and 'glib-compile-schemas .' must be run on that dir. This will update the system-wide
+ * 'gschemas.compiled' file and make the new schema recognizable.
+ */
 public class Config {
-       private Client client = null;
-
-       /* Constant prefix strings */
-       private const string keyPrefix = "/apps/gnome-subtitles/";
-       private const string keyPrefs = keyPrefix + "preferences/";
-       private const string keyPrefsEncodings = keyPrefs + "encodings/";
-       private const string keyPrefsSpellCheck = keyPrefs + "spellcheck/";
-       private const string keyPrefsVideo = keyPrefs + "video/";
-       private const string keyPrefsView = keyPrefs + "view/";
-       private const string keyPrefsWindow = keyPrefs + "window/";
-       private const string keyPrefsDefaults = keyPrefs + "defaults/";
-       private const string keyPrefsTranslation = keyPrefs + "translation/";
-       private const string keyPrefsBackup = keyPrefs + "backup/";
-       private const string keyPrefsTimings = keyPrefs + "timings/";
-
-       /* Constant key strings */
-       private const string keyPrefsEncodingsShownInMenu = keyPrefsEncodings + "shown_in_menu";
-       private const string keyPrefsTranslationSaveAll = keyPrefsTranslation + "save_all";
-       private const string keyPrefsVideoAutoChooseFile = keyPrefsVideo + "auto_choose_file";
-       private const string keyPrefsVideoApplyReactionDelay = keyPrefsVideo + "apply_reaction_delay";
-       private const string keyPrefsVideoReactionDelay = keyPrefsVideo + "reaction_delay";
-       private const string keyPrefsVideoSeekOnChange = keyPrefsVideo + "seek_on_change";
-       private const string keyPrefsVideoSeekOnChangeRewind = keyPrefsVideo + "seek_on_change_rewind";
-       private const string keyPrefsViewLineLengths = keyPrefsView + "line_lengths";
-       private const string keyPrefsSpellCheckActiveTextLanguage = keyPrefsSpellCheck + 
"active_text_language";
-       private const string keyPrefsSpellCheckActiveTranslationLanguage = keyPrefsSpellCheck + 
"active_translation_language";
-       private const string keyPrefsSpellCheckAutocheck = keyPrefsSpellCheck + "autocheck";
-       private const string keyPrefsWindowHeight = keyPrefsWindow + "height";
-       private const string keyPrefsWindowWidth = keyPrefsWindow + "width";
-       private const string keyPrefsDefaultsFileOpenEncodingOption = keyPrefsDefaults + 
"file_open_encoding_option";
-       private const string keyPrefsDefaultsFileOpenEncoding = keyPrefsDefaults + "file_open_encoding";
-       private const string keyPrefsDefaultsFileOpenFallbackEncoding = keyPrefsDefaults + 
"file_open_fallback";
-       private const string keyPrefsDefaultsFileSaveEncodingOption = keyPrefsDefaults + 
"file_save_encoding_option";
-       private const string keyPrefsDefaultsFileSaveEncoding = keyPrefsDefaults + "file_save_encoding";
-       private const string keyPrefsDefaultsFileSaveFormatOption = keyPrefsDefaults + 
"file_save_format_option";
-       private const string keyPrefsDefaultsFileSaveFormat = keyPrefsDefaults + "file_save_format";
-       private const string keyPrefsDefaultsFileSaveNewlineOption = keyPrefsDefaults + 
"file_save_newline_option";
-       private const string keyPrefsDefaultsFileSaveNewline = keyPrefsDefaults + "file_save_newline";
-       private const string keyPrefsBackupAutoBackup = keyPrefsBackup + "auto_backup";
-       private const string keyPrefsBackupBackupTime = keyPrefsBackup + "backup_time";
-       private const string keyPrefsTimingsTimeStep = keyPrefsTimings + "time_step"; //Not editable in the 
Preferences dialog
-       private const string keyPrefsTimingsFramesStep = keyPrefsTimings + "frames_step"; //Not editable in 
the Preferences dialog
-       private const string keyPrefsTimingsTimeBetweenSubtitles = keyPrefsTimings + "time_between_subs";
+
+       /* Schema */
+       private const string Schema = "org.gnome.GnomeSubtitles";
+
+       /* Keys */
+       private const string KeyFileEncodingsShownInMenu = "file-encodings-shown-in-menu";
+       private const string KeyFileOpenEncodingOption = "file-open-encoding-option";
+       private const string KeyFileOpenEncoding = "file-open-encoding";
+       private const string KeyFileOpenFallbackEncoding = "file-open-fallback";
+       private const string KeyFileSaveEncodingOption = "file-save-encoding-option";
+       private const string KeyFileSaveEncoding = "file-save-encoding";
+       private const string KeyFileSaveFormatOption = "file-save-format-option";
+       private const string KeyFileSaveFormat = "file-save-format";
+       private const string KeyFileSaveNewlineOption = "file-save-newline-option";
+       private const string KeyFileSaveNewline = "file-save-newline";
+       private const string KeyFileTranslationSaveAll = "file-translation-save-all";
+
+       private const string KeyVideoAutoChooseFile = "video-auto-choose-file";
+       private const string KeyVideoApplyReactionDelay = "video-apply-reaction-delay";
+       private const string KeyVideoReactionDelay = "video-reaction-delay";
+       private const string KeyVideoSeekOnChange = "video-seek-on-change";
+       private const string KeyVideoSeekOnChangeRewind = "video-seek-on-change-rewind";
+
+       private const string KeyViewLineLengths = "view-line-lengths";
+       private const string KeyViewWindowHeight = "view-window-height";
+       private const string KeyViewWindowWidth = "view-window-width";
+
+       private const string KeySpellCheckTextLanguage = "spellcheck-text-language";
+       private const string KeySpellCheckTranslationLanguage = "spellcheck-translation-language";
+       private const string KeySpellCheckAuto = "spellcheck-auto";
+
+       private const string KeyBackupAuto = "backup-auto";
+       private const string KeyBackupTime = "backup-time";
+
+       private const string KeyTimingsTimeStep = "timings-time-step"; //Not editable in the Preferences 
dialog
+       private const string KeyTimingsFramesStep = "timings-frames-step"; //Not editable in the Preferences 
dialog
+       private const string KeyTimingsTimeBetweenSubtitles = "timings-time-between-subs";
+
+       /* Constant default values */
+       private const string DefaultEncoding = "ISO-8859-15";
+
+       //private Client client = null;
+       private Settings settings = null;
 
        /* Cached values */
-       private bool isValuePrefsViewLineLengthsCached = false;
-       private bool valuePrefsViewLineLengths = false;
-       private bool isValuePrefsVideoApplyReactionDelayCached = false;
-       private bool valuePrefsVideoApplyReactionDelay = false;
-       private int valuePrefsVideoReactionDelay = -1;
-       private bool isValuePrefsVideoSeekOnChangeCached = false;
-       private bool valuePrefsVideoSeekOnChange = false;
-       private int valuePrefsVideoSeekOnChangeRewind = -1;
-       private int valuePrefsTimingsTimeStep = -1;
-       private int valuePrefsTimingsFramesStep = -1;
-       private int valuePrefsTimingsTimeBetweenSubtitles = -1;
+//     private bool isValuePrefsViewLineLengthsCached = false;
+//     private bool valuePrefsViewLineLengths = false;
+//     private bool isValuePrefsVideoApplyReactionDelayCached = false;
+//     private bool valuePrefsVideoApplyReactionDelay = false;
+//     private int valuePrefsVideoReactionDelay = -1;
+//     private bool isValuePrefsVideoSeekOnChangeCached = false;
+//     private bool valuePrefsVideoSeekOnChange = false;
+//     private int valuePrefsVideoSeekOnChangeRewind = -1;
+//     private int valuePrefsTimingsTimeStep = -1;
+//     private int valuePrefsTimingsFramesStep = -1;
+//     private int valuePrefsTimingsTimeBetweenSubtitles = -1;
 
 
        public Config () {
-               client = new Client();
+               try {
+                       settings = new Settings(Schema);
+               } catch(Exception e) {
+                       Console.Error.WriteLine(e);
+               }
        }
 
        /* Public properties */
 
-       public string[] PrefsEncodingsShownInMenu {
+       public string[] FileEncodingsShownInMenu {
                get {
-                       string[] defaultValue = { "ISO-8859-15" };
-                       return GetStrings(keyPrefsEncodingsShownInMenu, defaultValue);
+                       string[] defaultValue = { DefaultEncoding };
+                       return GetStrings(KeyFileEncodingsShownInMenu, defaultValue);
                }
-               set { SetStrings(keyPrefsEncodingsShownInMenu, value); }
+               set { SetStrings(KeyFileEncodingsShownInMenu, value); }
        }
 
-       public string PrefsSpellCheckActiveTextLanguage {
-               get { return GetString(keyPrefsSpellCheckActiveTextLanguage, String.Empty); }
-               set { Set(keyPrefsSpellCheckActiveTextLanguage, value); }
+       public ConfigFileOpenEncodingOption FileOpenEncodingOption {
+               get { return (ConfigFileOpenEncodingOption)GetEnumValue(KeyFileOpenEncodingOption, 
ConfigFileOpenEncodingOption.AutoDetect); }
+               set { Set(KeyFileOpenEncodingOption, value.ToString()); }
        }
 
-       public string PrefsSpellCheckActiveTranslationLanguage {
-               get { return GetString(keyPrefsSpellCheckActiveTranslationLanguage, String.Empty); }
-               set { Set(keyPrefsSpellCheckActiveTranslationLanguage, value); }
+       public ConfigFileOpenEncoding FileOpenEncoding {
+               get { return (ConfigFileOpenEncoding)GetEnumValueFromSuperset(KeyFileOpenEncoding, 
ConfigFileOpenEncoding.Fixed); }
+               set { Set(KeyFileOpenEncoding, value.ToString()); }
        }
 
-       public bool PrefsSpellCheckAutocheck {
-               get { return GetBool(keyPrefsSpellCheckAutocheck, false); }
-               set { Set(keyPrefsSpellCheckAutocheck, value); }
+       /* Uses the same key as FileOpenEncoding but is used when there's a specific encoding set */
+       public string FileOpenEncodingFixed {
+               get { return GetString(KeyFileOpenEncoding, DefaultEncoding); }
+               set { Set(KeyFileOpenEncoding, value); }
        }
 
-       public bool PrefsVideoAutoChooseFile {
-               get { return GetBool(keyPrefsVideoAutoChooseFile, true); }
-               set { Set(keyPrefsVideoAutoChooseFile, value); }
+       public ConfigFileOpenFallbackEncoding FileOpenFallbackEncoding {
+               get { return 
(ConfigFileOpenFallbackEncoding)GetEnumValueFromSuperset(KeyFileOpenFallbackEncoding, 
ConfigFileOpenFallbackEncoding.Fixed); }
+               set { Set(KeyFileOpenFallbackEncoding, value.ToString()); }
        }
 
-       public bool PrefsVideoApplyReactionDelay {
-               get {
-                       if (!isValuePrefsVideoApplyReactionDelayCached) {
-                               this.valuePrefsVideoApplyReactionDelay = 
GetBool(keyPrefsVideoApplyReactionDelay, false);
-                               this.isValuePrefsVideoApplyReactionDelayCached = true;
-                       }
-                       return valuePrefsVideoApplyReactionDelay;
-               }
-               set {
-                       Set(keyPrefsVideoApplyReactionDelay, value);
-                       this.valuePrefsVideoApplyReactionDelay = value;
-                       this.isValuePrefsVideoApplyReactionDelayCached = true;
-               }
+       /* Uses the same key as FileOpenFallbackEncoding but is used when there's a specific encoding set */
+       public string FileOpenFallbackEncodingFixed {
+               get { return GetString(KeyFileOpenFallbackEncoding, DefaultEncoding); }
+               set { Set(KeyFileOpenFallbackEncoding, value); }
        }
 
-       public int PrefsVideoReactionDelay {
-               get {
-                       if (this.valuePrefsVideoReactionDelay == -1) {
-                               this.valuePrefsVideoReactionDelay = GetInt(keyPrefsVideoReactionDelay, 200, 
0, true, 2000, true);
-                       }
-                       return this.valuePrefsVideoReactionDelay;
-               }
-               set {
-                       Set(keyPrefsVideoReactionDelay, value);
-                       this.valuePrefsVideoReactionDelay = value;
-               }
+       public ConfigFileSaveEncodingOption FileSaveEncodingOption {
+               get { return (ConfigFileSaveEncodingOption)GetEnumValue(KeyFileSaveEncodingOption, 
ConfigFileSaveEncodingOption.KeepExisting); }
+               set { Set(KeyFileSaveEncodingOption, value.ToString()); }
        }
 
-       public bool PrefsVideoSeekOnChange {
-               get {
-                       if (!isValuePrefsVideoSeekOnChangeCached) {
-                               this.valuePrefsVideoSeekOnChange = GetBool(keyPrefsVideoSeekOnChange, true);
-                               this.isValuePrefsVideoSeekOnChangeCached = true;
-                       }
-                       return valuePrefsVideoSeekOnChange;
-               }
-               set {
-                       Set(keyPrefsVideoSeekOnChange, value);
-                       this.valuePrefsVideoSeekOnChange = value;
-                       this.isValuePrefsVideoSeekOnChangeCached = true;
-               }
+       public ConfigFileSaveEncoding FileSaveEncoding {
+               get { return (ConfigFileSaveEncoding)GetEnumValueFromSuperset(KeyFileSaveEncoding, 
ConfigFileSaveEncoding.Fixed); }
+               set { Set(KeyFileSaveEncoding, value.ToString()); }
        }
 
-       public int PrefsVideoSeekOnChangeRewind {
-               get {
-                       if (this.valuePrefsVideoSeekOnChangeRewind == -1) {
-                               this.valuePrefsVideoSeekOnChangeRewind = 
GetInt(keyPrefsVideoSeekOnChangeRewind, 200, 0, true, 2000, true);
-                       }
-                       return this.valuePrefsVideoSeekOnChangeRewind;
-               }
-               set {
-                       Set(keyPrefsVideoSeekOnChangeRewind, value);
-                       this.valuePrefsVideoSeekOnChangeRewind = value;
-               }
+       /* Uses the same key as FileSaveEncoding but is used when there's a specific encoding set */
+       public string FileSaveEncodingFixed {
+               get { return GetString(KeyFileSaveEncoding, DefaultEncoding); }
+               set { Set(KeyFileSaveEncoding, value); }
        }
 
-       public bool PrefsViewLineLengths {
-               get {
-                       if (!isValuePrefsViewLineLengthsCached) {
-                               this.valuePrefsViewLineLengths = GetBool(keyPrefsViewLineLengths, true);
-                               this.isValuePrefsViewLineLengthsCached = true;
-                       }
-                       return valuePrefsViewLineLengths;
-               }
-               set {
-                       Set(keyPrefsViewLineLengths, value);
-                       this.valuePrefsViewLineLengths = value;
-                       this.isValuePrefsViewLineLengthsCached = true;
-               }
+       public ConfigFileSaveFormatOption FileSaveFormatOption {
+               get { return (ConfigFileSaveFormatOption)GetEnumValue(KeyFileSaveFormatOption, 
ConfigFileSaveFormatOption.KeepExisting); }
+               set { Set(KeyFileSaveFormatOption, value.ToString()); }
        }
 
-       public int PrefsWindowHeight {
-               get { return GetInt(keyPrefsWindowHeight, 600, 200, true, 0, false); }
-               set { Set(keyPrefsWindowHeight, value); }
+       public ConfigFileSaveFormat FileSaveFormat {
+               get { return (ConfigFileSaveFormat)GetEnumValueFromSuperset(KeyFileSaveFormat, 
ConfigFileSaveFormat.Fixed); }
+               set { Set(KeyFileSaveFormat, value.ToString()); }
        }
 
-       public int PrefsWindowWidth {
-               get { return GetInt(keyPrefsWindowWidth, 690, 200, true, 0, false); }
-               set { Set(keyPrefsWindowWidth, value); }
+       /* Uses the same key as FileSaveFormat but is used when there's a specific format set */
+       public SubtitleType FileSaveFormatFixed {
+               get { return (SubtitleType)GetEnumValueFromSuperset(KeyFileSaveFormat, SubtitleType.SubRip); }
+               set { Set(KeyFileSaveFormat, value.ToString()); }
        }
 
-       public ConfigFileOpenEncodingOption PrefsDefaultsFileOpenEncodingOption {
-               get { return 
(ConfigFileOpenEncodingOption)GetEnumValue(keyPrefsDefaultsFileOpenEncodingOption, 
ConfigFileOpenEncodingOption.AutoDetect); }
-               set { Set(keyPrefsDefaultsFileOpenEncodingOption, value.ToString()); }
+       public ConfigFileSaveNewlineOption FileSaveNewlineOption {
+               get { return (ConfigFileSaveNewlineOption)GetEnumValue(KeyFileSaveNewlineOption, 
ConfigFileSaveNewlineOption.Specific); }
+               set { Set(KeyFileSaveNewlineOption, value.ToString()); }
        }
 
-       public ConfigFileOpenEncoding PrefsDefaultsFileOpenEncoding {
-               get { return 
(ConfigFileOpenEncoding)GetEnumValueFromSuperset(keyPrefsDefaultsFileOpenEncoding, 
ConfigFileOpenEncoding.Fixed); }
-               set { Set(keyPrefsDefaultsFileOpenEncoding, value.ToString()); }
+       public NewlineType FileSaveNewline {
+               get { return (NewlineType)GetEnumValue(KeyFileSaveNewline, NewlineType.Windows); }
+               set { Set(KeyFileSaveNewline, value.ToString()); }
        }
 
-       /* Uses the same key as PrefsDefaultsFileOpenEncoding but is used when there's a specific encoding 
set */
-       public string PrefsDefaultsFileOpenEncodingFixed {
-               get { return GetString(keyPrefsDefaultsFileOpenEncoding, "ISO-8859-15"); }
-               set { Set(keyPrefsDefaultsFileOpenEncoding, value); }
+       public bool FileTranslationSaveAll {
+               get { return GetBool(KeyFileTranslationSaveAll, true); }
+               set { Set(KeyFileTranslationSaveAll, value); }
        }
 
-       public ConfigFileOpenFallbackEncoding PrefsDefaultsFileOpenFallbackEncoding {
-               get { return 
(ConfigFileOpenFallbackEncoding)GetEnumValueFromSuperset(keyPrefsDefaultsFileOpenFallbackEncoding, 
ConfigFileOpenFallbackEncoding.Fixed); }
-               set { Set(keyPrefsDefaultsFileOpenFallbackEncoding, value.ToString()); }
+       public bool VideoAutoChooseFile {
+               get { return GetBool(KeyVideoAutoChooseFile, true); }
+               set { Set(KeyVideoAutoChooseFile, value); }
        }
 
-       /* Uses the same key as PrefsDefaultsFileOpenFallbackEncoding but is used when there's a specific 
encoding set */
-       public string PrefsDefaultsFileOpenFallbackEncodingFixed {
-               get { return GetString(keyPrefsDefaultsFileOpenFallbackEncoding, "ISO-8859-15"); }
-               set { Set(keyPrefsDefaultsFileOpenFallbackEncoding, value); }
+       public bool VideoApplyReactionDelay {
+               get {
+                       return GetBool(KeyVideoApplyReactionDelay, false);
+//                     if (!isValuePrefsVideoApplyReactionDelayCached) {
+//                             this.valuePrefsVideoApplyReactionDelay = GetBool(KeyVideoApplyReactionDelay, 
false);
+//                             this.isValuePrefsVideoApplyReactionDelayCached = true;
+//                     }
+//                     return valuePrefsVideoApplyReactionDelay;
+               }
+               set {
+                       Set(KeyVideoApplyReactionDelay, value);
+//                     this.valuePrefsVideoApplyReactionDelay = value;
+//                     this.isValuePrefsVideoApplyReactionDelayCached = true;
+               }
        }
 
-       public ConfigFileSaveEncodingOption PrefsDefaultsFileSaveEncodingOption {
-               get { return 
(ConfigFileSaveEncodingOption)GetEnumValue(keyPrefsDefaultsFileSaveEncodingOption, 
ConfigFileSaveEncodingOption.KeepExisting); }
-               set { Set(keyPrefsDefaultsFileSaveEncodingOption, value.ToString()); }
+       public int VideoReactionDelay {
+               get {
+                       return GetInt(KeyVideoReactionDelay, 200, 0, true, 2000, true);
+//                     if (this.valuePrefsVideoReactionDelay == -1) {
+//                             this.valuePrefsVideoReactionDelay = GetInt(KeyVideoReactionDelay, 200, 0, 
true, 2000, true);
+//                     }
+//                     return this.valuePrefsVideoReactionDelay;
+               }
+               set {
+                       Set(KeyVideoReactionDelay, value);
+//                     this.valuePrefsVideoReactionDelay = value;
+               }
        }
 
-       public ConfigFileSaveEncoding PrefsDefaultsFileSaveEncoding {
-               get { return 
(ConfigFileSaveEncoding)GetEnumValueFromSuperset(keyPrefsDefaultsFileSaveEncoding, 
ConfigFileSaveEncoding.Fixed); }
-               set { Set(keyPrefsDefaultsFileSaveEncoding, value.ToString()); }
+       public bool VideoSeekOnChange {
+               get {
+                       return GetBool(KeyVideoSeekOnChange, true);
+//                     if (!isValuePrefsVideoSeekOnChangeCached) {
+//                             this.valuePrefsVideoSeekOnChange = GetBool(KeyVideoSeekOnChange, true);
+//                             this.isValuePrefsVideoSeekOnChangeCached = true;
+//                     }
+//                     return valuePrefsVideoSeekOnChange;
+               }
+               set {
+                       Set(KeyVideoSeekOnChange, value);
+//                     this.valuePrefsVideoSeekOnChange = value;
+//                     this.isValuePrefsVideoSeekOnChangeCached = true;
+               }
        }
 
-       /* Uses the same key as PrefsDefaultsFileSaveEncoding but is used when there's a specific encoding 
set */
-       public string PrefsDefaultsFileSaveEncodingFixed {
-               get { return GetString(keyPrefsDefaultsFileSaveEncoding, "ISO-8859-15"); }
-               set { Set(keyPrefsDefaultsFileSaveEncoding, value); }
+       public int VideoSeekOnChangeRewind {
+               get {
+                       return GetInt(KeyVideoSeekOnChangeRewind, 200, 0, true, 2000, true);
+//                     if (this.valuePrefsVideoSeekOnChangeRewind == -1) {
+//                             this.valuePrefsVideoSeekOnChangeRewind = GetInt(KeyVideoSeekOnChangeRewind, 
200, 0, true, 2000, true);
+//                     }
+//                     return this.valuePrefsVideoSeekOnChangeRewind;
+               }
+               set {
+                       Set(KeyVideoSeekOnChangeRewind, value);
+//                     this.valuePrefsVideoSeekOnChangeRewind = value;
+               }
        }
 
-       public ConfigFileSaveFormatOption PrefsDefaultsFileSaveFormatOption {
-               get { return (ConfigFileSaveFormatOption)GetEnumValue(keyPrefsDefaultsFileSaveFormatOption, 
ConfigFileSaveFormatOption.KeepExisting); }
-               set { Set(keyPrefsDefaultsFileSaveFormatOption, value.ToString()); }
+       public bool ViewLineLengths {
+               get {
+                       return GetBool(KeyViewLineLengths, true);
+//                     if (!isValuePrefsViewLineLengthsCached) {
+//                             this.valuePrefsViewLineLengths = GetBool(KeyViewLineLengths, true);
+//                             this.isValuePrefsViewLineLengthsCached = true;
+//                     }
+//                     return valuePrefsViewLineLengths;
+               }
+               set {
+                       Set(KeyViewLineLengths, value);
+//                     this.valuePrefsViewLineLengths = value;
+//                     this.isValuePrefsViewLineLengthsCached = true;
+               }
        }
 
-       public ConfigFileSaveFormat PrefsDefaultsFileSaveFormat {
-               get { return (ConfigFileSaveFormat)GetEnumValueFromSuperset(keyPrefsDefaultsFileSaveFormat, 
ConfigFileSaveFormat.Fixed); }
-               set { Set(keyPrefsDefaultsFileSaveFormat, value.ToString()); }
+       public int ViewWindowHeight {
+               get { return GetInt(KeyViewWindowHeight, 600, 200, true, 0, false); }
+               set { Set(KeyViewWindowHeight, value); }
        }
 
-       /* Uses the same key as PrefsDefaultsFileSaveFormat but is used when there's a specific format set */
-       public SubtitleType PrefsDefaultsFileSaveFormatFixed {
-               get { return (SubtitleType)GetEnumValueFromSuperset(keyPrefsDefaultsFileSaveFormat, 
SubtitleType.SubRip); }
-               set { Set(keyPrefsDefaultsFileSaveFormat, value.ToString()); }
+       public int ViewWindowWidth {
+               get { return GetInt(KeyViewWindowWidth, 690, 200, true, 0, false); }
+               set { Set(KeyViewWindowWidth, value); }
        }
 
-       public ConfigFileSaveNewlineOption PrefsDefaultsFileSaveNewlineOption {
-               get { return (ConfigFileSaveNewlineOption)GetEnumValue(keyPrefsDefaultsFileSaveNewlineOption, 
ConfigFileSaveNewlineOption.Specific); }
-               set { Set(keyPrefsDefaultsFileSaveNewlineOption, value.ToString()); }
+       public string SpellCheckTextLanguage {
+               get { return GetString(KeySpellCheckTextLanguage, String.Empty); }
+               set { Set(KeySpellCheckTextLanguage, value); }
        }
 
-       public NewlineType PrefsDefaultsFileSaveNewline {
-               get { return (NewlineType)GetEnumValue(keyPrefsDefaultsFileSaveNewline, NewlineType.Windows); 
}
-               set { Set(keyPrefsDefaultsFileSaveNewline, value.ToString()); }
+       public string SpellCheckTranslationLanguage {
+               get { return GetString(KeySpellCheckTranslationLanguage, String.Empty); }
+               set { Set(KeySpellCheckTranslationLanguage, value); }
        }
 
-       public bool PrefsTranslationSaveAll {
-               get { return GetBool(keyPrefsTranslationSaveAll, true); }
-               set { Set(keyPrefsTranslationSaveAll, value); }
+       public bool SpellCheckAuto {
+               get { return GetBool(KeySpellCheckAuto, false); }
+               set { Set(KeySpellCheckAuto, value); }
        }
 
        //Even though the default in gconf schema is true, if gconf is not working we're using false
-       public bool PrefsBackupAutoBackup {
-               get { return GetBool(keyPrefsBackupAutoBackup, false); }
-               set { Set(keyPrefsBackupAutoBackup, value); }
+       public bool BackupAuto {
+               get { return GetBool(KeyBackupAuto, false); }
+               set { Set(KeyBackupAuto, value); }
        }
 
-       public int PrefsBackupBackupTime {
-               get { return GetInt(keyPrefsBackupBackupTime, 120, 30, true, 0, false); }
-               set { Set(keyPrefsBackupBackupTime, value); }
+       public int BackupTime {
+               get { return GetInt(KeyBackupTime, 120, 30, true, 0, false); }
+               set { Set(KeyBackupTime, value); }
        }
 
        /* Time in milliseconds */
-       public int PrefsTimingsTimeStep {
+       public int TimingsTimeStep {
                get {
-                       if (this.valuePrefsTimingsTimeStep == -1) {
-                               this.valuePrefsTimingsTimeStep = GetInt(keyPrefsTimingsTimeStep, 100, 1, 
true, 2000, true);
-                       }
-                       return this.valuePrefsTimingsTimeStep;
+                       return GetInt(KeyTimingsTimeStep, 100, 1, true, 2000, true);
+//                     if (this.valuePrefsTimingsTimeStep == -1) {
+//                             this.valuePrefsTimingsTimeStep = GetInt(KeyTimingsTimeStep, 100, 1, true, 
2000, true);
+//                     }
+//                     return this.valuePrefsTimingsTimeStep;
                }
                set {
-                       Set(keyPrefsTimingsTimeStep, value);
-                       this.valuePrefsTimingsTimeStep = value;
+                       Set(KeyTimingsTimeStep, value);
+//                     this.valuePrefsTimingsTimeStep = value;
                }
        }
 
-       public int PrefsTimingsFramesStep {
+       public int TimingsFramesStep {
                get {
-                       if (this.valuePrefsTimingsFramesStep == -1) {
-                               this.valuePrefsTimingsFramesStep = GetInt(keyPrefsTimingsFramesStep, 2, 1, 
true, 60, true);
-                       }
-                       return this.valuePrefsTimingsFramesStep;
+                       return GetInt(KeyTimingsFramesStep, 2, 1, true, 60, true);
+//                     if (this.valuePrefsTimingsFramesStep == -1) {
+//                             this.valuePrefsTimingsFramesStep = GetInt(KeyTimingsFramesStep, 2, 1, true, 
60, true);
+//                     }
+//                     return this.valuePrefsTimingsFramesStep;
                }
                set {
-                       Set(keyPrefsTimingsFramesStep, value);
-                       this.valuePrefsTimingsFramesStep = value;
+                       Set(KeyTimingsFramesStep, value);
+//                     this.valuePrefsTimingsFramesStep = value;
                }
        }
 
-       public int PrefsTimingsTimeBetweenSubtitles {
+       public int TimingsTimeBetweenSubtitles {
                get {
-                       if (this.valuePrefsTimingsTimeBetweenSubtitles == -1) {
-                               this.valuePrefsTimingsTimeBetweenSubtitles = 
GetInt(keyPrefsTimingsTimeBetweenSubtitles, 100, 0, true, 2000, true);
-                       }
-                       return this.valuePrefsTimingsTimeBetweenSubtitles;
+                       return GetInt(KeyTimingsTimeBetweenSubtitles, 100, 0, true, 2000, true);
+//                     if (this.valuePrefsTimingsTimeBetweenSubtitles == -1) {
+//                             this.valuePrefsTimingsTimeBetweenSubtitles = 
GetInt(KeyTimingsTimeBetweenSubtitles, 100, 0, true, 2000, true);
+//                     }
+//                     return this.valuePrefsTimingsTimeBetweenSubtitles;
                }
                set {
-                       Set(keyPrefsTimingsTimeBetweenSubtitles, value);
-                       this.valuePrefsTimingsTimeBetweenSubtitles = value;
+                       Set(KeyTimingsTimeBetweenSubtitles, value);
+//                     this.valuePrefsTimingsTimeBetweenSubtitles = value;
                }
        }
 
@@ -337,7 +357,7 @@ public class Config {
 
        private string GetString (string key, string defaultValue) {
                try {
-                       return (string)client.Get(key);
+                       return settings.GetString(key);
                }
                catch (Exception e) {
                        Console.Error.WriteLine(e);
@@ -347,7 +367,7 @@ public class Config {
 
        private bool GetBool (string key, bool defaultValue) {
                try {
-                       return (bool)client.Get(key);
+                       return settings.GetBoolean(key);
                }
                catch (Exception e) {
                        Console.Error.WriteLine(e);
@@ -357,7 +377,7 @@ public class Config {
 
        private int GetInt (string key, int defaultValue, int lowerLimit, bool useLowerLimit, int upperLimit, 
bool useUpperLimit) {
                try {
-                       int number = (int)client.Get(key);
+                       int number = settings.GetInt(key);
                        if (useLowerLimit && (number < lowerLimit))
                                return defaultValue;
 
@@ -374,7 +394,7 @@ public class Config {
 
        private string[] GetStrings (string key, string[] defaultValue) {
                try {
-                       string[] strings = client.Get(key) as string[];
+                       string[] strings = settings.GetStrv(key);
                        if ((strings.Length == 1) && (strings[0] == String.Empty))
                                return new string[0];
                        else
@@ -389,7 +409,7 @@ public class Config {
        /* Gets an enum value from a field which can hold a value not included in the enum (basically assumes 
an exception can occur). */
        private Enum GetEnumValueFromSuperset (string key, Enum defaultValue) {
                try {
-                       string stringValue = (string)client.Get(key);
+                       string stringValue = settings.GetString(key);
                        return (Enum)Enum.Parse(defaultValue.GetType(), stringValue);
                }
                catch (Exception) {
@@ -399,7 +419,7 @@ public class Config {
 
        private Enum GetEnumValue (string key, Enum defaultValue) {
                try {
-                       string stringValue = (string)client.Get(key);
+                       string stringValue = settings.GetString(key);
                        return (Enum)Enum.Parse(defaultValue.GetType(), stringValue);
                }
                catch (Exception e) {
@@ -409,17 +429,41 @@ public class Config {
        }
 
        private void SetStrings (string key, string[] values) {
-               if (values.Length == 0) {
-                       string[] newValues = { String.Empty };
-                       Set(key, newValues);
+               try {
+                       settings.SetStrv(key, values);
+               }
+               catch (Exception e) {
+                       Console.Error.WriteLine(e);
+               }
+//             if (values.Length == 0) {
+//                     string[] newValues = { String.Empty };
+//                     Set(key, newValues);
+//             }
+//             else
+//                     Set(key, values);
+       }
+
+       private void Set(string key, string value) {
+               try {
+                       settings.SetString(key, value);
+               }
+               catch (Exception e) {
+                       Console.Error.WriteLine(e);
+               }
+       }
+
+       private void Set(string key, bool value) {
+               try {
+                       settings.SetBoolean(key, value);
+               }
+               catch (Exception e) {
+                       Console.Error.WriteLine(e);
                }
-               else
-                       Set(key, values);
        }
 
-       private void Set (string key, object val) {
+       private void Set(string key, int value) {
                try {
-                       client.Set(key, val);
+                       settings.SetInt(key, value);
                }
                catch (Exception e) {
                        Console.Error.WriteLine(e);
diff --git a/src/GnomeSubtitles/Core/Document.cs b/src/GnomeSubtitles/Core/Document.cs
index 44f60bf..f001e5a 100644
--- a/src/GnomeSubtitles/Core/Document.cs
+++ b/src/GnomeSubtitles/Core/Document.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2010 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -160,7 +160,7 @@ public class Document {
                AddExtraSubtitles(openedTranslation);
 
                Translations translations = new Translations();
-               translations.Import(subtitles, openedTranslation, 
Base.Config.PrefsTimingsTimeBetweenSubtitles);
+               translations.Import(subtitles, openedTranslation, Base.Config.TimingsTimeBetweenSubtitles);
 
                if (newTranslationFile.SubtitleType != SubtitleType.Unknown)
                        canTranslationBeSaved = true;
@@ -263,11 +263,11 @@ public class Document {
        }
 
        private Encoding GetFallbackEncoding () {
-               ConfigFileOpenFallbackEncoding fallbackEncodingConfig = 
Base.Config.PrefsDefaultsFileOpenFallbackEncoding;
+               ConfigFileOpenFallbackEncoding fallbackEncodingConfig = Base.Config.FileOpenFallbackEncoding;
                if (fallbackEncodingConfig == ConfigFileOpenFallbackEncoding.CurrentLocale)
                        return Encoding.GetEncoding(Encodings.SystemDefault.CodePage);
                else {
-                       string encodingName = Base.Config.PrefsDefaultsFileOpenFallbackEncodingFixed;
+                       string encodingName = Base.Config.FileOpenFallbackEncodingFixed;
                        EncodingDescription encodingDescription = EncodingDescription.Empty;
                        Encodings.Find(encodingName, ref encodingDescription);
                        return Encoding.GetEncoding(encodingDescription.CodePage);
diff --git a/src/GnomeSubtitles/Core/EventHandlers.cs b/src/GnomeSubtitles/Core/EventHandlers.cs
index 8e9c957..ee4f823 100644
--- a/src/GnomeSubtitles/Core/EventHandlers.cs
+++ b/src/GnomeSubtitles/Core/EventHandlers.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -48,7 +48,7 @@ public class EventHandlers {
        public void OnFileSave (object o, EventArgs args) {
                Base.Ui.Save();
 
-               if (Base.Document.IsTranslationLoaded && Base.Config.PrefsTranslationSaveAll) {
+               if (Base.Document.IsTranslationLoaded && Base.Config.FileTranslationSaveAll) {
                        OnFileTranslationSave(o, args);
                }
        }
@@ -56,7 +56,7 @@ public class EventHandlers {
        public void OnFileSaveAs (object o, EventArgs args) {
                Base.Ui.SaveAs();
 
-               if (Base.Document.IsTranslationLoaded && Base.Config.PrefsTranslationSaveAll) {
+               if (Base.Document.IsTranslationLoaded && Base.Config.FileTranslationSaveAll) {
                        OnFileTranslationSave(o, args);
                }
        }
@@ -191,7 +191,7 @@ public class EventHandlers {
 
        public void OnViewLineLengthsToggled (object o, EventArgs args) {
                CheckMenuItem menuItem = o as CheckMenuItem;
-               Base.Config.PrefsViewLineLengths = menuItem.Active;
+               Base.Config.ViewLineLengths = menuItem.Active;
        }
 
        public void OnViewVideo (object o, EventArgs args) {
@@ -305,15 +305,15 @@ public class EventHandlers {
        public void OnVideoSetSubtitleStart (object o, EventArgs args) {
                if (Base.TimingMode == TimingMode.Times) {
                        TimeSpan time = Base.Ui.Video.Position.CurrentTime;
-                       if (Base.Ui.Video.IsStatePlaying && Base.Config.PrefsVideoApplyReactionDelay) {
-                               time -= TimeSpan.FromMilliseconds(Base.Config.PrefsVideoReactionDelay);
+                       if (Base.Ui.Video.IsStatePlaying && Base.Config.VideoApplyReactionDelay) {
+                               time -= TimeSpan.FromMilliseconds(Base.Config.VideoReactionDelay);
                        }
                        Base.CommandManager.Execute(new VideoSetSubtitleStartCommand(time));
                }
                else {
                        int frames = Base.Ui.Video.Position.CurrentFrames;
-                       if (Base.Ui.Video.IsStatePlaying && Base.Config.PrefsVideoApplyReactionDelay) {
-                               frames -= 
(int)TimingUtil.TimeMillisecondsToFrames(Base.Config.PrefsVideoReactionDelay, Base.Ui.Video.FrameRate);
+                       if (Base.Ui.Video.IsStatePlaying && Base.Config.VideoApplyReactionDelay) {
+                               frames -= 
(int)TimingUtil.TimeMillisecondsToFrames(Base.Config.VideoReactionDelay, Base.Ui.Video.FrameRate);
                        }
                        Base.CommandManager.Execute(new VideoSetSubtitleStartCommand(frames));
                }
@@ -322,33 +322,37 @@ public class EventHandlers {
        public void OnVideoSetSubtitleEnd (object o, EventArgs args) {
                if (Base.TimingMode == TimingMode.Times) {
                        TimeSpan time = Base.Ui.Video.Position.CurrentTime;
-                       if (Base.Ui.Video.IsStatePlaying && Base.Config.PrefsVideoApplyReactionDelay) {
-                               time -= TimeSpan.FromMilliseconds(Base.Config.PrefsVideoReactionDelay);
+                       if (Base.Ui.Video.IsStatePlaying && Base.Config.VideoApplyReactionDelay) {
+                               time -= TimeSpan.FromMilliseconds(Base.Config.VideoReactionDelay);
                        }
                        Base.CommandManager.Execute(new VideoSetSubtitleEndCommand(time));
                }
                else {
                        int frames = Base.Ui.Video.Position.CurrentFrames;
-                       if (Base.Ui.Video.IsStatePlaying && Base.Config.PrefsVideoApplyReactionDelay) {
-                               frames -= 
(int)TimingUtil.TimeMillisecondsToFrames(Base.Config.PrefsVideoReactionDelay, Base.Ui.Video.FrameRate);
+                       if (Base.Ui.Video.IsStatePlaying && Base.Config.VideoApplyReactionDelay) {
+                               frames -= 
(int)TimingUtil.TimeMillisecondsToFrames(Base.Config.VideoReactionDelay, Base.Ui.Video.FrameRate);
                        }
                        Base.CommandManager.Execute(new VideoSetSubtitleEndCommand(frames));
                }
        }
 
-       public void OnVideoSetSubtitleStartEnd (object o, EventArgs args) {
+       public void OnVideoSetSubtitleStartEndButtonPress (object o, ButtonPressEventArgs args) {
+               OnVideoSetSubtitleStart(o, args);
+       }
+
+       public void OnVideoSetSubtitleStartEndButtonRelease (object o, ButtonReleaseEventArgs args) {
                if (Base.TimingMode == TimingMode.Times) {
                        TimeSpan time = Base.Ui.Video.Position.CurrentTime;
-                       if (Base.Ui.Video.IsStatePlaying && Base.Config.PrefsVideoApplyReactionDelay) {
-                               time -= TimeSpan.FromMilliseconds(Base.Config.PrefsVideoReactionDelay);
+                       if (Base.Ui.Video.IsStatePlaying && Base.Config.VideoApplyReactionDelay) {
+                               time -= TimeSpan.FromMilliseconds(Base.Config.VideoReactionDelay);
                        }
                        Base.CommandManager.Execute(new VideoSetSubtitleEndCommand(time));
                        Base.Ui.View.SelectNextSubtitle();
                }
                else {
                        int frames = Base.Ui.Video.Position.CurrentFrames;
-                       if (Base.Ui.Video.IsStatePlaying && Base.Config.PrefsVideoApplyReactionDelay) {
-                               frames -= 
(int)TimingUtil.TimeMillisecondsToFrames(Base.Config.PrefsVideoReactionDelay, Base.Ui.Video.FrameRate);
+                       if (Base.Ui.Video.IsStatePlaying && Base.Config.VideoApplyReactionDelay) {
+                               frames -= 
(int)TimingUtil.TimeMillisecondsToFrames(Base.Config.VideoReactionDelay, Base.Ui.Video.FrameRate);
                        }
                        Base.CommandManager.Execute(new VideoSetSubtitleEndCommand(frames));
                        Base.Ui.View.SelectNextSubtitle();
@@ -364,7 +368,7 @@ public class EventHandlers {
 
        public void OnVideoSetSubtitleStartEndKeyRelease (object o, KeyReleaseEventArgs args) {
                if (buttonStartEndKeyPressed){
-                       OnVideoSetSubtitleStartEnd(o, args);
+                       OnVideoSetSubtitleStartEndButtonRelease(o, null);
                        buttonStartEndKeyPressed = false;
                }
        }
@@ -400,7 +404,7 @@ public class EventHandlers {
        }
 
        public void OnHelpKeyboardShortcuts (object o, EventArgs args) {
-               Util.OpenUrl("http://gnomesubtitles.org/shortcuts";);
+               Util.OpenUrl("http://www.gnomesubtitles.org/shortcuts";);
        }
 
        public void OnHelpRequestFeature (object o, EventArgs args) {
@@ -424,8 +428,8 @@ public class EventHandlers {
     }
 
     public void OnSizeAllocated (object o, SizeAllocatedArgs args) {
-       Base.Config.PrefsWindowWidth = args.Allocation.Width;
-       Base.Config.PrefsWindowHeight = args.Allocation.Height;
+       Base.Config.ViewWindowWidth = args.Allocation.Width;
+       Base.Config.ViewWindowHeight = args.Allocation.Height;
     }
 
 
@@ -490,8 +494,8 @@ public class EventHandlers {
                        return;
 
                Subtitle subtitle = Base.Ui.View.Selection.Subtitle;
-               if ((Base.TimingModeIsTimes && (subtitle.Times.Start >= 
TimeSpan.FromMilliseconds(Base.Config.PrefsTimingsTimeStep)))
-                               || (!Base.TimingModeIsTimes) && (subtitle.Frames.Start >= 
Base.Config.PrefsTimingsFramesStep)){
+               if ((Base.TimingModeIsTimes && (subtitle.Times.Start >= 
TimeSpan.FromMilliseconds(Base.Config.TimingsTimeStep)))
+                               || (!Base.TimingModeIsTimes) && (subtitle.Frames.Start >= 
Base.Config.TimingsFramesStep)){
 
                        Base.Ui.Edit.SpinButtons.StartSpinButtonDecreaseStep();
                }
@@ -509,8 +513,8 @@ public class EventHandlers {
                        return;
 
                Subtitle subtitle = Base.Ui.View.Selection.Subtitle;
-               if ((Base.TimingModeIsTimes && (subtitle.Times.End >= 
TimeSpan.FromMilliseconds(Base.Config.PrefsTimingsTimeStep)))
-                               || (!Base.TimingModeIsTimes) && (subtitle.Frames.End >= 
Base.Config.PrefsTimingsFramesStep)){
+               if ((Base.TimingModeIsTimes && (subtitle.Times.End >= 
TimeSpan.FromMilliseconds(Base.Config.TimingsTimeStep)))
+                               || (!Base.TimingModeIsTimes) && (subtitle.Frames.End >= 
Base.Config.TimingsFramesStep)){
 
                        Base.Ui.Edit.SpinButtons.EndSpinButtonDecreaseStep();
                }
@@ -522,10 +526,10 @@ public class EventHandlers {
                        return;
 
                if (Base.TimingModeIsTimes) {
-                       Base.CommandManager.Execute(new 
ShiftTimingsCommand(TimeSpan.FromMilliseconds(Base.Config.PrefsTimingsTimeStep), SelectionIntended.Simple));
+                       Base.CommandManager.Execute(new 
ShiftTimingsCommand(TimeSpan.FromMilliseconds(Base.Config.TimingsTimeStep), SelectionIntended.Simple));
                }
                else {
-                       Base.CommandManager.Execute(new 
ShiftTimingsCommand(Base.Config.PrefsTimingsFramesStep, SelectionIntended.Simple));
+                       Base.CommandManager.Execute(new ShiftTimingsCommand(Base.Config.TimingsFramesStep, 
SelectionIntended.Simple));
                }
        }
 
@@ -537,13 +541,13 @@ public class EventHandlers {
                        return;
 
                if (Base.TimingModeIsTimes) {
-                       TimeSpan timeStep = TimeSpan.FromMilliseconds(Base.Config.PrefsTimingsTimeStep);
+                       TimeSpan timeStep = TimeSpan.FromMilliseconds(Base.Config.TimingsTimeStep);
                        if (firstSelectedSubtitle.Times.Start >= timeStep) {
                                Base.CommandManager.Execute(new ShiftTimingsCommand(timeStep.Negate(), 
SelectionIntended.Simple));
                        }
                }
                else {
-                       int framesStep = Base.Config.PrefsTimingsFramesStep;
+                       int framesStep = Base.Config.TimingsFramesStep;
                        if (firstSelectedSubtitle.Frames.Start >= framesStep) {
                                Base.CommandManager.Execute(new ShiftTimingsCommand(-framesStep, 
SelectionIntended.Simple));
                        }
diff --git a/src/GnomeSubtitles/Core/SpellLanguages.cs b/src/GnomeSubtitles/Core/SpellLanguages.cs
index bb038bb..bdef2d1 100644
--- a/src/GnomeSubtitles/Core/SpellLanguages.cs
+++ b/src/GnomeSubtitles/Core/SpellLanguages.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2008-2009 Pedro Castro
+ * Copyright (C) 2008-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -87,7 +87,7 @@ public class SpellLanguages {
                set {
                        if (value != enabled) {
                                enabled = value;
-                               Base.Config.PrefsSpellCheckAutocheck = value;
+                               Base.Config.SpellCheckAuto = value;
                                EmitToggleEnabled();
                        }
                }
@@ -177,22 +177,22 @@ public class SpellLanguages {
        }
 
        private void GetActiveLanguagesFromConfig () {
-               string activeTextLanguage = Base.Config.PrefsSpellCheckActiveTextLanguage;
+               string activeTextLanguage = Base.Config.SpellCheckTextLanguage;
                this.activeTextLanguageIndex = GetLanguageIndex(activeTextLanguage);
 
-               string activeTranslationLanguage = Base.Config.PrefsSpellCheckActiveTranslationLanguage;
+               string activeTranslationLanguage = Base.Config.SpellCheckTranslationLanguage;
                this.activeTranslationLanguageIndex = GetLanguageIndex(activeTranslationLanguage);
        }
 
        private void GetEnabledFromConfig () {
-               this.enabled = Base.Config.PrefsSpellCheckAutocheck;
+               this.enabled = Base.Config.SpellCheckAuto;
        }
 
        private void SetActiveLanguageInConfig (SubtitleTextType textType, string activeLanguage) {
                if (textType == SubtitleTextType.Text)
-                       Base.Config.PrefsSpellCheckActiveTextLanguage = activeLanguage;
+                       Base.Config.SpellCheckTextLanguage = activeLanguage;
                else
-                       Base.Config.PrefsSpellCheckActiveTranslationLanguage = activeLanguage;
+                       Base.Config.SpellCheckTranslationLanguage = activeLanguage;
        }
 
        private int GetLanguageIndex (string languageID) {
diff --git a/src/GnomeSubtitles/Core/Util.cs b/src/GnomeSubtitles/Core/Util.cs
index 9467d52..6ad650d 100644
--- a/src/GnomeSubtitles/Core/Util.cs
+++ b/src/GnomeSubtitles/Core/Util.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -115,13 +115,13 @@ public class Util {
        }
 
        public static void SetSpinButtonAdjustment (SpinButton spinButton, TimeSpan upperLimit, bool 
canNegate) {
-               spinButton.Adjustment.StepIncrement = Base.Config.PrefsTimingsTimeStep; //milliseconds
+               spinButton.Adjustment.StepIncrement = Base.Config.TimingsTimeStep; //milliseconds
                spinButton.Adjustment.Upper = (upperLimit != TimeSpan.Zero ? upperLimit.TotalMilliseconds : 
86399999);
                spinButton.Adjustment.Lower = (canNegate ? -spinButton.Adjustment.Upper : 0);
        }
 
        public static void SetSpinButtonAdjustment (SpinButton spinButton, int upperLimit, bool canNegate) {
-               spinButton.Adjustment.StepIncrement = Base.Config.PrefsTimingsFramesStep; //frames
+               spinButton.Adjustment.StepIncrement = Base.Config.TimingsFramesStep; //frames
                spinButton.Adjustment.Upper = (upperLimit != 0 ? upperLimit : 3000000);
                spinButton.Adjustment.Lower = (canNegate ? -spinButton.Adjustment.Upper : 0);
        }
diff --git a/src/GnomeSubtitles/Dialog/AboutDialog.cs b/src/GnomeSubtitles/Dialog/AboutDialog.cs
index 133b54f..2bd4574 100644
--- a/src/GnomeSubtitles/Dialog/AboutDialog.cs
+++ b/src/GnomeSubtitles/Dialog/AboutDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2009 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -23,7 +23,7 @@ using System;
 
 namespace GnomeSubtitles.Dialog {
 
-public class AboutDialog : GladeDialog {
+public class AboutDialog : BuilderDialog {
        private Gtk.AboutDialog dialog = null;
 
        /* Constant strings */
@@ -43,12 +43,12 @@ public class AboutDialog : GladeDialog {
 
        /// <summary>Sets the Url and Email hooks. These must be set before the dialog is realized.</summary>
        private void SetHooks () {
-               Gtk.AboutDialog.SetUrlHook(AboutDialogOpenUrl);
-               Gtk.AboutDialog.SetEmailHook(AboutDialogOpenEmail);
+//             Gtk.AboutDialog.SetUrlHook(AboutDialogOpenUrl); //FIXME
+//             Gtk.AboutDialog.SetEmailHook(AboutDialogOpenEmail); //FIXME
        }
 
-       private void AboutDialogOpenUrl (Gtk.AboutDialog about, string url) {
-               Core.Util.OpenUrl(url);
+       private void AboutDialogOpenUrl (object o, ActivateLinkArgs args) {
+               //Core.Util.OpenUrl(url); / //FIXME
        }
 
        private void AboutDialogOpenEmail (Gtk.AboutDialog about, string email) {
diff --git a/src/GnomeSubtitles/Dialog/GladeDialog.cs b/src/GnomeSubtitles/Dialog/BuilderDialog.cs
similarity index 68%
rename from src/GnomeSubtitles/Dialog/GladeDialog.cs
rename to src/GnomeSubtitles/Dialog/BuilderDialog.cs
index dca4aca..80577bb 100644
--- a/src/GnomeSubtitles/Dialog/GladeDialog.cs
+++ b/src/GnomeSubtitles/Dialog/BuilderDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2009 Pedro Castro
+ * Copyright (C) 2006-2009,2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,24 +20,26 @@
 using GnomeSubtitles.Core;
 using Gtk;
 using System;
+using System.IO;
+using System.Reflection;
 
 namespace GnomeSubtitles.Dialog {
 
-public abstract class GladeDialog : BaseDialog {
-       private Glade.XML glade = null;
+public abstract class BuilderDialog : BaseDialog {
+       private Builder builder = null;
 
-       /// <summary>Creates a new instance of the <see cref="GladeDialog" /> class.</summary>
+       /// <summary>Creates a new instance of the <see cref="BuilderDialog" /> class.</summary>
        /// <remarks>The dialog isn't initialized. A call to <see cref="Init" /> is required to initialize 
this class.
        /// This is useful if one needs to do some operations before creating the dialog.</remarks>
-       protected GladeDialog () {
+       protected BuilderDialog () {
        }
 
-       /// <summary>Creates a new instance of the <see cref="GladeDialog" /> class, given the filename of 
the dialog.</summary>
+       /// <summary>Creates a new instance of the <see cref="BuilderDialog" /> class, given the filename of 
the dialog.</summary>
        /// <param name="filename">The filename of the dialog.</param>
-       protected GladeDialog (string filename) : this(filename, true) {
+       protected BuilderDialog (string filename) : this(filename, true) {
        }
 
-       protected GladeDialog (string filename, bool autoconnect) {
+       protected BuilderDialog (string filename, bool autoconnect) {
                Init(filename, autoconnect);
        }
 
@@ -49,18 +51,19 @@ public abstract class GladeDialog : BaseDialog {
        /// <remarks>Constructing creates the dialog from its filename, autoconnects the handlers,
        /// sets the icon and also sets the dialog as transient for the main window.</summary>
        protected void Init (string filename, bool autoconnect) {
-               glade = new Glade.XML(null, filename, null, Base.ExecutionContext.TranslationDomain);
+               builder = new Builder(filename, Base.ExecutionContext.TranslationDomain);
 
                if (autoconnect)
                        Autoconnect();
-               else
-                       glade.BindFields(this);
-
-               base.Init(glade.GetWidget("dialog") as Gtk.Dialog);
+               /*else
+                       glade.BindFields(this); //FIXME WHAT?
+*/
+               //base.Init(glade.GetWidget("dialog") as Gtk.Dialog);
+               base.Init(builder.GetObject("dialog") as Gtk.Dialog);
        }
 
        protected void Autoconnect () {
-               glade.Autoconnect(this);
+               builder.Autoconnect(this);
        }
 
 }
diff --git a/src/GnomeSubtitles/Dialog/EncodingsDialog.cs b/src/GnomeSubtitles/Dialog/EncodingsDialog.cs
index 42e4e90..e67fa9a 100644
--- a/src/GnomeSubtitles/Dialog/EncodingsDialog.cs
+++ b/src/GnomeSubtitles/Dialog/EncodingsDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2007-2010 Pedro Castro
+ * Copyright (C) 2007-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -19,14 +19,14 @@
 
 using GnomeSubtitles.Core;
 using GnomeSubtitles.Dialog;
-using Glade;
+//using Glade;
 using Gtk;
 using Mono.Unix;
 using System;
 
 namespace GnomeSubtitles.Dialog {
 
-public class EncodingsDialog : GladeDialog {
+public class EncodingsDialog : BuilderDialog {
        private string[] chosenNames = new string[0];
 
        /* Constant strings */
@@ -38,10 +38,10 @@ public class EncodingsDialog : GladeDialog {
 
        /* Widgets */
 
-       [WidgetAttribute] private TreeView availableTreeView = null;
-       [WidgetAttribute] private TreeView shownTreeView = null;
-       [WidgetAttribute] private Button buttonAdd = null;
-       [WidgetAttribute] private Button buttonRemove = null;
+       [Builder.Object] private TreeView availableTreeView = null;
+       [Builder.Object] private TreeView shownTreeView = null;
+       [Builder.Object] private Button buttonAdd = null;
+       [Builder.Object] private Button buttonRemove = null;
 
        public EncodingsDialog () : base(gladeFilename) {
                FillAvailableEncodings();
@@ -72,7 +72,7 @@ public class EncodingsDialog : GladeDialog {
        private void FillShownEncodings () {
                SetColumns(shownTreeView);
 
-               chosenNames = Base.Config.PrefsEncodingsShownInMenu;
+               chosenNames = Base.Config.FileEncodingsShownInMenu;
 
                ListStore store = new ListStore(typeof(string), typeof(string));
                foreach (string shownEncoding in chosenNames) {
@@ -175,7 +175,7 @@ public class EncodingsDialog : GladeDialog {
 
        private void UpdateShownEncodingsPrefs () {
                chosenNames = GetShownNames();
-               Base.Config.PrefsEncodingsShownInMenu = chosenNames;
+               Base.Config.FileEncodingsShownInMenu = chosenNames;
        }
 
 
diff --git a/src/GnomeSubtitles/Dialog/FileOpenDialog.cs b/src/GnomeSubtitles/Dialog/FileOpenDialog.cs
index 11b3840..32a5ef2 100644
--- a/src/GnomeSubtitles/Dialog/FileOpenDialog.cs
+++ b/src/GnomeSubtitles/Dialog/FileOpenDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2010 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@
 using GnomeSubtitles.Core;
 using GnomeSubtitles.Ui.Component;
 using GnomeSubtitles.Ui.VideoPreview;
-using Glade;
+//using Glade;
 using Gtk;
 using Mono.Unix;
 using SubLib.Core.Domain;
@@ -32,7 +32,7 @@ using System.Text.RegularExpressions;
 
 namespace GnomeSubtitles.Dialog {
 
-public class FileOpenDialog : GladeDialog {
+public class FileOpenDialog : BuilderDialog {
        protected FileChooserDialog dialog = null;
 
        private string chosenFilename = String.Empty;
@@ -49,9 +49,9 @@ public class FileOpenDialog : GladeDialog {
        private EncodingComboBox encodingComboBox = null;
 
        /* Widgets */
-       [WidgetAttribute] private ComboBox fileEncodingComboBox = null;
-       [WidgetAttribute] private ComboBox videoComboBox = null;
-       [WidgetAttribute] private Label videoLabel = null;
+       [Builder.Object] private ComboBoxText fileEncodingComboBox = null;
+       [Builder.Object] private ComboBoxText videoComboBox = null;
+       [Builder.Object] private Label videoLabel = null;
 
 
        public FileOpenDialog () : this(true, Catalog.GetString("Open File")) {
@@ -74,9 +74,9 @@ public class FileOpenDialog : GladeDialog {
 
        private void InitEncodingComboBox () {
                int fixedEncoding = -1;
-               ConfigFileOpenEncoding encodingConfig = Base.Config.PrefsDefaultsFileOpenEncoding;
+               ConfigFileOpenEncoding encodingConfig = Base.Config.FileOpenEncoding;
                if (encodingConfig == ConfigFileOpenEncoding.Fixed) {
-                       string encodingName = Base.Config.PrefsDefaultsFileOpenEncodingFixed;
+                       string encodingName = Base.Config.FileOpenEncodingFixed;
                        EncodingDescription encodingDescription = EncodingDescription.Empty;
                        Encodings.Find(encodingName, ref encodingDescription);
                        fixedEncoding = encodingDescription.CodePage;
@@ -230,7 +230,7 @@ public class FileOpenDialog : GladeDialog {
                videoLabel.Visible = true;
                videoComboBox.Visible = true;
 
-               autoChooseVideoFile = Base.Config.PrefsVideoAutoChooseFile;
+               autoChooseVideoFile = Base.Config.VideoAutoChooseFile;
                videoComboBox.RowSeparatorFunc = ComboBoxUtil.SeparatorFunc;
 
                dialog.CurrentFolderChanged += OnCurrentFolderChanged;
@@ -283,13 +283,13 @@ public class FileOpenDialog : GladeDialog {
                        chosenFilename = dialog.Filename;
                        chosenEncoding = encodingComboBox.ChosenEncoding;
 
-                       if (Base.Config.PrefsDefaultsFileOpenEncodingOption == 
ConfigFileOpenEncodingOption.RememberLastUsed) {
+                       if (Base.Config.FileOpenEncodingOption == 
ConfigFileOpenEncodingOption.RememberLastUsed) {
                                int activeAction = encodingComboBox.ActiveSelection;
                                ConfigFileOpenEncoding activeOption = 
(ConfigFileOpenEncoding)Enum.ToObject(typeof(ConfigFileOpenEncoding), activeAction);
                                if (((int)activeOption) >= ((int)ConfigFileOpenEncoding.Fixed))
-                                       Base.Config.PrefsDefaultsFileOpenEncodingFixed = chosenEncoding.Name;
+                                       Base.Config.FileOpenEncodingFixed = chosenEncoding.Name;
                                else
-                                       Base.Config.PrefsDefaultsFileOpenEncoding = activeOption;
+                                       Base.Config.FileOpenEncoding = activeOption;
                        }
 
                        if (videoComboBox.Active > 0) {
diff --git a/src/GnomeSubtitles/Dialog/FilePropertiesDialog.cs 
b/src/GnomeSubtitles/Dialog/FilePropertiesDialog.cs
index 8c7dee5..9b8d635 100644
--- a/src/GnomeSubtitles/Dialog/FilePropertiesDialog.cs
+++ b/src/GnomeSubtitles/Dialog/FilePropertiesDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2007-2009 Pedro Castro
+ * Copyright (C) 2007-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -18,7 +18,7 @@
  */
 
 using GnomeSubtitles.Core;
-using Glade;
+//using Glade;
 using Gtk;
 using Mono.Unix;
 using SubLib.Core.Domain;
@@ -27,18 +27,18 @@ using System.Text;
 
 namespace GnomeSubtitles.Dialog {
 
-public class FilePropertiesDialog : GladeDialog {
+public class FilePropertiesDialog : BuilderDialog {
 
        /* Constant strings */
        private const string gladeFilename = "FilePropertiesDialog.glade";
 
        /* Widgets */
 
-       [WidgetAttribute] private Label nameValueLabel = null;
-       [WidgetAttribute] private Label pathValueLabel = null;
-       [WidgetAttribute] private Label encodingValueLabel = null;
-       [WidgetAttribute] private Label subtitleFormatValueLabel = null;
-       [WidgetAttribute] private Label timingModeValueLabel = null;
+       [Builder.Object] private Label nameValueLabel = null;
+       [Builder.Object] private Label pathValueLabel = null;
+       [Builder.Object] private Label encodingValueLabel = null;
+       [Builder.Object] private Label subtitleFormatValueLabel = null;
+       [Builder.Object] private Label timingModeValueLabel = null;
 
        public FilePropertiesDialog () : base(gladeFilename) {
                FillLabelValues();
diff --git a/src/GnomeSubtitles/Dialog/HeadersDialog.cs b/src/GnomeSubtitles/Dialog/HeadersDialog.cs
index 0893166..71d65fc 100644
--- a/src/GnomeSubtitles/Dialog/HeadersDialog.cs
+++ b/src/GnomeSubtitles/Dialog/HeadersDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2009 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -19,13 +19,13 @@
 
 using GnomeSubtitles.Core;
 using System;
-using Glade;
+//using Glade;
 using Gtk;
 using SubLib.Core.Domain;
 
 namespace GnomeSubtitles.Dialog {
 
-public class HeadersDialog : GladeDialog {
+public class HeadersDialog : BuilderDialog {
        private Headers headers = null;
 
        /* Constant strings */
@@ -36,63 +36,63 @@ public class HeadersDialog : GladeDialog {
        /* Widgets */
 
        /* KaraokeLyricsLRC fields */
-       [WidgetAttribute] private Entry entryKaraokeLRCTitle = null;
-       [WidgetAttribute] private Entry entryKaraokeLRCAuthor = null;
-       [WidgetAttribute] private Entry entryKaraokeLRCArtist = null;
-       [WidgetAttribute] private Entry entryKaraokeLRCAlbum = null;
-       [WidgetAttribute] private Entry entryKaraokeLRCMaker = null;
-       [WidgetAttribute] private Entry entryKaraokeLRCVersion = null;
-       [WidgetAttribute] private Entry entryKaraokeLRCProgram = null;
+       [Builder.Object] private Entry entryKaraokeLRCTitle = null;
+       [Builder.Object] private Entry entryKaraokeLRCAuthor = null;
+       [Builder.Object] private Entry entryKaraokeLRCArtist = null;
+       [Builder.Object] private Entry entryKaraokeLRCAlbum = null;
+       [Builder.Object] private Entry entryKaraokeLRCMaker = null;
+       [Builder.Object] private Entry entryKaraokeLRCVersion = null;
+       [Builder.Object] private Entry entryKaraokeLRCProgram = null;
 
        /* KaraokeLyricsVKT fields */
-       [WidgetAttribute] private Entry entryKaraokeVKTFrameRate = null;
-       [WidgetAttribute] private Entry entryKaraokeVKTAuthor = null;
-       [WidgetAttribute] private Entry entryKaraokeVKTSource = null;
-       [WidgetAttribute] private Entry entryKaraokeVKTDate = null;
+       [Builder.Object] private Entry entryKaraokeVKTFrameRate = null;
+       [Builder.Object] private Entry entryKaraokeVKTAuthor = null;
+       [Builder.Object] private Entry entryKaraokeVKTSource = null;
+       [Builder.Object] private Entry entryKaraokeVKTDate = null;
 
        /* MPSub fields */
-       [WidgetAttribute] private Entry entryMPSubTitle = null;
-       [WidgetAttribute] private Entry entryMPSubFile = null;
-       [WidgetAttribute] private Entry entryMPSubAuthor = null;
-       [WidgetAttribute] private Entry entryMPSubNote = null;
-       [WidgetAttribute] private ComboBox comboBoxMPSubType = null;
+       [Builder.Object] private Entry entryMPSubTitle = null;
+       [Builder.Object] private Entry entryMPSubFile = null;
+       [Builder.Object] private Entry entryMPSubAuthor = null;
+       [Builder.Object] private Entry entryMPSubNote = null;
+       [Builder.Object] private ComboBox comboBoxMPSubType = null;
 
        /* SubStationAlphaASS fields */
-       [WidgetAttribute] private Entry entrySSAASSTitle = null;
-       [WidgetAttribute] private Entry entrySSAASSOriginalScript = null;
-       [WidgetAttribute] private Entry entrySSAASSOriginalTranslation = null;
-       [WidgetAttribute] private Entry entrySSAASSOriginalEditing = null;
-       [WidgetAttribute] private Entry entrySSAASSOriginalTiming = null;
-       [WidgetAttribute] private Entry entrySSAASSOriginalScriptChecking = null;
-       [WidgetAttribute] private Entry entrySSAASSScriptUpdatedBy = null;
-       [WidgetAttribute] private Entry entrySSAASSCollisions = null;
-       [WidgetAttribute] private Entry entrySSAASSTimer = null;
-       [WidgetAttribute] private SpinButton spinButtonSSAASSPlayResX = null;
-       [WidgetAttribute] private SpinButton spinButtonSSAASSPlayResY = null;
-       [WidgetAttribute] private SpinButton spinButtonSSAASSPlayDepth = null;
+       [Builder.Object] private Entry entrySSAASSTitle = null;
+       [Builder.Object] private Entry entrySSAASSOriginalScript = null;
+       [Builder.Object] private Entry entrySSAASSOriginalTranslation = null;
+       [Builder.Object] private Entry entrySSAASSOriginalEditing = null;
+       [Builder.Object] private Entry entrySSAASSOriginalTiming = null;
+       [Builder.Object] private Entry entrySSAASSOriginalScriptChecking = null;
+       [Builder.Object] private Entry entrySSAASSScriptUpdatedBy = null;
+       [Builder.Object] private Entry entrySSAASSCollisions = null;
+       [Builder.Object] private Entry entrySSAASSTimer = null;
+       [Builder.Object] private SpinButton spinButtonSSAASSPlayResX = null;
+       [Builder.Object] private SpinButton spinButtonSSAASSPlayResY = null;
+       [Builder.Object] private SpinButton spinButtonSSAASSPlayDepth = null;
 
        /* SubViewer1 fields */
-       [WidgetAttribute] private Entry entrySubViewer1Title = null;
-       [WidgetAttribute] private Entry entrySubViewer1Author = null;
-       [WidgetAttribute] private Entry entrySubViewer1Source = null;
-       [WidgetAttribute] private Entry entrySubViewer1Program = null;
-       [WidgetAttribute] private Entry entrySubViewer1FilePath = null;
-       [WidgetAttribute] private SpinButton spinButtonSubViewer1Delay = null;
-       [WidgetAttribute] private SpinButton spinButtonSubViewer1CDTrack = null;
+       [Builder.Object] private Entry entrySubViewer1Title = null;
+       [Builder.Object] private Entry entrySubViewer1Author = null;
+       [Builder.Object] private Entry entrySubViewer1Source = null;
+       [Builder.Object] private Entry entrySubViewer1Program = null;
+       [Builder.Object] private Entry entrySubViewer1FilePath = null;
+       [Builder.Object] private SpinButton spinButtonSubViewer1Delay = null;
+       [Builder.Object] private SpinButton spinButtonSubViewer1CDTrack = null;
 
        /* SubViewer2 fields */
-       [WidgetAttribute] private Entry entrySubViewer2Title = null;
-       [WidgetAttribute] private Entry entrySubViewer2Author = null;
-       [WidgetAttribute] private Entry entrySubViewer2Source = null;
-       [WidgetAttribute] private Entry entrySubViewer2Program = null;
-       [WidgetAttribute] private Entry entrySubViewer2FilePath = null;
-       [WidgetAttribute] private Entry entrySubViewer2Comment = null;
-       [WidgetAttribute] private Entry entrySubViewer2FontName = null;
-       [WidgetAttribute] private Entry entrySubViewer2FontColor = null;
-       [WidgetAttribute] private Entry entrySubViewer2FontStyle = null;
-       [WidgetAttribute] private SpinButton spinButtonSubViewer2Delay = null;
-       [WidgetAttribute] private SpinButton spinButtonSubViewer2CDTrack = null;
-       [WidgetAttribute] private SpinButton spinButtonSubViewer2FontSize = null;
+       [Builder.Object] private Entry entrySubViewer2Title = null;
+       [Builder.Object] private Entry entrySubViewer2Author = null;
+       [Builder.Object] private Entry entrySubViewer2Source = null;
+       [Builder.Object] private Entry entrySubViewer2Program = null;
+       [Builder.Object] private Entry entrySubViewer2FilePath = null;
+       [Builder.Object] private Entry entrySubViewer2Comment = null;
+       [Builder.Object] private Entry entrySubViewer2FontName = null;
+       [Builder.Object] private Entry entrySubViewer2FontColor = null;
+       [Builder.Object] private Entry entrySubViewer2FontStyle = null;
+       [Builder.Object] private SpinButton spinButtonSubViewer2Delay = null;
+       [Builder.Object] private SpinButton spinButtonSubViewer2CDTrack = null;
+       [Builder.Object] private SpinButton spinButtonSubViewer2FontSize = null;
 
 
        public HeadersDialog () : base(gladeFilename) {
diff --git a/src/GnomeSubtitles/Dialog/PreferencesDialog.cs b/src/GnomeSubtitles/Dialog/PreferencesDialog.cs
index b325c1a..01dd70d 100644
--- a/src/GnomeSubtitles/Dialog/PreferencesDialog.cs
+++ b/src/GnomeSubtitles/Dialog/PreferencesDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2007-2011 Pedro Castro
+ * Copyright (C) 2007-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,7 +17,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-using Glade;
+//using Glade;
 using GnomeSubtitles.Core;
 using GnomeSubtitles.Ui.Component;
 using Gtk;
@@ -27,7 +27,7 @@ using System;
 
 namespace GnomeSubtitles.Dialog {
 
-public class PreferencesDialog : GladeDialog {
+public class PreferencesDialog : BuilderDialog {
 
        /* Constant strings */
        private const string gladeFilename = "PreferencesDialog.glade";
@@ -40,20 +40,20 @@ public class PreferencesDialog : GladeDialog {
        private NewlineTypeComboBox fileSaveNewline = null;
 
        /* Widgets */
-       [WidgetAttribute] private CheckButton translationSaveAllCheckButton = null;
-       [WidgetAttribute] private CheckButton videoAutoChooseFileCheckButton = null;
-       [WidgetAttribute] private CheckButton autoBackupCheckButton = null;
-       [WidgetAttribute] private CheckButton reactionDelayCheckButton = null;
-       [WidgetAttribute] private CheckButton videoSeekCheckButton = null;
-       [WidgetAttribute] private ComboBox fileOpenEncodingComboBox = null;
-       [WidgetAttribute] private ComboBox fileOpenFallbackEncodingComboBox = null;
-       [WidgetAttribute] private ComboBox fileSaveEncodingComboBox = null;
-       [WidgetAttribute] private ComboBox fileSaveFormatComboBox = null;
-       [WidgetAttribute] private ComboBox fileSaveNewlineComboBox = null;
-       [WidgetAttribute] private SpinButton autoBackupTimeSpinButton = null;
-       [WidgetAttribute] private SpinButton reactionDelaySpinButton = null;
-       [WidgetAttribute] private SpinButton videoSeekRewindSpinButton = null;
-       [WidgetAttribute] private SpinButton subtitleSplitSpinButton = null;
+       [Builder.Object] private CheckButton translationSaveAllCheckButton = null;
+       [Builder.Object] private CheckButton videoAutoChooseFileCheckButton = null;
+       [Builder.Object] private CheckButton autoBackupCheckButton = null;
+       [Builder.Object] private CheckButton reactionDelayCheckButton = null;
+       [Builder.Object] private CheckButton videoSeekCheckButton = null;
+       [Builder.Object] private ComboBoxText fileOpenEncodingComboBox = null;
+       [Builder.Object] private ComboBoxText fileOpenFallbackEncodingComboBox = null;
+       [Builder.Object] private ComboBoxText fileSaveEncodingComboBox = null;
+       [Builder.Object] private ComboBoxText fileSaveFormatComboBox = null;
+       [Builder.Object] private ComboBoxText fileSaveNewlineComboBox = null;
+       [Builder.Object] private SpinButton autoBackupTimeSpinButton = null;
+       [Builder.Object] private SpinButton reactionDelaySpinButton = null;
+       [Builder.Object] private SpinButton videoSeekRewindSpinButton = null;
+       [Builder.Object] private SpinButton subtitleSplitSpinButton = null;
 
        public PreferencesDialog () : base(gladeFilename, false) {
                LoadValues();
@@ -69,7 +69,7 @@ public class PreferencesDialog : GladeDialog {
 
        private void LoadValuesFilesTab () {
                /* Translation Save All */
-               translationSaveAllCheckButton.Active = Base.Config.PrefsTranslationSaveAll;
+               translationSaveAllCheckButton.Active = Base.Config.FileTranslationSaveAll;
 
                /* Defaults */
                SetDefaultsFileOpenEncoding();
@@ -79,7 +79,7 @@ public class PreferencesDialog : GladeDialog {
                SetDefaultsFileSaveNewline();
 
                /* Video Auto choose file */
-               videoAutoChooseFileCheckButton.Active = Base.Config.PrefsVideoAutoChooseFile;
+               videoAutoChooseFileCheckButton.Active = Base.Config.VideoAutoChooseFile;
 
                /* Auto Backup */
                SetAutoBackup();
@@ -87,12 +87,12 @@ public class PreferencesDialog : GladeDialog {
 
        private void LoadValuesEditingTab () {
                /* Video Seeking */
-               videoSeekCheckButton.Active = Base.Config.PrefsVideoSeekOnChange;
-               videoSeekRewindSpinButton.Value = Base.Config.PrefsVideoSeekOnChangeRewind;
+               videoSeekCheckButton.Active = Base.Config.VideoSeekOnChange;
+               videoSeekRewindSpinButton.Value = Base.Config.VideoSeekOnChangeRewind;
                videoSeekRewindSpinButton.Sensitive = videoSeekCheckButton.Active;
 
                /* Subtitle Splitting */
-               subtitleSplitSpinButton.Value = Base.Config.PrefsTimingsTimeBetweenSubtitles;
+               subtitleSplitSpinButton.Value = Base.Config.TimingsTimeBetweenSubtitles;
 
                /* Reaction Delay */
                SetReactionDelay();
@@ -101,9 +101,9 @@ public class PreferencesDialog : GladeDialog {
        private void SetDefaultsFileOpenEncoding () {
                string[] additionalActions = { Catalog.GetString("Remember the last used encoding") };
                int fixedEncoding = -1;
-               ConfigFileOpenEncodingOption fileOpenEncodingOption = 
Base.Config.PrefsDefaultsFileOpenEncodingOption;
+               ConfigFileOpenEncodingOption fileOpenEncodingOption = Base.Config.FileOpenEncodingOption;
                if (fileOpenEncodingOption == ConfigFileOpenEncodingOption.Specific) {
-                       string encodingName = Base.Config.PrefsDefaultsFileOpenEncodingFixed;
+                       string encodingName = Base.Config.FileOpenEncodingFixed;
                        EncodingDescription encodingDescription = EncodingDescription.Empty;
                        Encodings.Find(encodingName, ref encodingDescription);
                        fixedEncoding = encodingDescription.CodePage;
@@ -118,9 +118,9 @@ public class PreferencesDialog : GladeDialog {
 
        private void SetDefaultsFileOpenFallbackEncoding () {
                int fixedEncoding = -1;
-               ConfigFileOpenFallbackEncoding fileOpenFallbackEncodingConfig = 
Base.Config.PrefsDefaultsFileOpenFallbackEncoding;
+               ConfigFileOpenFallbackEncoding fileOpenFallbackEncodingConfig = 
Base.Config.FileOpenFallbackEncoding;
                if (fileOpenFallbackEncodingConfig == ConfigFileOpenFallbackEncoding.Fixed) {
-                       string encodingName = Base.Config.PrefsDefaultsFileOpenFallbackEncodingFixed;
+                       string encodingName = Base.Config.FileOpenFallbackEncodingFixed;
                        EncodingDescription encodingDescription = EncodingDescription.Empty;
                        Encodings.Find(encodingName, ref encodingDescription);
                        fixedEncoding = encodingDescription.CodePage;
@@ -133,9 +133,9 @@ public class PreferencesDialog : GladeDialog {
        private void SetDefaultsFileSaveEncoding () {
                string[] additionalActions = { Catalog.GetString("Keep the encoding used on file open"), 
Catalog.GetString("Remember the last used encoding") };
                int fixedEncoding = -1;
-               ConfigFileSaveEncodingOption fileSaveEncodingOption = 
Base.Config.PrefsDefaultsFileSaveEncodingOption;
+               ConfigFileSaveEncodingOption fileSaveEncodingOption = Base.Config.FileSaveEncodingOption;
                if (fileSaveEncodingOption == ConfigFileSaveEncodingOption.Specific) {
-                       string encodingName = Base.Config.PrefsDefaultsFileSaveEncodingFixed;
+                       string encodingName = Base.Config.FileSaveEncodingFixed;
                        EncodingDescription encodingDescription = EncodingDescription.Empty;
                        Encodings.Find(encodingName, ref encodingDescription);
                        fixedEncoding = encodingDescription.CodePage;
@@ -151,9 +151,9 @@ public class PreferencesDialog : GladeDialog {
        private void SetDefaultsFileSaveFormat () {
                string[] additionalActions = { Catalog.GetString("Keep the format used on file open"), 
Catalog.GetString("Remember the last used format") };
                SubtitleType fixedFormat = SubtitleType.Unknown;
-               ConfigFileSaveFormatOption fileSaveFormatOption = 
Base.Config.PrefsDefaultsFileSaveFormatOption;
+               ConfigFileSaveFormatOption fileSaveFormatOption = Base.Config.FileSaveFormatOption;
                if (fileSaveFormatOption == ConfigFileSaveFormatOption.Specific) {
-                       fixedFormat = Base.Config.PrefsDefaultsFileSaveFormatFixed;
+                       fixedFormat = Base.Config.FileSaveFormatFixed;
                }
 
                fileSaveFormat = new SubtitleFormatComboBox(fileSaveFormatComboBox, fixedFormat, 
additionalActions);
@@ -166,9 +166,9 @@ public class PreferencesDialog : GladeDialog {
        private void SetDefaultsFileSaveNewline () {
                string[] additionalActions = { Catalog.GetString("Remember the last used type") };
                NewlineType newlineTypeToSelect = NewlineType.Unknown;
-               ConfigFileSaveNewlineOption fileSaveNewlineOption = 
Base.Config.PrefsDefaultsFileSaveNewlineOption;
+               ConfigFileSaveNewlineOption fileSaveNewlineOption = Base.Config.FileSaveNewlineOption;
                if (fileSaveNewlineOption == ConfigFileSaveNewlineOption.Specific) {
-                       newlineTypeToSelect = Base.Config.PrefsDefaultsFileSaveNewline;
+                       newlineTypeToSelect = Base.Config.FileSaveNewline;
                }
 
                fileSaveNewline = new NewlineTypeComboBox(fileSaveNewlineComboBox, newlineTypeToSelect, 
additionalActions);
@@ -179,19 +179,19 @@ public class PreferencesDialog : GladeDialog {
        }
 
        private void SetAutoBackup () {
-               bool autoBackupEnabled = Base.Config.PrefsBackupAutoBackup;
+               bool autoBackupEnabled = Base.Config.BackupAuto;
                autoBackupCheckButton.Active = autoBackupEnabled;
 
                autoBackupTimeSpinButton.Sensitive = autoBackupEnabled;
-               autoBackupTimeSpinButton.Value = Base.Config.PrefsBackupBackupTime / 60; //Minutes
+               autoBackupTimeSpinButton.Value = Base.Config.BackupTime / 60; //Minutes
        }
 
        private void SetReactionDelay () {
-               bool reactionDelayEnabled = Base.Config.PrefsVideoApplyReactionDelay;
+               bool reactionDelayEnabled = Base.Config.VideoApplyReactionDelay;
                reactionDelayCheckButton.Active = reactionDelayEnabled;
 
                reactionDelaySpinButton.Sensitive = reactionDelayEnabled;
-               reactionDelaySpinButton.Value = Base.Config.PrefsVideoReactionDelay;
+               reactionDelaySpinButton.Value = Base.Config.VideoReactionDelay;
        }
 
        private void ResetDialogToDefaults () {
@@ -228,12 +228,12 @@ public class PreferencesDialog : GladeDialog {
                if (((int)activeOption) > ((int)ConfigFileOpenEncodingOption.Specific)) //Positions higher 
than specific are always specific too
                        activeOption = ConfigFileOpenEncodingOption.Specific;
 
-               Base.Config.PrefsDefaultsFileOpenEncodingOption = activeOption;
+               Base.Config.FileOpenEncodingOption = activeOption;
                /* If encoding option is specific, encodingOption=Specific and encoding holds the encoding 
name */
                if (activeOption == ConfigFileOpenEncodingOption.Specific) {
                        EncodingDescription chosenEncoding = fileOpenEncoding.ChosenEncoding;
                        if (!chosenEncoding.Equals(EncodingDescription.Empty)) {
-                               Base.Config.PrefsDefaultsFileOpenEncodingFixed = chosenEncoding.Name;
+                               Base.Config.FileOpenEncodingFixed = chosenEncoding.Name;
                        }
                }
                else {
@@ -242,17 +242,17 @@ public class PreferencesDialog : GladeDialog {
                        if (activeOption == ConfigFileOpenEncodingOption.CurrentLocale) {
                                encodingToStore = ConfigFileOpenEncoding.CurrentLocale;
                        }
-                       Base.Config.PrefsDefaultsFileOpenEncoding = encodingToStore;
+                       Base.Config.FileOpenEncoding = encodingToStore;
                }
        }
 
        private void OnDefaultsFileOpenFallbackEncodingChanged (object o, EventArgs args) {
                if (fileOpenFallbackEncoding.IsChosenCurrentLocale)
-                       Base.Config.PrefsDefaultsFileOpenFallbackEncoding = 
ConfigFileOpenFallbackEncoding.CurrentLocale;
+                       Base.Config.FileOpenFallbackEncoding = ConfigFileOpenFallbackEncoding.CurrentLocale;
                else {
                        EncodingDescription chosenEncoding = fileOpenFallbackEncoding.ChosenEncoding;
                        if (!chosenEncoding.Equals(EncodingDescription.Empty)) {
-                               Base.Config.PrefsDefaultsFileOpenFallbackEncodingFixed = chosenEncoding.Name;
+                               Base.Config.FileOpenFallbackEncodingFixed = chosenEncoding.Name;
                        }
                }
        }
@@ -263,12 +263,12 @@ public class PreferencesDialog : GladeDialog {
                if (((int)activeOption) > ((int)ConfigFileSaveEncodingOption.Specific)) //Positions higher 
than specific are always specific too
                        activeOption = ConfigFileSaveEncodingOption.Specific;
 
-               Base.Config.PrefsDefaultsFileSaveEncodingOption = activeOption;
+               Base.Config.FileSaveEncodingOption = activeOption;
                /* If encoding is specific, encodingOption=Specific and encoding holds the encoding name */
                if (activeOption == ConfigFileSaveEncodingOption.Specific) {
                        EncodingDescription chosenEncoding = fileSaveEncoding.ChosenEncoding;
                        if (!chosenEncoding.Equals(EncodingDescription.Empty)) {
-                               Base.Config.PrefsDefaultsFileSaveEncodingFixed = chosenEncoding.Name;
+                               Base.Config.FileSaveEncodingFixed = chosenEncoding.Name;
                        }
                }
                else {
@@ -277,7 +277,7 @@ public class PreferencesDialog : GladeDialog {
                        if (activeOption == ConfigFileSaveEncodingOption.CurrentLocale) {
                                encodingToStore = ConfigFileSaveEncoding.CurrentLocale;
                        }
-                       Base.Config.PrefsDefaultsFileSaveEncoding = encodingToStore;
+                       Base.Config.FileSaveEncoding = encodingToStore;
                }
        }
 
@@ -287,17 +287,17 @@ public class PreferencesDialog : GladeDialog {
                if (((int)activeOption) > ((int)ConfigFileSaveFormatOption.Specific)) //Positions higher than 
specific are always specific too
                        activeOption = ConfigFileSaveFormatOption.Specific;
 
-               Base.Config.PrefsDefaultsFileSaveFormatOption = activeOption;
+               Base.Config.FileSaveFormatOption = activeOption;
                /* If format is specific, formatOption=Specific and format holds the format name */
                if (activeOption == ConfigFileSaveFormatOption.Specific) {
                        SubtitleType chosenFormat = fileSaveFormat.ChosenSubtitleType;
                        if (!chosenFormat.Equals(SubtitleType.Unknown)) {
-                               Base.Config.PrefsDefaultsFileSaveFormatFixed = chosenFormat;
+                               Base.Config.FileSaveFormatFixed = chosenFormat;
                        }
                }
                else {
                        /* If format option is keep existing or remember last, use keep existing */
-                       Base.Config.PrefsDefaultsFileSaveFormat = ConfigFileSaveFormat.KeepExisting;
+                       Base.Config.FileSaveFormat = ConfigFileSaveFormat.KeepExisting;
                }
        }
 
@@ -307,66 +307,66 @@ public class PreferencesDialog : GladeDialog {
                if (((int)activeOption) > ((int)ConfigFileSaveNewlineOption.Specific)) //Positions higher 
than specific are always specific too
                        activeOption = ConfigFileSaveNewlineOption.Specific;
 
-               Base.Config.PrefsDefaultsFileSaveNewlineOption = activeOption;
+               Base.Config.FileSaveNewlineOption = activeOption;
                /* If newline is specific, newlineOption=Specific and newline holds the newline type name */
                if (activeOption == ConfigFileSaveNewlineOption.Specific) {
                        NewlineType chosenNewlineType = fileSaveNewline.ChosenNewlineType;
                        if (!chosenNewlineType.Equals(NewlineType.Unknown)) {
-                               Base.Config.PrefsDefaultsFileSaveNewline = chosenNewlineType;
+                               Base.Config.FileSaveNewline = chosenNewlineType;
                        }
                }
                else {
                        /* If newline option is remember last, use the system default */
-                       Base.Config.PrefsDefaultsFileSaveNewline = Core.Util.GetSystemNewlineType();
+                       Base.Config.FileSaveNewline = Core.Util.GetSystemNewlineType();
                }
        }
 
        private void OnVideoAutoChooseFileToggled (object o, EventArgs args) {
-               Base.Config.PrefsVideoAutoChooseFile = videoAutoChooseFileCheckButton.Active;
+               Base.Config.VideoAutoChooseFile = videoAutoChooseFileCheckButton.Active;
        }
 
        private void OnTranslationSaveAllToggled (object o, EventArgs args) {
-               Base.Config.PrefsTranslationSaveAll = translationSaveAllCheckButton.Active;
+               Base.Config.FileTranslationSaveAll = translationSaveAllCheckButton.Active;
        }
 
        private void OnAutoBackupToggled (object o, EventArgs args) {
                bool isActive = (o as CheckButton).Active;
 
-               Base.Config.PrefsBackupAutoBackup = isActive;
+               Base.Config.BackupAuto = isActive;
                autoBackupTimeSpinButton.Sensitive = isActive;
 
                Base.Backup.ReCheck();
        }
 
        private void OnAutoBackupTimeSpinButtonValueChanged (object o, EventArgs args) {
-               Base.Config.PrefsBackupBackupTime = (o as SpinButton).ValueAsInt * 60; //seconds
+               Base.Config.BackupTime = (o as SpinButton).ValueAsInt * 60; //seconds
                Base.Backup.ReCheck();
        }
 
        private void OnReactionDelayToggled (object o, EventArgs args) {
                bool isActive = (o as CheckButton).Active;
 
-               Base.Config.PrefsVideoApplyReactionDelay = isActive;
+               Base.Config.VideoApplyReactionDelay = isActive;
                reactionDelaySpinButton.Sensitive = isActive;
        }
 
        private void OnReactionDelaySpinButtonValueChanged (object o, EventArgs args) {
-               Base.Config.PrefsVideoReactionDelay = (o as SpinButton).ValueAsInt;
+               Base.Config.VideoReactionDelay = (o as SpinButton).ValueAsInt;
        }
 
        private void OnVideoSeekToggled (object o, EventArgs args) {
                bool isActive = (o as CheckButton).Active;
 
-               Base.Config.PrefsVideoSeekOnChange = isActive;
+               Base.Config.VideoSeekOnChange = isActive;
                videoSeekRewindSpinButton.Sensitive = isActive;
        }
 
        private void OnVideoSeekRewindSpinButtonValueChanged (object o, EventArgs args) {
-               Base.Config.PrefsVideoSeekOnChangeRewind = (o as SpinButton).ValueAsInt;
+               Base.Config.VideoSeekOnChangeRewind = (o as SpinButton).ValueAsInt;
        }
 
        private void OnSubtitleSplitSpinButtonValueChanged (object o, EventArgs args) {
-               Base.Config.PrefsTimingsTimeBetweenSubtitles = (o as SpinButton).ValueAsInt;
+               Base.Config.TimingsTimeBetweenSubtitles = (o as SpinButton).ValueAsInt;
        }
 
        protected override bool ProcessResponse (ResponseType response) {
diff --git a/src/GnomeSubtitles/Dialog/SearchDialog.cs b/src/GnomeSubtitles/Dialog/SearchDialog.cs
index 5d25a22..8b5f3a8 100644
--- a/src/GnomeSubtitles/Dialog/SearchDialog.cs
+++ b/src/GnomeSubtitles/Dialog/SearchDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2009 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,7 +17,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-using Glade;
+//using Glade;
 using Gtk;
 using Mono.Unix;
 using System;
@@ -27,7 +27,7 @@ namespace GnomeSubtitles.Dialog {
 
 internal enum SearchDialogResponse { Find = 1, Replace, ReplaceAll, Close = -6 };
 
-public class SearchDialog : GladeDialog {
+public class SearchDialog : BuilderDialog {
        private string text = String.Empty;             //The text to search for
        private Regex forwardRegex = null;              //The regex that corresponds to the text and the 
options
        private Regex backwardRegex = null;             //The regex that corresponds to the text and the 
options
@@ -43,19 +43,19 @@ public class SearchDialog : GladeDialog {
 
        /* Widgets */
 
-       [WidgetAttribute] private Entry findEntry = null;
-       [WidgetAttribute] private Entry replaceEntry = null;
-       [WidgetAttribute] private Label replaceLabel = null;
-       [WidgetAttribute] private Table table = null;
+       [Builder.Object] private Entry findEntry = null;
+       [Builder.Object] private Entry replaceEntry = null;
+       [Builder.Object] private Label replaceLabel = null;
+       [Builder.Object] private Table table = null;
 
-       [WidgetAttribute] private CheckButton matchCaseCheckButton = null;
-       [WidgetAttribute] private CheckButton backwardsCheckButton = null;
-       [WidgetAttribute] private CheckButton regexCheckButton = null;
-       [WidgetAttribute] private CheckButton wrapCheckButton = null;
+       [Builder.Object] private CheckButton matchCaseCheckButton = null;
+       [Builder.Object] private CheckButton backwardsCheckButton = null;
+       [Builder.Object] private CheckButton regexCheckButton = null;
+       [Builder.Object] private CheckButton wrapCheckButton = null;
 
-       [WidgetAttribute] private Button buttonReplaceAll = null;
-       [WidgetAttribute] private Button buttonReplace = null;
-       [WidgetAttribute] private Button buttonFind = null;
+       [Builder.Object] private Button buttonReplaceAll = null;
+       [Builder.Object] private Button buttonReplace = null;
+       [Builder.Object] private Button buttonFind = null;
 
        public SearchDialog () : base(gladeFilename) {
        }
diff --git a/src/GnomeSubtitles/Dialog/SetLanguageDialog.cs b/src/GnomeSubtitles/Dialog/SetLanguageDialog.cs
index ff6d8cc..dbfab73 100644
--- a/src/GnomeSubtitles/Dialog/SetLanguageDialog.cs
+++ b/src/GnomeSubtitles/Dialog/SetLanguageDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2008-2009,2011 Pedro Castro
+ * Copyright (C) 2008-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -18,7 +18,7 @@
  */
 
 using GnomeSubtitles.Core;
-using Glade;
+//using Glade;
 using Gtk;
 using Mono.Unix;
 using SubLib.Core.Domain;
@@ -26,7 +26,7 @@ using System;
 
 namespace GnomeSubtitles.Dialog {
 
-public abstract class SetLanguageDialog : GladeDialog {
+public abstract class SetLanguageDialog : BuilderDialog {
        private ListStore store = null;
        private int colNum = 0;
        private SubtitleTextType textType;
@@ -42,8 +42,8 @@ public abstract class SetLanguageDialog : GladeDialog {
 
        /* Widgets */
 
-       [WidgetAttribute] private TreeView languagesTreeView = null;
-       [WidgetAttribute] private Label introLabel = null;
+       [Builder.Object] private TreeView languagesTreeView = null;
+       [Builder.Object] private Label introLabel = null;
 
 
        protected SetLanguageDialog (SubtitleTextType textType) : base(gladeFilename) {
diff --git a/src/GnomeSubtitles/Dialog/SubtitleFileSaveAsDialog.cs 
b/src/GnomeSubtitles/Dialog/SubtitleFileSaveAsDialog.cs
index cd8cf4f..f4a71cb 100644
--- a/src/GnomeSubtitles/Dialog/SubtitleFileSaveAsDialog.cs
+++ b/src/GnomeSubtitles/Dialog/SubtitleFileSaveAsDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2010 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,7 +17,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-using Glade;
+//using Glade;
 using GnomeSubtitles.Core;
 using GnomeSubtitles.Ui.Component;
 using Gtk;
@@ -29,7 +29,7 @@ using System.Text;
 
 namespace GnomeSubtitles.Dialog {
 
-public abstract class SubtitleFileSaveAsDialog : GladeDialog {
+public abstract class SubtitleFileSaveAsDialog : BuilderDialog {
        protected FileChooserDialog dialog = null;
 
        private string chosenFilename = String.Empty;
@@ -47,9 +47,9 @@ public abstract class SubtitleFileSaveAsDialog : GladeDialog {
        private NewlineTypeComboBox newlineComboBoxComponent = null;
 
        /* Widgets */
-       [WidgetAttribute] private ComboBox fileEncodingComboBox = null;
-       [WidgetAttribute] private ComboBox subtitleFormatComboBox = null;
-       [WidgetAttribute] private ComboBox newlineTypeComboBox = null;
+       [Builder.Object] private ComboBoxText fileEncodingComboBox = null;
+       [Builder.Object] private ComboBoxText subtitleFormatComboBox = null;
+       [Builder.Object] private ComboBoxText newlineTypeComboBox = null;
 
 
        protected SubtitleFileSaveAsDialog (SubtitleTextType textType) : base(gladeFilename) {
@@ -90,9 +90,9 @@ public abstract class SubtitleFileSaveAsDialog : GladeDialog {
 
        private void InitEncodingComboBox () {
                int fixedEncoding = GetFixedEncoding();
-               ConfigFileSaveEncoding encodingConfig = Base.Config.PrefsDefaultsFileSaveEncoding;
+               ConfigFileSaveEncoding encodingConfig = Base.Config.FileSaveEncoding;
                if (encodingConfig == ConfigFileSaveEncoding.Fixed) {
-                       string encodingName = Base.Config.PrefsDefaultsFileSaveEncodingFixed;
+                       string encodingName = Base.Config.FileSaveEncodingFixed;
                        EncodingDescription encodingDescription = EncodingDescription.Empty;
                        Encodings.Find(encodingName, ref encodingDescription);
                        fixedEncoding = encodingDescription.CodePage;
@@ -107,9 +107,9 @@ public abstract class SubtitleFileSaveAsDialog : GladeDialog {
 
        private void InitFormatComboBox () {
                SubtitleType fixedSubtitleType = GetFixedSubtitleType();
-               ConfigFileSaveFormat formatConfig = Base.Config.PrefsDefaultsFileSaveFormat;
+               ConfigFileSaveFormat formatConfig = Base.Config.FileSaveFormat;
                if (formatConfig == ConfigFileSaveFormat.Fixed) {
-                       fixedSubtitleType = Base.Config.PrefsDefaultsFileSaveFormatFixed;
+                       fixedSubtitleType = Base.Config.FileSaveFormatFixed;
                }
                /* Check if fixed subtitle type has been correctly identified */
                if (fixedSubtitleType == SubtitleType.Unknown) {
@@ -120,7 +120,7 @@ public abstract class SubtitleFileSaveAsDialog : GladeDialog {
        }
 
        private void InitNewlineComboBox () {
-               NewlineType newlineTypeToSelect = Base.Config.PrefsDefaultsFileSaveNewline;
+               NewlineType newlineTypeToSelect = Base.Config.FileSaveNewline;
                /* If no newline type set, or system default unknown, use Unix */
                if (newlineTypeToSelect == NewlineType.Unknown)
                        newlineTypeToSelect = NewlineType.Unix;
@@ -229,27 +229,27 @@ public abstract class SubtitleFileSaveAsDialog : GladeDialog {
 
                        /* Check chosen encoding */
                        chosenEncoding = encodingComboBoxComponent.ChosenEncoding;
-                       if (Base.Config.PrefsDefaultsFileSaveEncodingOption == 
ConfigFileSaveEncodingOption.RememberLastUsed) {
+                       if (Base.Config.FileSaveEncodingOption == 
ConfigFileSaveEncodingOption.RememberLastUsed) {
                                int activeAction = encodingComboBoxComponent.ActiveSelection;
                                ConfigFileSaveEncoding activeOption = 
(ConfigFileSaveEncoding)Enum.ToObject(typeof(ConfigFileSaveEncoding), activeAction);
                                if (((int)activeOption) >= ((int)ConfigFileSaveEncoding.Fixed)) {
-                                       Base.Config.PrefsDefaultsFileSaveEncodingFixed = chosenEncoding.Name;
+                                       Base.Config.FileSaveEncodingFixed = chosenEncoding.Name;
                                }
                                else {
-                                       Base.Config.PrefsDefaultsFileSaveEncoding = activeOption;
+                                       Base.Config.FileSaveEncoding = activeOption;
                                }
                        }
 
                        /* Check chosen subtitle format */
                        chosenSubtitleType = formatComboBoxComponent.ChosenSubtitleType;
-                       if (Base.Config.PrefsDefaultsFileSaveFormatOption == 
ConfigFileSaveFormatOption.RememberLastUsed) {
-                               Base.Config.PrefsDefaultsFileSaveFormatFixed = chosenSubtitleType;
+                       if (Base.Config.FileSaveFormatOption == ConfigFileSaveFormatOption.RememberLastUsed) {
+                               Base.Config.FileSaveFormatFixed = chosenSubtitleType;
                        }
 
                        /* Check chosen newline type */
                        chosenNewlineType = newlineComboBoxComponent.ChosenNewlineType;
-                       if (Base.Config.PrefsDefaultsFileSaveNewlineOption == 
ConfigFileSaveNewlineOption.RememberLastUsed) {
-                               Base.Config.PrefsDefaultsFileSaveNewline = chosenNewlineType;
+                       if (Base.Config.FileSaveNewlineOption == 
ConfigFileSaveNewlineOption.RememberLastUsed) {
+                               Base.Config.FileSaveNewline = chosenNewlineType;
                        }
 
                        /* Check chosen filename */
diff --git a/src/GnomeSubtitles/Dialog/TimingsAdjustDialog.cs 
b/src/GnomeSubtitles/Dialog/TimingsAdjustDialog.cs
index d2a3f8a..c4444f0 100644
--- a/src/GnomeSubtitles/Dialog/TimingsAdjustDialog.cs
+++ b/src/GnomeSubtitles/Dialog/TimingsAdjustDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2009,2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@
 using GnomeSubtitles.Core;
 using GnomeSubtitles.Core.Command;
 using GnomeSubtitles.Ui.View;
-using Glade;
+//using Glade;
 using Gtk;
 using Mono.Unix;
 using SubLib.Core.Domain;
@@ -29,7 +29,7 @@ using System;
 namespace GnomeSubtitles.Dialog {
 
 
-public class TimingsAdjustDialog : GladeDialog {
+public class TimingsAdjustDialog : BuilderDialog {
        private TimingMode timingMode;
 
        /* Constant strings */
@@ -37,16 +37,16 @@ public class TimingsAdjustDialog : GladeDialog {
 
        /* Widgets */
 
-       [WidgetAttribute] private Label firstSubtitleStartLabel = null;
-       [WidgetAttribute] private Label firstSubtitleNoInputLabel = null;
-       [WidgetAttribute] private Label firstSubtitleStartInputLabel = null;
-       [WidgetAttribute] private SpinButton firstSubtitleNewStartSpinButton = null;
-       [WidgetAttribute] private Label lastSubtitleStartLabel = null;
-       [WidgetAttribute] private Label lastSubtitleNoInputLabel = null;
-       [WidgetAttribute] private Label lastSubtitleStartInputLabel = null;
-       [WidgetAttribute] private SpinButton lastSubtitleNewStartSpinButton = null;
-       [WidgetAttribute] private RadioButton allSubtitlesRadioButton = null;
-       [WidgetAttribute] private RadioButton selectedRangeRadioButton = null;
+       [Builder.Object] private Label firstSubtitleStartLabel = null;
+       [Builder.Object] private Label firstSubtitleNoInputLabel = null;
+       [Builder.Object] private Label firstSubtitleStartInputLabel = null;
+       [Builder.Object] private SpinButton firstSubtitleNewStartSpinButton = null;
+       [Builder.Object] private Label lastSubtitleStartLabel = null;
+       [Builder.Object] private Label lastSubtitleNoInputLabel = null;
+       [Builder.Object] private Label lastSubtitleStartInputLabel = null;
+       [Builder.Object] private SpinButton lastSubtitleNewStartSpinButton = null;
+       [Builder.Object] private RadioButton allSubtitlesRadioButton = null;
+       [Builder.Object] private RadioButton selectedRangeRadioButton = null;
 
 
        public TimingsAdjustDialog () : base(gladeFilename){
diff --git a/src/GnomeSubtitles/Dialog/TimingsShiftDialog.cs b/src/GnomeSubtitles/Dialog/TimingsShiftDialog.cs
index 4e9bad8..8eb781f 100644
--- a/src/GnomeSubtitles/Dialog/TimingsShiftDialog.cs
+++ b/src/GnomeSubtitles/Dialog/TimingsShiftDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@
 using GnomeSubtitles.Core;
 using GnomeSubtitles.Core.Command;
 using GnomeSubtitles.Ui.View;
-using Glade;
+//using Glade;
 using Gtk;
 using Mono.Unix;
 using SubLib.Core.Domain;
@@ -30,19 +30,19 @@ namespace GnomeSubtitles.Dialog {
 
 //TODO set spinButton limits according to selection type
 //TODO show informative message about the Ctrl+Shift++ shortcuts
-public class TimingsShiftDialog : GladeDialog {
+public class TimingsShiftDialog : BuilderDialog {
        private TimingMode timingMode = TimingMode.Frames;
 
        /* Constant strings */
        private const string gladeFilename = "TimingsShiftDialog.glade";
 
        /* Widgets */
-       [WidgetAttribute] private Label timingModeLabel = null;
-       [WidgetAttribute] private SpinButton spinButton = null;
-       [WidgetAttribute] private RadioButton allSubtitlesRadioButton = null;
-       [WidgetAttribute] private RadioButton selectedSubtitlesRadioButton = null;
-       [WidgetAttribute] private RadioButton fromFirstSubtitleToSelectionRadioButton = null;
-       [WidgetAttribute] private RadioButton fromSelectionToLastSubtitleRadioButton = null;
+       [Builder.Object] private Label timingModeLabel = null;
+       [Builder.Object] private SpinButton spinButton = null;
+       [Builder.Object] private RadioButton allSubtitlesRadioButton = null;
+       [Builder.Object] private RadioButton selectedSubtitlesRadioButton = null;
+       [Builder.Object] private RadioButton fromFirstSubtitleToSelectionRadioButton = null;
+       [Builder.Object] private RadioButton fromSelectionToLastSubtitleRadioButton = null;
 
        public TimingsShiftDialog () : base(gladeFilename){
                InitSpinButton();
diff --git a/src/GnomeSubtitles/Dialog/TimingsSynchronizeDialog.cs 
b/src/GnomeSubtitles/Dialog/TimingsSynchronizeDialog.cs
index dc64fac..7cd963e 100644
--- a/src/GnomeSubtitles/Dialog/TimingsSynchronizeDialog.cs
+++ b/src/GnomeSubtitles/Dialog/TimingsSynchronizeDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2008-2010 Pedro Castro
+ * Copyright (C) 2008-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,7 +17,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-using Glade;
+//using Glade;
 using GnomeSubtitles.Core;
 using GnomeSubtitles.Core.Command;
 using GnomeSubtitles.Ui.View;
@@ -29,7 +29,7 @@ using System.Collections;
 
 namespace GnomeSubtitles.Dialog {
 
-public class TimingsSynchronizeDialog : GladeDialog {
+public class TimingsSynchronizeDialog : BuilderDialog {
        private TimingMode timingMode = TimingMode.Times;
        private GnomeSubtitles.Core.SyncPoints syncPoints = new GnomeSubtitles.Core.SyncPoints();
        private TreeViewColumn numberCol = null;
@@ -40,12 +40,12 @@ public class TimingsSynchronizeDialog : GladeDialog {
        private const string gladeFilename = "TimingsSynchronizeDialog.glade";
 
        /* Widgets */
-       [WidgetAttribute] private TreeView syncPointsTree = null;
-       [WidgetAttribute] private Button buttonAdd = null;
-       [WidgetAttribute] private Button buttonRemove = null;
-       [WidgetAttribute] private Button buttonSynchronize = null;
-       [WidgetAttribute] private CheckButton syncAllSubtitlesCheckButton = null;
-       [WidgetAttribute] private Label statusMessageLabel = null;
+       [Builder.Object] private TreeView syncPointsTree = null;
+       [Builder.Object] private Button buttonAdd = null;
+       [Builder.Object] private Button buttonRemove = null;
+       [Builder.Object] private Button buttonSynchronize = null;
+       [Builder.Object] private CheckButton syncAllSubtitlesCheckButton = null;
+       [Builder.Object] private Label statusMessageLabel = null;
 
        public TimingsSynchronizeDialog () : base(gladeFilename, true){
                this.timingMode = Base.TimingMode;
@@ -173,11 +173,11 @@ public class TimingsSynchronizeDialog : GladeDialog {
 
     /* Cell Renderers */
 
-       private void RenderSubtitleNumberCell (TreeViewColumn column, CellRenderer cell, TreeModel treeModel, 
TreeIter iter) {
+       private void RenderSubtitleNumberCell (TreeViewColumn column, CellRenderer cell, ITreeModel 
treeModel, TreeIter iter) {
                (cell as CellRendererText).Text = (syncPoints[iter].SubtitleNumber + 1).ToString();
        }
 
-       private void RenderCurrentStartCell (TreeViewColumn column, CellRenderer cell, TreeModel model, 
TreeIter iter) {
+       private void RenderCurrentStartCell (TreeViewColumn column, CellRenderer cell, ITreeModel model, 
TreeIter iter) {
                CellRendererText renderer = cell as CellRendererText;
                if (timingMode == TimingMode.Frames)
                        renderer.Text = syncPoints[iter].Current.Frame.ToString();
@@ -185,7 +185,7 @@ public class TimingsSynchronizeDialog : GladeDialog {
                        renderer.Text = Core.Util.TimeSpanToText(syncPoints[iter].Current.Time);
        }
 
-       private void RenderCorrectStartCell (TreeViewColumn column, CellRenderer cell, TreeModel model, 
TreeIter iter) {
+       private void RenderCorrectStartCell (TreeViewColumn column, CellRenderer cell, ITreeModel model, 
TreeIter iter) {
                CellRendererText renderer = cell as CellRendererText;
                if (timingMode == TimingMode.Frames)
                        renderer.Text = syncPoints[iter].Correct.Frame.ToString();
diff --git a/src/GnomeSubtitles/Dialog/VideoOpenDialog.cs b/src/GnomeSubtitles/Dialog/VideoOpenDialog.cs
index 3d24883..5942ebb 100644
--- a/src/GnomeSubtitles/Dialog/VideoOpenDialog.cs
+++ b/src/GnomeSubtitles/Dialog/VideoOpenDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -24,12 +24,12 @@ using System;
 
 namespace GnomeSubtitles.Dialog {
 
-public class VideoOpenDialog : GladeDialog {
+public class VideoOpenDialog : BuilderDialog {
        protected FileChooserDialog dialog = null;
        private Uri chosenUri = null;
 
        /* Constant strings */
-       private const string gladeFilename = "VideoOpenDialog.glade";
+       private const string gladeFilename = "VideoOpenDialog.ui";
 
 
        public VideoOpenDialog () : base(gladeFilename) {
diff --git a/src/GnomeSubtitles/Dialog/VideoSeekToDialog.cs b/src/GnomeSubtitles/Dialog/VideoSeekToDialog.cs
index c5dd28d..03693dc 100644
--- a/src/GnomeSubtitles/Dialog/VideoSeekToDialog.cs
+++ b/src/GnomeSubtitles/Dialog/VideoSeekToDialog.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2008-2011 Pedro Castro
+ * Copyright (C) 2008-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,7 +17,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-using Glade;
+//using Glade;
 using GnomeSubtitles.Core;
 using Gtk;
 using Mono.Unix;
@@ -27,14 +27,14 @@ using System;
 
 namespace GnomeSubtitles.Dialog {
 
-public class VideoSeekToDialog : GladeDialog {
+public class VideoSeekToDialog : BuilderDialog {
        private TimingMode timingMode = TimingMode.Frames;
 
        /* Constant strings */
        private const string gladeFilename = "VideoSeekToDialog.glade";
 
        /* Widgets */
-       [WidgetAttribute] private SpinButton spinButton = null;
+       [Builder.Object] private SpinButton spinButton = null;
 
        public VideoSeekToDialog () : base(gladeFilename){
                InitSpinButton();
diff --git a/src/GnomeSubtitles/Execution/BugReporter.cs b/src/GnomeSubtitles/Execution/BugReporter.cs
index 0102aea..7e1ec72 100644
--- a/src/GnomeSubtitles/Execution/BugReporter.cs
+++ b/src/GnomeSubtitles/Execution/BugReporter.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2007-2009 Pedro Castro
+ * Copyright (C) 2007-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -25,6 +25,7 @@ using System.ComponentModel;
 using System.Diagnostics;
 using System.IO;
 
+//FIXME still needed?
 namespace GnomeSubtitles.Execution {
 
 public class BugReporter {
@@ -62,10 +63,8 @@ public class BugReporter {
        }
 
        private static string GetBugInfo (string message) {
-               return "Gnome Subtitles version: " + Base.ExecutionContext.Version + "\n"
-                       + "GtkSharp version: " + Base.ExecutionContext.GtkSharpVersion + "\n"
-                       + "GladeSharp version: " + Base.ExecutionContext.GladeSharpVersion + "\n"
-                       + "GConfSharp version: " + Base.ExecutionContext.GConfSharpVersion + "\n\n"
+               return "gnome-subtitles version: " + Base.ExecutionContext.Version + "\n"
+                       + "gtk-sharp version: " + Base.ExecutionContext.GtkSharpVersion + "\n"
                        + "Stack trace:" + "\n"
                        + message;
        }
diff --git a/src/GnomeSubtitles/Execution/ExecutionContext.cs 
b/src/GnomeSubtitles/Execution/ExecutionContext.cs
index 4c2d38a..1438430 100644
--- a/src/GnomeSubtitles/Execution/ExecutionContext.cs
+++ b/src/GnomeSubtitles/Execution/ExecutionContext.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2009 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -93,14 +93,6 @@ public class ExecutionContext {
                get { return RemoveTrailingZeros(Assembly.Load("gtk-sharp").GetName().Version.ToString()); }
        }
 
-       public string GladeSharpVersion {
-               get { return RemoveTrailingZeros(Assembly.Load("glade-sharp").GetName().Version.ToString()); }
-       }
-
-       public string GConfSharpVersion {
-               get { return RemoveTrailingZeros(Assembly.Load("gconf-sharp").GetName().Version.ToString()); }
-       }
-
        public string[] Args {
                get { return args; }
                set { args = value; }
diff --git a/src/GnomeSubtitles/Ui/Component/ComboBoxUtil.cs b/src/GnomeSubtitles/Ui/Component/ComboBoxUtil.cs
index 0670f4e..7e104d6 100644
--- a/src/GnomeSubtitles/Ui/Component/ComboBoxUtil.cs
+++ b/src/GnomeSubtitles/Ui/Component/ComboBoxUtil.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2007-2010 Pedro Castro
+ * Copyright (C) 2007-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -23,7 +23,7 @@ namespace GnomeSubtitles.Ui.Component {
 
 public class ComboBoxUtil {
 
-       public static bool SeparatorFunc (TreeModel model, TreeIter iter) {
+       public static bool SeparatorFunc (ITreeModel model, TreeIter iter) {
                string text = (string)model.GetValue(iter, 0);
                return ((text != null) && (text.CompareTo("-") == 0));
        }
diff --git a/src/GnomeSubtitles/Ui/Component/EncodingComboBox.cs 
b/src/GnomeSubtitles/Ui/Component/EncodingComboBox.cs
index 150d230..19bb51a 100644
--- a/src/GnomeSubtitles/Ui/Component/EncodingComboBox.cs
+++ b/src/GnomeSubtitles/Ui/Component/EncodingComboBox.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2010 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -28,7 +28,7 @@ namespace GnomeSubtitles.Ui.Component {
 
 public class EncodingComboBox {
 
-       private ComboBox comboBox = null;
+       private ComboBoxText comboBox = null;
        private int comboBoxActiveItem = 0; //Stores the last active item so we can get back to it after 
using Add/Remove
 
        private ArrayList encodings = null; //Encodings present in the combo box
@@ -38,7 +38,7 @@ public class EncodingComboBox {
        private int fixedEncoding = -1; //Codepage of an encoding that must be present (-1 if not)
        private ArrayList configShownEncodings = null; //Encodings shown in menu from config
 
-       public EncodingComboBox (ComboBox comboBox, bool hasAutoDetect, string[] additionalActions, int 
fixedEncoding) {
+       public EncodingComboBox (ComboBoxText comboBox, bool hasAutoDetect, string[] additionalActions, int 
fixedEncoding) {
                this.comboBox = comboBox;
                this.additionalActions = additionalActions;
                this.hasAutoDetect = hasAutoDetect;
@@ -46,11 +46,11 @@ public class EncodingComboBox {
 
                InitComboBoxModel();
                SetActionCount();
-               SetComboBox(Base.Config.PrefsEncodingsShownInMenu);
+               SetComboBox(Base.Config.FileEncodingsShownInMenu);
                ConnectHandlers();
        }
 
-       public EncodingComboBox (ComboBox comboBox, bool hasAutoDetect) : this(comboBox, hasAutoDetect, null, 
-1) {
+       public EncodingComboBox (ComboBoxText comboBox, bool hasAutoDetect) : this(comboBox, hasAutoDetect, 
null, -1) {
        }
 
 
diff --git a/src/GnomeSubtitles/Ui/Component/NewlineTypeComboBox.cs 
b/src/GnomeSubtitles/Ui/Component/NewlineTypeComboBox.cs
index 6cfa9c8..4e128b1 100644
--- a/src/GnomeSubtitles/Ui/Component/NewlineTypeComboBox.cs
+++ b/src/GnomeSubtitles/Ui/Component/NewlineTypeComboBox.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2010 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -26,11 +26,11 @@ namespace GnomeSubtitles.Ui.Component {
 
 public class NewlineTypeComboBox {
 
-       private ComboBox comboBox = null;
+       private ComboBoxText comboBox = null;
        private NewlineType newlineTypeToSelect = NewlineType.Unknown;
        private string[] additionalActions = null;
 
-       public NewlineTypeComboBox (ComboBox comboBox, NewlineType newlineTypeToSelect, string[] 
additionalActions) {
+       public NewlineTypeComboBox (ComboBoxText comboBox, NewlineType newlineTypeToSelect, string[] 
additionalActions) {
                this.comboBox = comboBox;
                this.newlineTypeToSelect = newlineTypeToSelect;
                this.additionalActions = additionalActions;
diff --git a/src/GnomeSubtitles/Ui/Component/SubtitleFormatComboBox.cs 
b/src/GnomeSubtitles/Ui/Component/SubtitleFormatComboBox.cs
index 749cf12..27e6243 100644
--- a/src/GnomeSubtitles/Ui/Component/SubtitleFormatComboBox.cs
+++ b/src/GnomeSubtitles/Ui/Component/SubtitleFormatComboBox.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2010 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -25,12 +25,12 @@ namespace GnomeSubtitles.Ui.Component {
 
 public class SubtitleFormatComboBox {
 
-       private ComboBox comboBox = null;
+       private ComboBoxText comboBox = null;
        private SubtitleTypeInfo[] subtitleTypes = null;
        private string[] additionalActions = null; //
        private SubtitleType fixedSubtitleType = SubtitleType.Unknown; //A subtitle type that must be selected
 
-       public SubtitleFormatComboBox (ComboBox comboBox, SubtitleType fixedSubtitleType, string[] 
additionalActions) {
+       public SubtitleFormatComboBox (ComboBoxText comboBox, SubtitleType fixedSubtitleType, string[] 
additionalActions) {
                this.comboBox = comboBox;
                this.fixedSubtitleType = fixedSubtitleType;
                this.additionalActions = additionalActions;
diff --git a/src/GnomeSubtitles/Ui/Edit/SubtitleEdit.cs b/src/GnomeSubtitles/Ui/Edit/SubtitleEdit.cs
index e64ba8f..091632e 100644
--- a/src/GnomeSubtitles/Ui/Edit/SubtitleEdit.cs
+++ b/src/GnomeSubtitles/Ui/Edit/SubtitleEdit.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2009,2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -28,14 +28,14 @@ namespace GnomeSubtitles.Ui.Edit {
 public class SubtitleEdit {
 
        /* Widgets */
-       private HBox hBox = null;
+       private Box hBox = null;
        private SubtitleEditSpinButtons spinButtons = null;
        private SubtitleEditText textEdit = null;
        private SubtitleEditTranslation translationEdit = null;
 
 
        public SubtitleEdit() {
-               hBox = Base.GetWidget(WidgetNames.SubtitleEdit) as HBox;
+               hBox = Base.GetWidget(WidgetNames.SubtitleEdit) as Box;
                spinButtons = new SubtitleEditSpinButtons();
                textEdit = new SubtitleEditText(Base.GetWidget(WidgetNames.SubtitleEditText) as TextView);
                translationEdit = new 
SubtitleEditTranslation(Base.GetWidget(WidgetNames.SubtitleEditTranslation) as TextView);
diff --git a/src/GnomeSubtitles/Ui/Edit/SubtitleEditSpinButtons.cs 
b/src/GnomeSubtitles/Ui/Edit/SubtitleEditSpinButtons.cs
index 23ddd24..72e3258 100644
--- a/src/GnomeSubtitles/Ui/Edit/SubtitleEditSpinButtons.cs
+++ b/src/GnomeSubtitles/Ui/Edit/SubtitleEditSpinButtons.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -118,7 +118,7 @@ public class SubtitleEditSpinButtons {
     private void SetTimesMode (SpinButton spinButton, bool allowNegatives) {
                Util.SetSpinButtonTimingMode(spinButton, TimingMode.Times);
 
-               spinButton.Adjustment.StepIncrement = Base.Config.PrefsTimingsTimeStep;
+               spinButton.Adjustment.StepIncrement = Base.Config.TimingsTimeStep;
                spinButton.Adjustment.Upper = maxTime;
                spinButton.Adjustment.Lower = (allowNegatives ? -maxTime : 0);
        }
@@ -127,7 +127,7 @@ public class SubtitleEditSpinButtons {
        private void SetFramesMode (SpinButton spinButton, bool allowNegatives) {
                Util.SetSpinButtonTimingMode(spinButton, TimingMode.Frames);
 
-       spinButton.Adjustment.StepIncrement = Base.Config.PrefsTimingsFramesStep;
+       spinButton.Adjustment.StepIncrement = Base.Config.TimingsFramesStep;
        spinButton.Adjustment.Upper = maxFrames;
        spinButton.Adjustment.Lower = (allowNegatives ? -maxFrames : 0);
        }
diff --git a/src/GnomeSubtitles/Ui/Edit/SubtitleEditTextView.cs 
b/src/GnomeSubtitles/Ui/Edit/SubtitleEditTextView.cs
index bb9b473..648a383 100644
--- a/src/GnomeSubtitles/Ui/Edit/SubtitleEditTextView.cs
+++ b/src/GnomeSubtitles/Ui/Edit/SubtitleEditTextView.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2009,2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -239,7 +239,7 @@ public abstract class SubtitleEditTextView {
     /// <summary>Sets font with bold and italic if applicable.</summary>
     private void SetFont (SubLib.Core.Domain.Style style) {
        Pango.FontDescription font = Pango.FontDescription.FromString(this.textFont + (style.Bold ? " bold" : 
String.Empty) + (style.Italic ? " italic" : String.Empty) + " " + this.textFontSize);
-               this.textView.ModifyFont(font);
+               this.textView.OverrideFont(font);
     }
 
     /* Currently applies underline tag */
@@ -331,7 +331,7 @@ public abstract class SubtitleEditTextView {
        private void OnBufferInsertText (object o, InsertTextArgs args) {
                if (!isBufferInsertManual) {
                        int index = args.Pos.Offset;
-                       string insertion = args.Text;
+                       string insertion = args.NewText;
                        ExecuteInsertCommand(index, insertion);
                }
 
diff --git a/src/GnomeSubtitles/Ui/Edit/SubtitleEditTextViewMargin.cs 
b/src/GnomeSubtitles/Ui/Edit/SubtitleEditTextViewMargin.cs
index e4451e5..8767af4 100644
--- a/src/GnomeSubtitles/Ui/Edit/SubtitleEditTextViewMargin.cs
+++ b/src/GnomeSubtitles/Ui/Edit/SubtitleEditTextViewMargin.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2011 Pedro Castro
+ * Copyright (C) 2011-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,27 +17,30 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+using Cairo;
 using GnomeSubtitles.Core;
 using Gtk;
 using System;
 
 namespace GnomeSubtitles.Ui.Edit {
 
-//TODO possible improvements: draw text once with newlines and Spacing
 public class SubtitleEditTextViewMargin {
-       private int marginCharWidth = -1; //pixels
-       private int marginSpace = 4; //pixels
-       private int marginMinDigits = 2; //the minimum number of digits for margin width (1 would make the 
margin adjust with more than 9 chars, so it's better to keep a minimum of 2 to avoid constant adjustment
-       private int marginDigitCount = 2;
+       /* Constants */
+       private const int marginSpace = 4; //pixels
+       private const int marginMinDigits = 2; //the minimum number of digits for margin width (1 would make 
the margin adjust with more than 9 chars, so it's better to keep a minimum of 2 to avoid constant adjustment
 
-       /* Cached GCs and Pango Layout */
-       private Gdk.GC lineGC = null;
-       private Gdk.GC textGC = null;
-       private Pango.Layout textLayout = null;
+       /* Set on base init */
+       private Gdk.RGBA marginBGColor;
+       private Gdk.RGBA marginLineColor;
+       private Gdk.RGBA marginTextColor;
+       private Pango.Layout textLayout;
 
        /* Widgets */
        private TextView textView = null;
 
+       private int marginCharWidth = -1; //pixels
+       private int marginDigitCount = 2;
+
        public SubtitleEditTextViewMargin (TextView textView) {
                this.textView = textView;
 
@@ -46,20 +49,29 @@ public class SubtitleEditTextViewMargin {
 
        /* Private methods */
 
-       public void DrawMargin (TextView textView) {
+       public void DrawMargin (TextView textView, Context cr) {
 
        /* Get char count info  */
        int[,] info;
        GetCharCountDrawInfo(textView, out info);
 
-       /* Set margin and window */
-       int marginWidth = (this.marginSpace * 2) + (this.marginDigitCount * this.marginCharWidth);
+       /* Set margin and window on the right */
+       int marginWidth = (marginSpace * 2) + (this.marginDigitCount * this.marginCharWidth);
        textView.SetBorderWindowSize(TextWindowType.Right, marginWidth);
-       Gdk.Window window = textView.GetWindow(TextWindowType.Right);
-       window.Clear();
+
+               /* Get margin window and cairo context */
+               Gdk.Window marginWindow = textView.GetWindow(TextWindowType.Right);
+               Cairo.Context marginCR = Gdk.CairoHelper.Create(marginWindow);
+
+               /* Clear the background */
+               Gdk.CairoHelper.SetSourceRgba(marginCR, marginBGColor);
+               marginCR.Paint();
 
        /* Draw line */
-       window.DrawLine(this.lineGC, 0, 0, 0, textView.Allocation.Height);
+               Gdk.CairoHelper.SetSourceRgba(marginCR, marginLineColor);
+               marginCR.MoveTo(0, 0);
+               marginCR.LineTo(0, marginWindow.Height); //We don't use marginWindow.Height because sometimes 
(e.g., on initialization) its height is 1px
+               marginCR.Stroke();
 
        /* Draw text */
        int infoCount = info.GetLength(0);
@@ -70,8 +82,14 @@ public class SubtitleEditTextViewMargin {
                this.textLayout.SetText(charCount.ToString());
                int textLayoutWidth, textLayoutHeight;
                this.textLayout.GetPixelSize(out textLayoutWidth, out textLayoutHeight);
-               window.DrawLayout(this.textGC, this.marginSpace, y - textLayoutHeight/2, this.textLayout);
+                       marginCR.MoveTo(marginSpace, y - textLayoutHeight / 2);
+
+                       Gdk.CairoHelper.SetSourceRgba(marginCR, marginTextColor);
+                       Pango.CairoHelper.ShowLayout(marginCR, this.textLayout);
                }
+
+               marginCR.Dispose();
+               cr.Dispose();
     }
 
     private void GetCharCountDrawInfo (TextView textView, out int[,] info) {
@@ -135,18 +153,13 @@ public class SubtitleEditTextViewMargin {
                }
 
                int digitCount = CountDigitsInNumber(maxChars);
-               return Math.Max(digitCount, this.marginMinDigits);
+               return Math.Max(digitCount, marginMinDigits);
        }
 
     private int CountDigitsInNumber (int number) {
        return (number == 0 ? 1 : (int)Math.Floor(Math.Log10(number)) + 1); //assuming the number is 
positive, otherwise would need to use abs() too
     }
 
-    private void SetGCs () {
-               this.lineGC = Base.Ui.Window.Style.BackgroundGC(StateType.Active);
-               this.textGC = Base.Ui.Window.Style.TextGC(StateType.Active);
-    }
-
     private void Refresh () {
        textView.QueueDraw();
     }
@@ -156,7 +169,7 @@ public class SubtitleEditTextViewMargin {
     }
 
     private void Enable () {
-       textView.ExposeEvent += OnExposeEvent;
+               textView.Drawn += OnWidgetDrawn;
                textView.Buffer.Changed += OnBufferChanged; //To calculate margin digit count (based on the 
largest line char count)
                textView.StateChanged += OnStateChanged;
 
@@ -164,21 +177,37 @@ public class SubtitleEditTextViewMargin {
     }
 
     private void Disable () {
-       textView.ExposeEvent -= OnExposeEvent;
+               textView.Drawn -= OnWidgetDrawn;
                textView.Buffer.Changed -= OnBufferChanged; //To calculate margin digit count (based on the 
largest line char count)
                textView.StateChanged -= OnStateChanged;
 
                HideMarginWindow();
     }
 
+       private void SetColors () {
+               marginTextColor = Base.Ui.Window.StyleContext.GetColor(StateFlags.Active);
+               marginBGColor = Base.Ui.Window.StyleContext.GetBackgroundColor(StateFlags.Active);
+               marginLineColor = marginBGColor;
+               marginLineColor.Red -= (marginLineColor.Red <= 0.1 ? 0 : 0.1);
+               marginLineColor.Green -= (marginLineColor.Green <= 0.1 ? 0 : 0.1);
+               marginLineColor.Blue -= (marginLineColor.Blue <= 0.1 ? 0 : 0.1);
+       }
+
 
        /* Event members */
 
+       private void OnWidgetDrawn (object o, DrawnArgs args) {
+               TextView textView = o as TextView;
+               if (textView.State != StateType.Insensitive) {
+                       DrawMargin(textView, args.Cr);
+               }
+       }
+
        private void OnBaseInitFinished () {
-               /* GCs */
-               SetGCs();
+               /* Colors */
+               SetColors();
 
-               /* Layouts */
+               /* Layout */
                this.textLayout = new Pango.Layout(textView.PangoContext);
                this.textLayout.FontDescription = Pango.FontDescription.FromString("sans 10");
 
@@ -190,24 +219,17 @@ public class SubtitleEditTextViewMargin {
                /* Events */
                textView.StyleSet += OnStyleSet; //To update colors if the style is changed
                (Base.Ui.Menus.GetMenuItem(WidgetNames.ViewLineLengths) as CheckMenuItem).Toggled += 
OnViewLineLengthsToggled;
-               if (Base.Config.PrefsViewLineLengths) {
+               if (Base.Config.ViewLineLengths) {
                        Enable();
                }
        }
 
-       private void OnExposeEvent (object o, ExposeEventArgs args) {
-               TextView textView = o as TextView;
-               if (textView.State != StateType.Insensitive) {
-                       DrawMargin(textView);
-               }
-       }
-
        private void OnBufferChanged (object o, EventArgs args) {
-               this.marginDigitCount = CalcDigitCount(o as TextBuffer, this.marginMinDigits);
+               this.marginDigitCount = CalcDigitCount(o as TextBuffer, marginMinDigits);
        }
 
        private void OnStyleSet (object o, StyleSetArgs args) {
-               SetGCs();
+               SetColors();
        }
 
        private void OnStateChanged (object o, StateChangedArgs args) {
diff --git a/src/GnomeSubtitles/Ui/MainUi.cs b/src/GnomeSubtitles/Ui/MainUi.cs
index fa83a6e..b22275c 100644
--- a/src/GnomeSubtitles/Ui/MainUi.cs
+++ b/src/GnomeSubtitles/Ui/MainUi.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2010 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -31,10 +31,13 @@ using SubLib.Core.Domain;
 using System;
 using System.IO;
 using System.Text;
+using System.Reflection;
 
 namespace GnomeSubtitles.Ui {
 
 public class MainUi {
+       private static Builder builder = null;
+
        private Window window = null;
        private Menus menus = null;
        private Video video = null;
@@ -43,15 +46,15 @@ public class MainUi {
        private Status status = null;
 
        /* Constant strings */
-       private const string gladeFilename = "MainWindow.glade";
+       private const string uiFilename = "MainWindow.ui";
        private const string iconFilename = "gnome-subtitles.svg";
 
-       public MainUi (EventHandlers handlers, out Glade.XML glade) {
-               glade = new Glade.XML(null, gladeFilename, null, Base.ExecutionContext.TranslationDomain);
+       public MainUi (EventHandlers handlers) {
+               builder = new Builder(uiFilename, Base.ExecutionContext.TranslationDomain);
 
-               window = glade.GetWidget("window") as Window;
+               window = builder.GetObject("window") as Window;
                window.Icon = new Gdk.Pixbuf(null, iconFilename);
-               window.SetDefaultSize(Base.Config.PrefsWindowWidth, Base.Config.PrefsWindowHeight);
+               window.SetDefaultSize(Base.Config.ViewWindowWidth, Base.Config.ViewWindowHeight);
 
                video = new Video();
                view = new SubtitleView();
@@ -59,7 +62,7 @@ public class MainUi {
                menus = new Menus();
                status = new Status();
 
-               glade.Autoconnect(handlers);
+               builder.Autoconnect(handlers);
                Base.InitFinished += OnBaseInitFinished;
 
                window.Visible = true;
@@ -95,12 +98,16 @@ public class MainUi {
 
     /* Public Methods */
 
+       public static Widget GetWidget (string name) {
+                       return builder.GetObject(name) as Widget;
+       }
+
     /// <summary>Starts the GUI</summary>
     /// <remarks>A file is opened if it was specified as argument. If it wasn't, a blank start is 
performed.</summary>
     public void Start () {
                string subtitleFilePath = GetSubtitleFileArg(Base.ExecutionContext.Args);
                if (subtitleFilePath != null) {
-                       Uri videoUri = Base.Config.PrefsVideoAutoChooseFile ? 
VideoFiles.FindMatchingVideo(subtitleFilePath) : null;
+                       Uri videoUri = Base.Config.VideoAutoChooseFile ? 
VideoFiles.FindMatchingVideo(subtitleFilePath) : null;
                        int codePage = GetFileOpenCodePageFromConfig();
                        Open(subtitleFilePath, codePage, videoUri);
                }
@@ -159,7 +166,6 @@ public class MainUi {
     }
 
     public void OpenVideo () {
-
        VideoOpenDialog dialog = Base.Dialogs.Get(typeof(VideoOpenDialog)) as VideoOpenDialog;
        dialog.Show();
                bool toOpen = dialog.WaitForResponse();
@@ -453,10 +459,10 @@ public class MainUi {
        }
 
        private int GetFileOpenCodePageFromConfig () {
-               switch (Base.Config.PrefsDefaultsFileOpenEncoding) {
+               switch (Base.Config.FileOpenEncoding) {
                        case ConfigFileOpenEncoding.CurrentLocale: return Encodings.SystemDefault.CodePage;
                        case ConfigFileOpenEncoding.Fixed:
-                               string encodingName = Base.Config.PrefsDefaultsFileOpenEncodingFixed;
+                               string encodingName = Base.Config.FileOpenEncodingFixed;
                                EncodingDescription encodingDescription = EncodingDescription.Empty;
                                Encodings.Find(encodingName, ref encodingDescription);
                                return encodingDescription.CodePage;
diff --git a/src/GnomeSubtitles/Ui/Menus.cs b/src/GnomeSubtitles/Ui/Menus.cs
index 5aba66b..fe263f6 100644
--- a/src/GnomeSubtitles/Ui/Menus.cs
+++ b/src/GnomeSubtitles/Ui/Menus.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -33,7 +33,6 @@ public class Menus {
        private string videoTagText = Catalog.GetString("Video");
 
        public Menus () {
-               SetToolbarHomogeneity(); //TODO needed until homogeneity definition in glade starts working
                SetDocumentSensitivity(false);
                SetBlankActivity();
 
@@ -162,7 +161,7 @@ public class Menus {
 
        private void SetBlankActivity () {
                SetCheckMenuItemActivity(WidgetNames.ToolsAutocheckSpelling, Base.SpellLanguages.Enabled);
-               SetCheckMenuItemActivity(WidgetNames.ViewLineLengths, Base.Config.PrefsViewLineLengths);
+               SetCheckMenuItemActivity(WidgetNames.ViewLineLengths, Base.Config.ViewLineLengths);
        }
 
        private void SetViewVideoActivity (bool activity) {
@@ -454,13 +453,6 @@ public class Menus {
                return " (" + videoTagText + ")";
        }
 
-       private void SetToolbarHomogeneity () {
-               Toolbar toolbar = Base.GetWidget(WidgetNames.Toolbar) as Toolbar;
-               Widget[] toolItems = toolbar.Children;
-               foreach (Widget item in toolItems)
-                       (item as ToolItem).Homogeneous = false;
-       }
-
        private void UpdateUndoRedoMessages () {
        CommandManager commandManager = Base.CommandManager;
 
diff --git a/src/GnomeSubtitles/Ui/VideoPreview/Player.cs b/src/GnomeSubtitles/Ui/VideoPreview/Player.cs
index 71b986d..6dcf624 100644
--- a/src/GnomeSubtitles/Ui/VideoPreview/Player.cs
+++ b/src/GnomeSubtitles/Ui/VideoPreview/Player.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2007-2009 Pedro Castro
+ * Copyright (C) 2007-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,6 +17,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+using Gdk;
 using GnomeSubtitles.Ui.VideoPreview.Exceptions;
 using GStreamer;
 using Gtk;
@@ -59,7 +60,7 @@ public class Player {
        public event PlayerErrorEventHandler Error;
        public event EndOfStreamEventHandler EndOfStream;
        public event StateEventHandler StateChanged;
-       public event PositionChangedEventHandler PositionChanged;
+       public event PositionPulseEventHandler PositionPulse;
        public event VideoInfoEventHandler FoundVideoInfo;
        public event VideoDurationEventHandler FoundDuration;
 
@@ -180,7 +181,13 @@ public class Player {
 
        private void InitializeSocket () {
                socket = new Socket();
-               socket.ModifyBg(StateType.Normal, socket.Style.Black);
+
+//             RGBA black = new RGBA();
+//             black.Red = 0;
+//             black.Green = 0;
+//             black.Blue = 0;
+//             black.Alpha = 1;
+//             socket.OverrideBackgroundColor(StateFlags.Normal, black);
 
                frame.Child = socket;
 
@@ -203,7 +210,7 @@ public class Player {
 
        private void InitializePositionWatcher () {
                position = new PlayerPositionWatcher(GetPosition);
-               position.Changed += OnPositionWatcherChanged;
+               position.PositionPulse += OnPositionWatcherPulse;
        }
 
        /// <summary>Gets the current player position.</summary>
@@ -239,9 +246,9 @@ public class Player {
                        StateChanged(args);
        }
 
-       private void OnPositionWatcherChanged (TimeSpan time) {
-               if (PositionChanged != null)
-                       PositionChanged(time);
+       private void OnPositionWatcherPulse (TimeSpan time) {
+               if (PositionPulse != null)
+                       PositionPulse(time);
        }
 
        private void OnPlaybinFoundVideoInfo (VideoInfoEventArgs args) {
diff --git a/src/GnomeSubtitles/Ui/VideoPreview/PlayerPositionWatcher.cs 
b/src/GnomeSubtitles/Ui/VideoPreview/PlayerPositionWatcher.cs
index 9139047..6403b61 100644
--- a/src/GnomeSubtitles/Ui/VideoPreview/PlayerPositionWatcher.cs
+++ b/src/GnomeSubtitles/Ui/VideoPreview/PlayerPositionWatcher.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2008 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -24,14 +24,19 @@ using System.IO;
 namespace GnomeSubtitles.Ui.VideoPreview {
 
 /* Delegates */
-public delegate TimeSpan PlayerGetTimeFunc (); //Represents a function that gets a time from the player
-public delegate void PositionChangedEventHandler (TimeSpan position); //Represents a function that handles 
changes in the position
+
+//Represents a function that gets a time from the player
+public delegate TimeSpan PlayerGetTimeFunc ();
+
+//Represents a function that handles a frequent pulse in the player position. This means the pulse is
+//emitted every 'x' ms and not only when the position changes.
+public delegate void PositionPulseEventHandler (TimeSpan position);
 
 public class PlayerPositionWatcher {
        private uint timeoutId = 0;
 
        /* Events */
-       public event PositionChangedEventHandler Changed;
+       public event PositionPulseEventHandler PositionPulse;
 
        /* Delegate functions */
        private PlayerGetTimeFunc PlayerGetPosition;
@@ -72,13 +77,13 @@ public class PlayerPositionWatcher {
 
        private bool CheckPosition () {
                TimeSpan position = PlayerGetPosition();
-               EmitPositionChanged(position);
+               EmitPositionPulse(position);
                return true;
        }
 
-       private void EmitPositionChanged (TimeSpan position) {
-               if (Changed != null)
-                       Changed(position);
+       private void EmitPositionPulse (TimeSpan position) {
+               if (PositionPulse != null)
+                       PositionPulse(position);
        }
 
 }
diff --git a/src/GnomeSubtitles/Ui/VideoPreview/SubtitleOverlay.cs 
b/src/GnomeSubtitles/Ui/VideoPreview/SubtitleOverlay.cs
index 92b7364..3f82830 100644
--- a/src/GnomeSubtitles/Ui/VideoPreview/SubtitleOverlay.cs
+++ b/src/GnomeSubtitles/Ui/VideoPreview/SubtitleOverlay.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2007-2011 Pedro Castro
+ * Copyright (C) 2007-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,14 +17,17 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+using Gdk;
 using GnomeSubtitles.Core;
 using Gtk;
 using SubLib.Core.Domain;
 using SubLib.Core.Search;
 using System;
+using System.Runtime.InteropServices;
 
 namespace GnomeSubtitles.Ui.VideoPreview {
 
+//TODO: draw text with Cairo, replacing the current Label in a Gtk Overlay. Example: 
https://github.com/reboot/obs-text-pango/blob/master/text-pango.c
 public class SubtitleOverlay {
        private Label label = null;
 
@@ -33,11 +36,34 @@ public class SubtitleOverlay {
        private bool toShowText = true;
 
        public SubtitleOverlay () {
-               EventBox box = Base.GetWidget(WidgetNames.VideoSubtitleLabelEventBox) as EventBox;
-               box.ModifyBg(StateType.Normal, box.Style.Black);
-
-               label = Base.GetWidget(WidgetNames.VideoSubtitleLabel) as Label;
-               label.ModifyFg(StateType.Normal, new Gdk.Color(255, 255, 0));
+               label = new Label(); //We create it here because Glade doesn't currently allow to set the 
overlay widget in GtkOverlays
+
+               label.Halign = Align.Center;
+               label.Valign = Align.End;
+               label.Justify = Justification.Center;
+               //label.LineWrap = true;
+               //label.LineWrapMode = Pango.WrapMode.WordChar; //We cannot do this anymore. Doing this, a 
gray rectangle is painted above the subtitle after entering some characteres, on top of the video.
+
+               //Yellow text color
+               RGBA labelColor = new RGBA();
+               labelColor.Red = 1;
+               labelColor.Green = 1;
+               labelColor.Blue = 0;
+               labelColor.Alpha = 1;
+               label.OverrideColor(StateFlags.Normal, labelColor);
+               label.Expand = false;
+
+               //Black label background.
+               RGBA labelBGColor = new RGBA();
+               labelBGColor.Red = 0;
+               labelBGColor.Green = 0;
+               labelBGColor.Blue = 0;
+               labelBGColor.Alpha = 1;
+               label.OverrideBackgroundColor(StateFlags.Normal, labelBGColor);
+
+               //We don't cast to Overlay because GTK# doesn't support it
+               Bin bin = Base.GetWidget(WidgetNames.VideoImageOverlay) as Bin;
+               gtk_overlay_add_overlay(bin.Handle, label.Handle);
 
                Base.InitFinished += OnBaseInitFinished;
        }
@@ -62,24 +88,34 @@ public class SubtitleOverlay {
 
        private void LoadSubtitle (int number) {
                subtitle = Base.Document.Subtitles[number];
-               SetText();
-               label.Visible = true;
+               UpdateOverlayText();
        }
 
        private void UnloadSubtitle () {
                subtitle = null;
-               ClearText();
-               label.Visible = false;
+               UpdateOverlayText();
        }
 
-       private void SetText () {
+       private void UpdateOverlayText() {
+               if (subtitle == null) {
+                       SetText(String.Empty);
+                       return;
+               }
+               
                if (toShowText)
                        SetText(subtitle.Text.Get());
                else
                        SetText(subtitle.Translation.Get());
        }
 
+       //Ref: https://developer.gnome.org/pango/stable/PangoMarkupFormat.html
        private void SetText (string text) {
+               if (text == String.Empty) {
+                       label.Visible = false;
+                       label.Text = String.Empty;
+                       return;
+               }
+
                string markup = "<span size=\"x-large\"";
 
                if (subtitle.Style.Bold)
@@ -93,26 +129,31 @@ public class SubtitleOverlay {
 
                markup += ">" + text + "</span>";
                label.Markup = markup;
-       }
-
-       private void ClearText () {
-               label.Text = String.Empty;
+               label.Visible = true;
        }
 
 
        /* Event members */
 
        private void OnBaseInitFinished () {
-               Base.Ui.Video.Tracker.CurrentSubtitleChanged += OnCurrentSubtitleChanged;
+               //We do this because the label is initialized as visible (when added to the gtk overlay in 
the constructor)
+               label.Visible = false;
+
+               Base.Ui.Video.Tracker.SubtitlePulse += OnSubtitlePulse;
        }
 
-       private void OnCurrentSubtitleChanged (int indexSubtitle) {
+       private void OnSubtitlePulse (int indexSubtitle) {
                if (indexSubtitle == -1)
                        UnloadSubtitle();
                else
                        LoadSubtitle(indexSubtitle);
        }
 
+       /* External Imports */
+
+       [DllImport("gtk-3")]
+       static extern void gtk_overlay_add_overlay (IntPtr overlay, IntPtr widget);
+
 }
 
 }
diff --git a/src/GnomeSubtitles/Ui/VideoPreview/SubtitleTracker.cs 
b/src/GnomeSubtitles/Ui/VideoPreview/SubtitleTracker.cs
index 173a7de..b67ab88 100755
--- a/src/GnomeSubtitles/Ui/VideoPreview/SubtitleTracker.cs
+++ b/src/GnomeSubtitles/Ui/VideoPreview/SubtitleTracker.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2007-2011 Pedro Castro
+ * Copyright (C) 2007-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,14 +27,18 @@ namespace GnomeSubtitles.Ui.VideoPreview {
 
 public class SubtitleTracker {
        private SearchOperator searchOp = null;
-       private int currentSubtitleIndex = 0;
+
+       /* Keep the current subtitle as an optimization. This way, while the video is showing the same 
subtitle,
+        * we don't need to constantly search for the subtitle corresponding to its position.
+        */
+       private int currentSubtitleIndex = -1;
        private Subtitle subtitle = null;
 
        /* Delegates */
-       public delegate void VideoCurrentSubtitleChangedHandler (int indexSubtitle);
+       public delegate void VideoSubtitlePulseHandler(int indexSubtitle);
 
        /* Events */
-       public event VideoCurrentSubtitleChangedHandler CurrentSubtitleChanged;
+       public event VideoSubtitlePulseHandler SubtitlePulse;
 
 
        public SubtitleTracker () {
@@ -44,15 +48,14 @@ public class SubtitleTracker {
        /* Public methods */
 
        public int FindSubtitleNearPosition (TimeSpan position) {
-               if (IsTimeInCurrentSubtitle(position))
-                       return currentSubtitleIndex;
-               else
-                       return searchOp.FindNearTime((float)position.TotalSeconds); //TODO write method in 
SubLib that accepts TimeSpans
+               //We don't optimize this (by looking at the current subtitle) because it's unnecessary. This 
method isn't called that much.
+               return searchOp.FindNearTime(position);
        }
 
        public void Close(){
-               if (IsSubtitleLoaded())
+               if (IsSubtitleLoaded()) {
                        UnSetCurrentSubtitle();
+               }
        }
 
 
@@ -67,29 +70,25 @@ public class SubtitleTracker {
        }
 
        private void SetCurrentSubtitle (int index) {
-               if (index != currentSubtitleIndex) {
-                       subtitle = Base.Document.Subtitles[index];
-                       currentSubtitleIndex = index;
-               }
+               this.subtitle = Base.Document.Subtitles[index];
+               this.currentSubtitleIndex = index;
        }
 
        private void UnSetCurrentSubtitle () {
-               if (currentSubtitleIndex != -1) {
-                       currentSubtitleIndex = -1;
-                       subtitle = null;
-               }
+               this.currentSubtitleIndex = -1;
+               this.subtitle = null;
        }
 
-       private void EmitCurrentSubtitleChanged(int newIndex) {
-               if (CurrentSubtitleChanged != null)
-                       CurrentSubtitleChanged(newIndex);
+       private void EmitSubtitlePulse(int newIndex) {
+               if (SubtitlePulse != null)
+                       SubtitlePulse(newIndex);
        }
 
 
        /* Event members */
 
        private void OnBaseInitFinished () {
-               Base.Ui.Video.Position.Changed += OnVideoPositionChanged;
+               Base.Ui.Video.Position.PositionPulse += OnVideoPositionPulse;
                Base.DocumentLoaded += OnBaseDocumentLoaded;
        }
 
@@ -97,19 +96,20 @@ public class SubtitleTracker {
                this.searchOp = new SearchOperator(document.Subtitles);
        }
 
-       private void OnVideoPositionChanged (TimeSpan newPosition) {
+       private void OnVideoPositionPulse (TimeSpan newPosition) {
                if (!(Base.IsDocumentLoaded))
                        return;
 
-               if (!(IsTimeInCurrentSubtitle(newPosition))) {
-                       int foundSubtitle = searchOp.FindWithTime((float)newPosition.TotalSeconds); //TODO 
write method in SubLib that accepts TimeSpans
-                       if (foundSubtitle == -1)
+               if (!IsTimeInCurrentSubtitle(newPosition)) {
+                       int foundSubtitle = searchOp.FindWithTime(newPosition);
+                       if (foundSubtitle == -1) {
                                UnSetCurrentSubtitle();
-                       else
+                       } else {
                                SetCurrentSubtitle(foundSubtitle);
-
-                       EmitCurrentSubtitleChanged(currentSubtitleIndex);
+                       }
                }
+
+               EmitSubtitlePulse(this.currentSubtitleIndex);
        }
 
        }
diff --git a/src/GnomeSubtitles/Ui/VideoPreview/Video.cs b/src/GnomeSubtitles/Ui/VideoPreview/Video.cs
index 5d8f3f8..bb17aa0 100644
--- a/src/GnomeSubtitles/Ui/VideoPreview/Video.cs
+++ b/src/GnomeSubtitles/Ui/VideoPreview/Video.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2010 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,6 +17,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+using Gdk;
 using GnomeSubtitles.Core;
 using GnomeSubtitles.Dialog.Unmanaged;
 using Gtk;
@@ -29,8 +30,9 @@ using System.Text.RegularExpressions;
 
 namespace GnomeSubtitles.Ui.VideoPreview {
 
+//FIXME video stops showing when paused, switching to a different application (or opening a Gnome Subtitles 
dialog)
 public class Video {
-       private HBox videoArea = null;
+       private Box videoArea = null;
        private AspectFrame frame = null;
 
        private Player player = null;
@@ -41,19 +43,19 @@ public class Video {
        private bool isLoaded = false;
        private bool playPauseToggleIsSilent = false; //Used to indicate whether toggling the button should 
not issue the toggled signal
 
-       /* Constant strings */
+       /* Constants */
        private const string videoSetSubtitleStartIconFilename = "video-set-subtitle-start-16x.png";
        private const string videoSetSubtitleEndIconFilename = "video-set-subtitle-end-16x.png";
        private const string videoSetSubtitleStartEndIconFilename = "video-set-subtitle-start-end-30x.png";
 
        public Video () {
-               videoArea = Base.GetWidget(WidgetNames.VideoAreaHBox) as HBox;
+               videoArea = Base.GetWidget(WidgetNames.VideoAreaHBox) as Box;
 
                InitializeVideoFrame();
                InitializePlayer();
 
-               position = new VideoPosition(player);
                overlay = new SubtitleOverlay();
+               position = new VideoPosition(player);
                tracker = new SubtitleTracker();
 
                SetCustomIcons();
@@ -129,8 +131,9 @@ public class Video {
 
 
                /* Update the frame */
-               frame.Child.Hide();
-               frame.Child.Show();
+//             frame.Child.Hide();
+//             frame.Child.Show();
+               frame.QueueDraw(); //To make sure the frame stops showing the last image from the closed video
                frame.Ratio = Player.DefaultAspectRatio;
 
                SilentDisablePlayPauseButton();
@@ -146,9 +149,9 @@ public class Video {
 
        public void SetLoopSelectionPlayback (bool enabled){
                if (enabled)
-                       Base.Ui.Video.Position.Changed += OnVideoPositionChangedLoopPlayback;
+                       Base.Ui.Video.Position.PositionPulse += OnVideoPositionPulseLoopPlayback;
                else
-                       Base.Ui.Video.Position.Changed -= OnVideoPositionChangedLoopPlayback;
+                       Base.Ui.Video.Position.PositionPulse -= OnVideoPositionPulseLoopPlayback;
        }
 
        public void Rewind () {
@@ -205,8 +208,8 @@ public class Video {
        public void SeekToSelection (bool allowRewind) {
                Subtitle subtitle = Core.Base.Ui.View.Selection.FirstSubtitle;
        TimeSpan time = subtitle.Times.Start;
-       if (allowRewind && Base.Config.PrefsVideoSeekOnChange) {
-               TimeSpan rewind = TimeSpan.FromMilliseconds(Base.Config.PrefsVideoSeekOnChangeRewind);
+       if (allowRewind && Base.Config.VideoSeekOnChange) {
+               TimeSpan rewind = TimeSpan.FromMilliseconds(Base.Config.VideoSeekOnChangeRewind);
                time = (time >= rewind ? time - rewind : TimeSpan.Zero);
        }
        Seek(time);
@@ -252,19 +255,24 @@ public class Video {
        }
 
        private void InitializeVideoFrame () {
+
                /* Create frame */
                frame = new AspectFrame(null, 0.5f, 0.5f, 1.6f, false);
-               frame.Shadow = ShadowType.None;
+               frame.ShadowType = ShadowType.None; //Otherwise we have a border around the frame
 
                /* Create event box */
                EventBox videoFrameEventBox = new EventBox();
                videoFrameEventBox.Add(frame);
-               videoFrameEventBox.ModifyBg(StateType.Normal, videoFrameEventBox.Style.Black);
+               RGBA black = new RGBA();
+               black.Red = 0;
+               black.Green = 0;
+               black.Blue = 0;
+               black.Alpha = 1;
+               videoFrameEventBox.OverrideBackgroundColor(StateFlags.Normal, black); //So the area outside 
the video is also black
 
-               /* Attach event box */
-               Table videoImageTable = Base.GetWidget("videoImageTable") as Table;
-               videoImageTable.Attach(videoFrameEventBox, 0, 1, 0, 1);
-               videoImageTable.ShowAll();
+               Bin bin = Base.GetWidget(WidgetNames.VideoImageOverlay) as Bin;
+               bin.Add(videoFrameEventBox);
+               bin.ShowAll();
        }
 
        private void InitializePlayer () {
@@ -370,7 +378,7 @@ public class Video {
        }
 
        /// <summary>Do loop playback when it's enabled, seeking to current selection on video position 
change.</summary>
-       private void OnVideoPositionChangedLoopPlayback (TimeSpan position) {
+       private void OnVideoPositionPulseLoopPlayback (TimeSpan position) {
                if (!(Base.IsDocumentLoaded))
                        return;
 
@@ -379,7 +387,6 @@ public class Video {
                        return;
 
                Subtitle lastSubtitle = Core.Base.Ui.View.Selection.LastSubtitle;
-
                if ((position < firstSubtitle.Times.Start) || (position > lastSubtitle.Times.End))
                        SeekToSelection();
        }
diff --git a/src/GnomeSubtitles/Ui/VideoPreview/VideoPosition.cs 
b/src/GnomeSubtitles/Ui/VideoPreview/VideoPosition.cs
index def0a30..f0a729b 100644
--- a/src/GnomeSubtitles/Ui/VideoPreview/VideoPosition.cs
+++ b/src/GnomeSubtitles/Ui/VideoPreview/VideoPosition.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2009 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -36,7 +36,7 @@ public class VideoPosition {
        private TimeSpan position = TimeSpan.Zero;
 
        /* Slider related */
-       private HScale slider = null;
+       private Scale slider = null;
        private uint userUpdateTimeoutId = 0; //the ID of the timeout after which the value will be updated 
by the user selection
        private bool isPlayerUpdate = false;
 
@@ -45,13 +45,14 @@ public class VideoPosition {
        private TimeSpan seekIncrement = TimeSpan.FromMilliseconds(500);
 
        /* Delegates */
-       public delegate void VideoPositionChangedHandler (TimeSpan position);
+       public delegate void VideoPositionPulseHandler (TimeSpan position);
 
        /* Events */
-       public event VideoPositionChangedHandler Changed;
+
+       public event VideoPositionPulseHandler PositionPulse;
 
        public VideoPosition (Player player) {
-               slider = Base.GetWidget(WidgetNames.VideoSlider) as HScale;
+               slider = Base.GetWidget(WidgetNames.VideoSlider) as Scale;
                positionLabel = Base.GetWidget(WidgetNames.VideoPositionLabel) as Label;
                positionValueLabel = Base.GetWidget(WidgetNames.VideoPositionValueLabel) as Label;
                lengthValueLabel = Base.GetWidget(WidgetNames.VideoLengthValueLabel) as Label;
@@ -110,14 +111,14 @@ public class VideoPosition {
        }
 
        /// <summary>Handles changes in the player position.</summary>
-       private void OnPlayerPositionChanged (TimeSpan newPosition) {
+       private void OnPlayerPositionPulse (TimeSpan newPosition) {
                position = newPosition;
 
                if (userUpdateTimeoutId == 0)  //There is not a manual positioning going on
                        UpdateSlider(newPosition);
 
                UpdatePositionValueLabel(newPosition);
-               EmitVideoPositionChanged(newPosition);
+               EmitVideoPositionPulse(newPosition);
        }
 
        private void OnBaseVideoLoaded (Uri videoUri) {
@@ -143,9 +144,9 @@ public class VideoPosition {
                userUpdateTimeoutId = GLib.Timeout.Add(userUpdateTimeout, UpdatePlayerPosition);
        }
 
-       private void EmitVideoPositionChanged (TimeSpan newPosition) {
-               if (Changed != null)
-                       Changed(newPosition);
+       private void EmitVideoPositionPulse (TimeSpan newPosition) {
+               if (PositionPulse != null)
+                       PositionPulse(newPosition);
        }
 
        private void ConnectSliderSignals () {
@@ -160,7 +161,7 @@ public class VideoPosition {
                Base.TimingModeChanged += OnBaseTimingModeChanged;
                Base.VideoLoaded += OnBaseVideoLoaded;
 
-               player.PositionChanged += OnPlayerPositionChanged;
+               player.PositionPulse += OnPlayerPositionPulse;
        }
 
        private void OnBaseTimingModeChanged (TimingMode timingMode) {
diff --git a/src/GnomeSubtitles/Ui/View/SubtitleView.cs b/src/GnomeSubtitles/Ui/View/SubtitleView.cs
index d69c5c0..124e936 100644
--- a/src/GnomeSubtitles/Ui/View/SubtitleView.cs
+++ b/src/GnomeSubtitles/Ui/View/SubtitleView.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -73,9 +73,9 @@ public class SubtitleView {
 
        public void SetAutoSelectSubtitles (bool active) {
                if (active)
-                       Base.Ui.Video.Tracker.CurrentSubtitleChanged += OnCurrentSubtitleChanged;
+                       Base.Ui.Video.Tracker.SubtitlePulse += OnSubtitlePulse;
                else
-                       Base.Ui.Video.Tracker.CurrentSubtitleChanged -= OnCurrentSubtitleChanged;
+                       Base.Ui.Video.Tracker.SubtitlePulse -= OnSubtitlePulse;
        }
 
 
@@ -301,11 +301,11 @@ public class SubtitleView {
 
        /* Cell Renderers */
 
-       private void RenderNumberCell (TreeViewColumn column, CellRenderer cell, TreeModel treeModel, 
TreeIter iter) {
+       private void RenderNumberCell (TreeViewColumn column, CellRenderer cell, ITreeModel treeModel, 
TreeIter iter) {
                (cell as CellRendererText).Text = (Util.PathToInt(treeModel.GetPath(iter)) + 1).ToString();
        }
 
-       private void RenderStartCell (TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter 
iter) {
+       private void RenderStartCell (TreeViewColumn column, CellRenderer cell, ITreeModel model, TreeIter 
iter) {
                CellRendererText renderer = cell as CellRendererText;
                if (Base.TimingModeIsFrames)
                        renderer.Text = subtitles[iter].Frames.Start.ToString();
@@ -313,7 +313,7 @@ public class SubtitleView {
                        renderer.Text = Util.TimeSpanToText(subtitles[iter].Times.Start);
        }
 
-       private void RenderEndCell (TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter) 
{
+       private void RenderEndCell (TreeViewColumn column, CellRenderer cell, ITreeModel model, TreeIter 
iter) {
                CellRendererText renderer = cell as CellRendererText;
                if (Base.TimingModeIsFrames)
                        renderer.Text = subtitles[iter].Frames.End.ToString();
@@ -321,7 +321,7 @@ public class SubtitleView {
                        renderer.Text = Util.TimeSpanToText(subtitles[iter].Times.End);
        }
 
-       private void RenderDurationCell (TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter 
iter) {
+       private void RenderDurationCell (TreeViewColumn column, CellRenderer cell, ITreeModel model, TreeIter 
iter) {
                CellRendererText renderer = cell as CellRendererText;
                if (Base.TimingModeIsFrames)
                        renderer.Text = subtitles[iter].Frames.Duration.ToString();
@@ -329,12 +329,12 @@ public class SubtitleView {
                        renderer.Text = Util.TimeSpanToText(subtitles[iter].Times.Duration);
        }
 
-       private void RenderSubtitleTextCell (TreeViewColumn column, CellRenderer cell, TreeModel treeModel, 
TreeIter iter) {
+       private void RenderSubtitleTextCell (TreeViewColumn column, CellRenderer cell, ITreeModel treeModel, 
TreeIter iter) {
                Subtitle subtitle = subtitles[iter];
                RenderTextCell(cell as CellRendererText, iter, subtitle.Text, subtitle.Style);
        }
 
-       private void RenderTranslationTextCell (TreeViewColumn column, CellRenderer cell, TreeModel 
treeModel, TreeIter iter) {
+       private void RenderTranslationTextCell (TreeViewColumn column, CellRenderer cell, ITreeModel 
treeModel, TreeIter iter) {
                Subtitle subtitle = subtitles[iter];
                RenderTextCell(cell as CellRendererText, iter, subtitle.Translation, subtitle.Style);
        }
@@ -353,7 +353,7 @@ public class SubtitleView {
                GetStyleMarkup(subtitleStyle, ref stylePrefix, ref styleSuffix);
 
                bool first = true;
-               bool viewLineLengths = Base.Config.PrefsViewLineLengths;
+               bool viewLineLengths = Base.Config.ViewLineLengths;
                foreach (string line in subtitleText) {
                        textMarkup += (first ? String.Empty : "\n") + stylePrefix + 
GLib.Markup.EscapeText(line) + styleSuffix + (viewLineLengths ? " <span size=\"small\"><sup>(" + line.Length 
+ ")</sup></span>" : String.Empty);
                        if (first)
@@ -438,7 +438,7 @@ public class SubtitleView {
                        SubtitleCountChanged(subtitles.Count);
        }
 
-       private void OnCurrentSubtitleChanged (int subtitleIndex) {
+       private void OnSubtitlePulse (int subtitleIndex) {
                selection.Select(subtitleIndex, false, false, true);
        }
 
diff --git a/src/GnomeSubtitles/Ui/View/Subtitles.cs b/src/GnomeSubtitles/Ui/View/Subtitles.cs
index d5d47c5..f1a7585 100644
--- a/src/GnomeSubtitles/Ui/View/Subtitles.cs
+++ b/src/GnomeSubtitles/Ui/View/Subtitles.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -72,7 +72,7 @@ public class Subtitles : SubLib.Core.Domain.Subtitles {
        /// <summary>Creates a subtitle and adds it after the specified position.</summary>
        /// <remarks>The timings of the new subtitle will be based on the subtitle that preceeds it.</remarks>
        public void AddNewAfter (int index) {
-               Collection.AddNewAfter(index, Properties, Base.Config.PrefsTimingsTimeBetweenSubtitles);
+               Collection.AddNewAfter(index, Properties, Base.Config.TimingsTimeBetweenSubtitles);
                int newIndex = index + 1;
                Subtitle newSubtitle = this[newIndex];
                model.SetValue(model.Insert(newIndex), 0, newSubtitle);
@@ -81,7 +81,7 @@ public class Subtitles : SubLib.Core.Domain.Subtitles {
        /// <summary>Creates a subtitle and adds it before the specified position.</summary>
        /// <remarks>The timings of the new subtitle will be based on the subtitle that succeeds it.</remarks>
        public void AddNewBefore (int index) {
-               Collection.AddNewBefore(index, Properties, Base.Config.PrefsTimingsTimeBetweenSubtitles);
+               Collection.AddNewBefore(index, Properties, Base.Config.TimingsTimeBetweenSubtitles);
                Subtitle newSubtitle = this[index];
                model.SetValue(model.Insert(index), 0, newSubtitle);
        }
diff --git a/src/GnomeSubtitles/Ui/WidgetNames.cs b/src/GnomeSubtitles/Ui/WidgetNames.cs
index cb9a5d5..667719a 100644
--- a/src/GnomeSubtitles/Ui/WidgetNames.cs
+++ b/src/GnomeSubtitles/Ui/WidgetNames.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of Gnome Subtitles.
- * Copyright (C) 2006-2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * Gnome Subtitles is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -114,8 +114,7 @@ public class WidgetNames {
        /* Video */
        public const string VideoAreaHBox = "videoAreaHBox";
        public const string VideoTimingsVBox = "videoTimingsVBox";
-       public const string VideoSubtitleLabel = "videoSubtitle";
-       public const string VideoSubtitleLabelEventBox = "videoSubtitleEventBox";
+       public const string VideoImageOverlay = "videoImageOverlay";
        public const string VideoPositionLabel = "videoControlsPositionLabel";
        public const string VideoPositionValueLabel = "videoControlsPositionValueLabel";
        public const string VideoLengthValueLabel = "videoControlsLengthValueLabel";
diff --git a/src/Makefile.am b/src/Makefile.am
index 298e29a..c2fd5c9 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -40,21 +40,21 @@ GS_SOURCES = \
        $(srcdir)/SubLib/IO/SubtitleFormats/*.cs
 
 GS_RESOURCES = \
-       $(srcdir)/Glade/AboutDialog.glade \
-       $(srcdir)/Glade/EncodingsDialog.glade \
-       $(srcdir)/Glade/FileOpenDialog.glade \
-       $(srcdir)/Glade/FilePropertiesDialog.glade \
-       $(srcdir)/Glade/FileSaveAsDialog.glade \
-       $(srcdir)/Glade/HeadersDialog.glade \
-       $(srcdir)/Glade/MainWindow.glade \
-       $(srcdir)/Glade/PreferencesDialog.glade \
-       $(srcdir)/Glade/SearchDialog.glade \
-       $(srcdir)/Glade/SetLanguageDialog.glade \
-       $(srcdir)/Glade/TimingsAdjustDialog.glade \
-       $(srcdir)/Glade/TimingsShiftDialog.glade \
-       $(srcdir)/Glade/TimingsSynchronizeDialog.glade \
-       $(srcdir)/Glade/VideoOpenDialog.glade \
-       $(srcdir)/Glade/VideoSeekToDialog.glade \
+       $(srcdir)/Glade/AboutDialog.ui \
+       $(srcdir)/Glade/EncodingsDialog.ui \
+       $(srcdir)/Glade/FileOpenDialog.ui \
+       $(srcdir)/Glade/FilePropertiesDialog.ui \
+       $(srcdir)/Glade/FileSaveAsDialog.ui \
+       $(srcdir)/Glade/HeadersDialog.ui \
+       $(srcdir)/Glade/MainWindow.ui \
+       $(srcdir)/Glade/PreferencesDialog.ui \
+       $(srcdir)/Glade/SearchDialog.ui \
+       $(srcdir)/Glade/SetLanguageDialog.ui \
+       $(srcdir)/Glade/TimingsAdjustDialog.ui \
+       $(srcdir)/Glade/TimingsShiftDialog.ui \
+       $(srcdir)/Glade/TimingsSynchronizeDialog.ui \
+       $(srcdir)/Glade/VideoOpenDialog.ui \
+       $(srcdir)/Glade/VideoSeekToDialog.ui \
        $(GS_DATADIR)/gnome-subtitles.svg \
        $(GS_DATADIR)/gnome-subtitles-logo.png \
        $(GS_DATADIR)/video-set-subtitle-end-16x.png \
diff --git a/src/SubLib/Core/Search/SearchOperator.cs b/src/SubLib/Core/Search/SearchOperator.cs
index e5c914e..0455a68 100644
--- a/src/SubLib/Core/Search/SearchOperator.cs
+++ b/src/SubLib/Core/Search/SearchOperator.cs
@@ -1,6 +1,6 @@
 /*
  * This file is part of SubLib.
- * Copyright (C) 2006-2011 Pedro Castro
+ * Copyright (C) 2006-2017 Pedro Castro
  *
  * SubLib is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -93,60 +93,59 @@ public class SearchOperator {
                return replaced;
        }
 
-       /// <summary>Finds the subtitle that contains the specified time position.</summary>
-       /// <param name="time">The time position, in seconds.</param>
-       /// <returns>The found subtitle number, or -1 if no subtitle was found.</returns>
-       public int FindWithTime (float time) {
+       /// <summary>Finds the subtitle containing the specified time.</summary>
+       /// <param name="time">The time position.</param>
+       /// <returns>The number of the subtitle that was found, or -1 if no subtitle was found.</returns>
+       public int FindWithTime (TimeSpan time) {
                SubtitleCollection collection = subtitles.Collection;
 
-               if (collection.Count == 0)
-                       return -1;
-
                for (int subtitleNumber = 0 ; subtitleNumber < collection.Count ; subtitleNumber++) {
                        Subtitle subtitle = collection[subtitleNumber];
-                       double start = subtitle.Times.Start.TotalSeconds;
-                       if (time < start)
-                               continue;
-
-                       double end = subtitle.Times.End.TotalSeconds;
-                       if (time <= end)
-                               return subtitleNumber; //TODO optimize: else return -1;
+                       if ((time >= subtitle.Times.Start) && (time <= subtitle.Times.End)) {
+                               return subtitleNumber;
+                       }
                }
+
                return -1; // No subtitles were found
        }
 
-       /// <summary>Finds the subtitle more near of specified time position.</summary>
-       /// <param name="time">The time position, in seconds.</param>
-       /// <returns>The found subtitle number, or -1 if no subtitle was found.</returns>
-       public int FindNearTime (float time) {
+       /// <summary>Finds the subtitle nearer the specified time.</summary>
+       /// <param name="time">The time position.</param>
+       /// <returns>The number of the subtitle that was found, or -1 if no subtitle was found.</returns>
+       public int FindNearTime (TimeSpan time) {
                SubtitleCollection collection = subtitles.Collection;
-               if (collection.Count == 0)
+               if (collection.Count == 0) {
                        return -1;
+               }
 
                /* Check if before the first subtitle */
-               if (time < collection[0].Times.Start.TotalSeconds)
+               if (time < collection[0].Times.Start) {
                        return 0;
+               }
 
                /* Iterate subtitles two by two - the last subtitle is handled in pair and individually 
afterwards */
                for (int subtitleNumber = 0 ; subtitleNumber < collection.Count - 1 ; subtitleNumber++) {
                        Subtitle subtitle = collection[subtitleNumber];
 
                        /* Continue iterating if didn't reach subtitle start yet */
-                       double start = subtitle.Times.Start.TotalSeconds;
-                       if (time < start)
+                       TimeSpan start = subtitle.Times.Start;
+                       if (time < start) {
                                continue;
+                       }
 
                        /* Check if time is contained by the subtitle */
-                       double end = subtitle.Times.End.TotalSeconds;
-                       if (time <= end)
+                       TimeSpan end = subtitle.Times.End;
+                       if (time <= end) {
                                return subtitleNumber;
+                       }
 
                        /* Check if contained between this and the next subtitle, and which is nearest */
                        int nextSubtitleIndex = subtitleNumber + 1;
                        Subtitle nextSubtitle = collection[nextSubtitleIndex];
-                       double nextSubtitleStart = nextSubtitle.Times.Start.TotalSeconds;
-                       if (time < nextSubtitleStart)
+                       TimeSpan nextSubtitleStart = nextSubtitle.Times.Start;
+                       if (time < nextSubtitleStart) {
                                return ((time - end) < (nextSubtitleStart - time)) ? subtitleNumber : 
nextSubtitleIndex;
+                       }
                }
 
                /* If no rule matched before, time must be after last subtitle */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]