[girl] Add Andika Triwidada and fix Brno location.



commit cf33291c031424a6cc148ab2fcf6b17c37f1083f
Author: Ole Aamot <oka oka no>
Date:   Tue Jan 6 21:23:09 2015 +0100

    Add Andika Triwidada and fix Brno location.

 AUTHORS                          |    4 +-
 ChangeLog                        |   16 ++
 HACKING                          |   23 ++-
 LETTER                           |    6 +-
 Makefile.am                      |   12 +-
 Makefile.in                      |   12 +-
 NEWS                             |   10 +
 README                           |   32 +++-
 THANKS                           |    2 +
 TODO                             |    2 +-
 YP-DIRS                          |    2 -
 configure                        |   73 ++++----
 configure.ac                     |   32 ++--
 data/girl.appdata.xml.in         |   26 ++--
 data/icons/16x16/apps/girl.png   |  Bin 610 -> 744 bytes
 data/icons/22x22/apps/girl.png   |  Bin 1050 -> 1052 bytes
 data/icons/24x24/apps/girl.png   |  Bin 1097 -> 1087 bytes
 data/icons/256x256/apps/girl.png |  Bin 43992 -> 14492 bytes
 data/icons/32x32/apps/girl.png   |  Bin 1544 -> 1401 bytes
 data/icons/48x48/apps/girl.png   |  Bin 2988 -> 2153 bytes
 data/icons/Makefile.am           |    2 +-
 data/icons/Makefile.in           |    2 +-
 data/screenshot.png              |  Bin 113604 -> 161045 bytes
 debian/control                   |   25 ++-
 debian/control.in                |    4 +-
 girl.spec.in                     |   52 +++---
 man/Makefile                     |   10 +-
 man/girl.1                       |   13 +-
 src/Makefile.am                  |    8 +-
 src/Makefile.in                  |   12 +-
 src/girl-gui.c                   |  385 ++++++++++++++++++++++++++++++--------
 src/girl-gui.h                   |    3 +-
 src/girl-listener.c              |   34 ++--
 src/girl-program.c               |   42 ++--
 src/girl-station.c               |  160 +++++++++++++----
 src/girl-station.h               |   19 ++-
 src/girl-streams.c               |   46 +++---
 src/girl-streams.h               |    3 +-
 src/girl.c                       |  341 +++++++++++++++++++---------------
 src/girl.h                       |   35 +++--
 src/stations.xml                 |  330 +--------------------------------
 41 files changed, 960 insertions(+), 818 deletions(-)
---
diff --git a/AUTHORS b/AUTHORS
index 5f264dd..17a61d4 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,4 +1,4 @@
-Ole Aamot <oka+girl ping uio no> (Maintainer)
+Ole Aamot <ole src gnome org> (Maintainer)
 Marek Černocký <marek manet cz> (Czech translation)
 Rafael Ferreira <rafael f f1 gmail com> (Brazilian Portuguese translation)
 Мирослав Николић/Miroslav Nikolić <miroslavnikolic rocketmail com> (Serbian translation)
@@ -6,4 +6,6 @@ Wolfgang Stöggl (German translation)
 Piotr Drąg (Polish translation)
 Muhammet Kara (Turkish translation)
 Balázs Úr (Hungarian translation)
+Wiki Graphic Designer (Icon design)
 Aly Raj (Icon design)
+Andika Triwidada (Indonesian translation)
diff --git a/ChangeLog b/ChangeLog
index ecff13a..b972a6c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2015-01-06  Ole Aamot  <oka src gnome org>
+
+       * AUTHORS: Add Andika Triwidada
+       * THANKS: Add Andika Triwidada
+       * src/girl.xml: Fix Brno location.
+
+2015-01-03  Ole Aamot  <oka src gnome org>
+
+       * NEWS: girl version 1.0.0 "Fenchurch" release
+
+2015-01-01  Ole Aamot  <ole src gnome org>
+
+       * src/girl.xml: Rename src/stations.xml
+       * src/girl.xml: Add WNYO (wnyo889.org)
+       * src/girl.xml: Add WUSB (wusb.fm)
+
 2014-12-28  Ole Aamot  <oka oka no>
 
        * src/stations.xml: Add COOG (coogradio.com)
diff --git a/HACKING b/HACKING
index 7e3a5ec..1c11f10 100644
--- a/HACKING
+++ b/HACKING
@@ -2,19 +2,28 @@ Introduction to girl-list (http://mail.gnome.org/listinfo/girl-list):
 
 The initial work on this program began in 2002 at Norwegian Computing
 Center (http://www.nr.no/) and PING, a computer club at University of
-Oslo (http://www.ping.uio.no/).
+Oslo (http://www.ping.uio.no/).  Work on GIRL continued in 2014, and
+continues in 2015.
 
-The GNOME Internet Radio Locator is currently available a GNOME 2.0
-program with source code released under GNU General Public License.
+The GNOME Internet Radio Locator is currently available as a GNOME
+desktop program with source code released under GNU General Public
+License version 2.
 
-The Git source code repository is at https://git.gnome.org/girl
+The Git source code repository is at https://git.gnome.org/girl and
+the Wiki page is available at http://wiki.gnome.org/Apps/Girl
 
 You are welcome to contribute to the GNOME Internet Radio Locator code
 either by translating Girl into your language and contributing patches
-and adding new Internet radio stations in girl/src/stations.xml
+and adding new Internet radio stations in src/stations.xml
+
+The list of supported Internet radio stations are also available in
+XML format from http://girl.software/girl.xml
 
 The mailing list for discussing this program is girl-list gnome org --
-see http://mail.gnome.org/listinfo/girl-list
+see http://mail.gnome.org/listinfo/girl-list for subscription and
+https://mail.gnome.org/archives/girl-list/ for mailing list archives.
+
+Any contribution is welcome and always credited in AUTHORS and THANKS.
 
 Enjoy Internet radio,
-Ole
+Ole Aamot <ole src gnome org>
diff --git a/LETTER b/LETTER
index c201f60..3414a78 100644
--- a/LETTER
+++ b/LETTER
@@ -3,10 +3,10 @@ US citizens,
 A number of Internet radio stations are no longer broadcasting, as the
 RIAA has successfully killed them off.
 
-See http://flyingkeys.com/livewebcast/inmemoriam.html
-and http://www.saveinternetradio.org/
+See https://www.eff.org/Internet-Radio-Fairness-Act-Explanation
+and http://en.wikipedia.org/wiki/Internet_Radio_Equality_Act
 
-The Internet Radio Fairness Act has just been introduced to the U.S.
+In 2002 the Internet Radio Fairness Act was introduced to the U.S.
 congress.  If passed, this bill would allow stations to return to the
 air.  Please send a fax to your representatives asking them to support
 the Internet Radio Fairness Act. It will only take 3 minutes to fill
diff --git a/Makefile.am b/Makefile.am
index f551d41..a8c3be8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,23 +1,25 @@
-SUBDIRS = data man src po
+SUBDIRS = data man src po debian
 
 datadir = @datadir@
 
 EXTRA_DIST = config.rpath m4/ChangeLog  \
-       Makefile \
+       AUTHORS \
        ChangeLog \
+       BROADCAST \
        HACKING \
-       README \
-       YP-DIRS \
-       AUTHORS \
        LETTER \
+       Makefile \
        NEWS \
        NEWS-0.5 \
        NEWS-0.6 \
        NEWS-0.7 \
        NEWS-0.8 \
        NEWS-0.9 \
+       NEWS-1.0 \
+       README \
        THANKS \
        TODO \
+       YP-DIRS \
        girl.spec.in
 
 DISTCLEANFILES =                \
diff --git a/Makefile.in b/Makefile.in
index 2c4dac9..3df4289 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -316,23 +316,25 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = data man src po
+SUBDIRS = data man src po debian
 EXTRA_DIST = config.rpath m4/ChangeLog  \
-       Makefile \
+       AUTHORS \
        ChangeLog \
+       BROADCAST \
        HACKING \
-       README \
-       YP-DIRS \
-       AUTHORS \
        LETTER \
+       Makefile \
        NEWS \
        NEWS-0.5 \
        NEWS-0.6 \
        NEWS-0.7 \
        NEWS-0.8 \
        NEWS-0.9 \
+       NEWS-1.0 \
+       README \
        THANKS \
        TODO \
+       YP-DIRS \
        girl.spec.in
 
 DISTCLEANFILES = \
diff --git a/NEWS b/NEWS
index 42b0b8d..aee07a1 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,13 @@
+2015-01-03  Ole Aamot  <oka src gnome org>
+
+       * girl version 1.0.0 "Fenchurch" release
+
+2015-01-01  Ole Aamot  <ole src gnome org>
+
+       * src/girl.xml: Rename src/stations.xml
+       * src/girl.xml: Add WNYO (wnyo889.org)
+       * src/girl.xml: Add WUSB (wusb.fm)
+
 2014-12-28  Ole Aamot  <oka oka no>
 
        * src/stations.xml: Add EPER (eper.elte.hu)
diff --git a/README b/README
index 3f3b766..3549f84 100644
--- a/README
+++ b/README
@@ -1,19 +1,31 @@
 ==============
-GIRL 0.9 notes
+GIRL 1.0 notes
 ==============
 
-GIRL is a GNOME Internet Radio Locator program that allows the user
-to easily find and record live radio programs on radio broadcasters
-on the Internet.
+GIRL is a GNOME Internet Radio Locator program that allows the user to
+easily find and record live radio programs on radio broadcasters on
+the Internet.
 
-GIRL is developed for the GNOME desktop and requires one audio helper
+GNOME Internet Radio Locator (GIRL) version 1.0.0 ("Fenchurch") is now
+available.  The first major 1.0.0 release is dedicated to the writings
+of the English writer, humorist and dramatist Douglas Adams.
+
+GIRL 1.0.0 supports search by location for the 42 supported radio
+stations.  42 is Douglas Adams' Answer to Life, the Universe and
+Everything in book The Hitchhiker's Guide to the Galaxy.  Life is
+finite.  The Universe is infinite.  Listen to and/or record Everything
+that is broadcasted live from 42 radio stations on Earth included with
+this program.
+
+GIRL was developed for the GNOME desktop and requires one audio helper
 such as Totem (https://developer.gnome.org/totem/) to be installed for
-playback and streamripper (http://streamripper.sourceforge.net/) to be
-installed for recording live radio streams of supported radio stations
-(http://girl.software/stations.xml)
+playback and StreamRipper (http://streamripper.sourceforge.net/) to be
+installed for recording live radio streams of supported radio stations.
+
+The station list is available in XML from http://girl.software/girl.xml
 
-A user without root on a GNOME desktop can add his or her personal
-Stations in $HOME/.girl/stations.xml
+A user without root on a GNOME desktop can add his or her Favourite
+Stations in $HOME/.girl/girl.xml (see src/girl.xml for the syntax).
 
 If a user starts the program and exits the program, then the last radio
 station that the user was listening to, appears selected in the Stations
diff --git a/THANKS b/THANKS
index 4375b7a..0b4aa42 100644
--- a/THANKS
+++ b/THANKS
@@ -8,4 +8,6 @@ Ettore Perazzoli (June 15, 1974 - December 10, 2003) for GNOME VFS.
 Bernd Homuth for minor spelling correction.
 Muhammet Kara for Turkish translation.
 Balázs Úr for Hungarian translation.
+Wiki Graphic Designer for icon design.
 Aly Raj for icon design.
+Andika Triwidada for Indonesian translation.
diff --git a/TODO b/TODO
index 42a7549..b9345aa 100644
--- a/TODO
+++ b/TODO
@@ -7,5 +7,5 @@ TODO for the GNOME Internet Radio Locator program
 - Locate radio-on-demand services
 - Specify favourite radio station
 - Listening statistics for stations
-- Local archive on demand with soundmarks
+- Local archive on demand with soundmarks and tags.
 - Search local archive
diff --git a/YP-DIRS b/YP-DIRS
index d88ecda..1164dd4 100644
--- a/YP-DIRS
+++ b/YP-DIRS
@@ -1,5 +1,3 @@
-http://directory.google.com/Top/Arts/Music/Sound_Files/MP3/Streaming/Directories/
-
 * yp.shoutcast.com
 * yp.breakfree.com
 * yp.musicseek.net
diff --git a/configure b/configure
index b76fbea..53e4970 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for girl 0.9.0.
+# Generated by GNU Autoconf 2.69 for girl 1.0.0.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='girl'
 PACKAGE_TARNAME='girl'
-PACKAGE_VERSION='0.9.0'
-PACKAGE_STRING='girl 0.9.0'
+PACKAGE_VERSION='1.0.0'
+PACKAGE_STRING='girl 1.0.0'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1329,7 +1329,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures girl 0.9.0 to adapt to many kinds of systems.
+\`configure' configures girl 1.0.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1395,7 +1395,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of girl 0.9.0:";;
+     short | recursive ) echo "Configuration of girl 1.0.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1499,7 +1499,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-girl configure 0.9.0
+girl configure 1.0.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1864,7 +1864,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by girl $as_me 0.9.0, which was
+It was created by girl $as_me 1.0.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2727,7 +2727,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='girl'
- VERSION='0.9.0'
+ VERSION='1.0.0'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3863,7 +3863,6 @@ else
 fi
 
 
-# AC_PROG_LIBTOOL
 
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}totem", so it can be a program name with args.
@@ -3968,6 +3967,7 @@ record_msg="no (http://streamripper.sf.net/)"
 try_record=:
 girl_record=false
 
+
 # Check whether --with-recording was given.
 if test "${with_recording+set}" = set; then :
   withval=$with_recording;
@@ -3979,7 +3979,6 @@ if test "${with_recording+set}" = set; then :
 fi
 
 record_prefix=$ac_default_prefix
-
 if $try_record; then
    if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}streamripper", so it can be a program name with args.
@@ -3995,7 +3994,7 @@ else
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR                                         
/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc
+for as_dir in $PATH$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR                                     
/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
@@ -4038,7 +4037,7 @@ else
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR                                         
/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc
+for as_dir in $PATH$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR                                     
/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
@@ -4065,7 +4064,7 @@ $as_echo "no" >&6; }
 fi
 
   if test "x$ac_pt_GIRL_HELPER_RECORD" = x; then
-    GIRL_HELPER_RECORD="/usr/bin/streamripper"
+    GIRL_HELPER_RECORD="no"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -4079,21 +4078,21 @@ else
   GIRL_HELPER_RECORD="$ac_cv_path_GIRL_HELPER_RECORD"
 fi
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recording" >&5
-$as_echo_n "checking for recording... " >&6; }
-       if test -n "${GIRL_HELPER_RECORD}"; then
+       if test x${GIRL_HELPER_RECORD} = xno; then
 
-$as_echo "#define HAVE_GIRL_RECORD 1" >>confdefs.h
+$as_echo "#define HAVE_GIRL_RECORD 0" >>confdefs.h
 
-          record_msg="yes"
-          girl_record=true
+          record_msg="no (http://streamripper.sf.net/)"
+          girl_record=false
        else
 
-$as_echo "#define HAVE_GIRL_RECORD 0" >>confdefs.h
+$as_echo "#define HAVE_GIRL_RECORD 1" >>confdefs.h
 
-          record_msg="no (http://streamripper.sf.net/)"
-          girl_record=false
-        fi
+          record_msg="yes"
+          girl_record=true
+       fi
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recording" >&5
+$as_echo_n "checking for recording... " >&6; }
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $record_msg" >&5
 $as_echo "$record_msg" >&6; }
 fi
@@ -4238,13 +4237,13 @@ if test -n "$GIRL_CFLAGS"; then
     pkg_cv_GIRL_CFLAGS="$GIRL_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.0 \\
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.0 \\
                  libgnome-2.0 >= 2.0 \\
                  libxml-2.0 >= 2.0 \\
                  gnome-vfs-2.0 >= 2.0 \\
                  libgnomeui-2.0 >= 2.0 \\
                  libgnomecanvas-2.0 >= 2.0\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.0 \
+  ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.0 \
                  libgnome-2.0 >= 2.0 \
                  libxml-2.0 >= 2.0 \
                  gnome-vfs-2.0 >= 2.0 \
@@ -4253,7 +4252,7 @@ if test -n "$GIRL_CFLAGS"; then
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GIRL_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.0 \
+  pkg_cv_GIRL_CFLAGS=`$PKG_CONFIG --cflags "gtk+-3.0 >= 3.0 \
                  libgnome-2.0 >= 2.0 \
                  libxml-2.0 >= 2.0 \
                  gnome-vfs-2.0 >= 2.0 \
@@ -4270,13 +4269,13 @@ if test -n "$GIRL_LIBS"; then
     pkg_cv_GIRL_LIBS="$GIRL_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.0 \\
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.0 \\
                  libgnome-2.0 >= 2.0 \\
                  libxml-2.0 >= 2.0 \\
                  gnome-vfs-2.0 >= 2.0 \\
                  libgnomeui-2.0 >= 2.0 \\
                  libgnomecanvas-2.0 >= 2.0\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.0 \
+  ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.0 \
                  libgnome-2.0 >= 2.0 \
                  libxml-2.0 >= 2.0 \
                  gnome-vfs-2.0 >= 2.0 \
@@ -4285,7 +4284,7 @@ if test -n "$GIRL_LIBS"; then
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GIRL_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.0 \
+  pkg_cv_GIRL_LIBS=`$PKG_CONFIG --libs "gtk+-3.0 >= 3.0 \
                  libgnome-2.0 >= 2.0 \
                  libxml-2.0 >= 2.0 \
                  gnome-vfs-2.0 >= 2.0 \
@@ -4311,14 +4310,14 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               GIRL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= 2.0 \
+               GIRL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-3.0 >= 3.0 \
                  libgnome-2.0 >= 2.0 \
                  libxml-2.0 >= 2.0 \
                  gnome-vfs-2.0 >= 2.0 \
                  libgnomeui-2.0 >= 2.0 \
                  libgnomecanvas-2.0 >= 2.0" 2>&1`
         else
-               GIRL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= 2.0 \
+               GIRL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-3.0 >= 3.0 \
                  libgnome-2.0 >= 2.0 \
                  libxml-2.0 >= 2.0 \
                  gnome-vfs-2.0 >= 2.0 \
@@ -4328,7 +4327,7 @@ fi
        # Put the nasty error message in config.log where it belongs
        echo "$GIRL_PKG_ERRORS" >&5
 
-       as_fn_error $? "Package requirements (gtk+-2.0 >= 2.0 \
+       as_fn_error $? "Package requirements (gtk+-3.0 >= 3.0 \
                  libgnome-2.0 >= 2.0 \
                  libxml-2.0 >= 2.0 \
                  gnome-vfs-2.0 >= 2.0 \
@@ -6167,7 +6166,7 @@ _ACEOF
 
 
 
-ac_config_files="$ac_config_files Makefile data/Makefile data/girl.desktop.in data/pixmaps/Makefile 
data/icons/Makefile data/icons/16x16/Makefile data/icons/22x22/Makefile data/icons/24x24/Makefile 
data/icons/32x32/Makefile data/icons/48x48/Makefile data/icons/256x256/Makefile man/Makefile po/Makefile.in 
src/Makefile girl.spec"
+ac_config_files="$ac_config_files Makefile data/Makefile data/girl.desktop.in data/pixmaps/Makefile 
data/icons/Makefile data/icons/16x16/Makefile data/icons/22x22/Makefile data/icons/24x24/Makefile 
data/icons/32x32/Makefile data/icons/48x48/Makefile data/icons/256x256/Makefile data/icons/512x512/Makefile 
data/icons/1024x1024/Makefile debian/Makefile debian/source/Makefile man/Makefile po/Makefile.in src/Makefile 
girl.spec"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -6707,7 +6706,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by girl $as_me 0.9.0, which was
+This file was extended by girl $as_me 1.0.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6773,7 +6772,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-girl config.status 0.9.0
+girl config.status 1.0.0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -6917,6 +6916,10 @@ do
     "data/icons/32x32/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/32x32/Makefile" ;;
     "data/icons/48x48/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/48x48/Makefile" ;;
     "data/icons/256x256/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/256x256/Makefile" ;;
+    "data/icons/512x512/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/512x512/Makefile" ;;
+    "data/icons/1024x1024/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/1024x1024/Makefile" ;;
+    "debian/Makefile") CONFIG_FILES="$CONFIG_FILES debian/Makefile" ;;
+    "debian/source/Makefile") CONFIG_FILES="$CONFIG_FILES debian/source/Makefile" ;;
     "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
     "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
     "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index 5fef24c..6155c5b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,14 +2,13 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT(girl, 0.9.0)
+AC_INIT(girl, 1.0.0)
 AM_INIT_AUTOMAKE([no-dist-gzip dist-xz])
 AC_CONFIG_SRCDIR([src/girl.c])
 AC_CONFIG_HEADER([config.h])
 
 # Checks for programs.
 AC_PROG_CC
-# AC_PROG_LIBTOOL
 
 AC_PATH_TOOL([GIRL_HELPER_PLAYER], [totem], [/usr/bin/totem],
              [$PATH$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR]dnl
@@ -18,6 +17,7 @@ AC_PATH_TOOL([GIRL_HELPER_PLAYER], [totem], [/usr/bin/totem],
 record_msg="no (http://streamripper.sf.net/)"
 try_record=:
 girl_record=false
+
 AC_ARG_WITH([recording],AS_HELP_STRING([--with-recording],[Support recording with streamripper]), [
        if test x$withval = xno; then
           try_record=false
@@ -25,21 +25,21 @@ AC_ARG_WITH([recording],AS_HELP_STRING([--with-recording],[Support recording wit
        fi
 ])
 record_prefix=$ac_default_prefix
-
 if $try_record; then
-   AC_PATH_TOOL([GIRL_HELPER_RECORD], [streamripper], [/usr/bin/streamripper],
-                                          [$PATH$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR]dnl
-                                          [/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc])
-       AC_MSG_CHECKING([for recording])
-       if test -n "${GIRL_HELPER_RECORD}"; then
+   AC_PATH_TOOL([GIRL_HELPER_RECORD], [streamripper],
+                                      [no],
+                                      [$PATH$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR]dnl
+                                      [/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc])
+       if test x${GIRL_HELPER_RECORD} = xno; then
+          AC_DEFINE([HAVE_GIRL_RECORD],0,[don't have record])
+          record_msg="no (http://streamripper.sf.net/)"
+          girl_record=false
+       else
           AC_DEFINE([HAVE_GIRL_RECORD],1,[have record])
           record_msg="yes"
           girl_record=true
-       else
-          AC_DEFINE([HAVE_GIRL_RECORD],0,[don't have record])
-          record_msg="no (http://streamripper.sf.net/)"
-          girl_record=false
-        fi
+       fi
+       AC_MSG_CHECKING([for recording])
        AC_MSG_RESULT([$record_msg])
 fi
 AM_CONDITIONAL([HAVE_GIRL_RECORD], [$girl_record])
@@ -48,7 +48,7 @@ AC_SUBST([HAVE_GIRL_RECORD])
 # Checks for libraries.
 
 PKG_CHECK_MODULES(GIRL,
-                 gtk+-2.0 >= 2.0 \
+                 gtk+-3.0 >= 3.0 \
                  libgnome-2.0 >= 2.0 \
                  libxml-2.0 >= 2.0 \
                  gnome-vfs-2.0 >= 2.0 \
@@ -94,6 +94,10 @@ data/icons/24x24/Makefile
 data/icons/32x32/Makefile
 data/icons/48x48/Makefile
 data/icons/256x256/Makefile
+data/icons/512x512/Makefile
+data/icons/1024x1024/Makefile
+debian/Makefile
+debian/source/Makefile
 man/Makefile
 po/Makefile.in
 src/Makefile
diff --git a/data/girl.appdata.xml.in b/data/girl.appdata.xml.in
index 702ddfa..01e14f9 100644
--- a/data/girl.appdata.xml.in
+++ b/data/girl.appdata.xml.in
@@ -3,18 +3,20 @@
   <id type="desktop">girl.desktop</id>
   <licence>CC0</licence>
   <description>
-    <_p>
-      Girl, the GNOME Internet Radio Locator program, allows users
-      to easily find live radio programs on radio broadcasters on
-      the Internet.
-    </_p>
-    <_p>
-      Girl is developed on the GNOME platform and requires
-      at least one audio helper such as totem to be installed.
-    </_p>
-    <_p>
-      Enjoy Internet Radio.
-    </_p>
+    <p>
+      Girl, the GNOME Internet Radio Locator program, allows users to
+      easily find and record live radio programs on radio broadcasters
+      on the Internet.
+    </p>
+    <p>
+      Girl is developed for the GNOME desktop and requires one audio
+      helper such as Totem to be installed for playback and
+      streamripper to be installed for recording live radio streams of
+      supported radio stations.
+    </p>
+    <p>
+      Enjoy listening to and recording from supported Internet Radio stations in Girl.
+    </p>
   </description>
   <url type="homepage">https://wiki.gnome.org/Apps/Girl</url>
   <screenshots>
diff --git a/data/icons/16x16/apps/girl.png b/data/icons/16x16/apps/girl.png
index 43e7d14..3c912df 100644
Binary files a/data/icons/16x16/apps/girl.png and b/data/icons/16x16/apps/girl.png differ
diff --git a/data/icons/22x22/apps/girl.png b/data/icons/22x22/apps/girl.png
index 80dfe71..3e1447a 100644
Binary files a/data/icons/22x22/apps/girl.png and b/data/icons/22x22/apps/girl.png differ
diff --git a/data/icons/24x24/apps/girl.png b/data/icons/24x24/apps/girl.png
index cb44928..2268c33 100644
Binary files a/data/icons/24x24/apps/girl.png and b/data/icons/24x24/apps/girl.png differ
diff --git a/data/icons/256x256/apps/girl.png b/data/icons/256x256/apps/girl.png
index b3caed5..5d4f49e 100644
Binary files a/data/icons/256x256/apps/girl.png and b/data/icons/256x256/apps/girl.png differ
diff --git a/data/icons/32x32/apps/girl.png b/data/icons/32x32/apps/girl.png
index 7490091..a9b9dd5 100644
Binary files a/data/icons/32x32/apps/girl.png and b/data/icons/32x32/apps/girl.png differ
diff --git a/data/icons/48x48/apps/girl.png b/data/icons/48x48/apps/girl.png
index 80c9aa5..ced88c3 100644
Binary files a/data/icons/48x48/apps/girl.png and b/data/icons/48x48/apps/girl.png differ
diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am
index e295b23..fddfa38 100644
--- a/data/icons/Makefile.am
+++ b/data/icons/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = 16x16 22x22 24x24 32x32 48x48 256x256
+SUBDIRS = 16x16 22x22 24x24 32x32 48x48 256x256 512x512 1024x1024
 
 gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
 
diff --git a/data/icons/Makefile.in b/data/icons/Makefile.in
index 440a645..e7b3980 100644
--- a/data/icons/Makefile.in
+++ b/data/icons/Makefile.in
@@ -292,7 +292,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = 16x16 22x22 24x24 32x32 48x48 256x256
+SUBDIRS = 16x16 22x22 24x24 32x32 48x48 256x256 512x512 1024x1024
 gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
 all: all-recursive
 
diff --git a/data/screenshot.png b/data/screenshot.png
index 4cec0b4..884fdce 100644
Binary files a/data/screenshot.png and b/data/screenshot.png differ
diff --git a/debian/control b/debian/control
index e261395..0e91636 100644
--- a/debian/control
+++ b/debian/control
@@ -1,16 +1,25 @@
 Source: girl
 Section: gnome
-Priority: extra
+Priority: optional
 Maintainer: Ole Aamot <ole src gnome org>
-Build-Depends: debhelper (>> 9.0.0), pkg-config (>> 0.28-0), libgtk2.0-0 (>> 2.24.25-0), libgnome2-dev (>> 
2.32.1-4), libxml2-dev (>> 2.9.0), libgnomevfs2-dev (>> 2.24.5), libgnomeui-dev (>> 2.24.5), intltool (>> 
0.50.2)
 Standards-Version: 3.9.6
+Homepage: https://wiki.gnome.org/Apps/Girl
+Build-Depends: debhelper (>> 9.0.0),
+              pkg-config (>> 0.28-0),
+              libgtk-3-dev (>> 3.14.5-1),
+              libgnome2-dev (>> 2.32.1-4),
+              libxml2-dev (>> 2.9.0),
+              libgnomevfs2-dev (>> 2.24.5),
+              libgnomeui-dev (>> 2.24.5),
+              intltool (>> 0.50.2)
 
 Package: girl
-Section: gnome
 Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, totem (>> 3.14.0), streamripper (>> 1.64.6)
+Depends: ${shlibs:Depends},
+        ${misc:Depends},
+        totem (>> 3.14.0),
+        streamripper (>> 1.64.6)
 Description: GNOME Internet Radio Locator
- The GNOME Internet Radio Locator program, allows users to easily find
- and record live radio programs on radio broadcasters on the Internet.
- .
- This package provides the GNOME Internet Radio Locator program.
+ girl or the GNOME Internet Radio Locator program allows users to
+ easily find and record live radio programs on radio broadcasters
+ on the Internet.
diff --git a/debian/control.in b/debian/control.in
index c8f007a..0e91636 100644
--- a/debian/control.in
+++ b/debian/control.in
@@ -6,15 +6,15 @@ Standards-Version: 3.9.6
 Homepage: https://wiki.gnome.org/Apps/Girl
 Build-Depends: debhelper (>> 9.0.0),
               pkg-config (>> 0.28-0),
-              libgtk2.0-0 (>> 2.24.25-0),
+              libgtk-3-dev (>> 3.14.5-1),
               libgnome2-dev (>> 2.32.1-4),
               libxml2-dev (>> 2.9.0),
               libgnomevfs2-dev (>> 2.24.5),
               libgnomeui-dev (>> 2.24.5),
               intltool (>> 0.50.2)
+
 Package: girl
 Architecture: any
-Section: gnome
 Depends: ${shlibs:Depends},
         ${misc:Depends},
         totem (>> 3.14.0),
diff --git a/girl.spec.in b/girl.spec.in
index 27bd755..66b0b4d 100644
--- a/girl.spec.in
+++ b/girl.spec.in
@@ -6,14 +6,9 @@ License: GPLv2+
 URL: http://girl.software/
 Group: Applications/Internet
 Source: http://girl.software/@PACKAGE -@VERSION  tar xz
-Requires: gtk2 >= 2.24.24
-Requires: libgnome >= 2.32.1
-Requires: libxml2 >= 2.9.1
-Requires: gnome-vfs2 >= 2.24.4
-Requires: libgnomeui >= 2.24.5
 Requires: totem >= 3.10.1
 Requires: streamripper >= 1.64.6
-BuildRequires: gtk2-devel libgnome-devel libxml2-devel gnome-vfs2-devel libgnomeui-devel intltool
+BuildRequires: gtk2-devel libgnome-devel libxml2-devel gnome-vfs2-devel libgnomeui-devel intltool 
libappstream-glib desktop-file-utils
 
 %description
 Girl is a GNOME Internet Radio Locator program that allows the user
@@ -36,32 +31,22 @@ Enjoy Internet Radio.
 %install
 
 %make_install
-make DESTDIR=%{buildroot} install
+
+%check
+appstream-util validate-relax --nonet %{buildroot}/%{_datadir}/appdata/girl.appdata.xml
+desktop-file-validate %{buildroot}/%{_datadir}/applications/girl.desktop
+
+/usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 
 %find_lang %{name} --with-man
 
 %files -f %{name}.lang
 %doc AUTHORS COPYING LETTER NEWS README TODO YP-DIRS
-%lang(cs)
-%lang(pt_BR)
 %{_bindir}/girl
-%{_datadir}/girl/girl-0.1.dtd
-%{_datadir}/girl/girl-0.2.dtd
-%{_datadir}/girl/girl-0.3.dtd
-%{_datadir}/girl/girl-0.4.dtd
-%{_datadir}/girl/girl-0.5.dtd
-%{_datadir}/girl/girl-0.6.dtd
-%{_datadir}/girl/girl-0.7.dtd
-%{_datadir}/girl/girl-0.8.dtd
+%{_datadir}/girl/girl-1.0.dtd
 %{_datadir}/girl/girl-logo.png
 %{_datadir}/girl/girl.png
-%{_datadir}/girl/listener-1.0.dtd
-%{_datadir}/girl/listener-1.1.dtd
-%{_datadir}/girl/listeners.xml
-%{_datadir}/girl/programs-0.1.dtd
-%{_datadir}/girl/programs.xml
-%{_datadir}/girl/stations.xml
-%{_datadir}/girl/streams.xml
+%{_datadir}/girl/girl.xml
 %{_datadir}/appdata/girl.appdata.xml
 %{_datadir}/applications/girl.desktop
 %{_datadir}/girl/pixmaps/girl-map.png
@@ -71,9 +56,26 @@ make DESTDIR=%{buildroot} install
 %{_datadir}/icons/hicolor/32x32/apps/girl.png
 %{_datadir}/icons/hicolor/48x48/apps/girl.png
 %{_datadir}/icons/hicolor/256x256/apps/girl.png
-%{_mandir}/man1/girl.1.gz
+%{_datadir}/icons/hicolor/512x512/apps/girl.png
+%{_datadir}/icons/hicolor/1024x1024/apps/girl.png
+%{_mandir}/man1/girl.1*
+
+%post
+/bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
+
+%postun
+if [ $1 -eq 0 ] ; then
+    /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null
+    /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
+fi
+
+%posttrans
+/usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 
 %changelog
+* Thu Jan 01 2015 Ole Aamot - 1.0.0-1
+* Girl 1.0.0 build on Fedora Linux 21
+
 * Sat Dec 27 2014 Ole Aamot - 0.9.0-1
 - Girl 0.9.0 build on Fedora Linux 21
 
diff --git a/man/Makefile b/man/Makefile
index 2c79cac..446524d 100644
--- a/man/Makefile
+++ b/man/Makefile
@@ -163,10 +163,10 @@ ECHO_T =
 EGREP = /usr/bin/grep -E
 EXEEXT = 
 GETTEXT_PACKAGE = girl
-GIRL_CFLAGS = -D_REENTRANT -DORBIT2=1 -pthread -I/usr/include/libgnomeui-2.0 -I/usr/include/gnome-keyring-1 
-I/usr/include/libbonoboui-2.0 -I/usr/include/libxml2 -I/usr/include/libgnome-2.0 
-I/usr/include/libbonobo-2.0 -I/usr/include/bonobo-activation-2.0 -I/usr/include/orbit-2.0 
-I/usr/include/gnome-vfs-2.0 -I/usr/lib64/gnome-vfs-2.0/include -I/usr/include/gconf/2 
-I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -I/usr/include/libgnomecanvas-2.0 
-I/usr/include/gail-1.0 -I/usr/include/libart-2.0 -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include 
-I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 
-I/usr/include/libdrm -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/pango-1.0 
-I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include 
-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 
+GIRL_CFLAGS = -D_REENTRANT -DORBIT2=1 -pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 
-I/usr/include/at-spi-2.0 -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo 
-I/usr/include/libgnomeui-2.0 -I/usr/include/gnome-keyring-1 -I/usr/include/libbonoboui-2.0 
-I/usr/include/libxml2 -I/usr/include/libgnome-2.0 -I/usr/include/libbonobo-2.0 
-I/usr/include/bonobo-activation-2.0 -I/usr/include/orbit-2.0 -I/usr/include/gnome-vfs-2.0 
-I/usr/lib64/gnome-vfs-2.0/include -I/usr/include/gconf/2 -I/usr/include/dbus-1.0 
-I/usr/lib64/dbus-1.0/include -I/usr/include/libgnomecanvas-2.0 -I/usr/include/gail-1.0 
-I/usr/include/libart-2.0 -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/pango-1.0 
-I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/libdrm 
-I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz 
-I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib6
 4/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 
-I/usr/include/libpng16 
 GIRL_HELPER_PLAYER = /usr/bin/totem
 GIRL_HELPER_RECORD = /usr/bin/streamripper
-GIRL_LIBS = -lxml2 -lgnomeui-2 -lSM -lICE -lbonoboui-2 -lgnome-2 -lpopt -lbonobo-2 -lbonobo-activation 
-lORBit-2 -lgnomevfs-2 -lgconf-2 -lgthread-2.0 -pthread -lgmodule-2.0 -pthread -lgnomecanvas-2 -lart_lgpl_2 
-lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 
-lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype 
+GIRL_LIBS = -lgtk-3 -lgdk-3 -lcairo-gobject -lxml2 -lgnomeui-2 -lSM -lICE -lbonoboui-2 -lgnome-2 -lpopt 
-lbonobo-2 -lbonobo-activation -lORBit-2 -lgnomevfs-2 -lgconf-2 -lgthread-2.0 -pthread -lgmodule-2.0 -pthread 
-lgnomecanvas-2 -lart_lgpl_2 -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 
-lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype 
 GIRL_PKG_DEPS = gtk+-2.0, libgnome-2.0, libxml-2.0, gnome-vfs-2.0, libgnomeui-2.0 libgnomecanvas-2.0
 GMOFILES = 
 GMSGFMT = /usr/bin/msgfmt
@@ -201,10 +201,10 @@ OBJEXT = o
 PACKAGE = girl
 PACKAGE_BUGREPORT = 
 PACKAGE_NAME = girl
-PACKAGE_STRING = girl 0.9.0
+PACKAGE_STRING = girl 1.0.0
 PACKAGE_TARNAME = girl
 PACKAGE_URL = 
-PACKAGE_VERSION = 0.9.0
+PACKAGE_VERSION = 1.0.0
 PATH_SEPARATOR = :
 PKG_CONFIG = /usr/bin/pkg-config
 PKG_CONFIG_LIBDIR = 
@@ -217,7 +217,7 @@ SET_MAKE =
 SHELL = /bin/sh
 STRIP = 
 USE_NLS = yes
-VERSION = 0.9.0
+VERSION = 1.0.0
 XGETTEXT = /usr/bin/xgettext
 abs_builddir = /home/oka/git/gnome/girl/man
 abs_srcdir = /home/oka/git/gnome/girl/man
diff --git a/man/girl.1 b/man/girl.1
index 5e281a3..4152a7c 100644
--- a/man/girl.1
+++ b/man/girl.1
@@ -1,7 +1,7 @@
 .\" Man Page for gPhoto by scott... :)
 .\" groff -man -Tascii foo.1
 .\"
-.TH GIRL 1 "NOVEMBER 2014" GNOME "User Manuals"
+.TH GIRL 1 "JANUARY 2015" GNOME "User Manuals"
 .SH NAME
 girl \- GNOME Internet Radio Locator
 .SH SYNOPSIS
@@ -9,18 +9,22 @@ girl \- GNOME Internet Radio Locator
 .br
 .SH DESCRIPTION
 .B girl,
-the GNOME Internet Radio Locator program, allows users to easily find live radio programs on radio 
broadcasters on the Internet.
+the GNOME Internet Radio Locator program, allows users to easily listen to and record from live radio 
programs on radio broadcasters on the Internet.
 .SH MOTIVATION
 The motivation behind this program is to support the user with easy access to independent, free Internet 
radio stations around the world. Enjoy Internet Radio.
 .SH PLATFORM
 .B girl
-is developed on the new GNOME 2.0 platform and requires at least one audio helper such as totem to be 
installed.
+is developed for the GNOME desktop and requires one audio helper such
+as Totem (https://developer.gnome.org/totem/) to be installed for
+playback and streamripper (http://streamripper.sourceforge.net/) to be
+installed for recording live radio streams of supported radio
+stations.
 .SH USAGE
 .IP girl
 .I "\--help"
 display help screen
 .SH LOCAL STATIONS FILE
-.I $HOME/.girl/stations.xml
+.I $HOME/.girl/girl.xml
 .RS
 Radio station XML file
 .SH STATION CONFIGURATION FILE
@@ -36,3 +40,4 @@ https://git.gnome.org/girl
 Ole Aamot <ole src gnome org>
 .SH "SEE ALSO"
 .BR totem
+.BR streamripper
diff --git a/src/Makefile.am b/src/Makefile.am
index d056c65..d099b80 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,13 +1,13 @@
-GOAL_CFLAGS=`pkg-config --cflags gtk+-2.0 libgnome-2.0 libxml-2.0 gnome-vfs-2.0 libgnomeui-2.0 
libgnomecanvas-2.0` -Wall -g -DHAVE_CONFIG_H -I. -DGNOMELOCALEDIR=\""`pkg-config --variable=prefix 
libgnomeui-2.0`/share/locale"\" -DDATADIR=\""`pkg-config --variable=prefix libgnomeui-2.0`/share"\" 
-DGIRL_DEBUG -DGIRL_CFG -DGIRL_HELPER_PLAYER=\"$(GIRL_HELPER_PLAYER)\" 
-DGIRL_HELPER_RECORD=\"$(GIRL_HELPER_RECORD)\"
+GOAL_CFLAGS=`pkg-config --cflags gtk+-2.0 libgnome-2.0 libxml-2.0 gnome-vfs-2.0 libgnomeui-2.0 
libgnomecanvas-2.0` -Wall -g -DHAVE_CONFIG_H -I. -DGNOMELOCALEDIR=\""`pkg-config --variable=prefix 
libgnomeui-2.0`/share/locale"\" -DGIRL_DATADIR=\""$(prefix)/share/girl"\" -DDATADIR=\""`pkg-config 
--variable=prefix libgnomeui-2.0`/share"\" -DGIRL_DEBUG=1 -DGIRL_CFG 
-DGIRL_HELPER_PLAYER=\"$(GIRL_HELPER_PLAYER)\" -DGIRL_HELPER_RECORD=\"$(GIRL_HELPER_RECORD)\"
 GOAL_LIBS=`pkg-config --libs gtk+-2.0 libgnome-2.0 libxml-2.0 gnome-vfs-2.0 libgnomeui-2.0 
libgnomecanvas-2.0`
 
 AM_CFLAGS = $(GOAL_CFLAGS)
 AM_LDFLAGS= $(GOAL_LIBS)
 
 bin_PROGRAMS = girl
-girl_SOURCES = girl.c girl-gui.c girl-listener.c girl-program.c girl-runners.c girl-station.c girl-streams.c 
girl-canvas.c
+girl_SOURCES = girl.c girl-gui.c girl-listener.c girl-program.c girl-runners.c girl-streams.c girl-canvas.c 
girl-station.c
 
 girldir = $(datadir)/girl
-girl_DATA = listeners.xml programs.xml stations.xml streams.xml girl-0.1.dtd girl-0.2.dtd girl-0.3.dtd 
girl-0.4.dtd girl-0.5.dtd girl-0.6.dtd girl-0.7.dtd girl-0.8.dtd listener-1.0.dtd listener-1.1.dtd 
programs-0.1.dtd girl-logo.png girl.png
+girl_DATA = girl-1.0.dtd girl-logo.png girl.png girl.xml
 
-EXTRA_DIST = girl.h girl-gui.h girl-listener.h girl-program.h girl-runners.h girl-station.h girl-streams.h 
girl-canvas.h listeners.xml programs.xml stations.xml streams.xml girl-0.1.dtd girl-0.2.dtd girl-0.3.dtd 
girl-0.4.dtd girl-0.5.dtd girl-0.6.dtd girl-0.7.dtd girl-0.8.dtd listener-1.0.dtd listener-1.1.dtd 
programs-0.1.dtd girl-logo.png girl.png
+EXTRA_DIST = girl.h girl-station.h girl-gui.h girl-listener.h girl-program.h girl-runners.h girl-streams.h 
girl-canvas.h girl-1.0.dtd girl-logo.png girl.png girl.xml
diff --git a/src/Makefile.in b/src/Makefile.in
index abe59e2..686b2bd 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -94,8 +94,8 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(girldir)"
 PROGRAMS = $(bin_PROGRAMS)
 am_girl_OBJECTS = girl.$(OBJEXT) girl-gui.$(OBJEXT) \
        girl-listener.$(OBJEXT) girl-program.$(OBJEXT) \
-       girl-runners.$(OBJEXT) girl-station.$(OBJEXT) \
-       girl-streams.$(OBJEXT) girl-canvas.$(OBJEXT)
+       girl-runners.$(OBJEXT) girl-streams.$(OBJEXT) \
+       girl-canvas.$(OBJEXT) girl-station.$(OBJEXT)
 girl_OBJECTS = $(am_girl_OBJECTS)
 girl_LDADD = $(LDADD)
 AM_V_P = $(am__v_P_ AM_V@)
@@ -306,14 +306,14 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-GOAL_CFLAGS = `pkg-config --cflags gtk+-2.0 libgnome-2.0 libxml-2.0 gnome-vfs-2.0 libgnomeui-2.0 
libgnomecanvas-2.0` -Wall -g -DHAVE_CONFIG_H -I. -DGNOMELOCALEDIR=\""`pkg-config --variable=prefix 
libgnomeui-2.0`/share/locale"\" -DDATADIR=\""`pkg-config --variable=prefix libgnomeui-2.0`/share"\" 
-DGIRL_DEBUG -DGIRL_CFG -DGIRL_HELPER_PLAYER=\"$(GIRL_HELPER_PLAYER)\" 
-DGIRL_HELPER_RECORD=\"$(GIRL_HELPER_RECORD)\"
+GOAL_CFLAGS = `pkg-config --cflags gtk+-2.0 libgnome-2.0 libxml-2.0 gnome-vfs-2.0 libgnomeui-2.0 
libgnomecanvas-2.0` -Wall -g -DHAVE_CONFIG_H -I. -DGNOMELOCALEDIR=\""`pkg-config --variable=prefix 
libgnomeui-2.0`/share/locale"\" -DGIRL_DATADIR=\""$(prefix)/share/girl"\" -DDATADIR=\""`pkg-config 
--variable=prefix libgnomeui-2.0`/share"\" -DGIRL_DEBUG=1 -DGIRL_CFG 
-DGIRL_HELPER_PLAYER=\"$(GIRL_HELPER_PLAYER)\" -DGIRL_HELPER_RECORD=\"$(GIRL_HELPER_RECORD)\"
 GOAL_LIBS = `pkg-config --libs gtk+-2.0 libgnome-2.0 libxml-2.0 gnome-vfs-2.0 libgnomeui-2.0 
libgnomecanvas-2.0`
 AM_CFLAGS = $(GOAL_CFLAGS)
 AM_LDFLAGS = $(GOAL_LIBS)
-girl_SOURCES = girl.c girl-gui.c girl-listener.c girl-program.c girl-runners.c girl-station.c girl-streams.c 
girl-canvas.c
+girl_SOURCES = girl.c girl-gui.c girl-listener.c girl-program.c girl-runners.c girl-streams.c girl-canvas.c 
girl-station.c
 girldir = $(datadir)/girl
-girl_DATA = listeners.xml programs.xml stations.xml streams.xml girl-0.1.dtd girl-0.2.dtd girl-0.3.dtd 
girl-0.4.dtd girl-0.5.dtd girl-0.6.dtd girl-0.7.dtd girl-0.8.dtd listener-1.0.dtd listener-1.1.dtd 
programs-0.1.dtd girl-logo.png girl.png
-EXTRA_DIST = girl.h girl-gui.h girl-listener.h girl-program.h girl-runners.h girl-station.h girl-streams.h 
girl-canvas.h listeners.xml programs.xml stations.xml streams.xml girl-0.1.dtd girl-0.2.dtd girl-0.3.dtd 
girl-0.4.dtd girl-0.5.dtd girl-0.6.dtd girl-0.7.dtd girl-0.8.dtd listener-1.0.dtd listener-1.1.dtd 
programs-0.1.dtd girl-logo.png girl.png
+girl_DATA = girl-1.0.dtd girl-logo.png girl.png girl.xml
+EXTRA_DIST = girl.h girl-station.h girl-gui.h girl-listener.h girl-program.h girl-runners.h girl-streams.h 
girl-canvas.h girl-1.0.dtd girl-logo.png girl.png girl.xml
 all: all-am
 
 .SUFFIXES:
diff --git a/src/girl-gui.c b/src/girl-gui.c
index b9f11bc..14982cf 100644
--- a/src/girl-gui.c
+++ b/src/girl-gui.c
@@ -2,7 +2,7 @@
  *
  * GNOME Internet Radio Locator
  *
- * Copyright (C) 2014  Ole Aamot Software
+ * Copyright (C) 2014, 2015  Ole Aamot Software
  *
  * Author: Ole Aamot <oka oka no>
  *
@@ -40,6 +40,7 @@
 #include <libgnome/libgnome.h>
 /* #include <libgnome/gnome-desktop-item.h> */
 #include <gtk/gtk.h>
+#include <glib/gstdio.h>
 
 #include "girl.h"
 #include "girl-gui.h"
@@ -47,52 +48,40 @@
 #include "girl-station.h"
 #include "girl-streams.h"
 
-#ifdef GIRL_DEBUG
-#define MSG(x...) g_message(x)
-#else
-#define MSG(x...)
-#endif
-
 extern GtkWidget *girl_app;
 
 GnomeUIInfo toolbar[] = {
-       GNOMEUIINFO_ITEM_STOCK(("Listen"), ("Listen to selected station"),
+       GNOMEUIINFO_ITEM_STOCK(("Search"), ("Search by location for radio stations"),
+                              on_search_button_clicked,
+                              GTK_STOCK_FIND),
+       GNOMEUIINFO_SEPARATOR,  
+       GNOMEUIINFO_ITEM_STOCK(("Stations"), ("Internet Radio Stations"),
+                              on_stations_selector_button_clicked,
+                              GTK_STOCK_NETWORK),
+       GNOMEUIINFO_SEPARATOR,  
+       GNOMEUIINFO_ITEM_STOCK(("Listen"), ("Listen to selected radio station"),
                               on_listen_button_clicked,
                               GTK_STOCK_MEDIA_PLAY),
-#ifdef GIRL_HELPER_RECORD
-       GNOMEUIINFO_ITEM_STOCK(("Record"), ("Record selected station"),
+#if HAVE_GIRL_RECORD == 1
+       GNOMEUIINFO_ITEM_STOCK(("Record"), ("Record selected radio station"),
                               on_record_button_clicked,
                               GTK_STOCK_MEDIA_RECORD),
-#endif /* GIRL_HELPER_RECORD */
-       /* GNOMEUIINFO_ITEM_STOCK(("Listeners"), ("Listeners"), */
-       /*                     on_listeners_selector_button_clicked, */
-       /*                     GTK_STOCK_FIND), */
-       GNOMEUIINFO_ITEM_STOCK(("Stations"), ("Stations"),
-                              on_stations_selector_button_clicked,
-                              GTK_STOCK_NETWORK),
-       GNOMEUIINFO_ITEM_STOCK(("Streams"), ("Streams"),
-                              on_streams_selector_button_clicked,
-                              GTK_STOCK_HARDDISK),
+       GNOMEUIINFO_ITEM_STOCK(("Stop"), ("Stop recording selected radio station"),
+                              on_stop_button_clicked,
+                              GTK_STOCK_MEDIA_STOP),
+#endif /* HAVE_GIRL_RECORD */
        GNOMEUIINFO_SEPARATOR,
        GNOMEUIINFO_ITEM_STOCK(("Previous"),
-                              ("Go back to the previous station"),
+                              ("Go back to the previous radio station"),
                               on_previous_station_click, GTK_STOCK_GO_BACK),
-       GNOMEUIINFO_ITEM_STOCK(("Next"), ("Proceed to the next station"),
+       GNOMEUIINFO_ITEM_STOCK(("Next"), ("Proceed to the next radio station"),
                               on_next_station_click, GTK_STOCK_GO_FORWARD),
        GNOMEUIINFO_SEPARATOR,
-       /* GNOMEUIINFO_ITEM_STOCK(("About Listener"), */
-       /*                     ("About the GNOME Internet Radio Locator"), */
-       /*                     about_listener, GNOME_STOCK_ABOUT), */
-       /* GNOMEUIINFO_SEPARATOR, */
        GNOMEUIINFO_ITEM_STOCK(("About Station"),
                               ("About the current Station"),
                               about_station, GNOME_STOCK_ABOUT),
        GNOMEUIINFO_SEPARATOR,
-       GNOMEUIINFO_ITEM_STOCK(("About Stream"),
-                              ("About the current Stream"),
-                              about_streams, GNOME_STOCK_ABOUT),
-       GNOMEUIINFO_SEPARATOR,
-       GNOMEUIINFO_ITEM_STOCK(("About App"),
+       GNOMEUIINFO_ITEM_STOCK(("About Program"),
                               ("About the GNOME Internet Radio Locator"),
                               about_app, GNOME_STOCK_ABOUT),
 
@@ -107,8 +96,8 @@ GnomeUIInfo toolbar[] = {
 /* 
    Reading list of stations from
 
-   $PREFIX/share/girl/stations.xml 
-   $HOME/.girl/stations.xml
+   $PREFIX/share/girl/girl.xml 
+   $HOME/.girl/girl.xml
 
 */
 
@@ -150,7 +139,7 @@ GtkWidget *create_listeners_selector(char *selected_listener_uri,
                                                           "girl/listeners.xml",
                                                           FALSE,
                                                           NULL);
-       MSG("world_listener_xml_uri = %s\n",
+       GIRL_DEBUG_MSG("world_listener_xml_uri = %s\n",
            world_listener_xml_uri);
 
        if (world_listener_xml_uri == NULL) {
@@ -214,10 +203,10 @@ GtkWidget *create_listeners_selector(char *selected_listener_uri,
 
                        /* selection */
 
-                       printf("selected_listener_uri: %s\n",
+                       GIRL_DEBUG_MSG("selected_listener_uri: %s\n",
                               selected_listener_uri);
 
-                       printf("listener_uri: %s\n", listener_uri);
+                       GIRL_DEBUG_MSG("listener_uri: %s\n", listener_uri);
 
                        if (selected_listener_uri != NULL
                            && listener_uri != NULL
@@ -288,11 +277,11 @@ GtkWidget *create_programs_selector(char *selected_program_uri,
        /*                                                 "girl/programs.xml", */
        /*                                                 FALSE, */
        /*                                                 NULL); */
-       world_program_xml_filename = g_strconcat(DATADIR, "/girl/programs.xml", NULL);
+       world_program_xml_filename = g_strconcat(GIRL_DATADIR, "/programs.xml", NULL);
 
        /* world_program_xml_filename = g_strdup("http://girl.src.oka.no/programs.xml";); */
 
-       MSG("world_program_xml_filename = %s\n",
+       GIRL_DEBUG_MSG("world_program_xml_filename = %s\n",
            world_program_xml_filename);
 
        if (world_program_xml_filename == NULL) {
@@ -386,6 +375,224 @@ GtkWidget *create_programs_selector(char *selected_program_uri,
        return programs_selector;
 }
 
+static gboolean
+on_search_matches(GtkEntryCompletion *widget,
+                 GtkTreeModel *model,
+                 GtkTreeIter *iter,
+                 gpointer user_data)
+{
+       GValue value = {0, };
+
+       gtk_tree_model_get_value(model, iter, STATION_URI, &value);
+       girl->selected_station_uri = g_strdup(g_value_get_string(&value));
+       g_value_unset(&value);
+
+       gtk_tree_model_get_value(model, iter, STATION_NAME, &value);
+       girl->selected_station_name = g_strdup(g_value_get_string(&value));
+       g_value_unset(&value);  
+
+       gtk_tree_model_get_value(model, iter, STATION_LOCATION, &value);
+       girl->selected_station_location = g_strdup(g_value_get_string(&value));
+       g_value_unset(&value);
+
+       gtk_tree_model_get_value(model, iter, STATION_DESCRIPTION, &value);
+       girl->selected_station_description = g_strdup(g_value_get_string(&value));
+       g_value_unset(&value);
+
+       appbar_send_msg(_("Your search by location resulted in the radio station %s in %s: %s"),
+                       girl->selected_station_name,
+                       girl->selected_station_location,
+                       girl->selected_station_uri);
+
+       girl_helper_run(girl->selected_station_uri,
+                       girl->selected_station_name,
+                       GIRL_STREAM_SHOUTCAST,
+                       GIRL_STREAM_PLAYER);
+       
+       return FALSE;
+}
+
+GtkWidget *create_search_selector(void) {
+
+       GirlStationInfo *stationinfo, *localstation;
+       GtkWidget *search_selector, *content_area;
+       GtkWidget *align, *textentry;
+       GtkEntryCompletion *completion;
+       GtkListStore *model;
+       GtkTreeIter iter;
+       
+       gchar *world_station_xml_filename, *local_station_xml_file;
+
+       /* int i = 0, search_selection = -1; */
+
+       GStatBuf stats;
+
+       memset(&stats, 0, sizeof(stats));
+
+       /* The Stations dialog */
+       search_selector = gtk_dialog_new_with_buttons(("Search by location"), GTK_WINDOW(girl_app), 0,  /* 
flags */
+                                                       GTK_STOCK_CLOSE,
+                                                       GTK_RESPONSE_ACCEPT,
+                                                       NULL);
+       content_area = gtk_dialog_get_content_area (GTK_DIALOG (search_selector));
+       gtk_container_set_border_width
+           (GTK_CONTAINER(GTK_DIALOG(search_selector)->vbox), 6);
+
+       align = gtk_alignment_new(0.5, 0.5, 0, 0);
+       gtk_container_add(GTK_CONTAINER
+                         (GTK_DIALOG(search_selector)->vbox), align);
+       gtk_container_set_border_width(GTK_CONTAINER(align), 6);
+       gtk_widget_show(align);
+
+       textentry = gtk_entry_new();
+       completion = gtk_entry_completion_new();
+       gtk_entry_completion_set_text_column(completion, STATION_NAME);
+       gtk_entry_completion_set_text_column(completion, STATION_LOCATION);
+       gtk_entry_set_completion(GTK_ENTRY(textentry), completion);
+       g_signal_connect(G_OBJECT(completion), "match-selected",
+                        G_CALLBACK(on_search_matches), NULL);
+       model = gtk_list_store_new(11, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, 
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+       world_station_xml_filename = g_strconcat(GIRL_DATADIR, "/girl.xml", NULL);
+       GIRL_DEBUG_MSG("world_station_xml_filename = %s\n",
+           world_station_xml_filename);
+
+       if (world_station_xml_filename == NULL) {
+               g_warning(("Failed to open %s.  Please install it.\n"),
+                         world_station_xml_filename);
+       }
+
+       local_station_xml_file =
+           g_strconcat(g_get_home_dir(), "/.girl/girl.xml", NULL);
+
+       if (!g_stat(local_station_xml_file, &stats)) {
+               localstation = girl_station_load_from_file(NULL, local_station_xml_file);
+       } else {
+               localstation = NULL;
+       }
+
+       if (localstation == NULL) {
+               g_warning(("Failed to open %s\n"), local_station_xml_file);
+       }
+
+/*   g_free (local_station_xml_file); */
+
+       stationinfo =
+           girl_station_load_from_file(localstation,
+                                       world_station_xml_filename);
+
+       girl_stations = NULL;
+
+       while (stationinfo != NULL) {
+
+               gtk_list_store_append(model, &iter);
+               gtk_list_store_set(model,
+                                  &iter,
+                                  STATION_NAME,
+                                  stationinfo->name,
+                                  STATION_LOCATION,
+                                  stationinfo->location,
+                                  STATION_URI,
+                                  stationinfo->stream->uri,
+                                  STATION_DESCRIPTION,
+                                  stationinfo->description,
+                                  STATION_FREQUENCY,
+                                  stationinfo->frequency,
+                                  STATION_RELEASE,
+                                  stationinfo->release,
+                                  STATION_TYPE,
+                                  stationinfo->type,
+                                  STATION_RANK,
+                                  stationinfo->rank,
+                                  STATION_BITRATE,
+                                  stationinfo->bitrate,
+                                  STATION_SAMPLERATE,
+                                  stationinfo->samplerate,
+                                  STATION_ID,
+                                  stationinfo->id,
+                                  -1);
+               
+               stationinfo = stationinfo->next;
+       }
+
+       gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(model));
+
+       gtk_widget_show(textentry);     
+       gtk_container_add(GTK_CONTAINER(content_area), textentry);
+       
+#if 0
+       /* label = */
+               /*     g_strconcat(stationinfo->name, " (", */
+               /*              stationinfo->location, ")", NULL); */
+               /* station_uri = g_strdup(stationinfo->stream->uri); */
+               /* station_name = g_strdup(stationinfo->name); */
+               /* station_location = g_strdup(stationinfo->location); */
+               /* station_release = g_strdup(stationinfo->release); */
+               /* station_description = g_strdup(stationinfo->description); */
+               /* station_website = g_strdup(stationinfo->uri); */
+               
+               /* girl_stations = g_list_append(girl_stations,(GirlStationInfo *)stationinfo); */
+
+               if (label != NULL) {
+                       /* item = gtk_menu_item_new_with_label(label); */
+                       /* gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); */
+                       g_signal_connect(G_OBJECT(item), "activate",
+                                        G_CALLBACK
+                                        (on_stations_selector_changed),
+                                        NULL);
+                       g_object_set_data(G_OBJECT(item), "station_uri",
+                                         (gpointer) station_uri);
+                       g_object_set_data(G_OBJECT(item), "station_name",
+                                         (gpointer) station_name);
+                       g_object_set_data(G_OBJECT(item),
+                                         "station_location",
+                                         (gpointer) station_location);
+                       g_object_set_data(G_OBJECT(item),
+                                         "station_release",
+                                         (gpointer) station_release);
+                       g_object_set_data(G_OBJECT(item),
+                                         "station_description",
+                                         (gpointer) station_description);
+                       g_object_set_data(G_OBJECT(item),
+                                         "station_website",
+                                         (gpointer) station_website);
+                       gtk_widget_show(item);
+                       g_free(label);
+
+                       /* selection */
+#if 0 /* FIXME */
+                       if (selected_station_uri != NULL && 
+                           !strcmp(selected_station_uri, station_uri))
+                               search_selection = i;
+#endif
+               } else {
+                       g_free(station_uri);
+                       g_free(station_name);
+                       g_free(station_location);
+                       g_free(station_release);
+                       g_free(station_description);
+               }
+               i++;
+       }
+       
+       /* drop_down = gtk_option_menu_new(); */
+       /* gtk_widget_show(drop_down); */
+       /* gtk_option_menu_set_menu(GTK_OPTION_MENU(drop_down), menu); */
+       /* gtk_container_add(GTK_CONTAINER(align), drop_down); */
+
+       /* if (selection != -1) */
+       /*      gtk_option_menu_set_history(GTK_OPTION_MENU(drop_down), selection); */
+#endif 
+       g_signal_connect(G_OBJECT(search_selector), "response",
+                        G_CALLBACK(gtk_widget_hide),
+                        (gpointer) search_selector);
+       g_signal_connect(G_OBJECT(search_selector), "delete-event",
+                        G_CALLBACK(gtk_widget_hide),
+                        (gpointer) search_selector);
+
+       return search_selector;
+}
+
 GtkWidget *create_stations_selector(char *selected_station_uri,
                                    char *filename)
 {
@@ -393,11 +600,15 @@ GtkWidget *create_stations_selector(char *selected_station_uri,
        GtkWidget *stations_selector;
        GtkWidget *align, *menu, *drop_down, *item;
 
-       gchar *station_uri, *station_name, *station_location, *station_release, *station_description;
+       gchar *station_uri, *station_name, *station_location, *station_release, *station_description, 
*station_website;
        gchar *label, *world_station_xml_filename, *local_station_xml_file;
 
        int i = 0, selection = -1;
 
+       GStatBuf stats;
+
+       memset(&stats, 0, sizeof(stats));
+
        /* The Stations dialog */
        stations_selector = gtk_dialog_new_with_buttons(("Select a station"), GTK_WINDOW(girl_app), 0,  /* 
flags */
                                                        GTK_STOCK_CLOSE,
@@ -419,14 +630,14 @@ GtkWidget *create_stations_selector(char *selected_station_uri,
 
        /* world_station_xml_filename = gnome_program_locate_file(NULL, */
        /*                                                     GNOME_FILE_DOMAIN_APP_DATADIR, */
-       /*                                                     "girl/stations.xml", */
+       /*                                                     "girl/girl.xml", */
        /*                                                     FALSE, */
        /*                                                     NULL); */
 
-       /* world_station_xml_filename = g_strdup("http://girl.src.oka.no/stations.xml";); */
+       /* world_station_xml_filename = g_strdup("http://girl.src.oka.no/girl.xml";); */
 
-       world_station_xml_filename = g_strconcat(DATADIR, "/girl/stations.xml", NULL);
-       MSG("world_station_xml_filename = %s\n",
+       world_station_xml_filename = g_strconcat(GIRL_DATADIR, "/girl.xml", NULL);
+       GIRL_DEBUG_MSG("world_station_xml_filename = %s\n",
            world_station_xml_filename);
 
        if (world_station_xml_filename == NULL) {
@@ -435,9 +646,13 @@ GtkWidget *create_stations_selector(char *selected_station_uri,
        }
 
        local_station_xml_file =
-           g_strconcat(g_get_home_dir(), "/.girl/stations.xml", NULL);
-       localstation =
-           girl_station_load_from_file(NULL, local_station_xml_file);
+           g_strconcat(g_get_home_dir(), "/.girl/girl.xml", NULL);
+
+       if (!g_stat(local_station_xml_file, &stats)) {
+               localstation = girl_station_load_from_file(NULL, local_station_xml_file);
+       } else {
+               localstation = NULL;
+       }
 
        if (localstation == NULL) {
                g_warning(("Failed to open %s\n"), local_station_xml_file);
@@ -461,6 +676,7 @@ GtkWidget *create_stations_selector(char *selected_station_uri,
                station_location = g_strdup(stationinfo->location);
                station_release = g_strdup(stationinfo->release);
                station_description = g_strdup(stationinfo->description);
+               station_website = g_strdup(stationinfo->uri);
                
                girl_stations = g_list_append(girl_stations,(GirlStationInfo *)stationinfo);
 
@@ -484,6 +700,9 @@ GtkWidget *create_stations_selector(char *selected_station_uri,
                        g_object_set_data(G_OBJECT(item),
                                          "station_description",
                                          (gpointer) station_description);
+                       g_object_set_data(G_OBJECT(item),
+                                         "station_website",
+                                         (gpointer) station_website);
                        gtk_widget_show(item);
                        g_free(label);
 
@@ -520,7 +739,6 @@ GtkWidget *create_stations_selector(char *selected_station_uri,
        return stations_selector;
 }
 
-
 GtkWidget *create_streams_selector(char *selected_streams_uri,
                                    char *filename)
 {
@@ -528,11 +746,14 @@ GtkWidget *create_streams_selector(char *selected_streams_uri,
        GtkWidget *streams_selector;
        GtkWidget *align, *menu, *drop_down, *item;
 
-       gchar *streams_mime, *streams_uri, *streams_codec, *streams_bitrate, *streams_samplerate, 
*streams_channels;
+       gchar *streams_mime, *streams_uri, *streams_codec, *streams_bitrate, *streams_samplerate;
+       GirlChannels streams_channels;
        gchar *label, *world_streams_xml_filename, *local_streams_xml_file;
 
        int i = 0, selection = -1;
 
+       GStatBuf stats;
+
        /* The Streams dialog */
        streams_selector = gtk_dialog_new_with_buttons(("Select a stream"), GTK_WINDOW(girl_app), 0,    /* 
flags */
                                                        GTK_STOCK_CLOSE,
@@ -557,9 +778,9 @@ GtkWidget *create_streams_selector(char *selected_streams_uri,
        /*                                                     "girl/streams.xml", */
        /*                                                     FALSE, */
        /*                                                     NULL); */
-       world_streams_xml_filename = g_strconcat(DATADIR, "/girl/streams.xml", NULL);
+       world_streams_xml_filename = g_strconcat(GIRL_DATADIR, "/streams.xml", NULL);
        /* world_streams_xml_filename = g_strdup("http://girl.src.oka.no/streams.xml";); */
-       MSG("world_streams_xml_filename = %s\n",
+       GIRL_DEBUG_MSG("world_streams_xml_filename = %s\n",
            world_streams_xml_filename);
 
        if (world_streams_xml_filename == NULL) {
@@ -569,17 +790,20 @@ GtkWidget *create_streams_selector(char *selected_streams_uri,
 
        local_streams_xml_file =
            g_strconcat(g_get_home_dir(), "/.girl/streams.xml", NULL);
-       localstreams =
-           girl_streams_load_from_file(NULL, local_streams_xml_file);
 
-       if (localstreams == NULL) {
-               g_warning(("Failed to open %s\n"), local_streams_xml_file);
+       if (!g_stat(local_streams_xml_file, &stats)) {
+               localstreams = girl_streams_load_from_file(NULL, local_streams_xml_file);
+       } else {
+               localstreams = NULL;
        }
 
-/*   g_free (local_streams_xml_file); */
+       if (!g_stat("~/.gnome2/girl", &stats)) {
+               if (localstreams == NULL) {
+                       g_warning(("Failed to open %s\n"), local_streams_xml_file);
+               }
+       }
 
-       streamsinfo = girl_streams_load_from_file(localstreams,
-                                               world_streams_xml_filename);
+       streamsinfo = girl_streams_load_from_file(localstreams, world_streams_xml_filename);
 
        girl_streams = NULL;
 
@@ -593,7 +817,7 @@ GtkWidget *create_streams_selector(char *selected_streams_uri,
                streams_codec = g_strdup(streamsinfo->codec);
                streams_bitrate = g_strdup(streamsinfo->bitrate);
                streams_samplerate = g_strdup(streamsinfo->samplerate);
-               streams_channels = g_strdup(streamsinfo->channels);
+               streams_channels = streamsinfo->channels;
                girl_streams = g_list_append(girl_streams,(GirlStreamsInfo *)streamsinfo);
 
                if (label != NULL) {
@@ -632,7 +856,6 @@ GtkWidget *create_streams_selector(char *selected_streams_uri,
                        g_free(streams_codec);
                        g_free(streams_bitrate);
                        g_free(streams_samplerate);
-                       g_free(streams_channels);
                }
                i++;
                streamsinfo = streamsinfo->next;
@@ -707,7 +930,7 @@ GtkWidget *create_girl_app()
        gtk_widget_show(vbox1);
        gnome_app_set_contents(GNOME_APP(girl_app), vbox1);
 
-       pmf = g_strconcat(DATADIR, "/girl/pixmaps/girl-map.png", NULL);
+       pmf = g_strconcat(GIRL_DATADIR, "/pixmaps/girl-map.png", NULL);
 
        girl_pixmap = gtk_image_new_from_file(pmf);
        g_free(pmf);
@@ -729,9 +952,13 @@ GtkWidget *create_girl_app()
        girl_data->appbar = GNOME_APPBAR(appbar);
        girl_data->progress = GTK_PROGRESS_BAR(progress);
 
+#if HAVE_GIRL_RECORD == 1
        gnome_appbar_push(girl_data->appbar,
-                         ("Point on the map and click \"Listen\" to listen to the station."));
-
+                         ("Search by location from \"Search\" or select a radio station from \"Stations\".  
Click \"Listen\" to listen to, or \"Record\" to record from the station."));
+#else
+       gnome_appbar_push(girl_data->appbar,
+                         ("Select a radio station from \"Stations\" and click \"Listen\" to listen to the 
station."));
+#endif 
        /*    g_signal_connect(G_OBJECT(calendar), */
        /*                     "day_selected_double_click", */
        /*                     G_CALLBACK (on_listen_button_clicked), girl_data); */
@@ -755,15 +982,15 @@ GtkWidget *create_girl_app()
        girl->selected_listener_description =
            gnome_config_get_string("selected_listener_description=");
 
-       printf("girl->selected_listener_uri: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_listener_uri: %s\n",
               girl->selected_listener_uri);
-       printf("girl->selected_listener_name: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_listener_name: %s\n",
               girl->selected_listener_name);
-       printf("girl->selected_listener_location: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_listener_location: %s\n",
               girl->selected_listener_location);
-       printf("girl->selected_listener_release: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_listener_release: %s\n",
               girl->selected_listener_release);
-       printf("girl->selected_listener_description: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_listener_description: %s\n",
               girl->selected_listener_description);
 
        girl->selected_station_uri =
@@ -777,15 +1004,15 @@ GtkWidget *create_girl_app()
        girl->selected_station_description =
            gnome_config_get_string("selected_station_description=");
 
-       printf("girl->selected_station_uri: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_station_uri: %s\n",
               girl->selected_station_uri);
-       printf("girl->selected_station_name: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_station_name: %s\n",
               girl->selected_station_name);
-       printf("girl->selected_station_location: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_station_location: %s\n",
               girl->selected_station_location);
-       printf("girl->selected_station_release: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_station_release: %s\n",
               girl->selected_station_release);
-       printf("girl->selected_station_description: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_station_description: %s\n",
               girl->selected_station_description);
 
        girl->selected_streams_uri =
@@ -799,19 +1026,19 @@ GtkWidget *create_girl_app()
        girl->selected_streams_samplerate =
            gnome_config_get_string("selected_streams_samplerate=");
        girl->selected_streams_channels =
-           gnome_config_get_string("selected_streams_channels=");
+               (GirlChannels)gnome_config_get_string("selected_streams_channels=");
 
-       printf("girl->selected_streams_uri: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_streams_uri: %s\n",
               girl->selected_streams_uri);
-       printf("girl->selected_streams_mime: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_streams_mime: %s\n",
               girl->selected_streams_mime);
-       printf("girl->selected_streams_codec: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_streams_codec: %s\n",
               girl->selected_streams_codec);
-       printf("girl->selected_streams_bitrate: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_streams_bitrate: %s\n",
               girl->selected_streams_bitrate);
-       printf("girl->selected_streams_samplerate: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_streams_samplerate: %s\n",
               girl->selected_streams_samplerate);
-       printf("girl->selected_streams_channels: %s\n",
+       GIRL_DEBUG_MSG("girl->selected_channels: %s\n",
               girl->selected_streams_channels);
 
        gnome_config_pop_prefix();
diff --git a/src/girl-gui.h b/src/girl-gui.h
index 2a44422..f67803a 100644
--- a/src/girl-gui.h
+++ b/src/girl-gui.h
@@ -12,5 +12,6 @@ GtkWidget *create_stations_selector(char *selected_station_uri,
                                    char *filename);
 GtkWidget *create_streams_selector(char *selected_streams_uri,
                                   char *filename);
+GtkWidget *create_search_selector(void);
 
-#endif                         /* GIRL_GUI_H */
+#endif /* GIRL_GUI_H */
diff --git a/src/girl-listener.c b/src/girl-listener.c
index 47cc3c8..f051069 100644
--- a/src/girl-listener.c
+++ b/src/girl-listener.c
@@ -35,7 +35,7 @@
 
 /* extern GirlListenerInfo *girllistener; */
 
-extern GList *girl_stations;
+extern GList *girl_channels;
 extern GList *girl_listeners;
 
 static void
@@ -50,15 +50,15 @@ girl_listener_parser(GirlListenerInfo * listener, xmlDocPtr doc,
        g_return_if_fail(cur != NULL);
 
        listener->name = (gchar *)xmlGetProp(cur, (const xmlChar *)"name");
-       MSG("listener->name = %s\n", listener->name);
+       GIRL_DEBUG_MSG("listener->name = %s\n", listener->name);
        listener->location = (gchar *)xmlGetProp(cur, (const xmlChar *)"location");
-       MSG("listener->location = %s\n", listener->location);
+       GIRL_DEBUG_MSG("listener->location = %s\n", listener->location);
        listener->uri = (gchar *)xmlGetProp(cur, (const xmlChar *)"uri");
-       MSG("listener->uri = %s\n", listener->uri);
+       GIRL_DEBUG_MSG("listener->uri = %s\n", listener->uri);
        listener->release = (gchar *)xmlGetProp(cur, (const xmlChar *)"release");
-       MSG("listener->release = %s\n", listener->release);
+       GIRL_DEBUG_MSG("listener->release = %s\n", listener->release);
        listener->description = (gchar *)xmlGetProp(cur, (const xmlChar *)"description");
-       MSG("listener->description = %s\n", listener->description);
+       GIRL_DEBUG_MSG("listener->description = %s\n", listener->description);
 
 #if 0
        sub = cur->xmlChildrenNode;
@@ -72,37 +72,37 @@ girl_listener_parser(GirlListenerInfo * listener, xmlDocPtr doc,
 
                        listener->locationinfo->name =
                            xmlGetProp(sub, "name");
-                       MSG("listener->locationinfo->name = %s\n",
+                       GIRL_DEBUG_MSG("listener->locationinfo->name = %s\n",
                            listener->locationinfo->name);
 
                        listener->locationinfo->link =
                            xmlGetProp(sub, "link");
-                       MSG("listener->locationinfo->link = %s\n",
+                       GIRL_DEBUG_MSG("listener->locationinfo->link = %s\n",
                            listener->locationinfo->link);
 
                        listener->locationinfo->glat =
                            xmlGetProp(sub, "glat");
-                       MSG("listener->locationinfo->glat = %s\n",
+                       GIRL_DEBUG_MSG("listener->locationinfo->glat = %s\n",
                            listener->locationinfo->glat);
 
                        listener->locationinfo->glon =
                            xmlGetProp(sub, "glon");
-                       MSG("listener->locationinfo->glon = %s\n",
+                       GIRL_DEBUG_MSG("listener->locationinfo->glon = %s\n",
                            listener->locationinfo->glon);
 
                        listener->locationinfo->grad =
                            xmlGetProp(sub, "grad");
-                       MSG("listener->locationinfo->grad = %s\n",
+                       GIRL_DEBUG_MSG("listener->locationinfo->grad = %s\n",
                            listener->locationinfo->grad);
 
                        listener->locationinfo->vote =
                            xmlGetProp(sub, "vote");
-                       MSG("listener->locationinfo->vote = %s\n",
+                       GIRL_DEBUG_MSG("listener->locationinfo->vote = %s\n",
                            listener->locationinfo->vote);
 
                        listener->locationinfo->rack =
                            xmlGetProp(sub, "rack");
-                       MSG("listener->locationinfo->rack = %s\n",
+                       GIRL_DEBUG_MSG("listener->locationinfo->rack = %s\n",
                            listener->locationinfo->rack);
 
                }
@@ -159,7 +159,7 @@ GirlListenerInfo *girl_listener_load_from_file(GirlListenerInfo * head,
 
        version = (gchar *)xmlGetProp(cur, (const xmlChar *) "version");
 
-       MSG("Valid Girl Listener %s XML document... Parsing listeners...\n", version);
+       GIRL_DEBUG_MSG("Valid Girl Listener %s XML document... Parsing listeners...\n", version);
 
        free(version);
 
@@ -169,7 +169,7 @@ GirlListenerInfo *girl_listener_load_from_file(GirlListenerInfo * head,
 
                if ((!xmlStrcmp(cur->name, (const xmlChar *) "listener"))) {
 
-                       MSG("Found a new listener tag...\n");
+                       GIRL_DEBUG_MSG("Found a new listener tag...\n");
 
                        curr = g_new0(GirlListenerInfo, 1);
 
@@ -181,13 +181,13 @@ GirlListenerInfo *girl_listener_load_from_file(GirlListenerInfo * head,
 
                        girl_listeners = g_list_append(girl_listeners, (GirlListenerInfo *) curr);
 
-                       MSG("Done with parsing the listener..\n");
+                       GIRL_DEBUG_MSG("Done with parsing the listener..\n");
 
                }
                cur = cur->next;
        }
 
-       MSG("Finished parsing XML document.\n");
+       GIRL_DEBUG_MSG("Finished parsing XML document.\n");
 
        xmlFreeDoc(doc);
 
diff --git a/src/girl-program.c b/src/girl-program.c
index 2dac509..e28686e 100644
--- a/src/girl-program.c
+++ b/src/girl-program.c
@@ -35,7 +35,7 @@
 #include "girl-program.h"
 
 extern GirlData *girl;
-extern GList *girl_stations;
+extern GList *girl_channels;
 extern GList *girl_programs;
 extern GList *girl_listeners;
 
@@ -53,15 +53,15 @@ girl_program_parser(GirlProgramInfo * program, xmlDocPtr doc,
        g_return_if_fail(cur != NULL);
 
        program->id = (gchar *)xmlGetProp(cur, (const xmlChar *)"id");
-       MSG("program->id = %s\n", program->id);
+       GIRL_DEBUG_MSG("program->id = %s\n", program->id);
        program->name = (gchar *)xmlGetProp(cur, (const xmlChar *)"name");
-       MSG("program->name = %s\n", program->name);
+       GIRL_DEBUG_MSG("program->name = %s\n", program->name);
        program->rank = (gchar *)xmlGetProp(cur, (const xmlChar *)"rank");
-       MSG("program->rank = %s\n", program->rank);
+       GIRL_DEBUG_MSG("program->rank = %s\n", program->rank);
        program->type = (gchar *)xmlGetProp(cur, (const xmlChar *)"type");
-       MSG("program->type = %s\n", program->type);
+       GIRL_DEBUG_MSG("program->type = %s\n", program->type);
        program->release = (gchar *)xmlGetProp(cur, (const xmlChar *)"release");
-       MSG("program->release = %s\n", program->release);
+       GIRL_DEBUG_MSG("program->release = %s\n", program->release);
 
        sub = cur->xmlChildrenNode;
 
@@ -71,7 +71,7 @@ girl_program_parser(GirlProgramInfo * program, xmlDocPtr doc,
                        program->frequency = (gchar *)
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
-                       MSG("program->frequency = %s\n",
+                       GIRL_DEBUG_MSG("program->frequency = %s\n",
                            program->frequency);
                }
 
@@ -79,7 +79,7 @@ girl_program_parser(GirlProgramInfo * program, xmlDocPtr doc,
                        program->location = (gchar *)
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
-                       MSG("program->location = %s\n", program->location);
+                       GIRL_DEBUG_MSG("program->location = %s\n", program->location);
                        /* fprintf(stdout, "%s (%s), ", program->name, program->location); */
                }
 
@@ -88,14 +88,14 @@ girl_program_parser(GirlProgramInfo * program, xmlDocPtr doc,
                        program->description = (gchar *)
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
-                       MSG("program->description = %s\n", program->description);
+                       GIRL_DEBUG_MSG("program->description = %s\n", program->description);
                }
 
                if ((!xmlStrcmp(sub->name, (const xmlChar *) "uri"))) {
                        program->uri = (gchar *)
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
-                       MSG("program->uri = %s\n", program->uri);
+                       GIRL_DEBUG_MSG("program->uri = %s\n", program->uri);
                }
 
                if ((!xmlStrcmp(sub->name, (const xmlChar *) "archive"))) {
@@ -104,12 +104,12 @@ girl_program_parser(GirlProgramInfo * program, xmlDocPtr doc,
                        program->archive = archive;
 
                        program->archive->mimetype = (gchar *)xmlGetProp(sub, (const xmlChar *)"mime");
-                       MSG("program->archive->mimetype = %s\n",
+                       GIRL_DEBUG_MSG("program->archive->mimetype = %s\n",
                            program->archive->mimetype);
                        if (xmlGetProp(sub, (const xmlChar *)"bitrate") != NULL) {
                                program->archive->bitrate = (glong)
                                        atol((const char *)xmlGetProp(sub, (const xmlChar *)"bitrate"));
-                               MSG("program->archive->bitrate = %li\n",
+                               GIRL_DEBUG_MSG("program->archive->bitrate = %li\n",
                                    program->archive->bitrate);
                        }
 
@@ -118,10 +118,10 @@ girl_program_parser(GirlProgramInfo * program, xmlDocPtr doc,
                                        atol((const char *)xmlGetProp(sub, (const xmlChar *)"samplerate"));
                        }
 
-                       MSG("program->archive->samplerate = %li\n",
+                       GIRL_DEBUG_MSG("program->archive->samplerate = %li\n",
                            program->archive->samplerate);
                        program->archive->uri = (gchar *)xmlGetProp(sub, (const xmlChar *)"uri");
-                       MSG("program->archive->uri = %s\n",
+                       GIRL_DEBUG_MSG("program->archive->uri = %s\n",
                            program->archive->uri);
 
                        chans = (gchar *)xmlGetProp(sub, (const xmlChar *)"channels");
@@ -130,15 +130,15 @@ girl_program_parser(GirlProgramInfo * program, xmlDocPtr doc,
                                if (strcmp(chans, "stereo") == 0) {
                                        program->archive->channels =
                                            GIRL_CHANNELS_STEREO;
-                                       MSG("program->archive->channels = %d\n", program->archive->channels);
+                                       GIRL_DEBUG_MSG("program->archive->channels = %d\n", 
program->archive->channels);
                                } else if (strcmp(chans, "mono") == 0) {
                                        program->archive->channels =
                                            GIRL_CHANNELS_MONO;
-                                       MSG("program->archive->channels = %d\n", program->archive->channels);
+                                       GIRL_DEBUG_MSG("program->archive->channels = %d\n", 
program->archive->channels);
                                } else if (strcmp(chans, "5:1") == 0) {
                                        program->archive->channels =
                                            GIRL_CHANNELS_5_1;
-                                       MSG("program->archive->channels = %d\n", program->archive->channels);
+                                       GIRL_DEBUG_MSG("program->archive->channels = %d\n", 
program->archive->channels);
                                }
                                g_free(chans);
                        }
@@ -195,7 +195,7 @@ GirlProgramInfo *girl_program_load_from_file(GirlProgramInfo * head,
 
        version = (gchar *)xmlGetProp(cur, (const xmlChar *)"version");
 
-       MSG("Valid Girl %s XML document... Parsing programs...\n",
+       GIRL_DEBUG_MSG("Valid Girl %s XML document... Parsing programs...\n",
            version);
 
        free(version);
@@ -206,7 +206,7 @@ GirlProgramInfo *girl_program_load_from_file(GirlProgramInfo * head,
 
                if ((!xmlStrcmp(cur->name, (const xmlChar *) "program"))) {
 
-                       MSG("Found a new program.\n");
+                       GIRL_DEBUG_MSG("Found a new program.\n");
 
                        curr = g_new0(GirlProgramInfo, 1);
                        mem_program = g_new0(GirlProgramInfo, 1);
@@ -221,13 +221,13 @@ GirlProgramInfo *girl_program_load_from_file(GirlProgramInfo * head,
 
                        girl_programs = g_list_append(girl_programs, (GirlProgramInfo *)mem_program);
 
-                       MSG("Done with parsing the program.\n");
+                       GIRL_DEBUG_MSG("Done with parsing the program.\n");
 
                }
                cur = cur->next;
        }
 
-       MSG("Finished parsing XML document.\n");
+       GIRL_DEBUG_MSG("Finished parsing XML document.\n");
 
        xmlFreeDoc(doc);
 
diff --git a/src/girl-station.c b/src/girl-station.c
index 7ce9dc0..5970fcc 100644
--- a/src/girl-station.c
+++ b/src/girl-station.c
@@ -2,7 +2,7 @@
  *
  * GNOME Internet Radio Locator
  *
- * Copyright (C) 2014  Ole Aamot Software
+ * Copyright (C) 2014, 2015  Ole Aamot Software
  *
  * Author: Ole Aamot <oka oka no>
  *
@@ -24,6 +24,7 @@
 #include <config.h>
 #include <stdio.h>
 #include <string.h>
+#include <glib.h>
 #include <gtk/gtk.h>
 #include <libxml/xmlmemory.h>
 #include <libxml/parser.h>
@@ -63,7 +64,8 @@ cb_child_watch( GPid  pid,
                gint  status)
 {
        /* Remove timeout callback */
-       g_source_remove(girl->timeout_id );
+
+       /* FIXME? g_source_remove(girl->timeout_id ); */
 
        /* Close pid */
        g_spawn_close_pid( pid );
@@ -140,8 +142,13 @@ void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType
        GIOChannel *out_ch, *err_ch;
        gboolean    ret;
 
+       if (signal(SIGCHLD, SIG_IGN) == SIG_ERR) {
+               perror(0);
+               exit(1);
+       }
+       
        g_return_if_fail(url != NULL);
-       MSG("%s", url);
+       GIRL_DEBUG_MSG("%s", url);
 
        /* mime_info = gnome_vfs_get_mime_type(url); */
 
@@ -157,9 +164,9 @@ void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType
                app = g_strdup(GIRL_HELPER_RECORD);
        }
 
-       if (app != NULL) {
+       if (g_strcmp0(app,"no")!=0) {
                command = g_strconcat(app, " ", url, NULL);
-               g_print("Helper application is %s\n", command);
+               GIRL_DEBUG_MSG("Helper application is %s\n", command);
                if (type == GIRL_STREAM_SHOUTCAST) {
                        if (helper == GIRL_STREAM_PLAYER) {
                                command = g_strconcat(app, " ", url, NULL);
@@ -174,7 +181,7 @@ void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType
                                /* " -d ", g_get_home_dir(), "/.girl -D \"", name, "\" -s -a -u girl/", 
VERSION, NULL); */
                                /* command = g_strconcat(command, " -d ", g_get_home_dir(), "/.girl/", name, 
" -D %S%A%T -t 10 -u girl/", VERSION, NULL); */
                        }
-                       g_print("Helper command is %s\n", command);
+                       GIRL_DEBUG_MSG("Helper command is %s\n", command);
                }
                /* gnome_vfs_mime_application_free (app); */
        } else {
@@ -198,6 +205,87 @@ void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType
        }
 
        if (helper == GIRL_STREAM_PLAYER) {
+
+
+#if 0
+               g_shell_parse_argv(command,
+                                  &argc,
+                                  &argv,
+                                  NULL);
+               ret = g_spawn_async_with_pipes (".",
+                                               argv,
+                                               NULL,
+                                               
G_SPAWN_SEARCH_PATH|G_SPAWN_STDOUT_TO_DEV_NULL|G_SPAWN_STDERR_TO_DEV_NULL|G_SPAWN_DO_NOT_REAP_CHILD,
+                                               NULL,
+                                               NULL,
+                                               &pid,
+                                               NULL,
+                                               NULL,
+                                               NULL,
+                                               &err);
+               if( ! ret )
+               {
+                       msg = g_strdup_printf(_("Failed to run %s (%i)\n"), command, pid);
+                       show_error(msg);
+                       g_free(msg);
+                       return;
+               }
+               /* Add watch function to catch termination of the process. This function
+                * will clean any remnants of process. */
+               g_child_watch_add( pid, (GChildWatchFunc)cb_child_watch, girl);
+               
+               girl->player_pid = pid;
+               girl->player_status = GIRL_PLAYER_TRUE;
+               /* Install timeout fnction that will move the progress bar */
+               girl->timeout_id = g_timeout_add(100,(GSourceFunc)cb_timeout,girl);
+/* #endif */
+/* #if 0 */
+               ret = g_spawn_async_with_pipes( NULL, /* command */ argv, NULL,
+                                               /* G_SPAWN_DO_NOT_REAP_CHILD */ G_SPAWN_DEFAULT, NULL,
+                                               NULL, &pid, NULL, &out, &error, NULL );
+               if( ! ret )
+               {
+                       msg = g_strdup_printf(_("Failed to run %s (%i)\n"), command, pid);
+                       show_error(msg);
+                       g_free(msg);
+                       return;
+               }
+               /* Add watch function to catch termination of the process. This function
+                * will clean any remnants of process. */
+               g_child_watch_add( pid, (GChildWatchFunc)cb_child_watch, girl );
+               /* Create channels that will be used to read girl from pipes. */
+#ifdef G_OS_WIN32
+               out_ch = g_io_channel_win32_new_fd( out );
+               err_ch = g_io_channel_win32_new_fd( error );
+#else
+               out_ch = g_io_channel_unix_new( out );
+               err_ch = g_io_channel_unix_new( error );
+#endif
+               /* Add watches to channels */
+               g_io_add_watch( out_ch, G_IO_IN | G_IO_HUP, (GIOFunc)cb_out_watch, girl );
+               g_io_add_watch( err_ch, G_IO_IN | G_IO_HUP, (GIOFunc)cb_err_watch, girl );
+               /* Install timeout fnction that will move the progress bar */
+               girl->timeout_id = g_timeout_add( 100, (GSourceFunc)cb_timeout, girl );
+/* #endif */
+#if 0
+               if (!g_spawn_command_line_sync(command, stdout, stderr, status, &err)) {
+                       msg = g_strdup_printf(_("Failed to open URL: '%s'\n"
+                                               "Status code: %i\n"
+                                               "Details: %s"), url, status, err->message);
+                       show_error(msg);
+                       g_error_free(err);
+                       g_free(msg);
+               } else {
+                       GIRL_DEBUG_MSG("Launching %s\n", command);
+               }
+               /* Add watch function to catch termination of the process. This function
+                * will clean any remnants of process. */
+               g_child_watch_add( pid, (GChildWatchFunc)cb_child_watch, girl );
+#endif
+#endif
+
+               /* Original async player code */
+               
                if (!g_spawn_command_line_async(command, &err)) {
                        msg = g_strdup_printf(_("Failed to open URL: '%s'\n"
                                                "Details: %s"), url, err->message);
@@ -205,16 +293,18 @@ void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType
                        g_error_free(err);
                        g_free(msg);
                } else {
-                       g_print("Launching %s player\n", command);
+                       girl->player_status = GIRL_PLAYER_TRUE;
+                       GIRL_DEBUG_MSG("Launching %s player\n", command);
                }
-       }
 
+       }
+       
        if (helper == GIRL_STREAM_RECORD) {
-
+               
 /* #if 0 */
                /* gchar *argv[] = { command, NULL }; */
                /* Spawn child process */
-
+               
                g_shell_parse_argv(command,
                                   &argc,
                                   &argv,
@@ -241,6 +331,8 @@ void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType
                 * will clean any remnants of process. */
                g_child_watch_add( pid, (GChildWatchFunc)cb_child_watch, girl);
 
+               girl->record_pid = pid;
+               girl->record_status = GIRL_RECORD_TRUE;
                /* Install timeout fnction that will move the progress bar */
                girl->timeout_id = g_timeout_add(100,(GSourceFunc)cb_timeout,girl);
 /* #endif */
@@ -281,7 +373,7 @@ void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType
                        g_error_free(err);
                        g_free(msg);
                } else {
-                       g_print("Launching %s\n", command);
+                       GIRL_DEBUG_MSG("Launching %s\n", command);
                }
                /* Add watch function to catch termination of the process. This function
                 * will clean any remnants of process. */
@@ -322,15 +414,15 @@ girl_station_parser(GirlStationInfo * station, xmlDocPtr doc,
        g_return_if_fail(cur != NULL);
 
        station->id = (gchar *)xmlGetProp(cur, (const xmlChar *)"id");
-       MSG("station->id = %s\n", station->id);
+       GIRL_DEBUG_MSG("station->id = %s\n", station->id);
        station->name = (gchar *)xmlGetProp(cur, (const xmlChar *)"name");
-       MSG("station->name = %s\n", station->name);
+       GIRL_DEBUG_MSG("station->name = %s\n", station->name);
        station->rank = (gchar *)xmlGetProp(cur, (const xmlChar *)"rank");
-       MSG("station->rank = %s\n", station->rank);
+       GIRL_DEBUG_MSG("station->rank = %s\n", station->rank);
        station->type = (gchar *)xmlGetProp(cur, (const xmlChar *)"type");
-       MSG("station->type = %s\n", station->type);
+       GIRL_DEBUG_MSG("station->type = %s\n", station->type);
        station->release = (gchar *)xmlGetProp(cur, (const xmlChar *)"release");
-       MSG("station->release = %s\n", station->release);
+       GIRL_DEBUG_MSG("station->release = %s\n", station->release);
 
        sub = cur->xmlChildrenNode;
 
@@ -340,7 +432,7 @@ girl_station_parser(GirlStationInfo * station, xmlDocPtr doc,
                        station->frequency = (gchar *)
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
-                       MSG("station->frequency = %s\n",
+                       GIRL_DEBUG_MSG("station->frequency = %s\n",
                            station->frequency);
                }
 
@@ -348,7 +440,7 @@ girl_station_parser(GirlStationInfo * station, xmlDocPtr doc,
                        station->location = (gchar *)
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
-                       MSG("station->location = %s\n", station->location);
+                       GIRL_DEBUG_MSG("station->location = %s\n", station->location);
 
                }
 
@@ -357,15 +449,15 @@ girl_station_parser(GirlStationInfo * station, xmlDocPtr doc,
                        station->description = (gchar *)
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
-                       MSG("station->description = %s\n", station->description);
+                       GIRL_DEBUG_MSG("station->description = %s\n", station->description);
                }
 
                if ((!xmlStrcmp(sub->name, (const xmlChar *) "uri"))) {
                        station->uri = (gchar *)
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
-                       MSG("station->uri = %s\n", station->uri);
-                       fprintf(stdout, "%s (%s)\n%s\n\n", station->name, station->location, station->uri);
+                       GIRL_DEBUG_MSG("station->uri = %s\n", station->uri);
+                       /* fprintf(stdout, "%s (%s)\n%s\n\n", station->name, station->location, 
station->uri); */
                }
 
                if ((!xmlStrcmp(sub->name, (const xmlChar *) "stream"))) {
@@ -375,12 +467,12 @@ girl_station_parser(GirlStationInfo * station, xmlDocPtr doc,
 
                        station->stream->mimetype = (gchar *)
                                xmlGetProp(sub, (const xmlChar *)"mime");
-                       MSG("station->stream->mimetype = %s\n",
+                       GIRL_DEBUG_MSG("station->stream->mimetype = %s\n",
                            station->stream->mimetype);
                        if (xmlGetProp(sub, (const xmlChar *)"bitrate") != NULL) {
                                station->stream->bitrate =
                                        (glong)atol((char *)xmlGetProp(sub, (const xmlChar *)"bitrate"));
-                               MSG("station->stream->bitrate = %li\n",
+                               GIRL_DEBUG_MSG("station->stream->bitrate = %li\n",
                                    station->stream->bitrate);
                        }
 
@@ -389,29 +481,29 @@ girl_station_parser(GirlStationInfo * station, xmlDocPtr doc,
                                        atol((char *)xmlGetProp(sub, (const xmlChar *)"samplerate"));
                        }
 
-                       MSG("station->stream->samplerate = %li\n",
+                       GIRL_DEBUG_MSG("station->stream->samplerate = %li\n",
                            station->stream->samplerate);
                        station->stream->uri = (gchar *)xmlGetProp(sub, (const xmlChar *)"uri");
-                       MSG("station->stream->uri = %s\n",
+                       GIRL_DEBUG_MSG("station->stream->uri = %s\n",
                            station->stream->uri);
 
                        /* fprintf(stdout, "%s (%s)\n%s\n\n, ", station->name, station->location, 
station->stream->uri); */
                        
-                       chans = (gchar *)xmlGetProp(sub, (const xmlChar *)"channels");
+                       chans = (gchar *)xmlGetProp(sub, (const xmlChar *)"stations");
 
                        if (chans != NULL) {
                                if (strcmp(chans, "stereo") == 0) {
                                        station->stream->channels =
                                            GIRL_CHANNELS_STEREO;
-                                       MSG("station->stream->channels = %d\n", station->stream->channels);
+                                       GIRL_DEBUG_MSG("station->stream->channels = %d\n", 
station->stream->channels);
                                } else if (strcmp(chans, "mono") == 0) {
                                        station->stream->channels =
                                            GIRL_CHANNELS_MONO;
-                                       MSG("station->stream->channels = %d\n", station->stream->channels);
+                                       GIRL_DEBUG_MSG("station->stream->channels = %d\n", 
station->stream->channels);
                                } else if (strcmp(chans, "5:1") == 0) {
                                        station->stream->channels =
                                            GIRL_CHANNELS_5_1;
-                                       MSG("station->stream->channels = %d\n", station->stream->channels);
+                                       GIRL_DEBUG_MSG("station->stream->channels = %d\n", 
station->stream->channels);
                                }
                                g_free(chans);
                        }
@@ -428,7 +520,7 @@ GirlStationInfo *girl_station_load_from_http(GirlStationInfo * head,
                                             gpointer data)
 {
        GirlStationInfo *gstation;
-       gstation = girl_station_load_from_file (head, "http://girl.src.oka.no/stations.xml";);
+       gstation = girl_station_load_from_file (head, "http://girl.src.oka.no/girl.xml";);
        return gstation;
 }
 
@@ -468,7 +560,7 @@ GirlStationInfo *girl_station_load_from_file(GirlStationInfo * head,
 
        version = (gchar *)xmlGetProp(cur, (const xmlChar *)"version");
 
-       MSG("Valid Girl %s XML document... Parsing stations...\n",
+       GIRL_DEBUG_MSG("Valid Girl %s XML document... Parsing stations...\n",
            version);
 
        free(version);
@@ -479,7 +571,7 @@ GirlStationInfo *girl_station_load_from_file(GirlStationInfo * head,
 
                if ((!xmlStrcmp(cur->name, (const xmlChar *) "station"))) {
 
-                       MSG("Found a new station.\n");
+                       GIRL_DEBUG_MSG("Found a new station.\n");
 
                        curr = g_new0(GirlStationInfo, 1);
                        mem_station = g_new0(GirlStationInfo, 1);
@@ -494,13 +586,13 @@ GirlStationInfo *girl_station_load_from_file(GirlStationInfo * head,
 
                        girl_stations = g_list_append(girl_stations, (GirlStationInfo *)mem_station);
 
-                       MSG("Done with parsing the station.\n");
+                       GIRL_DEBUG_MSG("Done with parsing the station.\n");
 
                }
                cur = cur->next;
        }
 
-       MSG("Finished parsing XML document.\n");
+       GIRL_DEBUG_MSG("Finished parsing XML document.\n");
 
        xmlFreeDoc(doc);
 
diff --git a/src/girl-station.h b/src/girl-station.h
index 3f643a5..15ea0cd 100644
--- a/src/girl-station.h
+++ b/src/girl-station.h
@@ -2,7 +2,7 @@
  *
  * GNOME Internet Radio Locator
  *
- * Copyright (C) 2014  Ole Aamot Software
+ * Copyright (C) 2014, 2015  Ole Aamot Software
  *
  * Author: Ole Aamot <oka oka no>
  *
@@ -29,6 +29,20 @@
 typedef struct _GirlStationInfo GirlStationInfo;
 typedef struct _GirlStreamInfo GirlStreamInfo;
 
+typedef enum {
+       STATION_ID = 10,
+       STATION_NAME = 0,
+       STATION_RANK = 7,
+       STATION_TYPE = 6,
+       STATION_RELEASE = 5,
+       STATION_FREQUENCY = 4,
+       STATION_LOCATION = 1,
+       STATION_DESCRIPTION = 3,
+       STATION_BITRATE = 8,
+       STATION_SAMPLERATE = 9,
+       STATION_URI = 2
+} GirlStationColumn;
+
 struct _GirlStationInfo {
        GtkWidget *widget;
        gchar *id;
@@ -60,7 +74,6 @@ struct _GirlStreamInfo {
 };
 
 void show_error(gchar * msg);
-void girl_stream_player(GtkWidget * widget, gpointer data);
 void girl_station_free(GirlStationInfo * info);
 GirlStationInfo *girl_station_load_from_file(GirlStationInfo * head,
                                             char *filename);
@@ -68,4 +81,4 @@ GirlStationInfo *girl_station_load_from_http(GirlStationInfo * head,
                                             gpointer data);
 void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType girl);
 
-#endif                         /* GIRL_STATION_H */
+#endif /* GIRL_STATION_H */
diff --git a/src/girl-streams.c b/src/girl-streams.c
index 738df32..9884ff5 100644
--- a/src/girl-streams.c
+++ b/src/girl-streams.c
@@ -35,7 +35,7 @@
 #include "girl-streams.h"
 
 extern GirlData *girl;
-extern GList *girl_stations;
+extern GList *girl_channels;
 extern GList *girl_streams;
 extern GList *girl_listeners;
 extern GList *girl_streams;
@@ -65,17 +65,17 @@ girl_streams_parser(GirlStreamsInfo *streams, xmlDocPtr doc,
        g_return_if_fail(cur != NULL);
 
        streams->mime = (gchar *)xmlGetProp(cur, (const xmlChar *)"mime");
-       MSG("streams->mime = %s\n", streams->mime);
+       GIRL_DEBUG_MSG("streams->mime = %s\n", streams->mime);
        streams->uri = (gchar *)xmlGetProp(cur, (const xmlChar *)"uri");
-       MSG("streams->uri = %s\n", streams->uri);
+       GIRL_DEBUG_MSG("streams->uri = %s\n", streams->uri);
        streams->samplerate = (gchar *)xmlGetProp(cur, (const xmlChar *)"samplerate");
-       MSG("streams->samplerate = %s\n", streams->samplerate);
+       GIRL_DEBUG_MSG("streams->samplerate = %s\n", streams->samplerate);
        streams->codec = (gchar *)xmlGetProp(cur, (const xmlChar *)"codec");
-       MSG("streams->codec = %s\n", streams->codec);
+       GIRL_DEBUG_MSG("streams->codec = %s\n", streams->codec);
        streams->bitrate = (gchar *)xmlGetProp(cur, (const xmlChar *)"bitrate");
-       MSG("streams->bitrate = %s\n", streams->bitrate);
-       streams->channels = (gchar *)xmlGetProp(cur, (const xmlChar *)"channels");
-       MSG("streams->channels = %s\n", streams->channels);
+       GIRL_DEBUG_MSG("streams->bitrate = %s\n", streams->bitrate);
+       streams->channels = (GirlChannels)xmlGetProp(cur, (const xmlChar *)"channels");
+       GIRL_DEBUG_MSG("streams->channels = %s\n", streams->channels);
 
 #if 0
        sub = cur->xmlChildrenNode;
@@ -86,7 +86,7 @@ girl_streams_parser(GirlStreamsInfo *streams, xmlDocPtr doc,
                        streams->frequency =
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
-                       MSG("streams->frequency = %s\n",
+                       GIRL_DEBUG_MSG("streams->frequency = %s\n",
                            streams->frequency);
                }
 
@@ -94,7 +94,7 @@ girl_streams_parser(GirlStreamsInfo *streams, xmlDocPtr doc,
                        streams->location =
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
-                       MSG("streams->location = %s\n", streams->location);
+                       GIRL_DEBUG_MSG("streams->location = %s\n", streams->location);
                        /* fprintf(stdout, "%s (%s), ", streams->name, streams->location); */
                }
 
@@ -103,14 +103,14 @@ girl_streams_parser(GirlStreamsInfo *streams, xmlDocPtr doc,
                        streams->description =
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
-                       MSG("streams->description = %s\n", streams->description);
+                       GIRL_DEBUG_MSG("streams->description = %s\n", streams->description);
                }
 
                if ((!xmlStrcmp(sub->name, (const xmlChar *) "uri"))) {
                        streams->uri =
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
-                       MSG("streams->uri = %s\n", streams->uri);
+                       GIRL_DEBUG_MSG("streams->uri = %s\n", streams->uri);
                }
 
                if ((!xmlStrcmp(sub->name, (const xmlChar *) "encoder"))) {
@@ -120,12 +120,12 @@ girl_streams_parser(GirlStreamsInfo *streams, xmlDocPtr doc,
 
                        streams->encoder->mimetype =
                            xmlGetProp(sub, "mime");
-                       MSG("streams->encoder->mimetype = %s\n",
+                       GIRL_DEBUG_MSG("streams->encoder->mimetype = %s\n",
                            streams->encoder->mimetype);
                        if (xmlGetProp(sub, "bitrate") != NULL) {
                                streams->encoder->bitrate =
                                    atol(xmlGetProp(sub, "bitrate"));
-                               MSG("streams->encoder->bitrate = %li\n",
+                               GIRL_DEBUG_MSG("streams->encoder->bitrate = %li\n",
                                    streams->encoder->bitrate);
                        }
 
@@ -134,10 +134,10 @@ girl_streams_parser(GirlStreamsInfo *streams, xmlDocPtr doc,
                                    atol(xmlGetProp(sub, "samplerate"));
                        }
 
-                       MSG("streams->encoder->samplerate = %li\n",
+                       GIRL_DEBUG_MSG("streams->encoder->samplerate = %li\n",
                            streams->encoder->samplerate);
                        streams->encoder->uri = xmlGetProp(sub, "uri");
-                       MSG("streams->encoder->uri = %s\n",
+                       GIRL_DEBUG_MSG("streams->encoder->uri = %s\n",
                            streams->encoder->uri);
 
                        chans = xmlGetProp(sub, "channels");
@@ -146,15 +146,15 @@ girl_streams_parser(GirlStreamsInfo *streams, xmlDocPtr doc,
                                if (strcmp(chans, "stereo") == 0) {
                                        streams->encoder->channels =
                                            GIRL_CHANNELS_STEREO;
-                                       MSG("streams->encoder->channels = %d\n", streams->encoder->channels);
+                                       GIRL_DEBUG_MSG("streams->encoder->channels = %d\n", 
streams->encoder->channels);
                                } else if (strcmp(chans, "mono") == 0) {
                                        streams->encoder->channels =
                                            GIRL_CHANNELS_MONO;
-                                       MSG("streams->encoder->channels = %d\n", streams->encoder->channels);
+                                       GIRL_DEBUG_MSG("streams->encoder->channels = %d\n", 
streams->encoder->channels);
                                } else if (strcmp(chans, "5:1") == 0) {
                                        streams->encoder->channels =
                                            GIRL_CHANNELS_5_1;
-                                       MSG("streams->encoder->channels = %d\n", streams->encoder->channels);
+                                       GIRL_DEBUG_MSG("streams->encoder->channels = %d\n", 
streams->encoder->channels);
                                }
                                g_free(chans);
                        }
@@ -212,7 +212,7 @@ GirlStreamsInfo *girl_streams_load_from_file(GirlStreamsInfo * head,
 
        version = (gchar *)xmlGetProp(cur, (const xmlChar *)"version");
 
-       MSG("Valid Girl %s XML document... Parsing streams...\n",
+       GIRL_DEBUG_MSG("Valid Girl %s XML document... Parsing streams...\n",
            version);
 
        free(version);
@@ -223,7 +223,7 @@ GirlStreamsInfo *girl_streams_load_from_file(GirlStreamsInfo * head,
 
                if ((!xmlStrcmp(cur->name, (const xmlChar *) "stream"))) {
 
-                       MSG("Found a new stream.\n");
+                       GIRL_DEBUG_MSG("Found a new stream.\n");
 
                        curr = g_new0(GirlStreamsInfo, 1);
                        mem_streams = g_new0(GirlStreamsInfo, 1);
@@ -238,13 +238,13 @@ GirlStreamsInfo *girl_streams_load_from_file(GirlStreamsInfo * head,
 
                        girl_streams = g_list_append(girl_streams, (GirlStreamsInfo *)mem_streams);
 
-                       MSG("Done with parsing the streams.\n");
+                       GIRL_DEBUG_MSG("Done with parsing the streams.\n");
 
                }
                cur = cur->next;
        }
 
-       MSG("Finished parsing XML document.\n");
+       GIRL_DEBUG_MSG("Finished parsing XML document.\n");
 
        xmlFreeDoc(doc);
 
diff --git a/src/girl-streams.h b/src/girl-streams.h
index 0f17bf8..314d9bf 100644
--- a/src/girl-streams.h
+++ b/src/girl-streams.h
@@ -35,8 +35,9 @@ struct _GirlStreamsInfo {
        gchar *uri;
        gchar *codec;
        gchar *samplerate;
-       gchar *channels;
+       gchar *streams;
        gchar *bitrate;
+       GirlChannels channels;
        GirlEncoderInfo *encoder;
        GirlStreamsInfo *next;
        GirlStreamsInfo *prev;
diff --git a/src/girl.c b/src/girl.c
index 212f17a..bc3aa86 100644
--- a/src/girl.c
+++ b/src/girl.c
@@ -2,7 +2,7 @@
  *
  * GNOME Internet Radio Locator
  *
- * Copyright (C) 2014  Ole Aamot Software
+ * Copyright (C) 2014, 2015  Ole Aamot Software
  *
  * Author: Ole Aamot <oka oka no>
  *
@@ -36,12 +36,6 @@
 #include "girl-listener.h"
 #include "girl-station.h"
 
-#ifdef GIRL_DEBUG
-#define MSG(x...) g_message(x)
-#else
-#define MSG(x...)
-#endif
-
 GirlData *girl;
 
 GList *girl_listeners;
@@ -54,6 +48,7 @@ GtkWidget *listeners_selector = NULL;
 GtkWidget *programs_selector = NULL;
 GtkWidget *stations_selector = NULL;
 GtkWidget *streams_selector = NULL;
+GtkWidget *search_selector = NULL;
 
 int main(int argc, char *argv[])
 {
@@ -83,36 +78,29 @@ int main(int argc, char *argv[])
 
        gtk_widget_show(girl_app);
 
-       /* Set up the listeners list */
-       /* listeners_selector = create_listeners_selector(girl->selected_listener_uri,"listeners.xml"); */
-
-       /* g_object_add_weak_pointer(G_OBJECT(listeners_selector), */
-       /*                        (void **) &(listeners_selector)); */
-
-       /* /\* Set up the programs list *\/ */
-       /* programs_selector = create_programs_selector(girl->selected_program_uri,"programs.xml"); */
-
-       /* gtk_widget_show(programs_selector); */
-
-        g_object_add_weak_pointer(G_OBJECT(programs_selector),
-                                 (void **) &(programs_selector));
-
-       /* Set up the stations list */
+       /* Set up the channels list */
        stations_selector = create_stations_selector(girl->selected_station_uri,
-                                                    "stations.xml");
+                                                    "girl.xml");
+       
+       /* /\* Set up the stations list *\/ */
+       /* stations_selector = create_stations_selector(girl->selected_station_uri, */
+       /*                                           "girl.xml"); */
 
        /* Set up the streams list */
-       streams_selector = create_streams_selector(girl->selected_streams_uri,
-                                                  "streams.xml");
+       /* streams_selector = create_streams_selector(girl->selected_streams_uri, */
+       /*                                         "streams.xml"); */
 
        g_object_add_weak_pointer(G_OBJECT(stations_selector),
                                  (void **) &(stations_selector));
+       
+       /* g_object_add_weak_pointer(G_OBJECT(stations_selector), */
+       /*                        (void **) &(stations_selector)); */
 
-       g_object_add_weak_pointer(G_OBJECT(streams_selector),
-                                 (void **) &(streams_selector));
+       /* g_object_add_weak_pointer(G_OBJECT(streams_selector), */
+       /*                        (void **) &(streams_selector)); */
        /* Icons */
 
-       iconname = g_strconcat(DATADIR, "/girl/girl.png", NULL);
+       iconname = g_strconcat(GIRL_DATADIR, "/girl.png", NULL);
 
        if (iconname != NULL) {
                girl->icon = gdk_pixbuf_new_from_file(iconname, NULL);
@@ -144,18 +132,13 @@ void appbar_send_msg(const char *a, ...)
        gchar foo[2048];
        va_list ap;
        va_start(ap, a);
-
        vsnprintf(foo, 2000, a, ap);
-
        gnome_appbar_pop(girl->appbar);
        gnome_appbar_push(girl->appbar, foo);
-
-       MSG("%s", foo);
-
+       GIRL_DEBUG_MSG("%s", foo);
        /* lets update the statusbar widget */
        while (gtk_events_pending())
                gtk_main_iteration();
-
        va_end(ap);
 }
 
@@ -166,107 +149,95 @@ static void cause_movement(int way)
 
 void on_previous_station_click(GtkWidget * a, gpointer user_data)
 {
-       GList *l = g_list_previous(girl_stations);
-       if (l != NULL) {
-               GirlStationInfo *station = l->data;
-               if (station->prev != NULL) {
-                       girl_stations->data = station->prev;
-               } else {
-                       girl_stations->data = station;
-               }
+       GirlStationInfo *station = (GirlStationInfo *)girl->previous_station;
+       girl->previous_station = girl->selected_station;
 
+       if (station != NULL) {
                cause_movement(-1);
-               if (station != NULL) {
-                       printf("Previous Station ID: %s\n", station->id);
-                       printf("Previous Station Name: %s\n", station->name);
-                       printf("Previous Station URI: %s\n", station->stream->uri);
-                       printf("Previous Station Location: %s\n", station->location);
-
-                       girl->selected_station_uri = station->stream->uri;
-
-                       MSG("on_station_select_changed: %s\n",
-                           girl->selected_station_uri);
-
-                       girl->selected_station_name = station->name;
-
-                       MSG("on_station_select_changed: %s\n",
-                           girl->selected_station_name);
-
-                       girl->selected_station_location = station->location;
-
-                       MSG("on_station_select_changed: %s\n",
-                           girl->selected_station_location);
-
-                       girl->selected_station_release = station->release;
-
-                       MSG("on_station_select_changed: %s\n",
-                           girl->selected_station_release);
-
-                       girl->selected_station_description = station->description;
-
-                       MSG("on_station_select_changed: %s\n",
-                           girl->selected_station_description);
-
-                       appbar_send_msg(_("Selected %s in %s: %s"),
-                                       girl->selected_station_name,
-                                       girl->selected_station_location,
-                                       girl->selected_station_uri,
-                                       girl->selected_station_release);
-                       
-
-                       girl_helper_run(girl->selected_station_uri,
-                                       girl->selected_station_name,
-                                       GIRL_STREAM_SHOUTCAST,
-                                       GIRL_STREAM_PLAYER);
-               }
+               GIRL_DEBUG_MSG("Previous Station ID: %s\n", station->id);
+               GIRL_DEBUG_MSG("Previous Station Name: %s\n", station->name);
+               GIRL_DEBUG_MSG("Previous Station URI: %s\n", station->stream->uri);
+               GIRL_DEBUG_MSG("Previous Station Location: %s\n", station->location);
+               girl->selected_station_uri = station->stream->uri;
+               girl->selected_station_name = station->name;
+               girl->selected_station_location = station->location;
+               girl->selected_station_release = station->release;
+               girl->selected_station_description = station->description;
+               GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
+                              girl->selected_station_uri);
+
+               girl->selected_station_name = station->name;
+               GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
+                              girl->selected_station_name);
+               girl->selected_station_location = station->location;
+               GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
+                              girl->selected_station_location);
+               girl->selected_station_release = station->release;
+               GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
+                              girl->selected_station_release);
+               girl->selected_station_description = station->description;
+               GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
+                              girl->selected_station_description);
+               appbar_send_msg(_("Selected the previous radio station: %s in %s: %s"),
+                               girl->selected_station_name,
+                               girl->selected_station_location,
+                               girl->selected_station_uri,
+                               girl->selected_station_release);
+               girl_helper_run(girl->selected_station_uri,
+                               girl->selected_station_name,
+                               GIRL_STREAM_SHOUTCAST,
+                               GIRL_STREAM_PLAYER);
        } else {
-               printf("Prev Station: At the beginning of Stations list!\n");
+
+               GIRL_DEBUG_MSG("Prev Station: At the beginning of Stations list!\n");
        }
+       girl->previous_station = station;
 }
 
 void on_next_station_click(GtkWidget * a, gpointer user_data)
 {
        GList *l = g_list_first(girl_stations);
+       girl->previous_station = (GirlStationInfo*)girl->selected_station;
        if (l != NULL) {
                GirlStationInfo *station = l->data;
                if (station->next != NULL) {
                        girl_stations->data = station->next;
                } else {
-                       printf("Next Station: At the end of Stations list!\n");
+                       GIRL_DEBUG_MSG("Next Station: At the end of Stations list!\n");
                }
                cause_movement(1);
                if (station != NULL) {
-                       printf("Next Station ID: %s\n", station->id);
-                       printf("Next Station Name: %s\n", station->name);
-                       printf("Next Station URI: %s\n", station->stream->uri);
-                       printf("Next Station Location: %s\n", station->location);
+                       GIRL_DEBUG_MSG("Next Station ID: %s\n", station->id);
+                       GIRL_DEBUG_MSG("Next Station Name: %s\n", station->name);
+                       GIRL_DEBUG_MSG("Next Station URI: %s\n", station->stream->uri);
+                       GIRL_DEBUG_MSG("Next Station Location: %s\n", station->location);
 
                        girl->selected_station_uri = station->stream->uri;
 
-                       MSG("on_station_select_changed: %s\n",
+                       GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
                            girl->selected_station_uri);
 
                        girl->selected_station_name = station->name;
 
-                       MSG("on_station_select_changed: %s\n",
+                       GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
                            girl->selected_station_name);
 
                        girl->selected_station_location = station->location;
 
-                       MSG("on_station_select_changed: %s\n",
+                       GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
                            girl->selected_station_location);
 
                        girl->selected_station_release = station->release;
 
-                       MSG("on_station_select_changed: %s\n",
+                       GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
                            girl->selected_station_release);
 
                        girl->selected_station_description = station->description;
 
-                       MSG("on_station_select_changed: %s\n",
+                       GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
                            girl->selected_station_description);
 
-                       appbar_send_msg(_("Selected %s in %s: %s"),
+                       appbar_send_msg(_("Selected the next radio station %s in %s: %s"),
                                        girl->selected_station_name,
                                        girl->selected_station_location,
                                        girl->selected_station_uri,
@@ -276,6 +247,8 @@ void on_next_station_click(GtkWidget * a, gpointer user_data)
                                        station->name,
                                        GIRL_STREAM_SHOUTCAST,
                                        GIRL_STREAM_PLAYER);
+
+                       girl->selected_station = (GirlStationInfo*)station;
                }
        }
 }
@@ -294,27 +267,27 @@ void on_listeners_selector_changed(GtkWidget * a, gpointer user_data)
 
        girl->selected_listener_uri =
            g_strdup(g_object_get_data(G_OBJECT(a), "listener_uri"));
-       MSG("on_listener_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_listener_select_changed: %s\n",
            girl->selected_listener_uri);
 
        girl->selected_listener_name =
            g_strdup(g_object_get_data(G_OBJECT(a), "listener_name"));
-       MSG("on_listener_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_listener_select_changed: %s\n",
            girl->selected_listener_name);
 
        girl->selected_listener_location =
            g_strdup(g_object_get_data(G_OBJECT(a), "listener_location"));
-       MSG("on_listener_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_listener_select_changed: %s\n",
            girl->selected_listener_location);
 
        girl->selected_listener_release =
            g_strdup(g_object_get_data(G_OBJECT(a), "listener_release"));
-       MSG("on_listener_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_listener_select_changed: %s\n",
            girl->selected_listener_release);
 
        girl->selected_listener_description =
            g_strdup(g_object_get_data(G_OBJECT(a), "listener_description"));
-       MSG("on_listener_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_listener_select_changed: %s\n",
            girl->selected_listener_description);
 
        appbar_send_msg(_("Selected %s in %s: %s (%f)"),
@@ -343,26 +316,26 @@ void on_programs_selector_changed(GtkWidget * a, gpointer user_data)
 
        girl->selected_program_uri =
            g_strdup(g_object_get_data(G_OBJECT(a), "program_uri"));
-       MSG("on_program_select_changed: %s\n", girl->selected_program_uri);
+       GIRL_DEBUG_MSG("on_program_select_changed: %s\n", girl->selected_program_uri);
 
        girl->selected_program_name =
            g_strdup(g_object_get_data(G_OBJECT(a), "program_name"));
-       MSG("on_program_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_program_select_changed: %s\n",
            girl->selected_program_name);
 
        girl->selected_program_location =
            g_strdup(g_object_get_data(G_OBJECT(a), "program_location"));
-       MSG("on_program_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_program_select_changed: %s\n",
            girl->selected_program_location);
 
        girl->selected_program_release =
            g_strdup(g_object_get_data(G_OBJECT(a), "program_release"));
-       MSG("on_program_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_program_select_changed: %s\n",
            girl->selected_program_release);
 
        girl->selected_program_description =
            g_strdup(g_object_get_data(G_OBJECT(a), "program_description"));
-       MSG("on_program_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_program_select_changed: %s\n",
            girl->selected_program_description);
 
        appbar_send_msg(_("Selected %s in %s: %s"),
@@ -390,29 +363,29 @@ void on_stations_selector_changed(GtkWidget * a, gpointer user_data)
 
        girl->selected_station_uri =
            g_strdup(g_object_get_data(G_OBJECT(a), "station_uri"));
-       MSG("on_station_select_changed: %s\n", girl->selected_station_uri);
+       GIRL_DEBUG_MSG("on_station_select_changed: %s\n", girl->selected_station_uri);
 
        girl->selected_station_name =
            g_strdup(g_object_get_data(G_OBJECT(a), "station_name"));
-       MSG("on_station_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
            girl->selected_station_name);
 
        girl->selected_station_location =
            g_strdup(g_object_get_data(G_OBJECT(a), "station_location"));
-       MSG("on_station_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
            girl->selected_station_location);
 
        girl->selected_station_release =
            g_strdup(g_object_get_data(G_OBJECT(a), "station_release"));
-       MSG("on_station_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
            girl->selected_station_release);
 
        girl->selected_station_description =
            g_strdup(g_object_get_data(G_OBJECT(a), "station_description"));
-       MSG("on_station_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_station_select_changed: %s\n",
            girl->selected_station_description);
 
-       appbar_send_msg(_("Selected %s in %s: %s"),
+       appbar_send_msg(_("Selected the radio station %s in %s: %s"),
                        girl->selected_station_name,
                        girl->selected_station_location,
                        girl->selected_station_uri,
@@ -436,27 +409,27 @@ void on_streams_selector_changed(GtkWidget * a, gpointer user_data)
                g_free(girl->selected_streams_uri);
 
        girl->selected_streams_uri = g_strdup(g_object_get_data(G_OBJECT(a), "streams_uri"));
-       MSG("on_streams_select_changed: %s\n", girl->selected_streams_uri);
+       GIRL_DEBUG_MSG("on_streams_select_changed: %s\n", girl->selected_streams_uri);
 
        girl->selected_streams_mime = g_strdup(g_object_get_data(G_OBJECT(a), "streams_mime"));
-       MSG("on_streams_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_streams_select_changed: %s\n",
            girl->selected_streams_mime);
 
        girl->selected_streams_codec = g_strdup(g_object_get_data(G_OBJECT(a), "streams_codec"));
-       MSG("on_streams_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_streams_select_changed: %s\n",
            girl->selected_streams_codec);
 
        girl->selected_streams_samplerate = g_strdup(g_object_get_data(G_OBJECT(a), "streams_samplerate"));
-       MSG("on_streams_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_streams_select_changed: %s\n",
            girl->selected_streams_samplerate);
 
        girl->selected_streams_bitrate = g_strdup(g_object_get_data(G_OBJECT(a), "streams_bitrate"));
-       MSG("on_streams_select_changed: %s\n",
+       GIRL_DEBUG_MSG("on_streams_select_changed: %s\n",
            girl->selected_streams_bitrate);
 
-       girl->selected_streams_channels = g_strdup(g_object_get_data(G_OBJECT(a), "streams_channels"));
-       MSG("on_streams_select_changed: %s\n",
-           girl->selected_streams_channels);
+       girl->selected_streams_stations = g_strdup(g_object_get_data(G_OBJECT(a), "streams_stations"));
+       GIRL_DEBUG_MSG("on_streams_select_changed: %s\n",
+           girl->selected_streams_stations);
 
        appbar_send_msg(_("Selected %s [%s] [%s] [%s]"),
                        girl->selected_streams_uri,
@@ -501,8 +474,8 @@ void quit_app(GtkWidget * a, gpointer user_data)
                                girl->selected_streams_samplerate);
        gnome_config_set_string("selected_streams_bitrate",
                                girl->selected_streams_bitrate);
-       gnome_config_set_string("selected_streams_channels",
-                               girl->selected_streams_channels);
+       gnome_config_set_string("selected_streams_stations",
+                               girl->selected_streams_stations);
        gnome_config_sync();
        gnome_config_pop_prefix();
 
@@ -519,29 +492,48 @@ void quit_app(GtkWidget * a, gpointer user_data)
 
 void about_app(GtkWidget * a, gpointer user_data)
 {
-       static GtkWidget *about = NULL;
-       const gchar *authors[] = {
-               ("Ole Aamot <ole src gnome org>"),
-               NULL,
-       };
-       const gchar *translator_credits = _("translator_credits");
-
-       if (about) {
-               gdk_window_raise(about->window);
-               return;
+       static GtkWindow *about = NULL;
+       gchar* authors[] = { "Ole Aamot",
+                            "Marek Černocký",
+                            "Miroslav Nikolić",
+                            "Wolfgang Stöggl",
+                            "Piotr Drąg",
+                            "Muhammet Kara",
+                            "Balázs Úr",
+                            NULL };
+       gchar* artists[] = { "Wiki Graphic Designer",
+                            "Aly Raj",
+                            NULL };
+       gchar* comments = { "Locate Internet Radio Stations" };
+       gchar* copyright = { "Copyright (C) 2014, 2015  Ole Aamot Software" };
+       gchar* documenters[] = { NULL };
+
+       static GdkPixbuf* logo;
+       gchar* name = PACKAGE;
+       gchar* version = VERSION;
+       gchar* website = "http://wiki.gnome.org/Apps/Girl";;
+       gchar* website_label = "http://wiki.gnome.org/Apps/Girl";;
+
+       if (!logo) {
+               GError* error = NULL;
+               logo = gdk_pixbuf_new_from_file (GIRL_DATADIR "/girl.png", &error);
+               if (error) {
+                       g_warning ("Unable to load GIRL logo: %s\n", error->message);
+                       g_error_free (error);
+               }
        }
 
-       about = gnome_about_new(_("GNOME Internet Radio Locator"), VERSION, _("Copyright 2014 Ole Aamot 
Software\nCopyright 2002 Free Software Foundation"), _("Locate Internet Radio Stations"), (const gchar **) 
authors, NULL,       /* documenters */
-                               strcmp(translator_credits,
-                                      "translator_credits") !=
-                               0 ? translator_credits : NULL, girl->icon);
-
-       g_signal_connect(G_OBJECT(about), "destroy",
-                        G_CALLBACK(gtk_widget_destroy), NULL);
-       g_signal_connect(G_OBJECT(about), "delete-event",
-                        G_CALLBACK(gtk_widget_destroy), NULL);
-       g_object_add_weak_pointer(G_OBJECT(about), (void **) &(about));
-       gtk_widget_show(about);
+       gtk_show_about_dialog (about,
+                              "authors", authors,
+                              "artists", artists,
+                              "comments", comments,
+                              "copyright", copyright,
+                              "documenters", documenters,
+                              "logo", logo,
+                              "name", name,
+                              "version", version,
+                              "website", website,
+                              "website-label", website_label, NULL);
 }
 
 void about_listener(GtkWidget * a, gpointer user_data)
@@ -671,13 +663,23 @@ void about_streams(GtkWidget * a, gpointer user_data)
 
 }
 
+void on_search_button_clicked(GtkWidget *a, gpointer user_data)
+{
+       GtkWidget *search;
+
+       search = create_search_selector();
+       gtk_widget_show(search);
+       
+       appbar_send_msg(_("Search radio station by location"));
+}
+
 void on_listen_button_clicked(GtkWidget *a, gpointer user_data)
 {
 
 
        /* girl_stream_player(a, user_data); */
 
-       appbar_send_msg(_("Listening to %s in %s: %s "),
+       appbar_send_msg(_("Listening to the radio station %s in %s: %s "),
                        girl->selected_station_name,
                        girl->selected_station_location,
                        girl->selected_station_uri,
@@ -699,7 +701,7 @@ void on_record_button_clicked(GtkWidget *a, gpointer user_data)
        credentials = g_credentials_new ();
        
        if (girl->selected_station_name != NULL) {
-               appbar_send_msg(_("Recording from %s in %s: %s "),
+               appbar_send_msg(_("Recording from the radio station %s in %s: %s "),
                                girl->selected_station_name,
                                girl->selected_station_location,
                                girl->selected_station_uri,
@@ -725,6 +727,51 @@ void on_record_button_clicked(GtkWidget *a, gpointer user_data)
        }
 }
 
+void on_stop_button_clicked(GtkWidget *a, gpointer user_data)
+{
+
+       if (girl->record_status == GIRL_RECORD_TRUE) {
+               
+               /* Close pid */
+               
+               g_spawn_close_pid( girl->record_pid);
+
+               appbar_send_msg(_("Finished recording from the radio station %s in %s: %s"),
+                               girl->selected_station_name,
+                               girl->selected_station_location,
+                               girl->selected_station_uri,
+                               girl->selected_station_release);
+
+               girl->record_status = GIRL_RECORD_FALSE;
+               
+       } else {
+
+               if (girl->player_status == GIRL_PLAYER_TRUE) {
+                       
+                       g_spawn_close_pid( girl->player_pid);
+                       
+                       appbar_send_msg(_("To finish playing from the radio station %s in %s: %s, simply exit 
the application Videos."),
+                                       girl->selected_station_name,
+                                       girl->selected_station_location,
+                                       girl->selected_station_uri,
+                                       girl->selected_station_release);
+                       
+                       girl->player_status = GIRL_PLAYER_FALSE;
+
+               } else {
+                       
+                       appbar_send_msg(_("Stop what?  You can \"Search\" by location, select a radio station 
from \"Stations\", or click on \"Listen\" and/or \"Record\".  Or go to \"Prev\" or \"Next\" radio station."),
+                                       girl->selected_station_name,
+                                       girl->selected_station_location,
+                                       girl->selected_station_uri,
+                                       girl->selected_station_release);
+                       
+               }
+       }
+       
+       
+}
+
 GnomeVFSFileSize get_size(GnomeVFSURI * uri)
 {
        GnomeVFSFileInfoOptions info_options;
@@ -754,7 +801,7 @@ girl_archive_progress_callback(GnomeVFSXferProgressInfo * info, gpointer data)
                gtk_main_iteration();
 
        appbar_send_msg(_("Archiving %s"), (gchar *) data);
-       MSG("%s", gnome_vfs_result_to_string(info->status));
+       GIRL_DEBUG_MSG("%s", gnome_vfs_result_to_string(info->status));
        return TRUE;
 }
 
diff --git a/src/girl.h b/src/girl.h
index 0570eb6..a1c340d 100644
--- a/src/girl.h
+++ b/src/girl.h
@@ -2,7 +2,7 @@
  *
  * GNOME Internet Radio Locator
  *
- * Copyright (C) 2014  Ole Aamot Software
+ * Copyright (C) 2014, 2015  Ole Aamot Software
  *
  * Author: Ole Aamot <oka oka no>
  *
@@ -47,32 +47,36 @@ typedef enum {
 #include "girl-listener.h"
 #include "girl-program.h"
 #include "girl-runners.h"
-#include "girl-station.h"
 #include "girl-streams.h"
+#include "girl-station.h"
 
-#ifdef GIRL_DEBUG
-#define MSG(x...) g_message(x)
+#if GIRL_DEBUG == 0
+#define GIRL_DEBUG_MSG(x...) g_message(x)
 #else
-#define MSG(x...)
+#define GIRL_DEBUG_MSG(x...)
 #endif
 
-#define GIRL_RECORDING_TRUE 1
-#define GIRL_RECORDING_FALSE 0
+#define GIRL_RECORD_TRUE 1
+#define GIRL_RECORD_FALSE 0
+#define GIRL_PLAYER_TRUE 1
+#define GIRL_PLAYER_FALSE 0
 
 void show_error(gchar * msg);
 void appbar_send_msg(const char *a, ...);
 
 /* GnomeVFSFileSize get_size(GnomeVFSURI *uri); */
 
-/* GnomeVFSURI *xfer_stations(gchar *src, gchar *dest); */
+/* GnomeVFSURI *xfer_channels(gchar *src, gchar *dest); */
 
 gchar *copy_to_mem(GnomeVFSURI * uri, GnomeVFSFileSize len);
 
-/* Fetcher for the stations */
+/* Fetcher for the channels */
 
 void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType girl);
+void on_search_button_clicked(GtkWidget * button, gpointer user_data);
 void on_listen_button_clicked(GtkWidget * button, gpointer user_data);
 void on_record_button_clicked(GtkWidget * button, gpointer user_data);
+void on_stop_button_clicked(GtkWidget *a, gpointer user_data);
 void on_next_station_click(GtkWidget *, gpointer user_data);
 void on_previous_station_click(GtkWidget *, gpointer user_data);
 void on_listeners_selector_button_clicked(GtkWidget *, gpointer user_data);
@@ -89,11 +93,12 @@ void about_listener(GtkWidget *, gpointer user_data);
 void about_program(GtkWidget *, gpointer user_data);
 void about_station(GtkWidget *, gpointer user_data);
 void about_streams(GtkWidget *, gpointer user_data);
-
+       
 struct _GirlData {
        GtkImage *pixmap;
        GnomeAppBar *appbar;
        GtkProgressBar *progress;
+       GtkAboutDialog *window;
        GirlListenerInfo *selected_listener;
        gchar *selected_listener_uri;
        gchar *selected_listener_name;
@@ -108,23 +113,29 @@ struct _GirlData {
        gchar *selected_program_description;
        GirlRunnersInfo *selected_runners;
        gint timeout_id;
+       GirlStationInfo *previous_station;
        GirlStationInfo *selected_station;
        gchar *selected_station_uri;
        gchar *selected_station_name;
        gchar *selected_station_location;
        gchar *selected_station_release;
        gchar *selected_station_description;
+       gchar *selected_station_website;
        gint selected_bitrate;
        GirlStreamsInfo *selected_streams;
        gchar *selected_streams_mime;
        gchar *selected_streams_uri;
        gchar *selected_streams_codec;
        gchar *selected_streams_samplerate;
-       gchar *selected_streams_channels;
+       gchar *selected_streams_stations;
        gchar *selected_streams_bitrate;
-       GirlChannels selected_channels;
+       GirlChannels selected_streams_channels;
        gint selected_samplerate;
        GdkPixbuf *icon;
+       gint player_status;
+       GPid player_pid;
+       gint record_status;
+       GPid record_pid;
 };
 
 typedef struct _GirlData GirlData;
diff --git a/src/stations.xml b/src/stations.xml
deleted file mode 100644
index f7dc1b9..0000000
--- a/src/stations.xml
+++ /dev/null
@@ -1,329 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE girl SYSTEM "girl-0.9.dtd">
-<girl version="0.9">
-  <station id="coog" name="COOG" rank="1.0" type="edu" release="online">
-    <frequency uri="http://coogradio.uh.edu/";></frequency>
-    <location>Houston, TX</location>
-    <description>Coog Radio is an online radio station operated and staffed by students from the University 
of Houston. Co-founders Conner Clifton, Markley Rogers, and Matt Womack came up with the idea in 2010, but it 
wasn’t until fall 2011 that the idea finally came to fruition. Coog Radio not only provides a creative outlet 
for fellow students to express themselves over the air, but also introduces them to the world of 
broadcasting.</description>
-    <stream mime="audio/mpeg" uri="http://coogradio.uh.edu:8000/coogradio.m3u"; codec="MPEG 1 Audio, Layer 3 
(MP3)" samplerate="48000 Hz" channels="Stereo" bitrate="128 kbps" />
-  </station>
-  <station id="wvua" name="WVUA-FM" rank="1.0" type="edu" release="90.7">
-    <frequency uri="http://wvuafm.ua.edu/";></frequency>
-    <location>Tuscaloosa, AL</location>
-    <description>WVUA-FM is the University’s only student operated radio station. Its history dates back to 
1940 when the Department of Radio Arts began operation of an AM carrier-current station (the signal was 
transmitted to dormitories and other buildings on campus through electrical wiring). The station was known as 
BRN (the Bama Radio Network). In 1947, the signal was extended and the station became known as WABP. The 
station was operated as a commercial venture at 570 on the AM dial. During the 1950’s and 1960’s, as more 
students moved off campus, the station’s listenership dwindled.</description>
-    <stream mime="audio/mpeg" uri="http://ice8.securenetsystems.net/WVUA"; codec="MPEG-4 AAC" 
samplerate="44100 Hz" channels="Stereo" bitrate="30 kbps" />
-  </station>
-  <station id="ury" name="University Radio York" rank="1.0" type="edu" release="1350" lang="en">
-    <frequency uri="http://ury.org.uk/";></frequency>
-    <location>York, United Kingdom</location>
-    <description>University Radio York (URY) is the student radio station for the University of York, 
broadcasting 24 hours a day during term time on 1350am across the University's Heslington Campus and 
worldwide via this website.
-
-    The station is run by students for students, meaning the people behind the station understand what the 
listenership want to hear.
-
-    With no playlist and no set format to many of our shows, our presenters have the chance to try whatever 
they like, as long as it's legal!</description>
-    <stream mime="audio/mpeg" uri="http://ury.york.ac.uk/audio/live-mobile.m3u"; codec="MPEG 1 Audio, Layer 3 
(MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="48 kbps" />
-    <stream mime="audio/mpeg" uri="http://ury.york.ac.uk/audio/live-low.m3u"; codec="MPEG 1 Audio, Layer 3 
(MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="96 kbps" />
-    <stream mime="audio/mpeg" uri="http://ury.york.ac.uk/audio/live-high.m3u"; codec="MPEG 1 Audio, Layer 3 
(MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="192 kbps" />
-  </station>
-  <station id="eper" name="EPER" rank="1.0" type="edu" release="97.0" lang="en">
-    <frequency uri="http://eper.elte.hu/";></frequency>
-    <location>Budapest, Hungary</location>
-    <description>EPER is a non-profit small power community station in downtown Budapest. We broadcast from 
the buildings of the Eötvös Loránd University. Our staff is students and teachers of the University or of 
other institutions of higher education.</description>
-    <stream mime="audio/mpeg" uri="http://radio.elte.hu:8000/eper2"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="44100 Hz" channels="Mono" bitrate="64 kbps" />
-    <stream mime="audio/mpeg" uri="http://radio.elte.hu:8000/eper24"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="22050 Hz" channels="Mono" bitrate="24 kbps" />
-    <stream mime="audio/mpeg" uri="http://radio.elte.hu:8000/live24"; codec="MPEG-2 AAC" samplerate="32000 
Hz" channels="Stereo" bitrate="24 kbps" />
-  </station>
-  <station id="burstradio" name="Burst Radio" rank="1.0" type="edu" release="" lang="en">
-    <frequency uri="http://www.burstradio.co.uk/";></frequency>
-    <location>Brighton, United Kingdom</location>
-    <description>Burst aims to capture the essential essence of student life at Brighton University; distil 
it and broadcast this elixir to you.</description>
-    <stream mime="audio/mpeg" uri="http://burst.brighton.ac.uk:8000/burst.mp3"; codec="MPEG 1 Audio, Layer 3 
(MP3)" samplerate="22050 Hz" channels="Mono" bitrate="24 kbps" />
-    <stream mime="audio/mpeg" uri="http://burst.brighton.ac.uk:8000/burst.mp3"; codec="MPEG 1 Audio, Layer 3 
(MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-  </station>
-  <station id="fusefm" name="Fuse FM" rank="1.0" type="edu" release="" lang="en">
-    <frequency uri="http://fusefm.co.uk/";></frequency>
-    <location>Manchester, United Kingdom</location>
-    <description>Fuse FM is Manchester University's student radio station. We first went on air back in 
2001, and 13 years later we now broadcast from a brand new, professional quality studio from within the 
Students' Union. We broadcast online throughout the academic year and you can listen to live shows and 
podcasts on our website. We love our new home, but we need your help to sound great on air. If you want to 
get in on the action, you'd be more than welcome! We are constantly on the look out for new talent, so if you 
fancy yourself as a music journalist, producer, DJ, news reader, or think you have what it takes to host your 
own show, Fuse FM is certainly the place for you! Not only is Fuse FM a fun organisation to be part of, but 
we can help you if you are interested in getting into the radio industry. Past Fuse FM members have gone on 
to find work at the BBC and commercial radio stations.</description>
-    <stream mime="audio/mpeg" uri="http://studio.fusefm.co.uk:8000/livehi"; codec="MPEG 1 Audio, Layer 3 
(MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="320 kbps" />
-    <stream mime="audio/ogg" uri="http://studio.fusefm.co.uk:8000/livehi";  codec="Ogg Vorbis" 
samplerate="44100 Hz" channels="Stereo" bitrate="320 kbps" />
-    <stream mime="audio/mpeg" uri="http://studio.fusefm.co.uk:8000/live"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <stream mime="audio/ogg" uri="http://studio.fusefm.co.uk:8000/live";  codec="Ogg Vorbis" 
samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-  </station>
-  <station id="cjsw" name="CJSW" rank="1.0" type="edu" release="90.9" lang="en">
-    <frequency uri="http://cjsw.com/";></frequency>
-    <location>Calgary, Canada</location>
-    <description>CJSW 90.9 FM will be celebrating 30 years of on air radio programming at the beginning of 
2015. Our goal is to provide an alternative to commercial media by recognizing and promoting the diverse 
musical styles, points of view and cultures that exist within our city. CJSW strives to provide programming 
to an audience and by programmers that are varied in their ethnicity, culture, gender, sexual orientation, 
age, and physical and mental ability. Our diverse programming includes music, arts, spoken word and 
multicultural programs.</description>
-    <stream mime="audio/mpeg" uri="http://stream.cjsw.com/cjsw.mp3.m3u"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-  </station>
-  <station id="caper" name="Caper Radio" rank="1.0" type="edu" release="pending" lang="en">
-    <frequency uri="http://caperradio.ca/";>Pending FM license in Sydney, Nova Scotia, Canada</frequency>
-    <location>Sydney, Nova Scotia, Canada</location>
-    <description>Caper Radio Incorporated is CBU's campus radio station!
-
-    Located in the Students' Union building we are equipped with an ever-growing music collection of over 
6000 CDs on a digital library. We offer some of the best independent music in Canada. Caper Radio is also a 
prime resource for information on events taking place both on and off campus.
-
-    Being involved with Caper Radio, Inc. helps students gain new skills (in communication, as well as 
working with the equipment), build confidence, and make new friends. Taking part in shaping the university 
community, and building valuable job skills – It's a lot of fun too!
-
-    Caper Radio broadcasts from 9:30am until 4:30pm Monday - Friday. Repeat broadcasts can be heard by 
visiting our website.</description>
-    <stream mime="audio/mpeg" uri="http://142.12.32.15:8000/stream.m3u"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-  </station>
-  <station id="wxou" name="WXOU" rank="1.0" type="edu" release="88.3" lang="en">
-    <frequency uri="http://wxou.org/";>88.3 FM in Rochester, MI</frequency>
-    <location>Rochester, MI</location>
-    <description>WXOU is a non-profit, student operated, freeform community radio station. Currently we are 
broadcasting with 110 watts of power from the campus of Oakland University. WE offer diverse programming such 
as, music, sports, news and student produced programs. Our goal is to supply the community with a service 
that provides both an educational experience to those involved with the radio station, while also providing 
information and entertainment o the rest of the community outside of Oakland’s campus.</description>
-    <stream mime="audio/mpeg" uri="http://wxou.oakland.edu:8000/listen.pls"; codec="MPEG 1 Audio, Layer 3 
(MP3)" samplerate="22050 Hz" channels="Mono" bitrate="24 kbps" />
-    <stream mime="audio/mpeg" uri="http://wxou.oakland.edu:8002/listen.pls"; codec="MPEG 1 Audio, Layer 3 
(MP3)" samplerate="44100 Hz" channels="Mono" bitrate="128 kbps" />
-  </station>
-  <station id="wamu" name="WAMU" rank="1.0" type="edu" release="88.5" lang="en">
-    <frequency uri="http://wamu.org/";>88.5 FM in Washington, DC</frequency>
-    <location>Washington, DC</location>
-    <description>WAMU 88.5 is the leading public radio station for NPR news and information in the greater 
Washington, D.C., area. WAMU 88.5 is licensed to American University.</description>
-    <stream mime="audio/mpeg" uri="http://wamu-1.streamguys.com/"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="44100 Hz" channels="Mono" bitrate="48 kbps" />
-  </station>
-  <station id="kdup" name="KDUP" rank="1.0" type="edu" release="1580" lang="en">
-    <frequency uri="http://kdup.up.edu/";>1580 AM in Portland, OR</frequency>
-    <location>Portland, OR</location>
-    <description>University of Portland's radio station</description>
-    <stream mime="audio/ogg" uri="http://icecast.up.edu:8000/mystream.ogg.m3u"; codec="Ogg Vorbis" 
samplerate="32000 Hz" channels="Stereo" bitrate="192 kbps" />
-  </station>
-  <station id="95bfm" name="95bFM" rank="1.0" type="edu" release="95.0" lang="en">
-    <frequency uri="http://www.95bfm.com/";>95.0 FM in Auckland, New Zealand</frequency>
-    <location>Auckland, New Zealand</location>
-    <description>In 1969, Radio Bosom was born as a student's capping stunt, broadcasting illegally from a 
boat in the Waitemata Harbour. Over the next few decades the bosom morphed into the mighty 95bFM, the 
longest-standing independent radio station in New Zealand.
-    We're passionate about music, just like you. We think that radio is better when it's free from 
commercial pressures, and that it should be challenging without being inaccessible. This is not top 40 
radio.</description>
-    <stream mime="audio/mpeg" uri="http://streams.95bfm.com/stream95"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="22050 Hz" channels="Mono" bitrate="32 kbps" />
-  </station>
-  <station id="2nurfm" name="2NURFM" rank="1.0" type="edu" release="103.7" lang="en">
-    <frequency uri="http://www.newcastle.edu.au/community-and-alumni/arts-and-culture/2nurfm";>103.7 FM in 
Newcastle, Australia</frequency>
-    <location>Newcastle, Australia</location>
-    <description>Newcastle's leading 'easy listening' radio station.</description>
-    <stream mime="audio/aacp" uri="http://broadcaster1.newcastle.edu.au:8000/2NURFM-aacPlus"; codec="MPEG-2 
AAC (AAC+)" samplerate="44100 Hz" channels="Stereo" bitrate="29 kbps" />
-    <uri>http://www.newcastle.edu.au/community-and-alumni/arts-and-culture/2nurfm</uri>
-  </station>
-  <station id="radioadelaide" name="Radio Adelaide" rank="1.0" type="edu" release="101.5" lang="en">
-    <frequency uri="https://radio.adelaide.edu.au/";>101.5 FM in Adelaide, Australia</frequency>
-    <location>Adelaide, Australia</location>
-    <description>Radio Adelaide is a real radio alternative for people curious about ideas, issues and 
music. We are as diverse as the city we live in, with programs ranging from Jazz and Classical to World 
Music, arts, current affairs and more, with many shows presented by local community groups in their own 
languages.</description>
-    <stream mime="audio/mpeg" uri="http://stream.radio.adelaide.edu.au:8000/radadl-128.mp3"; codec="MPEG 1 
Audio, Layer 3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <stream mime="audio/mpeg" uri="http://stream.radio.adelaide.edu.au:8000/radadl-64.mp3"; codec="MPEG 1 
Audio, Layer 3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="64 kbps" />
-    <uri>https://radio.adelaide.edu.au/</uri>
-  </station>
-  <station id="radior" name="Radio R" rank="1.0" type="edu" release="" lang="cs">
-    <frequency uri="http://radior.cz";>Internet</frequency>
-    <location>Brno, Czechoslovakia</location>
-    <description>Masaryk University’s student radio,</description>
-    <stream mime="audio/ogg" uri="http://radior.video.muni.cz:8000/FSS_ogg-q0.ogg.m3u"; codec="Ogg Vorbis" 
samplerate="44100 Hz" channels="Stereo" bitrate="64 kbps" />
-    <stream mime="audio/ogg" uri="http://radior.video.muni.cz:8000/FSS_ogg-q4.ogg.m3u"; codec="Ogg Vorbis" 
samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <stream mime="audio/ogg" uri="http://radior.video.muni.cz:8000/FSS_ogg-q8.ogg.m3u"; codec="Ogg Vorbis" 
samplerate="44100 Hz" channels="Stereo" bitrate="256 kbps" />
-    <uri>http://www.radior.cz/</uri>
-  </station>
-  <station id="radius" name="Radio Radius" rank="1.0" type="edu" release="de">
-    <frequency uri="http://radioradius.ch/";>Internet</frequency>
-    <location>Zürich, Switzerland</location>
-    <description>Student webradio in Zürich.</description>
-    <stream mime="audio/ogg" uri="http://relay.radio.ethz.ch/sender.ogg.m3u"; codec="Ogg Vorbis" 
samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://www.radioradius.ch/</uri>
-  </station>
-  <station id="lsrfm" name="Leeds University Student Radio FM" rank="1.0" type="edu" release="" lang="en">
-    <frequency uri="http://lsrfm.com/";>Internet</frequency>
-    <location>Leeds, United Kingdom</location>
-    <description></description>
-    <stream mime="audio/mpeg" uri="http://soho.wavestreamer.com:6648/listen.pls?sid=1"; codec="MPEG 1 Audio, 
Layer 3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://lsrfm.com/</uri>
-  </station>
-  <station id="urn" name="University Radio Nottingham" rank="1.0" type="edu" release="1350" lang="en">
-    <frequency uri="http://urn1350.net";>1350 AM MHz in Nottingham, United Kingdom</frequency>
-    <location>Nottingham, United Kingdom</location>
-    <description>URN is the University of Nottingham's award winning student radio station.You can listen 
online, on 1350AM on campus or in some of the university's shops and bars.</description>
-    <stream mime="audio/mpeg" uri="http://posurnl.nottingham.ac.uk:8080/urn_high.mp3"; codec="MPEG 1 Audio, 
Layer 3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://urn1350.net/</uri>
-  </station>
-  <station id="kcl" name="King's College London Radio" rank="1.0" type="edu" release="" lang="en">
-    <frequency uri="http://www.kclradio.co.uk/";>Internet</frequency>
-    <location>London, United Kingdom</location>
-    <description>KCL Radio is King’s College London’s award winning, student radio station, which first 
broadcast live last year. Our studio is currently located on the basement floor of the Chesham Building 
(although there are plans to relocate to a new studio in Tutu’s on the 4th floor of the Macadam Building 
during 2015).  Output ranges from music to news, chat, sport, comedy and everything in between. Live 
broadcasts also take place throughout the year for significant events on the KCLSU calendar such as the 
Student Officer Elections or the Varsity Rugby match.</description>
-    <stream mime="audio/mpeg" uri="http://159.92.75.8:8080/KCLR"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://www.kclradio.co.uk/</uri>
-  </station>
-  <station id="icradio" name="Imperial College Radio" rank="1.0" type="edu" release="" lang="en">
-    <frequency uri="http://icradio.com/";>1134 AM in Wye, Kent, United Kingdom</frequency>
-    <location>London, United Kingdom</location>
-    <description>IC Radio is among the oldest student radio stations in the country. Started in 1976, 
broadcasting on a home built AM transmitter around halls, we now broadcast all over the globe from 
icradio.com. Absolutely anyone is welcome to try their hand at presenting or producing a show; whatever your 
music taste. We also love a good speech based program, so anyone will feel at home in IC Radio. As well as 
being able to broadcast, we are lucky enough to have a brand new, fully equipped recording studio which we 
use to record bands and musicians.
-
-Behind the scenes we rely on our fantastic technical, musical and promotional teams. Are you interested in 
web design? Want to record professional band and artists? Maybe you fancy running our IT system? Or perhaps 
you want to talk to industry insiders to get your hands on new music weeks before any of your friends? 
There's a place for you here and we'd love for you to join us!</description>
-    <stream mime="audio/mpeg" uri="http://icecast.icradio.com:8000/live-mp3-high"; codec="MPEG 1 Audio, Layer 
3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="192 kbps" />
-    <uri>http://icradio.com/</uri>
-  </station>
-  <station id="ruc" name="Coimbra University Radio" rank="1.0" type="edu" release="107.9" lang="pt">
-    <frequency uri="http://www.ruc.pt/";>107.9 FM MHz in Coimbra, Portugal</frequency>
-    <location>Coimbra, Portugal</location>
-    <description>Coimbra University Radio (Portuguese: Rádio Universidade de Coimbra - RUC) is a university 
radio station of the Coimbra Academic Association (students' union) of the University of Coimbra in Coimbra, 
Portugal.
-    
-    It broadcasts on 107.9 FM (also broadcasts on-line). The Center of Experimental Radio was founded in the 
40's, but it was only on March, 1st 1986, that the radio obtained the authorization to broadcast on FM.
-    
-    The studios and offices of this university radio station are located in the main building of the 
Associação Académica de Coimbra, in the city centre. One of its trademarks is that there are no set playlists 
for any of the programs broadcast. This allows for an exceptionally wide range of musical genres.
-    
-    The radio gives courses in Programming, Technic and News, that students from the University of Coimbra 
can join.
-    
-    For its 25th anniversary, the radio hosts concerts of the indie Swedish band the Radio Dept., and later 
Eleanor Friedberger from the rock duo The Fiery Furnaces and the Welsh songwriter Euros Childs.</description>
-    <stream mime="audio/mpeg" uri="http://ruc.midi-club.net:8000/;stream/1"; codec="MPEG 1 Audio, Layer 3 
(MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://www.ruc.pt/</uri>
-  </station>
-  <station id="radiocampusbruxelles" name="Radio Campus Bruxelles" rank="1.0" type="edu" release="92.1" 
lang="nl">
-    <frequency uri="http://www.radiocampus.be/";>92.1 MHz FM in Bruxelles, Belgium</frequency>
-    <location>Bruxelles, Belgium</location>
-    <description>Radio Campus est née en 1980 sur le campus de l’Université Libre de Bruxelles. Avec une 
cinquantaine d’émissions, elle rassemble plus de 150 animateurs, techniciens et collaborateurs autour de 
valeurs partagées : une libre expression assumée et constructive, un attachement immodéré au tissu social 
bruxellois et un amour sans borne pour la diversité musicale et culturelle.</description>
-    <stream mime="audio/ogg" uri="http://streamer.radiocampus.be:8000/stream_hi.ogg"; codec="Ogg Vorbis" 
samplerate="44100 Hz" channels="Stereo" bitrate="192 kbps" />
-    <uri>http://www.radiocampus.be/</uri>
-  </station>
-  <station id="radiocampusparis" name="Radio Campus Paris" rank="1.0" type="edu" release="93.9" lang="fr">
-    <frequency uri="http://www.radiocampusparis.org/";>93.9 MHz FM in Paris, France</frequency>
-    <location>Paris, France</location>
-    <description>Radio Campus Paris is a non-profit Student radio station. Founded in 1998 and first 
broadcast on the Internet, the radio can be listened to in Paris, France on 93.9 FM (from 5.30 p.m. to 5.30 
a.m.). Managed by volunteers (mainly students), this indie student radio focuses on emerging music and local 
and student-related news.</description>
-    <stream mime="audio/mpeg" uri="http://www.radiocampusparis.org:8000/stream_rcp"; codec="MPEG 1 Audio, 
Layer 3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://www.radiocampusparis.org/</uri>
-  </station>
-  <station id="wcsb" name="WCSB" rank="1.0" type="edu" release="89.3" lang="en">
-    <frequency uri="http://wcsb.org/";>89.3 MHz FM in Cleveland, OH</frequency>
-    <location>Cleveland, OH</location>
-    <description>A student-operated radio station at Cleveland State University, broadcasting from northeast 
Ohio.</description>
-    <stream mime="audio/mpeg" uri="http://cent7.directhostingcenter.com/tunein.php/ubtevcdv/playlist.pls"; 
codec="MPEG 1 Audio, Layer 3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://wcsb.org/</uri>
-  </station>
-  <station id="pulse" name="Pulse LSE" rank="1.0" type="edu" release="87.7" lang="en">
-    <frequency uri="http://pulselse.co.uk/";>87.7 MHz FM in London, United Kingdom</frequency>
-    <location>London, United Kingdom</location>
-    <description>Pulse Radio is the official radio station of the London School of Economics and Political 
Science Students’ Union. We are totally student run and are committed to bringing great radio broadcasting to 
LSE students and beyond. We hope you tune in and enjoy!</description>
-    <stream mime="audio/mpeg" uri="http://s3.radioboss.fm:8223/stream"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://pulselse.co.uk/</uri>
-  </station>
-  <station id="oxide" name="Oxford Student Radio" rank="1.0" type="edu" release="107.9" lang="en">
-    <frequency uri="http://oxideradio.co.uk/";>107.9 MHz FM in Oxford, United Kingdom</frequency>
-    <location>Oxford, United Kingdom</location>
-    <description>Oxide Radio is a student radio station run by members of Oxford University in Oxford, 
England.</description>
-    <stream mime="audio/mpeg" uri="http://listen.oxideradio.co.uk:8000/oxide-radio.m3u"; codec="MPEG 1 Audio, 
Layer 3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://oxideradio.co.uk/</uri>
-  </station>
-  <station id="camfm" name="Cam FM" rank="1.0" type="edu" release="97.2" lang="en">
-    <frequency uri="http://www.camfm.co.uk/";>97.2 MHz FM in Cambridge, United Kingdom</frequency>
-    <location>Cambridge, United Kingdom</location>
-    <description>Originally founded in 1979, the award-winning Cam FM is now one of the most heavily 
listened to student radio stations in the UK, as well as one of the largest student-run media organisations 
in Cambridge, covering students at both Cambridge and Anglia Ruskin Universities. We know students because we 
are students; every aspect of the station is professionally run by students, staff, and alumni of the 
Universities - presenting, producing, or running the committee. Our content is primarily geared towards 
engaging with the student community in Cambridge.</description>
-    <stream mime="audio/mpeg" uri="http://stream.camfm.co.uk/camfm"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://www.camfm.co.uk/</uri>
-  </station>
-  <station id="radiounam" name="Radio UNAM" rank="1.0" type="edu" release="96.1" lang="es">
-    <frequency uri="http://www.radiounam.unam.mx/";>96.1 MHz FM in México City, México</frequency>
-    <location>México City, México</location>
-    <description>Radio Universidad Nacional Autónoma de México</description>
-    <stream mime="audio/mpeg" 
uri="http://www.radiounam.unam.mx/templates/player/reproductor/CREA_FM/listen.m3u"; codec="MPEG 1 Audio, Layer 
3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://www.radiounam.unam.mx/</uri>
-  </station>
-  <station id="wxyc" name="WXYC" rank="1.0" type="edu" release="89.3" lang="en">
-    <frequency uri="http://www.wxyc.org/";>89.3 MHz FM in Chapel Hill, NC</frequency>
-    <location>Chapel Hill, NC</location>
-    <description>WXYC went on the air on March 17, 1977 with Joni Mitchell's "You Turn Me on I'm a Radio."
-
-      WXYC was preceded by WCAR, a carrier current station that reached dorms on the UNC-Chapel Hill campus 
through electrical wiring. The station's alumni include top 40 radio host Rick Dees.
-
-      When WCAR wanted to upgrade in the early 1970s, it decided to pursue an FM license and begin 
broadcastin over the air rather than update the carrier current system. Funding for the change to FM was 
provided by a student referendum passed in 1973. The physical conversion cost $35,000 and took two years to 
complete.
-
-      The non-profit Student Educational Broadcasting, Inc. was established to serve as the official owner 
of WXYC's broadcast license, and in 1977 WCAR became WXYC. The station was originally scheduled to begin 
broadcasting in January 1977, but winter freezes prevented the installation of an antenna on UNC's water 
tower delaying the broadcast until March.
-
-      From its earliest days in the late 70s, WXYC has been a leader in diverse and interesting programming, 
adopting changing forms of popular music long before they became popular in the mainstream without losing 
touch with the past. This coalesced in 1980 with the decision to achieve a delicate balance, avoiding the 
extremes of both typical commercial (dull, repetitive, narrow) and typical college (difficult, elitist and 
irritating) radio, by making the effort to find and broadcast the best and brightest of new music that was 
inexplicably being ignored by commercial radio, while not forgetting the roots of that music in blues, jazz, 
pop and other types of music of the past half century. At the same time, WXYC became a 24 hour a day/ 365 day 
a year radio station with a commitment to be consistent in quality and reliable enough to set your clock 
radio to.WXYC won many accolades and awards during the 80's and 90's from local as well as national sources, 
including Rolling Sto
 ne Magazine, the New York Times and the Independent Weekly.
-
-      In the early 90s, with the advent of the CD, many more international and independent releases became 
easily available, as well as re-issues of albums that had been impossible to find on vinyl for decades. This 
enabled WXYC to broaden its programming even more, and to this day the staff of WXYC is committed to seeking 
out new and interesting sounds from all over the world and presenting them in a coherent, accessible and 
interesting way.
-
-      In 1994, the staff of UNC's SunSITE, the first Web site in North America, helped WXYC become the first 
radio station in the world to stream its on-air signal live over the Internet. We're proud to have been at 
the forefront of the Internet radio medium. We now have loyal listeners all over the world who contact us 
with comments and requests by email and IM.
-
-      WXYC alumni include ESPN anchor Stuart Scott, former Squirrel Nut Zipper Tom Maxwell, former Polvo 
guitarist Dave Brylawski, Newsweek reporter Colin Soloway, film director Peyton Reed, as well as scores of 
doctors, lawyers, writers, executives, and successful professionals of all kinds.</description>
-    <stream mime="audio/ogg" uri="http://www.wxyc.org/files/streams/wxyc-ogg.pls"; codec="Ogg Vorbis" 
samplerate="44100 Hz" channels="Stereo" bitrate="96 kbps" />
-    <stream mime="audio/mpeg" uri="http://wxyc.org/files/streams/wxyc-mp3.m3u"; codec="MPEG 1 Audio, Layer 3 
(MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://www.wxyc.org/</uri>
-  </station>
-  <station id="kalx" name="KALX" rank="1.0" type="edu" release="90.7" lang="en">
-    <frequency uri="http://kalx.berkeley.edu/";>90.7 MHz FM in Berkeley, CA</frequency>
-    <location>Berkeley, CA</location>
-    <description>KALX 90.7 FM broadcasts freeform radio 24 hours a day to a large portion of the San 
Francisco Bay Area. You can catch all stripes of underground music accented with news, sports and alternative 
informational programming.
-
-      KALX has a wonderfully dedicated staff of student and community volunteers who are willing to explore 
with and educate their listeners. KALX is regular folks doing wild, unpredictable, extraordinary radio. All 
of our programs are homespun, we don't depend on satellite feeds. Rather we create programs from, and for our 
community (a community that includes both the University of California, Berkeley student population AND the 
surrounding area).
-
-      As part of our mission to educate, every KALX DJ is encouraged to play a variety of musical styles and 
types. Rather than segregating music into limited boxes, this philosophy is an attempt to entertain the 
listener while broadening their musical experience. A pretty fun way to be educated, don't ya 
think!</description>
-    <stream mime="audio/ogg" uri="http://icecast.media.berkeley.edu:8000/kalx-128.ogg.m3u"; codec="Ogg 
Vorbis" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <stream mime="audio/mpeg" uri="http://icecast.media.berkeley.edu:8000/kalx-128.mp3.m3u"; codec="MPEG 1 
Audio, Layer 3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://kalx.berkeley.edu/</uri>
-  </station>
-  <station id="whrb" name="WHRB" rank="1.0" type="edu" release="95.3" lang="en">
-    <frequency uri="http://www.whrb.org/";>95.3 MHz FM in Boston, MA</frequency>
-    <location>Boston, MA</location>
-    <description>For seventy years, 95.3FM has been Boston's first source for exciting, entertaining, and 
enlightening music broadcasts. Harvard Radio's daily broadcast of Classical music, Jazz, and underground Rock 
explore a great repertoire of music left largely untouched by other commercial stations.</description>
-    <stream mime="audio/mpeg" uri="http://www.whrb.org/streams/whrb.m3u"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="44100 Hz" channels="Stereo" bitrate="96 kbps" />
-    <uri>http://www.whrb.org/</uri>
-  </station>
-  <station id="nova" name="Radio NOVA" rank="1.0" type="edu" release="99.3" lang="nb">
-    <frequency uri="http://radionova.no/";>99.3 MHz FM in Oslo, Norway</frequency>
-    <location>Oslo, Norway</location>
-    <description>Radio NOVA is the student radio of University of Oslo.</description>
-    <stream mime="audio/mpeg" uri="http://stream.radionova.no/mp3.m3u"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="44100 Hz" channels="Stereo" bitrate="192 kbps" />
-    <uri>http://radionova.no/</uri>
-  </station>
-  <station id="wwno" name="WWNO" rank="1.0" type="edu" release="89.9" lang="en">
-    <frequency uri="http://wwno.org/";>89.9 MHz FM in New Orleans, LA</frequency>
-    <location>New Orleans, LA</location>
-    <description>WWNO is the NPR member station for New Orleans and the 13 parishes of southeast Louisiana, 
broadcasting on 89.9 FM — and on KTLN 90.5 FM in the Houma-Thibodaux area — as a public service of the 
University of New Orleans.</description>
-    <stream mime="audio/mpeg" uri="http://www.publicbroadcasting.net/wwno/ppr/wwno_128.m3u"; codec="MPEG 1 
Audio, Layer 3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://wwno.org/</uri>
-  </station>
-  <station id="ktru" name="KTRU" rank="1.0" type="edu" release="99.1" lang="en">
-    <frequency uri="http://ktru.org/";>99.1 MHz FM in Houston, TX</frequency>
-    <location>Houston, TX</location>
-    <description>KTRU Houston is Rice University's student-run radio station.</description>
-    <stream mime="audio/mpeg" uri="http://ktru.org/audiometa/listen3.m3u"; codec="MPEG 1 Audio, Layer 3 
(MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://ktru.org/</uri>
-  </station>
-  <station id="bbcworldservice" name="BBC World Service" rank="1.0" type="gov" release="93.20" lang="en">
-    <frequency uri="http://www.bbc.co.uk/worldservice/schedules/frequencies/";>Internet</frequency>
-    <location>London, United Kingdom</location>
-    <description>BBC World Service is an international news service available on radio, television and 
online. It provides impartial news reports and analysis in English and 27 other languages.  BBC World Service 
aims to inspire and illuminate the lives of its audience by bringing the world together, making connections 
and helping listeners to make sense of the world.</description>
-    <stream mime="audio/mpeg" uri="http://www.bbc.co.uk/worldservice/meta/live/mp3/eneuk.pls"; codec="MPEG 1 
Audio, Layer 3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="48 kbps" />
-    <uri>http://www.bbc.co.uk/worldserviceradio</uri>
-  </station>
-  <station id="nrkradioalltidnyheter" name="NRK Radio Alltid Nyheter" rank="1.0" type="gov" release="93.0" 
lang="nb">
-    <frequency>93.0 MHz FM in Oslo, Norway</frequency>
-    <location>Oslo, Norway</location>
-    <description>The Norwegian Broadcasting Corporation (NRK) offers the Norwegian public a wide range of 
content with three national TV-channels, 13 national radio-channels and the website nrk.no.</description>
-    <stream mime="audio/aac" uri="http://lyd.nrk.no/nrk_radio_alltid_nyheter_aac_h"; codec="AAC, v4 LC" 
samplerate="48000 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://www.nrk.no/alltid_nyheter</uri>
-  </station>
-  <station id="wkcr" name="WKCR" rank="1.0" type="edu" release="89.9" lang="en">
-    <frequency>89.9 MHz FM in New York, NY</frequency>
-    <location>New York City, NY</location>
-    <description>WKCR-FM, Columbia University’s non-commercial student-run radio station, is dedicated to 
presenting a spectrum of alternative programming—traditional and art music, spoken arts, and original 
journalism. Granted its FCC license in 1941, WKCR is both steeped in tradition and committed to innovation. 
In the New York area, the station can be heard at 89.9 megacycles in FM; worldwide, it streams 
online.</description>
-    <stream mime="audio/mpeg" uri="http://kanga.college.columbia.edu:8000/listen.pls"; codec="MPEG 1 Audio, 
Layer 3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="96 kbps" />
-    <uri>http://www.studentaffairs.columbia.edu/wkcr/</uri>
-  </station>
-  <station id="kzsu" name="KZSU" rank="1.0" type="edu" release="90.1" lang="en">
-    <frequency>90.1 MHz FM in Stanford, CA</frequency>
-    <location>San Francisco, CA</location>
-    <description>KZSU is Stanford University's FM radio station, broadcasting across the Bay Area on 90.1 FM 
and across the world at kzsulive.stanford.edu. We exist to serve the Stanford community with quality radio 
broadcasts, including music, sports, news, and public affairs programming.
-
-      The station is owned by the Board of Trustees of Stanford University and is governed by a Board of 
Directors appointed by the President. We got our FM license in 1964, and upgraded from 10 to 500 watts in 
1978. Before 1964, KZSU broadcast as an AM carrier current station (through the University's power supply) on 
880 kHz, starting in 1947 as a part of the Department of Communication.
-
-      KZSU is a non-commercial station funded mainly by Stanford student fees, in addition to underwriting 
and listener donations. KZSU's staff is all volunteer, made up of Stanford students, staff, alumni, and 
community affiliates.</description>
-    <stream mime="audio/mpeg" uri="http://kzsulive.stanford.edu/audio/kzsu-1-128.m3u"; codec="MPEG 1 Audio, 
Layer 3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://kzsulive.stanford.edu/</uri>
-  </station>
-  <station id="wmbr" name="WMBR" rank="1.0" type="edu" release="88.1" lang="en">
-    <frequency>88.1 MHz FM in Cambridge, MA</frequency>
-    <location>Boston, MA</location>
-    <description>WMBR is the MIT campus radio station. We broadcast on 88.1 FM between 20 and 24 hours per 
day, 365 days a year. We transmit at 720 watts, effective radiated power from the top of the Eastgate 
Building in Kendall Square in Cambridge, Massachusetts. Our programming includes a wide range of music shows, 
public affairs programs and eclectic audio entertainment.</description>
-    <stream mime="audio/mpeg" uri="http://wmbr.org/WMBR_live_128.m3u"; codec="MPEG 1 Audio, Layer 3 (MP3)" 
samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://wmbr.org/</uri>
-  </station>
-  <station id="kexp" name="KEXP" rank="1.0" type="edu" release="90.9" lang="en">
-    <frequency>90.9 MHz FM in Seattle, WA</frequency>
-    <location>Seattle, WA</location>
-    <description>KEXP is a service of the University of Washington, who holds the station’s FCC license. As 
a 501(c)3 non-profit arts organization, KEXP relies on investments from individual, foundation, business, and 
government supporters.</description>
-    <stream mime="audio/mpeg" uri="http://live-mp3-128.kexp.org:8000/listen.pls"; codec="MPEG 1 Audio, Layer 
3 (MP3)" samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
-    <uri>http://kexp.org/</uri>
-  </station>
-</girl>
diff --git a/src/stations.xml b/src/stations.xml
new file mode 120000
index 0000000..ceb06d2
--- /dev/null
+++ b/src/stations.xml
@@ -0,0 +1 @@
+girl.xml
\ No newline at end of file


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