[Xfce4-commits] <parole:master> Merge branch 'gst0.2.2'

Simon Steinbeiss noreply at xfce.org
Mon Jul 23 01:24:44 CEST 2012


Updating branch refs/heads/master
         to c4c147a4844c406d820bea16b26d2003d7d437cb (commit)
       from a9f8b19db9b79ce24cc00d5b1a379ec7058a26fc (commit)

commit c4c147a4844c406d820bea16b26d2003d7d437cb
Merge: a9f8b19 02fab97
Author: Simon Steinbeiss <ochosi at xfce.org>
Date:   Sun Jul 15 00:53:01 2012 +0200

    Merge branch 'gst0.2.2'

commit 02fab972c3397e51fd9289313eec0d9d2d605809
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sat Jul 14 11:43:41 2012 -0400

    Rearranged playlist buttons, added shuffle and repeat.  Shuffle and Repeat playlist buttons now toggle menu items as well... but not the other way around yet.

commit cdd5b9e9206c97a5324f9dc6518efa33ac14ae58
Author: Simon Steinbeiss <ochosi at xfce.org>
Date:   Sat Jul 14 01:42:48 2012 +0200

    Use correct icons for next/previous buttons

commit c1e8e2234d9b58d1308364de5d7f89fa1ef9145c
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Fri Jul 13 16:00:14 2012 -0400

    Corrected functionality of previous and next buttons.

commit 4b2fb26cc04bc9c454563b5f68d6c0647c363336
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Fri Jul 13 15:23:45 2012 -0400

    Added new Settings dialog from 0.2.2

commit 09ac4a8f1e77b852bf50a3f917a27dd333080e83
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Fri Jul 13 15:00:55 2012 -0400

    Small fix for autogen.sh

commit e88e0ad9a87d3ef3d2a3380f7c2fe05db6fc56d3
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Fri Jul 13 14:25:10 2012 -0400

    Added suggestions provided by libtool.  All existing errors in configure are from XDT_FEATURE_DEBUG.

commit 8de1111a778bb431edf73af2c871cf8f73e0d2ae
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Fri Jul 13 14:00:28 2012 -0400

    Added deletions to commit.

commit 0dd9f5bdd24068954643866ac0518a4b003df8d6
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Fri Jul 13 13:59:06 2012 -0400

    Removed window title plugin from build since its functionality is now baked-in.

commit dbecec4db56fc15bf05c0ecdc4043ed39a015c90
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Fri Jul 13 13:49:26 2012 -0400

    Fix for widget_hide error.  Addressed some messages displayed when running autogen.sh

commit d1c58c9e88ff81dba4ca0acd2e4f121f31a6df52
Author: Simon Steinbeiss <ochosi at xfce.org>
Date:   Fri Jul 13 14:39:23 2012 +0200

    Reduce fade-out-on-exit from 4sec to 1.5sec

commit 6dd5ebc25a6e7bb05c08929243b08d94c5951526
Author: Simon Steinbeiss <ochosi at xfce.org>
Date:   Fri Jul 13 14:01:29 2012 +0200

    Drop deprecated gst-iface files

commit 61f634d4e6338eed469c9782cd06066ed1a7603f
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Fri Jul 13 07:22:46 2012 -0400

    Version bump for UI files to 2.24. Cleared some of the warnings displayed while running.

commit d3a41f2ef7bda752079f8c4acaab6168e4127251
Author: Simon Steinbeiss <ochosi at xfce.org>
Date:   Fri Jul 13 02:34:42 2012 +0200

    Fix deprecated unref and add FIXMEs

commit fe21e9e96219e880996cb6e8ae663fe8eb60f880
Author: Simon Steinbeiss <ochosi at xfce.org>
Date:   Fri Jul 13 02:14:57 2012 +0200

    Gstreamer update from the 0.2.2 branch (should fix LP: #1023583)

 INSTALL                                      |    9 +-
 Makefile.am                                  |    2 +
 autogen.sh                                   |    1 +
 configure.ac.in                              |   20 +-
 data/interfaces/mediachooser.ui              |  164 +++++----
 data/interfaces/open-location.ui             |  174 +++++----
 data/interfaces/parole-settings.ui           |  571 +++++++++++++++++--------
 data/interfaces/parole.ui                    |   12 +-
 data/interfaces/playlist.ui                  |   59 ++--
 data/interfaces/plugins.ui                   |  122 ++++---
 data/interfaces/save-playlist.ui             |  131 +++---
 gst/Makefile.am                              |    4 +-
 gst/parole-gst-iface.c                       |  108 -----
 gst/parole-gst-iface.h                       |   70 ----
 gst/parole-gst.c                             |  469 ++++++++++------------
 gst/parole-gst.h                             |   23 +-
 parole/parole-provider-player.c              |    2 +-
 parole/parole-provider-player.h              |   11 +-
 parole/parole-stream.c                       |    2 +-
 parole/parole-stream.h                       |   14 +-
 plugins/Makefile.am                          |    6 +-
 plugins/window-title/Makefile.am             |   42 --
 plugins/window-title/window-title-plugin.c   |   47 ---
 plugins/window-title/window-title-provider.c |  147 -------
 plugins/window-title/window-title-provider.h |   44 --
 plugins/window-title/window-title.desktop.in |    6 -
 src/parole-disc-menu.c                       |    6 +-
 src/parole-medialist.c                       |  129 +++----
 src/parole-medialist.h                       |    6 +
 src/parole-player.c                          |  176 ++++++---
 src/parole-player.h                          |    7 +
 src/parole-plugin-player.c                   |    2 +-
 32 files changed, 1195 insertions(+), 1391 deletions(-)

diff --git a/INSTALL b/INSTALL
index 7d1c323..a1e89e1 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,8 +1,8 @@
 Installation Instructions
 *************************
 
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation,
+Inc.
 
    Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
@@ -226,6 +226,11 @@ order to use an ANSI C compiler:
 
 and if that doesn't work, install pre-built binaries of GCC for HP-UX.
 
+   HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved.  Use GNU `make'
+instead.
+
    On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
 parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
 a workaround.  If GNU CC is not installed, it is therefore recommended
diff --git a/Makefile.am b/Makefile.am
index 7ec106d..8993042 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,3 +1,5 @@
+ACLOCAL_AMFLAGS = -I m4
+
 SUBDIRS =  			\
 	data			\
 	parole 			\
diff --git a/autogen.sh b/autogen.sh
index 6bc0c8a..aa17066 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -17,4 +17,5 @@ EOF
   exit 1
 }
 
+mkdir m4
 xdt-autogen $@
diff --git a/configure.ac.in b/configure.ac.in
index d1b65b0..67568da 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -11,6 +11,8 @@ m4_define([parole_version], [parole_version_major().parole_version_minor().parol
 AC_INIT([parole], [parole_version], [aliov at xfce.org])
 AC_PREREQ(2.59c)
 
+AC_CONFIG_MACRO_DIR([m4])
+
 AM_INIT_AUTOMAKE([1.8 dist-bzip2 tar-ustar])
 AM_CONFIG_HEADER([config.h])
 AM_MAINTAINER_MODE()
@@ -31,8 +33,8 @@ AC_PROG_INTLTOOL([intltool_minimum_version], [no-xml])
 # ===================================================== #
 #               Initialize libtool                      #
 # ===================================================== #
-AC_DISABLE_STATIC()
-AC_PROG_LIBTOOL()
+LT_PREREQ([2.2.6])
+LT_INIT([disable-static])
 m4_ifdef([LT_OUTPUT], [LT_OUTPUT])
 
 # ===================================================== #
@@ -66,8 +68,8 @@ XDT_I18N([@LINGUAS@])
 #==================================================== #
 #          Check for required packages 		      #
 #=====================================================#
-m4_define([gtk_minimum_version], [2.16.0])
-m4_define([glib_minimum_version], [2.16.0])
+m4_define([gtk_minimum_version], [2.24.0])
+m4_define([glib_minimum_version], [2.24.0])
 m4_define([gstreamer_minimum_version], [0.10.11])
 
 m4_define([dbus_minimum_version], [0.60])
@@ -181,14 +183,6 @@ if test x"$ac_tray_plugin" = x"yes"; then
  	[libnotify library], [yes]) 
 fi
 
-# Window title plugin.
-#--------------------------
-AC_ARG_ENABLE([window-title-plugin], AC_HELP_STRING([--disable-window-title-plugin], [Don't build the window title plugin]),
-  [ac_window_title_plugin=$enableval], [ac_window_title_plugin=yes])
-AC_MSG_CHECKING([whether to build the window title plugin])
-AM_CONDITIONAL([WINDOW_TITLE_PLUGIN], [test x"$ac_window_title_plugin" = x"yes"])
-AC_MSG_RESULT([$ac_window_title_plugin])
-
 # Power Manager
 #--------------------------
 AC_ARG_ENABLE([power-manager-plugin], AC_HELP_STRING([--disable-power-manager-plugin], [Don't build the power manager plugin]),
@@ -230,7 +224,6 @@ plugins/Makefile
 plugins/sample/Makefile
 plugins/properties/Makefile
 plugins/tray/Makefile
-plugins/window-title/Makefile
 plugins/power-manager/Makefile
 docs/Makefile
 docs/plugin-api/version.xml
@@ -268,7 +261,6 @@ echo "
 	fi 
 	
 	echo "
-	Window title:			${ac_window_title_plugin}
 	Power Manager:			${ac_power_manager_plugin}
 
 ------------------------------------------------------
diff --git a/data/interfaces/mediachooser.ui b/data/interfaces/mediachooser.ui
index ac62ab2..d77d01b 100644
--- a/data/interfaces/mediachooser.ui
+++ b/data/interfaces/mediachooser.ui
@@ -1,36 +1,112 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
+  <requires lib="gtk+" version="2.24"/>
   <!-- interface-requires libxfce4ui 4.5 -->
   <!-- interface-naming-policy project-wide -->
   <object class="XfceTitledDialog" id="chooser">
+    <property name="can_focus">False</property>
     <property name="title" translatable="yes">Parole Media Chooser</property>
     <property name="default_width">680</property>
     <property name="default_height">480</property>
     <property name="icon_name">audio-x-generic</property>
     <property name="type_hint">normal</property>
-    <property name="has_separator">False</property>
     <property name="subtitle" translatable="yes">Open media files</property>
-    <signal name="destroy" handler="parole_media_chooser_destroy_cb"/>
+    <signal name="destroy" handler="parole_media_chooser_destroy_cb" swapped="no"/>
     <child internal-child="vbox">
       <object class="GtkVBox" id="dialog-vbox">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">edge</property>
+            <child>
+              <object class="GtkHBox" id="info">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHBox" id="hbox1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="spacing">5</property>
+                <property name="homogeneous">True</property>
+                <child>
+                  <object class="GtkButton" id="close">
+                    <property name="label">gtk-close</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_stock">True</property>
+                    <signal name="clicked" handler="parole_media_chooser_close_clicked" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="open">
+                    <property name="label" translatable="yes">Add</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="image">image1</property>
+                    <signal name="clicked" handler="parole_media_chooser_add_clicked" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="pack_type">end</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkVBox" id="vbox">
             <property name="visible">True</property>
-            <property name="orientation">vertical</property>
+            <property name="can_focus">False</property>
             <child>
               <object class="GtkFileChooserWidget" id="filechooserwidget">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="border_width">5</property>
                 <property name="orientation">vertical</property>
                 <property name="spacing">1</property>
-                <signal name="file_activated" handler="media_chooser_file_activate_cb"/>
-                <signal name="current_folder_changed" handler="media_chooser_folder_changed_cb"/>
+                <signal name="file-activated" handler="media_chooser_file_activate_cb" swapped="no"/>
+                <signal name="current-folder-changed" handler="media_chooser_folder_changed_cb" swapped="no"/>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
@@ -40,8 +116,9 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="draw_indicator">True</property>
-                <signal name="toggled" handler="parole_media_chooser_recursive_toggled_cb"/>
+                <signal name="toggled" handler="parole_media_chooser_recursive_toggled_cb" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -55,8 +132,9 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="draw_indicator">True</property>
-                <signal name="toggled" handler="parole_media_chooser_replace_toggled_cb"/>
+                <signal name="toggled" handler="parole_media_chooser_replace_toggled_cb" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -70,8 +148,9 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="draw_indicator">True</property>
-                <signal name="toggled" handler="start_playing_toggled_cb"/>
+                <signal name="toggled" handler="start_playing_toggled_cb" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -81,74 +160,17 @@
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
-            <property name="visible">True</property>
-            <property name="layout_style">edge</property>
-            <child>
-              <object class="GtkHBox" id="info">
-                <property name="visible">True</property>
-                <child>
-                  <placeholder/>
-                </child>
-              </object>
-              <packing>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkHBox" id="hbox1">
-                <property name="visible">True</property>
-                <property name="spacing">5</property>
-                <property name="homogeneous">True</property>
-                <child>
-                  <object class="GtkButton" id="close">
-                    <property name="label">gtk-close</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">True</property>
-                    <property name="use_stock">True</property>
-                    <signal name="clicked" handler="parole_media_chooser_close_clicked"/>
-                  </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkButton" id="open">
-                    <property name="label" translatable="yes">Add</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">True</property>
-                    <property name="image">image1</property>
-                    <signal name="clicked" handler="parole_media_chooser_add_clicked"/>
-                  </object>
-                  <packing>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="pack_type">end</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
       </object>
     </child>
   </object>
   <object class="GtkImage" id="image1">
     <property name="visible">True</property>
+    <property name="can_focus">False</property>
     <property name="stock">gtk-add</property>
   </object>
 </interface>
diff --git a/data/interfaces/open-location.ui b/data/interfaces/open-location.ui
index 7c41108..36893d1 100644
--- a/data/interfaces/open-location.ui
+++ b/data/interfaces/open-location.ui
@@ -1,66 +1,63 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
+  <requires lib="gtk+" version="2.24"/>
   <!-- interface-requires libxfce4ui 4.5 -->
   <!-- interface-naming-policy project-wide -->
-  <object class="XfceTitledDialog" id="open-location">
-    <property name="title" translatable="yes">Open Location</property>
-    <property name="default_width">400</property>
-    <property name="icon_name">gtk-network</property>
+  <object class="GtkDialog" id="dialog1">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
     <property name="type_hint">normal</property>
-    <property name="has_separator">False</property>
-    <property name="subtitle" translatable="yes">Open location of media file or live stream</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox1">
+      <object class="GtkVBox" id="dialog-vbox2">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <property name="spacing">2</property>
-        <child>
-          <object class="GtkVBox" id="vbox1">
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area2">
             <property name="visible">True</property>
-            <property name="orientation">vertical</property>
-            <property name="spacing">5</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
             <child>
-              <object class="GtkHBox" id="hbox2">
-                <property name="visible">True</property>
-                <property name="spacing">5</property>
-                <child>
-                  <object class="GtkEntry" id="entry">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="invisible_char">&#x25CF;</property>
-                  </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkButton" id="clear-history">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">True</property>
-                    <property name="image">image2</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
             </child>
           </object>
           <packing>
-            <property name="position">1</property>
+            <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>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-clear</property>
+  </object>
+  <object class="XfceTitledDialog" id="open-location">
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">Open Location</property>
+    <property name="default_width">400</property>
+    <property name="icon_name">gtk-network</property>
+    <property name="type_hint">normal</property>
+    <property name="subtitle" translatable="yes">Open location of media file or live stream</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="spacing">2</property>
         <child internal-child="action_area">
           <object class="GtkHButtonBox" id="dialog-action_area1">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="cancel">
@@ -68,6 +65,7 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
+                <property name="use_action_appearance">False</property>
                 <property name="use_stock">True</property>
               </object>
               <packing>
@@ -83,6 +81,7 @@
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">True</property>
+                <property name="use_action_appearance">False</property>
                 <property name="use_stock">True</property>
               </object>
               <packing>
@@ -94,51 +93,70 @@
           </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>
-      </object>
-    </child>
-    <action-widgets>
-      <action-widget response="-6">cancel</action-widget>
-      <action-widget response="-5">open</action-widget>
-    </action-widgets>
-  </object>
-  <object class="GtkImage" id="image2">
-    <property name="visible">True</property>
-    <property name="stock">gtk-clear</property>
-  </object>
-  <object class="GtkDialog" id="dialog1">
-    <property name="border_width">5</property>
-    <property name="type_hint">normal</property>
-    <property name="has_separator">False</property>
-    <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox2">
-        <property name="visible">True</property>
-        <property name="orientation">vertical</property>
-        <property name="spacing">2</property>
         <child>
-          <placeholder/>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area2">
+          <object class="GtkVBox" id="vbox1">
             <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <placeholder/>
-            </child>
+            <property name="can_focus">False</property>
+            <property name="spacing">5</property>
             <child>
-              <placeholder/>
+              <object class="GtkHBox" id="hbox2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="spacing">5</property>
+                <child>
+                  <object class="GtkEntry" id="entry">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="invisible_char">●</property>
+                    <property name="primary_icon_activatable">False</property>
+                    <property name="secondary_icon_activatable">False</property>
+                    <property name="primary_icon_sensitive">True</property>
+                    <property name="secondary_icon_sensitive">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="clear-history">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="image">image2</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">True</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
             </child>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
           </packing>
         </child>
       </object>
     </child>
+    <action-widgets>
+      <action-widget response="-6">cancel</action-widget>
+      <action-widget response="-5">open</action-widget>
+    </action-widgets>
   </object>
 </interface>
diff --git a/data/interfaces/parole-settings.ui b/data/interfaces/parole-settings.ui
index 6be698c..5914788 100644
--- a/data/interfaces/parole-settings.ui
+++ b/data/interfaces/parole-settings.ui
@@ -1,127 +1,344 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
+  <requires lib="gtk+" version="2.24"/>
   <!-- interface-requires libxfce4ui 4.5 -->
   <!-- interface-naming-policy project-wide -->
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-revert-to-saved</property>
+  </object>
   <object class="XfceTitledDialog" id="settings-dialog">
-    <property name="border_width">0</property>
+    <property name="can_focus">False</property>
     <property name="title" translatable="yes">Parole Settings</property>
     <property name="icon_name">parole</property>
-    <property name="type_hint">normal</property>
-    <property name="has_separator">False</property>
+    <property name="type_hint">dialog</property>
     <property name="subtitle" translatable="yes">Media Player Settings</property>
-    <signal name="response" handler="parole_conf_dialog_response_cb"/>
+    <signal name="response" handler="parole_conf_dialog_response_cb" swapped="no"/>
     <child internal-child="vbox">
       <object class="GtkVBox" id="dialog-vbox1">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <object class="GtkButton" id="close">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
-          <object class="GtkVBox" id="vbox1">
+          <object class="GtkNotebook" id="notebook1">
             <property name="visible">True</property>
-            <property name="orientation">vertical</property>
-            <property name="spacing">10</property>
+            <property name="can_focus">True</property>
             <child>
-              <object class="GtkFrame" id="frame-display">
+              <object class="GtkVBox" id="vbox1">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="spacing">12</property>
+                <child>
+                  <object class="GtkFrame" id="frame1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">none</property>
+                    <child>
+                      <object class="GtkAlignment" id="alignment1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="left_padding">12</property>
+                        <child>
+                          <object class="GtkCheckButton" id="reset-saver">
+                            <property name="label" translatable="yes">Disable screensaver while playing movies</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="use_action_appearance">False</property>
+                            <property name="draw_indicator">True</property>
+                            <signal name="toggled" handler="parole_conf_dialog_reset_saver_changed_cb" swapped="no"/>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="label5">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes"><b>Video</b></property>
+                        <property name="use_markup">True</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkFrame" id="frame2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">none</property>
+                    <child>
+                      <object class="GtkAlignment" id="alignment2">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="left_padding">12</property>
+                        <child>
+                          <object class="GtkVBox" id="vbox2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <child>
+                              <object class="GtkCheckButton" id="enable-vis">
+                                <property name="label" translatable="yes">Enable visualization when playing audio file</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="use_action_appearance">False</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" handler="parole_conf_dialog_enable_vis_changed_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkHBox" id="hbox1">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">6</property>
+                                <child>
+                                  <object class="GtkLabel" id="label8">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Visualization type:</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkComboBox" id="vis-combobox">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <signal name="changed" handler="parole_conf_dialog_vis_plugin_changed_cb" swapped="no"/>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="label6">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes"><b>Audio</b></property>
+                        <property name="use_markup">True</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkFrame" id="frame3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">none</property>
+                    <child>
+                      <object class="GtkAlignment" id="alignment3">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="left_padding">12</property>
+                        <child>
+                          <object class="GtkCheckButton" id="multimedia-keys">
+                            <property name="label" translatable="yes">Enable keyboard multimedia keys</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="use_action_appearance">False</property>
+                            <property name="draw_indicator">True</property>
+                            <signal name="toggled" handler="multimedia_keys_toggled_cb" swapped="no"/>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="label7">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes"><b>Keyboard</b></property>
+                        <property name="use_markup">True</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">General</property>
+              </object>
+              <packing>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFrame" id="frame4">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label_xalign">0</property>
                 <property name="shadow_type">none</property>
                 <child>
-                  <object class="GtkAlignment" id="alignment2">
+                  <object class="GtkAlignment" id="alignment4">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="left_padding">12</property>
                     <child>
-                      <object class="GtkVBox" id="vbox4">
+                      <object class="GtkVBox" id="vbox3">
                         <property name="visible">True</property>
-                        <property name="orientation">vertical</property>
+                        <property name="can_focus">False</property>
                         <child>
-                          <object class="GtkTable" id="table">
+                          <object class="GtkTable" id="table1">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="n_rows">4</property>
                             <property name="n_columns">2</property>
-                            <property name="column_spacing">5</property>
-                            <property name="row_spacing">5</property>
+                            <property name="column_spacing">6</property>
                             <child>
-                              <object class="GtkLabel" id="label7">
+                              <object class="GtkLabel" id="label10">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="label" translatable="yes">Brightness:</property>
                               </object>
                               <packing>
-                                <property name="x_options"></property>
-                                <property name="y_options"></property>
+                                <property name="x_options">GTK_FILL</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label8">
+                              <object class="GtkLabel" id="label11">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="label" translatable="yes">Contrast:</property>
                               </object>
                               <packing>
                                 <property name="top_attach">1</property>
                                 <property name="bottom_attach">2</property>
-                                <property name="x_options"></property>
-                                <property name="y_options"></property>
+                                <property name="x_options">GTK_FILL</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHScale" id="brightness">
+                              <object class="GtkLabel" id="label12">
                                 <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="update_policy">discontinuous</property>
-                                <property name="draw_value">False</property>
-                                <signal name="value_changed" handler="brightness_value_changed_cb"/>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">Hue:</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="x_options">GTK_FILL</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHScale" id="contrast">
+                              <object class="GtkLabel" id="label13">
                                 <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="update_policy">discontinuous</property>
-                                <property name="draw_value">False</property>
-                                <signal name="value_changed" handler="contrast_value_changed_cb"/>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">Saturation:</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="top_attach">3</property>
+                                <property name="bottom_attach">4</property>
+                                <property name="x_options">GTK_FILL</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label9">
+                              <object class="GtkHScale" id="brightness">
                                 <property name="visible">True</property>
-                                <property name="label" translatable="yes">Hue:</property>
+                                <property name="can_focus">True</property>
+                                <property name="round_digits">1</property>
+                                <property name="draw_value">False</property>
+                                <signal name="value-changed" handler="brightness_value_changed_cb" swapped="no"/>
                               </object>
                               <packing>
-                                <property name="top_attach">2</property>
-                                <property name="bottom_attach">3</property>
-                                <property name="x_options"></property>
-                                <property name="y_options"></property>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label10">
+                              <object class="GtkHScale" id="contrast">
                                 <property name="visible">True</property>
-                                <property name="label" translatable="yes">Saturation:</property>
+                                <property name="can_focus">True</property>
+                                <property name="round_digits">1</property>
+                                <property name="draw_value">False</property>
+                                <signal name="value-changed" handler="contrast_value_changed_cb" swapped="no"/>
                               </object>
                               <packing>
-                                <property name="top_attach">3</property>
-                                <property name="bottom_attach">4</property>
-                                <property name="x_options"></property>
-                                <property name="y_options"></property>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkHScale" id="hue">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="update_policy">discontinuous</property>
+                                <property name="round_digits">1</property>
                                 <property name="draw_value">False</property>
-                                <signal name="value_changed" handler="hue_value_changed_cb"/>
+                                <signal name="value-changed" handler="hue_value_changed_cb" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -134,9 +351,9 @@
                               <object class="GtkHScale" id="saturation">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="update_policy">discontinuous</property>
+                                <property name="round_digits">1</property>
                                 <property name="draw_value">False</property>
-                                <signal name="value_changed" handler="saturation_value_changed_cb"/>
+                                <signal name="value-changed" handler="saturation_value_changed_cb" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -147,30 +364,36 @@
                             </child>
                           </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkHButtonBox" id="hbuttonbox1">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="layout_style">end</property>
                             <child>
                               <object class="GtkButton" id="reset-color">
-                                <property name="label" translatable="yes">Reset To Defaults</property>
+                                <property name="label" translatable="yes">Reset to defaults</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
+                                <property name="use_action_appearance">False</property>
                                 <property name="image">image1</property>
-                                <signal name="clicked" handler="reset_color_clicked_cb"/>
+                                <signal name="clicked" handler="reset-color_clicked_cb" swapped="no"/>
                               </object>
                               <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
                                 <property name="position">0</property>
                               </packing>
                             </child>
                           </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
@@ -179,121 +402,101 @@
                   </object>
                 </child>
                 <child type="label">
-                  <object class="GtkLabel" id="label2">
+                  <object class="GtkLabel" id="label9">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label" translatable="yes"><b>Display</b></property>
                     <property name="use_markup">True</property>
                   </object>
                 </child>
               </object>
               <packing>
-                <property name="position">0</property>
+                <property name="position">1</property>
               </packing>
             </child>
-            <child>
-              <object class="GtkFrame" id="frame2">
+            <child type="tab">
+              <object class="GtkLabel" id="label2">
                 <property name="visible">True</property>
-                <property name="label_xalign">0</property>
-                <property name="shadow_type">none</property>
-                <child>
-                  <object class="GtkAlignment" id="alignment4">
-                    <property name="visible">True</property>
-                    <property name="left_padding">12</property>
-                    <child>
-                      <object class="GtkCheckButton" id="reset-saver">
-                        <property name="label" translatable="yes">Disable screen saver while playing movies</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="draw_indicator">True</property>
-                        <signal name="toggled" handler="parole_conf_dialog_reset_saver_changed_cb"/>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-                <child type="label">
-                  <object class="GtkLabel" id="label12">
-                    <property name="visible">True</property>
-                    <property name="label" translatable="yes"><b>Video</b></property>
-                    <property name="use_markup">True</property>
-                  </object>
-                </child>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Display</property>
               </object>
               <packing>
                 <property name="position">1</property>
+                <property name="tab_fill">False</property>
               </packing>
             </child>
             <child>
-              <object class="GtkFrame" id="frame1">
+              <object class="GtkFrame" id="frame5">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label_xalign">0</property>
                 <property name="shadow_type">none</property>
                 <child>
-                  <object class="GtkAlignment" id="alignment1">
+                  <object class="GtkAlignment" id="alignment5">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="left_padding">12</property>
                     <child>
-                      <object class="GtkVBox" id="vbox2">
+                      <object class="GtkVBox" id="vbox4">
                         <property name="visible">True</property>
-                        <property name="orientation">vertical</property>
-                        <property name="spacing">5</property>
+                        <property name="can_focus">False</property>
                         <child>
-                          <object class="GtkCheckButton" id="enable-vis">
-                            <property name="label" translatable="yes">Enable visualization when playing audio file</property>
+                          <object class="GtkCheckButton" id="replace-playlist">
+                            <property name="label" translatable="yes">Always replace playlist with opened files</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
+                            <property name="use_action_appearance">False</property>
                             <property name="draw_indicator">True</property>
-                            <signal name="toggled" handler="parole_conf_dialog_enable_vis_changed_cb"/>
+                            <signal name="toggled" handler="replace_playlist_toggled_cb" swapped="no"/>
                           </object>
                           <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkHBox" id="hbox1">
+                          <object class="GtkCheckButton" id="remove-duplicated">
+                            <property name="label" translatable="yes">Check and remove duplicated media entries</property>
                             <property name="visible">True</property>
-                            <property name="spacing">2</property>
-                            <child>
-                              <object class="GtkLabel" id="label4">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">Visualization type:</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkComboBox" id="vis-combobox">
-                                <property name="visible">True</property>
-                                <property name="model">liststore1</property>
-                                <signal name="changed" handler="parole_conf_dialog_vis_plugin_changed_cb"/>
-                                <child>
-                                  <object class="GtkCellRendererText" id="cellrenderertext1"/>
-                                  <attributes>
-                                    <attribute name="text">0</attribute>
-                                  </attributes>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="use_action_appearance">False</property>
+                            <property name="draw_indicator">True</property>
+                            <signal name="toggled" handler="remove_duplicated_toggled_cb" swapped="no"/>
                           </object>
                           <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
+                        <child>
+                          <object class="GtkCheckButton" id="start-playing-opened">
+                            <property name="label" translatable="yes">Start playing opened files</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="use_action_appearance">False</property>
+                            <property name="draw_indicator">True</property>
+                            <signal name="toggled" handler="start_playing_opened_toggled_cb" swapped="no"/>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
                       </object>
                     </child>
                   </object>
                 </child>
                 <child type="label">
-                  <object class="GtkLabel" id="label1">
+                  <object class="GtkLabel" id="label14">
                     <property name="visible">True</property>
-                    <property name="label" translatable="yes"><b>Audio</b></property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes"><b>Playlist options</b></property>
                     <property name="use_markup">True</property>
                   </object>
                 </child>
@@ -302,43 +505,60 @@
                 <property name="position">2</property>
               </packing>
             </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Playlist</property>
+              </object>
+              <packing>
+                <property name="position">2</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
             <child>
-              <object class="GtkFrame" id="frame3">
+              <object class="GtkFrame" id="frame6">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label_xalign">0</property>
                 <property name="shadow_type">none</property>
                 <child>
-                  <object class="GtkAlignment" id="alignment3">
+                  <object class="GtkAlignment" id="alignment6">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="left_padding">12</property>
                     <child>
-                      <object class="GtkVBox" id="vbox3">
+                      <object class="GtkVBox" id="vbox5">
                         <property name="visible">True</property>
-                        <property name="orientation">vertical</property>
-                        <property name="spacing">5</property>
+                        <property name="can_focus">False</property>
                         <child>
                           <object class="GtkCheckButton" id="enable-subtitle">
-                            <property name="label" translatable="yes">Automatically load subtitles when playing movie file</property>
+                            <property name="label" translatable="yes">Automatically show subtitles when playing movie file</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
+                            <property name="use_action_appearance">False</property>
                             <property name="draw_indicator">True</property>
-                            <signal name="toggled" handler="parole_conf_dialog_enable_subtitle_changed_cb"/>
+                            <signal name="toggled" handler="parole_conf_dialog_enable_subtitle_changed_cb" swapped="no"/>
                           </object>
                           <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkTable" id="table1">
+                          <object class="GtkTable" id="table2">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="n_rows">2</property>
                             <property name="n_columns">2</property>
-                            <property name="column_spacing">2</property>
+                            <property name="column_spacing">6</property>
                             <property name="row_spacing">2</property>
                             <child>
-                              <object class="GtkLabel" id="label5">
+                              <object class="GtkLabel" id="label16">
                                 <property name="visible">True</property>
+                                <property name="can_focus">False</property>
                                 <property name="label" translatable="yes">Font:</property>
                               </object>
                               <packing>
@@ -346,32 +566,35 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkFontButton" id="fontbutton">
+                              <object class="GtkLabel" id="label17">
                                 <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">True</property>
-                                <signal name="font_set" handler="parole_conf_dialog_font_set_cb"/>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">Encoding:</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="x_options">GTK_FILL</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label6">
+                              <object class="GtkFontButton" id="fontbutton">
                                 <property name="visible">True</property>
-                                <property name="label" translatable="yes">Encoding: </property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
+                                <property name="use_action_appearance">False</property>
+                                <signal name="font-set" handler="parole_conf_dialog_font_set_cb" swapped="no"/>
                               </object>
                               <packing>
-                                <property name="top_attach">1</property>
-                                <property name="bottom_attach">2</property>
-                                <property name="x_options">GTK_FILL</property>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkComboBox" id="encoding">
                                 <property name="visible">True</property>
-                                <signal name="changed" handler="parole_conf_dialog_subtitle_encoding_changed_cb"/>
+                                <property name="can_focus">False</property>
+                                <signal name="changed" handler="parole_conf_dialog_subtitle_encoding_changed_cb" swapped="no"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -382,6 +605,8 @@
                             </child>
                           </object>
                           <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
@@ -390,8 +615,9 @@
                   </object>
                 </child>
                 <child type="label">
-                  <object class="GtkLabel" id="label3">
+                  <object class="GtkLabel" id="label15">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="label" translatable="yes"><b>Subtitles</b></property>
                     <property name="use_markup">True</property>
                   </object>
@@ -401,52 +627,31 @@
                 <property name="position">3</property>
               </packing>
             </child>
-          </object>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
-            <property name="visible">True</property>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <object class="GtkButton" id="close">
-                <property name="label">gtk-close</property>
+            <child type="tab">
+              <object class="GtkLabel" id="label4">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Subtitles</property>
               </object>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
+                <property name="position">3</property>
+                <property name="tab_fill">False</property>
               </packing>
             </child>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
           </packing>
         </child>
+        <child>
+          <placeholder/>
+        </child>
       </object>
     </child>
     <action-widgets>
       <action-widget response="-7">close</action-widget>
     </action-widgets>
   </object>
-  <object class="GtkListStore" id="liststore1">
-    <columns>
-      <!-- column-name gchararray1 -->
-      <column type="gchararray"/>
-    </columns>
-  </object>
-  <object class="GtkImage" id="image1">
-    <property name="visible">True</property>
-    <property name="stock">gtk-undo</property>
-  </object>
 </interface>
diff --git a/data/interfaces/parole.ui b/data/interfaces/parole.ui
index 5eb7fc1..3ad31aa 100644
--- a/data/interfaces/parole.ui
+++ b/data/interfaces/parole.ui
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
+  <requires lib="gtk+" version="2.24"/>
   <!-- interface-naming-policy project-wide -->
   <object class="GtkImage" id="image1">
     <property name="visible">True</property>
@@ -709,10 +709,10 @@
                                                             <property name="can_focus">True</property>
                                                             <property name="receives_default">True</property>
                                                             <property name="use_action_appearance">False</property>
-                                                            <property name="image">image6</property>
+                                                            <property name="image">image1</property>
                                                             <property name="relief">none</property>
                                                             <property name="focus_on_click">False</property>
-                                                            <signal name="clicked" handler="parole_player_seekb_cb" swapped="no"/>
+                                                            <signal name="clicked" handler="parole_player_back_cb" swapped="no"/>
                                                           </object>
                                                           <packing>
                                                             <property name="expand">False</property>
@@ -745,10 +745,10 @@
                                                             <property name="can_focus">True</property>
                                                             <property name="receives_default">True</property>
                                                             <property name="use_action_appearance">False</property>
-                                                            <property name="image">image9</property>
+                                                            <property name="image">image4</property>
                                                             <property name="relief">none</property>
                                                             <property name="focus_on_click">False</property>
-                                                            <signal name="clicked" handler="parole_player_seekf_cb" swapped="no"/>
+                                                            <signal name="clicked" handler="parole_player_forward_cb" swapped="no"/>
                                                           </object>
                                                           <packing>
                                                             <property name="expand">False</property>
@@ -757,7 +757,7 @@
                                                           </packing>
                                                         </child>
                                                         <child>
-                                                          <object class="GtkHBox" id="play_box">
+                                                          <object class="GtkHBox" id="playing_box">
                                                             <property name="visible">True</property>
                                                             <property name="can_focus">False</property>
                                                             <child>
diff --git a/data/interfaces/playlist.ui b/data/interfaces/playlist.ui
index 3dc9f3e..d9bb444 100644
--- a/data/interfaces/playlist.ui
+++ b/data/interfaces/playlist.ui
@@ -1,31 +1,33 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
+  <requires lib="gtk+" version="2.24"/>
   <!-- interface-naming-policy project-wide -->
-  <object class="GtkImage" id="image1">
+  <object class="GtkImage" id="image_add">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
     <property name="stock">gtk-add</property>
   </object>
-  <object class="GtkImage" id="image2">
+  <object class="GtkImage" id="image_clear">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="stock">gtk-remove</property>
+    <property name="stock">gtk-clear</property>
   </object>
-  <object class="GtkImage" id="image3">
+  <object class="GtkImage" id="image_remove">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="stock">gtk-go-up</property>
+    <property name="stock">gtk-remove</property>
   </object>
-  <object class="GtkImage" id="image4">
+  <object class="GtkImage" id="image_repeat">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="stock">gtk-go-down</property>
+    <property name="pixel_size">20</property>
+    <property name="icon_name">media-playlist-repeat</property>
   </object>
-  <object class="GtkImage" id="image5">
+  <object class="GtkImage" id="image_shuffle">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="stock">gtk-save-as</property>
+    <property name="pixel_size">20</property>
+    <property name="icon_name">media-playlist-shuffle</property>
   </object>
   <object class="GtkVBox" id="playlist-box">
     <property name="visible">True</property>
@@ -54,10 +56,10 @@
                     <property name="has_tooltip">True</property>
                     <property name="headers_visible">False</property>
                     <property name="rules_hint">True</property>
+                    <signal name="drag-data-received" handler="parole_media_list_drag_data_received_cb" swapped="no"/>
                     <signal name="key-press-event" handler="parole_media_list_key_press" swapped="no"/>
                     <signal name="row-activated" handler="parole_media_list_row_activated_cb" swapped="no"/>
                     <signal name="button-release-event" handler="parole_media_list_button_release_event" swapped="no"/>
-                    <signal name="drag-data-received" handler="parole_media_list_drag_data_received_cb" swapped="no"/>
                     <signal name="query-tooltip" handler="parole_media_list_query_tooltip" swapped="no"/>
                   </object>
                 </child>
@@ -80,7 +82,7 @@
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="use_action_appearance">False</property>
-                    <property name="image">image1</property>
+                    <property name="image">image_add</property>
                     <signal name="clicked" handler="parole_media_list_add_clicked_cb" swapped="no"/>
                   </object>
                   <packing>
@@ -90,14 +92,14 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkButton" id="save-playlist">
+                  <object class="GtkButton" id="remove-media">
                     <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="use_action_appearance">False</property>
-                    <property name="image">image5</property>
-                    <signal name="clicked" handler="parole_media_list_save_cb" swapped="no"/>
+                    <property name="image">image_remove</property>
+                    <signal name="clicked" handler="parole_media_list_remove_clicked_cb" swapped="no"/>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -106,49 +108,46 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkButton" id="remove-media">
+                  <object class="GtkButton" id="clear-media">
                     <property name="visible">True</property>
-                    <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="use_action_appearance">False</property>
-                    <property name="image">image2</property>
-                    <signal name="clicked" handler="parole_media_list_remove_clicked_cb" swapped="no"/>
+                    <property name="image">image_clear</property>
+                    <signal name="clicked" handler="parole_media_list_clear_clicked_cb" swapped="no"/>
                   </object>
                   <packing>
-                    <property name="expand">False</property>
+                    <property name="expand">True</property>
                     <property name="fill">True</property>
                     <property name="position">2</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkButton" id="media-up">
+                  <object class="GtkToggleButton" id="repeat-media">
                     <property name="visible">True</property>
-                    <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="use_action_appearance">False</property>
-                    <property name="image">image3</property>
-                    <signal name="clicked" handler="parole_media_list_media_up_clicked_cb" swapped="no"/>
+                    <property name="image">image_repeat</property>
+                    <signal name="toggled" handler="parole_media_list_repeat_toggled_cb" swapped="no"/>
                   </object>
                   <packing>
-                    <property name="expand">False</property>
+                    <property name="expand">True</property>
                     <property name="fill">True</property>
                     <property name="position">3</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkButton" id="media-down">
+                  <object class="GtkToggleButton" id="shuffle-media">
                     <property name="visible">True</property>
-                    <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="use_action_appearance">False</property>
-                    <property name="image">image4</property>
-                    <signal name="clicked" handler="parole_media_list_media_down_clicked_cb" swapped="no"/>
+                    <property name="image">image_shuffle</property>
+                    <signal name="toggled" handler="parole_media_list_shuffle_toggled_cb" swapped="no"/>
                   </object>
                   <packing>
-                    <property name="expand">False</property>
+                    <property name="expand">True</property>
                     <property name="fill">True</property>
                     <property name="position">4</property>
                   </packing>
diff --git a/data/interfaces/plugins.ui b/data/interfaces/plugins.ui
index 8eb352f..bfdcfa3 100644
--- a/data/interfaces/plugins.ui
+++ b/data/interfaces/plugins.ui
@@ -1,20 +1,10 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
+  <requires lib="gtk+" version="2.24"/>
+  <!-- interface-requires libxfce4ui 4.5 -->
   <!-- interface-naming-policy project-wide -->
-  <object class="GtkListStore" id="liststore">
-    <columns>
-      <!-- column-name toggle -->
-      <column type="gboolean"/>
-      <!-- column-name plugin -->
-      <column type="gchararray"/>
-      <!-- column-name module -->
-      <column type="GObject"/>
-      <!-- column-name info -->
-      <column type="gpointer"/>
-    </columns>
-  </object>
   <object class="XfceTitledDialog" id="dialog">
+    <property name="can_focus">False</property>
     <property name="border_width">5</property>
     <property name="title" translatable="yes">Parole Plugins</property>
     <property name="default_width">500</property>
@@ -24,21 +14,53 @@
     <property name="type_hint">normal</property>
     <property name="skip_taskbar_hint">True</property>
     <property name="skip_pager_hint">True</property>
-    <property name="has_separator">False</property>
     <property name="subtitle" translatable="yes">Media Player plugins</property>
-    <signal name="response" handler="parole_plugins_manager_pref_response_cb"/>
+    <signal name="response" handler="parole_plugins_manager_pref_response_cb" swapped="no"/>
     <child internal-child="vbox">
       <object class="GtkVBox" id="dialog-vbox2">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <object class="GtkButton" id="close">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkHBox" id="hbox1">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="spacing">10</property>
             <child>
               <object class="GtkViewport" id="viewport1">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="resize_mode">queue</property>
                 <child>
                   <object class="GtkScrolledWindow" id="scrolledwindow1">
@@ -53,7 +75,7 @@
                         <property name="model">liststore</property>
                         <property name="headers_clickable">False</property>
                         <property name="search_column">0</property>
-                        <signal name="cursor_changed" handler="parole_plugins_manager_tree_cursor_changed_cb"/>
+                        <signal name="cursor-changed" handler="parole_plugins_manager_tree_cursor_changed_cb" swapped="no"/>
                         <child>
                           <object class="GtkTreeViewColumn" id="treeviewcolumn1">
                             <property name="resizable">True</property>
@@ -61,7 +83,7 @@
                             <property name="clickable">True</property>
                             <child>
                               <object class="GtkCellRendererToggle" id="cellrenderertoggle">
-                                <signal name="toggled" handler="parole_plugins_manager_cell_toggled_cb"/>
+                                <signal name="toggled" handler="parole_plugins_manager_cell_toggled_cb" swapped="no"/>
                               </object>
                               <attributes>
                                 <attribute name="active">0</attribute>
@@ -86,17 +108,20 @@
                 </child>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
             <child>
               <object class="GtkVBox" id="vbox1">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">10</property>
                 <child>
                   <object class="GtkTable" id="table1">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="n_rows">3</property>
                     <property name="n_columns">2</property>
                     <property name="column_spacing">4</property>
@@ -104,6 +129,7 @@
                     <child>
                       <object class="GtkLabel" id="label1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes"><b>Description:</b></property>
                         <property name="use_markup">True</property>
                       </object>
@@ -115,6 +141,7 @@
                     <child>
                       <object class="GtkLabel" id="label2">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes"><b>Author:</b></property>
                         <property name="use_markup">True</property>
                       </object>
@@ -128,6 +155,7 @@
                     <child>
                       <object class="GtkLabel" id="description">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_markup">True</property>
                         <property name="wrap">True</property>
                       </object>
@@ -139,6 +167,7 @@
                     <child>
                       <object class="GtkLabel" id="author">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="use_markup">True</property>
                       </object>
                       <packing>
@@ -151,6 +180,7 @@
                     <child>
                       <object class="GtkLabel" id="label4">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes"><b>Site:</b></property>
                         <property name="use_markup">True</property>
                       </object>
@@ -164,6 +194,7 @@
                     <child>
                       <object class="GtkHBox" id="site-box">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <child>
                           <placeholder/>
                         </child>
@@ -178,12 +209,14 @@
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkHBox" id="hbox6">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="spacing">10</property>
                     <child>
                       <object class="GtkButton" id="configure">
@@ -191,11 +224,13 @@
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">True</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="use_stock">True</property>
-                        <signal name="clicked" handler="parole_plugins_manager_show_configure"/>
+                        <signal name="clicked" handler="parole_plugins_manager_show_configure" swapped="no"/>
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
@@ -205,52 +240,41 @@
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="pack_type">end</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area2">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <object class="GtkButton" id="close">
-                <property name="label">gtk-close</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
       </object>
     </child>
     <action-widgets>
       <action-widget response="0">close</action-widget>
     </action-widgets>
   </object>
+  <object class="GtkListStore" id="liststore">
+    <columns>
+      <!-- column-name toggle -->
+      <column type="gboolean"/>
+      <!-- column-name plugin -->
+      <column type="gchararray"/>
+      <!-- column-name module -->
+      <column type="GObject"/>
+      <!-- column-name info -->
+      <column type="gpointer"/>
+    </columns>
+  </object>
 </interface>
diff --git a/data/interfaces/save-playlist.ui b/data/interfaces/save-playlist.ui
index bc754f3..68bb6b8 100644
--- a/data/interfaces/save-playlist.ui
+++ b/data/interfaces/save-playlist.ui
@@ -1,36 +1,64 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.16"/>
+  <requires lib="gtk+" version="2.24"/>
   <!-- interface-naming-policy project-wide -->
-  <object class="GtkListStore" id="liststore">
-    <columns>
-      <!-- column-name filetype -->
-      <column type="gchararray"/>
-      <!-- column-name extension -->
-      <column type="gchararray"/>
-      <!-- column-name extension_id -->
-      <column type="guint"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes">By Extension</col>
-        <col id="1" translatable="yes"></col>
-        <col id="2">0</col>
-      </row>
-    </data>
-  </object>
   <object class="GtkFileChooserDialog" id="filechooserdialog">
+    <property name="can_focus">False</property>
     <property name="border_width">5</property>
     <property name="window_position">center-on-parent</property>
     <property name="type_hint">normal</property>
-    <property name="has_separator">False</property>
     <property name="action">save</property>
     <property name="do_overwrite_confirmation">True</property>
     <child internal-child="vbox">
       <object class="GtkVBox" id="dialog-vbox1">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button2">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="parole_media_list_close_save_dialog_cb" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button1">
+                <property name="label">gtk-save</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="parole_media_list_save_playlist_cb" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkExpander" id="expander1">
             <property name="visible">True</property>
@@ -40,7 +68,7 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="model">liststore</property>
-                <signal name="cursor_changed" handler="parole_media_list_format_cursor_changed_cb"/>
+                <signal name="cursor-changed" handler="parole_media_list_format_cursor_changed_cb" swapped="no"/>
                 <child>
                   <object class="GtkTreeViewColumn" id="treeviewcolumn1">
                     <property name="title">File Type</property>
@@ -69,6 +97,7 @@
             <child type="label">
               <object class="GtkLabel" id="label1">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="label" translatable="yes">Select File Types (By Extension)</property>
               </object>
             </child>
@@ -79,47 +108,6 @@
             <property name="position">2</property>
           </packing>
         </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="button2">
-                <property name="label">gtk-close</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="parole_media_list_close_save_dialog_cb"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="button1">
-                <property name="label">gtk-save</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="parole_media_list_save_playlist_cb"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
       </object>
     </child>
     <action-widgets>
@@ -127,4 +115,21 @@
       <action-widget response="0">button1</action-widget>
     </action-widgets>
   </object>
+  <object class="GtkListStore" id="liststore">
+    <columns>
+      <!-- column-name filetype -->
+      <column type="gchararray"/>
+      <!-- column-name extension -->
+      <column type="gchararray"/>
+      <!-- column-name extension_id -->
+      <column type="guint"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes">By Extension</col>
+        <col id="1" translatable="yes"></col>
+        <col id="2">0</col>
+      </row>
+    </data>
+  </object>
 </interface>
diff --git a/gst/Makefile.am b/gst/Makefile.am
index 891ec29..393edc3 100644
--- a/gst/Makefile.am
+++ b/gst/Makefile.am
@@ -18,9 +18,7 @@ GENERATED_FILES =			\
 libparolegst_la_SOURCES =		\
 	$(GENERATED_FILES)		\
 	parole-gst.c			\
-	parole-gst.h			\
-	parole-gst-iface.c		\
-	parole-gst-iface.h
+	parole-gst.h			
 	
 libparolegst_la_CFLAGS =		\
 	$(GST_VIDEO_CFLAGS)             \
diff --git a/gst/parole-gst-iface.c b/gst/parole-gst-iface.c
deleted file mode 100644
index cdc8e67..0000000
--- a/gst/parole-gst-iface.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <glib.h>
-
-#include "parole-gst-iface.h"
-
-GType
-parole_gst_helper_get_type (void)
-{
-    static GType type = G_TYPE_INVALID;
-
-    if (G_UNLIKELY (type == G_TYPE_INVALID))
-    {
-	static const GTypeInfo info =
-	{
-	    sizeof (ParoleGstHelperIface),
-	    NULL,
-	    NULL,
-	    NULL,
-	    NULL,
-	    NULL,
-	    0,
-	    0,
-	    NULL,
-	    NULL,
-	};
-
-	type = g_type_register_static (G_TYPE_INTERFACE, "ParoleGstHelperIface", &info, 0);
-
-	g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
-    }
-    
-    return type;
-}
-
-void parole_gst_helper_draw_logo (ParoleGstHelper *gst)
-{
-    if ( PAROLE_GST_HELPER_GET_IFACE (gst)->draw_logo )
-    {
-	(*PAROLE_GST_HELPER_GET_IFACE (gst)->draw_logo) (gst);
-    }
-}
-
-void parole_gst_helper_load_subtitle (ParoleGstHelper *gst)
-{
-    if ( PAROLE_GST_HELPER_GET_IFACE (gst)->load_subtitle )
-    {
-	(*PAROLE_GST_HELPER_GET_IFACE (gst)->load_subtitle) (gst);
-    }
-}
-
-void parole_gst_helper_set_video_colors	(ParoleGstHelper *gst)
-{
-    if ( PAROLE_GST_HELPER_GET_IFACE (gst)->set_video_color_balance )
-    {
-	(*PAROLE_GST_HELPER_GET_IFACE (gst)->set_video_color_balance) (gst);
-    }
-}
-
-void parole_gst_helper_set_subtitle_font (ParoleGstHelper *gst)
-{
-    if ( PAROLE_GST_HELPER_GET_IFACE (gst)->set_subtitle_font )
-    {
-	(*PAROLE_GST_HELPER_GET_IFACE (gst)->set_subtitle_font) (gst);
-    }
-}
-
-void parole_gst_helper_set_subtitle_encoding (ParoleGstHelper *gst)
-{
-    if ( PAROLE_GST_HELPER_GET_IFACE (gst)->set_subtitle_encoding )
-    {
-	(*PAROLE_GST_HELPER_GET_IFACE (gst)->set_subtitle_encoding) (gst);
-    }
-}
-
-void parole_gst_helper_update_vis (ParoleGstHelper *gst)
-{
-    if ( PAROLE_GST_HELPER_GET_IFACE (gst)->update_vis )
-    {
-	(*PAROLE_GST_HELPER_GET_IFACE (gst)->update_vis) (gst);
-    }
-}
diff --git a/gst/parole-gst-iface.h b/gst/parole-gst-iface.h
deleted file mode 100644
index c236458..0000000
--- a/gst/parole-gst-iface.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef __PAROLE_GST_HELPER_H
-#define __PAROLE_GST_HELPER_H
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS 
-
-#define PAROLE_TYPE_GST_HELPER      	   (parole_gst_helper_get_type ())
-#define PAROLE_GST_HELPER(o)        	   (G_TYPE_CHECK_INSTANCE_CAST ((o), PAROLE_TYPE_GST_HELPER, ParoleGstHelper))
-#define PAROLE_IS_GST_HELPER(o)      	   (G_TYPE_CHECK_INSTANCE_TYPE ((o), PAROLE_TYPE_GST_HELPER))
-#define PAROLE_GST_HELPER_GET_IFACE(o)     (G_TYPE_INSTANCE_GET_INTERFACE((o), PAROLE_TYPE_GST_HELPER, ParoleGstHelperIface))
-
-typedef struct _ParoleGstHelperIface ParoleGstHelperIface;
-typedef struct _ParoleGstHelper      ParoleGstHelper;
-
-struct _ParoleGstHelperIface
-{
-    GTypeInterface 	__parent__;
-
-    void		(*draw_logo)				(ParoleGstHelper *gst);
-    
-    void		(*set_video_color_balance)		(ParoleGstHelper *gst);
-
-    void		(*load_subtitle)			(ParoleGstHelper *gst);
-
-    void		(*set_subtitle_font)			(ParoleGstHelper *gst);
-    
-    void		(*set_subtitle_encoding)		(ParoleGstHelper *gst);
-
-    void		(*update_vis)				(ParoleGstHelper *gst);
-
-};
-
-GType 			parole_gst_helper_get_type 		(void) G_GNUC_CONST;
-
-void			parole_gst_helper_draw_logo		(ParoleGstHelper *gst);
-
-void			parole_gst_helper_load_subtitle		(ParoleGstHelper *gst);
-
-void			parole_gst_helper_set_video_colors	(ParoleGstHelper *gst);
-
-void 			parole_gst_helper_set_subtitle_font	(ParoleGstHelper *gst);
-
-void 			parole_gst_helper_set_subtitle_encoding (ParoleGstHelper *gst);
-
-void			parole_gst_helper_update_vis		(ParoleGstHelper *gst);
-
-G_END_DECLS
-
-#endif  /*__PAROLE_GST_IFACE_H*/
diff --git a/gst/parole-gst.c b/gst/parole-gst.c
index c20f952..ad9f6d9 100644
--- a/gst/parole-gst.c
+++ b/gst/parole-gst.c
@@ -1,5 +1,5 @@
 /*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -33,16 +33,12 @@
 
 #include <gst/video/video.h>
 
-#ifdef XFCE_DISABLE_DEPRECATED
-#undef XFCE_DISABLE_DEPRECATED
-#endif
 #include <libxfce4util/libxfce4util.h>
 #include <libxfcegui4/libxfcegui4.h>
 
 #include <gdk/gdkx.h>
 
 #include "parole-gst.h"
-#include "parole-gst-iface.h"
 
 #include "common/parole-common.h"
 #include "common/parole-rc-utils.h"
@@ -50,15 +46,11 @@
 #include "gst-enum-types.h"
 #include "gstmarshal.h"
 
-
-
 #define HIDE_WINDOW_CURSOR_TIMEOUT 3.0f
 
 #define PAROLE_GST_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_GST, ParoleGstPrivate))
 
-static void     parole_gst_helper_iface_init    (ParoleGstHelperIface *iface);
-
 static void	parole_gst_play_file_internal 	(ParoleGst *gst);
 
 static void     parole_gst_change_state 	(ParoleGst *gst, 
@@ -70,17 +62,32 @@ static void	parole_gst_terminate_internal   (ParoleGst *gst,
 static void     parole_gst_seek_cdda_track	(ParoleGst *gst,
 						 gint track);
 
+typedef enum 
+{
+    GST_PLAY_FLAG_VIDEO         = (1 << 0),
+    GST_PLAY_FLAG_AUDIO         = (1 << 1),
+    GST_PLAY_FLAG_TEXT          = (1 << 2),
+    GST_PLAY_FLAG_VIS           = (1 << 3),
+    GST_PLAY_FLAG_SOFT_VOLUME   = (1 << 4),
+    GST_PLAY_FLAG_NATIVE_AUDIO  = (1 << 5),
+    GST_PLAY_FLAG_NATIVE_VIDEO  = (1 << 6),
+    GST_PLAY_FLAG_DOWNLOAD      = (1 << 7),
+    GST_PLAY_FLAG_BUFFERING     = (1 << 8),
+    GST_PLAY_FLAG_DEINTERLACE   = (1 << 9)
+
+} GstPlayFlags;
+
 struct ParoleGstPrivate
 {
     GstElement	 *playbin;
     GstElement   *video_sink;
-    GstElement   *vis_sink;
+
     GstBus       *bus;
     
     GMutex       *lock;
     GstState      state;
     GstState      target;
-    ParoleMediaState media_state;
+    ParoleState media_state;
     
     ParoleStream *stream;
     gulong	  tick_id;
@@ -91,17 +98,19 @@ struct ParoleGstPrivate
     gpointer      conf; /* Specific for ParoleMediaPlayer*/
     
     gboolean	  terminating;
-    gboolean	  embedded;
     gboolean      enable_tags;
     
     gboolean	  update_vis;
     gboolean      with_vis;
+    gboolean      vis_loaded;
     gboolean      buffering;
     gboolean      update_color_balance;
     
     ParoleAspectRatio aspect_ratio;
     gulong	  state_change_id;
     
+    gboolean	  scale_logo;
+    
     /*
      * xvimage sink has brightness+hue+aturation+contrast.
      */
@@ -124,7 +133,6 @@ enum
 enum
 {
     PROP_0,
-    PROP_EMBEDDED,
     PROP_CONF_OBJ,
     PROP_ENABLE_TAGS
 };
@@ -133,8 +141,7 @@ static gpointer parole_gst_object = NULL;
 
 static guint signals [LAST_SIGNAL] = { 0 };
 
-G_DEFINE_TYPE_WITH_CODE (ParoleGst, parole_gst, GTK_TYPE_WIDGET,
-    G_IMPLEMENT_INTERFACE (PAROLE_TYPE_GST_HELPER, parole_gst_helper_iface_init));
+G_DEFINE_TYPE (ParoleGst, parole_gst, GTK_TYPE_WIDGET)
 
 static void
 parole_gst_finalize (GObject *object)
@@ -150,7 +157,10 @@ parole_gst_finalize (GObject *object)
     
     parole_stream_init_properties (gst->priv->stream);
     
+	if ( gst->priv->stream )
     g_object_unref (gst->priv->stream);
+
+    if ( gst->priv->logo )
     g_object_unref (gst->priv->logo);
     
     if ( gst->priv->device )
@@ -347,11 +357,12 @@ parole_gst_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
 	gint w, h;
 	gdouble ratio, width, height;
 	
+	PAROLE_GST (widget)->priv->scale_logo = TRUE;
+	
 	w = allocation->width;
 	h = allocation->height;
 	
-	if ( PAROLE_GST (widget)->priv->embedded == FALSE )
-	    parole_gst_get_video_output_size (PAROLE_GST (widget), &w, &h);
+	parole_gst_get_video_output_size (PAROLE_GST (widget), &w, &h);
 
 	width = w;
 	height = h;
@@ -375,9 +386,9 @@ parole_gst_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
 }
 
 static void
-parole_gst_draw_logo_common (ParoleGst *gst)
+parole_gst_draw_logo (ParoleGst *gst)
 {
-    GdkPixbuf *pix;
+    static GdkPixbuf *pix = NULL;
     GdkRegion *region;
     GdkRectangle rect;
     GtkWidget *widget;
@@ -404,11 +415,17 @@ parole_gst_draw_logo_common (ParoleGst *gst)
 			   0, 0,
 			   widget->allocation.width,
 			   widget->allocation.height);
-			   
-    pix = gdk_pixbuf_scale_simple (gst->priv->logo,
-				   widget->allocation.width,
-				   widget->allocation.height,
-				   GDK_INTERP_BILINEAR);
+    
+    if (gst->priv->scale_logo)
+    {
+	if (pix)
+	    g_object_unref (pix);
+	pix = gdk_pixbuf_scale_simple (gst->priv->logo,
+				       widget->allocation.width,
+				       widget->allocation.height,
+				       GDK_INTERP_BILINEAR);
+	gst->priv->scale_logo = FALSE;
+    }
 
     gdk_draw_pixbuf (GDK_DRAWABLE (widget->window),
 		     GTK_WIDGET(widget)->style->fg_gc[0],
@@ -419,35 +436,13 @@ parole_gst_draw_logo_common (ParoleGst *gst)
 		     GDK_RGB_DITHER_NONE,
 		     0, 0);
 
-    gdk_pixbuf_unref (pix);
+   
     gdk_window_end_paint (GTK_WIDGET (gst)->window);
 }
 
 static void
-parole_gst_draw_logo_embedded (ParoleGstHelper *helper)
+parole_gst_set_video_color_balance (ParoleGst *gst)
 {
-    ParoleGst *gst;
-    
-    gst = PAROLE_GST (helper);
-    
-    if ( gst->priv->terminating != TRUE )
-	parole_gst_draw_logo_common (gst);
-}
-
-static void
-parole_gst_draw_logo (ParoleGstHelper *helper)
-{
-    ParoleGst *gst;
-    
-    gst = PAROLE_GST (helper);
-    
-    parole_gst_draw_logo_common (gst);
-}
-
-static void
-parole_gst_set_video_color_balance (ParoleGstHelper *helper)
-{
-    ParoleGst *gst;
     GstElement *video_sink;
     
     gint brightness_value;
@@ -455,8 +450,6 @@ parole_gst_set_video_color_balance (ParoleGstHelper *helper)
     gint hue_value;
     gint saturation_value;
 	
-    gst = PAROLE_GST (helper);
-    
     if ( !gst->priv->xvimage_sink)
 	return;
 	
@@ -482,7 +475,7 @@ parole_gst_set_video_color_balance (ParoleGstHelper *helper)
 		  "hue", hue_value,
 		  "saturation", saturation_value,
 		  NULL);
-		  
+
     g_object_unref (G_OBJECT (video_sink));
     
     gst->priv->update_color_balance = FALSE;
@@ -530,26 +523,28 @@ parole_gst_expose_event (GtkWidget *widget, GdkEventExpose *ev)
     switch ( gst->priv->state )
     {
 	case GST_STATE_PLAYING:
-	    if ( playing_video || gst->priv->with_vis)
+	    if ( playing_video || gst->priv->vis_loaded)
+	    {
 		gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink));
+	    }
 	    else
-		parole_gst_helper_draw_logo (PAROLE_GST_HELPER (gst));
+		parole_gst_draw_logo (gst);
 	    break;
 	case GST_STATE_PAUSED:
-	    if ( playing_video || gst->priv->with_vis || gst->priv->target == GST_STATE_PLAYING )
+	    if ( playing_video || gst->priv->vis_loaded || gst->priv->target == GST_STATE_PLAYING )
 		gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink));
 	    else
-		parole_gst_helper_draw_logo (PAROLE_GST_HELPER (gst));
+		parole_gst_draw_logo (gst);
 	    break;
 	case GST_STATE_READY:
 	    if (gst->priv->target != GST_STATE_PLAYING)
-		parole_gst_helper_draw_logo (PAROLE_GST_HELPER (gst));
+		parole_gst_draw_logo (gst);
 	    else
 		gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink));
 	    break;
 	case GST_STATE_NULL:
 	case GST_STATE_VOID_PENDING:
-	    parole_gst_helper_draw_logo (PAROLE_GST_HELPER (gst));
+	    parole_gst_draw_logo (gst);
 	    break;
     }
     return TRUE;
@@ -575,14 +570,17 @@ parole_gst_query_capabilities (ParoleGst *gst)
     
     if ( gst_element_query (gst->priv->playbin, query) )
     {
+	
 	gst_query_parse_seeking (query,
 				 NULL,
 				 &seekable,
 				 NULL,
 				 NULL);
+	
 	g_object_set (G_OBJECT (gst->priv->stream),
-	          "seekable", seekable,
-		  NULL);
+	              "seekable", seekable,
+		      NULL);
+		      
     }
     gst_query_unref (query);
 }
@@ -636,7 +634,13 @@ out:
 static void
 parole_gst_tick (ParoleGst *gst)
 {
-    if ( gst->priv->state >= GST_STATE_PAUSED )
+    gboolean live;
+    
+    g_object_get (gst->priv->stream,
+		  "live", &live,
+		  NULL);
+		  
+    if ( gst->priv->state >= GST_STATE_PAUSED && !live)
     {
 	if ( gst->priv->tick_id != 0 )
 	{
@@ -681,13 +685,10 @@ parole_gst_query_duration (ParoleGst *gst)
 }
 
 static void
-parole_gst_set_subtitle_font (ParoleGstHelper *helper)
+parole_gst_set_subtitle_font (ParoleGst *gst)
 {
-    ParoleGst *gst;
     gchar *font;
     
-    gst = PAROLE_GST (helper);
-    
     g_object_get (G_OBJECT (gst->priv->conf),
 		  "subtitle-font", &font,
 		  NULL);
@@ -701,13 +702,10 @@ parole_gst_set_subtitle_font (ParoleGstHelper *helper)
 }
 
 static void
-parole_gst_set_subtitle_encoding (ParoleGstHelper *helper)
+parole_gst_set_subtitle_encoding (ParoleGst *gst)
 {
-    ParoleGst *gst;
     gchar *encoding;
     
-    gst = PAROLE_GST (helper);
-    
     g_object_get (G_OBJECT (gst->priv->conf),
 		  "subtitle-encoding", &encoding,
 		  NULL);
@@ -720,17 +718,14 @@ parole_gst_set_subtitle_encoding (ParoleGstHelper *helper)
 }
 
 static void
-parole_gst_load_subtitle (ParoleGstHelper *helper)
+parole_gst_load_subtitle (ParoleGst *gst)
 {
-    ParoleGst *gst;
     ParoleMediaType type;
     gchar *uri;
     gchar *sub;
     gchar *sub_uri;
     gboolean sub_enabled;
     
-    gst = PAROLE_GST (helper);
-    
     g_object_get (G_OBJECT (gst->priv->stream),
 		  "media-type", &type,
 		  NULL);
@@ -809,68 +804,44 @@ parole_gst_get_pad_capabilities (GObject *object, GParamSpec *pspec, ParoleGst *
 static void
 parole_gst_query_info (ParoleGst *gst)
 {
-    const GList *info = NULL;
-    GObject *obj;
-    GParamSpec *pspec;
-    GEnumValue *val;
-    gint type;
-    gboolean has_video = FALSE;
+    GstPad *videopad = NULL;
+    
+    gint n_audio, n_video, i;
     
     g_object_get (G_OBJECT (gst->priv->playbin),
-		  "stream-info", &info,
+		  "n-audio", &n_audio,
+		  "n-video", &n_video,
 		  NULL);
 		  
-    for ( ; info != NULL; info = info->next )
+		  
+    g_object_set (G_OBJECT (gst->priv->stream),
+		  "has-video", (n_video > 0),
+		  "has-audio", (n_audio > 0),
+		  NULL);
+		
+    if (n_video > 0)
     {
-	obj = info->data;
-	
-	g_object_get (obj,
-		      "type", &type,
-		      NULL);
-	
-	pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (obj), "type");
-	val = g_enum_get_value (G_PARAM_SPEC_ENUM (pspec)->enum_class, type);
-	
-	if ( g_ascii_strcasecmp (val->value_name, "video") == 0 ||
-	     g_ascii_strcasecmp (val->value_nick, "video") == 0)
-	{
-	    GstPad *pad = NULL;
+	for (i = 0; i < n_video && videopad == NULL; i++)
+	    g_signal_emit_by_name (gst->priv->playbin, "get-video-pad", i, &videopad);
 	    
-	    g_object_get (G_OBJECT (obj), 
-			  "object", &pad, 
-			  NULL);
+	if (videopad)
+	{
+	    GstCaps *caps;
 	    
-	    if ( pad )
+	    if ((caps = gst_pad_get_negotiated_caps (videopad)))
 	    {
-		if ( GST_IS_PAD (pad) && GST_PAD_CAPS (pad) )
-		{
-		    parole_gst_get_pad_capabilities (G_OBJECT (pad), NULL, gst);
-		}
-		else
-		{
-		    g_signal_connect (pad, "notify::caps",
-				      G_CALLBACK (parole_gst_get_pad_capabilities),
-				      gst);
-		}
-		g_object_unref (pad);
+		parole_gst_get_pad_capabilities (G_OBJECT (videopad), NULL, gst);
+		g_object_unref (caps);
 	    }
-	    TRACE ("Stream has video");
-	    g_object_set (G_OBJECT (gst->priv->stream),
-			  "has-video", TRUE,
-			  NULL);
-	    has_video = TRUE;
-	}
-	if ( g_ascii_strcasecmp (val->value_name, "audio") == 0 ||
-	     g_ascii_strcasecmp (val->value_nick, "audio") == 0)
-	{
-	    TRACE ("Stream has audio");
-	    g_object_set (G_OBJECT (gst->priv->stream),
-			  "has-audio", TRUE,
-			  NULL);
+	    
+	    g_signal_connect (videopad, "notify::caps",
+			      G_CALLBACK (parole_gst_get_pad_capabilities),
+			      gst);
+	    g_object_unref (videopad);
 	}
     }
-    
-    if ( !has_video )
+
+    if ( n_video == 0 )
 	gtk_widget_queue_draw (GTK_WIDGET (gst));
 }
 
@@ -882,13 +853,11 @@ parole_gst_update_stream_info (ParoleGst *gst)
 }
 
 static void
-parole_gst_update_vis (ParoleGstHelper *helper)
+parole_gst_update_vis (ParoleGst *gst)
 {
-    ParoleGst *gst;
     gchar *vis_name;
-    
-    gst = PAROLE_GST (helper);
-    
+    gint flags;
+
     TRACE ("start");
     
     g_object_get (G_OBJECT (gst->priv->conf),
@@ -897,23 +866,44 @@ parole_gst_update_vis (ParoleGstHelper *helper)
 		  NULL);
 
     TRACE ("Vis name %s enabled %d\n", vis_name, gst->priv->with_vis);
-    
+
+    g_object_get (G_OBJECT (gst->priv->playbin),
+		  "flags", &flags,
+		  NULL);
+
     if ( gst->priv->with_vis )
     {
-	gst->priv->vis_sink = gst_element_factory_make (vis_name, "vis");
-	g_object_set (G_OBJECT (gst->priv->playbin),
-		      "vis-plugin", gst->priv->vis_sink,
-		      NULL);
+	GstElement *vis_sink;
+	flags |= GST_PLAY_FLAG_VIS;
+	
+	vis_sink = gst_element_factory_make (vis_name, "vis");
+	
+	if (vis_sink)
+	{
+	    g_object_set (G_OBJECT (gst->priv->playbin),
+			  "vis-plugin", vis_sink,
+		         NULL);
+		      
+	    gst->priv->vis_loaded = TRUE;
+	}
     }
     else
     {
+	flags &= ~GST_PLAY_FLAG_VIS;
 	g_object_set (G_OBJECT (gst->priv->playbin),
 		      "vis-plugin", NULL,
 		      NULL);
+	gtk_widget_queue_draw (GTK_WIDGET (gst));
+	gst->priv->vis_loaded = FALSE;
     }
 
+    g_object_set (G_OBJECT (gst->priv->playbin),
+		  "flags", flags,
+		  NULL);
+
     gst->priv->update_vis = FALSE;
     g_free (vis_name);
+    gtk_widget_queue_draw (GTK_WIDGET (gst));
     TRACE ("end");
 }
 
@@ -938,47 +928,35 @@ parole_gst_evaluate_state (ParoleGst *gst, GstState old, GstState new, GstState
     {
 	case GST_STATE_PLAYING:
 	{
-	    gst->priv->media_state = PAROLE_MEDIA_STATE_PLAYING;
+	    gst->priv->media_state = PAROLE_STATE_PLAYING;
+	    TRACE ("Playing");
+	    parole_gst_query_capabilities (gst);
+	    parole_gst_query_info (gst);
+	    parole_gst_query_duration (gst);
+	    
 	    g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0, 
-			   gst->priv->stream, PAROLE_MEDIA_STATE_PLAYING);
+			   gst->priv->stream, PAROLE_STATE_PLAYING);
 	    break;
 	}
 	case GST_STATE_PAUSED:
 	{
-	    if ( pending == GST_STATE_PLAYING )
-	    {
-		ParoleMediaType media_type;
-		
-		g_object_get (G_OBJECT (gst->priv->stream),
-			      "media-type", &media_type,
-			      NULL);
-		
-		if ( (media_type == PAROLE_MEDIA_TYPE_LOCAL_FILE && old == GST_STATE_READY) ||
-		      media_type != PAROLE_MEDIA_TYPE_LOCAL_FILE )
-		{
-		    parole_gst_query_duration (gst);
-		    parole_gst_query_capabilities (gst);
-		    parole_gst_query_info (gst);
-		}
-	    }
-
 	    if ( gst->priv->target == GST_STATE_PLAYING )
 	    {
 		if ( gst->priv->update_color_balance )
-		    parole_gst_helper_set_video_colors (PAROLE_GST_HELPER (gst));
+		    parole_gst_set_video_color_balance (gst);
 	    }
 		
-	    gst->priv->media_state = PAROLE_MEDIA_STATE_PAUSED;
+	    gst->priv->media_state = PAROLE_STATE_PAUSED;
 	    g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0, 
-			   gst->priv->stream, PAROLE_MEDIA_STATE_PAUSED);
+			   gst->priv->stream, PAROLE_STATE_PAUSED);
 	    break;
 	}
 	case GST_STATE_READY:
 	{
 	    gst->priv->buffering = FALSE;
-	    gst->priv->media_state = PAROLE_MEDIA_STATE_STOPPED;
+	    gst->priv->media_state = PAROLE_STATE_STOPPED;
 	    g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0, 
-			   gst->priv->stream, PAROLE_MEDIA_STATE_STOPPED);
+			   gst->priv->stream, PAROLE_STATE_STOPPED);
 
 	    if ( gst->priv->target == GST_STATE_PLAYING && pending < GST_STATE_PAUSED)
 	    {
@@ -991,16 +969,16 @@ parole_gst_evaluate_state (ParoleGst *gst, GstState old, GstState new, GstState
 	    else if ( gst->priv->target == GST_STATE_READY)
 	    {
 		parole_gst_size_allocate (GTK_WIDGET (gst), &GTK_WIDGET (gst)->allocation);
-		parole_gst_helper_draw_logo (PAROLE_GST_HELPER (gst));
+		parole_gst_draw_logo (gst);
 	    }
 	    break;
 	}
 	case GST_STATE_NULL:
 	{
 	    gst->priv->buffering = FALSE;
-	    gst->priv->media_state = PAROLE_MEDIA_STATE_STOPPED;
+	    gst->priv->media_state = PAROLE_STATE_STOPPED;
 	    g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0, 
-			   gst->priv->stream, PAROLE_MEDIA_STATE_STOPPED);
+			   gst->priv->stream, PAROLE_STATE_STOPPED);
 	    break;
 	}
 	default:
@@ -1180,9 +1158,9 @@ parole_gst_bus_event (GstBus *bus, GstMessage *msg, gpointer data)
 		}
 	    }
 		
-	    gst->priv->media_state = PAROLE_MEDIA_STATE_FINISHED;
+	    gst->priv->media_state = PAROLE_STATE_PLAYBACK_FINISHED;
 	    g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0, 
-			       gst->priv->stream, PAROLE_MEDIA_STATE_FINISHED);
+			       gst->priv->stream, PAROLE_STATE_PLAYBACK_FINISHED);
 	    break;
 	}
 	case GST_MESSAGE_ERROR:
@@ -1238,8 +1216,11 @@ parole_gst_bus_event (GstBus *bus, GstMessage *msg, gpointer data)
 	    parole_gst_application_message (gst, msg);
 	    break;
 	case GST_MESSAGE_DURATION:
-	    TRACE ("Duration message");
-	    parole_gst_query_duration (gst);
+	    if (gst->priv->state == GST_STATE_PLAYING)
+	    {
+		TRACE ("Duration message");
+		parole_gst_query_duration (gst);
+	    }
 	    break;
 	case GST_MESSAGE_ELEMENT:
 	    break;
@@ -1311,16 +1292,6 @@ parole_gst_change_state (ParoleGst *gst, GstState new)
 }
 
 static void
-parole_gst_stream_info_notify_cb (GObject * obj, GParamSpec * pspec, ParoleGst *gst)
-{
-    GstMessage *msg;
-    TRACE ("Stream info changed");
-    msg = gst_message_new_application (GST_OBJECT (gst->priv->playbin),
-				       gst_structure_new ("notify-streaminfo", NULL));
-    gst_element_post_message (gst->priv->playbin, msg);
-}
-
-static void
 parole_gst_source_notify_cb (GObject *obj, GParamSpec *pspec, ParoleGst *gst)
 {
     GObject *source;
@@ -1354,7 +1325,7 @@ parole_gst_play_file_internal (ParoleGst *gst)
     }
     
     if ( gst->priv->update_vis)
-	parole_gst_helper_update_vis (PAROLE_GST_HELPER (gst));
+	parole_gst_update_vis (gst);
     
     
     g_object_get (G_OBJECT (gst->priv->stream),
@@ -1368,7 +1339,7 @@ parole_gst_play_file_internal (ParoleGst *gst)
 		  "suburi", NULL,
 		  NULL);
 
-    parole_gst_helper_load_subtitle (PAROLE_GST_HELPER (gst));
+    parole_gst_load_subtitle (gst);
     parole_gst_change_state (gst, GST_STATE_PLAYING);
     g_free (uri);
 }
@@ -1520,8 +1491,12 @@ parole_gst_check_state_change_timeout (gpointer data)
     
     if ( gst->priv->state != gst->priv->target )
     {
-	gboolean ret_val = 
-	    xfce_confirm (_("The stream is taking too much time to load"), GTK_STOCK_OK, _("Stop"));
+	gboolean ret_val = 1;
+	/*FIXME gboolean ret_val = xfce_dialog_confirm (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gst))),
+						GTK_STOCK_YES,
+						_("Stop"),
+						_("The stream is taking too much time to load"), 
+						NULL);*/
 	    
 	if ( ret_val )
 	{
@@ -1549,16 +1524,13 @@ parole_gst_terminate_internal (ParoleGst *gst, gboolean fade_sound)
 
     parole_window_busy_cursor (GTK_WIDGET (gst)->window);
     
-    if ( gst->priv->embedded )
-	goto out;
-    
     if ( fade_sound && gst->priv->state == GST_STATE_PLAYING && !playing_video )
     {
 	gdouble volume;
 	gdouble step;
 	volume = parole_gst_get_volume (gst);
 	/*
-	 * Like amarok, reduce the sound slowley then exit.
+	 * Fade-out on exit.
 	 */
 	if ( volume != 0 )
 	{
@@ -1567,16 +1539,28 @@ parole_gst_terminate_internal (ParoleGst *gst, gboolean fade_sound)
 		step = volume - volume / 10;
 		parole_gst_set_volume (gst, step < 0.01 ? 0 : step);
 		volume = parole_gst_get_volume (gst);
-		g_usleep (40000);
+		g_usleep (15000);
 	    }
 	}
     }
     
-out:
     parole_gst_change_state (gst, GST_STATE_NULL);
 }
 
 static void
+parole_gst_about_to_finish_cb (GstElement *elm, gpointer data)
+{
+    ParoleGst *gst;
+    
+    gst = PAROLE_GST (data);
+
+
+    g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0, 
+		   gst->priv->stream, PAROLE_STATE_ABOUT_TO_FINISH);
+    
+}
+
+static void
 parole_gst_conf_notify_cb (GObject *object, GParamSpec *spec, ParoleGst *gst)
 {
     if ( !g_strcmp0 ("vis-enabled", spec->name) || !g_strcmp0 ("vis-name", spec->name) )
@@ -1585,11 +1569,11 @@ parole_gst_conf_notify_cb (GObject *object, GParamSpec *spec, ParoleGst *gst)
     }
     else if ( !g_strcmp0 ("subtitle-font", spec->name) || !g_strcmp0 ("enable-subtitle", spec->name)  )
     {
-	parole_gst_helper_set_subtitle_font (PAROLE_GST_HELPER (gst));
+	parole_gst_set_subtitle_font (gst);
     }
     else if (!g_strcmp0 ("subtitle-encoding", spec->name) )
     {
-	parole_gst_helper_set_subtitle_encoding (PAROLE_GST_HELPER (gst));
+	parole_gst_set_subtitle_encoding (gst);
     }
     else if ( !g_strcmp0 ("brightness", spec->name) || !g_strcmp0 ("hue", spec->name) ||
 	      !g_strcmp0 ("contrast", spec->name) || !g_strcmp0 ("saturation", spec->name) )
@@ -1597,7 +1581,7 @@ parole_gst_conf_notify_cb (GObject *object, GParamSpec *spec, ParoleGst *gst)
 	gst->priv->update_color_balance = TRUE;
 	
 	if ( gst->priv->state >= GST_STATE_PAUSED )
-	    parole_gst_helper_set_video_colors (PAROLE_GST_HELPER (gst));
+	    parole_gst_set_video_color_balance (gst);
     }
     else if ( !g_strcmp0 ("aspect-ratio", spec->name) )
     {
@@ -1619,9 +1603,6 @@ static void parole_gst_get_property (GObject *object,
     
     switch (prop_id)
     {
-	case PROP_EMBEDDED:
-	    g_value_set_boolean (value, gst->priv->embedded);
-	    break;
 	case PROP_CONF_OBJ:
 	    g_value_set_pointer (value, gst->priv->conf);
 	    break;
@@ -1645,9 +1626,6 @@ static void parole_gst_set_property (GObject *object,
     
     switch (prop_id)
     {
-	case PROP_EMBEDDED:
-	    gst->priv->embedded = g_value_get_boolean (value);
-	    break;
 	case PROP_ENABLE_TAGS:
 	    gst->priv->enable_tags = g_value_get_boolean (value);
 	    break;
@@ -1670,31 +1648,6 @@ static void parole_gst_set_property (GObject *object,
     }
 }
 
-static void parole_gst_helper_iface_init (ParoleGstHelperIface *iface)
-{
-}
-
-static void
-parole_gst_set_iface_methods (ParoleGst *gst)
-{
-    ParoleGstHelperIface *iface;
-    iface = PAROLE_GST_HELPER_GET_IFACE (gst);
-	
-    if ( gst->priv->embedded == FALSE)
-    {
-	iface->draw_logo = parole_gst_draw_logo;
-	iface->set_video_color_balance = parole_gst_set_video_color_balance;
-	iface->set_subtitle_encoding = parole_gst_set_subtitle_encoding;
-	iface->set_subtitle_font = parole_gst_set_subtitle_font;
-	iface->load_subtitle = parole_gst_load_subtitle;
-	iface->update_vis = parole_gst_update_vis;
-    }
-    else
-    {
-	iface->draw_logo = parole_gst_draw_logo_embedded;
-    }
-}
-
 static void
 parole_gst_constructed (GObject *object)
 {
@@ -1706,13 +1659,17 @@ parole_gst_constructed (GObject *object)
     
     enable_xv = parole_rc_read_entry_bool ("enable-xv", PAROLE_RC_GROUP_GENERAL, TRUE);
     
-    gst->priv->playbin = gst_element_factory_make ("playbin", "player");
+    gst->priv->playbin = gst_element_factory_make ("playbin2", "player");
  
     if ( G_UNLIKELY (gst->priv->playbin == NULL) )
     {
-	xfce_err (_("Unable to load playbin GStreamer plugin"
-		    ", check your GStreamer installation"));
-		    
+	GError *error;
+	error = g_error_new (0, 0, "%s", _("Unable to load playbin GStreamer plugin"
+					    ", check your GStreamer installation"));
+					    
+	/*FIXME xfce_dialog_show_error (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gst))),
+				error, NULL);*/
+	g_error_free (error);
 	g_error ("playbin load failed");
     }
     
@@ -1730,8 +1687,12 @@ parole_gst_constructed (GObject *object)
 	
 	if ( G_UNLIKELY (gst->priv->video_sink == NULL) )
 	{
-	    xfce_err (_("Unable to load video GStreamer plugin"
-		      ", check your GStreamer installation"));
+	    GError *error;
+	    error = g_error_new (0, 0, "%s", _("Unable to load video GStreamer plugin"
+					      ", check your GStreamer installation"));
+	    /*FIXME xfce_dialog_show_error (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gst))),
+				error, NULL);*/
+	    g_error_free (error);
 	    g_error ("ximagesink load failed");
 	}
     }
@@ -1759,23 +1720,18 @@ parole_gst_constructed (GObject *object)
 	g_signal_connect (gst->priv->bus, "sync-message::element",
 			  G_CALLBACK (parole_gst_element_message_sync), gst);
 
-    /*
-     * Handle stream info changes, this can happen on live/radio stream.
-     */
-    g_signal_connect (gst->priv->playbin, "notify::stream-info",
-		      G_CALLBACK (parole_gst_stream_info_notify_cb), gst);
-      
-      
     g_signal_connect (gst->priv->playbin, "notify::source",
 		      G_CALLBACK (parole_gst_source_notify_cb), gst);
 
-    
-    parole_gst_set_iface_methods (gst);
 
-    parole_gst_helper_update_vis (PAROLE_GST_HELPER (gst));
+    g_signal_connect (gst->priv->playbin, "about-to-finish",
+		      G_CALLBACK (parole_gst_about_to_finish_cb), gst);
+
+    
+    parole_gst_update_vis (gst);
     parole_gst_load_logo (gst);
-    parole_gst_helper_set_subtitle_encoding (PAROLE_GST_HELPER (gst));
-    parole_gst_helper_set_subtitle_font (PAROLE_GST_HELPER (gst));
+    parole_gst_set_subtitle_encoding (gst);
+    parole_gst_set_subtitle_font (gst);
     
     TRACE ("End");
 }
@@ -1822,7 +1778,7 @@ parole_gst_class_init (ParoleGstClass *klass)
                       NULL, NULL,
                       _gmarshal_VOID__OBJECT_ENUM,
                       G_TYPE_NONE, 2, 
-		      PAROLE_TYPE_STREAM, GST_ENUM_TYPE_MEDIA_STATE);
+		      PAROLE_TYPE_STREAM, PAROLE_ENUM_TYPE_STATE);
 
     signals[MEDIA_PROGRESSED] = 
         g_signal_new ("media-progressed",
@@ -1865,14 +1821,6 @@ parole_gst_class_init (ParoleGstClass *klass)
 		      G_TYPE_STRING);
 
     g_object_class_install_property (object_class,
-				     PROP_EMBEDDED,
-				     g_param_spec_boolean ("embedded",
-							   NULL, NULL,
-							   FALSE,
-							   G_PARAM_CONSTRUCT_ONLY|
-							   G_PARAM_READWRITE));
-    
-    g_object_class_install_property (object_class,
 				     PROP_CONF_OBJ,
 				     g_param_spec_pointer ("conf-object",
 							   NULL, NULL,
@@ -1896,20 +1844,22 @@ parole_gst_init (ParoleGst *gst)
 
     gst->priv->state = GST_STATE_VOID_PENDING;
     gst->priv->target = GST_STATE_VOID_PENDING;
-    gst->priv->media_state = PAROLE_MEDIA_STATE_STOPPED;
+    gst->priv->media_state = PAROLE_STATE_STOPPED;
     gst->priv->aspect_ratio = PAROLE_ASPECT_RATIO_NONE;
     gst->priv->lock = g_mutex_new ();
     gst->priv->stream = parole_stream_new ();
     gst->priv->tick_id = 0;
     gst->priv->hidecursor_timer = g_timer_new ();
     gst->priv->update_vis = FALSE;
-    gst->priv->vis_sink = NULL;
     gst->priv->buffering = FALSE;
     gst->priv->update_color_balance = TRUE;
     gst->priv->state_change_id = 0;
     gst->priv->device = NULL;
     gst->priv->enable_tags = TRUE;
     gst->priv->terminating = FALSE;
+    gst->priv->with_vis = FALSE;
+    gst->priv->vis_loaded = FALSE;
+    gst->priv->scale_logo = TRUE;
     
     gst->priv->conf = NULL;
     
@@ -1923,10 +1873,9 @@ parole_gst_init (ParoleGst *gst)
 }
 
 GtkWidget *
-parole_gst_new (gboolean embedded, gpointer conf_obj)
+parole_gst_new (gpointer conf_obj)
 {
     parole_gst_object = g_object_new (PAROLE_TYPE_GST, 
-				      "embedded", embedded,
 				      "conf-object", conf_obj,
 				      NULL);
 				      
@@ -2045,18 +1994,30 @@ void parole_gst_resume (ParoleGst *gst)
     parole_gst_change_state (gst, GST_STATE_PLAYING);
 }
 
+static gboolean
+parole_gst_stop_idle (gpointer data)
+{
+    ParoleGst *gst;
+    
+    gst = PAROLE_GST (data);
+    
+    parole_gst_change_state (gst, GST_STATE_NULL);
+    
+    return FALSE;
+}
+
 void parole_gst_stop (ParoleGst *gst)
 {
     g_mutex_lock (gst->priv->lock);
     
     parole_stream_init_properties (gst->priv->stream);
-    gst->priv->target = GST_STATE_READY;
-    
+    gst->priv->target = GST_STATE_NULL;
+		  
     g_mutex_unlock (gst->priv->lock);
 
     parole_window_busy_cursor (GTK_WIDGET (gst)->window);
     
-    parole_gst_change_state (gst, GST_STATE_READY);
+    g_idle_add ((GSourceFunc) parole_gst_stop_idle, gst);
 }
 
 void parole_gst_terminate (ParoleGst *gst)
@@ -2073,10 +2034,12 @@ void parole_gst_shutdown (ParoleGst *gst)
     if ( g_signal_handler_is_connected (gst->priv->playbin, gst->priv->sig2) )
         g_signal_handler_disconnect (gst->priv->playbin, gst->priv->sig2);
 
+	if ( gst->priv->bus )
     g_object_unref (gst->priv->bus);
     
     gst_element_set_state (gst->priv->playbin, GST_STATE_VOID_PENDING);
 
+	if ( gst->priv->playbin )
     g_object_unref (gst->priv->playbin);
 }
 
@@ -2128,7 +2091,7 @@ gdouble	parole_gst_get_volume (ParoleGst *gst)
     return volume;
 }
 
-ParoleMediaState parole_gst_get_state (ParoleGst *gst)
+ParoleState parole_gst_get_state (ParoleGst *gst)
 {
     return gst->priv->media_state;
 }
diff --git a/gst/parole-gst.h b/gst/parole-gst.h
index 9a175c1..cb3265f 100644
--- a/gst/parole-gst.h
+++ b/gst/parole-gst.h
@@ -1,5 +1,5 @@
 /*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -26,6 +26,7 @@
 #include <gtk/gtk.h>
 
 #include <parole/parole-stream.h>
+#include <parole/parole-enum-types.h>
 
 G_BEGIN_DECLS
 
@@ -33,19 +34,6 @@ G_BEGIN_DECLS
 #define PAROLE_GST(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), PAROLE_TYPE_GST, ParoleGst))
 #define PAROLE_IS_GST(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), PAROLE_TYPE_GST))
 
-/*
- * Keep this order to be compatible with the 
- * ParoleState enum used by the plugin interface.
- */
-typedef enum /*< prefix=PAROLE_MEDIA_STATE_ >*/
-{
-    PAROLE_MEDIA_STATE_STOPPED,
-    PAROLE_MEDIA_STATE_FINISHED,
-    PAROLE_MEDIA_STATE_PAUSED,
-    PAROLE_MEDIA_STATE_PLAYING
-    
-} ParoleMediaState;
-
 typedef enum
 {
     PAROLE_ASPECT_RATIO_NONE,
@@ -72,7 +60,7 @@ typedef struct
     
     void		(*media_state)		 	(ParoleGst *gst,
 							 const ParoleStream *stream,
-							 ParoleMediaState state);
+							 ParoleState state);
 						  
     void		(*media_progressed)	 	(ParoleGst *gst,
 						         const ParoleStream *stream,
@@ -92,8 +80,7 @@ typedef struct
 
 GType        		parole_gst_get_type        	(void) G_GNUC_CONST;
 
-GtkWidget      	       *parole_gst_new             	(gboolean embedded,
-							 gpointer conf_obj);
+GtkWidget      	       *parole_gst_new             	(gpointer conf_obj);
 
 GtkWidget	       *parole_gst_get 			(void);
 
@@ -123,7 +110,7 @@ void			parole_gst_set_volume      	(ParoleGst *gst,
 						    
 gdouble			parole_gst_get_volume	   	(ParoleGst *gst);
 
-ParoleMediaState        parole_gst_get_state	   	(ParoleGst *gst);
+ParoleState        	parole_gst_get_state	   	(ParoleGst *gst);
 
 GstState	        parole_gst_get_gst_state   	(ParoleGst *gst);
 
diff --git a/parole/parole-provider-player.c b/parole/parole-provider-player.c
index afc15f0..e5ee1e2 100644
--- a/parole/parole-provider-player.c
+++ b/parole/parole-provider-player.c
@@ -1,5 +1,5 @@
 /*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
  *
  * Licensed under the GNU General Public License Version 2
  *
diff --git a/parole/parole-provider-player.h b/parole/parole-provider-player.h
index d009c5c..2d2c451 100644
--- a/parole/parole-provider-player.h
+++ b/parole/parole-provider-player.h
@@ -1,5 +1,5 @@
 /*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -44,14 +44,7 @@ typedef enum
     PAROLE_PLUGIN_CONTAINER_MAIN_VIEW
 } ParolePluginContainer;
 
-typedef enum
-{
-    PAROLE_STATE_STOPPED = 0,
-    PAROLE_STATE_PLAYBACK_FINISHED,
-    PAROLE_STATE_PAUSED,
-    PAROLE_STATE_PLAYING
-    
-} ParoleState;
+
 
 struct _ParoleProviderPlayerIface 
 {
diff --git a/parole/parole-stream.c b/parole/parole-stream.c
index 97c773d..a333499 100644
--- a/parole/parole-stream.c
+++ b/parole/parole-stream.c
@@ -1,5 +1,5 @@
 /*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
  *
  * Licensed under the GNU General Public License Version 2
  *
diff --git a/parole/parole-stream.h b/parole/parole-stream.h
index c61d01e..46e7ef1 100644
--- a/parole/parole-stream.h
+++ b/parole/parole-stream.h
@@ -1,5 +1,5 @@
 /*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -46,6 +46,18 @@ typedef enum
     
 } ParoleMediaType;
 
+
+typedef enum
+{
+    PAROLE_STATE_STOPPED = 0,
+    PAROLE_STATE_PLAYBACK_FINISHED,
+    PAROLE_STATE_ABOUT_TO_FINISH,
+    PAROLE_STATE_PAUSED,
+    PAROLE_STATE_PLAYING
+    
+} ParoleState;
+
+
 typedef struct _ParoleStream      ParoleStream;
 typedef struct _ParoleStreamClass ParoleStreamClass;
 
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index a122328..e5de6c1 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -8,10 +8,6 @@ if PAROLE_TRAY_PLUGIN
 SUBDIRS+=tray
 endif
 
-if WINDOW_TITLE_PLUGIN
-SUBDIRS+=window-title
-endif
-
 if POWER_MANAGER_PLUGIN
 SUBDIRS+=power-manager
-endif
\ No newline at end of file
+endif
diff --git a/plugins/window-title/Makefile.am b/plugins/window-title/Makefile.am
deleted file mode 100644
index 888a2db..0000000
--- a/plugins/window-title/Makefile.am
+++ /dev/null
@@ -1,42 +0,0 @@
-INCLUDES =					\
-	-I$(top_builddir)			\
-	-I$(top_srcdir)				\
-	-DG_LOG_DOMAIN=\"window_title\"    	\
-	-DLIBEXECDIR=\"$(libexecdir)\"		\
-	-DPACKAGE_LOCALE_DIR=\"$(localedir)\"
-
-pluginsdir = 					\
-	$(libdir)/parole-$(PAROLE_VERSION_API)
-
-plugins_LTLIBRARIES =				\
-	window-title.la
-
-window_title_la_SOURCES =			\
-	window-title-plugin.c			\
-	window-title-provider.c			\
-	window-title-provider.h
-
-window_title_la_CFLAGS =			\
-	$(PLATFORM_CFLAGS)			\
-	$(GTK_CFLAGS)				\
-	$(LIBXFCE4UTIL_CFLAGS)
-
-window_title_la_LDFLAGS =			\
-	-avoid-version				\
-	-export-dynamic				\
-	-module					\
-	$(PLATFORM_LDFLAGS)
-
-#
-# .desktop file
-#
-desktop_in_files = window-title.desktop.in
-desktopdir = $(datadir)/parole/parole-plugins-$(PAROLE_VERSION_API)
-desktop_DATA =  $(desktop_in_files:.desktop.in=.desktop)
- at INTLTOOL_DESKTOP_RULE@
-
-EXTRA_DIST = 		  	\
-	$(desktop_in_files)
-    
-DISTCLEANFILES = 		\
-	$(desktop_DATA)
\ No newline at end of file
diff --git a/plugins/window-title/window-title-plugin.c b/plugins/window-title/window-title-plugin.c
deleted file mode 100644
index 465e605..0000000
--- a/plugins/window-title/window-title-plugin.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <libxfce4util/libxfce4util.h>
-
-#include "window-title-provider.h"
-
-G_MODULE_EXPORT GType	parole_plugin_initialize (ParoleProviderPlugin *plugin);
-						  
-G_MODULE_EXPORT void	parole_plugin_shutdown   (void);
-
-G_MODULE_EXPORT GType
-parole_plugin_initialize (ParoleProviderPlugin *plugin)
-{
-    xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
-    
-    window_title_provider_register_type (plugin);
-    
-    return WINDOW_TYPE_TITLE_PROVIDER;
-}
-
-G_MODULE_EXPORT void
-parole_plugin_shutdown (void)
-{
-    
-}
diff --git a/plugins/window-title/window-title-provider.c b/plugins/window-title/window-title-provider.c
deleted file mode 100644
index 85e2364..0000000
--- a/plugins/window-title/window-title-provider.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <libxfce4util/libxfce4util.h>
-
-#include "window-title-provider.h"
-
-static void   window_title_provider_iface_init 	   	(ParoleProviderPluginIface *iface);
-static void   window_title_provider_finalize            (GObject 	           *object);
-
-
-struct _WindowTitleProviderClass
-{
-    GObjectClass parent_class;
-};
-
-struct _WindowTitleProvider
-{
-    GObject      	  parent;
-    
-    ParoleProviderPlayer *player;
-    GtkWidget		 *window;
-};
-
-
-PAROLE_DEFINE_TYPE_WITH_CODE (WindowTitleProvider,
-			      window_title_provider,
-			      G_TYPE_OBJECT,
-			      PAROLE_IMPLEMENT_INTERFACE (PAROLE_TYPE_PROVIDER_PLUGIN,
-							  window_title_provider_iface_init));
-
-
-
-static void
-window_title_provider_set_default_window_title (GtkWidget *window)
-{
-    gtk_window_set_title (GTK_WINDOW (window), _("Parole Media Player"));
-}
-
-static void
-window_title_provider_set_stream_title (GtkWidget *window, const ParoleStream *stream)
-{
-    gchar *title = NULL;
-    
-    g_object_get (G_OBJECT (stream),
-		  "title", &title,
-		  NULL);
-		  
-    if ( title )
-    {
-	gtk_window_set_title (GTK_WINDOW (window), title);
-	g_free (title);
-    }
-}
-
-static void
-window_title_provider_state_changed_cb (ParoleProviderPlayer *player, const ParoleStream *stream, 
-				        ParoleState state, WindowTitleProvider *provider)
-{
-    if ( state < PAROLE_STATE_PAUSED )
-	window_title_provider_set_default_window_title (provider->window);
-    else
-	window_title_provider_set_stream_title (provider->window, stream);
-}
-
-static void
-window_title_provider_tag_message_cb (ParoleProviderPlayer *player, const ParoleStream *stream, WindowTitleProvider *provider)
-{
-    window_title_provider_set_stream_title (provider->window, stream);
-}
-						
-static gboolean window_title_provider_is_configurable (ParoleProviderPlugin *plugin)
-{
-    return FALSE;
-}
-
-static void
-window_title_provider_set_player (ParoleProviderPlugin *plugin, ParoleProviderPlayer *player)
-{
-    WindowTitleProvider *provider;
-    provider = WINDOW_TITLE_PROVIDER (plugin);
-    
-    provider->player = player;
-    
-    provider->window = parole_provider_player_get_main_window (player);
-    
-    g_signal_connect (player, "state-changed", 
-		      G_CALLBACK (window_title_provider_state_changed_cb), provider);
-		      
-    g_signal_connect (player, "tag-message",
-		      G_CALLBACK (window_title_provider_tag_message_cb), provider);
-}
-
-static void
-window_title_provider_iface_init (ParoleProviderPluginIface *iface)
-{
-    iface->get_is_configurable = window_title_provider_is_configurable;
-    iface->set_player = window_title_provider_set_player;
-}
-
-static void window_title_provider_class_init (WindowTitleProviderClass *klass)
-{
-    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-    
-    gobject_class->finalize = window_title_provider_finalize;
-}
-
-static void window_title_provider_init (WindowTitleProvider *provider)
-{
-    provider->player = NULL;
-    g_debug ("Init");
-}
-
-static void window_title_provider_finalize (GObject *object)
-{
-    WindowTitleProvider *provider;
-    
-    provider = WINDOW_TITLE_PROVIDER (object);
-    
-    g_debug ("Finalized");
-    
-    if ( provider->window && GTK_IS_WINDOW (provider->window) )
-	window_title_provider_set_default_window_title (provider->window);
-    
-    G_OBJECT_CLASS (window_title_provider_parent_class)->finalize (object);
-}
diff --git a/plugins/window-title/window-title-provider.h b/plugins/window-title/window-title-provider.h
deleted file mode 100644
index f88152b..0000000
--- a/plugins/window-title/window-title-provider.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef WINDOW_TITLE_PROVIDER_H_
-#define WINDOW_TITLE_PROVIDER_H_
-
-#include <parole/parole.h>
-
-G_BEGIN_DECLS
-
-typedef struct _WindowTitleProviderClass WindowTitleProviderClass;
-typedef struct _WindowTitleProvider      WindowTitleProvider;
-
-#define WINDOW_TYPE_TITLE_PROVIDER             (window_title_provider_get_type ())
-#define WINDOW_TITLE_PROVIDER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), WINDOW_TYPE_TITLE_PROVIDER, WindowTitleProvider))
-#define WINDOW_TITLE_PROVIDER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), WINDOW_TYPE_TITLE_PROVIDER, WindowTitleProviderClass))
-#define WINDOW_IS_TITLE_PROVIDER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WINDOW_TYPE_TITLE_PROVIDER))
-#define WINDOW_IS_TITLE_PROVIDER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), WINDOW_TYPE_TITLE_PROVIDER))
-#define WINDOW_TITLE_PROVIDER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), WINDOW_TYPE_TITLE_PROVIDER, WindowTitleProviderClass))
-
-GType window_title_provider_get_type      	(void) G_GNUC_CONST G_GNUC_INTERNAL;
-
-void  window_title_provider_register_type	(ParoleProviderPlugin *plugin);
-
-G_END_DECLS
-
-#endif /*WINDOW_TITLE_PROVIDER_H_*/
diff --git a/plugins/window-title/window-title.desktop.in b/plugins/window-title/window-title.desktop.in
deleted file mode 100644
index 0d251bd..0000000
--- a/plugins/window-title/window-title.desktop.in
+++ /dev/null
@@ -1,6 +0,0 @@
-[Parole Plugin]
-Module=window-title
-_Name=Window Title
-_Description=Set the main window name to the current playing media name.
-Authors=Sarah Hijazi
-Website=http://goodies.xfce.org/projects/applications/parole
diff --git a/src/parole-disc-menu.c b/src/parole-disc-menu.c
index 5d33cbe..47ce1fd 100644
--- a/src/parole-disc-menu.c
+++ b/src/parole-disc-menu.c
@@ -91,17 +91,17 @@ parole_disc_menu_show (ParoleDiscMenu *menu, gboolean show_label)
 
 static void
 parole_disc_menu_media_state_cb (ParoleGst *gst, const ParoleStream *stream, 	
-				 ParoleMediaState state, ParoleDiscMenu *menu)
+				 ParoleState state, ParoleDiscMenu *menu)
 {
     ParoleMediaType media_type;
     menu->priv->tracks = 0;
     
-    if ( state < PAROLE_MEDIA_STATE_PAUSED )
+    if ( state < PAROLE_STATE_PAUSED )
     {
 	gtk_label_set_markup (GTK_LABEL (menu->priv->info), NULL);
 	parole_disc_menu_hide (menu);
     }
-    else if ( state == PAROLE_MEDIA_STATE_PLAYING )
+    else if ( state == PAROLE_STATE_PLAYING )
     {
 	g_object_get (G_OBJECT (stream),
 		      "media-type", &media_type,
diff --git a/src/parole-medialist.c b/src/parole-medialist.c
index 850bdeb..41ace6b 100644
--- a/src/parole-medialist.c
+++ b/src/parole-medialist.c
@@ -99,19 +99,19 @@ static void	parole_media_list_clear_list 	  (ParoleMediaList *list);
 /*
  * Callbacks for GtkBuilder
  */
-void		parole_media_list_media_up_clicked_cb 	(GtkButton *button, 
+void		parole_media_list_add_clicked_cb 	(GtkButton *button, 
 							 ParoleMediaList *list);
 							 
-void		parole_media_list_media_down_clicked_cb (GtkButton *button, 
+void		parole_media_list_remove_clicked_cb 	(GtkButton *button, 
 							 ParoleMediaList *list);
 
-void		parole_media_list_save_cb		(GtkButton *button,
-						         ParoleMediaList *list);
-							 
-void		parole_media_list_add_clicked_cb 	(GtkButton *button, 
+void		parole_media_list_clear_clicked_cb 	(GtkButton *button, 
 							 ParoleMediaList *list);
-							 
-void		parole_media_list_remove_clicked_cb 	(GtkButton *button, 
+
+void		parole_media_list_repeat_toggled_cb	(GtkToggleButton *button,
+							 ParoleMediaList *list);
+
+void		parole_media_list_shuffle_toggled_cb	(GtkToggleButton *button,
 							 ParoleMediaList *list);
 
 void		parole_media_list_row_activated_cb 	(GtkTreeView *view, 
@@ -179,6 +179,8 @@ enum
     MEDIA_ACTIVATED,
     MEDIA_CURSOR_CHANGED,
     URI_OPENED,
+    SHUFFLE_TOGGLED,
+    REPEAT_TOGGLED,
     LAST_SIGNAL
 };
 
@@ -435,6 +437,32 @@ parole_media_list_add_clicked_cb (GtkButton *button, ParoleMediaList *list)
     parole_media_list_open_internal (list);
 }
 
+void 
+parole_media_list_clear_clicked_cb (GtkButton *button, ParoleMediaList *list)
+{
+	parole_media_list_clear_list (list);
+}
+
+void
+parole_media_list_repeat_toggled_cb (GtkToggleButton *button, ParoleMediaList *list)
+{
+	gboolean toggled;
+    
+    toggled = gtk_toggle_button_get_active (button);
+    
+    g_signal_emit (G_OBJECT (list), signals [REPEAT_TOGGLED], 0, toggled);
+}
+
+void
+parole_media_list_shuffle_toggled_cb (GtkToggleButton *button, ParoleMediaList *list)
+{
+	gboolean toggled;
+    
+    toggled = gtk_toggle_button_get_active (button);
+    
+    g_signal_emit (G_OBJECT (list), signals [SHUFFLE_TOGGLED], 0, toggled);
+}
+
 void parole_media_list_close_save_dialog_cb (GtkButton *button, ParolePlaylistSave *data)
 {
     gtk_widget_destroy (GTK_WIDGET (data->chooser));
@@ -920,40 +948,6 @@ parole_media_list_move_many_down (GList *path_list, GtkTreeModel *model)
 }
 
 /**
- * parole_media_list_media_down_clicked_cb:
- * 
- * 
- **/
-void
-parole_media_list_media_down_clicked_cb (GtkButton *button, ParoleMediaList *list)
-{
-    GtkTreeIter iter;
-    GList *path_list = NULL;
-    GtkTreeModel *model;
-    guint len;
-    
-    path_list = gtk_tree_selection_get_selected_rows (list->priv->sel, &model);
-
-    len = g_list_length (path_list);
-
-    if ( len == 1 )
-    {
-	GtkTreePath *path;
-	path = g_list_nth_data (path_list, 0);
-	if ( G_LIKELY (gtk_tree_model_get_iter (model, &iter, path)) )
-	    parole_media_list_move_one_down (list->priv->store, &iter);
-    }
-    else
-    {
-	parole_media_list_move_many_down (path_list, model);
-    }
-    
-    g_list_foreach (path_list, (GFunc) gtk_tree_path_free, NULL);
-    g_list_free (path_list);
-}
-
-
-/**
  * parole_media_list_move_on_up:
  * 
  * @store: a #GtkListStore
@@ -1032,39 +1026,6 @@ parole_media_list_move_many_up (GList *path_list, GtkTreeModel *model)
 }
 
 /**
- * parole_media_list_media_up_clicked_cb:
- * 
- * 
- **/
-void
-parole_media_list_media_up_clicked_cb (GtkButton *button, ParoleMediaList *list)
-{
-    GtkTreeIter iter;
-    GList *path_list = NULL;
-    GtkTreeModel *model;
-    guint len;
-    
-    path_list = gtk_tree_selection_get_selected_rows (list->priv->sel, &model);
-
-    len = g_list_length (path_list);
-
-    if ( len == 1 )
-    {
-	GtkTreePath *path;
-	path = g_list_nth_data (path_list, 0);
-	if ( G_LIKELY (gtk_tree_model_get_iter (model, &iter, path)) )
-	    parole_media_list_move_one_up (list->priv->store, &iter);
-    }
-    else
-    {
-	parole_media_list_move_many_up (path_list, model);
-    }
-    
-    g_list_foreach (path_list, (GFunc) gtk_tree_path_free, NULL);
-    g_list_free (path_list);
-}
-
-/**
  * parole_media_list_row_activated_cb:
  * 
  * 
@@ -1448,6 +1409,24 @@ parole_media_list_class_init (ParoleMediaListClass *klass)
                       NULL, NULL,
                       g_cclosure_marshal_VOID__STRING,
                       G_TYPE_NONE, 1, G_TYPE_STRING);
+                      
+	signals[SHUFFLE_TOGGLED] = 
+        g_signal_new ("shuffle-toggled",
+                      PAROLE_TYPE_MEDIA_LIST,
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ParoleMediaListClass, shuffle_toggled),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__BOOLEAN,
+                      G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+                      
+	signals[REPEAT_TOGGLED] = 
+        g_signal_new ("repeat-toggled",
+                      PAROLE_TYPE_MEDIA_LIST,
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ParoleMediaListClass, repeat_toggled),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__BOOLEAN,
+                      G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
 
     g_type_class_add_private (klass, sizeof (ParoleMediaListPrivate));
     
diff --git a/src/parole-medialist.h b/src/parole-medialist.h
index 36b08a3..321a23e 100644
--- a/src/parole-medialist.h
+++ b/src/parole-medialist.h
@@ -60,6 +60,12 @@ typedef struct
 								     
     void			(*uri_opened)			    (ParoleMediaList *list,
 								     const gchar *uri);
+								     
+	void			(*shuffle_toggled)		    (ParoleMediaList *list,
+								     gboolean shuffle_toggled);
+								     
+	void			(*repeat_toggled)		    (ParoleMediaList *list,
+								     gboolean repeat_toggled);
     
 } ParoleMediaListClass;
 
diff --git a/src/parole-player.c b/src/parole-player.c
index 5cdc65b..e5da2fe 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -51,6 +51,7 @@
 #include "parole-gst.h"
 #include "parole-dbus.h"
 #include "parole-mediachooser.h"
+#include "parole-medialist.h"
 #include "parole-filters.h"
 #include "parole-disc.h"
 #include "parole-disc-menu.h"
@@ -124,13 +125,14 @@ void            parole_player_range_value_changed       (GtkRange *range,
 void            parole_player_play_pause_clicked        (GtkButton *button, 
 							 ParolePlayer *player);
 
+
 void            parole_player_stop_clicked              (GtkButton *button, 
 							 ParolePlayer *player);
 
-void            parole_player_seekf_cb                  (GtkButton *button, 
+void            parole_player_forward_cb                  (GtkButton *button, 
 							 ParolePlayer *player);
 							 
-void            parole_player_seekb_cb                  (GtkButton *button, 
+void            parole_player_back_cb                  (GtkButton *button, 
 							 ParolePlayer *player);
 
 gboolean        parole_player_scroll_event_cb		(GtkWidget *widget,
@@ -255,8 +257,9 @@ struct ParolePlayerPrivate
     GtkWidget		*playlist_nt;
     GtkWidget		*main_nt;	/*Main notebook*/
     GtkWidget		*show_hide_playlist;
+    GtkWidget		*shuffle_menu_item;
+    GtkWidget		*repeat_menu_item;
     GtkWidget		*play_pause;
-    GtkWidget		*stop;
     GtkWidget		*seekf;
     GtkWidget		*seekb;
     GtkWidget		*range;
@@ -276,7 +279,6 @@ struct ParolePlayerPrivate
     GtkWidget		*main_box;
     
     GtkWidget		*volume;
-    /*GtkWidget		*volume_image;*/
     GtkWidget		*menu_bar;
     GtkWidget		*play_box;
      
@@ -284,7 +286,7 @@ struct ParolePlayerPrivate
     
     gboolean		 full_screen;
     
-    ParoleMediaState     state;
+    ParoleState     state;
     gboolean		 user_seeking;
     gboolean             internal_range_change;
     gboolean		 buffering;
@@ -293,6 +295,15 @@ struct ParolePlayerPrivate
         
 };
 
+enum
+{
+    SHUFFLE_TOGGLED,
+    REPEAT_TOGGLED,
+    LAST_SIGNAL
+};
+
+static guint signals [LAST_SIGNAL] = { 0 };
+
 G_DEFINE_TYPE (ParolePlayer, parole_player, G_TYPE_OBJECT)
 
 void parole_show_about	(GtkWidget *widget)
@@ -536,7 +547,7 @@ parole_player_uri_opened_cb (ParoleMediaList *list, const gchar *uri, ParolePlay
 static void
 parole_player_media_cursor_changed_cb (ParoleMediaList *list, gboolean media_selected, ParolePlayer *player)
 {
-    if (player->priv->state < PAROLE_MEDIA_STATE_PAUSED)
+    if (player->priv->state < PAROLE_STATE_PAUSED)
     {
 	gtk_widget_set_sensitive (player->priv->play_pause, 
 				  media_selected || !parole_media_list_is_empty (player->priv->list));
@@ -544,19 +555,45 @@ parole_player_media_cursor_changed_cb (ParoleMediaList *list, gboolean media_sel
 }
 
 static void
+parole_player_media_list_shuffle_toggled_cb (ParoleMediaList *list, gboolean shuffle_toggled, ParolePlayer *player)
+{
+    gboolean toggled;
+    
+    toggled = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM(player->priv->shuffle_menu_item));
+    
+    if (toggled != shuffle_toggled)
+    {
+    	gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM(player->priv->shuffle_menu_item), shuffle_toggled);
+    }
+}
+
+static void
+parole_player_media_list_repeat_toggled_cb (ParoleMediaList *list, gboolean repeat_toggled, ParolePlayer *player)
+{
+    gboolean toggled;
+    
+    toggled = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM(player->priv->repeat_menu_item));
+    
+    if (toggled != repeat_toggled)
+    {
+    	gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM(player->priv->repeat_menu_item), repeat_toggled);
+    }
+}
+
+static void
 parole_player_media_progressed_cb (ParoleGst *gst, const ParoleStream *stream, gint64 value, ParolePlayer *player)
 {
 #ifdef DEBUG
     g_return_if_fail (value > 0);
 #endif
     
-    if ( !player->priv->user_seeking && player->priv->state == PAROLE_MEDIA_STATE_PLAYING )
+    if ( !player->priv->user_seeking && player->priv->state == PAROLE_STATE_PLAYING )
     {
 	parole_player_change_range_value (player, value);
     gchar pos_text[128];
     get_time_string (pos_text, value);
     /*text = g_strdup_printf ("%s %s/%s", 
-			    state == PAROLE_MEDIA_STATE_PAUSED ? _("Paused") : _("Playing"), 
+			    state == PAROLE_STATE_PAUSED ? _("Paused") : _("Playing"), 
 			    pos_text, 
 			    dur_text);*/
     gtk_label_set_text (GTK_LABEL (player->priv->label_elapsed), pos_text);
@@ -851,7 +888,7 @@ parole_player_reset_saver_changed (ParolePlayer *player, const ParoleStream *str
 		  
     if ( !reset_saver )
 	parole_screen_saver_uninhibit (player->priv->screen_saver);
-    else if ( player->priv->state ==  PAROLE_MEDIA_STATE_PLAYING )
+    else if ( player->priv->state ==  PAROLE_STATE_PLAYING )
     {
 	gboolean has_video;
 	
@@ -869,30 +906,36 @@ parole_player_reset_saver_changed (ParolePlayer *player, const ParoleStream *str
 }
 
 static void
-parole_player_media_state_cb (ParoleGst *gst, const ParoleStream *stream, ParoleMediaState state, ParolePlayer *player)
+parole_player_media_state_cb (ParoleGst *gst, const ParoleStream *stream, ParoleState state, ParolePlayer *player)
 {
-    PAROLE_DEBUG_ENUM ("State callback", state, GST_ENUM_TYPE_MEDIA_STATE);
+    PAROLE_DEBUG_ENUM ("State callback", state, PAROLE_ENUM_TYPE_STATE);
 
 
     player->priv->state = state;
     
     parole_player_reset_saver_changed (player, stream);
     
-    if ( state == PAROLE_MEDIA_STATE_PLAYING )
+    if ( state == PAROLE_STATE_PLAYING )
     {
 	parole_player_playing (player, stream);
     }
-    else if ( state == PAROLE_MEDIA_STATE_PAUSED )
+    else if ( state == PAROLE_STATE_PAUSED )
     {
 	parole_player_paused (player);
     }
-    else if ( state == PAROLE_MEDIA_STATE_STOPPED )
+    else if ( state == PAROLE_STATE_STOPPED )
     {
 	parole_player_stopped (player);
     }
-    else if ( state == PAROLE_MEDIA_STATE_FINISHED )
+    else if ( state == PAROLE_STATE_PLAYBACK_FINISHED || state == PAROLE_STATE_ABOUT_TO_FINISH)
     {
-	TRACE ("***Playback finished***");
+#ifdef DEBUG
+	if (state == PAROLE_STATE_PLAYBACK_FINISHED )
+	    TRACE ("***Playback finished***");
+	else
+	    TRACE ("***Playback about to finish***");
+#endif
+	
 	parole_player_play_next (player, TRUE);
     }
 }
@@ -900,9 +943,9 @@ parole_player_media_state_cb (ParoleGst *gst, const ParoleStream *stream, Parole
 void
 parole_player_play_pause_clicked (GtkButton *button, ParolePlayer *player)
 {
-    if ( player->priv->state == PAROLE_MEDIA_STATE_PLAYING )
+    if ( player->priv->state == PAROLE_STATE_PLAYING )
 	parole_gst_pause (PAROLE_GST (player->priv->gst));
-    else if ( player->priv->state == PAROLE_MEDIA_STATE_PAUSED )
+    else if ( player->priv->state == PAROLE_STATE_PAUSED )
 	parole_gst_resume (PAROLE_GST (player->priv->gst));
     else
 	parole_player_play_selected_row (player);
@@ -930,26 +973,16 @@ parole_player_get_seek_value (ParolePlayer *player)
     return val;
 }
 
-void parole_player_seekf_cb (GtkButton *button, ParolePlayer *player)
+void parole_player_forward_cb (GtkButton *button, ParolePlayer *player)
 {
-    gdouble seek;
-    
-    seek =  parole_gst_get_stream_position (PAROLE_GST (player->priv->gst) )
-	    +
-	    parole_player_get_seek_value (player);
-	    
-    parole_gst_seek (PAROLE_GST (player->priv->gst), seek);
+	if ( !parole_disc_menu_seek_next (player->priv->disc_menu))
+	parole_player_play_next (player, FALSE);
 }
 							 
-void parole_player_seekb_cb (GtkButton *button, ParolePlayer *player)
+void parole_player_back_cb (GtkButton *button, ParolePlayer *player)
 {
-    gdouble seek;
-    
-    seek =  parole_gst_get_stream_position (PAROLE_GST (player->priv->gst) )
-	    -
-	    parole_player_get_seek_value (player);
-	    
-    parole_gst_seek (PAROLE_GST (player->priv->gst), seek);
+	if ( !parole_disc_menu_seek_prev (player->priv->disc_menu))
+	parole_player_play_prev (player);
 }
 
 gboolean parole_player_scroll_event_cb (GtkWidget *widget, GdkEventScroll *ev, ParolePlayer *player)
@@ -958,12 +991,12 @@ gboolean parole_player_scroll_event_cb (GtkWidget *widget, GdkEventScroll *ev, P
     
     if ( ev->direction == GDK_SCROLL_UP )
     {
-	parole_player_seekf_cb (NULL, player);
+	parole_player_forward_cb (NULL, player);
         ret_val = TRUE;
     }
     else if ( ev->direction == GDK_SCROLL_DOWN )
     {
-	parole_player_seekb_cb (NULL, player);
+	parole_player_back_cb (NULL, player);
         ret_val = TRUE;
     }
 
@@ -1046,7 +1079,7 @@ parole_player_buffering_cb (ParoleGst *gst, const ParoleStream *stream, gint per
 	player->priv->buffering = TRUE;
 	
 	
-	if ( player->priv->state == PAROLE_MEDIA_STATE_PLAYING )
+	if ( player->priv->state == PAROLE_STATE_PLAYING )
 	    parole_gst_pause (PAROLE_GST (player->priv->gst));
 	    
     gchar *buff;
@@ -1083,12 +1116,6 @@ parole_player_play_menu_item_activate (ParolePlayer *player)
 }
 
 static void
-parole_player_stop_menu_item_activate (ParolePlayer *player)
-{
-    gtk_widget_activate (player->priv->stop);
-}
-
-static void
 parole_player_next_menu_item_activate (ParolePlayer *player)
 {
     parole_disc_menu_seek_next (player->priv->disc_menu);
@@ -1202,7 +1229,7 @@ parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time
     
     /*Play menu item
      */
-    mi = gtk_image_menu_item_new_from_stock (player->priv->state == PAROLE_MEDIA_STATE_PLAYING 
+    mi = gtk_image_menu_item_new_from_stock (player->priv->state == PAROLE_STATE_PLAYING 
 					     ? GTK_STOCK_MEDIA_PAUSE : GTK_STOCK_MEDIA_PLAY, 
 					     NULL);
 					     
@@ -1221,10 +1248,10 @@ parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time
      */
     mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_FORWARD, NULL);
 					     
-    gtk_widget_set_sensitive (mi, (player->priv->state >= PAROLE_MEDIA_STATE_PAUSED));
+    gtk_widget_set_sensitive (mi, (player->priv->state >= PAROLE_STATE_PAUSED));
     gtk_widget_show (mi);
     g_signal_connect (mi, "activate",
-		      G_CALLBACK (parole_player_seekf_cb), player);
+		      G_CALLBACK (parole_player_forward_cb), player);
     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
     
     /*
@@ -1232,10 +1259,10 @@ parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time
      */
     mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_REWIND, NULL);
 					     
-    gtk_widget_set_sensitive (mi, (player->priv->state >= PAROLE_MEDIA_STATE_PAUSED));
+    gtk_widget_set_sensitive (mi, (player->priv->state >= PAROLE_STATE_PAUSED));
     gtk_widget_show (mi);
     g_signal_connect (mi, "activate",
-		      G_CALLBACK (parole_player_seekb_cb), player);
+		      G_CALLBACK (parole_player_back_cb), player);
     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
     
     /*
@@ -1243,11 +1270,11 @@ parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time
      */
     mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_STOP, NULL);
 					     
-    gtk_widget_set_sensitive (mi, player->priv->state == PAROLE_MEDIA_STATE_PLAYING);
+    gtk_widget_set_sensitive (mi, player->priv->state == PAROLE_STATE_PLAYING);
     gtk_widget_show (mi);
-    g_signal_connect_swapped (mi, "activate",
+    /*g_signal_connect_swapped (mi, "activate",
 			      G_CALLBACK (parole_player_stop_menu_item_activate), player);
-    gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);*/
     
     /*
      * Next chapter menu item
@@ -1255,7 +1282,7 @@ parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time
     mi = gtk_image_menu_item_new_with_label (media_type == PAROLE_MEDIA_TYPE_CDDA ? _("Next Track") : _("Next Chapter"));
     img = gtk_image_new_from_stock (GTK_STOCK_MEDIA_NEXT, GTK_ICON_SIZE_MENU);
     gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi),img);
-    gtk_widget_set_sensitive (mi, (player->priv->state == PAROLE_MEDIA_STATE_PLAYING) && dvd_menu);
+    gtk_widget_set_sensitive (mi, (player->priv->state == PAROLE_STATE_PLAYING) && dvd_menu);
     gtk_widget_show (mi);
     g_signal_connect_swapped (mi, "activate",
 			      G_CALLBACK (parole_player_next_menu_item_activate), player);
@@ -1268,7 +1295,7 @@ parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time
     img = gtk_image_new_from_stock (GTK_STOCK_MEDIA_PREVIOUS, GTK_ICON_SIZE_MENU);
     gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
 					     
-    gtk_widget_set_sensitive (mi, (player->priv->state == PAROLE_MEDIA_STATE_PLAYING) && dvd_menu);
+    gtk_widget_set_sensitive (mi, (player->priv->state == PAROLE_STATE_PLAYING) && dvd_menu);
     gtk_widget_show (mi);
     g_signal_connect_swapped (mi, "activate",
 			      G_CALLBACK (parole_player_previous_menu_item_activate), player);
@@ -1591,12 +1618,12 @@ parole_player_handle_key_press (GdkEventKey *ev, ParolePlayer *player)
 	case GDK_Right:
 	    /* Media seekable ?*/
 	    if ( GTK_WIDGET_SENSITIVE (player->priv->range) )
-		parole_player_seekf_cb (NULL, player);
+		parole_player_forward_cb (NULL, player);
 	    ret_val = TRUE;
 	    break;
 	case GDK_Left:
 	    if ( GTK_WIDGET_SENSITIVE (player->priv->range) )
-		parole_player_seekb_cb (NULL, player);
+		parole_player_back_cb (NULL, player);
 	    ret_val = TRUE;
 	    break;
 	case GDK_s:
@@ -1906,7 +1933,7 @@ parole_player_init (ParolePlayer *player)
     g_signal_connect_swapped (player->priv->session, "die",
 			      G_CALLBACK (parole_player_session_die_cb), player);
     
-    player->priv->gst = parole_gst_new (FALSE, player->priv->conf);
+    player->priv->gst = parole_gst_new (player->priv->conf);
 
     player->priv->disc = parole_disc_new ();
     g_signal_connect (player->priv->disc, "disc-selected",
@@ -1917,7 +1944,7 @@ parole_player_init (ParolePlayer *player)
     player->priv->screen_saver = parole_screen_saver_new ();
     player->priv->list = PAROLE_MEDIA_LIST (parole_media_list_get ());
     
-    player->priv->state = PAROLE_MEDIA_STATE_STOPPED;
+    player->priv->state = PAROLE_STATE_STOPPED;
     player->priv->user_seeking = FALSE;
     player->priv->internal_range_change = FALSE;
     player->priv->exit = FALSE;
@@ -1968,13 +1995,12 @@ parole_player_init (ParolePlayer *player)
    
     player->priv->main_nt = GTK_WIDGET (gtk_builder_get_object (builder, "main-notebook"));
     
-    player->priv->play_box = GTK_WIDGET (gtk_builder_get_object (builder, "play_box"));
+    player->priv->playcontrol_box = GTK_WIDGET (gtk_builder_get_object (builder, "playing_box"));
     player->priv->progressbar_buffering = GTK_WIDGET (gtk_builder_get_object (builder, "progressbar_buffering"));
     
     player->priv->label_duration = GTK_WIDGET(gtk_builder_get_object(builder, "label_duration"));
     player->priv->label_elapsed = GTK_WIDGET(gtk_builder_get_object(builder, "label_elapsed"));
     player->priv->play_pause = GTK_WIDGET (gtk_builder_get_object (builder, "play-pause"));
-    player->priv->stop = GTK_WIDGET (gtk_builder_get_object (builder, "stop"));
     player->priv->seekf = GTK_WIDGET (gtk_builder_get_object (builder, "forward"));
     player->priv->seekb = GTK_WIDGET (gtk_builder_get_object (builder, "back"));
      
@@ -1986,6 +2012,10 @@ parole_player_init (ParolePlayer *player)
     player->priv->play_box = GTK_WIDGET (gtk_builder_get_object (builder, "play-box"));
     player->priv->playlist_nt = GTK_WIDGET (gtk_builder_get_object (builder, "notebook-playlist"));
     player->priv->show_hide_playlist = GTK_WIDGET (gtk_builder_get_object (builder, "show-hide-list"));
+    
+    player->priv->shuffle_menu_item = GTK_WIDGET (gtk_builder_get_object (builder, "shuffle"));
+    player->priv->repeat_menu_item = GTK_WIDGET (gtk_builder_get_object (builder, "repeat"));
+    
     player->priv->control = GTK_WIDGET (gtk_builder_get_object (builder, "control"));
     player->priv->go_fs = GTK_WIDGET (gtk_builder_get_object (builder, "go_fs"));
     player->priv->leave_fs = GTK_WIDGET (gtk_builder_get_object (builder, "leave_fs"));
@@ -2042,6 +2072,12 @@ parole_player_init (ParolePlayer *player)
 		      
     g_signal_connect (player->priv->list, "uri-opened",
 		      G_CALLBACK (parole_player_uri_opened_cb), player);
+		      
+	g_signal_connect (player->priv->list, "repeat-toggled",
+		      G_CALLBACK (parole_player_media_list_repeat_toggled_cb), player);
+		      
+	g_signal_connect (player->priv->list, "shuffle-toggled",
+		      G_CALLBACK (parole_player_media_list_shuffle_toggled_cb), player);
     
     /*
      * Load auto saved media list.
@@ -2168,6 +2204,24 @@ parole_player_dbus_class_init (ParolePlayerClass *klass)
     dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
 				     &dbus_glib_parole_player_object_info);
 				     
+	signals[SHUFFLE_TOGGLED] = 
+        g_signal_new ("shuffle-toggled",
+                      PAROLE_TYPE_PLAYER,
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ParolePlayerClass, shuffle_toggled),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__BOOLEAN,
+                      G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+                      
+	signals[REPEAT_TOGGLED] = 
+        g_signal_new ("repeat-toggled",
+                      PAROLE_TYPE_PLAYER,
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ParolePlayerClass, repeat_toggled),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__BOOLEAN,
+                      G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+				     
 }
 
 static void
@@ -2212,14 +2266,14 @@ static gboolean	parole_player_dbus_prev_track (ParolePlayer *player,
 static gboolean	parole_player_dbus_seek_forward (ParolePlayer *player,
 					         GError *error)
 {
-    parole_player_seekf_cb (NULL, player);
+    parole_player_forward_cb (NULL, player);
     return TRUE;
 }
 
 static gboolean	parole_player_dbus_seek_backward (ParolePlayer *player,
 					          GError *error)
 {
-    parole_player_seekb_cb (NULL, player);
+    parole_player_back_cb (NULL, player);
     return TRUE;
 }
 					 
diff --git a/src/parole-player.h b/src/parole-player.h
index 8817852..64ba339 100644
--- a/src/parole-player.h
+++ b/src/parole-player.h
@@ -43,6 +43,13 @@ typedef struct
 {
     GObjectClass 		 parent_class;
     
+    void			(*shuffle_toggled)		    (ParolePlayer *list,
+								     gboolean shuffle_toggled);
+								     
+	void			(*repeat_toggled)		    (ParolePlayer *list,
+								     gboolean repeat_toggled);
+
+    
 } ParolePlayerClass;
 
 GType        			 parole_player_get_type        (void) G_GNUC_CONST;
diff --git a/src/parole-plugin-player.c b/src/parole-plugin-player.c
index 0f580ca..d173efe 100644
--- a/src/parole-plugin-player.c
+++ b/src/parole-plugin-player.c
@@ -188,7 +188,7 @@ static void parole_plugin_player_iface_init (ParoleProviderPlayerIface *iface)
 
 static void 
 parole_plugin_player_media_state_changed_cb (ParoleGst *gst, const ParoleStream *stream, 
-					     ParoleMediaState state, ParolePluginPlayer *player)
+					     ParoleState state, ParolePluginPlayer *player)
 {
     g_signal_emit_by_name (G_OBJECT (player), "state-changed", stream, state);
 }


More information about the Xfce4-commits mailing list