[girl] girl 0.7.1 release



commit 8765ec616cc045afae8a7b09e83f3382db8d811c
Author: Ole Aamot <oka oka no>
Date:   Sat Dec 13 22:46:59 2014 +0100

    girl 0.7.1 release

 AUTHORS                  |    2 +
 ChangeLog                |   30 ++++++++
 Makefile.am              |    1 +
 Makefile.in              |    1 +
 NEWS                     |   31 ++++++++
 NEWS-0.7                 |   37 +++++++++-
 THANKS                   |    3 +-
 TODO                     |    2 -
 configure                |   20 +++---
 configure.ac             |    2 +-
 data/girl.appdata.xml.in |    2 +-
 data/screenshot.png      |  Bin 130805 -> 100925 bytes
 girl.spec.in             |   14 +++-
 man/Makefile             |    8 +-
 src/Makefile.am          |    8 +-
 src/Makefile.in          |   11 ++-
 src/girl-0.7.dtd         |    2 +-
 src/girl-gui.c           |  186 +++++++++++++++++++++++++++++++++++++++++++--
 src/girl-listener.c      |    6 --
 src/girl-program.c       |    6 --
 src/girl-runners.c       |   88 ++++++++++++++++------
 src/girl-runners.h       |   21 +++---
 src/girl-station.c       |  163 +++++++++++++++++++++++++++++++++++++---
 src/girl-streams.c       |    4 +-
 src/girl.c               |  130 +++++++++++++++++++++++++++++---
 src/girl.h               |   31 ++++++--
 src/stations.xml         |   91 +++++++++++++++--------
 27 files changed, 750 insertions(+), 150 deletions(-)
---
diff --git a/AUTHORS b/AUTHORS
index ce25a1f..09725d7 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -3,3 +3,5 @@ Marek Černocký <marek manet cz> (Czech translation)
 Rafael Ferreira <rafael f f1 gmail com> (Brazilian Portuguese translation)
 Мирослав Николић/Miroslav Nikolić <miroslavnikolic rocketmail com> (Serbian translation)
 Wolfgang Stöggl (German translation)
+Piotr Drąg (Polish translation)
+Muhammet Kara (Turkish translation)
diff --git a/ChangeLog b/ChangeLog
index d2224af..70a217e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,33 @@
+2014-12-13  Ole Aamot  <oka oka no>
+
+       * AUTHORS: Add Muhammet Kara (Turkish translation)
+       * NEWS: Release girl version 0.7.1
+       * THANKS: Muhammet Kara for Turkish translation
+       * data/girl.appdata.xml.in: Remove old reference to "new GNOME 2.0".
+       * src/girl-0.7.dtd: Add girl 0.7 DTD with station language attribute
+       * src/girl-gui.c: Add Streams and About Stream buttons
+       * src/girl-station.c: Add new function girl_stream_record
+       * src/girl-streams.c: New file
+       * src/girl-streams.h: New file
+       * src/stations.xml: Add 95bFM (95bfm.com)
+       * src/stations.xml: Add KDUP (kdup.up.edu)
+       * src/streams.xml: Add streams file
+
+2014-12-12  Ole Aamot  <oka oka no>
+
+       * AUTHORS: Add Piotr Drąg (Polish translation)
+       * NEWS: Release girl version 0.7.0
+       * THANKS: Piotr Drąg for minor typo fix and Polish translation
+       * girl.spec.in: Update RPM spec file for Fedora 21
+       * po/pl.po: Polish translation by Piotr Drąg
+       * src/girl-gui.c: Add GtkWidget progress
+       * src/girl-runners.c: Modify mutex functions for future usage.
+       * src/girl-runners.h: Modify mutex functions for future usage.
+       * src/girl-station.c: Add asynchronous child process function.
+       * src/girl.h: Rename DEBUG macro GIRL_DEBUG, add progress bar.
+       * src/stations.xml: Add 2NURFM (broadcaster1.newcastle.edu.au)
+       * src/stations.xml: Add Radio Adelaide (radio.adelaide.edu.au)
+
 2014-12-10  Ole Aamot  <oka oka no>
 
        * NEWS: Release girl version 0.6.283185307 in honor of Malala
diff --git a/Makefile.am b/Makefile.am
index d776f9e..ddadd92 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -13,6 +13,7 @@ EXTRA_DIST = config.rpath m4/ChangeLog  \
        NEWS \
        NEWS-0.5 \
        NEWS-0.6 \
+       NEWS-0.7 \
        THANKS \
        TODO \
        girl.spec.in
diff --git a/Makefile.in b/Makefile.in
index 86bb5bc..8eb39d5 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -328,6 +328,7 @@ EXTRA_DIST = config.rpath m4/ChangeLog  \
        NEWS \
        NEWS-0.5 \
        NEWS-0.6 \
+       NEWS-0.7 \
        THANKS \
        TODO \
        girl.spec.in
diff --git a/NEWS b/NEWS
index e22cd3f..77ceb09 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,34 @@
+2014-12-13  Ole Aamot  <oka oka no>
+
+       * AUTHORS: Add Muhammet Kara (Turkish translation)
+       * THANKS: Muhammet Kara for Turkish translation
+       * girl version 0.7.1 release.
+       * data/girl.appdata.xml.in: Remove old reference to "new GNOME 2.0".
+       * src/girl-0.7.dtd: Add girl 0.7 DTD with station language attribute
+       * src/girl-gui.c: Add Streams and About Stream buttons
+       * src/girl-station.c: Add new function girl_stream_record
+       * src/girl-streams.c: New file
+       * src/girl-streams.h: New file
+       * src/stations.xml: Add 95bFM (95bfm.com)
+       * src/stations.xml: Add KDUP (kdup.up.edu)
+       * src/streams.xml: Add streams file
+
+2014-12-12  Ole Aamot  <oka oka no>
+
+       * girl version 0.7.0 release.
+       * AUTHORS: Add Piotr Drąg (Polish translation)
+       * NEWS: Release girl version 0.7.0
+       * THANKS: Piotr Drąg for minor typo fix and Polish translation
+       * girl.spec.in: Update RPM spec file for Fedora 21
+       * po/pl.po: Polish translation by Piotr Drąg
+       * src/girl-gui.c: Add GtkWidget progress
+       * src/girl-runners.c: Modify mutex functions for future usage.
+       * src/girl-runners.h: Modify mutex functions for future usage.
+       * src/girl-station.c: Add asynchronous child process function.
+       * src/girl.h: Rename DEBUG macro GIRL_DEBUG, add progress bar.
+       * src/stations.xml: Add 2NURFM (broadcaster1.newcastle.edu.au)
+       * src/stations.xml: Add Radio Adelaide (radio.adelaide.edu.au)
+
 2014-12-10  Ole Aamot  <oka oka no>
 
        * girl version 0.6.283185307 release in honor of Malala
diff --git a/NEWS-0.7 b/NEWS-0.7
index 248efb6..71e9575 100644
--- a/NEWS-0.7
+++ b/NEWS-0.7
@@ -1,14 +1,45 @@
 =============
-Version 0.7.0
+Version 0.7.1
 =============
 
+DTD (src/girl-0.7.dtd)
+
+       * Add girl 0.7 DTD with station language attribute
+
+GUI
+       * src/girl-station.c: Add function girl_stream_record
+       * src/girl-streams.c: New file
+       * src/girl-streams.h: New file
+
 Stations (src/stations.xml)
 
-       * src/stations.xml: Add 2NURFM (broadcaster1.newcastle.edu.au)
-       * src/stations.xml: Add Radio Adelaide (radio.adelaide.edu.au)
+       * Add 95bFM (95bfm.com)
+       * Add KDUP (kdup.up.edu)
+
+Streams (src/streams.xml)
+
+       * Add 35 streams
+
+Translations
+
+       * tr (Muhammet Kara)
+
+=============
+Version 0.7.0
+=============
 
 GUI
 
+       * src/girl-gui.c: Add GtkWidget progress
+       * src/girl-runners.c: Modify mutex functions for future usage.
+       * src/girl-runners.h: Modify mutex functions for future usage.
+       * src/girl-station.c: Add asynchronous child process function.
+       * src/girl.h: Rename DEBUG macro GIRL_DEBUG, add progress bar.
+
+Stations (src/stations.xml)
+
+       * src/stations.xml: Add 2NURFM (broadcaster1.newcastle.edu.au)
+       * src/stations.xml: Add Radio Adelaide (radio.adelaide.edu.au)
 
 Translations
 
diff --git a/THANKS b/THANKS
index 4ff1d12..ed54cb2 100644
--- a/THANKS
+++ b/THANKS
@@ -2,7 +2,8 @@ Justin Dove for invitation to SIPB, M.I.T. (June 19th, 2014 - June 20th, 2014).
 Oskar Nakken for tips on adding KEXP (Seattle, WA) to src/stations.xml
 Richard Hughes for tips on adding data/girl.app.data.xml and data/girl.desktop.in
 Federico Mena Quintero for launching the GNOME project and writing GNOME Canvas
-Piotr Drąg for fixing minor typos in src/girl-station.c
+Piotr Drąg for fixing minor typos in src/girl-station.c and Polish translation.
 Hans Petter Jansson for help with debugging GNOME VFS.
 Ettore Perazzoli (June 15, 1974 - December 10, 2003) for GNOME VFS.
 Bernd Homuth for minor spelling correction.
+Muhammet Kara for Turkish translation.
diff --git a/TODO b/TODO
index 766a62a..42a7549 100644
--- a/TODO
+++ b/TODO
@@ -3,11 +3,9 @@ $Id: TODO,v 1.2 2002/09/22 20:19:49 oka Exp $
 TODO for the GNOME Internet Radio Locator program
 
 - Promote non-profit Internet radio stations in the world.
-- Display lines between stations and listeners.
 - Download stations.xml over HTTP
 - Locate radio-on-demand services
 - Specify favourite radio station
 - Listening statistics for stations
-- Record live streams while piping it to xmms
 - Local archive on demand with soundmarks
 - Search local archive
diff --git a/configure b/configure
index ad34b7a..3d39c9e 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.6.283185307.
+# Generated by GNU Autoconf 2.69 for girl 0.7.1.
 #
 #
 # 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.6.283185307'
-PACKAGE_STRING='girl 0.6.283185307'
+PACKAGE_VERSION='0.7.1'
+PACKAGE_STRING='girl 0.7.1'
 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.6.283185307 to adapt to many kinds of systems.
+\`configure' configures girl 0.7.1 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.6.283185307:";;
+     short | recursive ) echo "Configuration of girl 0.7.1:";;
    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.6.283185307
+girl configure 0.7.1
 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.6.283185307, which was
+It was created by girl $as_me 0.7.1, 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.6.283185307'
+ VERSION='0.7.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -6707,7 +6707,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.6.283185307, which was
+This file was extended by girl $as_me 0.7.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6773,7 +6773,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.6.283185307
+girl config.status 0.7.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index e7a53ea..006aa06 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT(girl, 0.6.283185307)
+AC_INIT(girl, 0.7.1)
 AM_INIT_AUTOMAKE([no-dist-gzip dist-xz])
 AC_CONFIG_SRCDIR([src/girl.c])
 AC_CONFIG_HEADER([config.h])
diff --git a/data/girl.appdata.xml.in b/data/girl.appdata.xml.in
index 78f778a..702ddfa 100644
--- a/data/girl.appdata.xml.in
+++ b/data/girl.appdata.xml.in
@@ -9,7 +9,7 @@
       the Internet.
     </_p>
     <_p>
-      Girl is developed on the new GNOME 2.0 platform and requires
+      Girl is developed on the GNOME platform and requires
       at least one audio helper such as totem to be installed.
     </_p>
     <_p>
diff --git a/data/screenshot.png b/data/screenshot.png
index b4b5549..f51fc60 100644
Binary files a/data/screenshot.png and b/data/screenshot.png differ
diff --git a/girl.spec.in b/girl.spec.in
index 00e82e7..5c056f7 100644
--- a/girl.spec.in
+++ b/girl.spec.in
@@ -3,9 +3,9 @@ Name: @PACKAGE@
 Version: @VERSION@
 Release: 1
 License: GPLv2+
-URL: http://www.ping.uio.no/~oka/src/girl/
+URL: http://girl.software/
 Group: Applications/Internet
-Source: http://www.ping.uio.no/~oka/src/girl/@PACKAGE -@VERSION  tar xz
+Source: http://girl.software/@PACKAGE -@VERSION  tar xz
 Requires: gtk2 >= 2.24.24
 Requires: libgnome >= 2.32.1
 Requires: libxml2 >= 2.9.1
@@ -30,7 +30,7 @@ Enjoy Internet Radio.
 
 %build
 
-%configure
+%configure --with-recording
 
 %install
 
@@ -50,6 +50,7 @@ make DESTDIR=%{buildroot} install
 %{_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-logo.png
 %{_datadir}/girl/girl.png
 %{_datadir}/girl/listener-1.0.dtd
@@ -58,6 +59,7 @@ make DESTDIR=%{buildroot} install
 %{_datadir}/girl/programs-0.1.dtd
 %{_datadir}/girl/programs.xml
 %{_datadir}/girl/stations.xml
+%{_datadir}/girl/streams.xml
 %{_datadir}/appdata/girl.appdata.xml
 %{_datadir}/applications/girl.desktop
 %{_datadir}/girl/pixmaps/girl-map.png
@@ -70,6 +72,12 @@ make DESTDIR=%{buildroot} install
 %{_mandir}/man1/girl.1.gz
 
 %changelog
+* Sat Dec 13 2014 Ole Aamot - 0.7.1-1
+- Girl 0.7.1 build on Fedora Linux 21
+
+* Fri Dec 12 2014 Ole Aamot - 0.7.0-1
+- Girl 0.7.0 build on Fedora Linux 21
+
 * Sun Dec 07 2014 Ole Aamot - 0.6.2-1
 - Girl 0.6.2 build on Fedora Linux 21
 
diff --git a/man/Makefile b/man/Makefile
index c1db3e8..d5c0913 100644
--- a/man/Makefile
+++ b/man/Makefile
@@ -165,7 +165,7 @@ 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_HELPER_PLAYER = /usr/bin/totem
-GIRL_HELPER_RECORD = 
+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_PKG_DEPS = gtk+-2.0, libgnome-2.0, libxml-2.0, gnome-vfs-2.0, libgnomeui-2.0 libgnomecanvas-2.0
 GMOFILES = 
@@ -201,10 +201,10 @@ OBJEXT = o
 PACKAGE = girl
 PACKAGE_BUGREPORT = 
 PACKAGE_NAME = girl
-PACKAGE_STRING = girl 0.7.0
+PACKAGE_STRING = girl 0.7.1
 PACKAGE_TARNAME = girl
 PACKAGE_URL = 
-PACKAGE_VERSION = 0.7.0
+PACKAGE_VERSION = 0.7.1
 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.7.0
+VERSION = 0.7.1
 XGETTEXT = /usr/bin/xgettext
 abs_builddir = /home/oka/git/gnome/girl/man
 abs_srcdir = /home/oka/git/gnome/girl/man
diff --git a/src/Makefile.am b/src/Makefile.am
index 513255a..b43fe5f 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"\" -DDEBUG 
-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"\" -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_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-canvas.c
+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
 
 girldir = $(datadir)/girl
-girl_DATA = listeners.xml programs.xml stations.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 listener-1.0.dtd listener-1.1.dtd programs-0.1.dtd girl-logo.png girl.png
+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 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-canvas.h 
listeners.xml programs.xml stations.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 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 listener-1.0.dtd listener-1.1.dtd programs-0.1.dtd 
girl-logo.png girl.png
diff --git a/src/Makefile.in b/src/Makefile.in
index aa5a068..4daf367 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -95,7 +95,7 @@ PROGRAMS = $(bin_PROGRAMS)
 am_girl_OBJECTS = girl.$(OBJEXT) girl-gui.$(OBJEXT) \
        girl-listener.$(OBJEXT) girl-program.$(OBJEXT) \
        girl-runners.$(OBJEXT) girl-station.$(OBJEXT) \
-       girl-canvas.$(OBJEXT)
+       girl-streams.$(OBJEXT) girl-canvas.$(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"\" -DDEBUG 
-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"\" -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_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-canvas.c
+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
 girldir = $(datadir)/girl
-girl_DATA = listeners.xml programs.xml stations.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 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-canvas.h 
listeners.xml programs.xml stations.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 listener-1.0.dtd listener-1.1.dtd programs-0.1.dtd girl-logo.png girl.png
+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 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 listener-1.0.dtd listener-1.1.dtd programs-0.1.dtd 
girl-logo.png girl.png
 all: all-am
 
 .SUFFIXES:
@@ -407,6 +407,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/girl-program Po am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/girl-runners Po am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/girl-station Po am__quote@
+ AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/girl-streams Po am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/girl Po am__quote@
 
 .c.o:
diff --git a/src/girl-0.7.dtd b/src/girl-0.7.dtd
index 5684b0e..eb678a9 100644
--- a/src/girl-0.7.dtd
+++ b/src/girl-0.7.dtd
@@ -4,7 +4,7 @@
 <!ELEMENT location ( lat | lon )* >
 <!ELEMENT girl ( station+ ) >
 <!ATTLIST girl version NMTOKEN #REQUIRED >
-<!ELEMENT station ( description | frequency | location | stream | uri | rank | type | release)* >
+<!ELEMENT station ( description | frequency | location | stream | uri | rank | type | release | lang)* >
 <!ATTLIST station id NMTOKEN #REQUIRED >
 <!ATTLIST station name CDATA #REQUIRED >
 <!ATTLIST station rank CDATA #REQUIRED >
diff --git a/src/girl-gui.c b/src/girl-gui.c
index 260f0f7..35b456b 100644
--- a/src/girl-gui.c
+++ b/src/girl-gui.c
@@ -45,8 +45,9 @@
 #include "girl-gui.h"
 #include "girl-program.h"
 #include "girl-station.h"
+#include "girl-streams.h"
 
-#ifdef DEBUG
+#ifdef GIRL_DEBUG
 #define MSG(x...) g_message(x)
 #else
 #define MSG(x...)
@@ -62,22 +63,22 @@ GnomeUIInfo toolbar[] = {
        GNOMEUIINFO_ITEM_STOCK(("Record"), ("Record selected station"),
                               on_record_button_clicked,
                               GTK_STOCK_MEDIA_RECORD),
-#endif /* GIRL_HELPER_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(("Programs"), ("Programs"),
-                              on_programs_selector_button_clicked,
+       GNOMEUIINFO_ITEM_STOCK(("Streams"), ("Streams"),
+                              on_streams_selector_button_clicked,
                               GTK_STOCK_HARDDISK),
        GNOMEUIINFO_SEPARATOR,
        GNOMEUIINFO_ITEM_STOCK(("Previous"),
                               ("Go back to the previous station"),
-                              on_previous_click, GTK_STOCK_GO_BACK),
+                              on_previous_station_click, GTK_STOCK_GO_BACK),
        GNOMEUIINFO_ITEM_STOCK(("Next"), ("Proceed to the next station"),
-                              on_next_click, GTK_STOCK_GO_FORWARD),
+                              on_next_station_click, GTK_STOCK_GO_FORWARD),
        GNOMEUIINFO_SEPARATOR,
        /* GNOMEUIINFO_ITEM_STOCK(("About Listener"), */
        /*                     ("About the GNOME Internet Radio Locator"), */
@@ -87,9 +88,9 @@ GnomeUIInfo toolbar[] = {
                               ("About the current Station"),
                               about_station, GNOME_STOCK_ABOUT),
        GNOMEUIINFO_SEPARATOR,
-       GNOMEUIINFO_ITEM_STOCK(("About Program"),
-                              ("About the current Program"),
-                              about_program, GNOME_STOCK_ABOUT),
+       GNOMEUIINFO_ITEM_STOCK(("About Stream"),
+                              ("About the current Stream"),
+                              about_streams, GNOME_STOCK_ABOUT),
        GNOMEUIINFO_SEPARATOR,
        GNOMEUIINFO_ITEM_STOCK(("About App"),
                               ("About the GNOME Internet Radio Locator"),
@@ -517,6 +518,142 @@ GtkWidget *create_stations_selector(char *selected_station_uri,
        return stations_selector;
 }
 
+
+GtkWidget *create_streams_selector(char *selected_streams_uri,
+                                   char *filename)
+{
+       GirlStreamsInfo *streamsinfo, *localstreams;
+       GtkWidget *streams_selector;
+       GtkWidget *align, *menu, *drop_down, *item;
+
+       gchar *streams_mime, *streams_uri, *streams_codec, *streams_bitrate, *streams_samplerate, 
*streams_channels;
+       gchar *label, *world_streams_xml_filename, *local_streams_xml_file;
+
+       int i = 0, selection = -1;
+
+       /* The Streams dialog */
+       streams_selector = gtk_dialog_new_with_buttons(("Select a stream"), GTK_WINDOW(girl_app), 0,    /* 
flags */
+                                                       GTK_STOCK_CLOSE,
+                                                       GTK_RESPONSE_ACCEPT,
+                                                       NULL);
+       gtk_container_set_border_width
+           (GTK_CONTAINER(GTK_DIALOG(streams_selector)->vbox), 6);
+
+       align = gtk_alignment_new(0.5, 0.5, 0, 0);
+       gtk_container_add(GTK_CONTAINER
+                         (GTK_DIALOG(streams_selector)->vbox), align);
+       gtk_container_set_border_width(GTK_CONTAINER(align), 6);
+       gtk_widget_show(align);
+
+       menu = gtk_menu_new();
+       gtk_widget_show(menu);
+
+       /* creating the menu items */
+
+       world_streams_xml_filename = gnome_program_locate_file(NULL,
+                                                              GNOME_FILE_DOMAIN_APP_DATADIR,
+                                                              "girl/streams.xml",
+                                                              FALSE,
+                                                              NULL);
+       /* world_streams_xml_filename = g_strdup("http://girl.src.oka.no/streams.xml";); */
+
+       MSG("world_streams_xml_filename = %s\n",
+           world_streams_xml_filename);
+
+       if (world_streams_xml_filename == NULL) {
+               g_warning(("Failed to open %s.  Please install it.\n"),
+                         world_streams_xml_filename);
+       }
+
+       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);
+       }
+
+/*   g_free (local_streams_xml_file); */
+
+       streamsinfo = girl_streams_load_from_file(localstreams,
+                                               world_streams_xml_filename);
+
+       girl_streams = NULL;
+
+       while (streamsinfo != NULL) {
+
+               label =
+                   g_strconcat(streamsinfo->uri, " (",
+                               streamsinfo->mime, ")", NULL);
+               streams_uri = g_strdup(streamsinfo->uri);
+               streams_mime = g_strdup(streamsinfo->mime);
+               streams_codec = g_strdup(streamsinfo->codec);
+               streams_bitrate = g_strdup(streamsinfo->bitrate);
+               streams_samplerate = g_strdup(streamsinfo->samplerate);
+               streams_channels = g_strdup(streamsinfo->channels);
+               girl_streams = g_list_append(girl_streams,(GirlStreamsInfo *)streamsinfo);
+
+               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_streams_selector_changed),
+                                        NULL);
+                       g_object_set_data(G_OBJECT(item), "streams_uri",
+                                         (gpointer) streams_uri);
+                       g_object_set_data(G_OBJECT(item), "streams_mime",
+                                         (gpointer) streams_mime);
+                       g_object_set_data(G_OBJECT(item),
+                                         "streams_codec",
+                                         (gpointer) streams_codec);
+                       g_object_set_data(G_OBJECT(item),
+                                         "streams_bitrate",
+                                         (gpointer) streams_bitrate);
+                       g_object_set_data(G_OBJECT(item),
+                                         "streams_samplerate",
+                                         (gpointer) streams_samplerate);
+                       g_object_set_data(G_OBJECT(item),
+                                         "streams_channels",
+                                         (gpointer) streams_channels);
+                       gtk_widget_show(item);
+                       g_free(label);
+
+                       /* selection */
+                       if (selected_streams_uri != NULL &&
+                           !strcmp(selected_streams_uri, streams_uri))
+                               selection = i;
+               } else {
+                       g_free(streams_uri);
+                       g_free(streams_mime);
+                       g_free(streams_codec);
+                       g_free(streams_bitrate);
+                       g_free(streams_samplerate);
+                       g_free(streams_channels);
+               }
+               i++;
+               streamsinfo = streamsinfo->next;
+       }
+
+       drop_down = gtk_option_menu_new();
+       gtk_widget_show(drop_down);
+       gtk_option_menu_set_menu(drop_down, menu);
+       gtk_container_add(GTK_CONTAINER(align), drop_down);
+
+       if (selection != -1)
+               gtk_option_menu_set_history(drop_down, selection);
+
+       g_signal_connect(G_OBJECT(streams_selector), "response",
+                        G_CALLBACK(gtk_widget_hide),
+                        (gpointer) streams_selector);
+       g_signal_connect(G_OBJECT(streams_selector), "delete-event",
+                        G_CALLBACK(gtk_widget_hide),
+                        (gpointer) streams_selector);
+
+       return streams_selector;
+}
+
 #if 0
 static void station_print_selection(GtkWidget * list, gpointer func_data)
 {
@@ -555,6 +692,7 @@ GtkWidget *create_girl_app()
        GtkWidget *girl_pixmap;
 
        GtkWidget *appbar;
+       GtkWidget *progress;
        
        GirlData *girl_data = g_new0(GirlData, 1);
        char *pmf;
@@ -580,12 +718,16 @@ GtkWidget *create_girl_app()
        gtk_widget_show(girl_pixmap);
        gtk_box_pack_start(GTK_BOX(vbox1), girl_pixmap, TRUE, TRUE, 0);
 
+       progress = gtk_progress_bar_new();
+       /* girl->progress = GTK_PROGRESS_BAR( progress ); */
+
        appbar = gnome_appbar_new(FALSE, TRUE, FALSE);
        gnome_app_set_statusbar(GNOME_APP(girl_app), GTK_WIDGET(appbar));
        gnome_app_create_toolbar(GNOME_APP(girl_app), toolbar);
 
        girl_data->pixmap = GTK_IMAGE(girl_pixmap);
        girl_data->appbar = GNOME_APPBAR(appbar);
+       girl_data->progress = GTK_PROGRESS_BAR(progress);
 
        gnome_appbar_push(girl_data->appbar,
                          ("Point on the map and click \"Listen\" to listen to the station."));
@@ -646,6 +788,32 @@ GtkWidget *create_girl_app()
        printf("girl->selected_station_description: %s\n",
               girl->selected_station_description);
 
+       girl->selected_streams_uri =
+               gnome_config_get_string("selected_streams_uri=");
+       girl->selected_streams_mime =
+           gnome_config_get_string("selected_streams_mime=");
+       girl->selected_streams_codec =
+           gnome_config_get_string("selected_streams_codec=");
+       girl->selected_streams_bitrate =
+           gnome_config_get_string("selected_streams_bitrate=");
+       girl->selected_streams_samplerate =
+           gnome_config_get_string("selected_streams_samplerate=");
+       girl->selected_streams_channels =
+           gnome_config_get_string("selected_streams_channels=");
+
+       printf("girl->selected_streams_uri: %s\n",
+              girl->selected_streams_uri);
+       printf("girl->selected_streams_mime: %s\n",
+              girl->selected_streams_mime);
+       printf("girl->selected_streams_codec: %s\n",
+              girl->selected_streams_codec);
+       printf("girl->selected_streams_bitrate: %s\n",
+              girl->selected_streams_bitrate);
+       printf("girl->selected_streams_samplerate: %s\n",
+              girl->selected_streams_samplerate);
+       printf("girl->selected_streams_channels: %s\n",
+              girl->selected_streams_channels);
+
        gnome_config_pop_prefix();
 #endif
 
diff --git a/src/girl-listener.c b/src/girl-listener.c
index 0ece17b..8d0a6f7 100644
--- a/src/girl-listener.c
+++ b/src/girl-listener.c
@@ -33,12 +33,6 @@
 #include "girl.h"
 #include "girl-listener.h"
 
-#ifdef DEBUG
-#define MSG(x...) g_message(x)
-#else
-#define MSG(x...)
-#endif
-
 /* extern GirlListenerInfo *girllistener; */
 
 extern GList *girl_stations;
diff --git a/src/girl-program.c b/src/girl-program.c
index ef5b4f4..4abedb4 100644
--- a/src/girl-program.c
+++ b/src/girl-program.c
@@ -34,12 +34,6 @@
 #include "girl.h"
 #include "girl-program.h"
 
-#ifdef DEBUG
-#define MSG(x...) g_message(x)
-#else
-#define MSG(x...)
-#endif
-
 extern GirlData *girl;
 extern GList *girl_stations;
 extern GList *girl_programs;
diff --git a/src/girl-runners.c b/src/girl-runners.c
index ad91b32..ca28b08 100644
--- a/src/girl-runners.c
+++ b/src/girl-runners.c
@@ -1,32 +1,72 @@
+/* $Id$
+ *
+ * GNOME Internet Radio Locator
+ *
+ * Copyright (C) 2014  Ole Aamot Software
+ *
+ * Author: Ole Aamot <oka oka no>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "girl.h"
 #include "girl-runners.h"
 
-GirlRunnersInfo *girl_runners_new (GirlRunnersInfo * head,
-                                  gchar *id,
+GirlRunnersInfo *girl_runners_new (GPid *pid,
                                   gchar *name,
                                   gchar *date,
                                   gchar *time,
-                                  gchar *file) {}
-void girl_runners_free(GirlRunnersInfo * info) {}
-void girl_runners_mutex_init(GirlRunnersInfo *info, GMutex runner) {}
-void girl_runners_mutex_lock(GirlRunnersInfo *info, GMutex runner) {}
-void girl_runners_mutex_unlock(GirlRunnersInfo *info, GMutex mutex) {}
-void girl_runners_mutex_exit(GirlRunnersInfo *info, GMutex mutex) {}
+                                  gchar *file) {
+       GirlRunnersInfo *runner = g_new0(GirlRunnersInfo, 1);
+       runner->pid = pid;
+       runner->name = name;
+       runner->date = date;
+       runner->time = time;
+       runner->file = file;
+       return (GirlRunnersInfo *)runner;
+}
+
+void girl_runners_free(GirlRunnersInfo * info) {
+}
+
+void girl_runners_mutex_get(GirlRunnersInfo *info) {
+}
+
+void girl_runners_mutex_release(GirlRunnersInfo *info) {
+}
+
+void girl_runners_mutex_lock(GirlRunnersInfo *info);
+void girl_runners_mutex_unlock(GirlRunnersInfo *info);
 
-#if 0
-void girl_helper_run(char *command)
+void girl_runners_run(GirlRunnersInfo *info)
 {
-  GMutex mutex;
-  int recording_lock;
-  girl_runner_mutex_init(program,mutex);
-  if (recording_lock == TRUE) {
-    girl_runner_mutex_lock(program,mutex);
-    recording_lock = TRUE;
-  }
-  if (recording_lock == FALSE) {
-    girl_runner_mutex_unlock(program,mutex);
-    recording_lock = FALSE;
-    girl_runner_mutex_exit(program,mutex);
-  }
-  return (0);
+       GThread *thread;
+       gboolean thread_ready;
+       gint recording_lock;
+       /* g_assert (g_mutex_trylock (girl_mutex)); */
+       /* g_assert (G_TRYLOCK (mutex)); */
+       thread_ready = GIRL_RECORDING_FALSE;
+       /* thread = g_thread_create (thread, girl_helper_run, command, NULL); */
+       /* while (!thread_ready) { */
+       /*      g_usleep(G_USEC_PER_SEC / 5); */
+       /* } */
+       /* G_UNLOCK (info->mutex); */
+       /* g_mutex_unlock (mutex); */
+       /* g_mutex_free (mutex); */
+       girl_runners_mutex_get(info);
+       recording_lock = GIRL_RECORDING_TRUE;
+       girl_runners_mutex_release(info);
+       return (0);
 }
-#endif 
diff --git a/src/girl-runners.h b/src/girl-runners.h
index da4a357..47de281 100644
--- a/src/girl-runners.h
+++ b/src/girl-runners.h
@@ -24,30 +24,31 @@
 #ifndef GIRL_RUNNERS_H
 #define GIRL_RUNNERS_H
 
-#include "girl.h"
-
 typedef struct _GirlRunnersInfo GirlRunnersInfo;
 
 struct _GirlRunnersInfo {
        GtkWidget *widget;
-       GMutex mutex;
-       gchar *id;
+       GMutex *mutex;
+       GPid *pid;
        gchar *name;
+       gchar *date;
+       gchar *time;
+       gchar *file;
        gchar *command;
 };
 
-GirlRunnersInfo *girl_runners_new (GirlRunnersInfo * head,
-                                  gchar *id,
+GirlRunnersInfo *girl_runners_new (GPid *pid,
                                   gchar *name,
                                   gchar *date,
                                   gchar *time,
                                   gchar *file);
 
 void girl_runners_free(GirlRunnersInfo * info);
+void girl_runners_mutex_get(GirlRunnersInfo *info);
+void girl_runners_mutex_release(GirlRunnersInfo *info);
+void girl_runners_mutex_lock(GirlRunnersInfo *info);
+void girl_runners_mutex_unlock(GirlRunnersInfo *info);
 
-void girl_runners_mutex_init(GirlRunnersInfo *info, GMutex runner);
-void girl_runners_mutex_lock(GirlRunnersInfo *info, GMutex runner);
-void girl_runners_mutex_unlock(GirlRunnersInfo *info, GMutex mutex);
-void girl_runners_mutex_exit(GirlRunnersInfo *info, GMutex mutex);
+void cb_record_execute(GtkButton *button);
 
 #endif /* GIRL_RUNNERS_H */
diff --git a/src/girl-station.c b/src/girl-station.c
index dbf38b5..c94ac67 100644
--- a/src/girl-station.c
+++ b/src/girl-station.c
@@ -34,15 +34,10 @@
 #include "girl.h"
 #include "girl-station.h"
 
-#ifdef DEBUG
-#define MSG(x...) g_message(x)
-#else
-#define MSG(x...)
-#endif
-
 extern GirlData *girl;
 extern GList *girl_stations;
 extern GList *girl_listeners;
+extern GList *girl_streams;
 
 extern GtkWidget *girl_app;
 
@@ -63,18 +58,87 @@ void show_error(gchar * msg)
 #endif                         /* GIRL_CLI */
 }
 
+static void
+cb_child_watch( GPid  pid,
+               gint  status)
+{
+       /* Remove timeout callback */
+       g_source_remove(girl->timeout_id );
+
+       /* Close pid */
+       g_spawn_close_pid( pid );
+}
+
+static gboolean
+cb_out_watch( GIOChannel   *channel,
+             GIOCondition  cond)
+{
+       gchar *string;
+       gsize  size;
+
+       if( cond == G_IO_HUP )
+       {
+               g_io_channel_unref( channel );
+               return( FALSE );
+       }
+
+       g_io_channel_read_line( channel, &string, &size, NULL, NULL );
+
+       /* gnome_appbar_pop(girl->appbar); */
+       /* gnome_appbar_push(girl->appbar, string); */
+
+       g_free( string );
+
+       return( TRUE );
+}
+
+static gboolean
+cb_err_watch( GIOChannel   *channel,
+             GIOCondition  cond)
+{
+       gchar *string;
+       gsize  size;
+
+       if( cond == G_IO_HUP )
+       {
+               g_io_channel_unref( channel );
+               return( FALSE );
+       }
+
+       g_io_channel_read_line( channel, &string, &size, NULL, NULL );
+       /* gnome_appbar_pop(girl->appbar); */
+       /* gnome_appbar_push(girl->appbar, string); */
+       g_free( string );
+
+       return( TRUE );
+}
+
+static gboolean
+cb_timeout( )
+{
+       /* Bounce progress bar */
+       gtk_progress_bar_pulse( girl->progress );
+
+       return( TRUE );
+}
+
 void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType helper)
 {
        GError *err = NULL;
        GTimeVal mtime;
 
        const char *mime_info;
-
        /* GnomeVFSMimeApplication *app; */
        char *app, *command, *msg, *archive;
-
+       char **argv = NULL;
+       gint argc;
        gint status;
 
+       GPid        pid;
+       gint        out, error;
+       GIOChannel *out_ch, *err_ch;
+       gboolean    ret;
+
        g_return_if_fail(url != NULL);
        MSG("%s", url);
 
@@ -98,11 +162,14 @@ void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType
                if (type == GIRL_STREAM_SHOUTCAST) {
                        if (helper == GIRL_STREAM_PLAYER) {
                                command = g_strconcat(app, " ", url, NULL);
+                               /* argv[0] = g_strdup(app); */
+                               /* argv[1] = g_strdup(url); */
                        }
                        if (helper == GIRL_STREAM_RECORD) {
                                /* archive = g_strconcat("file://", g_get_home_dir(), "/.girl/", name, NULL); 
*/
                                /* girl_archive_new(url, archive); */
-                               /* printf("Archiving program at %s\n", archive); */                           
  command = g_strconcat(app, " ", url, NULL);
+                               /* printf("Archiving program at %s\n", archive); */
+                               command = g_strconcat(app, " ", url, NULL);
                                /* " -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); */
                        }
@@ -142,6 +209,69 @@ void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType
        }
 
        if (helper == GIRL_STREAM_RECORD) {
+
+/* #if 0 */
+               /* gchar *argv[] = { command, NULL }; */
+               /* Spawn child process */
+
+               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);
+
+               /* 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( err );
+#else
+               out_ch = g_io_channel_unix_new( out );
+               err_ch = g_io_channel_unix_new( err );
+#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"
@@ -152,6 +282,10 @@ void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType
                } else {
                        g_print("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
        }
 }
 
@@ -163,9 +297,16 @@ void girl_stream_player(GtkWidget * widget, gpointer data)
                        GIRL_STREAM_PLAYER);
 }
 
-void girl_info_view(GirlStationInfo * info)
+void girl_stream_record(GtkWidget * widget, gpointer data)
 {
+       girl_helper_run(girl->selected_station_uri,
+                       girl->selected_station_name,
+                       GIRL_STREAM_SHOUTCAST,
+                       GIRL_STREAM_RECORD);
+}
 
+void girl_stream_select(GirlStreamsInfo * info)
+{
 }
 
 static void
@@ -207,7 +348,7 @@ girl_station_parser(GirlStationInfo * station, xmlDocPtr doc,
                            xmlNodeListGetString(doc, sub->xmlChildrenNode,
                                                 1);
                        MSG("station->location = %s\n", station->location);
-                       /* fprintf(stdout, "%s (%s), ", station->name, station->location); */
+                       fprintf(stdout, "%s (%s), ", station->name, station->location); 
                }
 
                if ((!xmlStrcmp
diff --git a/src/girl-streams.c b/src/girl-streams.c
index 600e2c6..b8c799d 100644
--- a/src/girl-streams.c
+++ b/src/girl-streams.c
@@ -219,9 +219,9 @@ GirlStreamsInfo *girl_streams_load_from_file(GirlStreamsInfo * head,
 
        while (cur != NULL) {
 
-               if ((!xmlStrcmp(cur->name, (const xmlChar *) "streams"))) {
+               if ((!xmlStrcmp(cur->name, (const xmlChar *) "stream"))) {
 
-                       MSG("Found a new streams.\n");
+                       MSG("Found a new stream.\n");
 
                        curr = g_new0(GirlStreamsInfo, 1);
                        mem_streams = g_new0(GirlStreamsInfo, 1);
diff --git a/src/girl.c b/src/girl.c
index 732ffa1..2be1ccb 100644
--- a/src/girl.c
+++ b/src/girl.c
@@ -35,7 +35,7 @@
 #include "girl-listener.h"
 #include "girl-station.h"
 
-#ifdef DEBUG
+#ifdef GIRL_DEBUG
 #define MSG(x...) g_message(x)
 #else
 #define MSG(x...)
@@ -46,11 +46,13 @@ GirlData *girl;
 GList *girl_listeners;
 GList *girl_programs;
 GList *girl_stations;
+GList *girl_streams;
 
 GtkWidget *girl_app;
 GtkWidget *listeners_selector = NULL;
 GtkWidget *programs_selector = NULL;
 GtkWidget *stations_selector = NULL;
+GtkWidget *streams_selector = NULL;
 
 int main(int argc, char *argv[])
 {
@@ -72,18 +74,22 @@ int main(int argc, char *argv[])
                           argc, argv,
                           GNOME_PARAM_APP_DATADIR, DATADIR, NULL);
 
+#if defined(G_THREADS_ENABLED) && ! defined(G_THREADS_IMPL_NONE)
+       g_thread_init (NULL);
+#endif
+
        girl_app = create_girl_app();
 
        gtk_widget_show(girl_app);
 
        /* Set up the listeners list */
-       listeners_selector = create_listeners_selector(girl->selected_listener_uri,"listeners.xml");
+       /* listeners_selector = create_listeners_selector(girl->selected_listener_uri,"listeners.xml"); */
 
-       g_object_add_weak_pointer(G_OBJECT(listeners_selector),
-                                 (void **) &(listeners_selector));
+       /* 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");
+       /* /\* Set up the programs list *\/ */
+       /* programs_selector = create_programs_selector(girl->selected_program_uri,"programs.xml"); */
 
        /* gtk_widget_show(programs_selector); */
 
@@ -94,11 +100,15 @@ int main(int argc, char *argv[])
        stations_selector = create_stations_selector(girl->selected_station_uri,
                                                     "stations.xml");
 
-       /* gtk_widget_show(stations_selector); */
+       /* Set up the streams list */
+       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(streams_selector),
+                                 (void **) &(streams_selector));
        /* Icons */
        iconname = gnome_program_locate_file(NULL,
                                             GNOME_FILE_DOMAIN_APP_PIXMAP,
@@ -149,7 +159,7 @@ static void cause_movement(int way)
 
 }
 
-void on_previous_click(GtkWidget * a, gpointer user_data)
+void on_previous_station_click(GtkWidget * a, gpointer user_data)
 {
        GList *l = g_list_previous(girl_stations);
        if (l != NULL) {
@@ -209,7 +219,7 @@ void on_previous_click(GtkWidget * a, gpointer user_data)
        }
 }
 
-void on_next_click(GtkWidget * a, gpointer user_data)
+void on_next_station_click(GtkWidget * a, gpointer user_data)
 {
        GList *l = g_list_first(girl_stations);
        if (l != NULL) {
@@ -409,6 +419,52 @@ void on_stations_selector_changed(GtkWidget * a, gpointer user_data)
                        GIRL_STREAM_PLAYER);
 }
 
+void on_streams_selector_button_clicked(GtkWidget * a, gpointer user_data)
+{
+       gtk_widget_show(streams_selector);
+       gdk_window_raise(streams_selector->window);
+}
+
+void on_streams_selector_changed(GtkWidget * a, gpointer user_data)
+{
+       if (girl->selected_streams_uri != NULL)
+               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->selected_streams_mime = g_strdup(g_object_get_data(G_OBJECT(a), "streams_mime"));
+       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->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->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->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);
+
+       appbar_send_msg(_("Selected %s [%s] [%s] [%s]"),
+                       girl->selected_streams_uri,
+                       girl->selected_streams_mime,
+                       girl->selected_streams_codec,
+                       girl->selected_streams_bitrate);
+
+       girl_helper_run(girl->selected_streams_uri,
+                       girl->selected_streams_mime,
+                       GIRL_STREAM_SHOUTCAST,
+                       GIRL_STREAM_PLAYER);
+}
+
 void quit_app(GtkWidget * a, gpointer user_data)
 {
        gnome_config_push_prefix("/girl/General/");
@@ -430,6 +486,18 @@ void quit_app(GtkWidget * a, gpointer user_data)
                                girl->selected_station_release);
        gnome_config_set_string("selected_station_description",
                                girl->selected_station_description);
+       gnome_config_set_string("selected_streams_uri",
+                               girl->selected_streams_uri);
+       gnome_config_set_string("selected_streams_mime",
+                               girl->selected_streams_mime);
+       gnome_config_set_string("selected_streams_codec",
+                               girl->selected_streams_codec);
+       gnome_config_set_string("selected_streams_samplerate",
+                               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_sync();
        gnome_config_pop_prefix();
 
@@ -437,6 +505,9 @@ void quit_app(GtkWidget * a, gpointer user_data)
        if (GTK_IS_WIDGET(stations_selector)) {
                gtk_widget_destroy(stations_selector);
        }
+       if (GTK_IS_WIDGET(streams_selector)) {
+               gtk_widget_destroy(streams_selector);
+       }
 
        gtk_main_quit();
 }
@@ -455,7 +526,7 @@ void about_app(GtkWidget * a, gpointer user_data)
                return;
        }
 
-       about = gnome_about_new(_("GNOME Internet Radio Locator"), VERSION, _("Copyright 2014 Ole Aamot 
Software\nCopyright 2002 Free Software Foundation"), _("Internet radio station and listener locator"), (const 
gchar **) authors, NULL,  /* documenters */
+       about = gnome_about_new(_("GNOME Internet Radio Locator"), VERSION, _("Copyright 2014 Ole Aamot 
Software\nCopyright 2002 Free Software Foundation"), _("Internet Radio Locator"), (const gchar **) authors, 
NULL,       /* documenters */
                                strcmp(translator_credits,
                                       "translator_credits") !=
                                0 ? translator_credits : NULL, girl->icon);
@@ -562,6 +633,39 @@ void about_station(GtkWidget * a, gpointer user_data)
        gtk_widget_show(about_station);
 }
 
+void about_streams(GtkWidget * a, gpointer user_data)
+{
+       static GtkWidget *about_streams = NULL;
+       const gchar *translator_credits = _("translator_credits");
+       const gchar *authors[] = {
+               girl->selected_streams_uri,
+               NULL,
+       };
+
+       if (about_streams) {
+               gdk_window_raise(about_streams->window);
+               return;
+       }
+
+       if (girl->selected_streams_uri != NULL) {
+               about_streams = gnome_about_new(girl->selected_streams_uri,
+                                               girl->selected_streams_codec,
+                                               girl->selected_streams_mime,
+                                               girl->selected_streams_bitrate,
+                                               authors,
+                                               NULL,
+                                               NULL,
+                                               girl->icon);
+               g_signal_connect(G_OBJECT(about_streams), "destroy",
+                                G_CALLBACK(gtk_widget_destroy), NULL);
+               g_signal_connect(G_OBJECT(about_streams), "delete-event",
+                                G_CALLBACK(gtk_widget_destroy), NULL);
+               g_object_add_weak_pointer(G_OBJECT(about_streams), (void **) &(about_streams));
+               gtk_widget_show(about_streams);
+       }
+
+}
+
 void on_listen_button_clicked(GtkWidget *a, gpointer user_data)
 {
 
@@ -584,6 +688,7 @@ void on_listen_button_clicked(GtkWidget *a, gpointer user_data)
 void on_record_button_clicked(GtkWidget *a, gpointer user_data)
 {
        GtkWidget *dialog;
+       GPid *pid;
 
        if (girl->selected_station_name != NULL) {
                appbar_send_msg(_("Recording from %s in %s: %s "),
@@ -595,6 +700,11 @@ void on_record_button_clicked(GtkWidget *a, gpointer user_data)
                                girl->selected_station_name,
                                GIRL_STREAM_SHOUTCAST,
                                GIRL_STREAM_RECORD);
+               girl->selected_runners = girl_runners_new(getpid(),
+                                                         girl->selected_station_name,
+                                                         "date",
+                                                         "time",
+                                                         "girl.wav");
        } else {
                dialog = gtk_message_dialog_new(GTK_WINDOW(girl_app),
                                                GTK_DIALOG_MODAL,
diff --git a/src/girl.h b/src/girl.h
index d7689cd..0570eb6 100644
--- a/src/girl.h
+++ b/src/girl.h
@@ -33,7 +33,8 @@ typedef enum {
 
 typedef enum {
        GIRL_STREAM_SHOUTCAST = 0x0001,
-       GIRL_STREAM_OGG = 0x0002
+       GIRL_STREAM_OGG = 0x0002,
+       GIRL_STREAM_AAC = 0x0003
 } GirlStreamType;
 
 typedef enum {
@@ -47,13 +48,17 @@ typedef enum {
 #include "girl-program.h"
 #include "girl-runners.h"
 #include "girl-station.h"
+#include "girl-streams.h"
 
-#ifdef DEBUG
+#ifdef GIRL_DEBUG
 #define MSG(x...) g_message(x)
 #else
 #define MSG(x...)
 #endif
 
+#define GIRL_RECORDING_TRUE 1
+#define GIRL_RECORDING_FALSE 0
+
 void show_error(gchar * msg);
 void appbar_send_msg(const char *a, ...);
 
@@ -68,23 +73,27 @@ gchar *copy_to_mem(GnomeVFSURI * uri, GnomeVFSFileSize len);
 void girl_helper_run(char *url, char *name, GirlStreamType type, GirlHelperType girl);
 void on_listen_button_clicked(GtkWidget * button, gpointer user_data);
 void on_record_button_clicked(GtkWidget * button, gpointer user_data);
-void on_next_click(GtkWidget *, gpointer user_data);
-void on_previous_click(GtkWidget *, 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);
 void on_listeners_selector_changed(GtkWidget * a, gpointer user_data);
 void on_programs_selector_button_clicked(GtkWidget *, gpointer user_data);
 void on_programs_selector_changed(GtkWidget * a, gpointer user_data);
 void on_stations_selector_button_clicked(GtkWidget *, gpointer user_data);
 void on_stations_selector_changed(GtkWidget * a, gpointer user_data);
+void on_streams_selector_button_clicked(GtkWidget *, gpointer user_data);
+void on_streams_selector_changed(GtkWidget * a, gpointer user_data);
 void quit_app(GtkWidget *, gpointer user_data);
 void about_app(GtkWidget *, gpointer user_data);
 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;
        GirlListenerInfo *selected_listener;
        gchar *selected_listener_uri;
        gchar *selected_listener_name;
@@ -97,6 +106,8 @@ struct _GirlData {
        gchar *selected_program_location;
        gchar *selected_program_release;
        gchar *selected_program_description;
+       GirlRunnersInfo *selected_runners;
+       gint timeout_id;
        GirlStationInfo *selected_station;
        gchar *selected_station_uri;
        gchar *selected_station_name;
@@ -104,6 +115,13 @@ struct _GirlData {
        gchar *selected_station_release;
        gchar *selected_station_description;
        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_bitrate;
        GirlChannels selected_channels;
        gint selected_samplerate;
        GdkPixbuf *icon;
@@ -112,8 +130,9 @@ struct _GirlData {
 typedef struct _GirlData GirlData;
 
 extern GirlData *girl;
-extern GList *girl_stations;
-extern GList *girl_programs;
 extern GList *girl_listeners;
+extern GList *girl_programs;
+extern GList *girl_stations;
+extern GList *girl_streams;
 
 #endif /* GIRL_H */
diff --git a/src/stations.xml b/src/stations.xml
index 646e994..d581ac3 100644
--- a/src/stations.xml
+++ b/src/stations.xml
@@ -1,7 +1,36 @@
 <?xml version="1.0"?>
-<!DOCTYPE girl SYSTEM "girl-0.6.dtd">
-<girl version="0.6">
-  <station id="radior" name="Radio R" rank="1.0" type="edu" release="">
+<!DOCTYPE girl SYSTEM "girl-0.7.dtd">
+<girl version="0.7">
+  <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>
@@ -10,35 +39,35 @@
     <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="">
+  <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="">
+  <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">
+  <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="">
+  <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="">
+  <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.
@@ -47,7 +76,7 @@ Behind the scenes we rely on our fantastic technical, musical and promotional te
     <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">
+  <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.
@@ -62,56 +91,56 @@ Behind the scenes we rely on our fantastic technical, musical and promotional te
     <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">
+  <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/mpeg" uri="http://streamer.radiocampus.be:8000/stream_hi.ogg"; codec="Vorbis" 
samplerate="44100 Hz" channels="Stereo" bitrate="192 kbps" />
+    <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">
+  <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">
+  <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">
+  <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">
+  <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">
+  <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">
+  <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">
+  <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."
@@ -129,11 +158,11 @@ Behind the scenes we rely on our fantastic technical, musical and promotional te
       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="Vorbis" 
samplerate="44100 Hz" channels="Stereo" bitrate="96 kbps" />
+    <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">
+  <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.
@@ -141,60 +170,60 @@ Behind the scenes we rely on our fantastic technical, musical and promotional te
       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="Vorbis" 
samplerate="44100 Hz" channels="Stereo" bitrate="128 kbps" />
+    <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">
+  <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">
+  <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">
+  <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">
+  <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">
+  <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">
+  <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">
+  <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">
+  <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.
@@ -205,14 +234,14 @@ Behind the scenes we rely on our fantastic technical, musical and promotional te
     <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">
+  <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">
+  <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>


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