[SCM] gecko-mediaplayer/upstream: Imported Upstream version 1.0.7

sramacher at users.alioth.debian.org sramacher at users.alioth.debian.org
Fri Nov 16 18:59:54 UTC 2012


The following commit has been merged in the upstream branch:
commit bbf42b64939c38aa37bb641ef7a425b80b212cf1
Author: Sebastian Ramacher <sramacher at debian.org>
Date:   Fri Nov 16 19:15:06 2012 +0100

    Imported Upstream version 1.0.7

diff --git a/ChangeLog b/ChangeLog
index 537d7b3..870d65a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,20 @@
 Development
-	Updated Portuguese translation
-	Updated Japanese translation
+1.0.7b
+1.0.7a1
+    Version bump to 1.0.7a1
+	Very Large Change
+		rework the processing of playlists so that items are downloaded 
+			one at a time and only as needed
+		Convert NPRES and NPERR codes to text in messages
+		ASX and M3U files should be properly parsed and not streamed in all cases
+    Add ASX to the list of types that should be streamed, and fix the code so that it is case insensitive
+    Switch plugin to streaming mode with #EXTM3U is found in the file
+    Clean up some depreciated symbol warnings
+    Convert plugin_list to use gm_log
+    Convert the majority of the code to use gm_log instead of printf
+1.0.6
+    Updated Portuguese translation
+    Updated Japanese translation
 1.0.6b1
     Fix a problem in the style parser, was looking at a null pointer
     Added WMP plugin properties enabled and enableContextMenu
diff --git a/Makefile.in b/Makefile.in
index 15e7e8d..57012a0 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,6 +16,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -48,11 +65,11 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES = gecko-mediaplayer.spec
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
 am__v_at_0 = @
 SOURCES =
 DIST_SOURCES =
@@ -63,6 +80,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -84,6 +106,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(gecko_mediaplayerdocdir)" \
 	"$(DESTDIR)$(schemadir)"
 DATA = $(gecko_mediaplayerdoc_DATA) $(schema_DATA)
@@ -99,9 +127,11 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
 am__relativize = \
   dir0=`pwd`; \
   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
@@ -130,6 +160,8 @@ am__relativize = \
 DIST_ARCHIVES = $(distdir).tar.gz
 GZIP_ENV = --best
 distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
 distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -281,7 +313,7 @@ all: config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
-am--refresh:
+am--refresh: Makefile
 	@:
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
@@ -317,10 +349,8 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 
 config.h: stamp-h1
-	@if test ! -f $@; then \
-	  rm -f stamp-h1; \
-	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
-	else :; fi
+	@if test ! -f $@; then rm -f stamp-h1; else :; fi
+	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
 	@rm -f stamp-h1
@@ -336,8 +366,11 @@ gecko-mediaplayer.spec: $(top_builddir)/config.status $(srcdir)/gecko-mediaplaye
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 install-gecko_mediaplayerdocDATA: $(gecko_mediaplayerdoc_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(gecko_mediaplayerdocdir)" || $(MKDIR_P) "$(DESTDIR)$(gecko_mediaplayerdocdir)"
 	@list='$(gecko_mediaplayerdoc_DATA)'; test -n "$(gecko_mediaplayerdocdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(gecko_mediaplayerdocdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(gecko_mediaplayerdocdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -351,13 +384,14 @@ uninstall-gecko_mediaplayerdocDATA:
 	@$(NORMAL_UNINSTALL)
 	@list='$(gecko_mediaplayerdoc_DATA)'; test -n "$(gecko_mediaplayerdocdir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(gecko_mediaplayerdocdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(gecko_mediaplayerdocdir)" && rm -f $$files
+	dir='$(DESTDIR)$(gecko_mediaplayerdocdir)'; $(am__uninstall_files_from_dir)
 install-schemaDATA: $(schema_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(schemadir)" || $(MKDIR_P) "$(DESTDIR)$(schemadir)"
 	@list='$(schema_DATA)'; test -n "$(schemadir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(schemadir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(schemadir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -371,9 +405,7 @@ uninstall-schemaDATA:
 	@$(NORMAL_UNINSTALL)
 	@list='$(schema_DATA)'; test -n "$(schemadir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(schemadir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(schemadir)" && rm -f $$files
+	dir='$(DESTDIR)$(schemadir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -544,13 +576,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -585,7 +614,11 @@ dist-gzip: distdir
 	$(am__remove_distdir)
 
 dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
 	$(am__remove_distdir)
 
 dist-lzma: distdir
@@ -593,7 +626,7 @@ dist-lzma: distdir
 	$(am__remove_distdir)
 
 dist-xz: distdir
-	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
 	$(am__remove_distdir)
 
 dist-tarZ: distdir
@@ -624,6 +657,8 @@ distcheck: dist
 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lzma*) \
 	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
 	*.tar.xz*) \
 	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
 	*.tar.Z*) \
@@ -633,7 +668,7 @@ distcheck: dist
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
-	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	chmod -R a-w $(distdir); chmod u+w $(distdir)
 	mkdir $(distdir)/_build
 	mkdir $(distdir)/_inst
 	chmod a-w $(distdir)
@@ -643,6 +678,7 @@ distcheck: dist
 	  && am__cwd=`pwd` \
 	  && $(am__cd) $(distdir)/_build \
 	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
@@ -671,8 +707,16 @@ distcheck: dist
 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
 	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 distuninstallcheck:
-	@$(am__cd) '$(distuninstallcheck_dir)' \
-	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	@test -n '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: trying to run $@ with an empty' \
+	       '$$(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	$(am__cd) '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
 	   || { echo "ERROR: files left after uninstall:" ; \
 	        if test -n "$(DESTDIR)"; then \
 	          echo "  (check DESTDIR support)"; \
@@ -706,10 +750,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -798,8 +847,8 @@ uninstall-am: uninstall-gecko_mediaplayerdocDATA uninstall-schemaDATA
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
 	all all-am am--refresh check check-am clean clean-generic \
 	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
-	dist-hook dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
-	distcheck distclean distclean-generic distclean-hdr \
+	dist-hook dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \
+	dist-zip distcheck distclean distclean-generic distclean-hdr \
 	distclean-tags distcleancheck distdir distuninstallcheck dvi \
 	dvi-am html html-am info info-am install install-am \
 	install-data install-data-am install-data-hook install-dvi \
diff --git a/aclocal.m4 b/aclocal.m4
index a90f773..0315809 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.6 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -659,12 +660,15 @@ else
 fi[]dnl
 ])# PKG_CHECK_MODULES
 
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
@@ -674,7 +678,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [am__api_version='1.11'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.1], [],
+m4_if([$1], [1.11.6], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -690,19 +694,21 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.1])dnl
+[AM_AUTOMAKE_VERSION([1.11.6])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
 # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
 # `$srcdir', `$srcdir/..', or `$srcdir/../..'.
@@ -807,14 +813,14 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
+# 2010, 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 10
+# serial 12
 
 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
@@ -854,6 +860,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
   # instance it was reported that on HP-UX the gcc test will end up
   # making a dummy file named `D' -- because `-MD' means `put the output
   # in D'.
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -918,7 +925,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       # This compiler won't grok `-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
@@ -983,10 +990,13 @@ AC_DEFUN([AM_DEP_TRACK],
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
 AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
 AC_SUBST([AMDEPBACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
 ])
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
@@ -1220,12 +1230,15 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
+# Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
@@ -1265,8 +1278,8 @@ AC_SUBST([am__leading_dot])])
 # Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
 # From Jim Meyering
 
-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008,
+# 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1286,7 +1299,7 @@ AC_DEFUN([AM_MAINTAINER_MODE],
        [disable], [m4_define([am_maintainer_other], [enable])],
        [m4_define([am_maintainer_other], [enable])
         m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])])
-AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
   dnl maintainer-mode's default is 'disable' unless 'enable' is passed
   AC_ARG_ENABLE([maintainer-mode],
 [  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
@@ -1432,12 +1445,15 @@ else
 fi
 ])
 
-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
+# Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_PROG_MKDIR_P
 # ---------------
 # Check for `mkdir -p'.
@@ -1460,13 +1476,14 @@ esac
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
+# serial 5
 
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
@@ -1474,13 +1491,13 @@ AC_DEFUN([_AM_MANGLE_OPTION],
 [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
 
 # _AM_SET_OPTION(NAME)
-# ------------------------------
+# --------------------
 # Set option NAME.  Presently that only means defining a flag for this option.
 AC_DEFUN([_AM_SET_OPTION],
 [m4_define(_AM_MANGLE_OPTION([$1]), 1)])
 
 # _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
+# ------------------------
 # OPTIONS is a space-separated list of Automake options.
 AC_DEFUN([_AM_SET_OPTIONS],
 [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
@@ -1556,13 +1573,13 @@ Check your system clock])
 fi
 AC_MSG_RESULT(yes)])
 
-# Copyright (C) 2009  Free Software Foundation, Inc.
+# Copyright (C) 2009, 2011  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 1
+# serial 2
 
 # AM_SILENT_RULES([DEFAULT])
 # --------------------------
@@ -1577,18 +1594,50 @@ yes) AM_DEFAULT_VERBOSITY=0;;
 no)  AM_DEFAULT_VERBOSITY=1;;
 *)   AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
 esac
+dnl
+dnl A few `make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+   [am_cv_make_support_nested_variables],
+   [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+  dnl Using `$V' instead of `$(V)' breaks IRIX make.
+  AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
 AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
 AM_BACKSLASH='\'
 AC_SUBST([AM_BACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_PROG_INSTALL_STRIP
 # ---------------------
 # One issue with vendor `install' (even GNU) is that you can't
@@ -1611,13 +1660,13 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -1626,13 +1675,13 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1654,10 +1703,11 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
 AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
 m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
      [m4_case([$1], [ustar],, [pax],,
               [m4_fatal([Unknown tar format])])
 AC_MSG_CHECKING([how to create a $1 tar archive])
diff --git a/config.h b/config.h
index b8a6034..05ad2f9 100644
--- a/config.h
+++ b/config.h
@@ -89,4 +89,4 @@
 #define STDC_HEADERS 1
 
 /* Version number of package */
-#define VERSION "1.0.6"
+#define VERSION "1.0.7"
diff --git a/configure b/configure
index af0efce..9771714 100755
--- a/configure
+++ b/configure
@@ -657,6 +657,7 @@ CPP
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
+am__nodep
 AMDEPBACKSLASH
 AMDEP_FALSE
 AMDEP_TRUE
@@ -672,6 +673,8 @@ CFLAGS
 CC
 AM_BACKSLASH
 AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
 MAINT
 MAINTAINER_MODE_FALSE
 MAINTAINER_MODE_TRUE
@@ -2729,7 +2732,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE=gecko-mediaplayer
- VERSION=1.0.6
+ VERSION=1.0.7
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2759,11 +2762,11 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
-# Always define AMTAR for backward compatibility.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
 
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
@@ -2772,8 +2775,8 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
 ac_config_headers="$ac_config_headers config.h"
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to disable maintainer-specific portions of Makefiles" >&5
-$as_echo_n "checking whether to disable maintainer-specific portions of Makefiles... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
     # Check whether --enable-maintainer-mode was given.
 if test "${enable_maintainer_mode+set}" = set; then :
   enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
@@ -2804,6 +2807,33 @@ yes) AM_DEFAULT_VERBOSITY=0;;
 no)  AM_DEFAULT_VERBOSITY=1;;
 *)   AM_DEFAULT_VERBOSITY=0;;
 esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
 AM_BACKSLASH='\'
 
 
@@ -2859,6 +2889,7 @@ fi
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
  if test "x$enable_dependency_tracking" != xno; then
   AMDEP_TRUE=
@@ -3672,6 +3703,7 @@ else
   # instance it was reported that on HP-UX the gcc test will end up
   # making a dummy file named `D' -- because `-MD' means `put the output
   # in D'.
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -3731,7 +3763,7 @@ else
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       # This compiler won't grok `-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
@@ -4396,6 +4428,7 @@ else
   # instance it was reported that on HP-UX the gcc test will end up
   # making a dummy file named `D' -- because `-MD' means `put the output
   # in D'.
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -4455,7 +4488,7 @@ else
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       # This compiler won't grok `-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
@@ -5063,6 +5096,7 @@ else
   # instance it was reported that on HP-UX the gcc test will end up
   # making a dummy file named `D' -- because `-MD' means `put the output
   # in D'.
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -5122,7 +5156,7 @@ else
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       # This compiler won't grok `-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
@@ -5969,6 +6003,7 @@ else
   # instance it was reported that on HP-UX the gcc test will end up
   # making a dummy file named `D' -- because `-MD' means `put the output
   # in D'.
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -6028,7 +6063,7 @@ else
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       # This compiler won't grok `-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
@@ -7259,12 +7294,12 @@ if test -n "$GMLIB_CFLAGS"; then
     pkg_cv_GMLIB_CFLAGS="$GMLIB_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmlib >= 1.0.5\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gmlib >= 1.0.5") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmlib >= 1.0.7\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gmlib >= 1.0.7") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GMLIB_CFLAGS=`$PKG_CONFIG --cflags "gmlib >= 1.0.5" 2>/dev/null`
+  pkg_cv_GMLIB_CFLAGS=`$PKG_CONFIG --cflags "gmlib >= 1.0.7" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -7275,12 +7310,12 @@ if test -n "$GMLIB_LIBS"; then
     pkg_cv_GMLIB_LIBS="$GMLIB_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmlib >= 1.0.5\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gmlib >= 1.0.5") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmlib >= 1.0.7\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gmlib >= 1.0.7") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GMLIB_LIBS=`$PKG_CONFIG --libs "gmlib >= 1.0.5" 2>/dev/null`
+  pkg_cv_GMLIB_LIBS=`$PKG_CONFIG --libs "gmlib >= 1.0.7" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -7300,14 +7335,14 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        GMLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gmlib >= 1.0.5" 2>&1`
+	        GMLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gmlib >= 1.0.7" 2>&1`
         else
-	        GMLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors "gmlib >= 1.0.5" 2>&1`
+	        GMLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors "gmlib >= 1.0.7" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$GMLIB_PKG_ERRORS" >&5
 
-	as_fn_error $? "Package requirements (gmlib >= 1.0.5) were not met:
+	as_fn_error $? "Package requirements (gmlib >= 1.0.7) were not met:
 
 $GMLIB_PKG_ERRORS
 
@@ -7871,13 +7906,13 @@ fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$GECKO_PKG_ERRORS" >&5
 
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: seamokey-plugin not found, trying another" >&5
-$as_echo "$as_me: WARNING: seamokey-plugin not found, trying another" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: seamonkey-plugin not found, trying another" >&5
+$as_echo "$as_me: WARNING: seamonkey-plugin not found, trying another" >&2;}
 elif test $pkg_failed = untried; then
      	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: seamokey-plugin not found, trying another" >&5
-$as_echo "$as_me: WARNING: seamokey-plugin not found, trying another" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: seamonkey-plugin not found, trying another" >&5
+$as_echo "$as_me: WARNING: seamonkey-plugin not found, trying another" >&2;}
 else
 	GECKO_CFLAGS=$pkg_cv_GECKO_CFLAGS
 	GECKO_LIBS=$pkg_cv_GECKO_LIBS
@@ -8099,11 +8134,11 @@ fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$GECKO_PKG_ERRORS" >&5
 
-	as_fn_error $? "npapi-sdk not found, all out ot tries" "$LINENO" 5
+	as_fn_error $? "npapi-sdk not found, all out of tries" "$LINENO" 5
 elif test $pkg_failed = untried; then
      	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-	as_fn_error $? "npapi-sdk not found, all out ot tries" "$LINENO" 5
+	as_fn_error $? "npapi-sdk not found, all out of tries" "$LINENO" 5
 else
 	GECKO_CFLAGS=$pkg_cv_GECKO_CFLAGS
 	GECKO_LIBS=$pkg_cv_GECKO_LIBS
diff --git a/configure.in b/configure.in
index 8d0c87d..17ee2be 100644
--- a/configure.in
+++ b/configure.in
@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
 dnl Created by Anjuta application wizard.
 
 AC_INIT(configure.in)
-AM_INIT_AUTOMAKE(gecko-mediaplayer, 1.0.6)
+AM_INIT_AUTOMAKE(gecko-mediaplayer, 1.0.7)
 AM_CONFIG_HEADER(config.h)
 AM_MAINTAINER_MODE([enable])
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
@@ -31,7 +31,7 @@ PKG_CHECK_MODULES(GLIB, [glib-2.0])
 AC_SUBST(GLIB_CFLAGS)
 AC_SUBST(GLIB_LIBS)
 
-PKG_CHECK_MODULES(GMLIB, [gmlib >= 1.0.5])
+PKG_CHECK_MODULES(GMLIB, [gmlib >= 1.0.7])
 AC_SUBST(GMLIB_CFLAGS)
 AC_SUBST(GMLIB_LIBS)
 
@@ -79,7 +79,7 @@ fi
 
 if test "$GECKO_CFLAGS" = ""; then
 PKG_CHECK_MODULES(GECKO, [seamonkey-plugin seamonkey-xpcom],[ AC_MSG_NOTICE([Using seamonkey])
-    ],[AC_MSG_WARN([seamokey-plugin not found, trying another])])
+    ],[AC_MSG_WARN([seamonkey-plugin not found, trying another])])
 fi
 
 if test "$GECKO_CFLAGS" = ""; then
@@ -94,7 +94,7 @@ fi
 
 if test "$GECKO_CFLAGS" = ""; then
 PKG_CHECK_MODULES(GECKO, [npapi-sdk],[ AC_MSG_NOTICE([Using npapi-sdk])
-    ],[AC_MSG_ERROR([npapi-sdk not found, all out ot tries])])
+    ],[AC_MSG_ERROR([npapi-sdk not found, all out of tries])])
     require_nspr="yes"
 fi
 
diff --git a/gecko-mediaplayer.spec b/gecko-mediaplayer.spec
index 6db5aeb..7cdfe5e 100644
--- a/gecko-mediaplayer.spec
+++ b/gecko-mediaplayer.spec
@@ -1,4 +1,4 @@
-%define ver 1.0.6
+%define ver 1.0.7
 %define use_gconf 
 
 Name: gecko-mediaplayer
diff --git a/po/cs.gmo b/po/cs.gmo
index 5c94c4d..4174bab 100644
Binary files a/po/cs.gmo and b/po/cs.gmo differ
diff --git a/po/cs.po b/po/cs.po
index cfa8981..8b11971 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gecko-mediaplayer 0.9.6\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-21 21:31-0600\n"
+"POT-Creation-Date: 2012-10-08 07:19-0600\n"
 "PO-Revision-Date: 2009-07-07 13:06+0200\n"
 "Last-Translator: Petr Pisar <petr.pisar at atlas.cz>\n"
 "Language-Team: Czech <translation-team-cs at lists.sourceforge.net>\n"
@@ -16,50 +16,50 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/plugin.cpp:347
+#: src/plugin.cpp:427
 #, c-format
 msgid "gecko mediaplayer v%s\n"
 msgstr ""
 
-#: src/plugin.cpp:622
+#: src/plugin.cpp:709
 #, c-format
 msgid "Cache fill: %2.2f%%"
 msgstr "Naplnění vyrovnávací paměti: %2.2f %%"
 
-#: src/plugin.cpp:887
-#, fuzzy, c-format
+#: src/plugin.cpp:924
+#, fuzzy
 msgid "Write unable to write because item is NULL\n"
 msgstr "Metoda Write nemůže zapsat, protože položka je NULL\n"
 
 # kibibyes per second
-#: src/plugin.cpp:956 src/plugin.cpp:1371
+#: src/plugin.cpp:990 src/plugin.cpp:1407
 #, c-format
 msgid "Caching %iK (%0.1f K/s)"
 msgstr "Naplnění vyrovánací paměti: %iK (%0.1f K/s)"
 
 # kibibyes per second
-#: src/plugin.cpp:959 src/plugin.cpp:1374
+#: src/plugin.cpp:993 src/plugin.cpp:1410
 #, c-format
 msgid "Cache fill: %2.2f%% (%0.1f K/s)"
 msgstr "Naplnění vyrovnávací paměti: %2.2f %% (%0.1f KB/s)"
 
-#: src/plugin.cpp:2647
+#: src/plugin.cpp:2618
 msgid "Playing"
 msgstr ""
 
-#: src/plugin.cpp:2650
+#: src/plugin.cpp:2621
 msgid "Paused"
 msgstr ""
 
-#: src/plugin.cpp:2653
+#: src/plugin.cpp:2624
 msgid "Stopped"
 msgstr ""
 
-#: src/plugin.cpp:2657
+#: src/plugin.cpp:2628
 #, c-format
 msgid "Buffering %2.1lf%%"
 msgstr ""
 
-#: src/plugin.cpp:2662
+#: src/plugin.cpp:2633
 msgid "Unknown Status"
 msgstr ""
diff --git a/po/de.gmo b/po/de.gmo
index 9574565..0cfe4d3 100644
Binary files a/po/de.gmo and b/po/de.gmo differ
diff --git a/po/de.po b/po/de.po
index ad7e04b..465413a 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gecko-mediaplayer 0.9.9.2-1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-21 21:31-0600\n"
+"POT-Creation-Date: 2012-10-08 07:19-0600\n"
 "PO-Revision-Date: 2010-03-25 18:47+GMT\n"
 "Last-Translator: Chris Leick <c.leick at vollbio.de>\n"
 "Language-Team: German <debian-l10n-german at lists.debian.org>\n"
@@ -17,48 +17,47 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/plugin.cpp:347
+#: src/plugin.cpp:427
 #, c-format
 msgid "gecko mediaplayer v%s\n"
 msgstr ""
 
-#: src/plugin.cpp:622
+#: src/plugin.cpp:709
 #, c-format
 msgid "Cache fill: %2.2f%%"
 msgstr "Zwischenspeicher-Füllstand: %2.2f%%"
 
-#: src/plugin.cpp:887
-#, c-format
+#: src/plugin.cpp:924
 msgid "Write unable to write because item is NULL\n"
 msgstr "Es kann nicht geschrieben werden, da das Element NULL ist\n"
 
-#: src/plugin.cpp:956 src/plugin.cpp:1371
+#: src/plugin.cpp:990 src/plugin.cpp:1407
 #, c-format
 msgid "Caching %iK (%0.1f K/s)"
 msgstr "%i KB (%0.1f KB/s) werden zwischengespeichert"
 
-#: src/plugin.cpp:959 src/plugin.cpp:1374
+#: src/plugin.cpp:993 src/plugin.cpp:1410
 #, c-format
 msgid "Cache fill: %2.2f%% (%0.1f K/s)"
 msgstr "Zwischenspeicher-Füllstand: %2.2f%% (%0.1f KB/s)"
 
-#: src/plugin.cpp:2647
+#: src/plugin.cpp:2618
 msgid "Playing"
 msgstr ""
 
-#: src/plugin.cpp:2650
+#: src/plugin.cpp:2621
 msgid "Paused"
 msgstr ""
 
-#: src/plugin.cpp:2653
+#: src/plugin.cpp:2624
 msgid "Stopped"
 msgstr ""
 
-#: src/plugin.cpp:2657
+#: src/plugin.cpp:2628
 #, c-format
 msgid "Buffering %2.1lf%%"
 msgstr ""
 
-#: src/plugin.cpp:2662
+#: src/plugin.cpp:2633
 msgid "Unknown Status"
 msgstr ""
diff --git a/po/es.gmo b/po/es.gmo
index 24a4ac6..37e810d 100644
Binary files a/po/es.gmo and b/po/es.gmo differ
diff --git a/po/es.po b/po/es.po
index 8ec62f6..800b886 100644
--- a/po/es.po
+++ b/po/es.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Gecko Mediaplayer\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-21 21:31-0600\n"
+"POT-Creation-Date: 2012-10-08 07:19-0600\n"
 "PO-Revision-Date: 2010-08-20 02:34+0100\n"
 "Last-Translator: Cosme Domínguez Díaz <cosme.ddiaz at gmail.com>\n"
 "Language-Team: \n"
@@ -20,48 +20,47 @@ msgstr ""
 "X-Poedit-Country: SPAIN\n"
 "Plural-Forms: nplurals=2; plural=(n != 1)\n"
 
-#: src/plugin.cpp:347
+#: src/plugin.cpp:427
 #, c-format
 msgid "gecko mediaplayer v%s\n"
 msgstr ""
 
-#: src/plugin.cpp:622
+#: src/plugin.cpp:709
 #, c-format
 msgid "Cache fill: %2.2f%%"
 msgstr "Almacenando cache: %2.2f%%"
 
-#: src/plugin.cpp:887
-#, c-format
+#: src/plugin.cpp:924
 msgid "Write unable to write because item is NULL\n"
 msgstr "Es imposible de escribir ya que el objeto es NULL\n"
 
-#: src/plugin.cpp:956 src/plugin.cpp:1371
+#: src/plugin.cpp:990 src/plugin.cpp:1407
 #, c-format
 msgid "Caching %iK (%0.1f K/s)"
 msgstr "Almacenando en cache %iK (%0.1f K/s)"
 
-#: src/plugin.cpp:959 src/plugin.cpp:1374
+#: src/plugin.cpp:993 src/plugin.cpp:1410
 #, c-format
 msgid "Cache fill: %2.2f%% (%0.1f K/s)"
 msgstr "Almacenando cache: %2.2f%% (%0.1f K/s)"
 
-#: src/plugin.cpp:2647
+#: src/plugin.cpp:2618
 msgid "Playing"
 msgstr ""
 
-#: src/plugin.cpp:2650
+#: src/plugin.cpp:2621
 msgid "Paused"
 msgstr ""
 
-#: src/plugin.cpp:2653
+#: src/plugin.cpp:2624
 msgid "Stopped"
 msgstr ""
 
-#: src/plugin.cpp:2657
+#: src/plugin.cpp:2628
 #, c-format
 msgid "Buffering %2.1lf%%"
 msgstr ""
 
-#: src/plugin.cpp:2662
+#: src/plugin.cpp:2633
 msgid "Unknown Status"
 msgstr ""
diff --git a/po/fr.gmo b/po/fr.gmo
index 9ac42b1..8263606 100644
Binary files a/po/fr.gmo and b/po/fr.gmo differ
diff --git a/po/fr.po b/po/fr.po
index 632bc3a..06824ce 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gecko-mediaplayer\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-21 21:31-0600\n"
+"POT-Creation-Date: 2012-10-08 07:19-0600\n"
 "PO-Revision-Date: 2011-06-08 16:04+0100\n"
 "Last-Translator: Alexandre Bedot <alexandre.bedot at free.fr>\n"
 "Language-Team: French <fr at li.org>\n"
@@ -18,48 +18,47 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/plugin.cpp:347
+#: src/plugin.cpp:427
 #, c-format
 msgid "gecko mediaplayer v%s\n"
 msgstr "gecko mediaplayer v%s\n"
 
-#: src/plugin.cpp:622
+#: src/plugin.cpp:709
 #, c-format
 msgid "Cache fill: %2.2f%%"
 msgstr "Mise en mémoire tampon : %2.2f%%"
 
-#: src/plugin.cpp:887
-#, c-format
+#: src/plugin.cpp:924
 msgid "Write unable to write because item is NULL\n"
 msgstr "Écrire : Écriture impossible; l'objet est de type NULL.\n"
 
-#: src/plugin.cpp:956 src/plugin.cpp:1371
+#: src/plugin.cpp:990 src/plugin.cpp:1407
 #, c-format
 msgid "Caching %iK (%0.1f K/s)"
 msgstr "Mise en mémoire tampon : %iK (%0.1f K/s)"
 
-#: src/plugin.cpp:959 src/plugin.cpp:1374
+#: src/plugin.cpp:993 src/plugin.cpp:1410
 #, c-format
 msgid "Cache fill: %2.2f%% (%0.1f K/s)"
 msgstr "Mise en mémoire tampon : %2.2f%% (%0.1f K/s)"
 
-#: src/plugin.cpp:2647
+#: src/plugin.cpp:2618
 msgid "Playing"
 msgstr "Lecture en cours"
 
-#: src/plugin.cpp:2650
+#: src/plugin.cpp:2621
 msgid "Paused"
 msgstr "En pause"
 
-#: src/plugin.cpp:2653
+#: src/plugin.cpp:2624
 msgid "Stopped"
 msgstr "Arrêté"
 
-#: src/plugin.cpp:2657
+#: src/plugin.cpp:2628
 #, c-format
 msgid "Buffering %2.1lf%%"
 msgstr "État du tampon %2.1lf%%"
 
-#: src/plugin.cpp:2662
+#: src/plugin.cpp:2633
 msgid "Unknown Status"
 msgstr "État inconnu"
diff --git a/po/gecko-mediaplayer.pot b/po/gecko-mediaplayer.pot
index 0d5d04d..fb8c79c 100644
--- a/po/gecko-mediaplayer.pot
+++ b/po/gecko-mediaplayer.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-21 21:31-0600\n"
+"POT-Creation-Date: 2012-10-08 07:19-0600\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -17,48 +17,47 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/plugin.cpp:347
+#: src/plugin.cpp:427
 #, c-format
 msgid "gecko mediaplayer v%s\n"
 msgstr ""
 
-#: src/plugin.cpp:622
+#: src/plugin.cpp:709
 #, c-format
 msgid "Cache fill: %2.2f%%"
 msgstr ""
 
-#: src/plugin.cpp:887
-#, c-format
+#: src/plugin.cpp:924
 msgid "Write unable to write because item is NULL\n"
 msgstr ""
 
-#: src/plugin.cpp:956 src/plugin.cpp:1371
+#: src/plugin.cpp:990 src/plugin.cpp:1407
 #, c-format
 msgid "Caching %iK (%0.1f K/s)"
 msgstr ""
 
-#: src/plugin.cpp:959 src/plugin.cpp:1374
+#: src/plugin.cpp:993 src/plugin.cpp:1410
 #, c-format
 msgid "Cache fill: %2.2f%% (%0.1f K/s)"
 msgstr ""
 
-#: src/plugin.cpp:2647
+#: src/plugin.cpp:2618
 msgid "Playing"
 msgstr ""
 
-#: src/plugin.cpp:2650
+#: src/plugin.cpp:2621
 msgid "Paused"
 msgstr ""
 
-#: src/plugin.cpp:2653
+#: src/plugin.cpp:2624
 msgid "Stopped"
 msgstr ""
 
-#: src/plugin.cpp:2657
+#: src/plugin.cpp:2628
 #, c-format
 msgid "Buffering %2.1lf%%"
 msgstr ""
 
-#: src/plugin.cpp:2662
+#: src/plugin.cpp:2633
 msgid "Unknown Status"
 msgstr ""
diff --git a/po/it.gmo b/po/it.gmo
index 3eee6bc..387f6c6 100644
Binary files a/po/it.gmo and b/po/it.gmo differ
diff --git a/po/it.po b/po/it.po
index db6c913..4c3d8f0 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gecko-mediaplayer\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-21 21:31-0600\n"
+"POT-Creation-Date: 2012-10-08 07:19-0600\n"
 "PO-Revision-Date: 2011-10-16 17:42+0200\n"
 "Last-Translator: Francesco Groccia <frgroccia gmail.com>\n"
 "Language-Team: Italian <tp at lists.linux.it>\n"
@@ -16,48 +16,47 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/plugin.cpp:347
+#: src/plugin.cpp:427
 #, c-format
 msgid "gecko mediaplayer v%s\n"
 msgstr "gecko mediaplayer v%s\n"
 
-#: src/plugin.cpp:622
+#: src/plugin.cpp:709
 #, c-format
 msgid "Cache fill: %2.2f%%"
 msgstr "Cache piena al: %2.2f%%"
 
-#: src/plugin.cpp:887
-#, c-format
+#: src/plugin.cpp:924
 msgid "Write unable to write because item is NULL\n"
 msgstr "Impossibile scrivere perché l'oggetto è NULL\n"
 
-#: src/plugin.cpp:956 src/plugin.cpp:1371
+#: src/plugin.cpp:990 src/plugin.cpp:1407
 #, c-format
 msgid "Caching %iK (%0.1f K/s)"
 msgstr "Riempimento della cache %iK (%0.1f K/s)"
 
-#: src/plugin.cpp:959 src/plugin.cpp:1374
+#: src/plugin.cpp:993 src/plugin.cpp:1410
 #, c-format
 msgid "Cache fill: %2.2f%% (%0.1f K/s)"
 msgstr "Cache piena al: %2.2f%% (%0.1f K/s)"
 
-#: src/plugin.cpp:2647
+#: src/plugin.cpp:2618
 msgid "Playing"
 msgstr "Riproduzione"
 
-#: src/plugin.cpp:2650
+#: src/plugin.cpp:2621
 msgid "Paused"
 msgstr "Pausa"
 
-#: src/plugin.cpp:2653
+#: src/plugin.cpp:2624
 msgid "Stopped"
 msgstr "Interrotto"
 
-#: src/plugin.cpp:2657
+#: src/plugin.cpp:2628
 #, c-format
 msgid "Buffering %2.1lf%%"
 msgstr "Riempimento del buffer %2.1lf%%"
 
-#: src/plugin.cpp:2662
+#: src/plugin.cpp:2633
 msgid "Unknown Status"
 msgstr "Stato sconosciuto"
diff --git a/po/ja.gmo b/po/ja.gmo
index 31884c9..ccbd9a2 100644
Binary files a/po/ja.gmo and b/po/ja.gmo differ
diff --git a/po/ja.po b/po/ja.po
index b465ab1..fec94d1 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gecko-mediaplayer\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-21 21:31-0600\n"
+"POT-Creation-Date: 2012-10-08 07:19-0600\n"
 "PO-Revision-Date: 2012-04-05 10:51+0900\n"
 "Last-Translator: Munehiro Yamamoto <munepixyz at gmail.com>\n"
 "Language-Team: munepi <munepixyz at gmail.com>\n"
@@ -17,48 +17,48 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/plugin.cpp:347
+#: src/plugin.cpp:427
 #, c-format
 msgid "gecko mediaplayer v%s\n"
 msgstr "gecko mediaplayer v%s\n"
 
-#: src/plugin.cpp:622
+#: src/plugin.cpp:709
 #, c-format
 msgid "Cache fill: %2.2f%%"
 msgstr "キャッシュ中: %2.2f%%"
 
-#: src/plugin.cpp:887
-#, fuzzy, c-format
+#: src/plugin.cpp:924
+#, fuzzy
 msgid "Write unable to write because item is NULL\n"
 msgstr "オブジェクトが NULL なので書き込むことができません"
 
-#: src/plugin.cpp:956 src/plugin.cpp:1371
+#: src/plugin.cpp:990 src/plugin.cpp:1407
 #, fuzzy, c-format
 msgid "Caching %iK (%0.1f K/s)"
 msgstr "キャッシュ中: %2.2f%% (%0.1f K/s)"
 
-#: src/plugin.cpp:959 src/plugin.cpp:1374
+#: src/plugin.cpp:993 src/plugin.cpp:1410
 #, c-format
 msgid "Cache fill: %2.2f%% (%0.1f K/s)"
 msgstr "キャッシュ中: %2.2f%% (%0.1f K/s)"
 
-#: src/plugin.cpp:2647
+#: src/plugin.cpp:2618
 msgid "Playing"
 msgstr "再生"
 
-#: src/plugin.cpp:2650
+#: src/plugin.cpp:2621
 msgid "Paused"
 msgstr "一時停止"
 
-#: src/plugin.cpp:2653
+#: src/plugin.cpp:2624
 msgid "Stopped"
 msgstr "停止"
 
-#: src/plugin.cpp:2657
+#: src/plugin.cpp:2628
 #, c-format
 msgid "Buffering %2.1lf%%"
 msgstr "バッファ中 %2.1lf%%"
 
-#: src/plugin.cpp:2662
+#: src/plugin.cpp:2633
 msgid "Unknown Status"
 msgstr "不明なステータス"
diff --git a/po/nl.gmo b/po/nl.gmo
index 691331d..c876890 100644
Binary files a/po/nl.gmo and b/po/nl.gmo differ
diff --git a/po/nl.po b/po/nl.po
index 7201f26..2665550 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gecko-mediaplayer\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-21 21:31-0600\n"
+"POT-Creation-Date: 2012-10-08 07:19-0600\n"
 "PO-Revision-Date: 2011-07-22 13:53+0200\n"
 "Last-Translator: Mark Huijgen <mark.sf.net at huijgen.tk>\n"
 "Language-Team: Mark Huijgen <mark.sf.net at huijgen.tk>\n"
@@ -17,48 +17,47 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/plugin.cpp:347
+#: src/plugin.cpp:427
 #, c-format
 msgid "gecko mediaplayer v%s\n"
 msgstr ""
 
-#: src/plugin.cpp:622
+#: src/plugin.cpp:709
 #, c-format
 msgid "Cache fill: %2.2f%%"
 msgstr "Buffer niveau: %2.2f%%"
 
-#: src/plugin.cpp:887
-#, c-format
+#: src/plugin.cpp:924
 msgid "Write unable to write because item is NULL\n"
 msgstr "Schrijven niet mogelijk omdat item NULL is\n"
 
-#: src/plugin.cpp:956 src/plugin.cpp:1371
+#: src/plugin.cpp:990 src/plugin.cpp:1407
 #, c-format
 msgid "Caching %iK (%0.1f K/s)"
 msgstr "Bufferen %iK (%0.1f K/s)"
 
-#: src/plugin.cpp:959 src/plugin.cpp:1374
+#: src/plugin.cpp:993 src/plugin.cpp:1410
 #, c-format
 msgid "Cache fill: %2.2f%% (%0.1f K/s)"
 msgstr "Buffer niveau: %2.2f%% (%0.1f K/s)"
 
-#: src/plugin.cpp:2647
+#: src/plugin.cpp:2618
 msgid "Playing"
 msgstr "Afspelen"
 
-#: src/plugin.cpp:2650
+#: src/plugin.cpp:2621
 msgid "Paused"
 msgstr "Gepauzeerd"
 
-#: src/plugin.cpp:2653
+#: src/plugin.cpp:2624
 msgid "Stopped"
 msgstr "Gestopt"
 
-#: src/plugin.cpp:2657
+#: src/plugin.cpp:2628
 #, c-format
 msgid "Buffering %2.1lf%%"
 msgstr "Bufferen %2.1lf%%"
 
-#: src/plugin.cpp:2662
+#: src/plugin.cpp:2633
 msgid "Unknown Status"
 msgstr "Onbekende status"
diff --git a/po/pl.gmo b/po/pl.gmo
index 7c76efb..5e0c3f1 100644
Binary files a/po/pl.gmo and b/po/pl.gmo differ
diff --git a/po/pl.po b/po/pl.po
index dc2bfe4..be674c2 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gecko-mediaplayer 0.5.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-21 21:31-0600\n"
+"POT-Creation-Date: 2012-10-08 07:19-0600\n"
 "PO-Revision-Date: 2011-06-15 21:50+0200\n"
 "Last-Translator: Julian Sikorski <belegdol at gmail.com>\n"
 "Language-Team: Polish <gnomepl at pandora.info.bielsko.pl>\n"
@@ -21,48 +21,47 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2);\n"
 
-#: src/plugin.cpp:347
+#: src/plugin.cpp:427
 #, c-format
 msgid "gecko mediaplayer v%s\n"
 msgstr "gecko mediaplayer w%s\n"
 
-#: src/plugin.cpp:622
+#: src/plugin.cpp:709
 #, c-format
 msgid "Cache fill: %2.2f%%"
 msgstr "Zapełnienie bufora: %2.2f%%"
 
-#: src/plugin.cpp:887
-#, c-format
+#: src/plugin.cpp:924
 msgid "Write unable to write because item is NULL\n"
 msgstr "Zapis niemożliwy ponieważ element jest NULL\n"
 
-#: src/plugin.cpp:956 src/plugin.cpp:1371
+#: src/plugin.cpp:990 src/plugin.cpp:1407
 #, c-format
 msgid "Caching %iK (%0.1f K/s)"
 msgstr "Buforowanie: %iK (%0.1f K/s)"
 
-#: src/plugin.cpp:959 src/plugin.cpp:1374
+#: src/plugin.cpp:993 src/plugin.cpp:1410
 #, c-format
 msgid "Cache fill: %2.2f%% (%0.1f K/s)"
 msgstr "Zapełnienie bufora: %2.2f%% (%0.1f K/s)"
 
-#: src/plugin.cpp:2647
+#: src/plugin.cpp:2618
 msgid "Playing"
 msgstr "Odtwarzanie "
 
-#: src/plugin.cpp:2650
+#: src/plugin.cpp:2621
 msgid "Paused"
 msgstr "Wstrzymano"
 
-#: src/plugin.cpp:2653
+#: src/plugin.cpp:2624
 msgid "Stopped"
 msgstr "Zatrzymano"
 
-#: src/plugin.cpp:2657
+#: src/plugin.cpp:2628
 #, c-format
 msgid "Buffering %2.1lf%%"
 msgstr "Buforowanie %2.1lf%%"
 
-#: src/plugin.cpp:2662
+#: src/plugin.cpp:2633
 msgid "Unknown Status"
 msgstr "Stan nieznany"
diff --git a/po/pt.gmo b/po/pt.gmo
index 1affb52..1ad5104 100644
Binary files a/po/pt.gmo and b/po/pt.gmo differ
diff --git a/po/pt.po b/po/pt.po
index 6ec1802..b1052ed 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gecko-mediaplayer\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-21 21:31-0600\n"
+"POT-Creation-Date: 2012-10-08 07:19-0600\n"
 "PO-Revision-Date: 2012-04-05 10:56-0000\n"
 "Last-Translator: Sérgio Marques <smarquespt at gmail.com>\n"
 "Language-Team: \n"
@@ -17,48 +17,47 @@ msgstr ""
 "X-Poedit-Language: Potuguese\n"
 "X-Poedit-Country: Portugal\n"
 
-#: src/plugin.cpp:347
+#: src/plugin.cpp:427
 #, c-format
 msgid "gecko mediaplayer v%s\n"
 msgstr "gecko mediaplayer v%s\n"
 
-#: src/plugin.cpp:622
+#: src/plugin.cpp:709
 #, c-format
 msgid "Cache fill: %2.2f%%"
 msgstr "Preenchimento de cache: %2.2f%%"
 
-#: src/plugin.cpp:887
-#, c-format
+#: src/plugin.cpp:924
 msgid "Write unable to write because item is NULL\n"
 msgstr "Não é possível escrever pois o item é NULL\n"
 
-#: src/plugin.cpp:956 src/plugin.cpp:1371
+#: src/plugin.cpp:990 src/plugin.cpp:1407
 #, c-format
 msgid "Caching %iK (%0.1f K/s)"
 msgstr "A colocar em cache %iK (%0.1f K/s)"
 
-#: src/plugin.cpp:959 src/plugin.cpp:1374
+#: src/plugin.cpp:993 src/plugin.cpp:1410
 #, c-format
 msgid "Cache fill: %2.2f%% (%0.1f K/s)"
 msgstr "Preenchimento de cache: %2.2f%% (%0.1f K/s)"
 
-#: src/plugin.cpp:2647
+#: src/plugin.cpp:2618
 msgid "Playing"
 msgstr "A reproduzir"
 
-#: src/plugin.cpp:2650
+#: src/plugin.cpp:2621
 msgid "Paused"
 msgstr "Em pausa"
 
-#: src/plugin.cpp:2653
+#: src/plugin.cpp:2624
 msgid "Stopped"
 msgstr "Parado"
 
-#: src/plugin.cpp:2657
+#: src/plugin.cpp:2628
 #, c-format
 msgid "Buffering %2.1lf%%"
 msgstr "A processar %2.1lf%%"
 
-#: src/plugin.cpp:2662
+#: src/plugin.cpp:2633
 msgid "Unknown Status"
 msgstr "Estado desconhecido"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 9d2116d..87aea27 100644
Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index e2f7e95..861e8c7 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gecko-mediaplayer 0.9.4\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-21 21:31-0600\n"
+"POT-Creation-Date: 2012-10-08 07:19-0600\n"
 "PO-Revision-Date: 2008-05-31 12:46-0300\n"
 "Last-Translator: \n"
 "Language-Team: Portugese <LL at li.org>\n"
@@ -16,48 +16,48 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/plugin.cpp:347
+#: src/plugin.cpp:427
 #, c-format
 msgid "gecko mediaplayer v%s\n"
 msgstr ""
 
-#: src/plugin.cpp:622
+#: src/plugin.cpp:709
 #, c-format
 msgid "Cache fill: %2.2f%%"
 msgstr "Armazenando cache: %2.2f%%"
 
-#: src/plugin.cpp:887
-#, fuzzy, c-format
+#: src/plugin.cpp:924
+#, fuzzy
 msgid "Write unable to write because item is NULL\n"
 msgstr "Não foi possível escrever porque o item é inválido (NULL)"
 
-#: src/plugin.cpp:956 src/plugin.cpp:1371
+#: src/plugin.cpp:990 src/plugin.cpp:1407
 #, fuzzy, c-format
 msgid "Caching %iK (%0.1f K/s)"
 msgstr "Armazenando cache: %2.2f%% (%0.1f K/s)"
 
-#: src/plugin.cpp:959 src/plugin.cpp:1374
+#: src/plugin.cpp:993 src/plugin.cpp:1410
 #, c-format
 msgid "Cache fill: %2.2f%% (%0.1f K/s)"
 msgstr "Armazenando cache: %2.2f%% (%0.1f K/s)"
 
-#: src/plugin.cpp:2647
+#: src/plugin.cpp:2618
 msgid "Playing"
 msgstr ""
 
-#: src/plugin.cpp:2650
+#: src/plugin.cpp:2621
 msgid "Paused"
 msgstr ""
 
-#: src/plugin.cpp:2653
+#: src/plugin.cpp:2624
 msgid "Stopped"
 msgstr ""
 
-#: src/plugin.cpp:2657
+#: src/plugin.cpp:2628
 #, c-format
 msgid "Buffering %2.1lf%%"
 msgstr ""
 
-#: src/plugin.cpp:2662
+#: src/plugin.cpp:2633
 msgid "Unknown Status"
 msgstr ""
diff --git a/po/tr.gmo b/po/tr.gmo
index 8171e61..d0d3ca1 100644
Binary files a/po/tr.gmo and b/po/tr.gmo differ
diff --git a/po/tr.po b/po/tr.po
index 441f5b9..d9468b7 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-21 21:31-0600\n"
+"POT-Creation-Date: 2012-10-08 07:19-0600\n"
 "PO-Revision-Date: 2011-06-13 14:09+0300\n"
 "Last-Translator: Onur Küçük <onur at pardus.org.tr>\n"
 "Language-Team: Turkish <turkce at pardus.org.tr>\n"
@@ -18,48 +18,47 @@ msgstr ""
 "X-Generator: Lokalize 1.0\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: src/plugin.cpp:347
+#: src/plugin.cpp:427
 #, c-format
 msgid "gecko mediaplayer v%s\n"
 msgstr "gecko mediaplayer %s\n"
 
-#: src/plugin.cpp:622
+#: src/plugin.cpp:709
 #, c-format
 msgid "Cache fill: %2.2f%%"
 msgstr "Önbellek: %2.2f%%"
 
-#: src/plugin.cpp:887
-#, c-format
+#: src/plugin.cpp:924
 msgid "Write unable to write because item is NULL\n"
 msgstr "NULL içerik yazılamıyor\n"
 
-#: src/plugin.cpp:956 src/plugin.cpp:1371
+#: src/plugin.cpp:990 src/plugin.cpp:1407
 #, c-format
 msgid "Caching %iK (%0.1f K/s)"
 msgstr "Önbellek %iK (%0.1f K/s)"
 
-#: src/plugin.cpp:959 src/plugin.cpp:1374
+#: src/plugin.cpp:993 src/plugin.cpp:1410
 #, c-format
 msgid "Cache fill: %2.2f%% (%0.1f K/s)"
 msgstr "Önbellek: %2.2f%% (%0.1f K/s)"
 
-#: src/plugin.cpp:2647
+#: src/plugin.cpp:2618
 msgid "Playing"
 msgstr "Oynatılıyor"
 
-#: src/plugin.cpp:2650
+#: src/plugin.cpp:2621
 msgid "Paused"
 msgstr "Durakladı"
 
-#: src/plugin.cpp:2653
+#: src/plugin.cpp:2624
 msgid "Stopped"
 msgstr "Durdu"
 
-#: src/plugin.cpp:2657
+#: src/plugin.cpp:2628
 #, c-format
 msgid "Buffering %2.1lf%%"
 msgstr "Önbellek %2.1lf%%"
 
-#: src/plugin.cpp:2662
+#: src/plugin.cpp:2633
 msgid "Unknown Status"
 msgstr "Bilinmeyen Durum"
diff --git a/src/Makefile.in b/src/Makefile.in
index 30d79a8..017563f 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,6 +16,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -104,30 +121,30 @@ am__depfiles_maybe = depfiles
 am__mv = mv -f
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_$(V))
-am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
 am__v_CXX_0 = @echo "  CXX   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
 am__v_at_0 = @
 CXXLD = $(CXX)
 CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
 	-o $@
-AM_V_CXXLD = $(am__v_CXXLD_$(V))
-am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
 am__v_CXXLD_0 = @echo "  CXXLD " $@;
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
 am__v_CC_0 = @echo "  CC    " $@;
 CCLD = $(CC)
 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
 SOURCES = $(gecko_mediaplayer_dvx_so_SOURCES) \
 	$(gecko_mediaplayer_qt_so_SOURCES) \
@@ -146,6 +163,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
 AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
@@ -422,8 +444,11 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 install-install_libexecPROGRAMS: $(install_libexec_PROGRAMS)
 	@$(NORMAL_INSTALL)
-	test -z "$(install_libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(install_libexecdir)"
 	@list='$(install_libexec_PROGRAMS)'; test -n "$(install_libexecdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(install_libexecdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(install_libexecdir)" || exit 1; \
+	fi; \
 	for p in $$list; do echo "$$p $$p"; done | \
 	sed 's/$(EXEEXT)$$//' | \
 	while read p p1; do if test -f $$p; \
@@ -457,19 +482,19 @@ uninstall-install_libexecPROGRAMS:
 
 clean-install_libexecPROGRAMS:
 	-test -z "$(install_libexec_PROGRAMS)" || rm -f $(install_libexec_PROGRAMS)
-gecko-mediaplayer-dvx.so$(EXEEXT): $(gecko_mediaplayer_dvx_so_OBJECTS) $(gecko_mediaplayer_dvx_so_DEPENDENCIES) 
+gecko-mediaplayer-dvx.so$(EXEEXT): $(gecko_mediaplayer_dvx_so_OBJECTS) $(gecko_mediaplayer_dvx_so_DEPENDENCIES) $(EXTRA_gecko_mediaplayer_dvx_so_DEPENDENCIES) 
 	@rm -f gecko-mediaplayer-dvx.so$(EXEEXT)
 	$(AM_V_CXXLD)$(gecko_mediaplayer_dvx_so_LINK) $(gecko_mediaplayer_dvx_so_OBJECTS) $(gecko_mediaplayer_dvx_so_LDADD) $(LIBS)
-gecko-mediaplayer-qt.so$(EXEEXT): $(gecko_mediaplayer_qt_so_OBJECTS) $(gecko_mediaplayer_qt_so_DEPENDENCIES) 
+gecko-mediaplayer-qt.so$(EXEEXT): $(gecko_mediaplayer_qt_so_OBJECTS) $(gecko_mediaplayer_qt_so_DEPENDENCIES) $(EXTRA_gecko_mediaplayer_qt_so_DEPENDENCIES) 
 	@rm -f gecko-mediaplayer-qt.so$(EXEEXT)
 	$(AM_V_CXXLD)$(gecko_mediaplayer_qt_so_LINK) $(gecko_mediaplayer_qt_so_OBJECTS) $(gecko_mediaplayer_qt_so_LDADD) $(LIBS)
-gecko-mediaplayer-rm.so$(EXEEXT): $(gecko_mediaplayer_rm_so_OBJECTS) $(gecko_mediaplayer_rm_so_DEPENDENCIES) 
+gecko-mediaplayer-rm.so$(EXEEXT): $(gecko_mediaplayer_rm_so_OBJECTS) $(gecko_mediaplayer_rm_so_DEPENDENCIES) $(EXTRA_gecko_mediaplayer_rm_so_DEPENDENCIES) 
 	@rm -f gecko-mediaplayer-rm.so$(EXEEXT)
 	$(AM_V_CXXLD)$(gecko_mediaplayer_rm_so_LINK) $(gecko_mediaplayer_rm_so_OBJECTS) $(gecko_mediaplayer_rm_so_LDADD) $(LIBS)
-gecko-mediaplayer-wmp.so$(EXEEXT): $(gecko_mediaplayer_wmp_so_OBJECTS) $(gecko_mediaplayer_wmp_so_DEPENDENCIES) 
+gecko-mediaplayer-wmp.so$(EXEEXT): $(gecko_mediaplayer_wmp_so_OBJECTS) $(gecko_mediaplayer_wmp_so_DEPENDENCIES) $(EXTRA_gecko_mediaplayer_wmp_so_DEPENDENCIES) 
 	@rm -f gecko-mediaplayer-wmp.so$(EXEEXT)
 	$(AM_V_CXXLD)$(gecko_mediaplayer_wmp_so_LINK) $(gecko_mediaplayer_wmp_so_OBJECTS) $(gecko_mediaplayer_wmp_so_LDADD) $(LIBS)
-gecko-mediaplayer.so$(EXEEXT): $(gecko_mediaplayer_so_OBJECTS) $(gecko_mediaplayer_so_DEPENDENCIES) 
+gecko-mediaplayer.so$(EXEEXT): $(gecko_mediaplayer_so_OBJECTS) $(gecko_mediaplayer_so_DEPENDENCIES) $(EXTRA_gecko_mediaplayer_so_DEPENDENCIES) 
 	@rm -f gecko-mediaplayer.so$(EXEEXT)
 	$(AM_V_CXXLD)$(gecko_mediaplayer_so_LINK) $(gecko_mediaplayer_so_OBJECTS) $(gecko_mediaplayer_so_LDADD) $(LIBS)
 
@@ -496,18 +521,16 @@ distclean-compile:
 .cpp.o:
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cpp.obj:
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -676,13 +699,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -720,10 +740,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/src/plugin.cpp b/src/plugin.cpp
index e8ad982..e03c38a 100644
--- a/src/plugin.cpp
+++ b/src/plugin.cpp
@@ -42,6 +42,7 @@
 #include "plugin_setup.h"
 #include "plugin_types.h"
 #include "plugin_dbus.h"
+
 #ifdef HAVE_NSPR
 #include <nspr/nspr.h>
 #else
@@ -50,6 +51,7 @@
 #include <nsIServiceManager.h>
 #include <nsISupportsPrimitives.h>
 #endif
+
 #include <dlfcn.h>
 
 static NPObject *sWindowObj;
@@ -182,6 +184,84 @@ void postPlayStateChange(NPP mInstance, const gint state)
     g_free(jscript);
 }
 
+const gchar *NPReasonToString(NPReason reason)
+{
+
+    switch (reason) {
+    case NPRES_DONE:
+        return "Done";
+        break;
+    case NPRES_NETWORK_ERR:
+        return "Network Error";
+        break;
+    case NPRES_USER_BREAK:
+        return "User Break";
+        break;
+    default:
+        return "Unknown Reason";
+    }
+
+}
+
+
+const gchar *NPErrorToString(NPError error)
+{
+
+    switch (error) {
+    case NPERR_NO_ERROR:
+        return "No Error";
+        break;
+    case NPERR_GENERIC_ERROR:
+        return "Generic Error";
+        break;
+    case NPERR_INVALID_INSTANCE_ERROR:
+        return "Invalid Instance Error";
+        break;
+    case NPERR_INVALID_FUNCTABLE_ERROR:
+        return "Invalid Functable Error";
+        break;
+    case NPERR_MODULE_LOAD_FAILED_ERROR:
+        return "Module Load Failed Error";
+        break;
+    case NPERR_OUT_OF_MEMORY_ERROR:
+        return "Out Of Memory Error";
+        break;
+    case NPERR_INVALID_PLUGIN_ERROR:
+        return "Invalid Plugin Error";
+        break;
+    case NPERR_INVALID_PLUGIN_DIR_ERROR:
+        return "Invalid Plugin Dir Error";
+        break;
+    case NPERR_INCOMPATIBLE_VERSION_ERROR:
+        return "Incompatible Version Error";
+        break;
+    case NPERR_INVALID_PARAM:
+        return "Invalid Param";
+        break;
+    case NPERR_INVALID_URL:
+        return "Invalid URL";
+        break;
+    case NPERR_FILE_NOT_FOUND:
+        return "File Not Found";
+        break;
+    case NPERR_NO_DATA:
+        return "No Data";
+        break;
+    case NPERR_STREAM_NOT_SEEKABLE:
+        return "Stream Not Seekable";
+        break;
+    case NPERR_TIME_RANGE_NOT_SUPPORTED:
+        return "Time Range Not Supported";
+        break;
+    case NPERR_MALFORMED_SITE:
+        return "Malformed Site";
+        break;
+    default:
+        return "Unknown NPError Code";
+        break;
+    }
+}
+
 ////////////////////////////////////////
 //
 // CPlugin class implementation
@@ -350,9 +430,14 @@ tv_driver(NULL), tv_device(NULL), tv_input(NULL), tv_width(0), tv_height(0)
     store = gm_pref_store_new("gecko-mediaplayer");
     if (store != NULL) {
         debug_level = gm_pref_store_get_int(store, DEBUG_LEVEL);
+        gm_log(debug_level, G_LOG_LEVEL_INFO, "debug_level = %i", debug_level);
         player_backend = gm_pref_store_get_string(store, PLAYER_BACKEND);
-        printf("Using player backend of '%s'\n", player_backend);
+        gm_log(debug_level, G_LOG_LEVEL_INFO, "Using player backend of '%s'\n",
+               (player_backend == NULL || strlen(player_backend) == 0 ) ? "gnome-mplayer" : player_backend);
         gm_pref_store_free(store);
+    } else {
+        gm_log(TRUE, G_LOG_LEVEL_INFO, "Unable to find preference store, setting debug_level to 1");
+        debug_level = 1;
     }
 
 
@@ -509,7 +594,8 @@ NPError CPlugin::SetWindow(NPWindow * aWindow)
         if (ok) {
             player_launched = TRUE;
         } else {
-            printf("Unable to launch %s: %s\n", app_name, error->message);
+            gm_log(debug_level, G_LOG_LEVEL_INFO, "Unable to launch %s: %s\n", app_name,
+                   error->message);
             g_error_free(error);
             error = NULL;
         }
@@ -529,12 +615,14 @@ NPError CPlugin::SetWindow(NPWindow * aWindow)
         if (item && !item->requested) {
             item->cancelled = FALSE;
             if (item->streaming) {
-                printf("Calling open_location with item = %p src = %s\n", item, item->src);
+                gm_log(debug_level, G_LOG_LEVEL_INFO,
+                       "Calling open_location with item = %p src = %s\n", item, item->src);
                 open_location(this, item, FALSE);
                 item->requested = 1;
             } else {
                 item->requested = 1;
-                printf("Calling GetURLNotify with item = %p src = %s\n", item, item->src);
+                gm_log(debug_level, G_LOG_LEVEL_INFO,
+                       "Calling GetURLNotify with item = %p src = %s\n", item, item->src);
                 this->GetURLNotify(mInstance, item->src, NULL, item);
             }
         }
@@ -583,11 +671,11 @@ NPBool CPlugin::isInitialized()
 NPError CPlugin::NewStream(NPMIMEType type, NPStream * stream, NPBool seekable, uint16 * stype)
 {
     if (g_strrstr(stream->url, "javascript") == NULL) {
-        printf("New Stream Requested - %s\n", stream->url);
+        gm_log(debug_level, G_LOG_LEVEL_DEBUG, "New Stream Requested - %s\n", stream->url);
     }
 
     if (g_strrstr(stream->url, "javascript") == NULL && stream->notifyData == NULL) {
-        printf("item is NULL for %s\n", stream->url);
+        gm_log(debug_level, G_LOG_LEVEL_DEBUG, "item is NULL for %s\n", stream->url);
     }
 
     return NPERR_NO_ERROR;
@@ -596,21 +684,20 @@ NPError CPlugin::NewStream(NPMIMEType type, NPStream * stream, NPBool seekable,
 NPError CPlugin::DestroyStream(NPStream * stream, NPError reason)
 {
     ListItem *item;
-    gint id;
-    gchar *path;
+    ListItem *fetch_item;
     gchar *text;
-    gboolean ready;
-    gboolean newwindow;
+    gboolean fetch_next = TRUE;
 
     if (g_strrstr(stream->url, "javascript") == NULL)
-        printf("Entering destroy stream reason = %i for %s\n", reason, stream->url);
+        gm_log(debug_level, G_LOG_LEVEL_MESSAGE, "Entering destroy stream reason = %i - %s for %s",
+               reason, NPErrorToString(reason), stream->url);
 
     if (reason == NPERR_NO_ERROR) {
         item = (ListItem *) stream->notifyData;
         // item = list_find(playlist, (gchar*)stream->url);
 
         if (item == NULL) {
-            printf("Leaving destroy stream - item not found\n");
+            gm_log(debug_level, G_LOG_LEVEL_DEBUG, "Leaving destroy stream - item not found");
             return NPERR_NO_ERROR;
         }
 
@@ -624,73 +711,83 @@ NPError CPlugin::DestroyStream(NPStream * stream, NPError reason)
             g_free(text);
         }
 
+
         if (!item->opened && item->play) {
-            id = item->controlid;
-            path = g_strdup(item->path);
-            ready = item->playerready;
-            newwindow = item->newwindow;
+            gm_log(debug_level, G_LOG_LEVEL_MESSAGE, "item '%s' is not opened and is playable",
+                   item->src);
             if (!item->streaming)
                 item->streaming = streaming(item->src);
             if (!item->streaming) {
-                printf("in Destroy Stream\n");
-                playlist = list_parse_qt(playlist, item);
-                playlist = list_parse_qt2(playlist, item);
-                playlist = list_parse_asx(playlist, item);
-                playlist = list_parse_qml(playlist, item);
-                playlist = list_parse_ram(playlist, item);
+                gm_log(debug_level, G_LOG_LEVEL_DEBUG, "in Destroy Stream");
+                playlist = list_parse_qt(playlist, item, FALSE);
+                playlist = list_parse_qt2(playlist, item, FALSE);
+                playlist = list_parse_asx(playlist, item, FALSE);
+                playlist = list_parse_qml(playlist, item, FALSE);
+                playlist = list_parse_ram(playlist, item, FALSE);
             }
-            // printf("item->play = %i\n",item->play);
-            // printf("item->src = %s\n", item->src);
-            // printf("item->streaming = %i\n", item->streaming);
-            // printf("calling open_location from DestroyStream\n");
-            if (item->play) {
-                item->requested = TRUE;
-                open_location(this, item, TRUE);
-                if (post_dom_events && this->id != NULL) {
-                    postDOMEvent(mInstance, this->id, "qt_play");
+
+            if (item->playlist == FALSE) {
+                if (item != NULL && item->queuedtoplay == FALSE) {
+                    if (!list_item_opened(playlist)) {
+                        item = list_find_first_playable(playlist);
+                    }
+                }
+                if (item != NULL) {
+                    if (item->play == TRUE && item->opened == FALSE) {
+
+                        open_location(this, item, TRUE);
+                        if (post_dom_events && this->id != NULL) {
+                            postDOMEvent(mInstance, this->id, "qt_play");
+                        }
+                    }
                 }
             } else {
-                item = list_find_next_playable(playlist);
+                item = list_find_first_playable(playlist);
                 if (item != NULL) {
-                    // printf("item->play = %i\n",item->play);
-                    // printf("item->src = %s\n", item->src);
-                    // printf("item->streaming = %i\n", item->streaming);
                     if (!item->streaming) {
-                        item->controlid = id;
-                        g_strlcpy(item->path, path, 1024);
-                        item->playerready = ready;
-                        item->newwindow = newwindow;
-                        item->cancelled = FALSE;
-                        item->requested = TRUE;
-                        if (item != NULL)
+                        if (item->requested == FALSE) {
+                            gm_log(debug_level, G_LOG_LEVEL_INFO, "Getting URL '%s'", item->src);
+                            item->requested = TRUE;
                             this->GetURLNotify(mInstance, item->src, NULL, item);
-                    } else {
-                        open_location(this, item, FALSE);
-                        item->requested = TRUE;
-                        if (post_dom_events && this->id != NULL) {
-                            postDOMEvent(mInstance, this->id, "qt_play");
+                            fetch_next = FALSE;
                         }
+                    } else {
+                        if (!list_item_opened(playlist))
+                            open_location(this, item, FALSE);
+                    }
+                }
+            }
+
+            // fetch the next item on the playlist
+            if (fetch_next) {
+                fetch_item = list_find_next_playable_after_listitem(playlist, item);
+                if (fetch_item != NULL) {
+                    if (!fetch_item->streaming) {
+                        gm_log(debug_level, G_LOG_LEVEL_INFO, "Prefetching URL '%s'", fetch_item->src);
+                        fetch_item->requested = TRUE;
+                        this->GetURLNotify(mInstance, fetch_item->src, NULL, fetch_item);
                     }
                 }
             }
-            g_free(path);
         }
-        //printf("Leaving destroy stream src = %s\n", item->src);
 
     } else if (reason == NPERR_INVALID_URL) {
         item = (ListItem *) stream->notifyData;
         if (item) {
-            printf("Destroy Stream, invalid url, item is %s\n", item->src);
+            gm_log(debug_level, G_LOG_LEVEL_INFO, "Destroy Stream, invalid url, item is %s\n",
+                   item->src);
         } else {
             if (g_strrstr(stream->url, "javascript") == NULL) {
-                printf("Destroy Stream, network error, item is NULL\n");
+                gm_log(debug_level, G_LOG_LEVEL_INFO,
+                       "Destroy Stream, network error, item is NULL\n");
             }
         }
     } else {
         item = (ListItem *) stream->notifyData;
         // item = list_find(playlist, (gchar*)stream->url);
         if (g_strrstr(stream->url, "javascript") == NULL)
-            printf("Exiting destroy stream reason = %i for %s\n", reason, stream->url);
+            gm_log(debug_level, G_LOG_LEVEL_DEBUG, "Exiting destroy stream reason = %i for %s\n",
+                   reason, stream->url);
         if (item == NULL) {
             return NPERR_NO_ERROR;
         } else {
@@ -707,71 +804,26 @@ NPError CPlugin::DestroyStream(NPStream * stream, NPError reason)
         }
     }
 
-    // list_dump(playlist);
+    gm_log(debug_level, G_LOG_LEVEL_INFO,
+           "Leaving DestroyStream for %s and the playlist looks like this", stream->url);
+    list_dump(playlist);
     return NPERR_NO_ERROR;
 }
 
 void CPlugin::URLNotify(const char *url, NPReason reason, void *notifyData)
 {
     ListItem *item = (ListItem *) notifyData;
-    //DBusMessage *message;
-    //const char *file;
 
-    printf("URL Notify url = '%s'\nreason = %i\n%s\n%s\n%s\n", url, reason, item->src, item->local,
-           path);
+    gm_log(debug_level, G_LOG_LEVEL_MESSAGE, "URL Notify url = '%s'\nreason = %i - %s\n%s\n%s\n%s",
+           url, reason, NPReasonToString(reason), item->src, item->local, path);
     if (reason == NPRES_DONE) {
-
-        if (!item->opened) {
-            // open_location(this,item, TRUE);
-
-            /*
-               file = g_strdup(item->local);
-               while (!playerready) {
-               // printf("waiting for player\n");
-               g_main_context_iteration(NULL,FALSE);   
-               }
-               message = dbus_message_new_signal(path,"com.gnome.mplayer","Open");
-               dbus_message_append_args(message, DBUS_TYPE_STRING, &file, DBUS_TYPE_INVALID);
-               dbus_connection_send(connection,message,NULL);
-               dbus_message_unref(message);
-             */
-        }
-
-        if (item) {
-            item->played = TRUE;
-            if (!item->streaming) {
-                item = list_find_next_playable(playlist);
-                if (item) {
-                    if (item->retrieved || item->streaming) {
-                        open_location(this, item, TRUE);
-                        item->requested = TRUE;
-                    } else {
-                        this->GetURLNotify(mInstance, item->src, NULL, item);
-                        item->requested = TRUE;
-                    }
-                }
-            }
-        } else {
-            item = list_find_next_playable(playlist);
-            if (item) {
-                if (item->retrieved || item->streaming) {
-                    open_location(this, item, TRUE);
-                    item->requested = TRUE;
-                } else {
-                    this->GetURLNotify(mInstance, item->src, NULL, item);
-                    item->requested = TRUE;
-                }
-            }
-        }
-
-
-
+        // done
     } else if (reason == NPRES_NETWORK_ERR) {
-        printf("URL Notify result is Network Error\n");
+        // error
     } else if (reason == NPRES_USER_BREAK) {
-        printf("URL Notify result is User Break\n");
+        // user cancelled
     } else {
-        printf("%i is an invalid reason code in URLNotify\n", reason);
+        // something else
     }
 }
 
@@ -783,7 +835,7 @@ int32 CPlugin::WriteReady(NPStream * stream)
 
     // printf("WriteReady called\n");
     if (!acceptdata) {
-        printf("Not accepting data\n");
+        gm_log(debug_level, G_LOG_LEVEL_INFO, "Not accepting data\n");
         NPN_DestroyStream(mInstance, stream, NPERR_GENERIC_ERROR);
         return -1;
     }
@@ -794,20 +846,9 @@ int32 CPlugin::WriteReady(NPStream * stream)
     if (item == NULL) {
 
         if (mode == NP_FULL) {
-            // printf("adding new item %s\n",stream->url);
-            /*
-               item = g_new0(ListItem, 1);
-               g_strlcpy(item->src, stream->url, 1024);
-               item->requested = TRUE;
-               item->play = TRUE;
-               if (!item->streaming)
-               item->streaming = streaming(item->src);
-               playlist = g_list_append(playlist, item);
-               stream->notifyData = item;
-             */
             return -1;
         } else {
-            printf("item is null\nstream url %s\n", stream->url);
+            gm_log(debug_level, G_LOG_LEVEL_INFO, "item is null\nstream url %s\n", stream->url);
             NPN_DestroyStream(mInstance, stream, NPERR_NO_ERROR);
             return -1;
         }
@@ -820,7 +861,7 @@ int32 CPlugin::WriteReady(NPStream * stream)
     // printf("Write Ready item url = %s\n%s\n",item->src,stream->url);
 
     if (item->cancelled) {
-        printf("cancelling WriteReady\n");
+        gm_log(debug_level, G_LOG_LEVEL_INFO, "cancelling WriteReady\n");
         NPN_DestroyStream(mInstance, stream, NPERR_NO_ERROR);
         return -1;
     }
@@ -852,7 +893,7 @@ int32 CPlugin::WriteReady(NPStream * stream)
     }
 
     if (item->retrieved) {
-        printf("Duplicate request, item already retrieved\n");
+        gm_log(debug_level, G_LOG_LEVEL_INFO, "Duplicate request, item already retrieved\n");
         NPN_DestroyStream(mInstance, stream, NPERR_NO_ERROR);
         return -1;
     }
@@ -867,15 +908,11 @@ int32 CPlugin::Write(NPStream * stream, int32 offset, int32 len, void *buffer)
     gchar *text;
     gdouble percent = 0.0;
     gdouble rate = 0.0;
-    gint id;
-    gchar *path;
-    gboolean ready;
-    gboolean newwindow;
-    gboolean ok_to_play = FALSE;
+    gchar *upper = NULL;
 
-    // printf("Write Called\n");
+    gm_log(debug_level, G_LOG_LEVEL_DEBUG, "Write Called\n");
     if (!acceptdata) {
-        printf("not accepting data\n");
+        gm_log(debug_level, G_LOG_LEVEL_INFO, "not accepting data\n");
         NPN_DestroyStream(mInstance, stream, NPERR_NO_ERROR);
         return -1;
     }
@@ -883,30 +920,23 @@ int32 CPlugin::Write(NPStream * stream, int32 offset, int32 len, void *buffer)
     item = (ListItem *) stream->notifyData;
 
     if (item == NULL) {
-        printf("item is NULL\n");
-        printf(_("Write unable to write because item is NULL\n"));
+        gm_log(debug_level, G_LOG_LEVEL_DEBUG, "item is NULL\n");
+        gm_log(debug_level, G_LOG_LEVEL_INFO, _("Write unable to write because item is NULL\n"));
         NPN_DestroyStream(mInstance, stream, NPERR_GENERIC_ERROR);
         return -1;
     }
 
     if (item->cancelled || item->retrieved) {
-        printf("cancelled\n");
+        gm_log(debug_level, G_LOG_LEVEL_DEBUG, "cancelled\n");
         NPN_DestroyStream(mInstance, stream, NPERR_NO_ERROR);
         return -1;
     }
 
+    upper = g_ascii_strup((char *) buffer, len);
     if (strstr((char *) buffer, "ICY 200 OK") != NULL
         || strstr((char *) buffer, "Content-length:") != NULL
-        || strstr((char *) buffer, "<HTML>") != NULL || item->streaming == TRUE
+        || (upper != NULL && strstr(upper, "<HTML>") != NULL) || item->streaming == TRUE
         || strstr(item->src, "file://") != NULL) {
-        // If item is a block of jpeg images, just stream it
-        //   || stream->lastmodified == 0) {    this is not valid for many sites
-
-        // printf("BUFFER='%s'\n", buffer);
-
-        // printf("item->streaming = %i\n", item->streaming);
-        // printf("stream->lastmodified = %i\n", stream->lastmodified);
-        // printf("stream->end = %i\n", stream->end);
 
         item->streaming = TRUE;
         open_location(this, item, FALSE);
@@ -917,20 +947,24 @@ int32 CPlugin::Write(NPStream * stream, int32 offset, int32 len, void *buffer)
         if (item->localfp) {
             fclose(item->localfp);
         }
-        printf("Got IceCast Stream, let mplayer stream it\n");
+        gm_log(debug_level, G_LOG_LEVEL_INFO, "Got IceCast Stream, let mplayer stream it\n");
         NPN_DestroyStream(mInstance, stream, NPERR_NO_ERROR);
         return -1;
     }
+    if (upper != NULL) {
+        g_free(upper);
+        upper = NULL;
+    }
 
     if ((!item->localfp) && (!item->retrieved)) {
-        // printf("opening %s for localcache\n", item->local);
+        gm_log(debug_level, G_LOG_LEVEL_DEBUG, "opening %s for localcache\n", item->local);
         item->localfp = fopen(item->local, "w+");
     }
-    // printf("Write item url = %s\n",item->src);
+    gm_log(debug_level, G_LOG_LEVEL_DEBUG, "Write item url = %s\n", item->src);
 
     if (item->localfp == NULL) {
-        printf("Local cache file is not open, cannot write data\n");
-        NPN_DestroyStream(mInstance, stream, NPERR_NO_ERROR);
+        gm_log(debug_level, G_LOG_LEVEL_INFO, "Local cache file is not open, cannot write data\n");
+        NPN_DestroyStream(mInstance, stream, NPERR_GENERIC_ERROR);
         return -1;
     }
     fseek(item->localfp, offset, SEEK_SET);
@@ -974,16 +1008,17 @@ int32 CPlugin::Write(NPStream * stream, int32 offset, int32 len, void *buffer)
         }
         if (!item->opened) {
             if ((item->localsize >= (cache_size * 1024)) && (percent >= 0.2)) {
-                // printf("Setting to play because %i > %i\n", item->localsize, cache_size * 1024);
-                ok_to_play = TRUE;
+                gm_log(debug_level, G_LOG_LEVEL_DEBUG, "Setting to play because %i > %i\n",
+                       item->localsize, cache_size * 1024);
+                item->oktoplay = TRUE;
             }
-            if (ok_to_play == FALSE && (item->localsize > (cache_size * 2 * 1024))
+            if (item->oktoplay == FALSE && (item->localsize > (cache_size * 2 * 1024))
                 && (cache_size >= 512)) {
                 // printf("Setting to play because %i > %i (double cache)\n", item->localsize,
                 //        cache_size * 2 * 1024);
-                ok_to_play = TRUE;
+                item->oktoplay = TRUE;
             }
-            if (ok_to_play == FALSE) {
+            if (item->oktoplay == FALSE) {
                 if (item->bitrate == 0 && item->bitrate_requests < 5
                     && ((gint) (percent * 100) > item->bitrate_requests)) {
                     item->bitrate = request_bitrate(this, item, item->local);
@@ -993,7 +1028,7 @@ int32 CPlugin::Write(NPStream * stream, int32 offset, int32 len, void *buffer)
                     if (item->localsize / item->bitrate >= 10 && (percent >= 0.2)) {
                         // printf("Setting to play because %i >= 10\n",
                         //        item->localsize / item->bitrate);
-                        ok_to_play = TRUE;
+                        item->oktoplay = TRUE;
                         if (post_dom_events && this->id != NULL) {
                             postDOMEvent(mInstance, this->id, "qt_canplay");
                         }
@@ -1002,51 +1037,50 @@ int32 CPlugin::Write(NPStream * stream, int32 offset, int32 len, void *buffer)
             }
 
         }
-        // if not opened, over cache level and not an href target then try and open it
-        if ((!item->opened) && ok_to_play == TRUE) {
-            id = item->controlid;
-            path = g_strdup(item->path);
-            ready = item->playerready;
-            newwindow = item->newwindow;
+
+        // item->playlist may have been set on an earlier pass, so do not bother
+        // checking for playlist again, if it is true.
+        
+        if (!item->opened && item->play && item->oktoplay && !item->playlist) {
+            gm_log(debug_level, G_LOG_LEVEL_MESSAGE, "item '%s' is not opened and is playable",
+                   item->src);
             if (!item->streaming)
                 item->streaming = streaming(item->src);
             if (!item->streaming) {
-                playlist = list_parse_qt(playlist, item);
-                playlist = list_parse_asx(playlist, item);
-                playlist = list_parse_qml(playlist, item);
-                playlist = list_parse_ram(playlist, item);
+                gm_log(debug_level, G_LOG_LEVEL_DEBUG, "in Write");
+                // we want to detect a playlist, but not add any items to the actual playlist 
+                // if we find them
+                playlist = list_parse_qt(playlist, item, TRUE);
+                playlist = list_parse_qt2(playlist, item, TRUE);
+                playlist = list_parse_asx(playlist, item, TRUE);
+                playlist = list_parse_qml(playlist, item, TRUE);
+                playlist = list_parse_ram(playlist, item, TRUE);
             }
-            // printf("item->play = %i\n",item->play);
-            // printf("item->src = %i\n", item->src);
-            // printf("calling open_location from Write\n"); 
-            if (item->play) {
-                send_signal_with_integer(this, item, "SetGUIState", PLAYING);
-                open_location(this, item, TRUE);
-                item->requested = TRUE;
-                if (post_dom_events && this->id != NULL) {
-                    postDOMEvent(mInstance, this->id, "qt_loadedfirstframe");
-                    postDOMEvent(mInstance, this->id, "qt_canplay");
-                    postDOMEvent(mInstance, this->id, "qt_play");
-                }
-            } else {
-                item = list_find_next_playable(playlist);
-                if (item != NULL) {
-                    item->controlid = id;
-                    g_strlcpy(item->path, path, 1024);
-                    item->playerready = ready;
-                    item->newwindow = newwindow;
-                    item->cancelled = FALSE;
-                    // printf("opening next playable items on the playlist\n");
-                    if (item->streaming) {
-                        open_location(this, item, FALSE);
-                        item->requested = TRUE;
-                    } else {
-                        this->GetURLNotify(mInstance, item->src, NULL, item);
-                        item->requested = TRUE;
+
+            gm_log(debug_level, G_LOG_LEVEL_MESSAGE, "Write item (%s) playlist = %i", item->src, item->playlist);
+            
+            if (item->playlist == FALSE) {
+
+                // queuedtoplay is only true on a item when the player has requested the
+                // next item to play. So the rule is this
+                /*
+                    1. Automatically play only the first playable item on the playlist  
+                    2. Play queuedtoplay items when they are playable and not opened
+
+                */
+                if (item->queuedtoplay == FALSE) {
+                    if (!list_item_opened(playlist)) {
+                        item = list_find_first_playable(playlist);
+                    }
+                    if (item->play == TRUE && item->opened == FALSE) {
+
+                        open_location(this, item, TRUE);
+                        if (post_dom_events && this->id != NULL) {
+                            postDOMEvent(mInstance, this->id, "qt_play");
+                        }
                     }
                 }
             }
-            g_free(path);
         }
 
     }
@@ -1343,7 +1377,8 @@ int progress_callback(void *clientp, double dltotal, double dlnow, double ultota
         return 0;               // keeps downloading
 
     if (item->cancelled) {
-        printf("cancelling download at %f for %s\n", dlnow, item->src);
+        gm_log(plugin->debug_level, G_LOG_LEVEL_DEBUG, "cancelling download at %f for %s\n", dlnow,
+               item->src);
         return -1;              // cancels download
     }
     //printf("item ready = %i,player ready = %i,%f,%f,%f\n", item->playerready, plugin->playerready,
@@ -1360,7 +1395,8 @@ int progress_callback(void *clientp, double dltotal, double dlnow, double ultota
 
             percent = (gdouble) item->localsize / (gdouble) item->mediasize;
             if (difftime(time(NULL), plugin->lastupdate) > 0.5) {
-                printf("updating display id = %i\n", item->id);
+                gm_log(plugin->debug_level, G_LOG_LEVEL_INFO, "updating display id = %i\n",
+                       item->id);
                 send_signal_with_double(plugin, item, "SetCachePercent", percent);
                 rate =
                     (gdouble) ((item->localsize -
@@ -1390,96 +1426,6 @@ int progress_callback(void *clientp, double dltotal, double dlnow, double ultota
                 item->lastsize = item->localsize;
             }
         }
-        // Disable playing of partially cached apple.com files, mplayer seems to crash on these files
-        /*
-           if (!item->opened) {
-           if ((item->localsize >= (plugin->cache_size * 1024)) && (percent >= 0.2)) {
-           //printf("Setting to play because %i > %i\n", item->localsize,
-           //       plugin->cache_size * 1024);
-           ok_to_play = TRUE;
-           }
-           if (ok_to_play == FALSE && (item->localsize > (plugin->cache_size * 2 * 1024))
-           && (plugin->cache_size >= 512)) {
-           //printf("Setting to play because %i > %i (double cache)\n", item->localsize,
-           //       plugin->cache_size * 2 * 1024);
-           ok_to_play = TRUE;
-           }
-           if (ok_to_play == FALSE) {
-           if (item->bitrate == 0 && item->bitrate_requests < 5
-           && ((gint) (percent * 100) > item->bitrate_requests)) {
-           //item->bitrate = request_bitrate(plugin, item, item->local);
-           item->bitrate_requests++;
-           }
-           if (item->bitrate > 0) {
-           if (item->localsize / item->bitrate >= 10 && (percent >= 0.2)) {
-           printf("Setting to play becuase %i >= 10\n",
-           item->localsize / item->bitrate);
-           ok_to_play = TRUE;
-           if (plugin->post_dom_events && plugin->id != NULL) {
-           postDOMEvent(plugin->mInstance, plugin->id, "qt_canplay");
-           }
-           }
-           }
-           }
-
-           }
-         */
-
-        // try downloading entire file
-        ok_to_play = FALSE;
-
-        // if not opened, over cache level and not an href target then try and open it
-        if ((!item->opened) && ok_to_play == TRUE) {
-            id = item->controlid;
-            path = g_strdup(item->path);
-            ready = item->playerready;
-            newwindow = item->newwindow;
-            if (!item->streaming)
-                item->streaming = streaming(item->src);
-            if (!item->streaming) {
-                printf("in progress_callback\n");
-                plugin->playlist = list_parse_qt(plugin->playlist, item);
-                plugin->playlist = list_parse_qt2(plugin->playlist, item);
-                plugin->playlist = list_parse_asx(plugin->playlist, item);
-                plugin->playlist = list_parse_qml(plugin->playlist, item);
-                plugin->playlist = list_parse_ram(plugin->playlist, item);
-            }
-            printf("item->play = %i\n", item->play);
-            printf("item->src = %s\n", item->src);
-            printf("calling open_location from progress_callback\n");
-            if (item->play) {
-                send_signal_with_integer(plugin, item, "SetGUIState", PLAYING);
-                open_location(plugin, item, TRUE);
-                item->requested = TRUE;
-                if (plugin->post_dom_events && plugin->id != NULL) {
-                    postDOMEvent(plugin->mInstance, plugin->id, "qt_loadedfirstframe");
-                    postDOMEvent(plugin->mInstance, plugin->id, "qt_canplay");
-                    postDOMEvent(plugin->mInstance, plugin->id, "qt_play");
-                }
-            } else {
-                item = list_find_next_playable(plugin->playlist);
-                if (item != NULL) {
-                    item->controlid = id;
-                    g_strlcpy(item->path, path, 1024);
-                    item->playerready = ready;
-                    item->newwindow = newwindow;
-                    item->cancelled = FALSE;
-                    // printf("opening next playable items on the playlist\n");
-                    if (item->streaming) {
-                        open_location(plugin, item, FALSE);
-                        item->requested = TRUE;
-                    } else {
-                        if (!item->requested) {
-                            plugin->GetURLNotify(plugin->mInstance, item->src, NULL, item);
-                            item->requested = TRUE;
-                        }
-                    }
-                }
-            }
-            g_free(path);
-        }
-
-
     }
 
     return 0;
@@ -1488,13 +1434,10 @@ int progress_callback(void *clientp, double dltotal, double dlnow, double ultota
 gpointer CURLGetURLNotify(gpointer data)
 {
     ListItem *item = (ListItem *) data;
+    ListItem *fetch_item = NULL;
     CPlugin *plugin = (CPlugin *) item->plugin;
-    gchar *path;
     FILE *local;
     CURL *curl;
-    gint id;
-    gboolean ready;
-    gboolean newwindow;
 
     if (item) {
         local = fopen(item->local, "wb");
@@ -1511,66 +1454,77 @@ gpointer CURLGetURLNotify(gpointer data)
 
                 curl_easy_perform(curl);
                 curl_easy_cleanup(curl);
-                printf("item retrieved using CURL\n");
+                gm_log(plugin->debug_level, G_LOG_LEVEL_INFO, "item retrieved using CURL\n");
                 //plugin->URLNotify(item->src, NPRES_DONE, item);
 
             }
             fclose(local);
-            printf("fetched %s to %s opened = %i\n", item->src, item->local, item->opened);
+            gm_log(plugin->debug_level, G_LOG_LEVEL_DEBUG, "fetched %s to %s opened = %i\n",
+                   item->src, item->local, item->opened);
             send_signal_with_double(plugin, item, "SetCachePercent", 1.0);
             send_signal_with_double(plugin, item, "SetCachePercent", 0.0);
             item->retrieved = TRUE;
         }
 
-
         if (!item->opened) {
-            id = item->controlid;
-            path = g_strdup(item->path);
-            ready = item->playerready;
-            newwindow = item->newwindow;
             if (!item->streaming)
                 item->streaming = streaming(item->src);
             if (!item->streaming) {
-                printf("in CURLGetURLNotify\n");
-                plugin->playlist = list_parse_qt(plugin->playlist, item);
-                plugin->playlist = list_parse_qt2(plugin->playlist, item);
-                plugin->playlist = list_parse_asx(plugin->playlist, item);
-                plugin->playlist = list_parse_qml(plugin->playlist, item);
-                plugin->playlist = list_parse_ram(plugin->playlist, item);
+                gm_log(plugin->debug_level, G_LOG_LEVEL_DEBUG, "in CURLGetURLNotify\n");
+                plugin->playlist = list_parse_qt(plugin->playlist, item, FALSE);
+                plugin->playlist = list_parse_qt2(plugin->playlist, item, FALSE);
+                plugin->playlist = list_parse_asx(plugin->playlist, item, FALSE);
+                plugin->playlist = list_parse_qml(plugin->playlist, item, FALSE);
+                plugin->playlist = list_parse_ram(plugin->playlist, item, FALSE);
             }
             // printf("item->play = %i\n", item->play);
             // printf("item->src = %i\n", item->src);
             // printf("calling open_location from CURLGetURLNotify\n");
-            if (item->play) {
-                send_signal_with_integer(plugin, item, "SetGUIState", PLAYING);
-                open_location(plugin, item, TRUE);
-                item->requested = TRUE;
-                if (plugin->post_dom_events && plugin->id != NULL) {
-                    postDOMEvent(plugin->mInstance, plugin->id, "qt_loadedfirstframe");
-                    postDOMEvent(plugin->mInstance, plugin->id, "qt_canplay");
-                    postDOMEvent(plugin->mInstance, plugin->id, "qt_play");
+
+            if (item->playlist == FALSE) {
+                if (item != NULL && item->queuedtoplay == FALSE) {
+                    if (!list_item_opened(plugin->playlist)) {
+                        item = list_find_first_playable(plugin->playlist);
+                    }
+                }
+                if (item != NULL) {
+                    if (item->play == TRUE && item->opened == FALSE) {
+
+                        open_location(plugin, item, TRUE);
+                        if (plugin->post_dom_events && plugin->id != NULL) {
+                            postDOMEvent(plugin->mInstance, plugin->id, "qt_loadedfirstframe");
+                            postDOMEvent(plugin->mInstance, plugin->id, "qt_canplay");
+                            postDOMEvent(plugin->mInstance, plugin->id, "qt_play");
+                        }
+                    }
                 }
             } else {
-                item = list_find_next_playable(plugin->playlist);
+                item = list_find_first_playable(plugin->playlist);
                 if (item != NULL) {
-                    item->controlid = id;
-                    g_strlcpy(item->path, path, 1024);
-                    item->playerready = ready;
-                    item->newwindow = newwindow;
-                    item->cancelled = FALSE;
-                    // printf("opening next playable items on the playlist\n");
-                    if (item->streaming) {
-                        open_location(plugin, item, FALSE);
-                        item->requested = TRUE;
-                    } else {
-                        if (!item->requested) {
-                            plugin->GetURLNotify(plugin->mInstance, item->src, NULL, item);
+                    if (!item->streaming) {
+                        if (item->requested == FALSE) {
+                            gm_log(plugin->debug_level, G_LOG_LEVEL_INFO, "Getting URL '%s'",
+                                   item->src);
                             item->requested = TRUE;
+                            plugin->GetURLNotify(plugin->mInstance, item->src, NULL, item);
                         }
+                    } else {
+                        if (!list_item_opened(plugin->playlist))
+                            open_location(plugin, item, FALSE);
                     }
                 }
             }
-            g_free(path);
+
+            // fetch the next item on the playlist
+            fetch_item = list_find_next_playable_after_listitem(plugin->playlist, item);
+            if (fetch_item != NULL) {
+                if (!fetch_item->streaming) {
+                    gm_log(plugin->debug_level, G_LOG_LEVEL_INFO, "Getting URL '%s'",
+                           fetch_item->src);
+                    fetch_item->requested = TRUE;
+                    CURLGetURLNotify(fetch_item);
+                }
+            }
 
         }
     }
@@ -1593,8 +1547,8 @@ NPError CPlugin::GetURLNotify(NPP instance, const char *url, const char *target,
         return NPN_GetURLNotify(instance, url, target, notifyData);
     } else {
 #ifdef HAVE_CURL
-        printf("using curl to retrieve data from apple.com site\n");
-        printf("quicktime_emulation = %i\n", quicktime_emulation);
+        gm_log(debug_level, G_LOG_LEVEL_DEBUG, "using curl to retrieve data from apple.com site\n");
+        gm_log(debug_level, G_LOG_LEVEL_DEBUG, "quicktime_emulation = %i\n", quicktime_emulation);
 
         item = (ListItem *) notifyData;
         // item = list_find(playlist, (gchar*)stream->url);
@@ -1611,7 +1565,7 @@ NPError CPlugin::GetURLNotify(NPP instance, const char *url, const char *target,
                 playlist = g_list_append(playlist, item);
                 notifyData = item;
             } else {
-                printf("item is null\nstream url %s\n", url);
+                gm_log(debug_level, G_LOG_LEVEL_DEBUG, "item is null\nstream url %s\n", url);
                 return -1;
             }
         } else {
@@ -1621,7 +1575,7 @@ NPError CPlugin::GetURLNotify(NPP instance, const char *url, const char *target,
         }
 
         if (item->cancelled) {
-            printf("item has been cancelled\n");
+            gm_log(debug_level, G_LOG_LEVEL_DEBUG, "item has been cancelled\n");
             return -1;
         }
 
@@ -1637,7 +1591,7 @@ NPError CPlugin::GetURLNotify(NPP instance, const char *url, const char *target,
         }
 
         if (item->retrieved) {
-            printf("item is already retrieved\n");
+            gm_log(debug_level, G_LOG_LEVEL_DEBUG, "item is already retrieved\n");
             return -1;
         }
 
@@ -1666,10 +1620,10 @@ NPError CPlugin::GetURLNotify(NPP instance, const char *url, const char *target,
 // in the bin/components folder
 class ScriptablePluginObjectBase:public NPObject {
   public:
-    ScriptablePluginObjectBase(NPP npp)
-    :mNpp(npp) {
-    } virtual ~ ScriptablePluginObjectBase() {
-    }
+    ScriptablePluginObjectBase(NPP npp):mNpp(npp) {
+    };
+    virtual ~ ScriptablePluginObjectBase() {
+    };
 
     // Virtual NPObject hooks called through this base class. Override
     // as you see fit.
@@ -1826,9 +1780,9 @@ bool ScriptablePluginObjectBase::_RemoveProperty(NPObject * npobj, NPIdentifier
 
 class ScriptablePluginObjectControls:public ScriptablePluginObjectBase {
   public:
-    ScriptablePluginObjectControls(NPP npp)
-    :ScriptablePluginObjectBase(npp) {
-    } virtual bool HasMethod(NPIdentifier name);
+    ScriptablePluginObjectControls(NPP npp):ScriptablePluginObjectBase(npp) {
+    };
+    virtual bool HasMethod(NPIdentifier name);
     virtual bool Invoke(NPIdentifier name, const NPVariant * args,
                         uint32_t argCount, NPVariant * result);
     virtual bool InvokeDefault(const NPVariant * args, uint32_t argCount, NPVariant * result);
@@ -1864,7 +1818,7 @@ bool ScriptablePluginObjectControls::Invoke(NPIdentifier name, const NPVariant *
 {
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         return PR_FALSE;
     }
 
@@ -1889,7 +1843,11 @@ bool ScriptablePluginObjectControls::Invoke(NPIdentifier name, const NPVariant *
 bool ScriptablePluginObjectControls::InvokeDefault(const NPVariant * args, uint32_t argCount,
                                                    NPVariant * result)
 {
-    printf("ScriptablePluginObject default method called!\n");
+    CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
+    if (pPlugin == NULL) {
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG,
+               "ScriptablePluginObjectControls default method called!\n");
+    }
 
     STRINGZ_TO_NPVARIANT(strdup("default method return val"), *result);
 
@@ -1911,7 +1869,7 @@ bool ScriptablePluginObjectControls::GetProperty(NPIdentifier name, NPVariant *
 
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         VOID_TO_NPVARIANT(*result);
         return false;
     }
@@ -1935,7 +1893,7 @@ bool ScriptablePluginObjectControls::SetProperty(NPIdentifier name, const NPVari
 {
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         return false;
     }
 
@@ -1949,9 +1907,9 @@ bool ScriptablePluginObjectControls::SetProperty(NPIdentifier name, const NPVari
 
 class ScriptablePluginObjectMedia:public ScriptablePluginObjectBase {
   public:
-    ScriptablePluginObjectMedia(NPP npp)
-    :ScriptablePluginObjectBase(npp) {
-    } virtual bool HasMethod(NPIdentifier name);
+    ScriptablePluginObjectMedia(NPP npp):ScriptablePluginObjectBase(npp) {
+    };
+    virtual bool HasMethod(NPIdentifier name);
     virtual bool Invoke(NPIdentifier name, const NPVariant * args,
                         uint32_t argCount, NPVariant * result);
     virtual bool InvokeDefault(const NPVariant * args, uint32_t argCount, NPVariant * result);
@@ -1985,7 +1943,7 @@ bool ScriptablePluginObjectMedia::Invoke(NPIdentifier name, const NPVariant * ar
     int i;
 
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         return PR_FALSE;
     }
 
@@ -1996,15 +1954,15 @@ bool ScriptablePluginObjectMedia::Invoke(NPIdentifier name, const NPVariant * ar
         arg = g_strdup(NPVARIANT_TO_STRING(args[0]).utf8characters);
 #endif
 
-        if (g_strcasecmp(arg, "title") == 0) {
+        if (g_ascii_strcasecmp(arg, "title") == 0) {
             STRINGZ_TO_NPVARIANT(strdup
                                  (request_string_value(pPlugin, pPlugin->lastopened, "GetTitle")),
                                  *result);
-        } else if (g_strcasecmp(arg, "uri") == 0) {
+        } else if (g_ascii_strcasecmp(arg, "uri") == 0) {
             STRINGZ_TO_NPVARIANT(strdup
                                  (request_string_value(pPlugin, pPlugin->lastopened, "GetURI")),
                                  *result);
-        } else if (g_strcasecmp(arg, "bitrate") == 0) {
+        } else if (g_ascii_strcasecmp(arg, "bitrate") == 0) {
             pPlugin->GetBitrate(&i);
             INT32_TO_NPVARIANT(i, *result);
         } else {
@@ -2020,8 +1978,11 @@ bool ScriptablePluginObjectMedia::Invoke(NPIdentifier name, const NPVariant * ar
 bool ScriptablePluginObjectMedia::InvokeDefault(const NPVariant * args, uint32_t argCount,
                                                 NPVariant * result)
 {
-    printf("ScriptablePluginObject default method called!\n");
-
+    CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
+    if (pPlugin == NULL) {
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG,
+               "ScriptablePluginObjectMedia default method called!\n");
+    }
     STRINGZ_TO_NPVARIANT(strdup("default method return val"), *result);
 
     return PR_TRUE;
@@ -2042,7 +2003,7 @@ bool ScriptablePluginObjectMedia::GetProperty(NPIdentifier name, NPVariant * res
 
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         VOID_TO_NPVARIANT(*result);
         return false;
     }
@@ -2061,7 +2022,7 @@ bool ScriptablePluginObjectMedia::SetProperty(NPIdentifier name, const NPVariant
 {
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         return false;
     }
 
@@ -2074,9 +2035,9 @@ bool ScriptablePluginObjectMedia::SetProperty(NPIdentifier name, const NPVariant
 
 class ScriptablePluginObjectSettings:public ScriptablePluginObjectBase {
   public:
-    ScriptablePluginObjectSettings(NPP npp)
-    :ScriptablePluginObjectBase(npp) {
-    } virtual bool HasMethod(NPIdentifier name);
+    ScriptablePluginObjectSettings(NPP npp):ScriptablePluginObjectBase(npp) {
+    };
+    virtual bool HasMethod(NPIdentifier name);
     virtual bool Invoke(NPIdentifier name, const NPVariant * args,
                         uint32_t argCount, NPVariant * result);
     virtual bool InvokeDefault(const NPVariant * args, uint32_t argCount, NPVariant * result);
@@ -2104,7 +2065,7 @@ bool ScriptablePluginObjectSettings::Invoke(NPIdentifier name, const NPVariant *
 {
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         return PR_FALSE;
     }
 
@@ -2114,8 +2075,11 @@ bool ScriptablePluginObjectSettings::Invoke(NPIdentifier name, const NPVariant *
 bool ScriptablePluginObjectSettings::InvokeDefault(const NPVariant * args, uint32_t argCount,
                                                    NPVariant * result)
 {
-    printf("ScriptablePluginObject default method called!\n");
-
+    CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
+    if (pPlugin == NULL) {
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG,
+               "ScriptablePluginObjectSettings default method called!\n");
+    }
     STRINGZ_TO_NPVARIANT(strdup("default method return val"), *result);
 
     return PR_TRUE;
@@ -2136,7 +2100,7 @@ bool ScriptablePluginObjectSettings::GetProperty(NPIdentifier name, NPVariant *
 
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         VOID_TO_NPVARIANT(*result);
         return false;
     }
@@ -2155,7 +2119,7 @@ bool ScriptablePluginObjectSettings::SetProperty(NPIdentifier name, const NPVari
 {
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         return false;
     }
 
@@ -2173,9 +2137,9 @@ bool ScriptablePluginObjectSettings::SetProperty(NPIdentifier name, const NPVari
 
 class ScriptablePluginObjectError:public ScriptablePluginObjectBase {
   public:
-    ScriptablePluginObjectError(NPP npp)
-    :ScriptablePluginObjectBase(npp) {
-    } virtual bool HasMethod(NPIdentifier name);
+    ScriptablePluginObjectError(NPP npp):ScriptablePluginObjectBase(npp) {
+    };
+    virtual bool HasMethod(NPIdentifier name);
     virtual bool Invoke(NPIdentifier name, const NPVariant * args,
                         uint32_t argCount, NPVariant * result);
     virtual bool InvokeDefault(const NPVariant * args, uint32_t argCount, NPVariant * result);
@@ -2202,7 +2166,7 @@ bool ScriptablePluginObjectError::Invoke(NPIdentifier name, const NPVariant * ar
 {
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         return PR_FALSE;
     }
 
@@ -2212,8 +2176,11 @@ bool ScriptablePluginObjectError::Invoke(NPIdentifier name, const NPVariant * ar
 bool ScriptablePluginObjectError::InvokeDefault(const NPVariant * args, uint32_t argCount,
                                                 NPVariant * result)
 {
-    printf("ScriptablePluginObject default method called!\n");
-
+    CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
+    if (pPlugin == NULL) {
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG,
+               "ScriptablePluginObjectError default method called!\n");
+    }
     STRINGZ_TO_NPVARIANT(strdup("default method return val"), *result);
 
     return PR_TRUE;
@@ -2232,7 +2199,7 @@ bool ScriptablePluginObjectError::GetProperty(NPIdentifier name, NPVariant * res
 {
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         VOID_TO_NPVARIANT(*result);
         return false;
     }
@@ -2250,7 +2217,7 @@ bool ScriptablePluginObjectError::SetProperty(NPIdentifier name, const NPVariant
 {
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         return false;
     }
 
@@ -2269,9 +2236,9 @@ bool ScriptablePluginObjectError::SetProperty(NPIdentifier name, const NPVariant
 
 class ScriptablePluginObject:public ScriptablePluginObjectBase {
   public:
-    ScriptablePluginObject(NPP npp)
-    :ScriptablePluginObjectBase(npp) {
-    } virtual bool HasMethod(NPIdentifier name);
+    ScriptablePluginObject(NPP npp):ScriptablePluginObjectBase(npp) {
+    };
+    virtual bool HasMethod(NPIdentifier name);
     virtual bool Invoke(NPIdentifier name, const NPVariant * args,
                         uint32_t argCount, NPVariant * result);
     virtual bool InvokeDefault(const NPVariant * args, uint32_t argCount, NPVariant * result);
@@ -2347,7 +2314,7 @@ bool ScriptablePluginObject::Invoke(NPIdentifier name, const NPVariant * args,
 
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         return PR_FALSE;
     }
 
@@ -2557,7 +2524,11 @@ bool ScriptablePluginObject::Invoke(NPIdentifier name, const NPVariant * args,
 bool ScriptablePluginObject::InvokeDefault(const NPVariant * args, uint32_t argCount,
                                            NPVariant * result)
 {
-    printf("ScriptablePluginObject default method called!\n");
+    CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
+    if (pPlugin == NULL) {
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG,
+               "ScriptablePluginObject default method called!\n");
+    }
 
     STRINGZ_TO_NPVARIANT(strdup("default method return val"), *result);
 
@@ -2595,7 +2566,7 @@ bool ScriptablePluginObject::GetProperty(NPIdentifier name, NPVariant * result)
 
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         VOID_TO_NPVARIANT(*result);
         return false;
     }
@@ -2606,7 +2577,7 @@ bool ScriptablePluginObject::GetProperty(NPIdentifier name, NPVariant * result)
             STRINGZ_TO_NPVARIANT(filename, *result);
         } else {
             STRINGZ_TO_NPVARIANT(strdup(""), *result);
-        }            
+        }
         return true;
     }
 
@@ -2704,7 +2675,7 @@ bool ScriptablePluginObject::SetProperty(NPIdentifier name, const NPVariant * va
 {
     CPlugin *pPlugin = (CPlugin *) mNpp->pdata;
     if (pPlugin == NULL) {
-        printf("Can't find plugin pointer\n");
+        gm_log(pPlugin->debug_level, G_LOG_LEVEL_DEBUG, "Can't find plugin pointer\n");
         return false;
     }
 
diff --git a/src/plugin.h b/src/plugin.h
index e6121b6..bc17164 100644
--- a/src/plugin.h
+++ b/src/plugin.h
@@ -93,6 +93,8 @@ typedef enum {
 
 void postDOMEvent(NPP mInstance, const gchar * id, const gchar * event);
 void postPlayStateChange(NPP mInstance, const gint state);
+const gchar *NPErrorToString(NPError error);
+const gchar *NPReasonToString(NPReason reason);
 
 class CPlugin {
   private:
diff --git a/src/plugin_dbus.cpp b/src/plugin_dbus.cpp
index 4aa6502..6de2438 100644
--- a/src/plugin_dbus.cpp
+++ b/src/plugin_dbus.cpp
@@ -50,6 +50,7 @@ static DBusHandlerResult filter_func(DBusConnection * connection,
     gchar *path;
     CPlugin *instance;
     ListItem *item = NULL;
+    ListItem *fetch_item = NULL;
     gchar *arg[10];
     gint i;
     GRand *rand;
@@ -120,7 +121,7 @@ static DBusHandlerResult filter_func(DBusConnection * connection,
 
             if (g_ascii_strcasecmp(dbus_message_get_member(message), "ListDump") == 0) {
 
-                printf("playlist:\n");
+                gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "playlist:\n");
                 list_dump(instance->playlist);
 
                 return DBUS_HANDLER_RESULT_HANDLED;
@@ -129,19 +130,23 @@ static DBusHandlerResult filter_func(DBusConnection * connection,
             if (g_ascii_strcasecmp(dbus_message_get_member(message), "RequestById") == 0) {
                 dbus_error_init(&error);
                 if (dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &s, DBUS_TYPE_INVALID)) {
-                    printf("Got id %s\n", s);
+                    gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "Got id %s\n", s);
                     item = list_find_by_id(instance->playlist, (gint) g_strtod(s, NULL));
                     if (item != NULL) {
                         item->play = TRUE;
                         item->cancelled = FALSE;
                         item->retrieved = FALSE;
-                        printf("id %s has url of %s\n", s, item->src);
-                        printf("id %s has newwindow = %i\n", s, item->newwindow);
+                        gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "id %s has url of %s\n", s,
+                               item->src);
+                        gm_log(instance->debug_level, G_LOG_LEVEL_INFO,
+                               "id %s has newwindow = %i\n", s, item->newwindow);
                         if (item->newwindow == 0) {
                             send_signal_with_boolean(instance, item, "SetShowControls", TRUE);
                             if (item->streaming) {
                                 send_signal_with_string(instance, item, "Open", item->src);
                             } else {
+                                item->requested = TRUE;
+                                item->queuedtoplay = TRUE;
                                 instance->GetURLNotify(instance->mInstance, item->src, NULL, item);
                             }
                         } else {
@@ -172,12 +177,16 @@ static DBusHandlerResult filter_func(DBusConnection * connection,
                             if (g_spawn_async(NULL, arg, NULL,
                                               G_SPAWN_SEARCH_PATH, NULL, NULL, NULL,
                                               &gerror) == FALSE) {
-                                printf("Unable to launch %s: %s\n", app_name, gerror->message);
+                                gm_log(instance->debug_level, G_LOG_LEVEL_INFO,
+                                       "Unable to launch %s: %s\n", app_name, gerror->message);
                                 g_error_free(gerror);
                                 gerror = NULL;
                             }
                             g_free(app_name);
-                            printf("requesting %s \n", item->src);
+                            gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "requesting %s \n",
+                                   item->src);
+                            item->requested = TRUE;
+                            item->queuedtoplay = TRUE;
                             instance->GetURLNotify(instance->mInstance, item->src, NULL, item);
                         }
                         instance->lastopened->played = TRUE;
@@ -218,9 +227,14 @@ static DBusHandlerResult filter_func(DBusConnection * connection,
                     }
                 }
 
-                //printf("next item src = %s\n", item->src);
-                //printf("next item local = %s\n", item->local);
-                //printf("next item streaming = %i\n", item->streaming);
+                if (item != NULL) {
+                    printf("next item src = %s\n", item->src);
+                    printf("next item local = %s\n", item->local);
+                    printf("next item streaming = %i\n", item->streaming);
+                } else {
+                    printf("do not know what the next item is\n");
+                    list_dump(instance->playlist);
+                }
 
                 if (item != NULL) {
                     /*
@@ -249,11 +263,35 @@ static DBusHandlerResult filter_func(DBusConnection * connection,
                         item->cancelled = FALSE;
                         if (item->retrieved) {
                             open_location(instance, item, TRUE);
+                            fetch_item =
+                                list_find_next_playable_after_listitem(instance->playlist, item);
+                            if (fetch_item != NULL) {
+                                if (!fetch_item->streaming) {
+                                    gm_log(instance->debug_level, G_LOG_LEVEL_INFO,
+                                           "Getting URL '%s'", fetch_item->src);
+                                    fetch_item->requested = TRUE;
+                                    instance->GetURLNotify(instance->mInstance, fetch_item->src,
+                                                           NULL, fetch_item);
+                                }
+                            }
                         } else {
+                            item->requested = TRUE;
+                            item->queuedtoplay = TRUE;
                             instance->GetURLNotify(instance->mInstance, item->src, NULL, item);
                         }
                     } else {
                         open_location(instance, item, FALSE);
+                        fetch_item =
+                            list_find_next_playable_after_listitem(instance->playlist, item);
+                        if (fetch_item != NULL) {
+                            if (!fetch_item->streaming) {
+                                gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "Getting URL '%s'",
+                                       fetch_item->src);
+                                fetch_item->requested = TRUE;
+                                instance->GetURLNotify(instance->mInstance, fetch_item->src, NULL,
+                                                       fetch_item);
+                            }
+                        }
                     }
                 }
                 return DBUS_HANDLER_RESULT_HANDLED;
@@ -271,21 +309,25 @@ static DBusHandlerResult filter_func(DBusConnection * connection,
                             NPN_GetURL(instance->mInstance, instance->event_mediacomplete, NULL);
                         }
                         postPlayStateChange(instance->mInstance, STATE_MEDIAENDED);
+                        return DBUS_HANDLER_RESULT_HANDLED;
                     }
                     if (g_ascii_strcasecmp(s, "MouseClicked") == 0) {
                         if (instance->event_mouseclicked != NULL) {
                             NPN_GetURL(instance->mInstance, instance->event_mouseclicked, NULL);
                         }
+                        return DBUS_HANDLER_RESULT_HANDLED;
                     }
                     if (g_ascii_strcasecmp(s, "EnterWindow") == 0) {
                         if (instance->event_enterwindow != NULL) {
                             NPN_GetURL(instance->mInstance, instance->event_enterwindow, NULL);
                         }
+                        return DBUS_HANDLER_RESULT_HANDLED;
                     }
                     if (g_ascii_strcasecmp(s, "LeaveWindow") == 0) {
                         if (instance->event_leavewindow != NULL) {
                             NPN_GetURL(instance->mInstance, instance->event_leavewindow, NULL);
                         }
+                        return DBUS_HANDLER_RESULT_HANDLED;
                     }
                     if (g_ascii_strcasecmp(s, "MouseDown") == 0) {
                         if (instance->event_mousedown != NULL) {
@@ -293,6 +335,7 @@ static DBusHandlerResult filter_func(DBusConnection * connection,
                             NPN_GetURL(instance->mInstance, tmp, NULL);
                             g_free(tmp);
                         }
+                        return DBUS_HANDLER_RESULT_HANDLED;
                     }
                     if (g_ascii_strcasecmp(s, "MouseUp") == 0) {
                         if (instance->event_mouseup != NULL) {
@@ -300,36 +343,43 @@ static DBusHandlerResult filter_func(DBusConnection * connection,
                             NPN_GetURL(instance->mInstance, tmp, NULL);
                             g_free(tmp);
                         }
+                        return DBUS_HANDLER_RESULT_HANDLED;
                     }
                     if (g_ascii_strcasecmp(s, "TimeChanged") == 0) {
                         if (instance->post_dom_events && instance->id != NULL) {
                             postDOMEvent(instance->mInstance, instance->id, "qt_timechanged");
                         }
+                        return DBUS_HANDLER_RESULT_HANDLED;
                     }
                     if (g_ascii_strcasecmp(s, "Ended") == 0) {
                         if (instance->post_dom_events && instance->id != NULL) {
                             postDOMEvent(instance->mInstance, instance->id, "qt_ended");
                         }
+                        return DBUS_HANDLER_RESULT_HANDLED;
                     }
                     if (g_ascii_strcasecmp(s, "MediaStopped") == 0) {
                         if (instance->post_dom_events && instance->id != NULL) {
                             postDOMEvent(instance->mInstance, instance->id, "qt_ended");
                         }
                         postPlayStateChange(instance->mInstance, STATE_STOPPED);
+                        return DBUS_HANDLER_RESULT_HANDLED;
                     }
                     if (g_ascii_strcasecmp(s, "MediaPlaying") == 0) {
                         if (instance->post_dom_events && instance->id != NULL) {
                             postDOMEvent(instance->mInstance, instance->id, "qt_play");
                         }
                         postPlayStateChange(instance->mInstance, STATE_PLAYING);
+                        return DBUS_HANDLER_RESULT_HANDLED;
                     }
                     if (g_ascii_strcasecmp(s, "MediaPaused") == 0) {
                         if (instance->post_dom_events && instance->id != NULL) {
                             postDOMEvent(instance->mInstance, instance->id, "qt_pause");
                         }
                         postPlayStateChange(instance->mInstance, STATE_PAUSED);
+                        return DBUS_HANDLER_RESULT_HANDLED;
                     }
                 }
+                return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
             }
         }
     } else {
@@ -352,7 +402,8 @@ DBusConnection *dbus_hookup(CPlugin * instance)
     dbus_bus_add_match(connection, "type='signal',interface='com.gecko.mediaplayer'", NULL);
     dbus_connection_add_filter(connection, filter_func, instance, NULL);
 
-    printf("DBUS connection created\nListening to path %s\n", instance->path);
+    gm_log(instance->debug_level, G_LOG_LEVEL_INFO,
+           "DBUS connection created\nListening to path %s\n", instance->path);
 
     return connection;
 }
@@ -396,6 +447,10 @@ void open_location(CPlugin * instance, ListItem * item, gboolean uselocal)
                 file = g_strdup(item->src);
             }
 
+            gm_log(instance->debug_level, G_LOG_LEVEL_INFO,
+                   "Opening %s with launch\nitem->hrefid = %i item->src = %s", file, item->hrefid,
+                   item->src);
+
             //printf("launching gnome-mplayer from Open with id = %i\n",instance->controlid);
             app_name = NULL;
             if (instance->player_backend != NULL) {
@@ -458,7 +513,8 @@ void open_location(CPlugin * instance, ListItem * item, gboolean uselocal)
             path = instance->path;
         }
 
-        printf("Sending Open %s to connection %p\nitem->hrefid = %i item->src = %s\n", file,
+        gm_log(instance->debug_level, G_LOG_LEVEL_INFO,
+               "Sending Open %s to connection %p\nitem->hrefid = %i item->src = %s\n", file,
                instance->connection, item->hrefid, item->src);
         if (item->hrefid == 0) {
             if (item->streaming) {
@@ -487,7 +543,8 @@ void open_location(CPlugin * instance, ListItem * item, gboolean uselocal)
         item->opened = TRUE;
         instance->lastopened = item;
     } else {
-        printf("Item already opened before\n");
+        gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "Item '%s' already opened before",
+               item->src);
     }
 }
 
@@ -588,9 +645,10 @@ void send_signal_with_string(CPlugin * instance, ListItem * item, const gchar *
     const char *localstr;
     gchar *path;
 
-    printf("Sending %s to connection %p\n", signal, instance->connection);
     if (instance == NULL)
         return;
+//    gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "Sending %s to connection %p\n", signal,
+//           instance->connection);
 
     if (instance->console != NULL) {
         path = g_strdup_printf("/console/%s", instance->console);
@@ -620,10 +678,12 @@ void send_signal_with_double(CPlugin * instance, ListItem * item, const gchar *
     const char *localsignal;
     gchar *path;
 
-    //printf("Sending %s to connection %p\n", signal, instance->connection);
     if (instance == NULL)
         return;
 
+//    gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "Sending %s to connection %p\n", signal,
+//           instance->connection);
+
     if (instance->console != NULL) {
         path = g_strdup_printf("/console/%s", instance->console);
     } else {
@@ -741,7 +801,7 @@ gboolean request_boolean_value(CPlugin * instance, ListItem * item, const gchar
         replymessage =
             dbus_connection_send_with_reply_and_block(instance->connection, message, -1, &error);
         if (dbus_error_is_set(&error)) {
-            printf("Error message = %s\n", error.message);
+            gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "Error message = %s\n", error.message);
         }
         dbus_message_get_args(replymessage, &error, DBUS_TYPE_BOOLEAN, &result, DBUS_TYPE_INVALID);
         dbus_message_unref(message);
@@ -784,7 +844,7 @@ gdouble request_double_value(CPlugin * instance, ListItem * item, const gchar *
         replymessage =
             dbus_connection_send_with_reply_and_block(instance->connection, message, -1, &error);
         if (dbus_error_is_set(&error)) {
-            printf("Error message = %s\n", error.message);
+            gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "Error message = %s\n", error.message);
         }
         dbus_message_get_args(replymessage, &error, DBUS_TYPE_DOUBLE, &result, DBUS_TYPE_INVALID);
         dbus_message_unref(message);
@@ -828,7 +888,7 @@ gint request_int_value(CPlugin * instance, ListItem * item, const gchar * member
         replymessage =
             dbus_connection_send_with_reply_and_block(instance->connection, message, -1, &error);
         if (dbus_error_is_set(&error)) {
-            printf("Error message = %s\n", error.message);
+            gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "Error message = %s\n", error.message);
         }
         dbus_message_get_args(replymessage, &error, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
         dbus_message_unref(message);
@@ -871,7 +931,7 @@ gchar *request_string_value(CPlugin * instance, ListItem * item, const gchar * m
         replymessage =
             dbus_connection_send_with_reply_and_block(instance->connection, message, -1, &error);
         if (dbus_error_is_set(&error)) {
-            printf("Error message = %s\n", error.message);
+            gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "Error message = %s\n", error.message);
         }
         dbus_message_get_args(replymessage, &error, DBUS_TYPE_STRING, &result, DBUS_TYPE_INVALID);
         dbus_message_unref(message);
@@ -953,7 +1013,7 @@ gint request_bitrate(CPlugin * instance, ListItem * item, gchar * name)
         replymessage =
             dbus_connection_send_with_reply_and_block(instance->connection, message, -1, &error);
         if (dbus_error_is_set(&error)) {
-            printf("Error message = %s\n", error.message);
+            gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "Error message = %s\n", error.message);
         }
         if (replymessage != NULL) {
             dbus_message_get_args(replymessage, &error, DBUS_TYPE_INT32, &result,
diff --git a/src/plugin_list.cpp b/src/plugin_list.cpp
index ee5b245..5bfca6c 100644
--- a/src/plugin_list.cpp
+++ b/src/plugin_list.cpp
@@ -40,6 +40,7 @@ gint asx_loop;
 gint entry_id = 0;
 GList *parser_list;
 ListItem *parser_item;
+gboolean global_detect_only;
 extern gint streaming(gchar * url);
 
 ListItem *list_find(GList * list, gchar * url)
@@ -55,11 +56,6 @@ ListItem *list_find(GList * list, gchar * url)
                 // printf("found %s at %p\n",url,item);
                 return item;
             }
-//            if (g_strrstr(url, item->src) != NULL && item->play == TRUE) {
-//                // printf("found %s at %p\n",url,item);
-//                return item;
-//            }
-
         }
     }
 
@@ -176,6 +172,62 @@ ListItem *list_find_next_playable(GList * list)
     return NULL;
 }
 
+ListItem *list_find_next_playable_after_listitem(GList * list, ListItem * find)
+{
+    ListItem *item;
+    GList *iter;
+    ListItem *found = NULL;
+
+    if (list != NULL && find != NULL) {
+        for (iter = g_list_last(list); iter != NULL; iter = g_list_previous(iter)) {
+            item = (ListItem *) iter->data;
+            if (item != NULL) {
+                if (g_ascii_strcasecmp(find->src, item->src) == 0) {
+                    return found;
+                }
+                if (item->played == FALSE && item->play == TRUE) {
+                    found = item;
+                }
+            }
+        }
+    }
+    return NULL;
+}
+
+ListItem *list_find_first_playable(GList * list)
+{
+    ListItem *item;
+    GList *iter;
+
+    for (iter = list; iter != NULL; iter = g_list_next(iter)) {
+        item = (ListItem *) iter->data;
+        if (item != NULL) {
+            if (item->play == TRUE) {
+                return item;
+            }
+        }
+    }
+    return NULL;
+}
+
+gboolean list_item_opened(GList * list)
+{
+    ListItem *item;
+    GList *iter;
+
+    for (iter = list; iter != NULL; iter = g_list_next(iter)) {
+        item = (ListItem *) iter->data;
+        if (item != NULL) {
+            if (item->opened == TRUE) {
+                return TRUE;
+            }
+        }
+    }
+    return FALSE;
+}
+
+
+
 void list_qualify_url(GList * list, gchar * page_url)
 {
     ListItem *item;
@@ -230,34 +282,43 @@ void list_dump(GList * list)
 {
     ListItem *item;
     GList *iter;
+    gint count = 1;
 
     if (list != NULL) {
         for (iter = list; iter != NULL; iter = g_list_next(iter)) {
             item = (ListItem *) iter->data;
             if (item != NULL) {
-                printf("Item \n");
-                printf("src = %s\n", item->src);
-                printf("local = %s\n", item->local);
-                printf("id = %i\n", item->id);
-                printf("hrefid = %i\n", item->hrefid);
-                printf("play = %i\n", item->play);
-                printf("played = %i\n", item->played);
-                printf("path = %s\n", item->path);
-                printf("controlid = %i\n", item->controlid);
-                printf("playerready = %i\n", item->playerready);
-                printf("newwindow = %i\n", item->newwindow);
-                printf("cancelled = %i\n", item->cancelled);
-                printf("streaming = %i\n", item->streaming);
-                printf("loop = %i\n", item->loop);
-                printf("loopcount = %i\n", item->loopcount);
-                printf("plugin = %p\n", item->plugin);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "----- Item %i -----", count++);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "src = %s", item->src);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "local = %s", item->local);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "id = %i", item->id);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "localsize = %i", item->localsize);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "lastsize = %i", item->lastsize);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "hrefid = %i", item->hrefid);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "requested = %i", item->requested);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "retrieved = %i", item->retrieved);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "cancelled = %i", item->cancelled);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "streaming = %i", item->streaming);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "opened = %i", item->opened);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "oktoplay = %i", item->oktoplay);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "queuedtoplay = %i", item->queuedtoplay);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "play = %i", item->play);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "played = %i", item->played);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "playlist = %i", item->playlist);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "path = %s", item->path);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "controlid = %i", item->controlid);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "playerready = %i", item->playerready);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "newwindow = %i", item->newwindow);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "loop = %i", item->loop);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "loopcount = %i", item->loopcount);
+                gm_log(TRUE, G_LOG_LEVEL_INFO, "plugin = %p", item->plugin);
             }
         }
     }
 }
 
 
-GList *list_parse_qt(GList * list, ListItem * item)
+GList *list_parse_qt(GList * list, ListItem * item, gboolean detect_only)
 {
     ListItem *newitem;
     gchar *data;
@@ -271,14 +332,14 @@ GList *list_parse_qt(GList * list, ListItem * item)
     unsigned int code = 0;      // some value about the URL
     gboolean added = FALSE;
 
-    printf("Entering list_parse_qt localsize = %i\n", item->localsize);
+    // printf("Entering list_parse_qt localsize = %i\n", item->localsize);
 
     if (item->localsize < (16 * 1024)) {
         if (g_file_get_contents(item->local, &data, &datalen, NULL)) {
             //printf("read %i bytes from %s\n",datalen, item->local);
             p = (gchar *) memmem_compat(data, datalen, "rmda", 4);
             if (p == NULL) {
-                printf("unable to find rmda in %s\n", item->local);
+                gm_log(TRUE, G_LOG_LEVEL_DEBUG, "unable to find rmda in %s", item->local);
                 return list;
             } else {
                 if (datalen > 4) {
@@ -320,19 +381,21 @@ GList *list_parse_qt(GList * list, ListItem * item)
                         if (code == 163 || code == 165 || code == 167
                             || code == (unsigned int) -93
                             || code == (unsigned int) -91 || code == (unsigned int) -89) {
-                            printf("Skipped URL: %s\n", rdrf);
+                            gm_log(TRUE, G_LOG_LEVEL_INFO, "Skipped URL: %s\n", rdrf);
                         } else {
                             if (list_find(list, url) == NULL && strlen(rdrf) > 0) {
-                                item->play = FALSE;
-                                newitem = g_new0(ListItem, 1);
-                                g_strlcpy(newitem->src, url, 1024);
-                                // newitem->streaming = streaming(newitem->src);
-                                newitem->play = TRUE;
-                                newitem->id = item->id;
-                                newitem->controlid = item->controlid;
-                                g_strlcpy(newitem->path, item->path, 1024);
-                                item->id = -1;
-                                list = g_list_append(list, newitem);
+                                if (!detect_only) {
+                                    item->play = FALSE;
+                                    newitem = g_new0(ListItem, 1);
+                                    g_strlcpy(newitem->src, url, 1024);
+                                    // newitem->streaming = streaming(newitem->src);
+                                    newitem->play = TRUE;
+                                    newitem->id = item->id;
+                                    newitem->controlid = item->controlid;
+                                    g_strlcpy(newitem->path, item->path, 1024);
+                                    item->id = -1;
+                                    list = g_list_append(list, newitem);
+                                }
                                 added = TRUE;
                             }
                         }
@@ -362,12 +425,15 @@ GList *list_parse_qt(GList * list, ListItem * item)
         // so skip parsing it.
         //printf("file not parsed > 16K actual size is %i\n",item->localsize);
     }
-    printf("Exiting list_parse_qt\n");
+    // printf("Exiting list_parse_qt\n");
+    if (added) {
+        item->playlist = TRUE;
+    }
     return list;
 
 }
 
-GList *list_parse_qt2(GList * list, ListItem * item)
+GList *list_parse_qt2(GList * list, ListItem * item, gboolean detect_only)
 {
     ListItem *newitem;
     gchar *data;
@@ -378,14 +444,14 @@ GList *list_parse_qt2(GList * list, ListItem * item)
     gchar *urlptr;
     gboolean added = FALSE;
 
-    printf("Entering list_parse_qt2 localsize = %i\n", item->localsize);
+    // printf("Entering list_parse_qt2 localsize = %i\n", item->localsize);
 
     if (item->localsize < (256 * 1024)) {
         if (g_file_get_contents(item->local, &data, &datalen, NULL)) {
             //printf("read %i bytes from %s\n",datalen, item->local);
             p = (gchar *) memmem_compat(data, datalen, "mmdr", 4);
             if (p == NULL) {
-                printf("unable to find mmdr in %s\n", item->local);
+                gm_log(TRUE, G_LOG_LEVEL_DEBUG, "unable to find mmdr in %s", item->local);
                 return list;
             } else {
                 while (p != NULL && !added) {
@@ -407,16 +473,18 @@ GList *list_parse_qt2(GList * list, ListItem * item)
                         }
 
                         if (list_find(list, url) == NULL) {
-                            item->play = FALSE;
-                            newitem = g_new0(ListItem, 1);
-                            g_strlcpy(newitem->src, url, 1024);
-                            // newitem->streaming = streaming(newitem->src);
-                            newitem->play = TRUE;
-                            newitem->id = item->id;
-                            newitem->controlid = item->controlid;
-                            g_strlcpy(newitem->path, item->path, 1024);
-                            item->id = -1;
-                            list = g_list_append(list, newitem);
+                            if (!detect_only) {
+                                item->play = FALSE;
+                                newitem = g_new0(ListItem, 1);
+                                g_strlcpy(newitem->src, url, 1024);
+                                // newitem->streaming = streaming(newitem->src);
+                                newitem->play = TRUE;
+                                newitem->id = item->id;
+                                newitem->controlid = item->controlid;
+                                g_strlcpy(newitem->path, item->path, 1024);
+                                item->id = -1;
+                                list = g_list_append(list, newitem);
+                            }
                             added = TRUE;
                         }
                         p = (gchar *) memmem_compat(urlptr, datalen - (urlptr - data), "mmdr", 4);
@@ -436,7 +504,10 @@ GList *list_parse_qt2(GList * list, ListItem * item)
         // so skip parsing it.
         //printf("file not parsed > 256K actual size is %i\n",item->localsize);
     }
-    printf("Exiting list_parse_qt2\n");
+    // printf("Exiting list_parse_qt2\n");
+    if (added) {
+        item->playlist = TRUE;
+    }
     return list;
 
 }
@@ -494,18 +565,19 @@ void unreplace_amp(gchar * data)
 
 }
 
-GList *list_parse_asx(GList * list, ListItem * item)
+GList *list_parse_asx(GList * list, ListItem * item, gboolean detect_only)
 {
     GMarkupParseContext *context;
     gchar *data;
     gsize datalen;
 
-    printf("Entering list_parse_asx localsize = %i\n", item->localsize);
+    // printf("Entering list_parse_asx localsize = %i\n", item->localsize);
 
     if (item->localsize < (16 * 1024)) {
         if (g_file_get_contents(item->local, &data, &datalen, NULL)) {
             parser_list = list;
             parser_item = item;
+            global_detect_only = detect_only;
             asx_loop = 0;
             strip_unicode(data, datalen);
             replace_amp(data);
@@ -513,12 +585,13 @@ GList *list_parse_asx(GList * list, ListItem * item)
             context = g_markup_parse_context_new(&asx_parser, (GMarkupParseFlags) 0, data, NULL);
             g_markup_parse_context_parse(context, data, datalen, NULL);
             g_markup_parse_context_free(context);
+            global_detect_only = FALSE;
             parser_item = NULL;
             parser_list = NULL;
         }
         // list_dump(list);
     }
-    printf("Exiting list_parse_asx\n");
+    // printf("Exiting list_parse_asx\n");
     return list;
 }
 
@@ -541,45 +614,48 @@ asx_start_element(GMarkupParseContext * context,
                 if (list_find(parser_list, (gchar *) attribute_values[i])
                     == NULL) {
                     parser_item->play = FALSE;
-                    newitem = g_new0(ListItem, 1);
-                    value = g_strdup(attribute_values[i]);
-                    unreplace_amp(value);
-                    ptr = g_strrstr(value, "/");
-                    if (ptr == NULL) {
-                        g_strlcpy(url, parser_item->src, 1024);
-                        ptr = g_strrstr(url, "/");
-                        if (ptr != NULL) {
-                            ptr[1] = (char) NULL;
-                            g_strlcpy(newitem->src, url, 1024);
-                            g_strlcat(newitem->src, value, 1024);
+                    parser_item->playlist = TRUE;
+                    if (!global_detect_only) {
+                        newitem = g_new0(ListItem, 1);
+                        value = g_strdup(attribute_values[i]);
+                        unreplace_amp(value);
+                        ptr = g_strrstr(value, "/");
+                        if (ptr == NULL) {
+                            g_strlcpy(url, parser_item->src, 1024);
+                            ptr = g_strrstr(url, "/");
+                            if (ptr != NULL) {
+                                ptr[1] = (char) NULL;
+                                g_strlcpy(newitem->src, url, 1024);
+                                g_strlcat(newitem->src, value, 1024);
+                            }
+                        } else {
+                            g_strlcpy(newitem->src, value, 1024);
                         }
-                    } else {
-                        g_strlcpy(newitem->src, value, 1024);
-                    }
 
-                    g_free(value);
-                    newitem->streaming = streaming(newitem->src);
-                    // crappy hack, mplayer needs the protocol in lower case, some sites don't
-                    if (newitem->streaming) {
-                        newitem->src[0] = g_ascii_tolower(newitem->src[0]);
-                        newitem->src[1] = g_ascii_tolower(newitem->src[1]);
-                        newitem->src[2] = g_ascii_tolower(newitem->src[2]);
-                        newitem->src[3] = g_ascii_tolower(newitem->src[3]);
-                    }
-                    newitem->play = TRUE;
-                    if (entry_id != 0) {
-                        newitem->id = entry_id;
-                    } else {
-                        newitem->id = parser_item->id;
-                        parser_item->id = -1;
-                    }
-                    newitem->controlid = parser_item->controlid;
-                    if (asx_loop != 0) {
-                        newitem->loop = TRUE;
-                        newitem->loopcount = asx_loop;
+                        g_free(value);
+                        newitem->streaming = streaming(newitem->src);
+                        // crappy hack, mplayer needs the protocol in lower case, some sites don't
+                        if (newitem->streaming) {
+                            newitem->src[0] = g_ascii_tolower(newitem->src[0]);
+                            newitem->src[1] = g_ascii_tolower(newitem->src[1]);
+                            newitem->src[2] = g_ascii_tolower(newitem->src[2]);
+                            newitem->src[3] = g_ascii_tolower(newitem->src[3]);
+                        }
+                        newitem->play = TRUE;
+                        if (entry_id != 0) {
+                            newitem->id = entry_id;
+                        } else {
+                            newitem->id = parser_item->id;
+                            parser_item->id = -1;
+                        }
+                        newitem->controlid = parser_item->controlid;
+                        if (asx_loop != 0) {
+                            newitem->loop = TRUE;
+                            newitem->loopcount = asx_loop;
+                        }
+                        g_strlcpy(newitem->path, parser_item->path, 1024);
+                        parser_list = g_list_append(parser_list, newitem);
                     }
-                    g_strlcpy(newitem->path, parser_item->path, 1024);
-                    parser_list = g_list_append(parser_list, newitem);
                 }
 
             }
@@ -596,6 +672,7 @@ asx_start_element(GMarkupParseContext * context,
                 if (list_find(parser_list, (gchar *) attribute_values[i])
                     == NULL) {
                     parser_item->play = FALSE;
+                    parser_item->playlist = TRUE;
                     newitem = g_new0(ListItem, 1);
                     value = g_strdup(attribute_values[i]);
                     unreplace_amp(value);
@@ -650,18 +727,19 @@ asx_end_element(GMarkupParseContext * context,
 
 }
 
-GList *list_parse_qml(GList * list, ListItem * item)
+GList *list_parse_qml(GList * list, ListItem * item, gboolean detect_only)
 {
     GMarkupParseContext *context;
     gchar *data;
     gsize datalen;
 
-    printf("Entering list_parse_qml localsize = %i\n", item->localsize);
+    // printf("Entering list_parse_qml localsize = %i\n", item->localsize);
 
     if (item->localsize < (16 * 1024)) {
         if (g_file_get_contents(item->local, &data, &datalen, NULL)) {
             parser_list = list;
             parser_item = item;
+            global_detect_only = detect_only;
             asx_loop = 0;
             strip_unicode(data, datalen);
             replace_amp(data);
@@ -671,10 +749,11 @@ GList *list_parse_qml(GList * list, ListItem * item)
             g_markup_parse_context_free(context);
             parser_item = NULL;
             parser_list = NULL;
+            global_detect_only = FALSE;
         }
         // list_dump(list);
     }
-    printf("Exiting list_parse_qml\n");
+    // printf("Exiting list_parse_qml\n");
     return list;
 }
 
@@ -696,33 +775,36 @@ qml_start_element(GMarkupParseContext * context,
                     == NULL) {
                     if (parser_item->play) {
                         parser_item->play = FALSE;
-                        newitem = g_new0(ListItem, 1);
-                        value = g_strdup(attribute_values[i]);
-                        unreplace_amp(value);
-                        g_strlcpy(newitem->src, value, 1024);
-                        g_free(value);
-                        newitem->streaming = streaming(newitem->src);
-                        // crappy hack, mplayer needs the protocol in lower case, some sites don't
-                        if (newitem->streaming) {
-                            newitem->src[0] = g_ascii_tolower(newitem->src[0]);
-                            newitem->src[1] = g_ascii_tolower(newitem->src[1]);
-                            newitem->src[2] = g_ascii_tolower(newitem->src[2]);
-                            newitem->src[3] = g_ascii_tolower(newitem->src[3]);
-                        }
-                        newitem->play = TRUE;
-                        if (entry_id != 0) {
-                            newitem->id = entry_id;
-                        } else {
-                            newitem->id = parser_item->id;
-                            parser_item->id = -1;
-                        }
-                        newitem->controlid = parser_item->controlid;
-                        if (asx_loop != 0) {
-                            newitem->loop = TRUE;
-                            newitem->loopcount = asx_loop;
+                        parser_item->playlist = TRUE;
+                        if (!global_detect_only) {
+                            newitem = g_new0(ListItem, 1);
+                            value = g_strdup(attribute_values[i]);
+                            unreplace_amp(value);
+                            g_strlcpy(newitem->src, value, 1024);
+                            g_free(value);
+                            newitem->streaming = streaming(newitem->src);
+                            // crappy hack, mplayer needs the protocol in lower case, some sites don't
+                            if (newitem->streaming) {
+                                newitem->src[0] = g_ascii_tolower(newitem->src[0]);
+                                newitem->src[1] = g_ascii_tolower(newitem->src[1]);
+                                newitem->src[2] = g_ascii_tolower(newitem->src[2]);
+                                newitem->src[3] = g_ascii_tolower(newitem->src[3]);
+                            }
+                            newitem->play = TRUE;
+                            if (entry_id != 0) {
+                                newitem->id = entry_id;
+                            } else {
+                                newitem->id = parser_item->id;
+                                parser_item->id = -1;
+                            }
+                            newitem->controlid = parser_item->controlid;
+                            if (asx_loop != 0) {
+                                newitem->loop = TRUE;
+                                newitem->loopcount = asx_loop;
+                            }
+                            g_strlcpy(newitem->path, parser_item->path, 1024);
+                            parser_list = g_list_append(parser_list, newitem);
                         }
-                        g_strlcpy(newitem->path, parser_item->path, 1024);
-                        parser_list = g_list_append(parser_list, newitem);
                     }
                 }
             }
@@ -731,7 +813,7 @@ qml_start_element(GMarkupParseContext * context,
     }
 }
 
-GList *list_parse_ram(GList * list, ListItem * item)
+GList *list_parse_ram(GList * list, ListItem * item, gboolean detect_only)
 {
     gchar *data;
     gsize datalen;
@@ -743,7 +825,7 @@ GList *list_parse_ram(GList * list, ListItem * item)
     gchar *ptr;
     gchar url[1024];
 
-    printf("Entering list_parse_ram localsize = %i\n", item->localsize);
+    // printf("Entering list_parse_ram localsize = %i\n", item->localsize);
 
     if (item->localsize < (16 * 1024)) {
         if (g_file_get_contents(item->local, &data, &datalen, NULL)) {
@@ -765,35 +847,38 @@ GList *list_parse_ram(GList * list, ListItem * item)
                         if (list_find(parser_list, (gchar *) output[i])
                             == NULL) {
                             parser_item->play = FALSE;
-                            newitem = g_new0(ListItem, 1);
-                            value = g_strdup(output[i]);
-                            unreplace_amp(value);
-                            ptr = g_strrstr(value, "/");
-                            if (ptr == NULL) {
-                                g_strlcpy(url, parser_item->src, 1024);
-                                ptr = g_strrstr(url, "/");
-                                if (ptr != NULL) {
-                                    ptr[1] = (char) NULL;
-                                    g_strlcpy(newitem->src, url, 1024);
-                                    g_strlcat(newitem->src, value, 1024);
+                            parser_item->playlist = TRUE;
+                            if (!detect_only) {
+                                newitem = g_new0(ListItem, 1);
+                                value = g_strdup(output[i]);
+                                unreplace_amp(value);
+                                ptr = g_strrstr(value, "/");
+                                if (ptr == NULL) {
+                                    g_strlcpy(url, parser_item->src, 1024);
+                                    ptr = g_strrstr(url, "/");
+                                    if (ptr != NULL) {
+                                        ptr[1] = (char) NULL;
+                                        g_strlcpy(newitem->src, url, 1024);
+                                        g_strlcat(newitem->src, value, 1024);
+                                    }
+                                } else {
+                                    g_strlcpy(newitem->src, value, 1024);
                                 }
-                            } else {
-                                g_strlcpy(newitem->src, value, 1024);
-                            }
-                            g_free(value);
-                            newitem->streaming = streaming(newitem->src);
-                            // crappy hack, mplayer needs the protocol in lower case, some sites don't
-                            if (newitem->streaming) {
-                                newitem->src[0] = g_ascii_tolower(newitem->src[0]);
-                                newitem->src[1] = g_ascii_tolower(newitem->src[1]);
-                                newitem->src[2] = g_ascii_tolower(newitem->src[2]);
-                                newitem->src[3] = g_ascii_tolower(newitem->src[3]);
+                                g_free(value);
+                                newitem->streaming = streaming(newitem->src);
+                                // crappy hack, mplayer needs the protocol in lower case, some sites don't
+                                if (newitem->streaming) {
+                                    newitem->src[0] = g_ascii_tolower(newitem->src[0]);
+                                    newitem->src[1] = g_ascii_tolower(newitem->src[1]);
+                                    newitem->src[2] = g_ascii_tolower(newitem->src[2]);
+                                    newitem->src[3] = g_ascii_tolower(newitem->src[3]);
+                                }
+                                newitem->play = TRUE;
+                                newitem->id = ++entry_id;
+                                newitem->controlid = parser_item->controlid;
+                                g_strlcpy(newitem->path, parser_item->path, 1024);
+                                parser_list = g_list_append(parser_list, newitem);
                             }
-                            newitem->play = TRUE;
-                            newitem->id = ++entry_id;
-                            newitem->controlid = parser_item->controlid;
-                            g_strlcpy(newitem->path, parser_item->path, 1024);
-                            parser_list = g_list_append(parser_list, newitem);
                         }
                     }
                     i++;
@@ -805,6 +890,6 @@ GList *list_parse_ram(GList * list, ListItem * item)
         }
         // list_dump(list);
     }
-    printf("Exiting list_parse_ram\n");
+    // printf("Exiting list_parse_ram\n");
     return list;
 }
diff --git a/src/plugin_list.h b/src/plugin_list.h
index 1e3035c..4728a08 100644
--- a/src/plugin_list.h
+++ b/src/plugin_list.h
@@ -42,6 +42,7 @@
 #include <stdio.h>
 #include <string.h>
 #include "memmem_compat.h"
+#include <gmlib.h>
 
 typedef struct _ListItem {
     gchar src[4096];
@@ -56,9 +57,12 @@ typedef struct _ListItem {
     gboolean streaming;
     gboolean requested;
     gboolean retrieved;
+    gboolean oktoplay;
+    gboolean queuedtoplay;
     gboolean play;
     gboolean played;
     gboolean opened;
+    gboolean playlist;
     guint mediasize;
     gint localsize;
     gint lastsize;
@@ -113,13 +117,16 @@ void list_mark_controlid_ready(GList * list, gint id);
 void list_mark_controlid_cancelled(GList * list, gint id, gboolean cancelled);
 void list_mark_id_played(GList * list, gint id);
 ListItem *list_find_next_playable(GList * list);
+ListItem *list_find_next_playable_after_listitem(GList * list, ListItem * find);
+ListItem *list_find_first_playable(GList * list);
 void list_qualify_url(GList * list, gchar * page_url);
 GList *list_clear(GList * list);
 void list_dump(GList * list);
-GList *list_parse_qt(GList * list, ListItem * item);
-GList *list_parse_qt2(GList * list, ListItem * item);
-GList *list_parse_asx(GList * list, ListItem * item);
-GList *list_parse_qml(GList * list, ListItem * item);   // Quick Time Media Link
-GList *list_parse_ram(GList * list, ListItem * item);   // Real Audio Playlist
+GList *list_parse_qt(GList * list, ListItem * item, gboolean detect_only);
+GList *list_parse_qt2(GList * list, ListItem * item, gboolean detect_only);
+GList *list_parse_asx(GList * list, ListItem * item, gboolean detect_only);
+GList *list_parse_qml(GList * list, ListItem * item, gboolean detect_only);     // Quick Time Media Link
+GList *list_parse_ram(GList * list, ListItem * item, gboolean detect_only);     // Real Audio Playlist
+gboolean list_item_opened(GList * list);
 
 #endif                          // _PLUGIN_LIST_H
diff --git a/src/plugin_setup.cpp b/src/plugin_setup.cpp
index b7dd560..c62b589 100644
--- a/src/plugin_setup.cpp
+++ b/src/plugin_setup.cpp
@@ -67,15 +67,16 @@ void new_instance(CPlugin * instance, int16_t argc, char *argn[], char *argv[])
     if (instance->mode == NP_EMBED) {
 
         /*
-        printf("argc = %i\n", argc);
-        for (i = 0; i < argc; i++) {
-            printf("ARG[%i]: %s = %s\n", i, argn[i], argv[i]);
-        }
-        */ 
-        
+           printf("argc = %i\n", argc);
+           for (i = 0; i < argc; i++) {
+           printf("ARG[%i]: %s = %s\n", i, argn[i], argv[i]);
+           }
+         */
+
         for (i = 0; i < argc; i++) {
 
-            printf("ARG[%i]: %s = %s\n", i, argn[i], argv[i]);
+            gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "ARG[%i]: %s = %s", i, argn[i],
+                   argv[i]);
 
             if (argn[i] == NULL)
                 continue;
@@ -128,7 +129,7 @@ void new_instance(CPlugin * instance, int16_t argc, char *argn[], char *argv[])
                 tmp = g_strrstr(argv[i], "height:");
                 if (tmp)
                     sscanf(tmp + strlen("height:"), "%i", &height);
-                printf("done with style\n");
+                gm_log(instance->debug_level, G_LOG_LEVEL_DEBUG, "done with style\n");
             }
 
 
@@ -447,7 +448,7 @@ void new_instance(CPlugin * instance, int16_t argc, char *argn[], char *argv[])
             if (argn[i] == NULL)
                 continue;
 
-            printf("ARG: %s = %s\n", argn[i], argv[i]);
+            gm_log(instance->debug_level, G_LOG_LEVEL_INFO, "ARG: %s = %s\n", argn[i], argv[i]);
 
             if (g_ascii_strcasecmp(argn[i], "src") == 0) {
                 item = g_new0(ListItem, 1);
@@ -463,7 +464,8 @@ void new_instance(CPlugin * instance, int16_t argc, char *argn[], char *argv[])
                     g_strlcpy(item->src, argv[i], 4096);
                 }
                 item->streaming = streaming(item->src);
-                printf("this should match %s\n", item->src);
+                gm_log(instance->debug_level, G_LOG_LEVEL_DEBUG, "this should match %s\n",
+                       item->src);
                 item->play = TRUE;
                 item->id = instance->nextid++;
                 instance->playlist = g_list_append(instance->playlist, item);
@@ -574,7 +576,7 @@ void new_instance(CPlugin * instance, int16_t argc, char *argn[], char *argv[])
         arg[i] = NULL;
         error = NULL;
         if (g_spawn_async(NULL, arg, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error) == FALSE) {
-            printf("Unable to launch: %s\n", error->message);
+            gm_log(TRUE, G_LOG_LEVEL_INFO, "Unable to launch: %s\n", error->message);
             g_error_free(error);
             error = NULL;
         }
diff --git a/src/plugin_types_dvx.cpp b/src/plugin_types_dvx.cpp
index 68d4e15..5bb2d24 100644
--- a/src/plugin_types_dvx.cpp
+++ b/src/plugin_types_dvx.cpp
@@ -97,5 +97,5 @@ NPError PluginGetValue(NPPVariable variable, void *value)
 
 void pluginSpecific(CPlugin * instance)
 {
-
+    instance->quicktime_emulation = FALSE;
 }
diff --git a/src/plugin_types_qt.cpp b/src/plugin_types_qt.cpp
index ae0d5ae..7ca91c6 100644
--- a/src/plugin_types_qt.cpp
+++ b/src/plugin_types_qt.cpp
@@ -102,6 +102,6 @@ void pluginSpecific(CPlugin * instance)
 {
     //printf("calling pluginSpecific for qt plugin\n");
     //setPreference(instance, "general.useragent.override", "QuickTime/7.6.9");
-    printf("Loading QuickTime compatibility\n");
+    gm_log(TRUE, G_LOG_LEVEL_INFO, "Loading QuickTime compatibility\n");
     instance->quicktime_emulation = TRUE;
 }
diff --git a/src/plugin_types_rm.cpp b/src/plugin_types_rm.cpp
index 7b7c707..67c2548 100644
--- a/src/plugin_types_rm.cpp
+++ b/src/plugin_types_rm.cpp
@@ -103,5 +103,5 @@ NPError PluginGetValue(NPPVariable variable, void *value)
 
 void pluginSpecific(CPlugin * instance)
 {
-
+    instance->quicktime_emulation = FALSE;
 }
diff --git a/src/plugin_types_wmp.cpp b/src/plugin_types_wmp.cpp
index a0f9634..ab1d214 100644
--- a/src/plugin_types_wmp.cpp
+++ b/src/plugin_types_wmp.cpp
@@ -116,5 +116,5 @@ NPError PluginGetValue(NPPVariable variable, void *value)
 
 void pluginSpecific(CPlugin * instance)
 {
-
+    instance->quicktime_emulation = FALSE;
 }

-- 
gecko-mediaplayer packaging



More information about the pkg-multimedia-commits mailing list