=== added file '.gitignore'
--- .gitignore	1970-01-01 00:00:00 +0000
+++ .gitignore	2012-06-25 05:56:21 +0000
@@ -0,0 +1,9 @@
+CMakeCache.txt
+CMakeFiles/
+Doxyfile
+Makefile
+cmake_install.cmake
+config.h
+libmusicbrainz4.pc
+docs/
+install_manifest.txt

=== modified file 'CMakeLists.txt'
--- CMakeLists.txt	2012-02-01 17:18:10 +0000
+++ CMakeLists.txt	2012-06-25 05:56:21 +0000
@@ -1,15 +1,15 @@
 cmake_minimum_required(VERSION 2.6)
 
 PROJECT(libmusicbrainz4)
-SET(PROJECT_VERSION 4.0.0)
+SET(PROJECT_VERSION 4.0.3)
 
 # 1. If the library source code has changed at all since the last update, then increment revision.
 # 2. If any interfaces have been added, removed, or changed since the last update, increment current, and set revision to 0.
 # 3. If any interfaces have been added since the last public release, then increment age.
 # 4. If any interfaces have been removed since the last public release, then set age to 0.
-SET(musicbrainz4_SOVERSION_CURRENT  3)
-SET(musicbrainz4_SOVERSION_REVISION 0)
-SET(musicbrainz4_SOVERSION_AGE      0)
+SET(musicbrainz4_SOVERSION_CURRENT  5)
+SET(musicbrainz4_SOVERSION_REVISION 1)
+SET(musicbrainz4_SOVERSION_AGE      2)
 
 MATH(EXPR musicbrainz4_SOVERSION_MAJOR "${musicbrainz4_SOVERSION_CURRENT} - ${musicbrainz4_SOVERSION_AGE}")
 MATH(EXPR musicbrainz4_SOVERSION_MINOR "${musicbrainz4_SOVERSION_AGE}")
@@ -47,6 +47,5 @@
 
 ADD_CUSTOM_TARGET(dist
     rm -rf "libmusicbrainz-${PROJECT_VERSION}"
-    COMMAND svn export http://svn.musicbrainz.org/libmusicbrainz/trunk "libmusicbrainz-${PROJECT_VERSION}"
-    COMMAND tar -zcvf "libmusicbrainz-${PROJECT_VERSION}.tar.gz" "libmusicbrainz-${PROJECT_VERSION}"
+    COMMAND git archive --prefix="libmusicbrainz-${PROJECT_VERSION}/" release-${PROJECT_VERSION} | gzip -9 > libmusicbrainz-${PROJECT_VERSION}.tar.gz
 )

=== modified file 'Doxyfile.cmake'
--- Doxyfile.cmake	2012-02-01 17:18:10 +0000
+++ Doxyfile.cmake	2012-06-25 05:56:21 +0000
@@ -16,5 +16,5 @@
 FULL_PATH_NAMES     = NO
 MACRO_EXPANSION     = YES
 EXPAND_ONLY_PREDEF  = YES
-PREDEFINED          = MB_API
+PREDEFINED          = LIBMB4_DEPRECATED(f)=
 REPEAT_BRIEF        = NO

=== modified file 'NEWS.txt'
--- NEWS.txt	2012-02-01 17:18:10 +0000
+++ NEWS.txt	2012-06-25 05:56:21 +0000
@@ -1,3 +1,29 @@
+Changes for libmusicbrainz 4.0.3
+--------------------------------
+
+   - Fix LMB-32 - Correctly ignore unrecognised nodes
+   - Don't compile using -Werror when building from tarball
+
+Changes for libmusicbrainz 4.0.2
+--------------------------------
+
+   - Add extra attributes to Alias
+   - Add IPI lists to Artist and Label
+   - Add 'Ended' to Lifespan
+   - Add PrimaryType and SecondaryTypeList to ReleaseGroup
+   - Add text based track number to Track
+   - Add ISWC list to Work
+   - Debug builds show queries and responses on stderr
+   - Documentation updates
+
+Changes for libmusicbrainz 4.0.1
+--------------------------------
+
+   - Fixed bug LMB-30 - Unable to access all relation lists on objects with
+      multiple relation lists
+   - Fixed bug LMB-31 - mb_relationlist_get_targettype always returns
+      "target-type"
+
 Changes for libmusicbrainz 4.0.0
 --------------------------------
 

=== added file 'README.md'
--- README.md	1970-01-01 00:00:00 +0000
+++ README.md	2012-06-25 05:56:21 +0000
@@ -0,0 +1,44 @@
+============================
+ MusicBrainz Client Library
+============================
+
+Documentation
+-------------
+
+To get started quickly have a look at the examples directory which
+contains various sample programs. API documentation can be generated
+using [Doxygen] (http://www.stack.nl/~dimitri/doxygen/). The online version of
+the API documentation can be found at:
+
+    http://metabrainz.github.com/libmusicbrainz/
+
+Compiling and Linking
+---------------------
+
+This package provides a pkg-config script that returns the necessary compiler
+and linker flags, as well as the version number.  To build a small sample
+program one would use:
+
+    g++ -o test_app test_app.cpp `pkg-config libmusicbrainz4 --cflags --libs`
+
+If you don't want/can't use pkg-config and you are using the C API, make sure
+you link in the C++ standard library:
+
+    gcc -o test_app test_app.c -lmusicbrainz4 -lm -lstdc++
+
+Contact
+-------
+
+If you have any questions about this library, feel free to ask on the
+MusicBrainz development mailing list:
+
+    http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-devel
+
+Please submit bug reports to the MusicBrainz bug tracking system:
+
+    http://tickets.musicbrainz.org/browse/LMB
+
+You can find out more about the MusicBrainz project by visiting its
+site:
+
+    http://musicbrainz.org/

=== removed file 'README.txt'
--- README.txt	2012-02-01 17:18:10 +0000
+++ README.txt	1970-01-01 00:00:00 +0000
@@ -1,44 +0,0 @@
-============================
- MusicBrainz Client Library
-============================
-
-Documentation
-=============
-
-To get started quickly have a look at the examples directory which
-contains various sample programs. API documentation can be generated
-using Doxygen (http://www.stack.nl/~dimitri/doxygen/). Online version of
-the API documentation can be found at:
-
-  http://users.musicbrainz.org/~luks/docs/libmusicbrainz4/
-
-Compiling and Linking
-=====================
-
-This package provides a pkg-config script that returns the necessary compiler
-and linker flags, as well as the version number.  To build a small sample
-program one would use:
-
-   g++ -o test_app test_app.cpp `pkg-config libmusicbrainz4 --cflags --libs`
-
-If you don't want/can't use pkg-config and you are using the C API, make sure
-you link in the C++ standard library:
-
-   gcc -o test_app test_app.c -lmusicbrainz4 -lm -lstdc++
-
-Contact
-=======
-
-If you have any questions about this library, feel free to ask on the
-MusicBrainz development mailing list:
-
-   http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-devel
-
-Please submit bug reports to the MusicBrainz bug tracking system:
-
-   http://tickets.musicbrainz.org/
-
-You can find out more about the MusicBrainz project by visiting its
-site:
-
-   http://musicbrainz.org/

=== modified file 'config.h.cmake'
--- config.h.cmake	2012-02-01 17:18:10 +0000
+++ config.h.cmake	2012-06-25 05:56:21 +0000
@@ -4,6 +4,4 @@
 #define PACKAGE "${PROJECT_NAME}"
 #define VERSION "${PROJECT_VERSION}"
 
-#cmakedefine DISCID_FOUND
-
 #endif

=== modified file 'debian/changelog'
--- debian/changelog	2012-02-01 17:18:10 +0000
+++ debian/changelog	2012-06-25 05:56:21 +0000
@@ -1,3 +1,11 @@
+libmusicbrainz (4.0.3-0ubuntu1) quantal; urgency=low
+
+  * New upstream release (LP: #1005075).
+  * Bump Standards-Version to 3.9.3.
+  * Bump Build-Depends for debhelper to >= 9.
+
+ -- Logan Rosen <logatronico@gmail.com>  Mon, 25 Jun 2012 01:45:21 -0400
+
 libmusicbrainz (4.0.0-0ubuntu1) precise; urgency=low
 
   * Merge from unreleased Debian git.

=== modified file 'debian/control'
--- debian/control	2012-02-01 17:18:10 +0000
+++ debian/control	2012-06-25 05:56:21 +0000
@@ -1,11 +1,11 @@
 Source: libmusicbrainz
 Priority: extra
 Maintainer: Timo Aaltonen <tjaalton@ubuntu.com>
-Build-Depends: debhelper (>= 8.1.3~),
+Build-Depends: debhelper (>= 9),
  cmake,
  libneon27-gnutls-dev| libneon-dev,
  doxygen,
-Standards-Version: 3.9.2
+Standards-Version: 3.9.3
 Section: libs
 Homepage: http://musicbrainz.org/doc/libmusicbrainz
 Vcs-Git: git://git.debian.org/collab-maint/libmusicbrainz.git

=== added file 'examples/.gitignore'
--- examples/.gitignore	1970-01-01 00:00:00 +0000
+++ examples/.gitignore	2012-06-25 05:56:21 +0000
@@ -0,0 +1,8 @@
+CMakeFiles/
+Makefile
+cdlookup
+cdlookup_c
+cmake_install.cmake
+collections
+search
+search_c

=== modified file 'examples/CMakeLists.txt'
--- examples/CMakeLists.txt	2012-02-01 17:18:10 +0000
+++ examples/CMakeLists.txt	2012-06-25 05:56:21 +0000
@@ -8,10 +8,16 @@
 ADD_EXECUTABLE(collections collections.cc)
 
 IF(CMAKE_COMPILER_IS_GNUCXX)
-		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wextra -pedantic-errors")
+		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic-errors")
+		IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
+			SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
+		ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
 ENDIF(CMAKE_COMPILER_IS_GNUCXX)
 
 IF(CMAKE_COMPILER_IS_GNUCC)
-		SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wextra -pedantic-errors")
+		SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic-errors")
+		IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
+			SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
+		ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
 ENDIF(CMAKE_COMPILER_IS_GNUCC)
 

=== modified file 'examples/cdlookup.cc'
--- examples/cdlookup.cc	2012-02-01 17:18:10 +0000
+++ examples/cdlookup.cc	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: cdlookup.cc 13266 2011-08-25 12:56:47Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'examples/cdlookup_c.c'
--- examples/cdlookup_c.c	2012-02-01 17:18:10 +0000
+++ examples/cdlookup_c.c	2012-06-25 05:56:21 +0000
@@ -10,7 +10,7 @@
    modify it under the terms of v2 of the GNU Lesser General Public
    License as published by the Free Software Foundation.
 
-   Flactag is distributed in the hope that it will be useful,
+   libmusicbrainz4 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
    Lesser General Public License for more details.

=== modified file 'examples/collections.cc'
--- examples/collections.cc	2012-02-01 17:18:10 +0000
+++ examples/collections.cc	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: collections.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'examples/search.cc'
--- examples/search.cc	2012-02-01 17:18:10 +0000
+++ examples/search.cc	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: search.cc 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'examples/search_c.c'
--- examples/search_c.c	2012-02-01 17:18:10 +0000
+++ examples/search_c.c	2012-06-25 05:56:21 +0000
@@ -10,7 +10,7 @@
    modify it under the terms of v2 of the GNU Lesser General Public
    License as published by the Free Software Foundation.
 
-   Flactag is distributed in the hope that it will be useful,
+   libmusicbrainz4 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
    Lesser General Public License for more details.

=== added file 'include/musicbrainz4/.gitignore'
--- include/musicbrainz4/.gitignore	1970-01-01 00:00:00 +0000
+++ include/musicbrainz4/.gitignore	2012-06-25 05:56:21 +0000
@@ -0,0 +1,1 @@
+mb4_c.h

=== modified file 'include/musicbrainz4/Alias.h'
--- include/musicbrainz4/Alias.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Alias.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Alias.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -48,13 +48,18 @@
 
 		std::string Locale() const;
 		std::string Text() const;
+		std::string SortName() const;
+		std::string Type() const;
+		std::string Primary() const;
+		std::string BeginDate() const;
+		std::string EndDate() const;
 
 		virtual std::ostream& Serialise(std::ostream& os) const;
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CAliasPrivate * const m_d;

=== modified file 'include/musicbrainz4/AliasList.h'
--- include/musicbrainz4/AliasList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/AliasList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: AliasList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/Annotation.h'
--- include/musicbrainz4/Annotation.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Annotation.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Annotation.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -55,8 +55,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CAnnotationPrivate * const m_d;

=== modified file 'include/musicbrainz4/AnnotationList.h'
--- include/musicbrainz4/AnnotationList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/AnnotationList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: AnnotationList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/Artist.h'
--- include/musicbrainz4/Artist.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Artist.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Artist.h 13265 2011-08-25 12:53:44Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -29,6 +29,7 @@
 #include <iostream>
 
 #include "musicbrainz4/Entity.h"
+#include "musicbrainz4/IPIList.h"
 #include "musicbrainz4/ReleaseList.h"
 #include "musicbrainz4/AliasList.h"
 #include "musicbrainz4/RecordingList.h"
@@ -65,7 +66,20 @@
 		std::string Gender() const;
 		std::string Country() const;
 		std::string Disambiguation() const;
-		std::string IPI() const;
+
+		/**
+		 * @deprecated Returns one of the IPIs for this artist
+		 *
+		 * Returns one of the IPIs for this artist. To return all
+		 * IPIs, see MusicBrainz4::CArtist::IPIList
+		 *
+		 * <b>This method is deprecated, please use MusicBrainz4::CArtist::IPIList</b>
+		 *
+		 * @return One of the IPIs for this artist
+		 */
+
+		LIBMB4_DEPRECATED(MusicBrainz4::CArtist::IPIList) std::string IPI() const;
+		CIPIList *IPIList() const;
 		CLifespan *Lifespan() const;
 		CAliasList *AliasList() const;
 		CRecordingList *RecordingList() const;
@@ -73,7 +87,20 @@
 		CReleaseGroupList *ReleaseGroupList() const;
 		CLabelList *LabelList() const;
 		CWorkList *WorkList() const;
-		CRelationList *RelationList() const;
+
+		/**
+		 * @deprecated Returns the <b>last</b> relation list for this artist
+		 *
+		 * Returns the <b>last</b> relation list for this artist. To return all
+		 * relation lists, see MusicBrainz4::CArtist::RelationListList
+		 *
+		 * <b>This method is deprecated, please use MusicBrainz4::CArtist::RelationListList</b>
+		 *
+		 * @return The <b>last</b> relation list for this artist
+		 */
+
+		LIBMB4_DEPRECATED(MusicBrainz4::CArtist::RelationListList) CRelationList *RelationList() const;
+		CRelationListList *RelationListList() const;
 		CTagList *TagList() const;
 		CUserTagList *UserTagList() const;
 		CRating *Rating() const;
@@ -83,8 +110,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/ArtistCredit.h'
--- include/musicbrainz4/ArtistCredit.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/ArtistCredit.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: ArtistCredit.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -52,8 +52,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/ArtistList.h'
--- include/musicbrainz4/ArtistList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/ArtistList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: ArtistList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/Attribute.h'
--- include/musicbrainz4/Attribute.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Attribute.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Attribute.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -52,8 +52,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CAttributePrivate * const m_d;

=== modified file 'include/musicbrainz4/AttributeList.h'
--- include/musicbrainz4/AttributeList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/AttributeList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: AttributeList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/CDStub.h'
--- include/musicbrainz4/CDStub.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/CDStub.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: CDStub.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -58,8 +58,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/CDStubList.h'
--- include/musicbrainz4/CDStubList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/CDStubList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: CDStubList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/Collection.h'
--- include/musicbrainz4/Collection.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Collection.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Collection.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -53,8 +53,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/CollectionList.h'
--- include/musicbrainz4/CollectionList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/CollectionList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: CollectionList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/Disc.h'
--- include/musicbrainz4/Disc.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Disc.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Disc.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -57,8 +57,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/DiscList.h'
--- include/musicbrainz4/DiscList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/DiscList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: DiscList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/Entity.h'
--- include/musicbrainz4/Entity.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Entity.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Entity.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -36,6 +36,8 @@
 {
 	class CEntityPrivate;
 
+	class CRelationListList;
+
 	class CEntity
 	{
 	public:
@@ -46,7 +48,7 @@
 
 		virtual CEntity *Clone()=0;
 
-		bool Parse(const XMLNode& Node);
+		void Parse(const XMLNode& Node);
 
 		std::map<std::string,std::string> ExtAttributes() const;
 		std::map<std::string,std::string> ExtElements() const;
@@ -55,19 +57,17 @@
 		static std::string GetElementName();
 
 	protected:
+		void ProcessRelationList(const XMLNode& Node, CRelationListList* & RetVal);
+
 		template<typename T>
-		bool ProcessItem(const XMLNode& Node, T* & RetVal)
+		void ProcessItem(const XMLNode& Node, T* & RetVal)
 		{
 			RetVal=new T(Node);
-
-			return true;
 		}
 
 		template<class T>
-		bool ProcessItem(const XMLNode& Node, T& RetVal)
+		void ProcessItem(const XMLNode& Node, T& RetVal)
 		{
-			bool Ret=true;
-
 			std::stringstream os;
 			if (Node.getText())
 				os << (const char *)Node.getText();
@@ -75,51 +75,39 @@
 			os >> RetVal;
 			if (os.fail())
 			{
-				Ret=false;
 				std::cerr << "Error parsing value '";
 				if (Node.getText())
 					std::cerr << Node.getText();
 				std::cerr << "'" << std::endl;
 			}
-
-			return Ret;
 		}
 
 		template<typename T>
-		bool ProcessItem(const std::string& Text, T& RetVal)
+		void ProcessItem(const std::string& Text, T& RetVal)
 		{
-			bool Ret=true;
-
 			std::stringstream os;
 			os << Text;
 
 			os >> RetVal;
 			if (os.fail())
 			{
-				Ret=false;
 				std::cerr << "Error parsing value '" << Text << "'" << std::endl;
 			}
-
-			return Ret;
 		}
 
-		bool ProcessItem(const XMLNode& Node, std::string& RetVal)
+		void ProcessItem(const XMLNode& Node, std::string& RetVal)
 		{
 			if (Node.getText())
 				RetVal=Node.getText();
-
-			return true;
-
 		}
 
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value)=0;
-		virtual bool ParseElement(const XMLNode& Node)=0;
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value)=0;
+		virtual void ParseElement(const XMLNode& Node)=0;
 
 	private:
 		CEntityPrivate *m_d;
 
 		void Cleanup();
-
 	};
 }
 

=== modified file 'include/musicbrainz4/FreeDBDisc.h'
--- include/musicbrainz4/FreeDBDisc.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/FreeDBDisc.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: FreeDBDisc.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -58,8 +58,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/FreeDBDiscList.h'
--- include/musicbrainz4/FreeDBDiscList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/FreeDBDiscList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: FreeDBDiscList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/HTTPFetch.h'
--- include/musicbrainz4/HTTPFetch.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/HTTPFetch.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: HTTPFetch.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== added file 'include/musicbrainz4/IPI.h'
--- include/musicbrainz4/IPI.h	1970-01-01 00:00:00 +0000
+++ include/musicbrainz4/IPI.h	2012-06-25 05:56:21 +0000
@@ -0,0 +1,63 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2012 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#ifndef _MUSICBRAINZ4_IPI_H
+#define _MUSICBRAINZ4_IPI_H
+
+#include <string>
+#include <iostream>
+
+#include "musicbrainz4/Entity.h"
+
+#include "musicbrainz4/xmlParser.h"
+
+namespace MusicBrainz4
+{
+	class CIPIPrivate;
+
+	class CIPI: public CEntity
+	{
+	public:
+		CIPI(const XMLNode& Node=XMLNode::emptyNode());
+		CIPI(const CIPI& Other);
+		CIPI& operator =(const CIPI& Other);
+		virtual ~CIPI();
+
+		virtual CIPI *Clone();
+
+		std::string IPI() const;
+
+		virtual std::ostream& Serialise(std::ostream& os) const;
+		static std::string GetElementName();
+
+	protected:
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
+
+	private:
+		CIPIPrivate * const m_d;
+	};
+}
+
+#endif

=== added file 'include/musicbrainz4/IPIList.h'
--- include/musicbrainz4/IPIList.h	1970-01-01 00:00:00 +0000
+++ include/musicbrainz4/IPIList.h	2012-06-25 05:56:21 +0000
@@ -0,0 +1,37 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2011 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#ifndef _MUSICBRAINZ4_IPI_LIST_H
+#define _MUSICBRAINZ4_IPI_LIST_H
+
+#include "musicbrainz4/ListImpl.h"
+
+namespace MusicBrainz4
+{
+	class CIPI;
+
+	typedef CListImpl<CIPI> CIPIList;
+}
+
+#endif

=== modified file 'include/musicbrainz4/ISRC.h'
--- include/musicbrainz4/ISRC.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/ISRC.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: ISRC.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -51,8 +51,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/ISRCList.h'
--- include/musicbrainz4/ISRCList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/ISRCList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: ISRCList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== added file 'include/musicbrainz4/ISWC.h'
--- include/musicbrainz4/ISWC.h	1970-01-01 00:00:00 +0000
+++ include/musicbrainz4/ISWC.h	2012-06-25 05:56:21 +0000
@@ -0,0 +1,65 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2012 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#ifndef _MUSICBRAINZ4_ISWC_H
+#define _MUSICBRAINZ4_ISWC_H
+
+#include <string>
+#include <iostream>
+
+#include "musicbrainz4/Entity.h"
+
+#include "musicbrainz4/xmlParser.h"
+
+namespace MusicBrainz4
+{
+	class CISWCPrivate;
+
+	class CISWC: public CEntity
+	{
+	public:
+		CISWC(const XMLNode& Node=XMLNode::emptyNode());
+		CISWC(const CISWC& Other);
+		CISWC& operator =(const CISWC& Other);
+		virtual ~CISWC();
+
+		virtual CISWC *Clone();
+
+		std::string ISWC() const;
+
+		virtual std::ostream& Serialise(std::ostream& os) const;
+		static std::string GetElementName();
+
+	protected:
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
+
+	private:
+		void Cleanup();
+
+		CISWCPrivate * const m_d;
+	};
+}
+
+#endif

=== added file 'include/musicbrainz4/ISWCList.h'
--- include/musicbrainz4/ISWCList.h	1970-01-01 00:00:00 +0000
+++ include/musicbrainz4/ISWCList.h	2012-06-25 05:56:21 +0000
@@ -0,0 +1,62 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2012 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#ifndef _MUSICBRAINZ4_ISWC_LIST_H
+#define _MUSICBRAINZ4_ISWC_LIST_H
+
+#include <string>
+#include <iostream>
+
+#include "musicbrainz4/ListImpl.h"
+
+#include "musicbrainz4/xmlParser.h"
+
+namespace MusicBrainz4
+{
+	class CISWC;
+	class CISWCListPrivate;
+
+	class CISWCList: public CListImpl<CISWC>
+	{
+	public:
+		CISWCList(const XMLNode& Node=XMLNode::emptyNode());
+		CISWCList(const CISWCList& Other);
+		CISWCList& operator =(const CISWCList& Other);
+		virtual ~CISWCList();
+
+		virtual CISWCList *Clone();
+
+		virtual std::ostream& Serialise(std::ostream& os) const;
+		static std::string GetElementName();
+
+	protected:
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
+
+	private:
+		CISWCListPrivate * const m_d;
+	};
+}
+
+#endif

=== modified file 'include/musicbrainz4/Label.h'
--- include/musicbrainz4/Label.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Label.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Label.h 13265 2011-08-25 12:53:44Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -29,6 +29,7 @@
 #include <iostream>
 
 #include "musicbrainz4/Entity.h"
+#include "musicbrainz4/IPIList.h"
 #include "musicbrainz4/ReleaseList.h"
 #include "musicbrainz4/AliasList.h"
 #include "musicbrainz4/RelationList.h"
@@ -60,13 +61,39 @@
 		std::string Name() const;
 		std::string SortName() const;
 		int LabelCode() const;
-		std::string IPI() const;
+
+		/**
+		 * @deprecated Returns one of the IPIs for this label
+		 *
+		 * Returns one of the IPIs for this label. To return all
+		 * IPIs, see MusicBrainz4::CLabel::IPIList
+		 *
+		 * <b>This method is deprecated, please use MusicBrainz4::CLabel::IPIList</b>
+		 *
+		 * @return One of the IPIs for this label
+		 */
+
+		LIBMB4_DEPRECATED(MusicBrainz4::CLabel::IPIList) std::string IPI() const;
+		CIPIList *IPIList() const;
 		std::string Disambiguation() const;
 		std::string Country() const;
 		CLifespan *Lifespan() const;
 		CAliasList *AliasList() const;
 		CReleaseList *ReleaseList() const;
-		CRelationList *RelationList() const;
+
+		/**
+		 * @deprecated Returns the <b>last</b> relation list for this label
+		 *
+		 * Returns the <b>last</b> relation list for this label. To return all
+		 * relation lists, see MusicBrainz4::CLabel::RelationListList
+		 *
+		 * <b>This method is deprecated, please use MusicBrainz4::CLabel::RelationListList</b>
+		 *
+		 * @return The <b>last</b> relation list for this label
+		 */
+
+		LIBMB4_DEPRECATED(MusicBrainz4::CLabel::RelationListList) CRelationList *RelationList() const;
+		CRelationListList *RelationListList() const;
 		CTagList *TagList() const;
 		CUserTagList *UserTagList() const;
 		CRating *Rating() const;
@@ -76,8 +103,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/LabelInfo.h'
--- include/musicbrainz4/LabelInfo.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/LabelInfo.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: LabelInfo.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -55,8 +55,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/LabelInfoList.h'
--- include/musicbrainz4/LabelInfoList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/LabelInfoList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: LabelInfoList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/LabelList.h'
--- include/musicbrainz4/LabelList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/LabelList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: LabelList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/Lifespan.h'
--- include/musicbrainz4/Lifespan.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Lifespan.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Lifespan.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -48,13 +48,14 @@
 
 		std::string Begin() const;
 		std::string End() const;
+		std::string Ended() const;
 
 		virtual std::ostream& Serialise(std::ostream& os) const;
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CLifespanPrivate * const m_d;

=== modified file 'include/musicbrainz4/List.h'
--- include/musicbrainz4/List.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/List.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: List.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -51,8 +51,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 		void AddItem(CEntity *Item);
 		CEntity *Item(int Item) const;

=== modified file 'include/musicbrainz4/ListImpl.h'
--- include/musicbrainz4/ListImpl.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/ListImpl.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: ListImpl.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -101,26 +101,20 @@
 		}
 
 	protected:
-		bool ParseElement(const XMLNode& Node)
+		void ParseElement(const XMLNode& Node)
 		{
-			bool RetVal=true;
-
 			std::string NodeName=Node.getName();
 
 			if (T::GetElementName()==NodeName)
 			{
 				T *Item=0;
 
-				RetVal=ProcessItem(Node,Item);
-				if (RetVal)
-					AddItem(Item);
+				ProcessItem(Node,Item);
+				AddItem(Item);
 			}
 			else
-				RetVal=CList::ParseElement(Node);
-
-			return RetVal;
+				CList::ParseElement(Node);
 		}
-
 	};
 }
 

=== modified file 'include/musicbrainz4/Medium.h'
--- include/musicbrainz4/Medium.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Medium.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Medium.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -60,8 +60,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/MediumList.h'
--- include/musicbrainz4/MediumList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/MediumList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: MediumList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -53,8 +53,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CMediumListPrivate * const m_d;

=== modified file 'include/musicbrainz4/Message.h'
--- include/musicbrainz4/Message.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Message.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Message.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -52,8 +52,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CMessagePrivate * const m_d;

=== modified file 'include/musicbrainz4/Metadata.h'
--- include/musicbrainz4/Metadata.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Metadata.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Metadata.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -112,8 +112,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/NameCredit.h'
--- include/musicbrainz4/NameCredit.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/NameCredit.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: NameCredit.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -56,8 +56,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/NameCreditList.h'
--- include/musicbrainz4/NameCreditList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/NameCreditList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: NameCreditList.h 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/NonMBTrack.h'
--- include/musicbrainz4/NonMBTrack.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/NonMBTrack.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: NonMBTrack.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -54,8 +54,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CNonMBTrackPrivate * const m_d;

=== modified file 'include/musicbrainz4/NonMBTrackList.h'
--- include/musicbrainz4/NonMBTrackList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/NonMBTrackList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: NonMBTrackList.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/PUID.h'
--- include/musicbrainz4/PUID.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/PUID.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: PUID.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -53,8 +53,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/PUIDList.h'
--- include/musicbrainz4/PUIDList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/PUIDList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: PUIDList.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/Query.h'
--- include/musicbrainz4/Query.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Query.h	2012-06-25 05:56:21 +0000
@@ -18,13 +18,17 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Query.h 13266 2011-08-25 12:56:47Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
 #ifndef _MUSICBRAINZ4_QUERY_H
 #define _MUSICBRAINZ4_QUERY_H
 
+#include "defines.h"
+
+#include "Entity.h"
+
 #include "musicbrainz4/ReleaseList.h"
 #include "musicbrainz4/Metadata.h"
 
@@ -47,6 +51,23 @@
  * Please report any issues with this library at
  * <a target="_blank" href="http://tickets.musicbrainz.org/">http://tickets.musicbrainz.org/</a>.
  *
+ * @par Compiling and Linking
+ *
+ * This package provides a pkg-config script that returns the necessary compiler
+ * and linker flags, as well as the version number.  To build a small sample
+ * program one would use:
+ *
+ * @par
+ *     <tt>g++ -o test_app test_app.cpp `pkg-config libmusicbrainz4 --cflags --libs`</tt>
+ *
+ * If you don't want/can't use pkg-config and you are using the C API, make sure
+ * you link in the C++ standard library:
+ *
+ * @par
+ *     <tt>gcc -o test_app test_app.c -lmusicbrainz4 -lm -lstdc++</tt>
+ *
+ * @par Example:
+ *
  * A brief example showing how to lookup a list of releases matching a disc id
  *
 @code

=== modified file 'include/musicbrainz4/Rating.h'
--- include/musicbrainz4/Rating.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Rating.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Rating.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -52,8 +52,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CRatingPrivate * const m_d;

=== modified file 'include/musicbrainz4/Recording.h'
--- include/musicbrainz4/Recording.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Recording.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Recording.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -69,7 +69,20 @@
 		CReleaseList *ReleaseList() const;
 		CPUIDList *PUIDList() const;
 		CISRCList *ISRCList() const;
-		CRelationList *RelationList() const;
+
+		/**
+		 * @deprecated Returns the <b>last</b> relation list for this recording
+		 *
+		 * Returns the <b>last</b> relation list for this recording. To return all
+		 * relation lists, see MusicBrainz4::CRecording::RelationListList
+		 *
+		 * <b>This method is deprecated, please use MusicBrainz4::CRecording::RelationListList</b>
+		 *
+		 * @return The <b>last</b> relation list for this recording
+		 */
+
+		LIBMB4_DEPRECATED(MusicBrainz4::CRecording::RelationListList) CRelationList *RelationList() const;
+		CRelationListList *RelationListList() const;
 		CTagList *TagList() const;
 		CUserTagList *UserTagList() const;
 		CRating *Rating() const;
@@ -79,8 +92,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/RecordingList.h'
--- include/musicbrainz4/RecordingList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/RecordingList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: RecordingList.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/Relation.h'
--- include/musicbrainz4/Relation.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Relation.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Relation.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -71,8 +71,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/RelationList.h'
--- include/musicbrainz4/RelationList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/RelationList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: RelationList.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -53,8 +53,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CRelationListPrivate * const m_d;

=== added file 'include/musicbrainz4/RelationListList.h'
--- include/musicbrainz4/RelationListList.h	1970-01-01 00:00:00 +0000
+++ include/musicbrainz4/RelationListList.h	2012-06-25 05:56:21 +0000
@@ -0,0 +1,63 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2011 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#ifndef _MUSICBRAINZ4_RELATIONLIST_GROUP_H
+#define _MUSICBRAINZ4_RELATIONLIST_GROUP_H
+
+#include <iostream>
+
+#include "musicbrainz4/xmlParser.h"
+
+namespace MusicBrainz4
+{
+	class CRelationListListPrivate;
+
+	class CRelationList;
+
+	class CRelationListList
+	{
+	public:
+		CRelationListList();
+		CRelationListList(const CRelationListList& Other);
+		CRelationListList& operator =(const CRelationListList& Other);
+		virtual ~CRelationListList();
+
+		void Add(CRelationList *RelationList);
+		int NumItems() const;
+		CRelationList *Item(int Item) const;
+		int Offset() const { return 0; }
+		int Count() const { return NumItems(); }
+
+		std::ostream& Serialise(std::ostream& os) const;
+
+	private:
+		void Cleanup();
+
+		CRelationListListPrivate * const m_d;
+	};
+}
+
+std::ostream& operator << (std::ostream& os, const MusicBrainz4::CRelationListList& RelationListList);
+
+#endif

=== modified file 'include/musicbrainz4/Release.h'
--- include/musicbrainz4/Release.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Release.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Release.h 13385 2012-01-15 15:19:56Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -70,7 +70,20 @@
 		std::string ASIN() const;
 		CLabelInfoList *LabelInfoList() const;
 		CMediumList *MediumList() const;
-		CRelationList *RelationList() const;
+
+		/**
+		 * @deprecated Returns the <b>last</b> relation list for this release
+		 *
+		 * Returns the <b>last</b> relation list for this release. To return all
+		 * relation lists, see MusicBrainz4::CRelease::RelationListList
+		 *
+		 * <b>This method is deprecated, please use MusicBrainz4::CRelease::RelationListList</b>
+		 *
+		 * @return The <b>last</b> relation list for this release
+		 */
+
+		LIBMB4_DEPRECATED(MusicBrainz4::CRelease::RelationListList) CRelationList *RelationList() const;
+		CRelationListList *RelationListList() const;
 		CCollectionList *CollectionList() const;
 
 		CMediumList MediaMatchingDiscID(const std::string& DiscID) const;
@@ -79,8 +92,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/ReleaseGroup.h'
--- include/musicbrainz4/ReleaseGroup.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/ReleaseGroup.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: ReleaseGroup.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -33,6 +33,7 @@
 #include "musicbrainz4/RelationList.h"
 #include "musicbrainz4/TagList.h"
 #include "musicbrainz4/UserTagList.h"
+#include "musicbrainz4/SecondaryTypeList.h"
 
 #include "musicbrainz4/xmlParser.h"
 
@@ -43,6 +44,7 @@
 	class CArtistCredit;
 	class CRating;
 	class CUserRating;
+	class CSecondaryType;
 
 	class CReleaseGroup: public CEntity
 	{
@@ -55,24 +57,51 @@
 		virtual CReleaseGroup *Clone();
 
 		std::string ID() const;
-		std::string Type() const;
+
+		/**
+		 * @deprecated Returns the type for this release group
+		 *
+		 * Returns the type for this release group.
+		 *
+		 * <b>This method is deprecated, please use MusicBrainz4::CReleaseGroup::PrimaryType
+		 * and MusicBrainz4::CReleaseGroup::SecondaryTypeList</b>
+		 *
+		 * @return The type for this release group
+		 */
+
+		LIBMB4_DEPRECATED(MusicBrainz4::CReleaseGroup::PrimaryType) std::string Type() const;
+		std::string PrimaryType() const;
 		std::string Title() const;
 		std::string Disambiguation() const;
 		std::string FirstReleaseDate() const;
 		CArtistCredit *ArtistCredit() const;
 		CReleaseList *ReleaseList() const;
-		CRelationList *RelationList() const;
+
+		/**
+		 * @deprecated Returns the <b>last</b> relation list for this release group
+		 *
+		 * Returns the <b>last</b> relation list for this release group. To return all
+		 * relation lists, see MusicBrainz4::CReleaseGroup::RelationListList
+		 *
+		 * <b>This method is deprecated, please use MusicBrainz4::CReleaseGroup::RelationListList</b>
+		 *
+		 * @return The <b>last</b> relation list for this release group
+		 */
+
+		LIBMB4_DEPRECATED(MusicBrainz4::CReleaseGroup::RelationListList) CRelationList *RelationList() const;
+		CRelationListList *RelationListList() const;
 		CTagList *TagList() const;
 		CUserTagList *UserTagList() const;
 		CRating *Rating() const;
 		CUserRating *UserRating() const;
+		CSecondaryTypeList *SecondaryTypeList() const;
 
 		virtual std::ostream& Serialise(std::ostream& os) const;
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/ReleaseGroupList.h'
--- include/musicbrainz4/ReleaseGroupList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/ReleaseGroupList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: ReleaseGroupList.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/ReleaseList.h'
--- include/musicbrainz4/ReleaseList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/ReleaseList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: ReleaseList.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== added file 'include/musicbrainz4/SecondaryType.h'
--- include/musicbrainz4/SecondaryType.h	1970-01-01 00:00:00 +0000
+++ include/musicbrainz4/SecondaryType.h	2012-06-25 05:56:21 +0000
@@ -0,0 +1,65 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2012 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#ifndef _MUSICBRAINZ4_SECONDARY_TYPE_H
+#define _MUSICBRAINZ4_SECONDARY_TYPE_H
+
+#include <string>
+#include <iostream>
+
+#include "musicbrainz4/Entity.h"
+
+#include "musicbrainz4/xmlParser.h"
+
+namespace MusicBrainz4
+{
+	class CSecondaryTypePrivate;
+
+	class CSecondaryType: public CEntity
+	{
+	public:
+		CSecondaryType(const XMLNode& Node=XMLNode::emptyNode());
+		CSecondaryType(const CSecondaryType& Other);
+		CSecondaryType& operator =(const CSecondaryType& Other);
+		virtual ~CSecondaryType();
+
+		virtual CSecondaryType *Clone();
+
+		std::string SecondaryType() const;
+
+		virtual std::ostream& Serialise(std::ostream& os) const;
+		static std::string GetElementName();
+
+	protected:
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
+
+	private:
+		void Cleanup();
+
+		CSecondaryTypePrivate * const m_d;
+	};
+}
+
+#endif

=== added file 'include/musicbrainz4/SecondaryTypeList.h'
--- include/musicbrainz4/SecondaryTypeList.h	1970-01-01 00:00:00 +0000
+++ include/musicbrainz4/SecondaryTypeList.h	2012-06-25 05:56:21 +0000
@@ -0,0 +1,62 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2012 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#ifndef _MUSICBRAINZ4_SECONDARY_TYPE_LIST_H
+#define _MUSICBRAINZ4_SECONDARY_TYPE_LIST_H
+
+#include <string>
+#include <iostream>
+
+#include "musicbrainz4/ListImpl.h"
+
+#include "musicbrainz4/xmlParser.h"
+
+namespace MusicBrainz4
+{
+	class CSecondaryType;
+	class CSecondaryTypeListPrivate;
+
+	class CSecondaryTypeList: public CListImpl<CSecondaryType>
+	{
+	public:
+		CSecondaryTypeList(const XMLNode& Node=XMLNode::emptyNode());
+		CSecondaryTypeList(const CSecondaryTypeList& Other);
+		CSecondaryTypeList& operator =(const CSecondaryTypeList& Other);
+		virtual ~CSecondaryTypeList();
+
+		virtual CSecondaryTypeList *Clone();
+
+		virtual std::ostream& Serialise(std::ostream& os) const;
+		static std::string GetElementName();
+
+	protected:
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
+
+	private:
+		CSecondaryTypeListPrivate * const m_d;
+	};
+}
+
+#endif

=== modified file 'include/musicbrainz4/Tag.h'
--- include/musicbrainz4/Tag.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Tag.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Tag.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -53,8 +53,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CTagPrivate * const m_d;

=== modified file 'include/musicbrainz4/TagList.h'
--- include/musicbrainz4/TagList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/TagList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: TagList.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/TextRepresentation.h'
--- include/musicbrainz4/TextRepresentation.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/TextRepresentation.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: TextRepresentation.h 13263 2011-08-25 12:38:04Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -53,8 +53,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CTextRepresentationPrivate * const m_d;

=== modified file 'include/musicbrainz4/Track.h'
--- include/musicbrainz4/Track.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Track.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Track.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -54,13 +54,14 @@
 		CRecording *Recording() const;
 		int Length() const;
 		CArtistCredit *ArtistCredit() const;
+		std::string Number() const;
 
 		virtual std::ostream& Serialise(std::ostream& os) const;
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/TrackList.h'
--- include/musicbrainz4/TrackList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/TrackList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: TrackList.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/UserRating.h'
--- include/musicbrainz4/UserRating.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/UserRating.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: UserRating.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -51,8 +51,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CUserRatingPrivate * const m_d;

=== modified file 'include/musicbrainz4/UserTag.h'
--- include/musicbrainz4/UserTag.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/UserTag.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: UserTag.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -52,8 +52,8 @@
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		CUserTagPrivate * const m_d;

=== modified file 'include/musicbrainz4/UserTagList.h'
--- include/musicbrainz4/UserTagList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/UserTagList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: UserTagList.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'include/musicbrainz4/Work.h'
--- include/musicbrainz4/Work.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/Work.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Work.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -32,6 +32,7 @@
 #include "musicbrainz4/RelationList.h"
 #include "musicbrainz4/TagList.h"
 #include "musicbrainz4/UserTagList.h"
+#include "musicbrainz4/ISWCList.h"
 
 #include "musicbrainz4/xmlParser.h"
 
@@ -58,21 +59,49 @@
 		std::string Type() const;
 		std::string Title() const;
 		CArtistCredit *ArtistCredit() const;
-		std::string ISWC() const;
+
+		/**
+		 * @deprecated Returns the <b>first</b> ISWC for this work
+		 *
+		 * Returns the <b>first</b> ISWC for this work. To return all
+		 * ISWCs, see MusicBrainz4::CWork::ISWCList
+		 *
+		 * <b>This method is deprecated, please use MusicBrainz4::CWork::ISWCList</b>
+		 *
+		 * @return The <b>first</b> ISWC for this work
+		 */
+
+		LIBMB4_DEPRECATED(MusicBrainz4::CWork::ISWCList) std::string ISWC() const;
+
+		CISWCList *ISWCList() const;
 		std::string Disambiguation() const;
 		CAliasList *AliasList() const;
-		CRelationList *RelationList() const;
+
+		/**
+		 * @deprecated Returns the <b>last</b> relation list for this work
+		 *
+		 * Returns the <b>last</b> relation list for this work. To return all
+		 * relation lists, see MusicBrainz4::CWork::RelationListList
+		 *
+		 * <b>This method is deprecated, please use MusicBrainz4::CWork::RelationListList</b>
+		 *
+		 * @return The <b>last</b> relation list for this work
+		 */
+
+		LIBMB4_DEPRECATED(MusicBrainz4::CWork::RelationListList) CRelationList *RelationList() const;
+		CRelationListList *RelationListList() const;
 		CTagList *TagList() const;
 		CUserTagList *UserTagList() const;
 		CRating *Rating() const;
 		CUserRating *UserRating() const;
+		std::string Language() const;
 
 		virtual std::ostream& Serialise(std::ostream& os) const;
 		static std::string GetElementName();
 
 	protected:
-		virtual bool ParseAttribute(const std::string& Name, const std::string& Value);
-		virtual bool ParseElement(const XMLNode& Node);
+		virtual void ParseAttribute(const std::string& Name, const std::string& Value);
+		virtual void ParseElement(const XMLNode& Node);
 
 	private:
 		void Cleanup();

=== modified file 'include/musicbrainz4/WorkList.h'
--- include/musicbrainz4/WorkList.h	2012-02-01 17:18:10 +0000
+++ include/musicbrainz4/WorkList.h	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: WorkList.h 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== added file 'include/musicbrainz4/defines.h'
--- include/musicbrainz4/defines.h	1970-01-01 00:00:00 +0000
+++ include/musicbrainz4/defines.h	2012-06-25 05:56:21 +0000
@@ -0,0 +1,42 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2012 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#ifndef _DEFINES_H
+#define _DEFINES_H
+
+#if defined(__GNUC__) && __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+
+#define LIBMB4_DEPRECATED(f) __attribute__((deprecated("Use '" #f "' instead")))
+
+#elif defined(__GNUC__) && __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
+
+#define LIBMB4_DEPRECATED(f) __attribute__ ((deprecated))
+
+#else
+
+#define LIBMB4_DEPRECATED(f)
+
+#endif
+
+#endif

=== removed directory 'schema'
=== removed file 'schema/musicbrainz_mmd-1.0.rng'
--- schema/musicbrainz_mmd-1.0.rng	2012-02-01 17:18:10 +0000
+++ schema/musicbrainz_mmd-1.0.rng	1970-01-01 00:00:00 +0000
@@ -1,585 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- ==================================================================
-     $Id: musicbrainz_mmd-1.0.rng 7511 2006-05-10 20:06:24Z matt $
-
-     Relax NG Schema for MusicBrainz XML Metadata Version 1.0
-
-
-     This XML schema has been designed to represent music metadata.
-     Documentation and the latest revision can be found at
-
-        http://musicbrainz.org/development/mmd/
-
-
-     Copyright (c) 2006 Robert Kaye, Matthias Friedrich
-   
-     The schema is released under the Creative Commons 
-     Attribution-ShareAlike 2.5 license.
-
-     http://creativecommons.org/licenses/by-sa/2.5/
-
-     ================================================================== -->
-
-
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
-         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
-         ns="http://musicbrainz.org/ns/mmd-1.0#">
-
-
-    <start>
-        <ref name="def_metadata-element"/>
-    </start>
-
-
-    <define name="def_metadata-element">
-        <element name="metadata">
-            <optional>
-                <attribute name="generator">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="created">
-                    <data type="dateTime"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-            <optional>
-                <ref name="def_release-element"/>
-            </optional>
-            <optional>
-                <ref name="def_track-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-                
-            <ref name="def_metadata-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_artist-element">
-        <element name="artist">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_artist-attribute_extension"/>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <ref name="def_artist-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_release-element">
-        <element name="release">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <ref name="def_release-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="text-representation">
-                    <optional>
-                        <attribute name="language">
-                            <ref name="def_iso-639"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="script">
-                            <ref name="def_iso-15924"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-            <optional>
-                <element name="asin">
-                    <data type="string">
-                        <param name="pattern">[A-Z0-9]{10}</param>
-                    </data>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-event-list"/>
-            </optional>
-            <optional>
-                <ref name="def_disc-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <ref name="def_release-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_track-element">
-        <element name="track">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_track-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="duration">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <ref name="def_track-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_relation-element">
-        <element name="relation">
-            <attribute name="type">
-                <data type="anyURI"/>
-            </attribute>
-            <attribute name="target">
-                <data type="anyURI"/>
-            </attribute>
-            <optional>
-                <attribute name="direction">
-                    <ref name="def_direction"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="attributes">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="begin">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="end">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <choice>
-                    <ref name="def_artist-element"/>
-                    <ref name="def_release-element"/>
-                    <ref name="def_track-element"/>
-
-                    <ref name="def_relation-element_extension"/>
-                </choice>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_alias">
-        <element name="alias">
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="script">
-                    <ref name="def_iso-15924"/>
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <!--
-        This part defines the extensions elements and attributes.
-    -->
-
-    <define name="def_metadata-element_extension">
-        <optional>
-            <ref name="def_extension_element"/>
-        </optional>
-    </define>
-
-
-    <define name="def_artist-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_track-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_relation-element_extension">
-        <ref name="def_extension_element"/>
-    </define>
-
-
-    <define name="def_artist-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_track-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_extension_element">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                        <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_extension_attribute">
-	<attribute>
-	<anyName>
-            <except>
-                <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                <nsName ns=""/>
-            </except>
-	</anyName>
-	</attribute>
-    </define>
-
-
-    <define name="def_anything">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                    <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_artist-list">
-        <element name="artist-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_artist-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-list">
-        <element name="release-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_alias-list">
-        <element name="alias-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_alias"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track-list">
-        <element name="track-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_track-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-event-list">
-        <element name="release-event-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="event">
-                    <attribute name="date">
-                        <ref name="def_incomplete-date"/>
-                    </attribute>
-                    <optional>
-                        <attribute name="country">
-                            <ref name="def_iso-3166"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_disc-list">
-        <element name="disc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="disc">
-                    <attribute name="id">
-                        <data type="string">
-                            <param name="pattern">[a-zA-Z0-9._]{27}-</param>
-                        </data>
-                    </attribute>
-                    <optional>
-                        <attribute name="sectors">
-                            <data type="nonNegativeInteger"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_puid-list">
-        <element name="puid-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="puid">
-                    <attribute name="id">
-                        <ref name="def_uuid"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation-list">
-        <element name="relation-list">
-            <attribute name="target-type">
-                <data type="anyURI"/>
-            </attribute>
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_relation-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_list-attributes">
-        <optional>
-            <attribute name="count">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-        <optional>
-            <attribute name="offset">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-    </define>
-
-
-    <!-- A space separated list of URIs, relative ones are possible, too. -->
-    <define name="def_URI-list">
-        <list>
-            <oneOrMore>
-                <data type="anyURI"/>
-            </oneOrMore>
-        </list>
-    </define>
-
-
-    <!-- A date with varying precision in format 'YYYY-MM-DD'. -->
-    <define name="def_incomplete-date">
-        <data type="string">
-            <param name="pattern">[0-9]{4}(-[0-9]{2})?(-[0-9]{2})?</param>
-        </data>
-    </define>
-
-
-    <!-- A two-letter country code like 'DE', 'UK', 'FR' etc. -->
-    <define name="def_iso-3166">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}</param>
-        </data>
-    </define>
-
-
-    <!-- An ISO-639-2/T language code like 'DEU', 'ENG', 'JPN' etc. -->
-    <define name="def_iso-639">
-        <data type="string">
-            <param name="pattern">[A-Z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A four-letter script code like 'Latn', 'Cyrl', etc. -->
-    <define name="def_iso-15924">
-        <data type="string">
-            <param name="pattern">[A-Z][a-z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A 128 Bit UUID in its standard ASCII representation. -->
-    <define name="def_uuid">
-        <data type="string">
-            <param name="pattern">[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}</param>
-        </data>
-    </define>
-
-
-    <!-- Reading direction of a relation. Defaults to "both". -->
-    <define name="def_direction">
-        <choice>
-            <value>both</value>
-            <value>forward</value>
-            <value>backward</value>
-        </choice>
-    </define>
-
-</grammar>

=== removed file 'schema/musicbrainz_mmd-1.0rc1.rng'
--- schema/musicbrainz_mmd-1.0rc1.rng	2012-02-01 17:18:10 +0000
+++ schema/musicbrainz_mmd-1.0rc1.rng	1970-01-01 00:00:00 +0000
@@ -1,478 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- ==================================================================
-     $Id: musicbrainz_mmd-1.0rc1.rng 36 2006-01-30 10:23:03Z matt $
-
-     Relax NG Schema for MusicBrainz XML Metadata Version 1.0rc1
-
-
-     This XML schema has been designed to represent music metadata.
-     Documentation and the latest revision can be found at
-
-        http://musicbrainz.org/development/mmd/
-
-
-     Copyright (c) 2006 Robert Kaye, Matthias Friedrich
-   
-     The schema is released under the Creative Commons 
-     Attribution-ShareAlike 2.5 license.
-
-     http://creativecommons.org/licenses/by-sa/2.5/
-
-     ================================================================== -->
-
-
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
-         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
-         ns="http://musicbrainz.org/ns/mmd-1.0#">
-
-
-    <start>
-        <ref name="def_metadata"/>
-    </start>
-
-
-    <define name="def_metadata">
-        <element name="metadata">
-            <optional>
-                <attribute name="generator">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="created">
-                    <data type="dateTime"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <ref name="def_artist"/>
-            </optional>
-            <optional>
-                <ref name="def_release"/>
-            </optional>
-            <optional>
-                <ref name="def_track"/>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-                
-            <optional>
-                <ref name="def_extension"/>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_artist">
-        <element name="artist">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <zeroOrMore>
-                <ref name="def_extension"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release">
-        <element name="release">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="text-representation">
-                    <optional>
-                        <attribute name="language">
-                            <ref name="def_iso-639"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="script">
-                            <ref name="def_iso-15924"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-            <optional>
-                <element name="asin">
-                    <data type="string">
-                        <param name="pattern">[A-Z0-9]{10}</param>
-                    </data>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-info-list"/>
-            </optional>
-            <optional>
-                <ref name="def_disc-list"/>
-            </optional>
-            <optional>
-                <ref name="def_trmid-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <zeroOrMore>
-                <ref name="def_extension"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track">
-        <element name="track">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="duration">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_trmid-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <zeroOrMore>
-                <ref name="def_extension"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation">
-        <element name="relation">
-            <attribute name="type">
-                <data type="anyURI"/>
-            </attribute>
-            <attribute name="target">
-                <data type="anyURI"/>
-            </attribute>
-            <optional>
-                <attribute name="direction">
-                    <ref name="def_direction"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="attributes">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="begin">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="end">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <choice>
-                    <ref name="def_artist"/>
-                    <ref name="def_release"/>
-                    <ref name="def_track"/>
-
-                    <ref name="def_extension"/>
-                </choice>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_extension">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                        <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_anything">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                    <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_artist-list">
-        <element name="artist-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_artist"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-list">
-        <element name="release-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track-list">
-        <element name="track-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_track"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-info-list">
-        <element name="release-info-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="info">
-                    <attribute name="date">
-                        <ref name="def_incomplete-date"/>
-                    </attribute>
-                    <attribute name="country">
-                        <ref name="def_iso-3166"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_disc-list">
-        <element name="disc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="disc">
-                    <attribute name="id">
-                        <data type="string">
-                            <param name="pattern">[a-zA-Z0-9._]{27}-</param>
-                        </data>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_trmid-list">
-        <element name="trmid-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="trmid">
-                    <attribute name="id">
-                        <ref name="def_uuid"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation-list">
-        <element name="relation-list">
-            <attribute name="target-type">
-                <data type="anyURI"/>
-            </attribute>
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_relation"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_list-attributes">
-        <optional>
-            <attribute name="count">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-        <optional>
-            <attribute name="offset">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-    </define>
-
-
-    <!-- A space separated list of URIs, relative ones are possible, too. -->
-    <define name="def_URI-list">
-        <list>
-            <oneOrMore>
-                <data type="anyURI"/>
-            </oneOrMore>
-        </list>
-    </define>
-
-
-    <!-- A date with varying precision in format 'YYYY-MM-DD'. -->
-    <define name="def_incomplete-date">
-        <data type="string">
-            <param name="pattern">[0-9]{4}(-[0-9]{2})?(-[0-9]{2})?</param>
-        </data>
-    </define>
-
-
-    <!-- A two-letter country code like 'DE', 'UK', 'FR' etc. -->
-    <define name="def_iso-3166">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}</param>
-        </data>
-    </define>
-
-
-    <!-- A three-letter language code like 'GER', 'GER', etc. -->
-    <define name="def_iso-639">
-        <data type="string">
-            <param name="pattern">[A-Z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A four-letter script code like 'Latn', 'Cyrl', etc. -->
-    <define name="def_iso-15924">
-        <data type="string">
-            <param name="pattern">[A-Z][a-z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A 128 Bit UUID in its standard ASCII representation. -->
-    <define name="def_uuid">
-        <data type="string">
-            <param name="pattern">[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}</param>
-        </data>
-    </define>
-
-
-    <!-- Reading direction of a relation. Defaults to "both". -->
-    <define name="def_direction">
-        <choice>
-            <value>both</value>
-            <value>forward</value>
-            <value>backward</value>
-        </choice>
-    </define>
-
-</grammar>

=== removed file 'schema/musicbrainz_mmd-1.0rc2.rng'
--- schema/musicbrainz_mmd-1.0rc2.rng	2012-02-01 17:18:10 +0000
+++ schema/musicbrainz_mmd-1.0rc2.rng	1970-01-01 00:00:00 +0000
@@ -1,518 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- ==================================================================
-     $Id: musicbrainz_mmd-1.0rc2.rng 71 2006-02-14 18:56:32Z matt $
-
-     Relax NG Schema for MusicBrainz XML Metadata Version 1.0rc2
-
-
-     This XML schema has been designed to represent music metadata.
-     Documentation and the latest revision can be found at
-
-        http://musicbrainz.org/development/mmd/
-
-
-     Copyright (c) 2006 Robert Kaye, Matthias Friedrich
-   
-     The schema is released under the Creative Commons 
-     Attribution-ShareAlike 2.5 license.
-
-     http://creativecommons.org/licenses/by-sa/2.5/
-
-     ================================================================== -->
-
-
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
-         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
-         ns="http://musicbrainz.org/ns/mmd-1.0#">
-
-
-    <start>
-        <ref name="def_metadata"/>
-    </start>
-
-
-    <define name="def_metadata">
-        <element name="metadata">
-            <optional>
-                <attribute name="generator">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="created">
-                    <data type="dateTime"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <ref name="def_artist"/>
-            </optional>
-            <optional>
-                <ref name="def_release"/>
-            </optional>
-            <optional>
-                <ref name="def_track"/>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-                
-            <optional>
-                <ref name="def_extension"/>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_artist">
-        <element name="artist">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <zeroOrMore>
-                <ref name="def_extension"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release">
-        <element name="release">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="text-representation">
-                    <optional>
-                        <attribute name="language">
-                            <ref name="def_iso-639"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="script">
-                            <ref name="def_iso-15924"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-            <optional>
-                <element name="asin">
-                    <data type="string">
-                        <param name="pattern">[A-Z0-9]{10}</param>
-                    </data>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-event-list"/>
-            </optional>
-            <optional>
-                <ref name="def_disc-list"/>
-            </optional>
-            <optional>
-                <ref name="def_trmid-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <zeroOrMore>
-                <ref name="def_extension"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track">
-        <element name="track">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="duration">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_trmid-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <zeroOrMore>
-                <ref name="def_extension"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation">
-        <element name="relation">
-            <attribute name="type">
-                <data type="anyURI"/>
-            </attribute>
-            <attribute name="target">
-                <data type="anyURI"/>
-            </attribute>
-            <optional>
-                <attribute name="direction">
-                    <ref name="def_direction"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="attributes">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="begin">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="end">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <choice>
-                    <ref name="def_artist"/>
-                    <ref name="def_release"/>
-                    <ref name="def_track"/>
-
-                    <ref name="def_extension"/>
-                </choice>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_alias">
-        <element name="alias">
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="script">
-                    <ref name="def_iso-15924"/>
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <define name="def_extension">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                        <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_anything">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                    <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_artist-list">
-        <element name="artist-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_artist"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-list">
-        <element name="release-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_alias-list">
-        <element name="alias-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_alias"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track-list">
-        <element name="track-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_track"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-event-list">
-        <element name="release-event-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="event">
-                    <attribute name="date">
-                        <ref name="def_incomplete-date"/>
-                    </attribute>
-                    <attribute name="country">
-                        <ref name="def_iso-3166"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_disc-list">
-        <element name="disc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="disc">
-                    <attribute name="id">
-                        <data type="string">
-                            <param name="pattern">[a-zA-Z0-9._]{27}-</param>
-                        </data>
-                    </attribute>
-                    <optional>
-                        <attribute name="sectors">
-                            <data type="nonNegativeInteger"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_trmid-list">
-        <element name="trmid-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="trmid">
-                    <attribute name="id">
-                        <ref name="def_uuid"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation-list">
-        <element name="relation-list">
-            <attribute name="target-type">
-                <data type="anyURI"/>
-            </attribute>
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_relation"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_list-attributes">
-        <optional>
-            <attribute name="count">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-        <optional>
-            <attribute name="offset">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-    </define>
-
-
-    <!-- A space separated list of URIs, relative ones are possible, too. -->
-    <define name="def_URI-list">
-        <list>
-            <oneOrMore>
-                <data type="anyURI"/>
-            </oneOrMore>
-        </list>
-    </define>
-
-
-    <!-- A date with varying precision in format 'YYYY-MM-DD'. -->
-    <define name="def_incomplete-date">
-        <data type="string">
-            <param name="pattern">[0-9]{4}(-[0-9]{2})?(-[0-9]{2})?</param>
-        </data>
-    </define>
-
-
-    <!-- A two-letter country code like 'DE', 'UK', 'FR' etc. -->
-    <define name="def_iso-3166">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}</param>
-        </data>
-    </define>
-
-
-    <!-- An ISO-639-2/T language code like 'DEU', 'ENG', 'JPN' etc. -->
-    <define name="def_iso-639">
-        <data type="string">
-            <param name="pattern">[A-Z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A four-letter script code like 'Latn', 'Cyrl', etc. -->
-    <define name="def_iso-15924">
-        <data type="string">
-            <param name="pattern">[A-Z][a-z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A 128 Bit UUID in its standard ASCII representation. -->
-    <define name="def_uuid">
-        <data type="string">
-            <param name="pattern">[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}</param>
-        </data>
-    </define>
-
-
-    <!-- Reading direction of a relation. Defaults to "both". -->
-    <define name="def_direction">
-        <choice>
-            <value>both</value>
-            <value>forward</value>
-            <value>backward</value>
-        </choice>
-    </define>
-
-</grammar>

=== removed file 'schema/musicbrainz_mmd-1.0rc3.rng'
--- schema/musicbrainz_mmd-1.0rc3.rng	2012-02-01 17:18:10 +0000
+++ schema/musicbrainz_mmd-1.0rc3.rng	1970-01-01 00:00:00 +0000
@@ -1,518 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- ==================================================================
-     $Id: musicbrainz_mmd-1.0rc3.rng 167 2006-03-14 18:59:45Z matt $
-
-     Relax NG Schema for MusicBrainz XML Metadata Version 1.0rc3
-
-
-     This XML schema has been designed to represent music metadata.
-     Documentation and the latest revision can be found at
-
-        http://musicbrainz.org/development/mmd/
-
-
-     Copyright (c) 2006 Robert Kaye, Matthias Friedrich
-   
-     The schema is released under the Creative Commons 
-     Attribution-ShareAlike 2.5 license.
-
-     http://creativecommons.org/licenses/by-sa/2.5/
-
-     ================================================================== -->
-
-
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
-         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
-         ns="http://musicbrainz.org/ns/mmd-1.0#">
-
-
-    <start>
-        <ref name="def_metadata"/>
-    </start>
-
-
-    <define name="def_metadata">
-        <element name="metadata">
-            <optional>
-                <attribute name="generator">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="created">
-                    <data type="dateTime"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <ref name="def_artist"/>
-            </optional>
-            <optional>
-                <ref name="def_release"/>
-            </optional>
-            <optional>
-                <ref name="def_track"/>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-                
-            <optional>
-                <ref name="def_extension"/>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_artist">
-        <element name="artist">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <zeroOrMore>
-                <ref name="def_extension"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release">
-        <element name="release">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="text-representation">
-                    <optional>
-                        <attribute name="language">
-                            <ref name="def_iso-639"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="script">
-                            <ref name="def_iso-15924"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-            <optional>
-                <element name="asin">
-                    <data type="string">
-                        <param name="pattern">[A-Z0-9]{10}</param>
-                    </data>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-event-list"/>
-            </optional>
-            <optional>
-                <ref name="def_disc-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <zeroOrMore>
-                <ref name="def_extension"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track">
-        <element name="track">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="duration">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <zeroOrMore>
-                <ref name="def_extension"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation">
-        <element name="relation">
-            <attribute name="type">
-                <data type="anyURI"/>
-            </attribute>
-            <attribute name="target">
-                <data type="anyURI"/>
-            </attribute>
-            <optional>
-                <attribute name="direction">
-                    <ref name="def_direction"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="attributes">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="begin">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="end">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <choice>
-                    <ref name="def_artist"/>
-                    <ref name="def_release"/>
-                    <ref name="def_track"/>
-
-                    <ref name="def_extension"/>
-                </choice>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_alias">
-        <element name="alias">
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="script">
-                    <ref name="def_iso-15924"/>
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <define name="def_extension">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                        <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_anything">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                    <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_artist-list">
-        <element name="artist-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_artist"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-list">
-        <element name="release-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_alias-list">
-        <element name="alias-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_alias"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track-list">
-        <element name="track-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_track"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-event-list">
-        <element name="release-event-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="event">
-                    <attribute name="date">
-                        <ref name="def_incomplete-date"/>
-                    </attribute>
-                    <attribute name="country">
-                        <ref name="def_iso-3166"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_disc-list">
-        <element name="disc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="disc">
-                    <attribute name="id">
-                        <data type="string">
-                            <param name="pattern">[a-zA-Z0-9._]{27}-</param>
-                        </data>
-                    </attribute>
-                    <optional>
-                        <attribute name="sectors">
-                            <data type="nonNegativeInteger"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_puid-list">
-        <element name="puid-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="puid">
-                    <attribute name="id">
-                        <ref name="def_uuid"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation-list">
-        <element name="relation-list">
-            <attribute name="target-type">
-                <data type="anyURI"/>
-            </attribute>
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_relation"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_list-attributes">
-        <optional>
-            <attribute name="count">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-        <optional>
-            <attribute name="offset">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-    </define>
-
-
-    <!-- A space separated list of URIs, relative ones are possible, too. -->
-    <define name="def_URI-list">
-        <list>
-            <oneOrMore>
-                <data type="anyURI"/>
-            </oneOrMore>
-        </list>
-    </define>
-
-
-    <!-- A date with varying precision in format 'YYYY-MM-DD'. -->
-    <define name="def_incomplete-date">
-        <data type="string">
-            <param name="pattern">[0-9]{4}(-[0-9]{2})?(-[0-9]{2})?</param>
-        </data>
-    </define>
-
-
-    <!-- A two-letter country code like 'DE', 'UK', 'FR' etc. -->
-    <define name="def_iso-3166">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}</param>
-        </data>
-    </define>
-
-
-    <!-- An ISO-639-2/T language code like 'DEU', 'ENG', 'JPN' etc. -->
-    <define name="def_iso-639">
-        <data type="string">
-            <param name="pattern">[A-Z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A four-letter script code like 'Latn', 'Cyrl', etc. -->
-    <define name="def_iso-15924">
-        <data type="string">
-            <param name="pattern">[A-Z][a-z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A 128 Bit UUID in its standard ASCII representation. -->
-    <define name="def_uuid">
-        <data type="string">
-            <param name="pattern">[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}</param>
-        </data>
-    </define>
-
-
-    <!-- Reading direction of a relation. Defaults to "both". -->
-    <define name="def_direction">
-        <choice>
-            <value>both</value>
-            <value>forward</value>
-            <value>backward</value>
-        </choice>
-    </define>
-
-</grammar>

=== removed file 'schema/musicbrainz_mmd-1.0rc4.rng'
--- schema/musicbrainz_mmd-1.0rc4.rng	2012-02-01 17:18:10 +0000
+++ schema/musicbrainz_mmd-1.0rc4.rng	1970-01-01 00:00:00 +0000
@@ -1,539 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- ==================================================================
-     $Id: musicbrainz_mmd-1.0rc4.rng 188 2006-03-22 16:54:20Z matt $
-
-     Relax NG Schema for MusicBrainz XML Metadata Version 1.0rc4
-
-
-     This XML schema has been designed to represent music metadata.
-     Documentation and the latest revision can be found at
-
-        http://musicbrainz.org/development/mmd/
-
-
-     Copyright (c) 2006 Robert Kaye, Matthias Friedrich
-   
-     The schema is released under the Creative Commons 
-     Attribution-ShareAlike 2.5 license.
-
-     http://creativecommons.org/licenses/by-sa/2.5/
-
-     ================================================================== -->
-
-
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
-         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
-         ns="http://musicbrainz.org/ns/mmd-1.0#">
-
-
-    <start>
-        <ref name="def_metadata"/>
-    </start>
-
-
-    <define name="def_metadata">
-        <element name="metadata">
-            <optional>
-                <attribute name="generator">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="created">
-                    <data type="dateTime"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <ref name="def_artist"/>
-            </optional>
-            <optional>
-                <ref name="def_release"/>
-            </optional>
-            <optional>
-                <ref name="def_track"/>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-                
-            <optional>
-                <ref name="def_extension"/>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_artist">
-        <element name="artist">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_any_attribute"/>
-            </zeroOrMore>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <zeroOrMore>
-                <ref name="def_extension"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release">
-        <element name="release">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_any_attribute"/>
-            </zeroOrMore>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="text-representation">
-                    <optional>
-                        <attribute name="language">
-                            <ref name="def_iso-639"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="script">
-                            <ref name="def_iso-15924"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-            <optional>
-                <element name="asin">
-                    <data type="string">
-                        <param name="pattern">[A-Z0-9]{10}</param>
-                    </data>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-event-list"/>
-            </optional>
-            <optional>
-                <ref name="def_disc-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <zeroOrMore>
-                <ref name="def_extension"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track">
-        <element name="track">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_any_attribute"/>
-            </zeroOrMore>
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="duration">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <zeroOrMore>
-                <ref name="def_extension"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation">
-        <element name="relation">
-            <attribute name="type">
-                <data type="anyURI"/>
-            </attribute>
-            <attribute name="target">
-                <data type="anyURI"/>
-            </attribute>
-            <optional>
-                <attribute name="direction">
-                    <ref name="def_direction"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="attributes">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="begin">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="end">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <choice>
-                    <ref name="def_artist"/>
-                    <ref name="def_release"/>
-                    <ref name="def_track"/>
-
-                    <ref name="def_extension"/>
-                </choice>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_alias">
-        <element name="alias">
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="script">
-                    <ref name="def_iso-15924"/>
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <define name="def_extension">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                        <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_anything">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                    <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_any_attribute">
-	<attribute>
-	<anyName>
-            <except>
-                <nsName ns=""/>
-            </except>
-	</anyName>
-	</attribute>
-    </define>
-
-
-    <define name="def_artist-list">
-        <element name="artist-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_artist"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-list">
-        <element name="release-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_alias-list">
-        <element name="alias-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_alias"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track-list">
-        <element name="track-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_track"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-event-list">
-        <element name="release-event-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="event">
-                    <attribute name="date">
-                        <ref name="def_incomplete-date"/>
-                    </attribute>
-                    <optional>
-                        <attribute name="country">
-                            <ref name="def_iso-3166"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_disc-list">
-        <element name="disc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="disc">
-                    <attribute name="id">
-                        <data type="string">
-                            <param name="pattern">[a-zA-Z0-9._]{27}-</param>
-                        </data>
-                    </attribute>
-                    <optional>
-                        <attribute name="sectors">
-                            <data type="nonNegativeInteger"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_puid-list">
-        <element name="puid-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="puid">
-                    <attribute name="id">
-                        <ref name="def_uuid"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation-list">
-        <element name="relation-list">
-            <attribute name="target-type">
-                <data type="anyURI"/>
-            </attribute>
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_relation"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_list-attributes">
-        <optional>
-            <attribute name="count">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-        <optional>
-            <attribute name="offset">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-    </define>
-
-
-    <!-- A space separated list of URIs, relative ones are possible, too. -->
-    <define name="def_URI-list">
-        <list>
-            <oneOrMore>
-                <data type="anyURI"/>
-            </oneOrMore>
-        </list>
-    </define>
-
-
-    <!-- A date with varying precision in format 'YYYY-MM-DD'. -->
-    <define name="def_incomplete-date">
-        <data type="string">
-            <param name="pattern">[0-9]{4}(-[0-9]{2})?(-[0-9]{2})?</param>
-        </data>
-    </define>
-
-
-    <!-- A two-letter country code like 'DE', 'UK', 'FR' etc. -->
-    <define name="def_iso-3166">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}</param>
-        </data>
-    </define>
-
-
-    <!-- An ISO-639-2/T language code like 'DEU', 'ENG', 'JPN' etc. -->
-    <define name="def_iso-639">
-        <data type="string">
-            <param name="pattern">[A-Z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A four-letter script code like 'Latn', 'Cyrl', etc. -->
-    <define name="def_iso-15924">
-        <data type="string">
-            <param name="pattern">[A-Z][a-z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A 128 Bit UUID in its standard ASCII representation. -->
-    <define name="def_uuid">
-        <data type="string">
-            <param name="pattern">[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}</param>
-        </data>
-    </define>
-
-
-    <!-- Reading direction of a relation. Defaults to "both". -->
-    <define name="def_direction">
-        <choice>
-            <value>both</value>
-            <value>forward</value>
-            <value>backward</value>
-        </choice>
-    </define>
-
-</grammar>

=== removed file 'schema/musicbrainz_mmd-1.0rc5.rng'
--- schema/musicbrainz_mmd-1.0rc5.rng	2012-02-01 17:18:10 +0000
+++ schema/musicbrainz_mmd-1.0rc5.rng	1970-01-01 00:00:00 +0000
@@ -1,585 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- ==================================================================
-     $Id: musicbrainz_mmd-1.0rc5.rng 7362 2006-04-28 13:33:02Z matt $
-
-     Relax NG Schema for MusicBrainz XML Metadata Version 1.0rc5
-
-
-     This XML schema has been designed to represent music metadata.
-     Documentation and the latest revision can be found at
-
-        http://musicbrainz.org/development/mmd/
-
-
-     Copyright (c) 2006 Robert Kaye, Matthias Friedrich
-   
-     The schema is released under the Creative Commons 
-     Attribution-ShareAlike 2.5 license.
-
-     http://creativecommons.org/licenses/by-sa/2.5/
-
-     ================================================================== -->
-
-
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
-         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
-         ns="http://musicbrainz.org/ns/mmd-1.0#">
-
-
-    <start>
-        <ref name="def_metadata-element"/>
-    </start>
-
-
-    <define name="def_metadata-element">
-        <element name="metadata">
-            <optional>
-                <attribute name="generator">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="created">
-                    <data type="dateTime"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-            <optional>
-                <ref name="def_release-element"/>
-            </optional>
-            <optional>
-                <ref name="def_track-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-                
-            <ref name="def_metadata-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_artist-element">
-        <element name="artist">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_artist-attribute_extension"/>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <ref name="def_artist-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_release-element">
-        <element name="release">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <ref name="def_release-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="text-representation">
-                    <optional>
-                        <attribute name="language">
-                            <ref name="def_iso-639"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="script">
-                            <ref name="def_iso-15924"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-            <optional>
-                <element name="asin">
-                    <data type="string">
-                        <param name="pattern">[A-Z0-9]{10}</param>
-                    </data>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-event-list"/>
-            </optional>
-            <optional>
-                <ref name="def_disc-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <ref name="def_release-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_track-element">
-        <element name="track">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_track-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="duration">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <ref name="def_track-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_relation-element">
-        <element name="relation">
-            <attribute name="type">
-                <data type="anyURI"/>
-            </attribute>
-            <attribute name="target">
-                <data type="anyURI"/>
-            </attribute>
-            <optional>
-                <attribute name="direction">
-                    <ref name="def_direction"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="attributes">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="begin">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="end">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <choice>
-                    <ref name="def_artist-element"/>
-                    <ref name="def_release-element"/>
-                    <ref name="def_track-element"/>
-
-                    <ref name="def_relation-element_extension"/>
-                </choice>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_alias">
-        <element name="alias">
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="script">
-                    <ref name="def_iso-15924"/>
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <!--
-        This part defines the extensions elements and attributes.
-    -->
-
-    <define name="def_metadata-element_extension">
-        <optional>
-            <ref name="def_extension_element"/>
-        </optional>
-    </define>
-
-
-    <define name="def_artist-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_track-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_relation-element_extension">
-        <ref name="def_extension_element"/>
-    </define>
-
-
-    <define name="def_artist-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_track-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_extension_element">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                        <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_extension_attribute">
-	<attribute>
-	<anyName>
-            <except>
-                <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                <nsName ns=""/>
-            </except>
-	</anyName>
-	</attribute>
-    </define>
-
-
-    <define name="def_anything">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                    <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_artist-list">
-        <element name="artist-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_artist-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-list">
-        <element name="release-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_alias-list">
-        <element name="alias-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_alias"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track-list">
-        <element name="track-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_track-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-event-list">
-        <element name="release-event-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="event">
-                    <attribute name="date">
-                        <ref name="def_incomplete-date"/>
-                    </attribute>
-                    <optional>
-                        <attribute name="country">
-                            <ref name="def_iso-3166"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_disc-list">
-        <element name="disc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="disc">
-                    <attribute name="id">
-                        <data type="string">
-                            <param name="pattern">[a-zA-Z0-9._]{27}-</param>
-                        </data>
-                    </attribute>
-                    <optional>
-                        <attribute name="sectors">
-                            <data type="nonNegativeInteger"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_puid-list">
-        <element name="puid-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="puid">
-                    <attribute name="id">
-                        <ref name="def_uuid"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation-list">
-        <element name="relation-list">
-            <attribute name="target-type">
-                <data type="anyURI"/>
-            </attribute>
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_relation-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_list-attributes">
-        <optional>
-            <attribute name="count">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-        <optional>
-            <attribute name="offset">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-    </define>
-
-
-    <!-- A space separated list of URIs, relative ones are possible, too. -->
-    <define name="def_URI-list">
-        <list>
-            <oneOrMore>
-                <data type="anyURI"/>
-            </oneOrMore>
-        </list>
-    </define>
-
-
-    <!-- A date with varying precision in format 'YYYY-MM-DD'. -->
-    <define name="def_incomplete-date">
-        <data type="string">
-            <param name="pattern">[0-9]{4}(-[0-9]{2})?(-[0-9]{2})?</param>
-        </data>
-    </define>
-
-
-    <!-- A two-letter country code like 'DE', 'UK', 'FR' etc. -->
-    <define name="def_iso-3166">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}</param>
-        </data>
-    </define>
-
-
-    <!-- An ISO-639-2/T language code like 'DEU', 'ENG', 'JPN' etc. -->
-    <define name="def_iso-639">
-        <data type="string">
-            <param name="pattern">[A-Z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A four-letter script code like 'Latn', 'Cyrl', etc. -->
-    <define name="def_iso-15924">
-        <data type="string">
-            <param name="pattern">[A-Z][a-z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A 128 Bit UUID in its standard ASCII representation. -->
-    <define name="def_uuid">
-        <data type="string">
-            <param name="pattern">[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}</param>
-        </data>
-    </define>
-
-
-    <!-- Reading direction of a relation. Defaults to "both". -->
-    <define name="def_direction">
-        <choice>
-            <value>both</value>
-            <value>forward</value>
-            <value>backward</value>
-        </choice>
-    </define>
-
-</grammar>

=== removed file 'schema/musicbrainz_mmd-1.1.rng'
--- schema/musicbrainz_mmd-1.1.rng	2012-02-01 17:18:10 +0000
+++ schema/musicbrainz_mmd-1.1.rng	1970-01-01 00:00:00 +0000
@@ -1,694 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- ==================================================================
-     $Id: musicbrainz_mmd-1.1.rng 9473 2007-09-23 13:35:06Z matt $
-
-     Relax NG Schema for MusicBrainz XML Metadata Version 1.1
-
-
-     This XML schema has been designed to represent music metadata.
-     Documentation and the latest revision can be found at
-
-        http://musicbrainz.org/development/mmd/
-
-
-     Copyright (c) 2006 Robert Kaye, Matthias Friedrich
-   
-     The schema is released under the Creative Commons 
-     Attribution-ShareAlike 2.5 license.
-
-     http://creativecommons.org/licenses/by-sa/2.5/
-
-     ================================================================== -->
-
-
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
-         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
-         ns="http://musicbrainz.org/ns/mmd-1.0#">
-
-
-    <start>
-        <ref name="def_metadata-element"/>
-    </start>
-
-
-    <define name="def_metadata-element">
-        <element name="metadata">
-            <optional>
-                <attribute name="generator">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="created">
-                    <data type="dateTime"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-            <optional>
-                <ref name="def_release-element"/>
-            </optional>
-            <optional>
-                <ref name="def_track-element"/>
-            </optional>
-            <optional>
-                <ref name="def_label-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <optional>
-                <ref name="def_label-list"/>
-            </optional>
-                
-            <ref name="def_metadata-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_artist-element">
-        <element name="artist">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_artist-attribute_extension"/>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <ref name="def_artist-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_release-element">
-        <element name="release">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <ref name="def_release-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="text-representation">
-                    <optional>
-                        <attribute name="language">
-                            <ref name="def_iso-639"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="script">
-                            <ref name="def_iso-15924"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-            <optional>
-                <element name="asin">
-                    <data type="string">
-                        <param name="pattern">[A-Z0-9]{10}</param>
-                    </data>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-event-list"/>
-            </optional>
-            <optional>
-                <ref name="def_disc-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <ref name="def_release-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_track-element">
-        <element name="track">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_track-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="duration">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <ref name="def_track-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_label-element">
-        <element name="label">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_label-attribute_extension"/>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="label-code">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="country">
-                    <ref name="def_iso-3166"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <ref name="def_label-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_relation-element">
-        <element name="relation">
-            <attribute name="type">
-                <data type="anyURI"/>
-            </attribute>
-            <attribute name="target">
-                <data type="anyURI"/>
-            </attribute>
-            <optional>
-                <attribute name="direction">
-                    <ref name="def_direction"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="attributes">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="begin">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="end">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <choice>
-                    <ref name="def_artist-element"/>
-                    <ref name="def_release-element"/>
-                    <ref name="def_track-element"/>
-
-                    <ref name="def_relation-element_extension"/>
-                </choice>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_alias">
-        <element name="alias">
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="script">
-                    <ref name="def_iso-15924"/>
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <!--
-        This part defines the extensions elements and attributes.
-    -->
-
-    <define name="def_metadata-element_extension">
-        <optional>
-            <ref name="def_extension_element"/>
-        </optional>
-    </define>
-
-
-    <define name="def_artist-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_track-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_label-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_relation-element_extension">
-        <ref name="def_extension_element"/>
-    </define>
-
-
-    <define name="def_artist-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_track-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_label-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_extension_element">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                        <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_extension_attribute">
-	<attribute>
-	<anyName>
-            <except>
-                <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                <nsName ns=""/>
-            </except>
-	</anyName>
-	</attribute>
-    </define>
-
-
-    <define name="def_anything">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                    <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_artist-list">
-        <element name="artist-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_artist-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-list">
-        <element name="release-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_alias-list">
-        <element name="alias-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_alias"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track-list">
-        <element name="track-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_track-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_label-list">
-        <element name="label-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_label-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-event-list">
-        <element name="release-event-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="event">
-                    <attribute name="date">
-                        <ref name="def_incomplete-date"/>
-                    </attribute>
-                    <optional>
-                        <attribute name="country">
-                            <ref name="def_iso-3166"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="catalog-number">
-                            <text/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="barcode">
-                            <text/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <ref name="def_label-element"/>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_disc-list">
-        <element name="disc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="disc">
-                    <attribute name="id">
-                        <data type="string">
-                            <param name="pattern">[a-zA-Z0-9._]{27}-</param>
-                        </data>
-                    </attribute>
-                    <optional>
-                        <attribute name="sectors">
-                            <data type="nonNegativeInteger"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_puid-list">
-        <element name="puid-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="puid">
-                    <attribute name="id">
-                        <ref name="def_uuid"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation-list">
-        <element name="relation-list">
-            <attribute name="target-type">
-                <data type="anyURI"/>
-            </attribute>
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_relation-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_list-attributes">
-        <optional>
-            <attribute name="count">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-        <optional>
-            <attribute name="offset">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-    </define>
-
-
-    <!-- A space separated list of URIs, relative ones are possible, too. -->
-    <define name="def_URI-list">
-        <list>
-            <oneOrMore>
-                <data type="anyURI"/>
-            </oneOrMore>
-        </list>
-    </define>
-
-
-    <!-- A date with varying precision in format 'YYYY-MM-DD'. -->
-    <define name="def_incomplete-date">
-        <data type="string">
-            <param name="pattern">[0-9]{4}(-[0-9]{2})?(-[0-9]{2})?</param>
-        </data>
-    </define>
-
-
-    <!-- A two-letter country code like 'DE', 'UK', 'FR' etc. -->
-    <define name="def_iso-3166">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}</param>
-        </data>
-    </define>
-
-
-    <!-- An ISO-639-2/T language code like 'DEU', 'ENG', 'JPN' etc. -->
-    <define name="def_iso-639">
-        <data type="string">
-            <param name="pattern">[A-Z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A four-letter script code like 'Latn', 'Cyrl', etc. -->
-    <define name="def_iso-15924">
-        <data type="string">
-            <param name="pattern">[A-Z][a-z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A 128 Bit UUID in its standard ASCII representation. -->
-    <define name="def_uuid">
-        <data type="string">
-            <param name="pattern">[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}</param>
-        </data>
-    </define>
-
-
-    <!-- Reading direction of a relation. Defaults to "both". -->
-    <define name="def_direction">
-        <choice>
-            <value>both</value>
-            <value>forward</value>
-            <value>backward</value>
-        </choice>
-    </define>
-
-</grammar>

=== removed file 'schema/musicbrainz_mmd-1.2.rng'
--- schema/musicbrainz_mmd-1.2.rng	2012-02-01 17:18:10 +0000
+++ schema/musicbrainz_mmd-1.2.rng	1970-01-01 00:00:00 +0000
@@ -1,736 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- ==================================================================
-     $Id: musicbrainz_mmd-1.2.rng 9473 2007-09-23 13:35:06Z matt $
-
-     Relax NG Schema for MusicBrainz XML Metadata Version 1.2
-
-
-     This XML schema has been designed to represent music metadata.
-     Documentation and the latest revision can be found at
-
-        http://musicbrainz.org/development/mmd/
-
-
-     Copyright (c) 2006 Robert Kaye, Matthias Friedrich
-   
-     The schema is released under the Creative Commons 
-     Attribution-ShareAlike 2.5 license.
-
-     http://creativecommons.org/licenses/by-sa/2.5/
-
-     ================================================================== -->
-
-
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
-         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
-         ns="http://musicbrainz.org/ns/mmd-1.0#">
-
-
-    <start>
-        <ref name="def_metadata-element"/>
-    </start>
-
-
-    <define name="def_metadata-element">
-        <element name="metadata">
-            <optional>
-                <attribute name="generator">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="created">
-                    <data type="dateTime"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-            <optional>
-                <ref name="def_release-element"/>
-            </optional>
-            <optional>
-                <ref name="def_track-element"/>
-            </optional>
-            <optional>
-                <ref name="def_label-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <optional>
-                <ref name="def_label-list"/>
-            </optional>
-                
-            <ref name="def_metadata-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_artist-element">
-        <element name="artist">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_artist-attribute_extension"/>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-
-            <ref name="def_artist-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_release-element">
-        <element name="release">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <ref name="def_release-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="text-representation">
-                    <optional>
-                        <attribute name="language">
-                            <ref name="def_iso-639"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="script">
-                            <ref name="def_iso-15924"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-            <optional>
-                <element name="asin">
-                    <data type="string">
-                        <param name="pattern">[A-Z0-9]{10}</param>
-                    </data>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-event-list"/>
-            </optional>
-            <optional>
-                <ref name="def_disc-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-
-            <ref name="def_release-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_track-element">
-        <element name="track">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_track-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="duration">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-
-            <ref name="def_track-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_label-element">
-        <element name="label">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_label-attribute_extension"/>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="label-code">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="country">
-                    <ref name="def_iso-3166"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-
-            <ref name="def_label-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_relation-element">
-        <element name="relation">
-            <attribute name="type">
-                <data type="anyURI"/>
-            </attribute>
-            <attribute name="target">
-                <data type="anyURI"/>
-            </attribute>
-            <optional>
-                <attribute name="direction">
-                    <ref name="def_direction"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="attributes">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="begin">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="end">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <choice>
-                    <ref name="def_artist-element"/>
-                    <ref name="def_release-element"/>
-                    <ref name="def_track-element"/>
-
-                    <ref name="def_relation-element_extension"/>
-                </choice>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_alias">
-        <element name="alias">
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="script">
-                    <ref name="def_iso-15924"/>
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <define name="def_tag">
-        <element name="tag">
-            <optional>
-                <attribute name="count">
-                    <data type="nonNegativeInteger"/>
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <!--
-        This part defines the extensions elements and attributes.
-    -->
-
-    <define name="def_metadata-element_extension">
-        <optional>
-            <ref name="def_extension_element"/>
-        </optional>
-    </define>
-
-
-    <define name="def_artist-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_track-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_label-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_relation-element_extension">
-        <ref name="def_extension_element"/>
-    </define>
-
-
-    <define name="def_artist-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_track-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_label-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_extension_element">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                        <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_extension_attribute">
-	<attribute>
-	<anyName>
-            <except>
-                <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                <nsName ns=""/>
-            </except>
-	</anyName>
-	</attribute>
-    </define>
-
-
-    <define name="def_anything">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                    <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_artist-list">
-        <element name="artist-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_artist-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-list">
-        <element name="release-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_alias-list">
-        <element name="alias-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_alias"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track-list">
-        <element name="track-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_track-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_label-list">
-        <element name="label-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_label-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-event-list">
-        <element name="release-event-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="event">
-                    <attribute name="date">
-                        <ref name="def_incomplete-date"/>
-                    </attribute>
-                    <optional>
-                        <attribute name="country">
-                            <ref name="def_iso-3166"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="catalog-number">
-                            <text/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="barcode">
-                            <text/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="format">
-                            <data type="anyURI"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <ref name="def_label-element"/>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_disc-list">
-        <element name="disc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="disc">
-                    <attribute name="id">
-                        <data type="string">
-                            <param name="pattern">[a-zA-Z0-9._]{27}-</param>
-                        </data>
-                    </attribute>
-                    <optional>
-                        <attribute name="sectors">
-                            <data type="nonNegativeInteger"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_puid-list">
-        <element name="puid-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="puid">
-                    <attribute name="id">
-                        <ref name="def_uuid"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation-list">
-        <element name="relation-list">
-            <attribute name="target-type">
-                <data type="anyURI"/>
-            </attribute>
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_relation-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_tag-list">
-        <element name="tag-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_tag"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_list-attributes">
-        <optional>
-            <attribute name="count">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-        <optional>
-            <attribute name="offset">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-    </define>
-
-
-    <!-- A space separated list of URIs, relative ones are possible, too. -->
-    <define name="def_URI-list">
-        <list>
-            <oneOrMore>
-                <data type="anyURI"/>
-            </oneOrMore>
-        </list>
-    </define>
-
-
-    <!-- A date with varying precision in format 'YYYY-MM-DD'. -->
-    <define name="def_incomplete-date">
-        <data type="string">
-            <param name="pattern">[0-9]{4}(-[0-9]{2})?(-[0-9]{2})?</param>
-        </data>
-    </define>
-
-
-    <!-- A two-letter country code like 'DE', 'UK', 'FR' etc. -->
-    <define name="def_iso-3166">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}</param>
-        </data>
-    </define>
-
-
-    <!-- An ISO-639-2/T language code like 'DEU', 'ENG', 'JPN' etc. -->
-    <define name="def_iso-639">
-        <data type="string">
-            <param name="pattern">[A-Z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A four-letter script code like 'Latn', 'Cyrl', etc. -->
-    <define name="def_iso-15924">
-        <data type="string">
-            <param name="pattern">[A-Z][a-z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A 128 Bit UUID in its standard ASCII representation. -->
-    <define name="def_uuid">
-        <data type="string">
-            <param name="pattern">[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}</param>
-        </data>
-    </define>
-
-
-    <!-- Reading direction of a relation. Defaults to "both". -->
-    <define name="def_direction">
-        <choice>
-            <value>both</value>
-            <value>forward</value>
-            <value>backward</value>
-        </choice>
-    </define>
-
-</grammar>

=== removed file 'schema/musicbrainz_mmd-1.3.rng'
--- schema/musicbrainz_mmd-1.3.rng	2012-02-01 17:18:10 +0000
+++ schema/musicbrainz_mmd-1.3.rng	1970-01-01 00:00:00 +0000
@@ -1,807 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- ==================================================================
-     $Id: musicbrainz_mmd-1.3.rng 13217 2011-07-25 14:41:56Z acid2 $
-
-     Relax NG Schema for MusicBrainz XML Metadata Version 1.3
-
-
-     This XML schema has been designed to represent music metadata.
-     Documentation and the latest revision can be found at
-
-        http://musicbrainz.org/development/mmd/
-
-
-     Copyright (c) 2006 Robert Kaye, Matthias Friedrich
-   
-     The schema is released under the Creative Commons 
-     Attribution-ShareAlike 2.5 license.
-
-     http://creativecommons.org/licenses/by-sa/2.5/
-
-     ================================================================== -->
-
-
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
-         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
-         ns="http://musicbrainz.org/ns/mmd-1.0#">
-
-
-    <start>
-        <ref name="def_metadata-element"/>
-    </start>
-
-
-    <define name="def_metadata-element">
-        <element name="metadata">
-            <optional>
-                <attribute name="generator">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="created">
-                    <data type="dateTime"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-            <optional>
-                <ref name="def_release-element"/>
-            </optional>
-            <optional>
-                <ref name="def_track-element"/>
-            </optional>
-            <optional>
-                <ref name="def_label-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <optional>
-                <ref name="def_label-list"/>
-            </optional>
-                
-            <ref name="def_metadata-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_artist-element">
-        <element name="artist">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_artist-attribute_extension"/>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_artist-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_release-element">
-        <element name="release">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <ref name="def_release-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="text-representation">
-                    <optional>
-                        <attribute name="language">
-                            <ref name="def_iso-639"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="script">
-                            <ref name="def_iso-15924"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-            <optional>
-                <element name="asin">
-                    <data type="string">
-                        <param name="pattern">[A-Z0-9]{10}</param>
-                    </data>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-event-list"/>
-            </optional>
-            <optional>
-                <ref name="def_disc-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_release-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_track-element">
-        <element name="track">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_track-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="duration">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_track-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_label-element">
-        <element name="label">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_label-attribute_extension"/>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="label-code">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="country">
-                    <ref name="def_iso-3166"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_label-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_relation-element">
-        <element name="relation">
-            <attribute name="type">
-                <data type="anyURI"/>
-            </attribute>
-            <attribute name="target">
-                <data type="anyURI"/>
-            </attribute>
-            <optional>
-                <attribute name="direction">
-                    <ref name="def_direction"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="attributes">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="begin">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="end">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <choice>
-                    <ref name="def_artist-element"/>
-                    <ref name="def_release-element"/>
-                    <ref name="def_track-element"/>
-
-                    <ref name="def_relation-element_extension"/>
-                </choice>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_alias">
-        <element name="alias">
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="script">
-                    <ref name="def_iso-15924"/>
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <define name="def_tag">
-        <element name="tag">
-            <optional>
-                <attribute name="count">
-                    <data type="nonNegativeInteger"/>
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <define name="def_user-tag">
-        <element name="user-tag">
-            <text/>
-        </element>
-    </define>
-
-    <define name="def_rating">
-        <element name="rating">
-            <optional>
-                <attribute name="votes-count">
-                    <data type="nonNegativeInteger"/>
-                </attribute>
-            </optional>
-            <data type="float"/>
-        </element>
-    </define>
-
-
-    <define name="def_user-rating">
-        <element name="user-rating">
-            <data type="nonNegativeInteger"/>
-        </element>
-    </define>
-
-
-    <!--
-        This part defines the extensions elements and attributes.
-    -->
-
-    <define name="def_metadata-element_extension">
-        <optional>
-            <ref name="def_extension_element"/>
-        </optional>
-    </define>
-
-
-    <define name="def_artist-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_track-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_label-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_relation-element_extension">
-        <ref name="def_extension_element"/>
-    </define>
-
-
-    <define name="def_artist-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_track-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_label-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_extension_element">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                        <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_extension_attribute">
-	<attribute>
-	<anyName>
-            <except>
-                <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                <nsName ns=""/>
-            </except>
-	</anyName>
-	</attribute>
-    </define>
-
-
-    <define name="def_anything">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                    <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_artist-list">
-        <element name="artist-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_artist-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-list">
-        <element name="release-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_alias-list">
-        <element name="alias-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_alias"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track-list">
-        <element name="track-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_track-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_label-list">
-        <element name="label-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_label-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-event-list">
-        <element name="release-event-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="event">
-                    <attribute name="date">
-                        <ref name="def_incomplete-date"/>
-                    </attribute>
-                    <optional>
-                        <attribute name="country">
-                            <ref name="def_iso-3166"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="catalog-number">
-                            <text/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="barcode">
-                            <text/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="format">
-                            <data type="anyURI"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <ref name="def_label-element"/>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_disc-list">
-        <element name="disc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="disc">
-                    <attribute name="id">
-                        <data type="string">
-                            <param name="pattern">[a-zA-Z0-9._]{27}-</param>
-                        </data>
-                    </attribute>
-                    <optional>
-                        <attribute name="sectors">
-                            <data type="nonNegativeInteger"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_puid-list">
-        <element name="puid-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="puid">
-                    <attribute name="id">
-                        <ref name="def_uuid"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation-list">
-        <element name="relation-list">
-            <attribute name="target-type">
-                <data type="anyURI"/>
-            </attribute>
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_relation-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_tag-list">
-        <element name="tag-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_tag"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_user-tag-list">
-        <element name="user-tag-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_user-tag"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_list-attributes">
-        <optional>
-            <attribute name="count">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-        <optional>
-            <attribute name="offset">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-    </define>
-
-
-    <!-- A space separated list of URIs, relative ones are possible, too. -->
-    <define name="def_URI-list">
-        <list>
-            <oneOrMore>
-                <data type="anyURI"/>
-            </oneOrMore>
-        </list>
-    </define>
-
-
-    <!-- A date with varying precision in format 'YYYY-MM-DD'. -->
-    <define name="def_incomplete-date">
-        <data type="string">
-            <param name="pattern">[0-9]{4}(-[0-9]{2})?(-[0-9]{2})?</param>
-        </data>
-    </define>
-
-
-    <!-- A two-letter country code like 'DE', 'UK', 'FR' etc. -->
-    <define name="def_iso-3166">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}</param>
-        </data>
-    </define>
-
-
-    <!-- An ISO-639-2/T language code like 'DEU', 'ENG', 'JPN' etc. -->
-    <define name="def_iso-639">
-        <data type="string">
-            <param name="pattern">[A-Z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A four-letter script code like 'Latn', 'Cyrl', etc. -->
-    <define name="def_iso-15924">
-        <data type="string">
-            <param name="pattern">[A-Z][a-z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A 128 Bit UUID in its standard ASCII representation. -->
-    <define name="def_uuid">
-        <data type="string">
-            <param name="pattern">[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}</param>
-        </data>
-    </define>
-
-
-    <!-- Reading direction of a relation. Defaults to "both". -->
-    <define name="def_direction">
-        <choice>
-            <value>both</value>
-            <value>forward</value>
-            <value>backward</value>
-        </choice>
-    </define>
-
-</grammar>

=== removed file 'schema/musicbrainz_mmd-1.4.rng'
--- schema/musicbrainz_mmd-1.4.rng	2012-02-01 17:18:10 +0000
+++ schema/musicbrainz_mmd-1.4.rng	1970-01-01 00:00:00 +0000
@@ -1,911 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- ==================================================================
-     $Id: musicbrainz_mmd-1.4.rng 12968 2011-04-14 14:26:05Z acid2 $
-
-     Relax NG Schema for MusicBrainz XML Metadata Version 1.4
-
-
-     This XML schema has been designed to represent music metadata.
-     Documentation and the latest revision can be found at
-
-        http://musicbrainz.org/development/mmd/
-
-
-     Copyright (c) 2006 Robert Kaye, Matthias Friedrich
-
-     The schema is released under the Creative Commons
-     Attribution-ShareAlike 2.5 license.
-
-     http://creativecommons.org/licenses/by-sa/2.5/
-
-     ================================================================== -->
-
-
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
-         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
-         ns="http://musicbrainz.org/ns/mmd-1.0#">
-
-
-    <start>
-        <ref name="def_metadata-element"/>
-    </start>
-
-
-    <define name="def_metadata-element">
-        <element name="metadata">
-            <optional>
-                <attribute name="generator">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="created">
-                    <data type="dateTime"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-            <optional>
-                <ref name="def_release-element"/>
-            </optional>
-            <optional>
-                <ref name="def_release-group-element"/>
-            </optional>
-            <optional>
-                <ref name="def_track-element"/>
-            </optional>
-            <optional>
-                <ref name="def_label-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-group-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <optional>
-                <ref name="def_label-list"/>
-            </optional>
-
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-
-            <ref name="def_metadata-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_artist-element">
-        <element name="artist">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_artist-attribute_extension"/>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-group-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_artist-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_release-element">
-        <element name="release">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <ref name="def_release-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="text-representation">
-                    <optional>
-                        <attribute name="language">
-                            <ref name="def_iso-639"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="script">
-                            <ref name="def_iso-15924"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-            <optional>
-                <element name="asin">
-                    <data type="string">
-                        <param name="pattern">[A-Z0-9]{10}</param>
-                    </data>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-            <optional>
-                <ref name="def_release-group-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-event-list"/>
-            </optional>
-            <optional>
-                <ref name="def_disc-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <optional>
-                <ref name="def_track-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_release-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_release-group-element">
-        <element name="release-group">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <ref name="def_release-group-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-
-            <ref name="def_release-group-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_track-element">
-        <element name="track">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_track-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="duration">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="isrc-list">
-                    <zeroOrMore>
-                        <element name="isrc">
-                          <attribute name="id">
-                            <ref name="def_isrc" />
-                          </attribute>
-                        </element>
-                    </zeroOrMore>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_track-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_label-element">
-        <element name="label">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_label-attribute_extension"/>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="label-code">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="country">
-                    <ref name="def_iso-3166"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <attribute name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="end">
-                            <ref name="def_incomplete-date"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-group-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_label-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_relation-element">
-        <element name="relation">
-            <attribute name="type">
-                <data type="anyURI"/>
-            </attribute>
-            <attribute name="target">
-                <data type="anyURI"/>
-            </attribute>
-            <optional>
-                <attribute name="direction">
-                    <ref name="def_direction"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="attributes">
-                    <ref name="def_URI-list"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="begin">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="end">
-                    <ref name="def_incomplete-date"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <choice>
-                    <ref name="def_artist-element"/>
-                    <ref name="def_release-element"/>
-                    <ref name="def_track-element"/>
-                    <ref name="def_label-element"/>
-
-                    <ref name="def_relation-element_extension"/>
-                </choice>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_alias">
-        <element name="alias">
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="script">
-                    <ref name="def_iso-15924"/>
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <define name="def_tag">
-        <element name="tag">
-            <optional>
-                <attribute name="count">
-                    <data type="nonNegativeInteger"/>
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <define name="def_user-tag">
-        <element name="user-tag">
-            <text/>
-        </element>
-    </define>
-
-    <define name="def_rating">
-        <element name="rating">
-            <optional>
-                <attribute name="votes-count">
-                    <data type="nonNegativeInteger"/>
-                </attribute>
-            </optional>
-            <data type="float"/>
-        </element>
-    </define>
-
-
-    <define name="def_user-rating">
-        <element name="user-rating">
-            <data type="nonNegativeInteger"/>
-        </element>
-    </define>
-
-
-    <!--
-        This part defines the extensions elements and attributes.
-    -->
-
-    <define name="def_metadata-element_extension">
-        <optional>
-            <ref name="def_extension_element"/>
-        </optional>
-    </define>
-
-
-    <define name="def_artist-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-group-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_track-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_label-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_relation-element_extension">
-        <ref name="def_extension_element"/>
-    </define>
-
-
-    <define name="def_artist-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-group-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_track-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_label-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_extension_element">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                        <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_extension_attribute">
-	<attribute>
-	<anyName>
-            <except>
-                <nsName ns="http://musicbrainz.org/ns/mmd-1.0#"/>
-                <nsName ns=""/>
-            </except>
-	</anyName>
-	</attribute>
-    </define>
-
-
-    <define name="def_anything">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                    <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_artist-list">
-        <element name="artist-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_artist-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-list">
-        <element name="release-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-group-list">
-        <element name="release-group-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release-group-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_alias-list">
-        <element name="alias-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_alias"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track-list">
-        <element name="track-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_track-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_label-list">
-        <element name="label-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_label-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-event-list">
-        <element name="release-event-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="event">
-                    <attribute name="date">
-                        <ref name="def_incomplete-date"/>
-                    </attribute>
-                    <optional>
-                        <attribute name="country">
-                            <ref name="def_iso-3166"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="catalog-number">
-                            <text/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="barcode">
-                            <text/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="format">
-                            <data type="anyURI"/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <ref name="def_label-element"/>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_disc-list">
-        <element name="disc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="disc">
-                    <attribute name="id">
-                        <data type="string">
-                            <param name="pattern">[a-zA-Z0-9._]{27}-</param>
-                        </data>
-                    </attribute>
-                    <optional>
-                        <attribute name="sectors">
-                            <data type="nonNegativeInteger"/>
-                        </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_puid-list">
-        <element name="puid-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <element name="puid">
-                    <attribute name="id">
-                        <ref name="def_uuid"/>
-                    </attribute>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation-list">
-        <element name="relation-list">
-            <attribute name="target-type">
-                <data type="anyURI"/>
-            </attribute>
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_relation-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_tag-list">
-        <element name="tag-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_tag"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_user-tag-list">
-        <element name="user-tag-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_user-tag"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_list-attributes">
-        <optional>
-            <attribute name="count">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-        <optional>
-            <attribute name="offset">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-    </define>
-
-
-    <!-- A space separated list of URIs, relative ones are possible, too. -->
-    <define name="def_URI-list">
-        <list>
-            <oneOrMore>
-                <data type="anyURI"/>
-            </oneOrMore>
-        </list>
-    </define>
-
-
-    <!-- A date with varying precision in format 'YYYY-MM-DD'. -->
-    <define name="def_incomplete-date">
-        <data type="string">
-            <param name="pattern">[0-9]{4}(-[0-9]{2})?(-[0-9]{2})?</param>
-        </data>
-    </define>
-
-
-    <!-- A two-letter country code like 'DE', 'UK', 'FR' etc. -->
-    <define name="def_iso-3166">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}</param>
-        </data>
-    </define>
-
-
-    <!-- An ISO-639-2/T language code like 'DEU', 'ENG', 'JPN' etc. -->
-    <define name="def_iso-639">
-        <data type="string">
-            <param name="pattern">[A-Z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A four-letter script code like 'Latn', 'Cyrl', etc. -->
-    <define name="def_iso-15924">
-        <data type="string">
-            <param name="pattern">[A-Z][a-z]{3}</param>
-        </data>
-    </define>
-
-    <!-- An ISRC code: CCXXXYYNNNNN, with
-           CC    - two-letter ISO-3166-1 alpha 2 country code
-           XXX   - alphanumeric registrant code (organization)
-           YY    - year
-           NNNNN - 5-digit number
-    -->
-    <define name="def_isrc">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}[A-Z0-9]{3}[0-9]{2}[0-9]{5}</param>
-        </data>
-    </define>
-
-
-    <!-- A 128 Bit UUID in its standard ASCII representation. -->
-    <define name="def_uuid">
-        <data type="string">
-            <param name="pattern">[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}</param>
-        </data>
-    </define>
-
-
-    <!-- Reading direction of a relation. Defaults to "both". -->
-    <define name="def_direction">
-        <choice>
-            <value>both</value>
-            <value>forward</value>
-            <value>backward</value>
-        </choice>
-    </define>
-
-</grammar>

=== removed file 'schema/musicbrainz_mmd-2.0.rng'
--- schema/musicbrainz_mmd-2.0.rng	2012-02-01 17:18:10 +0000
+++ schema/musicbrainz_mmd-2.0.rng	1970-01-01 00:00:00 +0000
@@ -1,1537 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- ==================================================================
-     $Id$
-
-     Relax NG Schema for MusicBrainz XML Metadata Version 2.0
-
-
-     This XML schema has been designed to represent music metadata.
-     Documentation and the latest revision can be found at
-
-        http://musicbrainz.org/development/mmd/
-
-
-     Copyright (c) 2006 Robert Kaye, Matthias Friedrich
-
-     The schema is released under the Creative Commons
-     Attribution-ShareAlike 2.5 license.
-
-     http://creativecommons.org/licenses/by-sa/2.5/
-
-     ================================================================== -->
-
-
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
-         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
-         ns="http://musicbrainz.org/ns/mmd-2.0#">
-
-
-    <start>
-        <ref name="def_metadata-element"/>
-    </start>
-
-
-    <define name="def_metadata-element">
-        <element name="metadata">
-            <optional>
-                <attribute name="generator">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="created">
-                    <data type="dateTime"/>
-                </attribute>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-element"/>
-            </optional>
-            <optional>
-                <ref name="def_release-element"/>
-            </optional>
-            <optional>
-                <ref name="def_release-group-element"/>
-            </optional>
-            <optional>
-                <ref name="def_recording-element"/>
-            </optional>
-            <optional>
-                <ref name="def_label-element"/>
-            </optional>
-            <optional>
-                <ref name="def_work-element"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-element"/>
-            </optional>
-            <optional>
-                <ref name="def_isrc-element"/>
-            </optional>
-            <optional>
-                <ref name="def_disc-element"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-            <optional>
-                <ref name="def_collection"/>
-            </optional>
-            <optional>
-                <ref name="def_artist-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-group-list"/>
-            </optional>
-            <optional>
-                <ref name="def_recording-list"/>
-            </optional>
-            <optional>
-                <ref name="def_label-list"/>
-            </optional>
-            <optional>
-                <ref name="def_work-list"/>
-            </optional>
-            <optional>
-                <ref name="def_isrc-list"/>
-            </optional>
-            <optional>
-                <ref name="def_annotation-list"/>
-            </optional>
-            <optional>
-                <ref name="def_cdstub-list"/>
-            </optional>
-            <optional>
-                <ref name="def_freedb-disc-list"/>
-            </optional>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_collection-list"/>
-            </optional>
-            <ref name="def_metadata-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_artist-element">
-        <element name="artist">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_artist-attribute_extension"/>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="gender">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="country">
-                    <ref name="def_iso-3166"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="ipi">
-                    <ref name="def_ipi"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <element name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </element>
-                    </optional>
-                    <optional>
-                        <element name="end">
-                            <ref name="def_incomplete-date"/>
-                        </element>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_recording-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-group-list"/>
-            </optional>
-            <optional>
-                <ref name="def_label-list"/>
-            </optional>
-            <optional>
-                <ref name="def_work-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_artist-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_release-element">
-        <element name="release">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_release-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="status">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="quality">
-                    <ref name="def_quality"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="packaging">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="text-representation">
-                    <optional>
-                        <element name="language">
-                            <ref name="def_iso-639"/>
-                        </element>
-                    </optional>
-                    <optional>
-                        <element name="script">
-                            <ref name="def_iso-15924"/>
-                        </element>
-                    </optional>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-credit"/>
-            </optional>
-            <optional>
-                <ref name="def_release-group-element"/>
-            </optional>
-
-            <optional>
-                <element name="date">
-                    <ref name="def_incomplete-date"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="country">
-                    <ref name="def_iso-3166"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="barcode">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="asin">
-                    <data type="string">
-                        <param name="pattern">[A-Z0-9]{10}</param>
-                    </data>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_label-info-list"/>
-            </optional>
-
-            <optional>
-                <ref name="def_medium-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_collection-list"/>
-            </optional>
-
-            <ref name="def_release-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_release-group-element">
-        <element name="release-group">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_release-group-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="comment">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-              <element name="first-release-date">
-                <ref name="def_incomplete-date" />
-              </element>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-credit"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_release-group-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_recording-element">
-        <element name="recording">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_recording-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="length">
-                    <data type="nonNegativeInteger"/> 
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-credit"/>
-            </optional>
-
-
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <optional>
-                <ref name="def_puid-list"/>
-            </optional>
-            <optional>
-                <ref name="def_isrc-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_recording-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_label-element">
-        <element name="label">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_label-attribute_extension"/>
-
-            <optional>
-                <element name="name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="sort-name">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="label-code">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="ipi">
-                    <ref name="def_ipi"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="country">
-                    <ref name="def_iso-3166"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="life-span">
-                    <optional>
-                        <element name="begin">
-                            <ref name="def_incomplete-date"/>
-                        </element>
-                    </optional>
-                    <optional>
-                        <element name="end">
-                            <ref name="def_incomplete-date"/>
-                        </element>
-                    </optional>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_label-element_extension"/>
-        </element>
-    </define>
-
-    <define name="def_work-element">
-        <element name="work">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <optional>
-                <attribute name="type">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <ref name="def_work-attribute_extension"/>
-
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-
-            <optional>
-                <ref name="def_artist-credit"/>
-            </optional>
-
-            <optional>
-                <element name="iswc">
-                    <ref name="def_iswc" />
-                </element>
-            </optional>
-
-            <optional>
-                <element name="disambiguation">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_alias-list"/>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_relation-list"/>
-            </zeroOrMore>
-            <optional>
-                <ref name="def_tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_user-tag-list"/>
-            </optional>
-            <optional>
-                <ref name="def_rating"/>
-            </optional>
-            <optional>
-                <ref name="def_user-rating"/>
-            </optional>
-
-            <ref name="def_work-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_disc-element">
-        <element name="disc">
-            <attribute name="id">
-                <data type="string">
-                    <param name="pattern">[a-zA-Z0-9._]{27}-</param>
-                </data>
-            </attribute>
-            <ref name="def_disc-attribute_extension"/>
-            <optional>
-                <element name="sectors">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_release-list"/>
-            </optional>
-            <ref name="def_disc-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_puid-element">
-        <element name="puid">
-            <optional>
-                <attribute name="id">
-                        <ref name="def_uuid"/>
-                </attribute>
-            </optional>
-            <ref name="def_puid-attribute_extension"/>
-
-            <optional>
-                <ref name="def_recording-list"/>
-            </optional>
-
-            <ref name="def_puid-element_extension"/>
-        </element>
-    </define>
-
-
-    <define name="def_isrc-element">
-        <element name="isrc">
-            <optional>
-                <attribute name="id">
-                     <ref name="def_isrc"/>
-                </attribute>
-            </optional>
-            <ref name="def_isrc-attribute_extension"/>
-
-            <optional>
-              <ref name="def_recording-list"/>
-            </optional>
-
-            <ref name="def_isrc-element_extension"/>
-        </element>
-    </define>
-
-    
-    <define name="def_artist-credit">
-        <element name="artist-credit">
-            <oneOrMore>
-                <element name="name-credit">
-                    <optional>
-                        <attribute name="joinphrase">
-                            <text/>
-                        </attribute>
-                    </optional>
-                    <optional>
-                        <element name="name">
-                            <text/>
-                        </element>
-                    </optional>
-                    <ref name="def_artist-element"/>
-                </element>
-            </oneOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation-element">
-        <element name="relation">
-            <attribute name="type">
-                <data type="anyURI"/>
-            </attribute>
-            <element name="target">
-                <data type="anyURI"/>
-            </element>
-            <optional>
-                <element name="direction">
-                    <ref name="def_direction"/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_attribute-list"/>
-            </optional>
-            <optional>
-                <element name="begin">
-                    <ref name="def_incomplete-date"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="end">
-                    <ref name="def_incomplete-date"/>
-                </element>
-            </optional>
-
-            <optional>
-                <choice>
-                    <ref name="def_artist-element"/>
-                    <ref name="def_release-element"/>
-                    <ref name="def_release-group-element"/>
-                    <ref name="def_recording-element"/>
-                    <ref name="def_label-element"/>
-                    <ref name="def_work-element"/>
-
-                    <ref name="def_relation-element_extension"/>
-                </choice>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_alias">
-        <element name="alias">
-            <optional>
-                <attribute name="locale">
-                    <ref name="def_iso-3166-2" />
-                </attribute>
-            </optional>
-            <text/>
-        </element>
-    </define>
-
-
-    <define name="def_tag">
-        <element name="tag">
-            <optional>
-                <attribute name="count">
-                    <data type="nonNegativeInteger"/>
-                </attribute>
-            </optional>
-            <ref name="def_tag-attribute_extension"/>
-            <element name="name">
-                <text/>
-            </element>
-        </element>
-    </define>
-
-
-    <define name="def_user-tag">
-        <element name="user-tag">
-            <ref name="def_tag-attribute_extension"/>
-            <element name="name">
-                <text/>
-            </element>    
-        </element>
-    </define>
-
-    <define name="def_rating">
-        <element name="rating">
-            <optional>
-                <attribute name="votes-count">
-                    <data type="nonNegativeInteger"/>
-                </attribute>
-            </optional>
-            <data type="float"/>
-        </element>
-    </define>
-
-
-    <define name="def_user-rating">
-        <element name="user-rating">
-            <data type="nonNegativeInteger"/>
-        </element>
-    </define>
-
-
-    <define name="def_label-info">
-        <element name="label-info">
-            <optional>
-                <element name="catalog-number">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_label-element"/>
-            </optional>
-        </element>
-    </define>
-
-
-    <define name="def_medium">
-        <element name="medium">
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="position">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="format">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_disc-list"/>
-            </optional>
-            <ref name="def_track-list"/>
-        </element>
-    </define>
-
-
-    <define name="def_track">
-        <element name="track">
-            <optional>
-                <element name="position">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <optional>
-                <element name="title">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="length">
-                    <data type="nonNegativeInteger"/> 
-                </element>
-            </optional>
-            <optional>
-                <ref name="def_artist-credit"/>
-            </optional>
-            <optional>
-                <ref name="def_recording-element"/>
-            </optional>
-        </element>
-    </define>
-
-    <define name="def_annotation">
-        <element name="annotation">
-            <optional>
-                <attribute name="type">
-                    <text/>
-                </attribute>
-            </optional>
-            <ref name="def_annotation-attribute_extension"/>
-            <element name="entity">
-                <data type="anyURI"/>
-            </element>
-            <element name="name">
-                <text/>
-            </element>
-            <element name="text">
-                <text/>
-            </element>
-            <ref name="def_annotation-element_extension"/>
-        </element>
-    </define>
-
-    <define name="def_cdstub">
-        <element name="cdstub">
-            <attribute name="id">
-                <data type="string">
-                    <param name="pattern">[a-zA-Z0-9._]{27}-</param>
-                </data>
-            </attribute>
-            <ref name="def_cdstub-attribute_extension"/>
-            <element name="title">
-                <text/>
-            </element>
-            <optional>
-                <element name="artist">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="barcode">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="comment">
-                    <text/>
-                </element>
-            </optional>
-            <ref name="def_nonmb-track-list"/>
-            <ref name="def_cdstub-element_extension"/>
-        </element>
-    </define>
-
-    <define name="def_freedb-disc">
-        <element name="freedb-disc">
-            <optional>
-                <attribute name="id">
-                    <data type="string">
-                        <param name="pattern">[a-zA-Z0-9]{8}</param>
-                    </data>
-                </attribute>
-            </optional>
-            <ref name="def_freedb-disc-attribute_extension"/>
-            <element name="title">
-                <text/>
-            </element>
-            <optional>
-                <element name="artist">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="category">
-                    <text/>
-                </element>
-            </optional>
-            <optional>
-                <element name="year">
-                    <data type="string">
-                        <param name="pattern">[0-9]{4}</param>
-                    </data>
-                </element>
-            </optional>
-            <ref name="def_nonmb-track-list"/>
-            <ref name="def_freedb-disc-element_extension"/>
-        </element>
-    </define>
-
-    <define name="def_nonmb-track">
-        <element name="track">
-            <element name="title">
-                <text/>
-            </element>
-            <optional>
-                <element name="artist">
-                    <text/>
-                </element>
-            </optional>
-            <element name="length">
-                <data type="nonNegativeInteger"/>
-            </element>
-        </element>
-    </define>
-
-    <define name="def_collection">
-        <element name="collection">
-            <optional>
-                <attribute name="id">
-                    <data type="anyURI"/>
-                </attribute>
-            </optional>
-            <element name="name">
-                <text/>
-            </element>
-            <optional>
-                <element name="editor">
-                    <text/>
-                </element>
-            </optional>
-            <ref name="def_release-list"/>
-        </element>
-    </define>
-    <!--
-        This part defines the extensions elements and attributes.
-    -->
-
-    <define name="def_metadata-element_extension">
-        <optional>
-            <ref name="def_extension_element"/>
-        </optional>
-    </define>
-
-
-    <define name="def_artist-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-group-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_recording-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_label-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_work-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_puid-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_isrc-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_relation-element_extension">
-        <ref name="def_extension_element"/>
-    </define>
-
-
-    <define name="def_annotation-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_disc-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_cdstub-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_freedb-disc-element_extension">
-        <zeroOrMore>
-            <ref name="def_extension_element"/>
-        </zeroOrMore>
-    </define>
-
-    <define name="def_artist-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_release-group-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_recording-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_label-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_work-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_puid-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_isrc-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_annotation-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_disc-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_cdstub-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_freedb-disc-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-
-    <define name="def_tag-attribute_extension">
-        <zeroOrMore>
-            <ref name="def_extension_attribute"/>
-        </zeroOrMore>
-    </define>
-
-    <define name="def_extension_element">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns="http://musicbrainz.org/ns/mmd-2.0#"/>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                        <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_extension_attribute">
-	<attribute>
-	<anyName>
-            <except>
-                <nsName ns="http://musicbrainz.org/ns/mmd-2.0#"/>
-                <nsName ns=""/>
-            </except>
-	</anyName>
-	</attribute>
-    </define>
-
-
-    <define name="def_anything">
-        <element>
-            <anyName>
-                <except>
-                    <nsName ns=""/>
-                </except>
-            </anyName>
-            <zeroOrMore>
-                <choice>
-                    <attribute>
-                    <anyName/>
-                    </attribute>
-                    <text/>
-                    <ref name="def_anything"/>
-                </choice>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_artist-list">
-        <element name="artist-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_artist-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_medium-list">
-        <element name="medium-list">
-            <ref name="def_list-attributes"/>
-            <optional>
-                <element name="track-count">
-                    <data type="nonNegativeInteger"/>
-                </element>
-            </optional>
-            <zeroOrMore>
-                <ref name="def_medium"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-list">
-        <element name="release-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_release-group-list">
-        <element name="release-group-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_release-group-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_alias-list">
-        <element name="alias-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_alias"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_recording-list">
-        <element name="recording-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_recording-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_track-list">
-        <element name="track-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_track"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_label-list">
-        <element name="label-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_label-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_label-info-list">
-        <element name="label-info-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_label-info"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_work-list">
-        <element name="work-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_work-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_annotation-list">
-        <element name="annotation-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_annotation"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_cdstub-list">
-        <element name="cdstub-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_cdstub"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="def_nonmb-track-list">
-        <element name="track-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_nonmb-track"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="def_freedb-disc-list">
-        <element name="freedb-disc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_freedb-disc"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_disc-list">
-        <element name="disc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_disc-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_puid-list">
-        <element name="puid-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_puid-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_isrc-list">
-        <element name="isrc-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_isrc-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_relation-list">
-        <element name="relation-list">
-            <attribute name="target-type">
-                <data type="anyURI"/>
-            </attribute>
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_relation-element"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_tag-list">
-        <element name="tag-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_tag"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-
-    <define name="def_user-tag-list">
-        <element name="user-tag-list">
-            <ref name="def_list-attributes"/>
-            <zeroOrMore>
-                <ref name="def_user-tag"/>
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="def_collection-list">
-            <element name="collection-list">
-                <ref name="def_list-attributes"/>
-                <zeroOrMore>
-                    <ref name="def_collection"/>
-                </zeroOrMore>
-            </element>
-    </define>
-
-    <!-- the list of attributes on a relationship. -->
-    <define name="def_attribute-list">
-        <element name="attribute-list">
-            <oneOrMore>
-              <element name="attribute">
-                <text />
-              </element>
-            </oneOrMore>
-        </element>
-    </define>
-
-    <!-- the attributes which can be used on a -list element. -->
-    <define name="def_list-attributes">
-        <optional>
-            <attribute name="count">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-        <optional>
-            <attribute name="offset">
-                <data type="nonNegativeInteger"/>
-            </attribute>
-        </optional>
-    </define>
-
-
-    <!-- A date with varying precision in format 'YYYY-MM-DD'. -->
-    <define name="def_incomplete-date">
-        <data type="string">
-            <param name="pattern">[0-9]{4}(-[0-9]{2})?(-[0-9]{2})?</param>
-        </data>
-    </define>
-
-    <!-- An IPI code -->
-    <define name="def_ipi">
-        <data type="string">
-            <param name="pattern">[0-9]{11}</param>
-        </data>
-    </define>
-
-
-    <!-- A two-letter country code like 'DE', 'UK', 'FR' etc. -->
-    <define name="def_iso-3166">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}</param>
-        </data>
-    </define>
-
-    <!-- A two-letter country code like followed by a 3 letter subdivision -->
-    <define name="def_iso-3166-2">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}\-[A-Z]{2}</param>
-        </data>
-    </define>
-
-
-    <!-- An ISO-639-2/T language code like 'deu', 'eng', 'jpn' etc. -->
-    <define name="def_iso-639">
-        <data type="string">
-            <param name="pattern">[a-z]{3}</param>
-        </data>
-    </define>
-
-
-    <!-- A four-letter script code like 'Latn', 'Cyrl', etc. -->
-    <define name="def_iso-15924">
-        <data type="string">
-            <param name="pattern">[A-Z][a-z]{3}</param>
-        </data>
-    </define>
-
-    <!-- An ISRC code: CCXXXYYNNNNN, with
-           CC    - two-letter ISO-3166-1 alpha 2 country code
-           XXX   - alphanumeric registrant code (organization)
-           YY    - year
-           NNNNN - 5-digit number
-    -->
-    <define name="def_isrc">
-        <data type="string">
-            <param name="pattern">[A-Z]{2}[A-Z0-9]{3}[0-9]{2}[0-9]{5}</param>
-        </data>
-    </define>
-
-    <!-- An ISWC code: 
-           C           - single-letter prefix character
-           NNN.NNN.NNN - 9-digit number. A "."-separated grouping in
-                         3x3 digits is commonly used.  This grouping
-                         is allowed by the standard, but not
-                         mandatory.  For consistency we force this
-                         grouping in the schema.
-           C           - check digit
-    -->
-    <define name="def_iswc">
-        <data type="string">
-            <param name="pattern">[A-Z]-[0-9]{3}\.[0-9]{3}\.[0-9]{3}-[0-9]</param>
-        </data>
-    </define>
-
-    <!-- A 128 Bit UUID in its standard ASCII representation. -->
-    <define name="def_uuid">
-        <data type="string">
-            <param name="pattern">[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}</param>
-        </data>
-    </define>
-
-
-    <!-- Reading direction of a relation. Defaults to "both". -->
-    <define name="def_direction">
-        <choice>
-            <value>both</value>
-            <value>forward</value>
-            <value>backward</value>
-        </choice>
-    </define>
-
-    <!-- Data Quality of an entity. -->
-    <define name="def_quality">
-        <choice>
-            <value>low</value>
-            <value>normal</value>
-            <value>high</value>
-        </choice>
-    </define>
-
-</grammar>

=== added file 'src/.gitignore'
--- src/.gitignore	1970-01-01 00:00:00 +0000
+++ src/.gitignore	2012-06-25 05:56:21 +0000
@@ -0,0 +1,7 @@
+CMakeFiles/
+Makefile
+cmake_install.cmake
+libmusicbrainz4.so*
+make-c-interface
+mb4_c.cc
+mb4_c.h

=== modified file 'src/Alias.cc'
--- src/Alias.cc	2012-02-01 17:18:10 +0000
+++ src/Alias.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Alias.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Alias.h"
 
 class MusicBrainz4::CAliasPrivate
@@ -29,6 +32,11 @@
 public:
 		std::string m_Locale;
 		std::string m_Text;
+		std::string m_SortName;
+		std::string m_Type;
+		std::string m_Primary;
+		std::string m_BeginDate;
+		std::string m_EndDate;
 };
 
 MusicBrainz4::CAlias::CAlias(const XMLNode& Node)
@@ -61,6 +69,11 @@
 
 		m_d->m_Locale=Other.m_d->m_Locale;
 		m_d->m_Text=Other.m_d->m_Text;
+		m_d->m_SortName=Other.m_d->m_SortName;
+		m_d->m_Type=Other.m_d->m_Type;
+		m_d->m_Primary=Other.m_d->m_Primary;
+		m_d->m_BeginDate=Other.m_d->m_BeginDate;
+		m_d->m_EndDate=Other.m_d->m_EndDate;
 	}
 
 	return *this;
@@ -76,31 +89,30 @@
 	return new CAlias(*this);
 }
 
-bool MusicBrainz4::CAlias::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CAlias::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("locale"==Name)
 		m_d->m_Locale=Value;
+	else if ("sort-name"==Name)
+		m_d->m_SortName=Value;
+	else if ("type"==Name)
+		m_d->m_Type=Value;
+	else if ("primary"==Name)
+		m_d->m_Primary=Value;
+	else if ("begin-date"==Name)
+		m_d->m_BeginDate=Value;
+	else if ("end-date"==Name)
+		m_d->m_EndDate=Value;
 	else
 	{
 		std::cerr << "Unrecognised alias attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
-
 }
 
-bool MusicBrainz4::CAlias::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CAlias::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 	std::cerr << "Unrecognised alias element: '" << NodeName << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CAlias::GetElementName()
@@ -118,14 +130,44 @@
 	return m_d->m_Text;
 }
 
+std::string MusicBrainz4::CAlias::SortName() const
+{
+	return m_d->m_SortName;
+}
+
+std::string MusicBrainz4::CAlias::Type() const
+{
+	return m_d->m_Type;
+}
+
+std::string MusicBrainz4::CAlias::Primary() const
+{
+	return m_d->m_Primary;
+}
+
+std::string MusicBrainz4::CAlias::BeginDate() const
+{
+	return m_d->m_BeginDate;
+}
+
+std::string MusicBrainz4::CAlias::EndDate() const
+{
+	return m_d->m_EndDate;
+}
+
 std::ostream& MusicBrainz4::CAlias::Serialise(std::ostream& os) const
 {
 	os << "Alias:" << std::endl;
 
 	CEntity::Serialise(os);
 
-	os << "\tLocale: " << Locale() << std::endl;
-	os << "\tText:   " << Text() << std::endl;
+	os << "\tLocale:    " << Locale() << std::endl;
+	os << "\tText:      " << Text() << std::endl;
+	os << "\tSort Name: " << SortName() << std::endl;
+	os << "\tType:      " << Type() << std::endl;
+	os << "\tPrimary:   " << Primary() << std::endl;
+	os << "\tBeginDate: " << BeginDate() << std::endl;
+	os << "\tEndDate:   " << EndDate() << std::endl;
 
 	return os;
 }

=== modified file 'src/Annotation.cc'
--- src/Annotation.cc	2012-02-01 17:18:10 +0000
+++ src/Annotation.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Annotation.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Annotation.h"
 
 class MusicBrainz4::CAnnotationPrivate
@@ -77,46 +80,36 @@
 	return new CAnnotation(*this);
 }
 
-bool MusicBrainz4::CAnnotation::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CAnnotation::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("type"==Name)
 		m_d->m_Type=Value;
 	else
 	{
 		std::cerr << "Unrecognised annotation attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CAnnotation::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CAnnotation::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("entity"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Entity);
+		ProcessItem(Node,m_d->m_Entity);
 	}
 	else if ("name"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Name);
+		ProcessItem(Node,m_d->m_Name);
 	}
 	else if ("text"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Text);
+		ProcessItem(Node,m_d->m_Text);
 	}
 	else
 	{
 		std::cerr << "Unrecognised annotation element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CAnnotation::GetElementName()

=== modified file 'src/Artist.cc'
--- src/Artist.cc	2012-02-01 17:18:10 +0000
+++ src/Artist.cc	2012-06-25 05:56:21 +0000
@@ -18,13 +18,17 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Artist.cc 13265 2011-08-25 12:53:44Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Artist.h"
 
 #include "musicbrainz4/Lifespan.h"
+#include "musicbrainz4/IPI.h"
 #include "musicbrainz4/Rating.h"
 #include "musicbrainz4/UserRating.h"
 #include "musicbrainz4/AliasList.h"
@@ -40,6 +44,7 @@
 #include "musicbrainz4/WorkList.h"
 #include "musicbrainz4/Work.h"
 #include "musicbrainz4/RelationList.h"
+#include "musicbrainz4/RelationListList.h"
 #include "musicbrainz4/Relation.h"
 #include "musicbrainz4/TagList.h"
 #include "musicbrainz4/Tag.h"
@@ -50,14 +55,15 @@
 {
 	public:
 		CArtistPrivate()
-		:	m_Lifespan(0),
+		:	m_IPIList(0),
+			m_Lifespan(0),
 			m_AliasList(0),
 			m_RecordingList(0),
 			m_ReleaseList(0),
 			m_ReleaseGroupList(0),
 			m_LabelList(0),
 			m_WorkList(0),
-			m_RelationList(0),
+			m_RelationListList(0),
 			m_TagList(0),
 			m_UserTagList(0),
 			m_Rating(0),
@@ -73,6 +79,7 @@
 		std::string m_Country;
 		std::string m_Disambiguation;
 		std::string m_IPI;
+		CIPIList *m_IPIList;
 		CLifespan *m_Lifespan;
 		CAliasList *m_AliasList;
 		CRecordingList *m_RecordingList;
@@ -80,7 +87,7 @@
 		CReleaseGroupList *m_ReleaseGroupList;
 		CLabelList *m_LabelList;
 		CWorkList *m_WorkList;
-		CRelationList *m_RelationList;
+		CRelationListList *m_RelationListList;
 		CTagList *m_TagList;
 		CUserTagList *m_UserTagList;
 		CRating *m_Rating;
@@ -123,6 +130,9 @@
 		m_d->m_Disambiguation=Other.m_d->m_Disambiguation;
 		m_d->m_IPI=Other.m_d->m_IPI;
 
+		if (Other.m_d->m_IPIList)
+			m_d->m_IPIList=new CIPIList(*Other.m_d->m_IPIList);
+
 		if (Other.m_d->m_Lifespan)
 			m_d->m_Lifespan=new CLifespan(*Other.m_d->m_Lifespan);
 
@@ -144,8 +154,8 @@
 		if (Other.m_d->m_WorkList)
 			m_d->m_WorkList=new CWorkList(*Other.m_d->m_WorkList);
 
-		if (Other.m_d->m_RelationList)
-			m_d->m_RelationList=new CRelationList(*Other.m_d->m_RelationList);
+		if (Other.m_d->m_RelationListList)
+			m_d->m_RelationListList=new CRelationListList(*Other.m_d->m_RelationListList);
 
 		if (Other.m_d->m_TagList)
 			m_d->m_TagList=new CTagList(*Other.m_d->m_TagList);
@@ -172,6 +182,9 @@
 
 void MusicBrainz4::CArtist::Cleanup()
 {
+	delete m_d->m_IPIList;
+	m_d->m_IPIList=0;
+
 	delete m_d->m_Lifespan;
 	m_d->m_Lifespan=0;
 
@@ -193,8 +206,8 @@
 	delete m_d->m_WorkList;
 	m_d->m_WorkList=0;
 
-	delete m_d->m_RelationList;
-	m_d->m_RelationList=0;
+	delete m_d->m_RelationListList;
+	m_d->m_RelationListList=0;
 
 	delete m_d->m_TagList;
 	m_d->m_TagList=0;
@@ -214,10 +227,8 @@
 	return new CArtist(*this);
 }
 
-bool MusicBrainz4::CArtist::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CArtist::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("id"==Name)
 		m_d->m_ID=Value;
 	else if ("type"==Name)
@@ -226,95 +237,92 @@
 	{
 		std::cerr << "Unrecognised artist attribute: '" << Name << "'" << std::endl;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CArtist::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CArtist::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("name"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Name);
+		ProcessItem(Node,m_d->m_Name);
 	}
 	else if ("sort-name"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_SortName);
+		ProcessItem(Node,m_d->m_SortName);
 	}
 	else if ("gender"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Gender);
+		ProcessItem(Node,m_d->m_Gender);
 	}
 	else if ("country"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Country);
+		ProcessItem(Node,m_d->m_Country);
 	}
 	else if ("disambiguation"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Disambiguation);
+		ProcessItem(Node,m_d->m_Disambiguation);
 	}
 	else if ("ipi"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_IPI);
+		ProcessItem(Node,m_d->m_IPI);
+	}
+	else if ("ipi-list"==NodeName)
+	{
+		ProcessItem(Node,m_d->m_IPIList);
 	}
 	else if ("life-span"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Lifespan);
+		ProcessItem(Node,m_d->m_Lifespan);
 	}
 	else if ("alias-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_AliasList);
+		ProcessItem(Node,m_d->m_AliasList);
 	}
 	else if ("recording-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_RecordingList);
+		ProcessItem(Node,m_d->m_RecordingList);
 	}
 	else if ("release-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ReleaseList);
+		ProcessItem(Node,m_d->m_ReleaseList);
 	}
 	else if ("release-group-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ReleaseGroupList);
+		ProcessItem(Node,m_d->m_ReleaseGroupList);
 	}
 	else if ("label-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_LabelList);
+		ProcessItem(Node,m_d->m_LabelList);
 	}
 	else if ("work-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_WorkList);
+		ProcessItem(Node,m_d->m_WorkList);
 	}
 	else if ("relation-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_RelationList);
+		ProcessRelationList(Node,m_d->m_RelationListList);
 	}
 	else if ("tag-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_TagList);
+		ProcessItem(Node,m_d->m_TagList);
 	}
 	else if ("user-tag-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_UserTagList);
+		ProcessItem(Node,m_d->m_UserTagList);
 	}
 	else if ("rating"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Rating);
+		ProcessItem(Node,m_d->m_Rating);
 	}
 	else if ("user-rating"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_UserRating);
+		ProcessItem(Node,m_d->m_UserRating);
 	}
 	else
 	{
 		std::cerr << "Unrecognised artist element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CArtist::GetElementName()
@@ -362,6 +370,11 @@
 	return m_d->m_IPI;
 }
 
+MusicBrainz4::CIPIList *MusicBrainz4::CArtist::IPIList() const
+{
+	return m_d->m_IPIList;
+}
+
 MusicBrainz4::CLifespan *MusicBrainz4::CArtist::Lifespan() const
 {
 	return m_d->m_Lifespan;
@@ -399,7 +412,12 @@
 
 MusicBrainz4::CRelationList *MusicBrainz4::CArtist::RelationList() const
 {
-	return m_d->m_RelationList;
+	return m_d->m_RelationListList?m_d->m_RelationListList->Item(m_d->m_RelationListList->NumItems()-1):0;
+}
+
+MusicBrainz4::CRelationListList *MusicBrainz4::CArtist::RelationListList() const
+{
+	return m_d->m_RelationListList;
 }
 
 MusicBrainz4::CTagList *MusicBrainz4::CArtist::TagList() const
@@ -435,7 +453,9 @@
 	os << "\tGender:         " << Gender() << std::endl;
 	os << "\tCountry:        " << Country() << std::endl;
 	os << "\tDisambiguation: " << Disambiguation() << std::endl;
-	os << "\tIPI:            " << IPI() << std::endl;
+
+	if (IPIList())
+		os << *IPIList() << std::endl;
 
 	if (Lifespan())
 		os << *Lifespan() << std::endl;
@@ -458,8 +478,8 @@
 	if (WorkList())
 		os << *WorkList() << std::endl;
 
-	if (RelationList())
-		os << *RelationList() << std::endl;
+	if (RelationListList())
+		os << *RelationListList() << std::endl;
 
 	if (TagList())
 		os << *TagList() << std::endl;

=== modified file 'src/ArtistCredit.cc'
--- src/ArtistCredit.cc	2012-02-01 17:18:10 +0000
+++ src/ArtistCredit.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: ArtistCredit.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/ArtistCredit.h"
 
 #include "musicbrainz4/NameCreditList.h"
@@ -92,21 +95,13 @@
 	return new CArtistCredit(*this);
 }
 
-bool MusicBrainz4::CArtistCredit::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+void MusicBrainz4::CArtistCredit::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
 {
-	bool RetVal=true;
-
 	std::cerr << "Unrecognised artistcredit attribute: '" << Name << "'" << std::endl;
-	RetVal=false;
-
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CArtistCredit::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CArtistCredit::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("name-credit"==NodeName)
@@ -117,10 +112,7 @@
 	else
 	{
 		std::cerr << "Unrecognised artistcredit element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CArtistCredit::GetElementName()

=== modified file 'src/Attribute.cc'
--- src/Attribute.cc	2012-02-01 17:18:10 +0000
+++ src/Attribute.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Attribute.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Attribute.h"
 
 class MusicBrainz4::CAttributePrivate
@@ -74,26 +77,16 @@
 	return new CAttribute(*this);
 }
 
-bool MusicBrainz4::CAttribute::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+void MusicBrainz4::CAttribute::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
 {
-	bool RetVal=true;
-
 	std::cerr << "Unrecognised attribute attribute: '" << Name << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CAttribute::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CAttribute::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	std::cerr << "Unrecognised attribute element: '" << NodeName << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CAttribute::GetElementName()

=== modified file 'src/CDStub.cc'
--- src/CDStub.cc	2012-02-01 17:18:10 +0000
+++ src/CDStub.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: CDStub.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/CDStub.h"
 
 #include "musicbrainz4/NonMBTrackList.h"
@@ -101,54 +104,44 @@
 	return new CCDStub(*this);
 }
 
-bool MusicBrainz4::CCDStub::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CCDStub::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("id"==Name)
 		m_d->m_ID=Value;
 	else
 	{
 		std::cerr << "Unrecognised cdstub attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CCDStub::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CCDStub::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("title"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Title);
+		ProcessItem(Node,m_d->m_Title);
 	}
 	else if ("artist"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Artist);
+		ProcessItem(Node,m_d->m_Artist);
 	}
 	else if ("barcode"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Barcode);
+		ProcessItem(Node,m_d->m_Barcode);
 	}
 	else if ("comment"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Comment);
+		ProcessItem(Node,m_d->m_Comment);
 	}
 	else if ("track-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_NonMBTrackList);
+		ProcessItem(Node,m_d->m_NonMBTrackList);
 	}
 	else
 	{
 		std::cerr << "Unrecognised cd stub element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CCDStub::GetElementName()

=== modified file 'src/CMakeLists.txt'
--- src/CMakeLists.txt	2012-02-01 17:18:10 +0000
+++ src/CMakeLists.txt	2012-06-25 05:56:21 +0000
@@ -5,7 +5,8 @@
 	Disc.cc Entity.cc FreeDBDisc.cc HTTPFetch.cc ISRC.cc Label.cc LabelInfo.cc Lifespan.cc List.cc
 	mb4_c.cc Medium.cc MediumList.cc Message.cc Metadata.cc NameCredit.cc NonMBTrack.cc PUID.cc
 	Query.cc Rating.cc Recording.cc Relation.cc RelationList.cc Release.cc ReleaseGroup.cc Tag.cc
-	TextRepresentation.cc Track.cc UserRating.cc UserTag.cc Work.cc xmlParser.cpp)
+	TextRepresentation.cc Track.cc UserRating.cc UserTag.cc Work.cc xmlParser.cpp
+	RelationListList.cc ISWCList.cc ISWC.cc SecondaryType.cc SecondaryTypeList.cc IPI.cc)
 
 ADD_EXECUTABLE(make-c-interface make-c-interface.cc xmlParser.cpp)
 
@@ -30,7 +31,9 @@
 	SET_TARGET_PROPERTIES(musicbrainz4 PROPERTIES
 		DEFINE_SYMBOL _MB4_DEBUG_
 	)
-	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -ggdb -O0")
+	IF(CMAKE_COMPILER_IS_GNUCXX)
+		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -ggdb -O0")
+	ENDIF(CMAKE_COMPILER_IS_GNUCXX)
 endif(CMAKE_BUILD_TYPE STREQUAL Debug)
 
 TARGET_LINK_LIBRARIES(musicbrainz4 ${NEON_LIBRARIES})
@@ -40,7 +43,11 @@
 ENDIF(WIN32)
 
 IF(CMAKE_COMPILER_IS_GNUCXX)
-		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wextra -pedantic-errors")
+		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic-errors")
+		IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
+			SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
+		ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
+		set_source_files_properties(mb4_c.cc PROPERTIES COMPILE_FLAGS "-Wno-deprecated-declarations")
 ENDIF(CMAKE_COMPILER_IS_GNUCXX)
 
 INSTALL(TARGETS musicbrainz4 DESTINATION ${LIB_INSTALL_DIR})

=== modified file 'src/Collection.cc'
--- src/Collection.cc	2012-02-01 17:18:10 +0000
+++ src/Collection.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Collection.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Collection.h"
 
 #include "musicbrainz4/ReleaseList.h"
@@ -96,45 +99,36 @@
 	return new CCollection(*this);
 }
 
-bool MusicBrainz4::CCollection::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CCollection::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("id"==Name)
 		m_d->m_ID=Value;
 	else
 	{
 		std::cerr << "Unrecognised collection attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CCollection::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CCollection::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("name"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Name);
+		ProcessItem(Node,m_d->m_Name);
 	}
 	else if ("editor"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Editor);
+		ProcessItem(Node,m_d->m_Editor);
 	}
 	else if ("release-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ReleaseList);
+		ProcessItem(Node,m_d->m_ReleaseList);
 	}
 	else
 	{
 		std::cerr << "Unrecognised collection element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-	return RetVal;
 }
 
 std::string MusicBrainz4::CCollection::GetElementName()

=== modified file 'src/Disc.cc'
--- src/Disc.cc	2012-02-01 17:18:10 +0000
+++ src/Disc.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Disc.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Disc.h"
 
 #include "musicbrainz4/ReleaseList.h"
@@ -96,42 +99,32 @@
 	return new CDisc(*this);
 }
 
-bool MusicBrainz4::CDisc::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CDisc::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("id"==Name)
-		RetVal=ProcessItem(Value,m_d->m_ID);
+		ProcessItem(Value,m_d->m_ID);
 	else
 	{
 		std::cerr << "Unrecognised disc attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CDisc::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CDisc::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("sectors"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Sectors);
+		ProcessItem(Node,m_d->m_Sectors);
 	}
 	else if ("release-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ReleaseList);
+		ProcessItem(Node,m_d->m_ReleaseList);
 	}
 	else
 	{
 		std::cerr << "Unrecognised disc element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CDisc::GetElementName()

=== modified file 'src/Entity.cc'
--- src/Entity.cc	2012-02-01 17:18:10 +0000
+++ src/Entity.cc	2012-06-25 05:56:21 +0000
@@ -18,12 +18,18 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Entity.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Entity.h"
 
+#include "musicbrainz4/RelationList.h"
+#include "musicbrainz4/RelationListList.h"
+
 class MusicBrainz4::CEntityPrivate
 {
 	public:
@@ -70,10 +76,8 @@
 {
 }
 
-bool MusicBrainz4::CEntity::Parse(const XMLNode& Node)
+void MusicBrainz4::CEntity::Parse(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	if (!Node.isEmpty())
 	{
 		for (int count=0;count<Node.nAttribute();count++)
@@ -82,11 +86,9 @@
 			std::string Value=Node.getAttributeValue(count);
 
 			if ("ext:"==Name.substr(0,4))
-			{
 				m_d->m_ExtAttributes[Name.substr(4)]=Value;
-			}
 			else
-				RetVal=RetVal && ParseAttribute(Name,Value);
+				ParseAttribute(Name,Value);
 		}
 
 		//std::cout << "Node: " << std::endl << Node.createXMLString(true) << std::endl;
@@ -101,15 +103,11 @@
 				Value=ChildNode.getText();
 
 			if ("ext:"==Name.substr(0,4))
-			{
 				m_d->m_ExtElements[Name.substr(4)]=Value;
-			}
 			else
-				RetVal=RetVal && ParseElement(ChildNode);
+				ParseElement(ChildNode);
 		}
 	}
-
-	return RetVal;
 }
 
 std::map<std::string,std::string> MusicBrainz4::CEntity::ExtAttributes() const
@@ -122,11 +120,22 @@
 	return m_d->m_ExtElements;
 }
 
+void MusicBrainz4::CEntity::ProcessRelationList(const XMLNode& Node, CRelationListList* & RetVal)
+{
+	if (0==RetVal)
+		RetVal=new CRelationListList;
+
+	CRelationList *RelationList=0;
+	ProcessItem(Node,RelationList);
+	RetVal->Add(RelationList);
+	delete RelationList;
+}
+
 std::ostream& MusicBrainz4::CEntity::Serialise(std::ostream& os) const
 {
 	if (!ExtAttributes().empty())
 	{
-		std::cout << "Ext attrs: " << std::endl;
+		os << "Ext attrs: " << std::endl;
 		std::map<std::string,std::string> ExtAttrs=ExtAttributes();
 		std::map<std::string,std::string>::const_iterator ThisExtAttr=ExtAttrs.begin();
 		while (ThisExtAttr!=ExtAttrs.end())
@@ -139,7 +148,7 @@
 
 	if (!ExtElements().empty())
 	{
-		std::cout << "Ext elements: " << std::endl;
+		os << "Ext elements: " << std::endl;
 		std::map<std::string,std::string> ExtElems=ExtElements();
 		std::map<std::string,std::string>::const_iterator ThisExtElement=ExtElems.begin();
 		while (ThisExtElement!=ExtElems.end())

=== modified file 'src/FreeDBDisc.cc'
--- src/FreeDBDisc.cc	2012-02-01 17:18:10 +0000
+++ src/FreeDBDisc.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: FreeDBDisc.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/FreeDBDisc.h"
 
 #include "musicbrainz4/NonMBTrackList.h"
@@ -101,55 +104,44 @@
 	return new CFreeDBDisc(*this);
 }
 
-bool MusicBrainz4::CFreeDBDisc::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CFreeDBDisc::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
-
 	if ("id"==Name)
 		m_d->m_ID=Value;
 	else
 	{
 		std::cerr << "Unrecognised freedb disc attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CFreeDBDisc::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CFreeDBDisc::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("title"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Title);
+		ProcessItem(Node,m_d->m_Title);
 	}
 	else if ("artist"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Artist);
+		ProcessItem(Node,m_d->m_Artist);
 	}
 	else if ("category"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Category);
+		ProcessItem(Node,m_d->m_Category);
 	}
 	else if ("year"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Year);
+		ProcessItem(Node,m_d->m_Year);
 	}
 	else if ("nonmb-track-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_NonMBTrackList);
+		ProcessItem(Node,m_d->m_NonMBTrackList);
 	}
 	else
 	{
 		std::cerr << "Unrecognised freedb disc element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CFreeDBDisc::GetElementName()

=== modified file 'src/HTTPFetch.cc'
--- src/HTTPFetch.cc	2012-02-01 17:18:10 +0000
+++ src/HTTPFetch.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: HTTPFetch.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/HTTPFetch.h"
 
 #include <stdlib.h>

=== added file 'src/IPI.cc'
--- src/IPI.cc	1970-01-01 00:00:00 +0000
+++ src/IPI.cc	2012-06-25 05:56:21 +0000
@@ -0,0 +1,118 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2012 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
+#include "musicbrainz4/IPI.h"
+
+class MusicBrainz4::CIPIPrivate
+{
+	public:
+		CIPIPrivate()
+		{
+		}
+
+		std::string m_IPI;
+};
+
+MusicBrainz4::CIPI::CIPI(const XMLNode& Node)
+:	CEntity(),
+	m_d(new CIPIPrivate)
+{
+	if (!Node.isEmpty())
+	{
+		//std::cout << "IPI node: " << std::endl << Node.createXMLString(true) << std::endl;
+
+		Parse(Node);
+
+		if (Node.getText())
+		{
+			ProcessItem(Node,m_d->m_IPI);
+		}
+	}
+}
+
+MusicBrainz4::CIPI::CIPI(const CIPI& Other)
+:	CEntity(),
+	m_d(new CIPIPrivate)
+{
+	*this=Other;
+}
+
+MusicBrainz4::CIPI& MusicBrainz4::CIPI::operator =(const CIPI& Other)
+{
+	if (this!=&Other)
+	{
+		CEntity::operator =(Other);
+
+		m_d->m_IPI=Other.m_d->m_IPI;
+	}
+
+	return *this;
+}
+
+MusicBrainz4::CIPI::~CIPI()
+{
+	delete m_d;
+}
+
+MusicBrainz4::CIPI *MusicBrainz4::CIPI::Clone()
+{
+	return new CIPI(*this);
+}
+
+void MusicBrainz4::CIPI::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+{
+	std::cerr << "Unrecognised IPI attribute: '" << Name << "'" << std::endl;
+}
+
+void MusicBrainz4::CIPI::ParseElement(const XMLNode& Node)
+{
+	std::string Name=Node.getName();
+
+	std::cerr << "Unrecognised IPI element: '" << Name << "'" << std::endl;
+}
+
+std::string MusicBrainz4::CIPI::GetElementName()
+{
+	return "ipi";
+}
+
+std::string MusicBrainz4::CIPI::IPI() const
+{
+	return m_d->m_IPI;
+}
+
+std::ostream& MusicBrainz4::CIPI::Serialise(std::ostream& os) const
+{
+	os << "IPI:" << std::endl;
+
+	CEntity::Serialise(os);
+
+	os << "\tIPI: " << IPI() << std::endl;
+
+	return os;
+}
+

=== modified file 'src/ISRC.cc'
--- src/ISRC.cc	2012-02-01 17:18:10 +0000
+++ src/ISRC.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: ISRC.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/ISRC.h"
 
 #include "musicbrainz4/RecordingList.h"
@@ -93,38 +96,28 @@
 	return new CISRC(*this);
 }
 
-bool MusicBrainz4::CISRC::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CISRC::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("id"==Name)
 		m_d->m_ID=Value;
 	else
 	{
 		std::cerr << "Unrecognised isrc attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CISRC::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CISRC::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("recording-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_RecordingList);
+		ProcessItem(Node,m_d->m_RecordingList);
 	}
 	else
 	{
 		std::cerr << "Unrecognised ISRC element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CISRC::GetElementName()

=== added file 'src/ISWC.cc'
--- src/ISWC.cc	1970-01-01 00:00:00 +0000
+++ src/ISWC.cc	2012-06-25 05:56:21 +0000
@@ -0,0 +1,123 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2012 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#include "config.h"
+
+#include "musicbrainz4/ISWC.h"
+
+
+class MusicBrainz4::CISWCPrivate
+{
+	public:
+		CISWCPrivate()
+		{
+		}
+
+		std::string m_ISWC;
+};
+
+MusicBrainz4::CISWC::CISWC(const XMLNode& Node)
+:	CEntity(),
+	m_d(new CISWCPrivate)
+{
+	if (!Node.isEmpty())
+	{
+		//std::cout << "ISWC node: " << std::endl << Node.createXMLString(true) << std::endl;
+
+		Parse(Node);
+
+		if (Node.getText())
+			ProcessItem(Node,m_d->m_ISWC);
+	}
+}
+
+MusicBrainz4::CISWC::CISWC(const CISWC& Other)
+:	CEntity(),
+	m_d(new CISWCPrivate)
+{
+	*this=Other;
+}
+
+MusicBrainz4::CISWC& MusicBrainz4::CISWC::operator =(const CISWC& Other)
+{
+	if (this!=&Other)
+	{
+		Cleanup();
+
+		CEntity::operator =(Other);
+
+		m_d->m_ISWC=Other.m_d->m_ISWC;
+	}
+
+	return *this;
+}
+
+MusicBrainz4::CISWC::~CISWC()
+{
+	Cleanup();
+
+	delete m_d;
+}
+
+void MusicBrainz4::CISWC::Cleanup()
+{
+}
+
+MusicBrainz4::CISWC *MusicBrainz4::CISWC::Clone()
+{
+	return new CISWC(*this);
+}
+
+void MusicBrainz4::CISWC::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+{
+	std::cerr << "Unrecognised ISWC attribute: '" << Name << "'" << std::endl;
+}
+
+void MusicBrainz4::CISWC::ParseElement(const XMLNode& Node)
+{
+	std::string NodeName=Node.getName();
+
+	std::cerr << "Unrecognised ISWC element: '" << NodeName << "'" << std::endl;
+}
+
+std::string MusicBrainz4::CISWC::GetElementName()
+{
+	return "iswc";
+}
+
+std::string MusicBrainz4::CISWC::ISWC() const
+{
+	return m_d->m_ISWC;
+}
+
+std::ostream& MusicBrainz4::CISWC::Serialise(std::ostream& os) const
+{
+	os << "ISWC:" << std::endl;
+
+	CEntity::Serialise(os);
+
+	os << "\tISWC: " << ISWC() << std::endl;
+
+	return os;
+}

=== added file 'src/ISWCList.cc'
--- src/ISWCList.cc	1970-01-01 00:00:00 +0000
+++ src/ISWCList.cc	2012-06-25 05:56:21 +0000
@@ -0,0 +1,101 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2012 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
+#include "musicbrainz4/ISWCList.h"
+
+#include "musicbrainz4/ISWC.h"
+
+class MusicBrainz4::CISWCListPrivate
+{
+	public:
+		CISWCListPrivate()
+		{
+		}
+};
+
+MusicBrainz4::CISWCList::CISWCList(const XMLNode& Node)
+:	CListImpl<CISWC>(),
+	m_d(new CISWCListPrivate)
+{
+	if (!Node.isEmpty())
+	{
+		//std::cout << "ISWCList node: " << std::endl << Node.createXMLString(true) << std::endl;
+
+		Parse(Node);
+	}
+}
+
+MusicBrainz4::CISWCList::CISWCList(const CISWCList& Other)
+:	CListImpl<CISWC>(),
+	m_d(new CISWCListPrivate)
+{
+	*this=Other;
+}
+
+MusicBrainz4::CISWCList& MusicBrainz4::CISWCList::operator =(const CISWCList& Other)
+{
+	if (this!=&Other)
+	{
+		CListImpl<CISWC>::operator =(Other);
+	}
+
+	return *this;
+}
+
+MusicBrainz4::CISWCList::~CISWCList()
+{
+	delete m_d;
+}
+
+MusicBrainz4::CISWCList *MusicBrainz4::CISWCList::Clone()
+{
+	return new CISWCList(*this);
+}
+
+void MusicBrainz4::CISWCList::ParseAttribute(const std::string& Name, const std::string& Value)
+{
+	CListImpl<CISWC>::ParseAttribute(Name,Value);
+}
+
+void MusicBrainz4::CISWCList::ParseElement(const XMLNode& Node)
+{
+	CListImpl<CISWC>::ParseElement(Node);
+}
+
+std::string MusicBrainz4::CISWCList::GetElementName()
+{
+	return "iswc-list";
+}
+
+std::ostream& MusicBrainz4::CISWCList::Serialise(std::ostream& os) const
+{
+	os << "ISWC list:" << std::endl;
+
+	CListImpl<CISWC>::Serialise(os);
+
+	return os;
+}

=== modified file 'src/Label.cc'
--- src/Label.cc	2012-02-01 17:18:10 +0000
+++ src/Label.cc	2012-06-25 05:56:21 +0000
@@ -18,15 +18,19 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Label.cc 13265 2011-08-25 12:53:44Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Label.h"
 
 #include <iostream>
 
 #include "musicbrainz4/Lifespan.h"
+#include "musicbrainz4/IPI.h"
 #include "musicbrainz4/Rating.h"
 #include "musicbrainz4/UserRating.h"
 #include "musicbrainz4/Alias.h"
@@ -35,6 +39,7 @@
 #include "musicbrainz4/ReleaseList.h"
 #include "musicbrainz4/Relation.h"
 #include "musicbrainz4/RelationList.h"
+#include "musicbrainz4/RelationListList.h"
 #include "musicbrainz4/Tag.h"
 #include "musicbrainz4/TagList.h"
 #include "musicbrainz4/UserTag.h"
@@ -45,10 +50,11 @@
 	public:
 		CLabelPrivate()
 		:	m_LabelCode(0),
+			m_IPIList(0),
 			m_Lifespan(0),
 			m_AliasList(0),
 			m_ReleaseList(0),
-			m_RelationList(0),
+			m_RelationListList(0),
 			m_TagList(0),
 			m_UserTagList(0),
 			m_Rating(0),
@@ -62,17 +68,19 @@
 		std::string m_SortName;
 		int m_LabelCode;
 		std::string m_IPI;
+		CIPIList *m_IPIList;
 		std::string m_Disambiguation;
 		std::string m_Country;
 		CLifespan *m_Lifespan;
 		CAliasList *m_AliasList;
 		CReleaseList *m_ReleaseList;
-		CRelationList *m_RelationList;
+		CRelationListList *m_RelationListList;
 		CTagList *m_TagList;
 		CUserTagList *m_UserTagList;
 		CRating *m_Rating;
 		CUserRating *m_UserRating;
 };
+
 MusicBrainz4::CLabel::CLabel(const XMLNode& Node)
 :	CEntity(),
 	m_d(new CLabelPrivate)
@@ -106,6 +114,10 @@
 		m_d->m_SortName=Other.m_d->m_SortName;
 		m_d->m_LabelCode=Other.m_d->m_LabelCode;
 		m_d->m_IPI=Other.m_d->m_IPI;
+
+		if (Other.m_d->m_IPIList)
+			m_d->m_IPIList=new CIPIList(*Other.m_d->m_IPIList);
+
 		m_d->m_Disambiguation=Other.m_d->m_Disambiguation;
 		m_d->m_Country=Other.m_d->m_Country;
 
@@ -118,8 +130,8 @@
 		if (Other.m_d->m_ReleaseList)
 			m_d->m_ReleaseList=new CReleaseList(*Other.m_d->m_ReleaseList);
 
-		if (Other.m_d->m_RelationList)
-			m_d->m_RelationList=new CRelationList(*Other.m_d->m_RelationList);
+		if (Other.m_d->m_RelationListList)
+			m_d->m_RelationListList=new CRelationListList(*Other.m_d->m_RelationListList);
 
 		if (Other.m_d->m_TagList)
 			m_d->m_TagList=new CTagList(*Other.m_d->m_TagList);
@@ -146,6 +158,9 @@
 
 void MusicBrainz4::CLabel::Cleanup()
 {
+	delete m_d->m_IPIList;
+	m_d->m_IPIList=0;
+
 	delete m_d->m_Lifespan;
 	m_d->m_Lifespan=0;
 
@@ -155,8 +170,8 @@
 	delete m_d->m_ReleaseList;
 	m_d->m_ReleaseList=0;
 
-	delete m_d->m_RelationList;
-	m_d->m_RelationList=0;
+	delete m_d->m_RelationListList;
+	m_d->m_RelationListList=0;
 
 	delete m_d->m_TagList;
 	m_d->m_TagList=0;
@@ -176,10 +191,8 @@
 	return new CLabel(*this);
 }
 
-bool MusicBrainz4::CLabel::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CLabel::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("id"==Name)
 		m_d->m_ID=Value;
 	else if ("type"==Name)
@@ -187,81 +200,77 @@
 	else
 	{
 		std::cerr << "Unrecognised label attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CLabel::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CLabel::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("name"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Name);
+		ProcessItem(Node,m_d->m_Name);
 	}
 	else if ("sort-name"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_SortName);
+		ProcessItem(Node,m_d->m_SortName);
 	}
 	else if ("label-code"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_LabelCode);
+		ProcessItem(Node,m_d->m_LabelCode);
 	}
 	else if ("ipi"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_IPI);
+		ProcessItem(Node,m_d->m_IPI);
+	}
+	else if ("ipi-list"==NodeName)
+	{
+		ProcessItem(Node,m_d->m_IPIList);
 	}
 	else if ("disambiguation"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Disambiguation);
+		ProcessItem(Node,m_d->m_Disambiguation);
 	}
 	else if ("country"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Country);
+		ProcessItem(Node,m_d->m_Country);
 	}
 	else if ("life-span"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Lifespan);
+		ProcessItem(Node,m_d->m_Lifespan);
 	}
 	else if ("alias-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_AliasList);
+		ProcessItem(Node,m_d->m_AliasList);
 	}
 	else if ("release-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ReleaseList);
+		ProcessItem(Node,m_d->m_ReleaseList);
 	}
 	else if ("relation-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_RelationList);
+		ProcessRelationList(Node,m_d->m_RelationListList);
 	}
 	else if ("tag-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_TagList);
+		ProcessItem(Node,m_d->m_TagList);
 	}
 	else if ("user-tag-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_UserTagList);
+		ProcessItem(Node,m_d->m_UserTagList);
 	}
 	else if ("rating"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Rating);
+		ProcessItem(Node,m_d->m_Rating);
 	}
 	else if ("user-rating"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_UserRating);
+		ProcessItem(Node,m_d->m_UserRating);
 	}
 	else
 	{
 		std::cerr << "Unrecognised label element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CLabel::GetElementName()
@@ -299,6 +308,11 @@
 	return m_d->m_IPI;
 }
 
+MusicBrainz4::CIPIList *MusicBrainz4::CLabel::IPIList() const
+{
+	return m_d->m_IPIList;
+}
+
 std::string MusicBrainz4::CLabel::Disambiguation() const
 {
 	return m_d->m_Disambiguation;
@@ -326,7 +340,12 @@
 
 MusicBrainz4::CRelationList *MusicBrainz4::CLabel::RelationList() const
 {
-	return m_d->m_RelationList;
+	return m_d->m_RelationListList?m_d->m_RelationListList->Item(m_d->m_RelationListList->NumItems()-1):0;
+}
+
+MusicBrainz4::CRelationListList *MusicBrainz4::CLabel::RelationListList() const
+{
+	return m_d->m_RelationListList;
 }
 
 MusicBrainz4::CTagList *MusicBrainz4::CLabel::TagList() const
@@ -360,7 +379,10 @@
 	os << "\tName:           " << Name() << std::endl;
 	os << "\tSort name:      " << SortName() << std::endl;
 	os << "\tLabel code:     " << LabelCode() << std::endl;
-	os << "\tIPI:            " << IPI() << std::endl;
+
+	if (IPIList())
+		os << *IPIList() << std::endl;
+
 	os << "\tDisambiguation: " << Disambiguation() << std::endl;
 	os << "\tCountry:        " << Country() << std::endl;
 
@@ -373,8 +395,8 @@
 	if (ReleaseList())
 		os << *ReleaseList() << std::endl;
 
-	if (RelationList())
-		os << *RelationList() << std::endl;
+	if (RelationListList())
+		os << *RelationListList() << std::endl;
 
 	if (TagList())
 		os << *TagList() << std::endl;

=== modified file 'src/LabelInfo.cc'
--- src/LabelInfo.cc	2012-02-01 17:18:10 +0000
+++ src/LabelInfo.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: LabelInfo.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/LabelInfo.h"
 
 #include "musicbrainz4/Label.h"
@@ -92,37 +95,27 @@
 	return new CLabelInfo(*this);
 }
 
-bool MusicBrainz4::CLabelInfo::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+void MusicBrainz4::CLabelInfo::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
 {
-	bool RetVal=true;
-
 	std::cerr << "Unrecognised labelinfo attribute: '" << Name << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CLabelInfo::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CLabelInfo::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("catalog-number"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_CatalogNumber);
+		ProcessItem(Node,m_d->m_CatalogNumber);
 	}
 	else if ("label"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Label);
+		ProcessItem(Node,m_d->m_Label);
 	}
 	else
 	{
 		std::cerr << "Unrecognised label info element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CLabelInfo::GetElementName()

=== modified file 'src/Lifespan.cc'
--- src/Lifespan.cc	2012-02-01 17:18:10 +0000
+++ src/Lifespan.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Lifespan.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Lifespan.h"
 
 class MusicBrainz4::CLifespanPrivate
@@ -29,6 +32,7 @@
 	public:
 		std::string m_Begin;
 		std::string m_End;
+		std::string m_Ended;
 };
 
 MusicBrainz4::CLifespan::CLifespan(const XMLNode& Node)
@@ -58,6 +62,7 @@
 
 		m_d->m_Begin=Other.m_d->m_Begin;
 		m_d->m_End=Other.m_d->m_End;
+		m_d->m_Ended=Other.m_d->m_Ended;
 	}
 
 	return *this;
@@ -73,37 +78,31 @@
 	return new CLifespan(*this);
 }
 
-bool MusicBrainz4::CLifespan::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+void MusicBrainz4::CLifespan::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
 {
-	bool RetVal=true;
-
 	std::cerr << "Unrecognised lifespan attribute: '" << Name << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CLifespan::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CLifespan::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("begin"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Begin);
+		ProcessItem(Node,m_d->m_Begin);
 	}
 	else if ("end"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_End);
+		ProcessItem(Node,m_d->m_End);
+	}
+	else if ("ended"==NodeName)
+	{
+		ProcessItem(Node,m_d->m_Ended);
 	}
 	else
 	{
 		std::cerr << "Unrecognised lifespan element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CLifespan::GetElementName()
@@ -121,6 +120,11 @@
 	return m_d->m_End;
 }
 
+std::string MusicBrainz4::CLifespan::Ended() const
+{
+	return m_d->m_Ended;
+}
+
 std::ostream& MusicBrainz4::CLifespan::Serialise(std::ostream& os) const
 {
 	os << "Lifespan:" << std::endl;
@@ -129,6 +133,7 @@
 
 	os << "\tBegin: " << Begin() << std::endl;
 	os << "\tEnd:   " << End() << std::endl;
+	os << "\tEnded: " << Ended() << std::endl;
 
 	return os;
 }

=== modified file 'src/List.cc'
--- src/List.cc	2012-02-01 17:18:10 +0000
+++ src/List.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: List.cc 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/List.h"
 
 #include <vector>
@@ -97,10 +100,8 @@
 	return new CList(*this);
 }
 
-bool MusicBrainz4::CList::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CList::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("offset"==Name)
 		ProcessItem(Value,m_d->m_Offset);
 	else if ("count"==Name)
@@ -108,22 +109,14 @@
 	else
 	{
 		std::cerr << "Unrecognised list attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CList::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CList::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	std::cerr << "Unrecognised list element: '" << NodeName << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CList::GetElementName()

=== modified file 'src/Medium.cc'
--- src/Medium.cc	2012-02-01 17:18:10 +0000
+++ src/Medium.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Medium.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Medium.h"
 
 #include "musicbrainz4/Disc.h"
@@ -108,49 +111,39 @@
 	return new CMedium(*this);
 }
 
-bool MusicBrainz4::CMedium::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+void MusicBrainz4::CMedium::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
 {
-	bool RetVal=true;
-
 	std::cerr << "Unrecognised medium attribute: '" << Name << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CMedium::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CMedium::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("title"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Title);
+		ProcessItem(Node,m_d->m_Title);
 	}
 	else if ("position"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Position);
+		ProcessItem(Node,m_d->m_Position);
 	}
 	else if ("format"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Format);
+		ProcessItem(Node,m_d->m_Format);
 	}
 	else if ("disc-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_DiscList);
+		ProcessItem(Node,m_d->m_DiscList);
 	}
 	else if ("track-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_TrackList);
+		ProcessItem(Node,m_d->m_TrackList);
 	}
 	else
 	{
 		std::cerr << "Unrecognised medium element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CMedium::GetElementName()

=== modified file 'src/MediumList.cc'
--- src/MediumList.cc	2012-02-01 17:18:10 +0000
+++ src/MediumList.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: MediumList.cc 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/MediumList.h"
 
 #include "musicbrainz4/Medium.h"
@@ -78,27 +81,23 @@
 	return new CMediumList(*this);
 }
 
-bool MusicBrainz4::CMediumList::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CMediumList::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	return CListImpl<CMedium>::ParseAttribute(Name,Value);
+	CListImpl<CMedium>::ParseAttribute(Name,Value);
 }
 
-bool MusicBrainz4::CMediumList::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CMediumList::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("track-count"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_TrackCount);
+		ProcessItem(Node,m_d->m_TrackCount);
 	}
 	else
 	{
-		RetVal=CListImpl<CMedium>::ParseElement(Node);
+		CListImpl<CMedium>::ParseElement(Node);
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CMediumList::GetElementName()

=== modified file 'src/Message.cc'
--- src/Message.cc	2012-02-01 17:18:10 +0000
+++ src/Message.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Message.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Message.h"
 
 class MusicBrainz4::CMessagePrivate
@@ -71,31 +74,21 @@
 	return new CMessage(*this);
 }
 
-bool MusicBrainz4::CMessage::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+void MusicBrainz4::CMessage::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
 {
-	bool RetVal=true;
-
 	std::cerr << "Unrecognised message attribute: '" << Name << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CMessage::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CMessage::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if (NodeName=="text")
-		RetVal=ProcessItem(Node,m_d->m_Text);
+		ProcessItem(Node,m_d->m_Text);
 	else
 	{
 		std::cerr << "Unrecognised message element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CMessage::GetElementName()

=== modified file 'src/Metadata.cc'
--- src/Metadata.cc	2012-02-01 17:18:10 +0000
+++ src/Metadata.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Metadata.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Metadata.h"
 
 #include "musicbrainz4/Artist.h"
@@ -346,10 +349,8 @@
 	return new CMetadata(*this);
 }
 
-bool MusicBrainz4::CMetadata::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CMetadata::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("xmlns"==Name)
 		m_d->m_XMLNS=Value;
 	else if ("xmlns:ext"==Name)
@@ -361,133 +362,125 @@
 	else
 	{
 		std::cerr << "Unrecognised metadata attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CMetadata::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CMetadata::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("artist"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Artist);
+		ProcessItem(Node,m_d->m_Artist);
 	}
 	else if ("release"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Release);
+		ProcessItem(Node,m_d->m_Release);
 	}
 	else if ("release-group"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ReleaseGroup);
+		ProcessItem(Node,m_d->m_ReleaseGroup);
 	}
 	else if ("recording"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Recording);
+		ProcessItem(Node,m_d->m_Recording);
 	}
 	else if ("label"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Label);
+		ProcessItem(Node,m_d->m_Label);
 	}
 	else if ("work"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Work);
+		ProcessItem(Node,m_d->m_Work);
 	}
 	else if ("puid"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_PUID);
+		ProcessItem(Node,m_d->m_PUID);
 	}
 	else if ("isrc"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ISRC);
+		ProcessItem(Node,m_d->m_ISRC);
 	}
 	else if ("disc"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Disc);
+		ProcessItem(Node,m_d->m_Disc);
 	}
 	else if ("rating"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Rating);
+		ProcessItem(Node,m_d->m_Rating);
 	}
 	else if ("user-rating"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_UserRating);
+		ProcessItem(Node,m_d->m_UserRating);
 	}
 	else if ("collection"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Collection);
+		ProcessItem(Node,m_d->m_Collection);
 	}
 	else if ("artist-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ArtistList);
+		ProcessItem(Node,m_d->m_ArtistList);
 	}
 	else if ("release-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ReleaseList);
+		ProcessItem(Node,m_d->m_ReleaseList);
 	}
 	else if ("release-group-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ReleaseGroupList);
+		ProcessItem(Node,m_d->m_ReleaseGroupList);
 	}
 	else if ("recording-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_RecordingList);
+		ProcessItem(Node,m_d->m_RecordingList);
 	}
 	else if ("label-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_LabelList);
+		ProcessItem(Node,m_d->m_LabelList);
 	}
 	else if ("work-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_WorkList);
+		ProcessItem(Node,m_d->m_WorkList);
 	}
 	else if ("isrc-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ISRCList);
+		ProcessItem(Node,m_d->m_ISRCList);
 	}
 	else if ("annotation-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_AnnotationList);
+		ProcessItem(Node,m_d->m_AnnotationList);
 	}
 	else if ("cdstub-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_CDStubList);
+		ProcessItem(Node,m_d->m_CDStubList);
 	}
 	else if ("freedb-disc-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_FreeDBDiscList);
+		ProcessItem(Node,m_d->m_FreeDBDiscList);
 	}
 	else if ("tag-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_TagList);
+		ProcessItem(Node,m_d->m_TagList);
 	}
 	else if ("user-tag-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_UserTagList);
+		ProcessItem(Node,m_d->m_UserTagList);
 	}
 	else if ("collection-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_CollectionList);
+		ProcessItem(Node,m_d->m_CollectionList);
 	}
 	else if ("cdstub"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_CDStub);
+		ProcessItem(Node,m_d->m_CDStub);
 	}
 	else if ("message"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Message);
+		ProcessItem(Node,m_d->m_Message);
 	}
 	else
 	{
 		std::cerr << "Unrecognised metadata element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CMetadata::GetElementName()

=== modified file 'src/NameCredit.cc'
--- src/NameCredit.cc	2012-02-01 17:18:10 +0000
+++ src/NameCredit.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: NameCredit.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/NameCredit.h"
 
 #include "musicbrainz4/Artist.h"
@@ -94,43 +97,32 @@
 	return new CNameCredit(*this);
 }
 
-bool MusicBrainz4::CNameCredit::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CNameCredit::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("joinphrase"==Name)
 		m_d->m_JoinPhrase=Value;
 	else
 	{
 		std::cerr << "Unrecognised namecredit attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CNameCredit::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CNameCredit::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
-
 	std::string NodeName=Node.getName();
 
 	if ("name"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Name);
+		ProcessItem(Node,m_d->m_Name);
 	}
 	else if ("artist"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Artist);
+		ProcessItem(Node,m_d->m_Artist);
 	}
 	else
 	{
 		std::cerr << "Unrecognised name credit element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CNameCredit::GetElementName()

=== modified file 'src/NonMBTrack.cc'
--- src/NonMBTrack.cc	2012-02-01 17:18:10 +0000
+++ src/NonMBTrack.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: NonMBTrack.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/NonMBTrack.h"
 
 class MusicBrainz4::CNonMBTrackPrivate
@@ -80,41 +83,31 @@
 	return new CNonMBTrack(*this);
 }
 
-bool MusicBrainz4::CNonMBTrack::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+void MusicBrainz4::CNonMBTrack::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
 {
-	bool RetVal=true;
-
 	std::cerr << "Unrecognised non MB track attribute: '" << Name << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CNonMBTrack::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CNonMBTrack::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("title"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Title);
+		ProcessItem(Node,m_d->m_Title);
 	}
 	else if ("artist"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Artist);
+		ProcessItem(Node,m_d->m_Artist);
 	}
 	else if ("length"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Length);
+		ProcessItem(Node,m_d->m_Length);
 	}
 	else
 	{
 		std::cerr << "Unrecognised non MB track element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CNonMBTrack::GetElementName()

=== modified file 'src/PUID.cc'
--- src/PUID.cc	2012-02-01 17:18:10 +0000
+++ src/PUID.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: PUID.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/PUID.h"
 
 #include "musicbrainz4/RecordingList.h"
@@ -93,38 +96,28 @@
 	return new CPUID(*this);
 }
 
-bool MusicBrainz4::CPUID::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CPUID::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("id"==Name)
 		m_d->m_ID=Value;
 	else
 	{
 		std::cerr << "Unrecognised puid attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CPUID::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CPUID::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("recording-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_RecordingList);
+		ProcessItem(Node,m_d->m_RecordingList);
 	}
 	else
 	{
 		std::cerr << "Unrecognised PUID element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CPUID::GetElementName()

=== modified file 'src/Query.cc'
--- src/Query.cc	2012-02-01 17:18:10 +0000
+++ src/Query.cc	2012-06-25 05:56:21 +0000
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Query.cc 13266 2011-08-25 12:56:47Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -26,12 +26,16 @@
 //http://bugs.musicbrainz.org/browser/mmd-schema/trunk/schema/musicbrainz_mmd-2.0.rng
 //http://wiki.musicbrainz.org/Picard_Tag_Mapping
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Query.h"
 
 #include <sstream>
 #include <iostream>
 
 #include <string.h>
+#include <unistd.h>
 #include <sys/time.h>
 
 #include <ne_uri.h>
@@ -42,8 +46,6 @@
 #include "musicbrainz4/ReleaseList.h"
 #include "musicbrainz4/Release.h"
 
-#include "config.h"
-
 class MusicBrainz4::CQueryPrivate
 {
 	public:
@@ -141,14 +143,19 @@
 	try
 	{
 		int Ret=Fetch.Fetch(Query);
-		//std::cout << "Ret: " << Ret << std::endl;
+
+#ifdef _MB4_DEBUG_
+		std::cerr << "Ret: " << Ret << std::endl;
+#endif
 
 		if (Ret>0)
 		{
 			std::vector<unsigned char> Data=Fetch.Data();
 			std::string strData(Data.begin(),Data.end());
 
-			//std::cout << "Ret is '" << strData << "'" << std::endl;
+#ifdef _MB4_DEBUG_
+			std::cerr << "Ret is '" << strData << "'" << std::endl;
+#endif
 
 			XMLResults Results;
 			XMLNode TopNode=XMLNode::parseString(strData.c_str(), 0, &Results);
@@ -237,7 +244,9 @@
 	if (!Params.empty())
 		os << "?" << URLEncode(Params);
 
-	//std::cout << "Query is '" << os.str() << "'" << std::endl;
+#ifdef _MB4_DEBUG_
+	std::cerr << "Query is '" << os.str() << "'" << std::endl;
+#endif
 
 	return PerformQuery(os.str());
 }
@@ -364,16 +373,24 @@
 
 		try
 		{
-			//std::cout << "Collection " << Action << " Query is '" << Query << "'" << std::endl;
+#ifdef _MB4_DEBUG_
+			std::cerr << "Collection " << Action << " Query is '" << Query << "'" << std::endl;
+#endif
 
 			int Ret=Fetch.Fetch(Query,Action);
-			//std::cout << "Collection Ret: " << Ret << std::endl;
+
+#ifdef _MB4_DEBUG_
+			std::cerr << "Collection Ret: " << Ret << std::endl;
+#endif
+
 			if (Ret>0)
 			{
 				std::vector<unsigned char> Data=Fetch.Data();
 				std::string strData(Data.begin(),Data.end());
 
-				//std::cout << "Collection " << Action << " ret is '" << strData << "'" << std::endl;
+#ifdef _MB4_DEBUG_
+				std::cerr << "Collection " << Action << " ret is '" << strData << "'" << std::endl;
+#endif
 
 				XMLResults Results;
 				XMLNode TopNode=XMLNode::parseString(strData.c_str(), 0, &Results);

=== modified file 'src/Rating.cc'
--- src/Rating.cc	2012-02-01 17:18:10 +0000
+++ src/Rating.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Rating.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Rating.h"
 
 class MusicBrainz4::CRatingPrivate
@@ -84,33 +87,23 @@
 	return new CRating(*this);
 }
 
-bool MusicBrainz4::CRating::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CRating::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("votes-count"==Name)
 	{
-		RetVal=ProcessItem(Value,m_d->m_VotesCount);
+		ProcessItem(Value,m_d->m_VotesCount);
 	}
 	else
 	{
 		std::cerr << "Unrecognised rating attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CRating::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CRating::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	std::cerr << "Unrecognised rating attribute: '" << NodeName << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CRating::GetElementName()

=== modified file 'src/Recording.cc'
--- src/Recording.cc	2012-02-01 17:18:10 +0000
+++ src/Recording.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Recording.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Recording.h"
 
 #include "musicbrainz4/ArtistCredit.h"
@@ -33,7 +36,7 @@
 #include "musicbrainz4/PUID.h"
 #include "musicbrainz4/ISRCList.h"
 #include "musicbrainz4/ISRC.h"
-#include "musicbrainz4/RelationList.h"
+#include "musicbrainz4/RelationListList.h"
 #include "musicbrainz4/Relation.h"
 #include "musicbrainz4/TagList.h"
 #include "musicbrainz4/Tag.h"
@@ -49,7 +52,7 @@
 			m_ReleaseList(0),
 			m_PUIDList(0),
 			m_ISRCList(0),
-			m_RelationList(0),
+			m_RelationListList(0),
 			m_TagList(0),
 			m_UserTagList(0),
 			m_Rating(0),
@@ -65,7 +68,7 @@
 		CReleaseList *m_ReleaseList;
 		CPUIDList *m_PUIDList;
 		CISRCList *m_ISRCList;
-		CRelationList *m_RelationList;
+		CRelationListList *m_RelationListList;
 		CTagList *m_TagList;
 		CUserTagList *m_UserTagList;
 		CRating *m_Rating;
@@ -78,7 +81,7 @@
 {
 	if (!Node.isEmpty())
 	{
-		//std::cout << "Metadata node: " << std::endl << Node.createXMLString(true) << std::endl;
+		//std::cout << "Recording node: " << std::endl << Node.createXMLString(true) << std::endl;
 
 		Parse(Node);
 	}
@@ -116,8 +119,8 @@
 		if (Other.m_d->m_ISRCList)
 			m_d->m_ISRCList=new CISRCList(*Other.m_d->m_ISRCList);
 
-		if (Other.m_d->m_RelationList)
-			m_d->m_RelationList=new CRelationList(*Other.m_d->m_RelationList);
+		if (Other.m_d->m_RelationListList)
+			m_d->m_RelationListList=new CRelationListList(*Other.m_d->m_RelationListList);
 
 		if (Other.m_d->m_TagList)
 			m_d->m_TagList=new CTagList(*Other.m_d->m_TagList);
@@ -147,82 +150,72 @@
 	return new CRecording(*this);
 }
 
-bool MusicBrainz4::CRecording::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CRecording::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("id"==Name)
 		m_d->m_ID=Value;
 	else
 	{
 		std::cerr << "Unrecognised recording attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CRecording::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CRecording::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("title"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Title);
+		ProcessItem(Node,m_d->m_Title);
 	}
 	else if ("length"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Length);
+		ProcessItem(Node,m_d->m_Length);
 	}
 	else if ("disambiguation"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Disambiguation);
+		ProcessItem(Node,m_d->m_Disambiguation);
 	}
 	else if ("artist-credit"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ArtistCredit);
+		ProcessItem(Node,m_d->m_ArtistCredit);
 	}
 	else if ("release-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ReleaseList);
+		ProcessItem(Node,m_d->m_ReleaseList);
 	}
 	else if ("puid-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_PUIDList);
+		ProcessItem(Node,m_d->m_PUIDList);
 	}
 	else if ("isrc-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ISRCList);
+		ProcessItem(Node,m_d->m_ISRCList);
 	}
 	else if ("relation-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_RelationList);
+		ProcessRelationList(Node,m_d->m_RelationListList);
 	}
 	else if ("tag-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_TagList);
+		ProcessItem(Node,m_d->m_TagList);
 	}
 	else if ("user-tag-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_UserTagList);
+		ProcessItem(Node,m_d->m_UserTagList);
 	}
 	else if ("rating"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Rating);
+		ProcessItem(Node,m_d->m_Rating);
 	}
 	else if ("user-rating"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_UserRating);
+		ProcessItem(Node,m_d->m_UserRating);
 	}
 	else
 	{
 		std::cerr << "Unrecognised recording element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CRecording::GetElementName()
@@ -244,8 +237,8 @@
 	delete m_d->m_ISRCList;
 	m_d->m_ISRCList=0;
 
-	delete m_d->m_RelationList;
-	m_d->m_RelationList=0;
+	delete m_d->m_RelationListList;
+	m_d->m_RelationListList=0;
 
 	delete m_d->m_TagList;
 	m_d->m_TagList=0;
@@ -302,7 +295,12 @@
 
 MusicBrainz4::CRelationList *MusicBrainz4::CRecording::RelationList() const
 {
-	return m_d->m_RelationList;
+	return m_d->m_RelationListList?m_d->m_RelationListList->Item(m_d->m_RelationListList->NumItems()-1):0;
+}
+
+MusicBrainz4::CRelationListList *MusicBrainz4::CRecording::RelationListList() const
+{
+	return m_d->m_RelationListList;
 }
 
 MusicBrainz4::CTagList *MusicBrainz4::CRecording::TagList() const
@@ -348,8 +346,8 @@
 	if (ISRCList())
 		os << *ISRCList() << std::endl;
 
-	if (RelationList())
-		os << *RelationList() << std::endl;
+	if (RelationListList())
+		os << *RelationListList() << std::endl;
 
 	if (TagList())
 		os << *TagList() << std::endl;

=== modified file 'src/Relation.cc'
--- src/Relation.cc	2012-02-01 17:18:10 +0000
+++ src/Relation.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Relation.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Relation.h"
 
 #include "musicbrainz4/Artist.h"
@@ -156,78 +159,68 @@
 	return new CRelation(*this);
 }
 
-bool MusicBrainz4::CRelation::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CRelation::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("type"==Name)
 		m_d->m_Type=Value;
 	else
 	{
 		std::cerr << "Unrecognised relation attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CRelation::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CRelation::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("target"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Target);
+		ProcessItem(Node,m_d->m_Target);
 	}
 	else if ("direction"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Direction);
+		ProcessItem(Node,m_d->m_Direction);
 	}
 	else if ("attribute-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_AttributeList);
+		ProcessItem(Node,m_d->m_AttributeList);
 	}
 	else if ("begin"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Begin);
+		ProcessItem(Node,m_d->m_Begin);
 	}
 	else if ("end"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_End);
+		ProcessItem(Node,m_d->m_End);
 	}
 	else if ("artist"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Artist);
+		ProcessItem(Node,m_d->m_Artist);
 	}
 	else if ("release"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Release);
+		ProcessItem(Node,m_d->m_Release);
 	}
 	else if ("release-group"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ReleaseGroup);
+		ProcessItem(Node,m_d->m_ReleaseGroup);
 	}
 	else if ("recording"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Recording);
+		ProcessItem(Node,m_d->m_Recording);
 	}
 	else if ("label"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Label);
+		ProcessItem(Node,m_d->m_Label);
 	}
 	else if ("work"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Work);
+		ProcessItem(Node,m_d->m_Work);
 	}
 	else
 	{
 		std::cerr << "Unrecognised relation element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CRelation::GetElementName()

=== modified file 'src/RelationList.cc'
--- src/RelationList.cc	2012-02-01 17:18:10 +0000
+++ src/RelationList.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: RelationList.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/RelationList.h"
 
 #include "musicbrainz4/Relation.h"
@@ -73,21 +76,17 @@
 	return new CRelationList(*this);
 }
 
-bool MusicBrainz4::CRelationList::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CRelationList::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("target-type"==Name)
-		RetVal=ProcessItem(Name,m_d->m_TargetType);
+		ProcessItem(Value,m_d->m_TargetType);
 	else
-		RetVal=CListImpl<CRelation>::ParseAttribute(Name,Value);
-
-	return RetVal;
+		CListImpl<CRelation>::ParseAttribute(Name,Value);
 }
 
-bool MusicBrainz4::CRelationList::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CRelationList::ParseElement(const XMLNode& Node)
 {
-	return CListImpl<CRelation>::ParseElement(Node);
+	CListImpl<CRelation>::ParseElement(Node);
 }
 
 std::string MusicBrainz4::CRelationList::GetElementName()

=== added file 'src/RelationListList.cc'
--- src/RelationListList.cc	1970-01-01 00:00:00 +0000
+++ src/RelationListList.cc	2012-06-25 05:56:21 +0000
@@ -0,0 +1,148 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2011 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
+#include "musicbrainz4/RelationListList.h"
+
+#include <vector>
+
+#include "musicbrainz4/RelationList.h"
+#include "musicbrainz4/Relation.h"
+
+class MusicBrainz4::CRelationListListPrivate
+{
+	public:
+		CRelationListListPrivate()
+		:	m_ListGroup(0)
+		{
+		}
+
+		std::vector<CRelationList *> *m_ListGroup;
+};
+
+MusicBrainz4::CRelationListList::CRelationListList()
+:	m_d(new CRelationListListPrivate)
+{
+}
+
+MusicBrainz4::CRelationListList::CRelationListList(const CRelationListList& Other)
+:	m_d(new CRelationListListPrivate)
+{
+	*this=Other;
+}
+
+MusicBrainz4::CRelationListList& MusicBrainz4::CRelationListList::operator =(const CRelationListList& Other)
+{
+	if (this!=&Other)
+	{
+		Cleanup();
+
+		if (Other.m_d->m_ListGroup)
+		{
+			m_d->m_ListGroup=new std::vector<CRelationList *>;
+
+			for (std::vector<CRelationList *>::const_iterator ThisRelationList=Other.m_d->m_ListGroup->begin();ThisRelationList!=Other.m_d->m_ListGroup->end();++ThisRelationList)
+			{
+				CRelationList *RelationList=*ThisRelationList;
+				m_d->m_ListGroup->push_back(new CRelationList(*RelationList));
+			}
+		}
+	}
+
+	return *this;
+}
+
+MusicBrainz4::CRelationListList::~CRelationListList()
+{
+	Cleanup();
+
+	delete m_d;
+}
+
+void MusicBrainz4::CRelationListList::Cleanup()
+{
+	if (m_d->m_ListGroup)
+	{
+		for (std::vector<CRelationList *>::const_iterator ThisRelationList=m_d->m_ListGroup->begin();ThisRelationList!=m_d->m_ListGroup->end();++ThisRelationList)
+		{
+			CRelationList *RelationList=*ThisRelationList;
+
+			delete RelationList;
+		}
+	}
+
+	delete m_d->m_ListGroup;
+	m_d->m_ListGroup=0;
+}
+
+void MusicBrainz4::CRelationListList::Add(CRelationList *RelationList)
+{
+	if (!m_d->m_ListGroup)
+		m_d->m_ListGroup=new std::vector<CRelationList *>;
+
+	m_d->m_ListGroup->push_back(new CRelationList(*RelationList));
+}
+
+int MusicBrainz4::CRelationListList::NumItems() const
+{
+	int Ret=0;
+
+	if (m_d->m_ListGroup)
+		Ret=m_d->m_ListGroup->size();
+
+	return Ret;
+}
+
+MusicBrainz4::CRelationList *MusicBrainz4::CRelationListList::Item(int Item) const
+{
+	CRelationList *RelationList=0;
+
+	if (m_d->m_ListGroup && Item<(int)m_d->m_ListGroup->size())
+		RelationList=(*m_d->m_ListGroup)[Item];
+
+	return RelationList;
+}
+
+std::ostream& MusicBrainz4::CRelationListList::Serialise(std::ostream& os) const
+{
+	if (m_d->m_ListGroup && m_d->m_ListGroup->size()!=0)
+	{
+		os << "RelationLists:" << std::endl;
+
+		for (int count=0;count<NumItems();count++)
+		{
+			os << *Item(count) << std::endl;
+		}
+	}
+
+	return os;
+}
+
+std::ostream& operator << (std::ostream& os, const MusicBrainz4::CRelationListList& RelationListList)
+{
+	return RelationListList.Serialise(os);
+}
+

=== modified file 'src/Release.cc'
--- src/Release.cc	2012-02-01 17:18:10 +0000
+++ src/Release.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Release.cc 13385 2012-01-15 15:19:56Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Release.h"
 
 #include <string.h>
@@ -33,6 +36,7 @@
 #include "musicbrainz4/LabelInfoList.h"
 #include "musicbrainz4/LabelInfo.h"
 #include "musicbrainz4/RelationList.h"
+#include "musicbrainz4/RelationListList.h"
 #include "musicbrainz4/Relation.h"
 #include "musicbrainz4/MediumList.h"
 #include "musicbrainz4/Medium.h"
@@ -48,7 +52,7 @@
 			m_ReleaseGroup(0),
 			m_LabelInfoList(0),
 			m_MediumList(0),
-			m_RelationList(0),
+			m_RelationListList(0),
 			m_CollectionList(0)
 		{
 		}
@@ -68,7 +72,7 @@
 		std::string m_ASIN;
 		CLabelInfoList *m_LabelInfoList;
 		CMediumList *m_MediumList;
-		CRelationList *m_RelationList;
+		CRelationListList *m_RelationListList;
 		CCollectionList *m_CollectionList;
 };
 
@@ -126,8 +130,8 @@
 		if (Other.m_d->m_MediumList)
 			m_d->m_MediumList=new CMediumList(*Other.m_d->m_MediumList);
 
-		if (Other.m_d->m_RelationList)
-			m_d->m_RelationList=new CRelationList(*Other.m_d->m_RelationList);
+		if (Other.m_d->m_RelationListList)
+			m_d->m_RelationListList=new CRelationListList(*Other.m_d->m_RelationListList);
 
 		if (Other.m_d->m_CollectionList)
 			m_d->m_CollectionList=new CCollectionList(*Other.m_d->m_CollectionList);
@@ -160,8 +164,8 @@
 	delete m_d->m_MediumList;
 	m_d->m_MediumList=0;
 
-	delete m_d->m_RelationList;
-	m_d->m_RelationList=0;
+	delete m_d->m_RelationListList;
+	m_d->m_RelationListList=0;
 }
 
 MusicBrainz4::CRelease *MusicBrainz4::CRelease::Clone()
@@ -169,98 +173,88 @@
 	return new CRelease(*this);
 }
 
-bool MusicBrainz4::CRelease::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CRelease::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("id"==Name)
 		m_d->m_ID=Value;
 	else
 	{
 		std::cerr << "Unrecognised release attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CRelease::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CRelease::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("title"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Title);
+		ProcessItem(Node,m_d->m_Title);
 	}
 	else if ("status"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Status);
+		ProcessItem(Node,m_d->m_Status);
 	}
 	else if ("quality"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Quality);
+		ProcessItem(Node,m_d->m_Quality);
 	}
 	else if ("disambiguation"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Disambiguation);
+		ProcessItem(Node,m_d->m_Disambiguation);
 	}
 	else if ("packaging"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Packaging);
+		ProcessItem(Node,m_d->m_Packaging);
 	}
 	else if ("text-representation"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_TextRepresentation);
+		ProcessItem(Node,m_d->m_TextRepresentation);
 	}
 	else if ("artist-credit"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ArtistCredit);
+		ProcessItem(Node,m_d->m_ArtistCredit);
 	}
 	else if ("release-group"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ReleaseGroup);
+		ProcessItem(Node,m_d->m_ReleaseGroup);
 	}
 	else if ("date"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Date);
+		ProcessItem(Node,m_d->m_Date);
 	}
 	else if ("country"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Country);
+		ProcessItem(Node,m_d->m_Country);
 	}
 	else if ("barcode"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Barcode);
+		ProcessItem(Node,m_d->m_Barcode);
 	}
 	else if ("asin"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ASIN);
+		ProcessItem(Node,m_d->m_ASIN);
 	}
 	else if ("label-info-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_LabelInfoList);
+		ProcessItem(Node,m_d->m_LabelInfoList);
 	}
 	else if ("medium-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_MediumList);
+		ProcessItem(Node,m_d->m_MediumList);
 	}
 	else if ("relation-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_RelationList);
+		ProcessRelationList(Node,m_d->m_RelationListList);
 	}
 	else if ("collection-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_CollectionList);
+		ProcessItem(Node,m_d->m_CollectionList);
 	}
 	else
 	{
 		std::cerr << "Unrecognised release element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CRelease::GetElementName()
@@ -345,7 +339,12 @@
 
 MusicBrainz4::CRelationList *MusicBrainz4::CRelease::RelationList() const
 {
-	return m_d->m_RelationList;
+	return m_d->m_RelationListList?m_d->m_RelationListList->Item(m_d->m_RelationListList->NumItems()-1):0;
+}
+
+MusicBrainz4::CRelationListList *MusicBrainz4::CRelease::RelationListList() const
+{
+	return m_d->m_RelationListList;
 }
 
 MusicBrainz4::CCollectionList *MusicBrainz4::CRelease::CollectionList() const
@@ -404,8 +403,8 @@
 	if (MediumList())
 		os << *MediumList() << std::endl;
 
-	if (RelationList())
-		os << *RelationList() << std::endl;
+	if (RelationListList())
+		os << *RelationListList() << std::endl;
 
 	if (CollectionList())
 		os << *CollectionList() << std::endl;

=== modified file 'src/ReleaseGroup.cc'
--- src/ReleaseGroup.cc	2012-02-01 17:18:10 +0000
+++ src/ReleaseGroup.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: ReleaseGroup.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/ReleaseGroup.h"
 
 #include "musicbrainz4/ArtistCredit.h"
@@ -30,11 +33,14 @@
 #include "musicbrainz4/ReleaseList.h"
 #include "musicbrainz4/Release.h"
 #include "musicbrainz4/RelationList.h"
+#include "musicbrainz4/RelationListList.h"
 #include "musicbrainz4/Relation.h"
 #include "musicbrainz4/TagList.h"
 #include "musicbrainz4/Tag.h"
 #include "musicbrainz4/UserTagList.h"
 #include "musicbrainz4/UserTag.h"
+#include "musicbrainz4/SecondaryTypeList.h"
+#include "musicbrainz4/SecondaryType.h"
 
 class MusicBrainz4::CReleaseGroupPrivate
 {
@@ -42,26 +48,29 @@
 		CReleaseGroupPrivate()
 		:	m_ArtistCredit(0),
 			m_ReleaseList(0),
-			m_RelationList(0),
+			m_RelationListList(0),
 			m_TagList(0),
 			m_UserTagList(0),
 			m_Rating(0),
-			m_UserRating(0)
+			m_UserRating(0),
+			m_SecondaryTypeList(0)
 		{
 		}
 
 		std::string m_ID;
 		std::string m_Type;
+		std::string m_PrimaryType;
 		std::string m_Title;
 		std::string m_Disambiguation;
 		std::string m_FirstReleaseDate;
 		CArtistCredit *m_ArtistCredit;
 		CReleaseList *m_ReleaseList;
-		CRelationList *m_RelationList;
+		CRelationListList *m_RelationListList;
 		CTagList *m_TagList;
 		CUserTagList *m_UserTagList;
 		CRating *m_Rating;
 		CUserRating *m_UserRating;
+		CSecondaryTypeList *m_SecondaryTypeList;
 };
 
 MusicBrainz4::CReleaseGroup::CReleaseGroup(const XMLNode& Node)
@@ -93,6 +102,7 @@
 
 		m_d->m_ID=Other.m_d->m_ID;
 		m_d->m_Type=Other.m_d->m_Type;
+		m_d->m_PrimaryType=Other.m_d->m_PrimaryType;
 		m_d->m_Title=Other.m_d->m_Title;
 		m_d->m_Disambiguation=Other.m_d->m_Disambiguation;
 		m_d->m_FirstReleaseDate=Other.m_d->m_FirstReleaseDate;
@@ -103,8 +113,8 @@
 		if (Other.m_d->m_ReleaseList)
 			m_d->m_ReleaseList=new CReleaseList(*Other.m_d->m_ReleaseList);
 
-		if (Other.m_d->m_RelationList)
-			m_d->m_RelationList=new CRelationList(*Other.m_d->m_RelationList);
+		if (Other.m_d->m_RelationListList)
+			m_d->m_RelationListList=new CRelationListList(*Other.m_d->m_RelationListList);
 
 		if (Other.m_d->m_TagList)
 			m_d->m_TagList=new CTagList(*Other.m_d->m_TagList);
@@ -117,6 +127,9 @@
 
 		if (Other.m_d->m_UserRating)
 			m_d->m_UserRating=new CUserRating(*Other.m_d->m_UserRating);
+
+		if (Other.m_d->m_SecondaryTypeList)
+			m_d->m_SecondaryTypeList=new CSecondaryTypeList(*Other.m_d->m_SecondaryTypeList);
 	}
 
 	return *this;
@@ -137,8 +150,8 @@
 	delete m_d->m_ReleaseList;
 	m_d->m_ReleaseList=0;
 
-	delete m_d->m_RelationList;
-	m_d->m_RelationList=0;
+	delete m_d->m_RelationListList;
+	m_d->m_RelationListList=0;
 
 	delete m_d->m_TagList;
 	m_d->m_TagList=0;
@@ -151,6 +164,9 @@
 
 	delete m_d->m_UserRating;
 	m_d->m_UserRating=0;
+
+	delete m_d->m_SecondaryTypeList;
+	m_d->m_SecondaryTypeList=0;
 }
 
 MusicBrainz4::CReleaseGroup *MusicBrainz4::CReleaseGroup::Clone()
@@ -158,10 +174,8 @@
 	return new CReleaseGroup(*this);
 }
 
-bool MusicBrainz4::CReleaseGroup::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CReleaseGroup::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("id"==Name)
 		m_d->m_ID=Value;
 	else if ("type"==Name)
@@ -169,65 +183,65 @@
 	else
 	{
 		std::cerr << "Unrecognised releasegroup attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CReleaseGroup::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CReleaseGroup::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
-	if ("title"==NodeName)
-	{
-		RetVal=ProcessItem(Node,m_d->m_Title);
+	if ("primary-type"==NodeName)
+	{
+		ProcessItem(Node,m_d->m_PrimaryType);
+	}
+	else if ("title"==NodeName)
+	{
+		ProcessItem(Node,m_d->m_Title);
 	}
 	else if ("disambiguation"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Disambiguation);
+		ProcessItem(Node,m_d->m_Disambiguation);
 	}
 	else if ("first-release-date"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_FirstReleaseDate);
+		ProcessItem(Node,m_d->m_FirstReleaseDate);
 	}
 	else if ("artist-credit"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ArtistCredit);
+		ProcessItem(Node,m_d->m_ArtistCredit);
 	}
 	else if ("release-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ReleaseList);
+		ProcessItem(Node,m_d->m_ReleaseList);
 	}
 	else if ("relation-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_RelationList);
+		ProcessRelationList(Node,m_d->m_RelationListList);
 	}
 	else if ("tag-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_TagList);
+		ProcessItem(Node,m_d->m_TagList);
 	}
 	else if ("user-tag-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_UserTagList);
+		ProcessItem(Node,m_d->m_UserTagList);
 	}
 	else if ("rating"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Rating);
+		ProcessItem(Node,m_d->m_Rating);
 	}
 	else if ("user-rating"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_UserRating);
+		ProcessItem(Node,m_d->m_UserRating);
+	}
+	else if ("secondary-type-list"==NodeName)
+	{
+		ProcessItem(Node,m_d->m_SecondaryTypeList);
 	}
 	else
 	{
 		std::cerr << "Unrecognised release group element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CReleaseGroup::GetElementName()
@@ -245,6 +259,11 @@
 	return m_d->m_Type;
 }
 
+std::string MusicBrainz4::CReleaseGroup::PrimaryType() const
+{
+	return m_d->m_PrimaryType;
+}
+
 std::string MusicBrainz4::CReleaseGroup::Title() const
 {
 	return m_d->m_Title;
@@ -272,7 +291,12 @@
 
 MusicBrainz4::CRelationList *MusicBrainz4::CReleaseGroup::RelationList() const
 {
-	return m_d->m_RelationList;
+	return m_d->m_RelationListList?m_d->m_RelationListList->Item(m_d->m_RelationListList->NumItems()-1):0;
+}
+
+MusicBrainz4::CRelationListList *MusicBrainz4::CReleaseGroup::RelationListList() const
+{
+	return m_d->m_RelationListList;
 }
 
 MusicBrainz4::CTagList *MusicBrainz4::CReleaseGroup::TagList() const
@@ -295,6 +319,11 @@
 	return m_d->m_UserRating;
 }
 
+MusicBrainz4::CSecondaryTypeList *MusicBrainz4::CReleaseGroup::SecondaryTypeList() const
+{
+	return m_d->m_SecondaryTypeList;
+}
+
 std::ostream& MusicBrainz4::CReleaseGroup::Serialise(std::ostream& os) const
 {
 	os << "Release group:" << std::endl;
@@ -302,7 +331,7 @@
 	CEntity::Serialise(os);
 
 	os << "\tID:                 " << ID() << std::endl;
-	os << "\tType:               " << Type() << std::endl;
+	os << "\tPrimaryType:        " << PrimaryType() << std::endl;
 	os << "\tTitle:              " << Title() << std::endl;
 	os << "\tDisambiguation:     " << Disambiguation() << std::endl;
 	os << "\tFirst release date: " << FirstReleaseDate() << std::endl;
@@ -313,8 +342,8 @@
 	if (ReleaseList())
 		os << *ReleaseList() << std::endl;
 
-	if (RelationList())
-		os << *RelationList() << std::endl;
+	if (RelationListList())
+		os << *RelationListList() << std::endl;
 
 	if (TagList())
 		os << *TagList() << std::endl;
@@ -328,6 +357,9 @@
 	if (UserRating())
 		os << *UserRating() << std::endl;
 
+	if (SecondaryTypeList())
+		os << *SecondaryTypeList() << std::endl;
+
 	return os;
 }
 

=== added file 'src/SecondaryType.cc'
--- src/SecondaryType.cc	1970-01-01 00:00:00 +0000
+++ src/SecondaryType.cc	2012-06-25 05:56:21 +0000
@@ -0,0 +1,124 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2012 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
+#include "musicbrainz4/SecondaryType.h"
+
+
+class MusicBrainz4::CSecondaryTypePrivate
+{
+	public:
+		CSecondaryTypePrivate()
+		{
+		}
+
+		std::string m_SecondaryType;
+};
+
+MusicBrainz4::CSecondaryType::CSecondaryType(const XMLNode& Node)
+:	CEntity(),
+	m_d(new CSecondaryTypePrivate)
+{
+	if (!Node.isEmpty())
+	{
+		//std::cout << "SecondaryType node: " << std::endl << Node.createXMLString(true) << std::endl;
+
+		Parse(Node);
+
+		if (Node.getText())
+			ProcessItem(Node,m_d->m_SecondaryType);
+	}
+}
+
+MusicBrainz4::CSecondaryType::CSecondaryType(const CSecondaryType& Other)
+:	CEntity(),
+	m_d(new CSecondaryTypePrivate)
+{
+	*this=Other;
+}
+
+MusicBrainz4::CSecondaryType& MusicBrainz4::CSecondaryType::operator =(const CSecondaryType& Other)
+{
+	if (this!=&Other)
+	{
+		Cleanup();
+
+		CEntity::operator =(Other);
+
+		m_d->m_SecondaryType=Other.m_d->m_SecondaryType;
+	}
+
+	return *this;
+}
+
+MusicBrainz4::CSecondaryType::~CSecondaryType()
+{
+	Cleanup();
+
+	delete m_d;
+}
+
+void MusicBrainz4::CSecondaryType::Cleanup()
+{
+}
+
+MusicBrainz4::CSecondaryType *MusicBrainz4::CSecondaryType::Clone()
+{
+	return new CSecondaryType(*this);
+}
+
+void MusicBrainz4::CSecondaryType::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+{
+	std::cerr << "Unrecognised secondary type attribute: '" << Name << "'" << std::endl;
+}
+
+void MusicBrainz4::CSecondaryType::ParseElement(const XMLNode& Node)
+{
+	std::string NodeName=Node.getName();
+
+	std::cerr << "Unrecognised secondary type element: '" << NodeName << "'" << std::endl;
+}
+
+std::string MusicBrainz4::CSecondaryType::GetElementName()
+{
+	return "secondary-type";
+}
+
+std::string MusicBrainz4::CSecondaryType::SecondaryType() const
+{
+	return m_d->m_SecondaryType;
+}
+
+std::ostream& MusicBrainz4::CSecondaryType::Serialise(std::ostream& os) const
+{
+	os << "Secondary Type:" << std::endl;
+
+	CEntity::Serialise(os);
+
+	os << "\tSecondaryType: " << SecondaryType() << std::endl;
+
+	return os;
+}

=== added file 'src/SecondaryTypeList.cc'
--- src/SecondaryTypeList.cc	1970-01-01 00:00:00 +0000
+++ src/SecondaryTypeList.cc	2012-06-25 05:56:21 +0000
@@ -0,0 +1,101 @@
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2012 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
+#include "musicbrainz4/SecondaryTypeList.h"
+
+#include "musicbrainz4/SecondaryType.h"
+
+class MusicBrainz4::CSecondaryTypeListPrivate
+{
+	public:
+		CSecondaryTypeListPrivate()
+		{
+		}
+};
+
+MusicBrainz4::CSecondaryTypeList::CSecondaryTypeList(const XMLNode& Node)
+:	CListImpl<CSecondaryType>(),
+	m_d(new CSecondaryTypeListPrivate)
+{
+	if (!Node.isEmpty())
+	{
+		//std::cout << "SecondaryTypeList node: " << std::endl << Node.createXMLString(true) << std::endl;
+
+		Parse(Node);
+	}
+}
+
+MusicBrainz4::CSecondaryTypeList::CSecondaryTypeList(const CSecondaryTypeList& Other)
+:	CListImpl<CSecondaryType>(),
+	m_d(new CSecondaryTypeListPrivate)
+{
+	*this=Other;
+}
+
+MusicBrainz4::CSecondaryTypeList& MusicBrainz4::CSecondaryTypeList::operator =(const CSecondaryTypeList& Other)
+{
+	if (this!=&Other)
+	{
+		CListImpl<CSecondaryType>::operator =(Other);
+	}
+
+	return *this;
+}
+
+MusicBrainz4::CSecondaryTypeList::~CSecondaryTypeList()
+{
+	delete m_d;
+}
+
+MusicBrainz4::CSecondaryTypeList *MusicBrainz4::CSecondaryTypeList::Clone()
+{
+	return new CSecondaryTypeList(*this);
+}
+
+void MusicBrainz4::CSecondaryTypeList::ParseAttribute(const std::string& Name, const std::string& Value)
+{
+	CListImpl<CSecondaryType>::ParseAttribute(Name,Value);
+}
+
+void MusicBrainz4::CSecondaryTypeList::ParseElement(const XMLNode& Node)
+{
+	CListImpl<CSecondaryType>::ParseElement(Node);
+}
+
+std::string MusicBrainz4::CSecondaryTypeList::GetElementName()
+{
+	return "secondary-type-list";
+}
+
+std::ostream& MusicBrainz4::CSecondaryTypeList::Serialise(std::ostream& os) const
+{
+	os << "Secondary type list:" << std::endl;
+
+	CListImpl<CSecondaryType>::Serialise(os);
+
+	return os;
+}

=== modified file 'src/Tag.cc'
--- src/Tag.cc	2012-02-01 17:18:10 +0000
+++ src/Tag.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Tag.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Tag.h"
 
 class MusicBrainz4::CTagPrivate
@@ -78,40 +81,30 @@
 	return new CTag(*this);
 }
 
-bool MusicBrainz4::CTag::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CTag::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("count"==Name)
 	{
-		RetVal=ProcessItem(Value,m_d->m_Count);
+		ProcessItem(Value,m_d->m_Count);
 	}
 	else
 	{
 		std::cerr << "Unrecognised tag attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CTag::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CTag::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("name"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Name);
+		ProcessItem(Node,m_d->m_Name);
 	}
 	else
 	{
 		std::cerr << "Unrecognised tag element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CTag::GetElementName()

=== modified file 'src/TextRepresentation.cc'
--- src/TextRepresentation.cc	2012-02-01 17:18:10 +0000
+++ src/TextRepresentation.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: TextRepresentation.cc 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/TextRepresentation.h"
 
 class MusicBrainz4::CTextRepresentationPrivate
@@ -73,37 +76,27 @@
 	return new CTextRepresentation(*this);
 }
 
-bool MusicBrainz4::CTextRepresentation::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+void MusicBrainz4::CTextRepresentation::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
 {
-	bool RetVal=true;
-
 	std::cerr << "Unrecognised textrepresentation attribute: '" << Name << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CTextRepresentation::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CTextRepresentation::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("language"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Language);
+		ProcessItem(Node,m_d->m_Language);
 	}
 	else if ("script"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Script);
+		ProcessItem(Node,m_d->m_Script);
 	}
 	else
 	{
 		std::cerr << "Unrecognised textrepresentation element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CTextRepresentation::GetElementName()

=== modified file 'src/Track.cc'
--- src/Track.cc	2012-02-01 17:18:10 +0000
+++ src/Track.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Track.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Track.h"
 
 #include "musicbrainz4/Recording.h"
@@ -43,6 +46,7 @@
 		CRecording *m_Recording;
 		int m_Length;
 		CArtistCredit *m_ArtistCredit;
+		std::string m_Number;
 };
 
 MusicBrainz4::CTrack::CTrack(const XMLNode& Node)
@@ -82,6 +86,8 @@
 
 		if (Other.m_d->m_ArtistCredit)
 			m_d->m_ArtistCredit=new CArtistCredit(*Other.m_d->m_ArtistCredit);
+
+		m_d->m_Number=Other.m_d->m_Number;
 	}
 
 	return *this;
@@ -108,49 +114,43 @@
 	return new CTrack(*this);
 }
 
-bool MusicBrainz4::CTrack::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+void MusicBrainz4::CTrack::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
 {
-	bool RetVal=true;
-
 	std::cerr << "Unrecognised track attribute: '" << Name << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CTrack::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CTrack::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("position"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Position);
+		ProcessItem(Node,m_d->m_Position);
 	}
 	else if ("title"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Title);
+		ProcessItem(Node,m_d->m_Title);
 	}
 	else if ("recording"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Recording);
+		ProcessItem(Node,m_d->m_Recording);
 	}
 	else if ("length"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Length);
+		ProcessItem(Node,m_d->m_Length);
 	}
 	else if ("artist-credit"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ArtistCredit);
+		ProcessItem(Node,m_d->m_ArtistCredit);
+	}
+	else if ("number"==NodeName)
+	{
+		ProcessItem(Node,m_d->m_Number);
 	}
 	else
 	{
 		std::cerr << "Unrecognised track element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CTrack::GetElementName()
@@ -183,6 +183,11 @@
 	return m_d->m_ArtistCredit;
 }
 
+std::string MusicBrainz4::CTrack::Number() const
+{
+	return m_d->m_Number;
+}
+
 std::ostream& MusicBrainz4::CTrack::Serialise(std::ostream& os) const
 {
 	os << "Track:" << std::endl;
@@ -200,5 +205,7 @@
 	if (ArtistCredit())
 		os << *ArtistCredit() << std::endl;
 
+	os << "\tNumber:   " << Number() << std::endl;
+
 	return os;
 }

=== modified file 'src/UserRating.cc'
--- src/UserRating.cc	2012-02-01 17:18:10 +0000
+++ src/UserRating.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: UserRating.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/UserRating.h"
 
 class MusicBrainz4::CUserRatingPrivate
@@ -81,26 +84,16 @@
 	return new CUserRating(*this);
 }
 
-bool MusicBrainz4::CUserRating::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+void MusicBrainz4::CUserRating::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
 {
-	bool RetVal=true;
-
 	std::cerr << "Unrecognised userrating attribute: '" << Name << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CUserRating::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CUserRating::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string Name=Node.getName();
 
 	std::cerr << "Unrecognised userrating element: '" << Name << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CUserRating::GetElementName()

=== modified file 'src/UserTag.cc'
--- src/UserTag.cc	2012-02-01 17:18:10 +0000
+++ src/UserTag.cc	2012-06-25 05:56:21 +0000
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: UserTag.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/UserTag.h"
 
 class MusicBrainz4::CUserTagPrivate
@@ -71,33 +74,23 @@
 	return new CUserTag(*this);
 }
 
-bool MusicBrainz4::CUserTag::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
+void MusicBrainz4::CUserTag::ParseAttribute(const std::string& Name, const std::string& /*Value*/)
 {
-	bool RetVal=true;
-
 	std::cerr << "Unrecognised usertag attribute: '" << Name << "'" << std::endl;
-	RetVal=false;
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CUserTag::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CUserTag::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("name"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Name);
+		ProcessItem(Node,m_d->m_Name);
 	}
 	else
 	{
 		std::cerr << "Unrecognised UserTag element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CUserTag::GetElementName()

=== modified file 'src/Work.cc'
--- src/Work.cc	2012-02-01 17:18:10 +0000
+++ src/Work.cc	2012-06-25 05:56:21 +0000
@@ -18,30 +18,37 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: Work.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include "musicbrainz4/Work.h"
 
 #include "musicbrainz4/ArtistCredit.h"
 #include "musicbrainz4/AliasList.h"
 #include "musicbrainz4/Alias.h"
 #include "musicbrainz4/RelationList.h"
+#include "musicbrainz4/RelationListList.h"
 #include "musicbrainz4/TagList.h"
 #include "musicbrainz4/Tag.h"
 #include "musicbrainz4/UserTagList.h"
 #include "musicbrainz4/UserTag.h"
 #include "musicbrainz4/Rating.h"
 #include "musicbrainz4/UserRating.h"
+#include "musicbrainz4/ISWC.h"
+#include "musicbrainz4/ISWCList.h"
 
 class MusicBrainz4::CWorkPrivate
 {
 	public:
 		CWorkPrivate()
 		:	m_ArtistCredit(0),
+			m_ISWCList(0),
 			m_AliasList(0),
-			m_RelationList(0),
+			m_RelationListList(0),
 			m_TagList(0),
 			m_UserTagList(0),
 			m_Rating(0),
@@ -53,14 +60,15 @@
 		std::string m_Type;
 		std::string m_Title;
 		CArtistCredit *m_ArtistCredit;
-		std::string m_ISWC;
+		CISWCList *m_ISWCList;
 		std::string m_Disambiguation;
 		CAliasList *m_AliasList;
-		CRelationList *m_RelationList;
+		CRelationListList *m_RelationListList;
 		CTagList *m_TagList;
 		CUserTagList *m_UserTagList;
 		CRating *m_Rating;
 		CUserRating *m_UserRating;
+		std::string m_Language;
 };
 
 MusicBrainz4::CWork::CWork(const XMLNode& Node)
@@ -97,14 +105,16 @@
 		if (Other.m_d->m_ArtistCredit)
 			m_d->m_ArtistCredit=new CArtistCredit(*Other.m_d->m_ArtistCredit);
 
-		m_d->m_ISWC=Other.m_d->m_ISWC;
+		if (Other.m_d->m_ISWCList)
+			m_d->m_ISWCList=new CISWCList(*Other.m_d->m_ISWCList);
+
 		m_d->m_Disambiguation=Other.m_d->m_Disambiguation;
 
 		if (Other.m_d->m_AliasList)
 			m_d->m_AliasList=new CAliasList(*Other.m_d->m_AliasList);
 
-		if (Other.m_d->m_RelationList)
-			m_d->m_RelationList=new CRelationList(*Other.m_d->m_RelationList);
+		if (Other.m_d->m_RelationListList)
+			m_d->m_RelationListList=new CRelationListList(*Other.m_d->m_RelationListList);
 
 		if (Other.m_d->m_TagList)
 			m_d->m_TagList=new CTagList(*Other.m_d->m_TagList);
@@ -117,6 +127,8 @@
 
 		if (Other.m_d->m_UserRating)
 			m_d->m_UserRating=new CUserRating(*Other.m_d->m_UserRating);
+
+		m_d->m_Language=Other.m_d->m_Language;
 	}
 
 	return *this;
@@ -134,11 +146,14 @@
 	delete m_d->m_ArtistCredit;
 	m_d->m_ArtistCredit=0;
 
+	delete m_d->m_ISWCList;
+	m_d->m_ISWCList=0;
+
 	delete m_d->m_AliasList;
 	m_d->m_AliasList=0;
 
-	delete m_d->m_RelationList;
-	m_d->m_RelationList=0;
+	delete m_d->m_RelationListList;
+	m_d->m_RelationListList=0;
 
 	delete m_d->m_TagList;
 	m_d->m_TagList=0;
@@ -158,76 +173,68 @@
 	return new CWork(*this);
 }
 
-bool MusicBrainz4::CWork::ParseAttribute(const std::string& Name, const std::string& Value)
+void MusicBrainz4::CWork::ParseAttribute(const std::string& Name, const std::string& Value)
 {
-	bool RetVal=true;
-
 	if ("id"==Name)
 		m_d->m_ID=Value;
 	else if ("type"==Name)
 		m_d->m_Type=Value;
 	else
-	{
 		std::cerr << "Unrecognised work attribute: '" << Name << "'" << std::endl;
-		RetVal=false;
-	}
-
-	return RetVal;
 }
 
-bool MusicBrainz4::CWork::ParseElement(const XMLNode& Node)
+void MusicBrainz4::CWork::ParseElement(const XMLNode& Node)
 {
-	bool RetVal=true;
-
 	std::string NodeName=Node.getName();
 
 	if ("title"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Title);
+		ProcessItem(Node,m_d->m_Title);
 	}
 	else if ("artist-credit"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ArtistCredit);
+		ProcessItem(Node,m_d->m_ArtistCredit);
 	}
-	else if ("iswc"==NodeName)
+	else if ("iswc-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_ISWC);
+		ProcessItem(Node,m_d->m_ISWCList);
 	}
 	else if ("disambiguation"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Disambiguation);
+		ProcessItem(Node,m_d->m_Disambiguation);
 	}
 	else if ("alias-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_AliasList);
+		ProcessItem(Node,m_d->m_AliasList);
 	}
 	else if ("relation-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_RelationList);
+		ProcessRelationList(Node,m_d->m_RelationListList);
 	}
 	else if ("tag-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_TagList);
+		ProcessItem(Node,m_d->m_TagList);
 	}
 	else if ("user-tag-list"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_UserTagList);
+		ProcessItem(Node,m_d->m_UserTagList);
 	}
 	else if ("rating"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_Rating);
+		ProcessItem(Node,m_d->m_Rating);
 	}
 	else if ("user-rating"==NodeName)
 	{
-		RetVal=ProcessItem(Node,m_d->m_UserRating);
+		ProcessItem(Node,m_d->m_UserRating);
+	}
+	else if ("language"==NodeName)
+	{
+		ProcessItem(Node,m_d->m_Language);
 	}
 	else
 	{
 		std::cerr << "Unrecognised work element: '" << NodeName << "'" << std::endl;
-		RetVal=false;
 	}
-
-	return RetVal;
 }
 
 std::string MusicBrainz4::CWork::GetElementName()
@@ -257,7 +264,17 @@
 
 std::string MusicBrainz4::CWork::ISWC() const
 {
-	return m_d->m_ISWC;
+	std::string RetISWC;
+
+	if (m_d && m_d->m_ISWCList && m_d->m_ISWCList->NumItems()!=0)
+		RetISWC=m_d->m_ISWCList->Item(0)->ISWC();
+
+	return RetISWC;
+}
+
+MusicBrainz4::CISWCList *MusicBrainz4::CWork::ISWCList() const
+{
+	return m_d->m_ISWCList;
 }
 
 std::string MusicBrainz4::CWork::Disambiguation() const
@@ -272,7 +289,12 @@
 
 MusicBrainz4::CRelationList *MusicBrainz4::CWork::RelationList() const
 {
-	return m_d->m_RelationList;
+	return m_d->m_RelationListList?m_d->m_RelationListList->Item(m_d->m_RelationListList->NumItems()-1):0;
+}
+
+MusicBrainz4::CRelationListList *MusicBrainz4::CWork::RelationListList() const
+{
+	return m_d->m_RelationListList;
 }
 
 MusicBrainz4::CTagList *MusicBrainz4::CWork::TagList() const
@@ -295,6 +317,11 @@
 	return m_d->m_UserRating;
 }
 
+std::string MusicBrainz4::CWork::Language() const
+{
+	return m_d->m_Language;
+}
+
 std::ostream& MusicBrainz4::CWork::Serialise(std::ostream& os) const
 {
 	os << "Work:" << std::endl;
@@ -308,14 +335,16 @@
 	if (ArtistCredit())
 		os << ArtistCredit() << std::endl;
 
-	os << "\tISWC:           " << ISWC() << std::endl;
+	if (ISWCList())
+		os << ISWCList() << std::endl;
+
 	os << "\tDisambiguation: " << Disambiguation() << std::endl;
 
 	if (AliasList())
 		os << AliasList() << std::endl;
 
-	if (RelationList())
-		os << RelationList() << std::endl;
+	if (RelationListList())
+		os << RelationListList() << std::endl;
 
 	if (TagList())
 		os << TagList() << std::endl;
@@ -329,6 +358,8 @@
 	if (UserRating())
 		os << UserRating() << std::endl;
 
+	os << "\tLanguage:       " << Language() << std::endl;
+
 	return os;
 }
 

=== modified file 'src/c-int-medium-defines.inc'
--- src/c-int-medium-defines.inc	2012-02-01 17:18:10 +0000
+++ src/c-int-medium-defines.inc	2012-06-25 05:56:21 +0000
@@ -10,7 +10,7 @@
    modify it under the terms of v2 of the GNU Lesser General Public
    License as published by the Free Software Foundation.
 
-   Flactag is distributed in the hope that it will be useful,
+   libmusicbrainz4 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
    Lesser General Public License for more details.
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: c-int-medium-defines.inc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'src/c-int-medium-source.inc'
--- src/c-int-medium-source.inc	2012-02-01 17:18:10 +0000
+++ src/c-int-medium-source.inc	2012-06-25 05:56:21 +0000
@@ -10,7 +10,7 @@
    modify it under the terms of v2 of the GNU Lesser General Public
    License as published by the Free Software Foundation.
 
-   Flactag is distributed in the hope that it will be useful,
+   libmusicbrainz4 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
    Lesser General Public License for more details.
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: c-int-medium-source.inc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'src/c-int-query-defines.inc'
--- src/c-int-query-defines.inc	2012-02-01 17:18:10 +0000
+++ src/c-int-query-defines.inc	2012-06-25 05:56:21 +0000
@@ -10,7 +10,7 @@
    modify it under the terms of v2 of the GNU Lesser General Public
    License as published by the Free Software Foundation.
 
-   Flactag is distributed in the hope that it will be useful,
+   libmusicbrainz4 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
    Lesser General Public License for more details.
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: c-int-query-defines.inc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'src/c-int-query-source.inc'
--- src/c-int-query-source.inc	2012-02-01 17:18:10 +0000
+++ src/c-int-query-source.inc	2012-06-25 05:56:21 +0000
@@ -10,7 +10,7 @@
    modify it under the terms of v2 of the GNU Lesser General Public
    License as published by the Free Software Foundation.
 
-   Flactag is distributed in the hope that it will be useful,
+   libmusicbrainz4 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
    Lesser General Public License for more details.
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: c-int-query-source.inc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'src/c-int-release-defines.inc'
--- src/c-int-release-defines.inc	2012-02-01 17:18:10 +0000
+++ src/c-int-release-defines.inc	2012-06-25 05:56:21 +0000
@@ -10,7 +10,7 @@
    modify it under the terms of v2 of the GNU Lesser General Public
    License as published by the Free Software Foundation.
 
-   Flactag is distributed in the hope that it will be useful,
+   libmusicbrainz4 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
    Lesser General Public License for more details.
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: c-int-release-defines.inc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'src/c-int-release-source.inc'
--- src/c-int-release-source.inc	2012-02-01 17:18:10 +0000
+++ src/c-int-release-source.inc	2012-06-25 05:56:21 +0000
@@ -10,7 +10,7 @@
    modify it under the terms of v2 of the GNU Lesser General Public
    License as published by the Free Software Foundation.
 
-   Flactag is distributed in the hope that it will be useful,
+   libmusicbrainz4 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
    Lesser General Public License for more details.
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: c-int-release-source.inc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 

=== modified file 'src/c-int-source-funcs.inc'
--- src/c-int-source-funcs.inc	2012-02-01 17:18:10 +0000
+++ src/c-int-source-funcs.inc	2012-06-25 05:56:21 +0000
@@ -10,7 +10,7 @@
    modify it under the terms of v2 of the GNU Lesser General Public
    License as published by the Free Software Foundation.
 
-   Flactag is distributed in the hope that it will be useful,
+   libmusicbrainz4 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
    Lesser General Public License for more details.
@@ -18,10 +18,14 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: c-int-source-funcs.inc 13254 2011-08-09 09:29:20Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "musicbrainz4/defines.h"
+
+#include "musicbrainz4/Query.h"
+
 #include "musicbrainz4/mb4_c.h"
 
 #include <string.h>
@@ -43,8 +47,11 @@
 #include "musicbrainz4/DiscList.h"
 #include "musicbrainz4/FreeDBDisc.h"
 #include "musicbrainz4/FreeDBDiscList.h"
+#include "musicbrainz4/IPI.h"
 #include "musicbrainz4/ISRC.h"
 #include "musicbrainz4/ISRCList.h"
+#include "musicbrainz4/ISWC.h"
+#include "musicbrainz4/ISWCList.h"
 #include "musicbrainz4/Label.h"
 #include "musicbrainz4/LabelList.h"
 #include "musicbrainz4/LabelInfo.h"
@@ -60,15 +67,17 @@
 #include "musicbrainz4/NonMBTrackList.h"
 #include "musicbrainz4/PUID.h"
 #include "musicbrainz4/PUIDList.h"
-#include "musicbrainz4/Query.h"
 #include "musicbrainz4/Rating.h"
 #include "musicbrainz4/Recording.h"
 #include "musicbrainz4/RecordingList.h"
 #include "musicbrainz4/Relation.h"
 #include "musicbrainz4/RelationList.h"
+#include "musicbrainz4/RelationListList.h"
 #include "musicbrainz4/Release.h"
 #include "musicbrainz4/ReleaseGroup.h"
 #include "musicbrainz4/ReleaseGroupList.h"
+#include "musicbrainz4/SecondaryType.h"
+#include "musicbrainz4/SecondaryTypeList.h"
 #include "musicbrainz4/Tag.h"
 #include "musicbrainz4/TagList.h"
 #include "musicbrainz4/TextRepresentation.h"

=== modified file 'src/cinterface.xml'
--- src/cinterface.xml	2012-02-01 17:18:10 +0000
+++ src/cinterface.xml	2012-06-25 05:56:21 +0000
@@ -11,7 +11,7 @@
    modify it under the terms of v2 of the GNU Lesser General Public
    License as published by the Free Software Foundation.
 
-   Flactag is distributed in the hope that it will be useful,
+   libmusicbrainz4 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
    Lesser General Public License for more details.
@@ -19,7 +19,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: cinterface.xml 13385 2012-01-15 15:19:56Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------
 -->
@@ -45,6 +45,8 @@
 #ifndef _MUSICBRAINZ4_MB_C_H
 #define _MUSICBRAINZ4_MB_C_H
 
+#include "musicbrainz4/defines.h"
+
 #ifdef __cplusplus
 extern "C"
 {
@@ -56,6 +58,11 @@
 	<class name="alias">
 		<property name="locale" type="string"/>
 		<property name="text" type="string"/>
+		<property name="sortname" uppername="SortName" type="string"/>
+		<property name="type" type="string"/>
+		<property name="primary" type="string"/>
+		<property name="begindate" uppername="BeginDate" type="string"/>
+		<property name="enddate" uppername="EndDate" type="string"/>
 	</class>
 	<class name="annotation">
 		<property name="type" type="string"/>
@@ -71,6 +78,7 @@
 		<property name="gender" type="string"/>
 		<property name="country" type="string"/>
 		<property name="disambiguation" type="string"/>
+		<property name="ipi" uppername="IPI" type="ipi"/>
 		<property name="lifespan" type="object"/>
 		<property name="aliaslist" uppername="AliasList" type="object"/>
 		<property name="recordinglist" uppername="RecordingList" type="object"/>
@@ -78,7 +86,7 @@
 		<property name="releasegrouplist" uppername="ReleaseGroupList" type="object"/>
 		<property name="labellist" uppername="LabelList" type="object"/>
 		<property name="worklist" uppername="WorkList" type="object"/>
-		<property name="relationlist" uppername="RelationList" type="object"/>
+		<property name="relationlist" uppername="RelationList" type="relationlist"/>
 		<property name="taglist" uppername="TagList" type="object"/>
 		<property name="usertaglist" uppername="UserTagList" type="object"/>
 		<property name="rating" type="object"/>
@@ -117,22 +125,29 @@
 		<property name="year" type="string"/>
 		<property name="nonmbtracklist" uppername="NonMBTrackList" type="object"/>
 	</class>
+	<class name="ipi" uppername="IPI">
+		<property name="ipi" uppername="IPI" type="string"/>
+	</class>
 	<class name="isrc" uppername="ISRC">
 		<property name="id" uppername="ID" type="string"/>
 		<property name="recordinglist" uppername="RecordingList" type="object"/>
 	</class>
+	<class name="iswc" uppername="ISWC">
+		<property name="iswc" uppername="ISWC" type="string"/>
+	</class>
 	<class name="label">
 		<property name="id" uppername="ID" type="string"/>
 		<property name="type" type="string"/>
 		<property name="name" type="string"/>
 		<property name="sortname" uppername="SortName" type="string"/>
 		<property name="labelcode" uppername="LabelCode" type="integer"/>
+		<property name="ipi" uppername="IPI" type="ipi"/>
 		<property name="disambiguation" type="string"/>
 		<property name="country" type="string"/>
 		<property name="lifespan" type="object"/>
 		<property name="aliaslist" uppername="AliasList" type="object"/>
 		<property name="releaselist" uppername="ReleaseList" type="object"/>
-		<property name="relationlist" uppername="RelationList" type="object"/>
+		<property name="relationlist" uppername="RelationList" type="relationlist"/>
 		<property name="taglist" uppername="TagList" type="object"/>
 		<property name="usertaglist" uppername="UserTagList" type="object"/>
 		<property name="rating" type="object"/>
@@ -145,6 +160,7 @@
 	<class name="lifespan">
 		<property name="begin" type="string"/>
 		<property name="end" type="string"/>
+		<property name="ended" type="string"/>
 	</class>
 	<class name="medium">
 		<property name="title" type="string"/>
@@ -209,6 +225,7 @@
 	<class name="query">
 		<property name="lasthttpcode" uppername="LastHTTPCode" type="integer"/>
 		<property name="lasterrormessage" uppername="LastErrorMessage" type="string"/>
+		<property name="version" type="string"/>
 	</class>
 	<boilerplate target="include" file="c-int-query-defines.inc"/>
 	<boilerplate target="source" file="c-int-query-source.inc"/>
@@ -225,7 +242,7 @@
 		<property name="releaselist" uppername="ReleaseList" type="object"/>
 		<property name="puidlist" uppername="PUIDList" type="object"/>
 		<property name="isrclist" uppername="ISRCList" type="object"/>
-		<property name="relationlist" uppername="RelationList" type="object"/>
+		<property name="relationlist" uppername="RelationList" type="relationlist"/>
 		<property name="taglist" uppername="TagList" type="object"/>
 		<property name="usertaglist" uppername="UserTagList" type="object"/>
 		<property name="rating" type="object"/>
@@ -261,24 +278,29 @@
 		<property name="asin" uppername="ASIN" type="string"/>
 		<property name="labelinfolist" uppername="LabelInfoList" type="object"/>
 		<property name="mediumlist" uppername="MediumList" type="object"/>
-		<property name="relationlist" uppername="RelationList" type="object"/>
+		<property name="relationlist" uppername="RelationList" type="relationlist"/>
 		<property name="collectionlist" uppername="CollectionList" type="object"/>
 	</class>
 	<boilerplate target="include" file="c-int-release-defines.inc"/>
 	<boilerplate target="source" file="c-int-release-source.inc"/>
 	<class name="releasegroup" uppername="ReleaseGroup">
 		<property name="id" uppername="ID" type="string"/>
-		<property name="type" type="string"/>
+		<property name="type" type="string" deprecated="true" replacement="mb4_releasegroup_get_primarytype"/>
+		<property name="primarytype" uppername="PrimaryType" type="string"/>
 		<property name="title" type="string"/>
 		<property name="disambiguation" type="string"/>
 		<property name="firstreleasedate" uppername="FirstReleaseDate" type="string"/>
 		<property name="artistcredit" uppername="ArtistCredit" type="object"/>
 		<property name="releaselist" uppername="ReleaseList" type="object"/>
-		<property name="relationlist" uppername="RelationList" type="object"/>
+		<property name="relationlist" uppername="RelationList" type="relationlist"/>
 		<property name="taglist" uppername="TagList" type="object"/>
 		<property name="usertaglist" uppername="UserTagList" type="object"/>
 		<property name="rating" type="object"/>
 		<property name="userrating" uppername="UserRating" type="object"/>
+		<property name="secondarytypelist" uppername="SecondaryTypeList" type="object"/>
+	</class>
+	<class name="secondarytype" uppername="SecondaryType">
+		<property name="secondarytype" uppername="SecondaryType" type="string"/>
 	</class>
 	<class name="tag">
 		<property name="count" type="integer"/>
@@ -294,6 +316,7 @@
 		<property name="recording" type="object"/>
 		<property name="length" type="integer"/>
 		<property name="artistcredit" uppername="ArtistCredit" type="object"/>
+		<property name="number" type="string"/>
 	</class>
 	<class name="userrating" uppername="UserRating">
 		<property name="userrating" uppername="UserRating" type="integer"/>
@@ -306,14 +329,15 @@
 		<property name="type" type="string"/>
 		<property name="title" type="string"/>
 		<property name="artistcredit" uppername="ArtistCredit" type="object"/>
-		<property name="iswc" uppername="ISWC" type="string"/>
+		<property name="iswc" uppername="ISWC" type="iswc"/>
 		<property name="disambiguation" type="string"/>
 		<property name="aliaslist" uppername="AliasList" type="object"/>
-		<property name="relationlist" uppername="RelationList" type="object"/>
+		<property name="relationlist" uppername="RelationList" type="relationlist"/>
 		<property name="taglist" uppername="TagList" type="object"/>
 		<property name="usertaglist" uppername="UserTagList" type="object"/>
 		<property name="rating" type="object"/>
 		<property name="userrating" uppername="UserRating" type="object"/>
+		<property name="language" type="string"/>
 	</class>
 	<list name="alias"/>
 	<list name="annotation"/>
@@ -323,7 +347,9 @@
 	<list name="collection"/>
 	<list name="disc"/>
 	<list name="freedbdisc" uppername="FreeDBDisc"/>
+	<list name="ipi" uppername="IPI"/>
 	<list name="isrc" uppername="ISRC"/>
+	<list name="iswc" uppername="ISWC"/>
 	<list name="label"/>
 	<list name="labelinfo" uppername="LabelInfo"/>
 	<list name="medium">
@@ -336,8 +362,10 @@
 	<list name="relation">
 		<property name="targettype" uppername="TargetType" type="string"/>
 	</list>
+	<list name="relationlist" uppername="RelationList"/>
 	<list name="release"/>
 	<list name="releasegroup" uppername="ReleaseGroup"/>
+	<list name="secondarytype" uppername="SecondaryType"/>
 	<list name="tag"/>
 	<list name="track"/>
 	<list name="usertag" uppername="UserTag"/>

=== modified file 'src/make-c-interface.cc'
--- src/make-c-interface.cc	2012-02-01 17:18:10 +0000
+++ src/make-c-interface.cc	2012-06-25 05:56:21 +0000
@@ -10,7 +10,7 @@
    modify it under the terms of v2 of the GNU Lesser General Public
    License as published by the Free Software Foundation.
 
-   Flactag is distributed in the hope that it will be useful,
+   libmusicbrainz4 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
    Lesser General Public License for more details.
@@ -18,10 +18,13 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: make-c-interface.cc 13259 2011-08-10 12:02:50Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
+#include "config.h"
+#include "musicbrainz4/defines.h"
+
 #include <iostream>
 #include <fstream>
 #include <sstream>
@@ -312,16 +315,46 @@
 
 					if ("string"==PropertyType)
 					{
+						bool Deprecated=false;
+						std::string Replacement;
+
+						if (ChildNode.isAttributeSet("deprecated"))
+						{
+							std::string StrDeprecated=ChildNode.getAttribute("deprecated");
+
+							if (StrDeprecated=="true")
+								Deprecated=true;
+
+							if (ChildNode.isAttributeSet("replacement"))
+								Replacement=ChildNode.getAttribute("replacement");
+						}
+
 						Include << "/**" << std::endl;
-						Include << " * @see MusicBrainz4::C" << UpperName << "::" << PropertyUpperName << std::endl;
+						Include << " * ";
+						if (Deprecated)
+							Include << "@deprecated ";
+
+						Include << "@see MusicBrainz4::C" << UpperName << "::" << PropertyUpperName << std::endl;
 						Include << " *" << std::endl;
+
+						if (Deprecated)
+						{
+ 							Include << " * <b>This method is deprecated, please use #" << Replacement << "</b>" << std::endl;
+ 							Include << " *" << std::endl;
+ 						}
+
 						Include << " * @param " << UpperName << " #Mb4" << UpperName << " object" << std::endl;
 						Include << " * @param str Returned string" << std::endl;
 						Include << " * @param len Number of characters available in return string" << std::endl;
 						Include << " *" << std::endl;
 						Include << " * @return The number of characters in the string to copy (not including terminating NULL)" << std::endl;
 						Include << " */" << std::endl;
-						Include << "  int mb4_" << LowerName << "_get_" << PropertyLowerName << "(Mb4" << UpperName << " " << UpperName << ", char *str, int len);" << std::endl;
+						Include << "  ";
+
+						if (Deprecated)
+							Include << "LIBMB4_DEPRECATED(" << Replacement << ") ";
+
+						Include << "int mb4_" << LowerName << "_get_" << PropertyLowerName << "(Mb4" << UpperName << " " << UpperName << ", char *str, int len);" << std::endl;
 						Include << std::endl;
 
 						Source << "  MB4_C_STR_GETTER(" << UpperName << "," << LowerName << "," << PropertyUpperName << "," << PropertyLowerName << ")" << std::endl;
@@ -368,6 +401,94 @@
 
 						Source << "  MB4_C_OBJ_GETTER(" << UpperName << "," << LowerName << "," << PropertyUpperName << "," << PropertyLowerName << ")" << std::endl;
 					}
+					else if ("relationlist"==PropertyType)
+					{
+						Include << "/**" << std::endl;
+						Include << " * @deprecated @see MusicBrainz4::C" << UpperName << "::" << PropertyUpperName << std::endl;
+						Include << " *" << std::endl;
+						Include << " * <b>This method is deprecated, please use #mb4_" << LowerName << "_get_" << PropertyLowerName << "list</b>" << std::endl;
+						Include << " *" << std::endl;
+						Include << " * @param " << UpperName << " #Mb4" << UpperName << " object" << std::endl;
+						Include << " *" << std::endl;
+						Include << " * @return #Mb4" << PropertyUpperName << " object" << std::endl;
+						Include << " */" << std::endl;
+						Include << " LIBMB4_DEPRECATED(mb4_" << LowerName << "_get_" << PropertyLowerName << "list) Mb4" << PropertyUpperName << " mb4_" << LowerName << "_get_" << PropertyLowerName << "(Mb4" << UpperName << " " << UpperName << ");" << std::endl;
+						Include << std::endl;
+
+						Source << "  MB4_C_OBJ_GETTER(" << UpperName << "," << LowerName << "," << PropertyUpperName << "," << PropertyLowerName << ")" << std::endl;
+
+						Include << "/**" << std::endl;
+						Include << " * @see MusicBrainz4::C" << UpperName << "::" << PropertyUpperName << "List" << std::endl;
+						Include << " *" << std::endl;
+						Include << " * @param " << UpperName << " #Mb4" << UpperName << "List object" << std::endl;
+						Include << " *" << std::endl;
+						Include << " * @return #Mb4" << PropertyUpperName << "List object" << std::endl;
+						Include << " */" << std::endl;
+						Include << "  Mb4" << PropertyUpperName << "List mb4_" << LowerName << "_get_" << PropertyLowerName << "list(Mb4" << UpperName << " " << UpperName << ");" << std::endl;
+						Include << std::endl;
+
+						Source << "  MB4_C_OBJ_GETTER(" << UpperName << "," << LowerName << "," << PropertyUpperName << "List," << PropertyLowerName << "list)" << std::endl;
+					}
+					else if ("iswc"==PropertyType)
+					{
+						Include << "/**" << std::endl;
+						Include << " * @deprecated @see MusicBrainz4::C" << UpperName << "::" << PropertyUpperName << std::endl;
+						Include << " *" << std::endl;
+						Include << " * <b>This method is deprecated, please use #mb4_" << LowerName << "_get_" << PropertyLowerName << "list</b>" << std::endl;
+						Include << " *" << std::endl;
+						Include << " * @param " << UpperName << " #Mb4" << UpperName << " object" << std::endl;
+						Include << " * @param str Returned string" << std::endl;
+						Include << " * @param len Number of characters available in return string" << std::endl;
+						Include << " *" << std::endl;
+						Include << " * @return The number of characters in the string to copy (not including terminating NULL)" << std::endl;
+						Include << " */" << std::endl;
+						Include << "  LIBMB4_DEPRECATED(mb4_" << LowerName << "_get_" << PropertyLowerName << "list) int mb4_" << LowerName << "_get_" << PropertyLowerName << "(Mb4" << UpperName << " " << UpperName << ", char *str, int len);" << std::endl;
+						Include << std::endl;
+
+						Source << "  MB4_C_STR_GETTER(" << UpperName << "," << LowerName << "," << PropertyUpperName << "," << PropertyLowerName << ")" << std::endl;
+
+						Include << "/**" << std::endl;
+						Include << " * @see MusicBrainz4::C" << UpperName << "::" << PropertyUpperName << "List" << std::endl;
+						Include << " *" << std::endl;
+						Include << " * @param " << UpperName << " #Mb4" << UpperName << "List object" << std::endl;
+						Include << " *" << std::endl;
+						Include << " * @return #Mb4" << PropertyUpperName << "List object" << std::endl;
+						Include << " */" << std::endl;
+						Include << "  Mb4" << PropertyUpperName << "List mb4_" << LowerName << "_get_" << PropertyLowerName << "list(Mb4" << UpperName << " " << UpperName << ");" << std::endl;
+						Include << std::endl;
+
+						Source << "  MB4_C_OBJ_GETTER(" << UpperName << "," << LowerName << "," << PropertyUpperName << "List," << PropertyLowerName << "list)" << std::endl;
+					}
+					else if ("ipi"==PropertyType)
+					{
+						Include << "/**" << std::endl;
+						Include << " * @deprecated @see MusicBrainz4::C" << UpperName << "::" << PropertyUpperName << std::endl;
+						Include << " *" << std::endl;
+						Include << " * <b>This method is deprecated, please use #mb4_" << LowerName << "_get_" << PropertyLowerName << "list</b>" << std::endl;
+						Include << " *" << std::endl;
+						Include << " * @param " << UpperName << " #Mb4" << UpperName << " object" << std::endl;
+						Include << " * @param str Returned string" << std::endl;
+						Include << " * @param len Number of characters available in return string" << std::endl;
+						Include << " *" << std::endl;
+						Include << " * @return The number of characters in the string to copy (not including terminating NULL)" << std::endl;
+						Include << " */" << std::endl;
+						Include << "  LIBMB4_DEPRECATED(mb4_" << LowerName << "_get_" << PropertyLowerName << "list) int mb4_" << LowerName << "_get_" << PropertyLowerName << "(Mb4" << UpperName << " " << UpperName << ", char *str, int len);" << std::endl;
+						Include << std::endl;
+
+						Source << "  MB4_C_STR_GETTER(" << UpperName << "," << LowerName << "," << PropertyUpperName << "," << PropertyLowerName << ")" << std::endl;
+
+						Include << "/**" << std::endl;
+						Include << " * @see MusicBrainz4::C" << UpperName << "::" << PropertyUpperName << "List" << std::endl;
+						Include << " *" << std::endl;
+						Include << " * @param " << UpperName << " #Mb4" << UpperName << "List object" << std::endl;
+						Include << " *" << std::endl;
+						Include << " * @return #Mb4" << PropertyUpperName << "List object" << std::endl;
+						Include << " */" << std::endl;
+						Include << "  Mb4" << PropertyUpperName << "List mb4_" << LowerName << "_get_" << PropertyLowerName << "list(Mb4" << UpperName << " " << UpperName << ");" << std::endl;
+						Include << std::endl;
+
+						Source << "  MB4_C_OBJ_GETTER(" << UpperName << "," << LowerName << "," << PropertyUpperName << "List," << PropertyLowerName << "list)" << std::endl;
+					}
 					else
 					{
 						std::cerr << "Unexpected property type: '" << PropertyType << "'" << std::endl;

=== removed directory 'test-data'
=== removed file 'test-data/README'
--- test-data/README	2012-02-01 17:18:10 +0000
+++ test-data/README	1970-01-01 00:00:00 +0000
@@ -1,13 +0,0 @@
-MusicBrainz Web Service XML Examples
-------------------------------------
-
-This directory contains example XML code for testing an implementation.
-
-Implementations MUST be able to parse the XML in the 'valid' directory.
-It is perfect, schema-compliant XML.
-
-The 'invalid' directory contains all kinds of invalid XML. Implementations
-are not expected to parse those files. They MAY, however.
-
---
-$Id: README 33 2006-01-30 09:50:19Z matt $

=== removed directory 'test-data/invalid'
=== removed directory 'test-data/invalid/artist'
=== removed file 'test-data/invalid/artist/basic_1.xml'
--- test-data/invalid/artist/basic_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/invalid/artist/basic_1.xml	1970-01-01 00:00:00 +0000
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- invalid, not wellformed -->
-
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-
-    <artist-list>
-	<artist>   <!-- tag not closed -->
-
-    </artist-list>
-
-</metadata>

=== removed file 'test-data/invalid/artist/basic_2.xml'
--- test-data/invalid/artist/basic_2.xml	2012-02-01 17:18:10 +0000
+++ test-data/invalid/artist/basic_2.xml	1970-01-01 00:00:00 +0000
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- namespace error -->
-
-<mmd:metadata xmlns:mmd="http://musicbrainz.org/ns/mmd-1.0#">
-
-    <mmd:artist-list>
-	<xy:artist id="UUID"/>   <!-- undeclared namespace -->
-
-    </mmd:artist-list>
-
-</mmd:metadata>

=== removed file 'test-data/invalid/artist/empty_1.xml'
=== removed file 'test-data/invalid/artist/empty_2.xml'
--- test-data/invalid/artist/empty_2.xml	2012-02-01 17:18:10 +0000
+++ test-data/invalid/artist/empty_2.xml	1970-01-01 00:00:00 +0000
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- invalid, not even the root element is present -->

=== removed file 'test-data/invalid/artist/empty_3.xml'
--- test-data/invalid/artist/empty_3.xml	2012-02-01 17:18:10 +0000
+++ test-data/invalid/artist/empty_3.xml	1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- invalid, namespace is missing -->
-
-<metadata>
-
-</metadata>

=== removed file 'test-data/invalid/artist/ratings_1.xml'
--- test-data/invalid/artist/ratings_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/invalid/artist/ratings_1.xml	1970-01-01 00:00:00 +0000
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <artist>
-	<rating votes-count="-1">2</rating>
-    </artist>
-</metadata>

=== removed file 'test-data/invalid/artist/ratings_2.xml'
--- test-data/invalid/artist/ratings_2.xml	2012-02-01 17:18:10 +0000
+++ test-data/invalid/artist/ratings_2.xml	1970-01-01 00:00:00 +0000
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <artist>
-	<user-rating>2.5</user-rating>
-    </artist>
-</metadata>

=== removed file 'test-data/invalid/artist/search_result_1.xml'
--- test-data/invalid/artist/search_result_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/invalid/artist/search_result_1.xml	1970-01-01 00:00:00 +0000
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- invalid, because "score" must not be in the default namespace -->
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <artist-list>
-        <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" score="100">
-            <name>Tori Amos</name>
-            <sort-name>Amos, Tori</sort-name>
-            <life-span begin="1963-08-22"/>
-        </artist>
-    </artist-list>
-</metadata>

=== removed file 'test-data/invalid/artist/tags_1.xml'
--- test-data/invalid/artist/tags_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/invalid/artist/tags_1.xml	1970-01-01 00:00:00 +0000
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <artist>
-	<tag-list><tag count="-1">foo</tag></tag-list>
-    </artist>
-</metadata>

=== removed directory 'test-data/invalid/release'
=== removed directory 'test-data/invalid/track'
=== removed directory 'test-data/valid'
=== removed directory 'test-data/valid/artist'
=== removed file 'test-data/valid/artist/Tchaikovsky-1.xml'
--- test-data/valid/artist/Tchaikovsky-1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/artist/Tchaikovsky-1.xml	1970-01-01 00:00:00 +0000
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <artist id="9ddd7abc-9e1b-471d-8031-583bc6bc8be9" type="Person">
-        <name>Пётр Ильич Чайковский</name>
-        <sort-name>Tchaikovsky, Pyotr Ilyich</sort-name>
-        <life-span begin="1840-05-07" end="1893-11-06"/>
-        <alias-list>
-            <alias>Tchaikovsky</alias>  
-            <alias>Peter Ilyich Tchaikovsky</alias>  
-            <alias>Peter Tchaikovsky</alias>  
-            <alias>Tschaikowsky</alias>  
-            <alias>Peter Tschaikowsky</alias>  
-            <alias>Piotr Ilyich Tchaikovsky</alias>  
-            <alias>Piotr Tchaikovsky</alias>  
-            <alias>Peter Iljitsch Tschaikowsky</alias>  
-            <alias>Tchaikovsky, Peter Ilyich</alias>  
-            <alias>Peter Ilyitch Tchaikovsky</alias>  
-            <alias>Pjotr Ilyich Tchaikovsky</alias>  
-            <alias>Peter I. Tschaikowsky</alias>  
-            <alias>Pyotr Tchaikovsky</alias>  
-            <alias>P. I. Tchaikovsky</alias>  
-            <alias>Peter Ilich Tchaikovsky</alias>  
-            <alias>Tchaikovsky, P.I.</alias>  
-            <alias>Tsjaikovski</alias>  
-            <alias>Tchaikovsky, Pyotr Ilyich</alias>  
-            <alias>Tjajkovskij</alias>  
-            <alias>Piotr Ilyitch Tchaikovsky</alias>  
-            <alias>Tsjajkovskij</alias>  
-            <alias>Peter Ilyich Tchaikovski</alias>  
-            <alias>Peter I. Tchaikovsky</alias>  
-            <alias>Tchaikovsky, Peter I.</alias>  
-            <alias>Tchaikowsky</alias>  
-            <alias>Peter Ilyich Tschaikowsky</alias>  
-            <alias>Peter Iljitsch Tschaikowski</alias>  
-            <alias>Pyotr Il'Yich Tchaikovsky</alias>  
-            <alias>Tchiakovsky, Pyotr Ilich (1840-1893)</alias>  
-            <alias>Tchaikovsky, Peter Ilyich (1840-93)</alias>  
-            <alias>Tchaikovsky, Peter Ilyitch</alias>  
-            <alias>Pyotr Ilyitch Tchaikovsky</alias>  
-            <alias>Tsaikovski</alias>  
-            <alias>Pytor Ilyich Tchaikovsky</alias>  
-            <alias>Piotr Ilyich Tchaikowsky</alias>  
-            <alias>Tchaikovsky - Philharmonic Orchestra</alias>  
-            <alias>Peter Iljitsch Tschaikowsky (1840 - 1893)</alias>  
-            <alias>Peter Tschaikovsky</alias>  
-            <alias>Peter Ilych Tschaikowsky</alias>  
-            <alias>Pyotr II'yich Tchaikovsky</alias>  
-            <alias>Pytor Tchaikovsky</alias>  
-            <alias>Pyotr Ilyich Tchaikovsky</alias>  
-            <alias>Чайковский, Петр Ильич</alias>  
-            <alias>Чайковский, Пётр Ильич</alias>  
-            <alias>Петр Ильич Чайковский</alias>  
-            <alias>Пётр Ильич Чайковский</alias>  
-            <alias>Tchaikovsky, Peter Il'yich</alias>  
-            <alias>Tchaikovsky, Pjotr Ilyich (1840 - 1893)  	</alias>  
-            <alias>Piotr Illitch Tchaïkovsky</alias>  
-            <alias>Piotr Ilic Ciaikovsky</alias>  
-            <alias>Pyotr Illyich Tchaikovsky</alias>  
-            <alias>Tchaikovsky, Piotr Ilich (1840-1893)</alias>  
-            <alias>Peter Ilyich Tchaikovshy</alias>  
-            <alias>Pyotr Ilyich Tchaikovsly</alias>  
-            <alias>Peter Ilych Tchaikovsky</alias>  
-            <alias>차이코프스키</alias>  
-            <alias>Piotr Ilitch Tchaïkovski</alias>  
-            <alias>Chaikovsky, P. I.</alias>  
-            <alias>Pjotr Iljitsch Tschaikowsky</alias>  
-            <alias>Ciaikosvsky</alias>  
-            <alias>Tchaikovsky 1841-1893</alias>  
-            <alias>Tchaïkovki</alias>  
-            <alias>Piotr Ilych Chaikovsky</alias>  
-            <alias>Pjotr Iljitsj Tsjaikovski</alias>  
-            <alias>Pyotor Ilyich Tschaikovsky</alias>  
-            <alias>Peter Iljitsj Tsjaikovski</alias>  
-            <alias>P. I. Tchaikovskij</alias>  
-            <alias>Piotr Ilich Tchaikovsky</alias>  
-            <alias>Peter Iljitsch Tchaikovsky</alias>  
-            <alias>Tchaikovisky</alias>  
-            <alias>Tchaikovsy</alias>  
-            <alias>Tchailovisky</alias>  
-            <alias>Tchaikovskyes</alias>  
-            <alias>Tchaikovskys</alias>  
-            <alias>Tchaikoskvy</alias>  
-            <alias>Piotr Il'yich Tchaikovsky</alias>  
-            <alias>Tchaikowski</alias>  
-            <alias>Piotr Iljič Čajkovskij</alias>  
-            <alias>Tchaikivsky</alias>  
-            <alias>Pyotor Tchaikovsky</alias>  
-        </alias-list>
-    </artist>
-</metadata>

=== removed file 'test-data/valid/artist/Tchaikovsky-2.xml'
--- test-data/valid/artist/Tchaikovsky-2.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/artist/Tchaikovsky-2.xml	1970-01-01 00:00:00 +0000
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <artist id="9ddd7abc-9e1b-471d-8031-583bc6bc8be9" type="Person">
-        <name>Пётр Ильич Чайковский</name>
-        <tag-list>
-            <tag count="100">classical</tag>  
-            <tag count="60">russian</tag>  
-            <tag count="40">romantic era</tag>  
-            <tag count="120">composer</tag>  
-        </tag-list>
-        <user-tag-list>
-            <user-tag>classical</user-tag>  
-            <user-tag>russian</user-tag>  
-        </user-tag-list>
-        <rating votes-count="10">4.5</rating>
-        <user-rating>3</user-rating>
-    </artist>
-</metadata>

=== removed file 'test-data/valid/artist/Tori_Amos_1.xml'
--- test-data/valid/artist/Tori_Amos_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/artist/Tori_Amos_1.xml	1970-01-01 00:00:00 +0000
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
-        <name>Tori Amos</name>
-        <sort-name>Amos, Tori</sort-name>
-        <life-span begin="1963-08-22"/>
-    </artist>
-</metadata>

=== removed file 'test-data/valid/artist/Tori_Amos_2.xml'
--- test-data/valid/artist/Tori_Amos_2.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/artist/Tori_Amos_2.xml	1970-01-01 00:00:00 +0000
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
-        <name>Tori Amos</name>
-        <sort-name>Amos, Tori</sort-name>
-        <life-span begin="1963-08-22"/>
-        <release-list>
-            <release id="a7ccb022-f437-4492-8eee-8f85d85cdb96" type="Album Official">
-                <title>Strange Little Girls</title>
-                <asin>B00005NKYQ</asin>
-                <release-group id="a69a1574-dfe3-3e2a-b499-d26d5e916041"/>
-                <release-event-list>
-                    <event date="2001-09-14" country="BE"/>
-                    <event date="2001-09-14" country="FI"/>
-                    <event date="2001-09-14" country="IE"/>
-                    <event date="2001-09-14" country="IT"/>
-                    <event date="2001-09-14" country="NL"/>
-                    <event date="2001-09-17" country="AU"/>
-                    <event date="2001-09-17" country="DE"/>
-                    <event date="2001-09-17" country="GB"/>
-                    <event date="2001-09-18" country="CA"/>
-                    <event date="2001-09-18" country="SE"/>
-                    <event date="2001-09-18" country="US"/>
-                    <event date="2001-09-27" country="JP"/>
-                </release-event-list>
-                <disc-list count="3"/>
-            </release>
-            <release id="9cbf7040-dbdc-403c-940f-7562d9712514" type="Album Official">
-                <title>To Venus and Back (disc 1: Orbiting)</title>
-                <asin>B00001IVJS</asin>
-                <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5"/>
-                <release-group id="1fd43909-8056-3805-b2f9-c663ce7e71e6"/>
-                <release-event-list>
-                    <event date="1999-09-20" country="DE"/>
-                    <event date="1999-09-20" country="GB"/>
-                    <event date="1999-09-21" country="US"/>
-                </release-event-list>
-                <disc-list count="2"/>
-            </release>
-            <release id="290e10c5-7efc-4f60-ba2c-0dfc0208fbf5" type="Album Official">
-                <title>Under the Pink</title>
-                <asin>B000002IXU</asin>
-                <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5"/>
-                <release-group id="ef2b891f-ca73-3e14-b38b-a68699dab8c4"/>
-                <release-event-list>
-                    <event date="1994-01-28" country="DE"/>
-                    <event date="1994-01-31" country="GB"/>
-                    <event date="1994-02-01" country="US"/>
-                    <event date="1994-02-25" country="JP"/>
-                    <event date="1994-11" country="AU"/>
-                </release-event-list>
-                <disc-list count="4"/>
-            </release>
-        </release-list>
-        <release-group-list>
-            <release-group id="ef2b891f-ca73-3e14-b38b-a68699dab8c4" type="Album">
-                <title>Under the Pink</title>
-            </release-group>
-            <release-group id="1fd43909-8056-3805-b2f9-c663ce7e71e6" type="Album">
-                <title>To Venus and Back</title>
-            </release-group>
-            <release-group id="a69a1574-dfe3-3e2a-b499-d26d5e916041" type="Album">
-                <title>Strange Little Girls</title>
-            </release-group>
-        </release-group-list>
-    </artist>
-</metadata>

=== removed file 'test-data/valid/artist/Tori_Amos_3.xml'
--- test-data/valid/artist/Tori_Amos_3.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/artist/Tori_Amos_3.xml	1970-01-01 00:00:00 +0000
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
-        <name>Tori Amos</name>
-        <sort-name>Amos, Tori</sort-name>
-        <life-span begin="1963-08-22"/>
-	<relation-list target-type="Artist">
-	    <relation type="Married"
-		      direction="backward"
-		      target="07538f3d-81d5-4c04-923e-4542b8ac9dbc"
-		      begin="1998">
-	        <artist id="07538f3d-81d5-4c04-923e-4542b8ac9dbc" type="Person">
-		     <name>Mark Hawley</name>
-		     <sort-name>Hawley, Mark</sort-name>
-		</artist>
-	    </relation>
-        </relation-list>
-        <relation-list target-type="Url">
-	    <relation type="Discography"
-		      target="http://www.yessaid.com/albums.html"/>
-	    <relation type="Wikipedia"
-		      target="http://en.wikipedia.org/wiki/Tori_Amos"/>
-	</relation-list>
-    </artist>
-</metadata>

=== removed file 'test-data/valid/artist/Tori_Amos_4.xml'
--- test-data/valid/artist/Tori_Amos_4.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/artist/Tori_Amos_4.xml	1970-01-01 00:00:00 +0000
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
-        <name>Tori Amos</name>
-        <sort-name>Amos, Tori</sort-name>
-	<disambiguation>yes, that one</disambiguation>
-        <life-span begin="1963-08-22"/>
-        <alias-list>
-            <alias script="Latn">Myra Ellen Amos</alias>
-            <alias>Myra Amos</alias>
-            <alias type="Misspelling" script="Latn">Torie Amos</alias>
-        </alias-list>
-    </artist>
-</metadata>

=== removed file 'test-data/valid/artist/Tori_Amos_5.xml'
--- test-data/valid/artist/Tori_Amos_5.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/artist/Tori_Amos_5.xml	1970-01-01 00:00:00 +0000
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
-        <name>Tori Amos</name>
-        <sort-name>Amos, Tori</sort-name>
-        <life-span begin="1963-08-22"/>
-        <release-list offset="6" count="9">
-            <release id="a7ccb022-f437-4492-8eee-8f85d85cdb96" type="Album Official">
-                <title>Strange Little Girls</title>
-            </release>
-        </release-list>
-    </artist>
-</metadata>

=== removed file 'test-data/valid/artist/empty_1.xml'
--- test-data/valid/artist/empty_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/artist/empty_1.xml	1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- valid, but empty document -->
-
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-
-</metadata>

=== removed file 'test-data/valid/artist/empty_2.xml'
--- test-data/valid/artist/empty_2.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/artist/empty_2.xml	1970-01-01 00:00:00 +0000
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- valid, but empty document -->
-
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-
-  <artist-list>
-
-  </artist-list>
-
-</metadata>

=== removed file 'test-data/valid/artist/search_result_1.xml'
--- test-data/valid/artist/search_result_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/artist/search_result_1.xml	1970-01-01 00:00:00 +0000
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
-          xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
-    <artist-list offset="0" count="47">
-        <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person" ext:score="100">
-            <name>Tori Amos</name>
-            <sort-name>Amos, Tori</sort-name>
-            <life-span begin="1963-08-22"/>
-        </artist>
-        <artist id="896998e8-1f1f-4add-93ed-c8a951d0d4a1" type="Person" ext:score="44">
-            <name>Tori Spelling</name>
-            <sort-name>Spelling, Tori</sort-name>
-        </artist>
-        <artist id="986e37e5-50cf-4cc7-9791-dcc9b8daf830" ext:score="44">
-            <name>Lisa And Tori</name>
-            <sort-name>Lisa And Tori</sort-name>
-        </artist>
-    </artist-list>
-</metadata>

=== removed directory 'test-data/valid/label'
=== removed file 'test-data/valid/label/Atlantic_Records_1.xml'
--- test-data/valid/label/Atlantic_Records_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/label/Atlantic_Records_1.xml	1970-01-01 00:00:00 +0000
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <label id="50c384a2-0b44-401b-b893-8181173339c7" type="OriginalProduction">
-        <name>Atlantic Records</name>
-        <label-code>121</label-code>
-        <country>US</country>
-        <life-span begin="1947"/>
-    </label>
-</metadata>

=== removed file 'test-data/valid/label/Atlantic_Records_2.xml'
--- test-data/valid/label/Atlantic_Records_2.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/label/Atlantic_Records_2.xml	1970-01-01 00:00:00 +0000
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <label type="Distributor">
-        <name>Atlantic Records</name>
-        <sort-name>AR SortName</sort-name>
-        <label-code>121</label-code>
-        <disambiguation>fake</disambiguation>
-        <country>US</country>
-        <life-span begin="1947" end="2047"/>
-	<alias-list>
-	    <alias>Atlantic Rec.</alias>
-	</alias-list>
-    </label>
-</metadata>

=== removed file 'test-data/valid/label/Atlantic_Records_3.xml'
--- test-data/valid/label/Atlantic_Records_3.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/label/Atlantic_Records_3.xml	1970-01-01 00:00:00 +0000
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <label id="50c384a2-0b44-401b-b893-8181173339c7" type="OriginalProduction">
-        <name>Atlantic Records</name>
-	<tag-list>
-	    <tag>american</tag>
-	    <tag>jazz</tag>
-	    <tag>blues</tag>
-	</tag-list>
-    <user-tag-list>
-        <user-tag>american</user-tag>  
-        <user-tag>jazz</user-tag>  
-    </user-tag-list>
-    <rating votes-count="10">4.5</rating>
-    <user-rating>3</user-rating>
-    </label>
-</metadata>

=== removed file 'test-data/valid/label/search_result_1.xml'
--- test-data/valid/label/search_result_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/label/search_result_1.xml	1970-01-01 00:00:00 +0000
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
-          xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
-    <label-list offset="0" count="2">
-        <label id="50c384a2-0b44-401b-b893-8181173339c7" type="OriginalProduction" ext:score="100">
-            <name>Atlantic Records</name>
-            <country>US</country>
-        </label>
-        <label id="c2ccaec8-0dfe-4dd5-a710-bddf5fd7c1a7" ext:score="46">
-            <name>DRO Atlantic</name>
-            <country>SP</country>
-        </label>
-    </label-list>
-</metadata>

=== removed directory 'test-data/valid/release'
=== removed directory 'test-data/valid/release-group'
=== removed file 'test-data/valid/release-group/The_Cure_1.xml'
--- test-data/valid/release-group/The_Cure_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/release-group/The_Cure_1.xml	1970-01-01 00:00:00 +0000
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#" xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
-  <release-group id="c6a62b78-70f7-44f7-b159-064f6b7ba03a" type="Album">
-    <title>The Cure</title>
-    <artist id="69ee3720-a7cb-4402-b48d-a02c366f2bcf" type="Group">
-      <name>The Cure</name>
-      <sort-name>Cure, The</sort-name>
-      <life-span begin="1977"/>
-    </artist>
-    <release-list>
-      <release id="d984e1a3-7281-46bb-ad8b-1478a00f2fbf" type="Album Official">
-        <title>The Cure</title>
-        <text-representation language="ENG" script="Latn"/>
-        <asin>B0002CHGZI</asin>
-        <track-list offset="11"/>
-      </release>
-      <release id="c100a398-3132-48a8-a5fc-c3e908ac17dc" type="Album Official">
-        <title>The Cure</title>
-        <text-representation language="ENG" script="Latn"/>
-        <track-list offset="14"/>
-      </release>
-      <release id="24bec892-b21d-47d8-a288-dc6450152574" type="Album Official">
-        <title>The Cure</title>
-        <text-representation language="ENG" script="Latn"/>
-        <asin>B0002C9G7O</asin>
-        <track-list offset="12"/>
-      </release>
-      <release id="61a4ec51-fa34-4757-85d7-83231776ed14" type="Album Official">
-        <title>The Cure</title>
-        <text-representation language="ENG" script="Latn"/>
-        <asin>B00028HOFY</asin>
-        <track-list offset="10"/>
-      </release>
-    </release-list>
-  </release-group>
-</metadata>

=== removed file 'test-data/valid/release-group/search_result_1.xml'
--- test-data/valid/release-group/search_result_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/release-group/search_result_1.xml	1970-01-01 00:00:00 +0000
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#" xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
-    <release-group-list count="3" offset="0">
-        <release-group id="963eac15-e3da-3a92-aa5c-2ec23bfb6ec2" type="Album" ext:score="100">
-            <title>Signal Morning</title>
-            <artist id="2dea8a55-623b-42bb-bda3-9fb784018b40">
-                <name>Circulatory System</name>
-            </artist>
-        </release-group>
-        <release-group id="0bd324a3-1c90-3bdb-8ca4-4101a580c62c" type="Album" ext:score="98">
-            <title>Circulatory System</title>
-            <artist id="2dea8a55-623b-42bb-bda3-9fb784018b40">
-                <name>Circulatory System</name>
-            </artist>
-        </release-group>
-        <release-group id="ea7d8352-7751-30be-8490-bb6df737f47c" type="Album" ext:score="90">
-            <title>Inside Views</title>
-            <artist id="2dea8a55-623b-42bb-bda3-9fb784018b40">
-                <name>Circulatory System</name>
-            </artist>
-        </release-group>
-    </release-group-list>
-</metadata>

=== removed file 'test-data/valid/release/Highway_61_Revisited_1.xml'
--- test-data/valid/release/Highway_61_Revisited_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/release/Highway_61_Revisited_1.xml	1970-01-01 00:00:00 +0000
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <release id="d61a2bd9-81ac-4023-bd22-1c884d4a176c" type="Album Official">
-        <title>Highway 61 Revisited</title>
-        <text-representation language="ENG" script="Latn"/>
-        <asin>B0000C8AVR</asin>
-        <artist id="72c536dc-7137-4477-a521-567eeb840fa8" type="Person">
-            <name>Bob Dylan</name>
-            <sort-name>Dylan, Bob</sort-name>
-            <life-span begin="1941-05-24"/>
-        </artist>
-        <release-event-list>
-            <event date="1965-08-30" country="US"/>
-            <event date="2004-03-29" country="GB"/>
-        </release-event-list>
-        <disc-list>
-            <disc id="FftPVconhVin9JjU8gwBZh_YolU-"/>
-            <disc id="9vVwJUkF27NqI9qSHClV_0U7s5w-"/>
-            <disc id="qVtI3xypfPuyD.B8nUDiexJkApo-"/>
-            <disc id="Aar5BObdppAnGbIlh2voy2Zbt.s-"/>
-            <disc id="_Ta9JVJyHYdRTZLMio.qewk2Rq0-"/>
-            <disc id="PNd4XY_ixr5GwjOGBwG2ssR94q8-"/>
-        </disc-list>
-        <puid-list count="75"/>
-        <track-list>
-            <track id="430aa3d3-3dac-4bd5-857d-eb10212ffefb">
-                <title>Like a Rolling Stone</title>
-                <duration>373333</duration>
-            </track>
-            <track id="8d5ac86a-bca6-4e10-a915-f6807628a05e">
-                <title>Tombstone Blues</title>
-                <duration>360533</duration>
-            </track>
-            <track id="525dc658-e6cb-4923-80d9-a77e93ef4d33">
-                <title>It Takes a Lot to Laugh, It Takes a Train to Cry</title>
-                <duration>249066</duration>
-            </track>
-            <track id="1d93090b-bcf1-4663-9900-051bdb580bbe">
-                <title>From a Buick 6</title>
-                <duration>199026</duration>
-            </track>
-            <track id="80c25169-fbf6-4eca-bda4-15319ae42274">
-                <title>Ballad of a Thin Man</title>
-                <duration>358640</duration>
-            </track>
-            <track id="3debc2e6-d3df-46df-a73a-b7b5536a7136">
-                <title>Queen Jane Approximately</title>
-                <duration>331760</duration>
-            </track>
-            <track id="1825fac7-762b-496d-b0ed-44e92f303ea9">
-                <title>Highway 61 Revisited</title>
-                <duration>210333</duration>
-            </track>
-            <track id="5e252930-b998-457c-935b-79e03d178bf0">
-                <title>Just Like Tom Thumb's Blues</title>
-                <duration>332133</duration>
-            </track>
-            <track id="d315625a-3976-41b4-b2e0-43336b0f67bc">
-                <title>Desolation Row</title>
-                <duration>682506</duration>
-            </track>
-        </track-list>
-        <relation-list target-type="Url">
-            <relation type="Wikipedia" target="http://en.wikipedia.org/wiki/Highway_61_Revisited"/>
-            <relation type="AmazonAsin" target="http://www.amazon.com/gp/product/B0000024SI"/>
-        </relation-list>
-    </release>
-</metadata>

=== removed file 'test-data/valid/release/Highway_61_Revisited_2.xml'
--- test-data/valid/release/Highway_61_Revisited_2.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/release/Highway_61_Revisited_2.xml	1970-01-01 00:00:00 +0000
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <release id="d61a2bd9-81ac-4023-bd22-1c884d4a176c" type="Album Official">
-        <title>Highway 61 Revisited</title>
-        <tag-list>
-	    <tag count="100">rock</tag>
-	    <tag count="40">blues rock</tag>
-	    <tag count="40">folk rock</tag>
-	    <tag count="4">dylan</tag>
-        </tag-list>
-        <user-tag-list>
-            <user-tag>rock</user-tag>  
-            <user-tag>foo</user-tag>  
-        </user-tag-list>
-        <rating votes-count="10">4.5</rating>
-        <user-rating>3</user-rating>
-    </release>
-</metadata>

=== removed file 'test-data/valid/release/Little_Earthquakes_1.xml'
--- test-data/valid/release/Little_Earthquakes_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/release/Little_Earthquakes_1.xml	1970-01-01 00:00:00 +0000
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <release id="02232360-337e-4a3f-ad20-6cdd4c34288c" type="Album Official">
-        <title>Little Earthquakes</title>
-	<text-representation language="ENG" script="Latn"/>
-        <asin>B000002IT2</asin>
-        <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
-            <name>Tori Amos</name>
-            <sort-name>Amos, Tori</sort-name>
-            <life-span begin="1963-08-22"/>
-        </artist>
-        <release-event-list>
-            <event date="1992-01-13" country="GB"/>
-            <event date="1992-01-17" country="DE"/>
-            <event date="1992-02-25" country="US"/>
-        </release-event-list>
-        <disc-list>
-            <disc id="ILKp3.bZmvoMO7wSrq1cw7WatfA-"/>
-            <disc id="ejdrdtX1ZyvCb0g6vfJejVaLIK8-"/>
-            <disc id="Y96eDQZbF4Z26Y5.Sxdbh3wGypo-"/>
-        </disc-list>
-        <track-list count="12"/>
-    </release>
-</metadata>

=== removed file 'test-data/valid/release/Little_Earthquakes_2.xml'
--- test-data/valid/release/Little_Earthquakes_2.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/release/Little_Earthquakes_2.xml	1970-01-01 00:00:00 +0000
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <release id="02232360-337e-4a3f-ad20-6cdd4c34288c" type="Album Official">
-        <title>Little Earthquakes</title>
-	<text-representation language="ENG" script="Latn"/>
-        <asin>B000002IT2</asin>
-        <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
-            <name>Tori Amos</name>
-            <sort-name>Amos, Tori</sort-name>
-            <life-span begin="1963-08-22"/>
-        </artist>
-        <release-event-list>
-            <event date="1992-01-13" country="GB"/>
-            <event date="1992-01-17" country="DE"/>
-            <event date="1992-02-25" country="US"/>
-        </release-event-list>
-        <disc-list>
-            <disc id="ILKp3.bZmvoMO7wSrq1cw7WatfA-"/>
-            <disc id="ejdrdtX1ZyvCb0g6vfJejVaLIK8-"/>
-            <disc id="Y96eDQZbF4Z26Y5.Sxdbh3wGypo-"/>
-        </disc-list>
-        <track-list>
-            <track id="6e71c125-3cb5-4a19-a1f0-66779c9ae9f4">
-                <title>Crucify</title>
-                <duration>301186</duration>
-            </track>
-            <track id="50c7c153-5f7d-4c0d-b181-fd4fa53946bb">
-                <title>Girl</title>
-                <duration>249493</duration>
-            </track>
-            <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
-                <title>Silent All These Years</title>
-                <duration>253466</duration>
-            </track>
-            <track id="6fccc0b1-c7e5-4f5c-910d-6220eb7f5edb">
-                <title>Precious Things</title>
-                <duration>269293</duration>
-            </track>
-            <track id="c1b567b0-5924-437c-9c20-c8add9be7d39">
-                <title>Winter</title>
-                <duration>344573</duration>
-            </track>
-            <track id="e1ffb53b-b0e4-4c15-8c7f-fb060682da51">
-                <title>Happy Phantom</title>
-                <duration>199000</duration>
-            </track>
-            <track id="0ce710f7-667b-416d-9610-5f4342ff0520">
-                <title>China</title>
-                <duration>301946</duration>
-            </track>
-            <track id="f835ae89-146c-45ec-adf8-9b5c388c69c8">
-                <title>Leather</title>
-                <duration>193960</duration>
-            </track>
-            <track id="0157ef94-14b7-4a9a-8ded-19b9594490f0">
-                <title>Mother</title>
-                <duration>421173</duration>
-            </track>
-            <track id="98200ec7-d828-4e4f-8dbe-b20e6d519f88">
-                <title>Tear in Your Hand</title>
-                <duration>280866</duration>
-            </track>
-            <track id="998fd949-5222-41ba-9cb8-b2272474bfdb">
-                <title>Me and a Gun</title>
-                <duration>226920</duration>
-            </track>
-            <track id="51d2c2ff-a5fd-44f9-9c1c-7ca9fdc7dd1d">
-                <title>Little Earthquakes</title>
-                <duration>413693</duration>
-            </track>
-        </track-list>
-    </release>
-</metadata>

=== removed file 'test-data/valid/release/Mission_Impossible_2.xml'
--- test-data/valid/release/Mission_Impossible_2.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/release/Mission_Impossible_2.xml	1970-01-01 00:00:00 +0000
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <release id="81683d13-e014-4d35-9774-6f536f4ef557" type="Soundtrack Official">
-        <title>Mission: Impossible 2</title>
-        <text-representation language="ENG" script="Latn"/>
-        <artist id="89ad4ac3-39f7-470e-963a-56509c546377">
-            <name>Various Artists</name>
-            <sort-name>Various Artists</sort-name>
-        </artist>
-        <release-event-list>
-            <event country="EU" date="2000"/>
-        </release-event-list>
-        <track-list>
-            <track id="d54a42b4-2875-4f35-b215-6e08d666526f">
-                <title>Take a Look Around</title>
-                <duration>320160</duration>
-                <artist id="8f9d6bb2-dba4-4cca-9967-cc02b9f4820c" type="Group">
-                    <name>Limp Bizkit</name>
-                    <sort-name>Limp Bizkit</sort-name>
-                    <life-span begin="1994"/>
-                </artist>
-            </track>
-            <track id="84f54cf7-b0dc-4883-a924-e4c80e2f4217">
-                <title>I Disappear</title>
-                <duration>266306</duration>
-                <artist id="65f4f0c5-ef9e-490c-aee3-909e7ae6b2ab" type="Group">
-                    <name>Metallica</name>
-                    <sort-name>Metallica</sort-name>
-                    <life-span begin="1981"/>
-                </artist>
-            </track>
-            <track id="826bc7e0-4876-4910-bfad-5799883a0a8a">
-                <title>Scum of the Earth</title>
-                <duration>175533</duration>
-                <artist id="c995a379-60b9-404b-bd97-a7e2de0751d3" type="Person">
-                    <name>Rob Zombie</name>
-                    <sort-name>Zombie, Rob</sort-name>
-                    <life-span begin="1966-01-12"/>
-                </artist>
-            </track>
-            <track id="23b1e93d-a9cc-4644-b838-5408fa6fd26b">
-                <title>They Came In</title>
-                <duration>282560</duration>
-                <artist id="2339bc21-aa92-4850-86f0-4bb9433910c8" type="Group">
-                    <name>Butthole Surfers</name>
-                    <sort-name>Butthole Surfers</sort-name>
-                    <life-span begin="1982"/>
-                </artist>
-            </track>
-            <track id="541c5506-482e-4ddd-9ace-536642fb70a8">
-                <title>Rocket Science</title>
-                <duration>210466</duration>
-                <artist id="e03c4ab3-e410-4c12-a040-a8adeadb284e">
-                    <name>The Pimps</name>
-                    <sort-name>Pimps, The</sort-name>
-                </artist>
-            </track>
-            <track id="a988157c-9a0f-4ac3-8483-5502d07a5bde">
-                <title>Have a Cigar (feat. Brian May)</title>
-                <duration>242933</duration>
-                <artist id="67f66c07-6e61-4026-ade5-7e782fad3a5d" type="Group">
-                    <name>Foo Fighters</name>
-                    <sort-name>Foo Fighters</sort-name>
-                    <life-span begin="1994"/>
-                </artist>
-            </track>
-            <track id="03940a09-ce73-4757-8277-20e234615c7f">
-                <title>Mission 2000</title>
-                <duration>222440</duration>
-                <artist id="cbf9738d-8f81-4a92-bc64-ede09341652d" type="Person">
-                    <name>Chris Cornell</name>
-                    <sort-name>Cornell, Chris</sort-name>
-                </artist>
-            </track>
-            <track id="06018569-debd-4b96-82c1-aa14c1095926">
-                <title>Going Down</title>
-                <duration>203160</duration>
-                <artist id="ac2d1c91-3667-46aa-9fe7-170ca7fce9e2" type="Group">
-                    <name>Godsmack</name>
-                    <sort-name>Godsmack</sort-name>
-                    <life-span begin="1996"/>
-                </artist>
-            </track>
-            <track id="d7ec4557-175a-4eae-91dc-8afcf34f645d">
-                <title>What U Lookin' At?</title>
-                <duration>312000</duration>
-                <artist id="1a02e1e4-000e-46fa-83de-f3a36674e4fc">
-                    <name>Uncle Kracker</name>
-                    <sort-name>Uncle Kracker</sort-name>
-                </artist>
-            </track>
-            <track id="3e7faaf8-b6a3-4886-b8af-d80d78d4d21e">
-                <title>Backwards</title>
-                <duration>189506</duration>
-                <artist id="ea738cc5-5b1a-44a4-94ab-ed0c1bd71ecf">
-                    <name>Apartment 26</name>
-                    <sort-name>Apartment 26</sort-name>
-                </artist>
-            </track>
-            <track id="011538ce-b935-43d6-ac0e-18136e911355">
-                <title>Karma</title>
-                <duration>196160</duration>
-                <artist id="91a73ec9-4ee7-48f2-aed8-00e9ade6cfd7">
-                    <name>Diffuser</name>
-                    <sort-name>Diffuser</sort-name>
-                </artist>
-            </track>
-            <track id="cd550361-e973-4df7-bffc-be4e8b463dd1">
-                <title>Alone</title>
-                <duration>203973</duration>
-                <artist id="822e92ef-72ea-42e0-9af1-b987816b487a" type="Group">
-                    <name>Buckcherry</name>
-                    <sort-name>Buckcherry</sort-name>
-                    <life-span begin="1995" end="2002-07"/>
-                </artist>
-            </track>
-            <track id="8543aa42-ae35-49d3-acac-79ddd064084a">
-                <title>Immune</title>
-                <duration>229026</duration>
-                <artist id="9cab4ab3-720f-4a75-8168-0081c70d50a6">
-                    <name>Tinfed</name>
-                    <sort-name>Tinfed</sort-name>
-                </artist>
-            </track>
-            <track id="8683c9e8-48fc-410c-8785-7c9e30620488">
-                <title>My Kinda Scene</title>
-                <duration>266666</duration>
-                <artist id="e9ce3f55-b35c-4f8d-8304-be24f381587e" type="Group">
-                    <name>Powderfinger</name>
-                    <sort-name>Powderfinger</sort-name>
-                    <disambiguation>Australian rock band</disambiguation>
-                    <life-span begin="1990"/>
-                </artist>
-            </track>
-            <track id="a4738ef4-3973-4ff1-9b6e-75a17b6f70b3">
-                <title>Carnival</title>
-                <duration>258066</duration>
-                <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
-                    <name>Tori Amos</name>
-                    <sort-name>Amos, Tori</sort-name>
-                    <life-span begin="1963-08-22"/>
-                </artist>
-            </track>
-            <track id="53a62be7-200f-49b0-acd8-2ac60ba292f1">
-                <title>Nyah (feat. Heitor Pereira)</title>
-                <duration>213306</duration>
-                <artist id="e6de1f3b-6484-491c-88dd-6d619f142abc" type="Person">
-                    <name>Hans Zimmer</name>
-                    <sort-name>Zimmer, Hans</sort-name>
-                    <life-span begin="1957-09-12"/>
-                </artist>
-            </track>
-        </track-list>
-    </release>
-</metadata>

=== removed file 'test-data/valid/release/Under_the_Pink_1.xml'
--- test-data/valid/release/Under_the_Pink_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/release/Under_the_Pink_1.xml	1970-01-01 00:00:00 +0000
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <release id="290e10c5-7efc-4f60-ba2c-0dfc0208fbf5" type="Album Official">
-        <title>Under the Pink</title>
-        <text-representation language="ENG" script="Latn"/>
-        <asin>B000002IXU</asin>
-        <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
-            <name>Tori Amos</name>
-        </artist>
-        <release-event-list>
-            <event date="1994-01-28"/>
-        </release-event-list>
-        <disc-list count="4"/>
-        <track-list count="12"/>
-    </release>
-</metadata>

=== removed file 'test-data/valid/release/Under_the_Pink_2.xml'
--- test-data/valid/release/Under_the_Pink_2.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/release/Under_the_Pink_2.xml	1970-01-01 00:00:00 +0000
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <release id="290e10c5-7efc-4f60-ba2c-0dfc0208fbf5" type="Album Official">
-        <title>Under the Pink</title>
-        <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
-            <name>Tori Amos</name>
-        </artist>
-        <release-group id="ef2b891f-ca73-3e14-b38b-a68699dab8c4" type="Album">
-            <title>Under the Pink</title> 
-        </release-group>
-        <track-list offset="1" count="12">
-            <track id="0a984e3b-e38a-4b86-80be-f3a3eb1114ca">
-                <title>God</title>
-            </track>
-        </track-list>
-    </release>
-</metadata>

=== removed file 'test-data/valid/release/Under_the_Pink_3.xml'
--- test-data/valid/release/Under_the_Pink_3.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/release/Under_the_Pink_3.xml	1970-01-01 00:00:00 +0000
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <release id="290e10c5-7efc-4f60-ba2c-0dfc0208fbf5" type="Album Official">
-        <title>Under the Pink</title>
-        <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
-            <name>Tori Amos</name>
-        </artist>
-        <release-event-list>
-            <event date="1994-01-31" catalog-number="82567-2" barcode="07567825672" format="CD">
-                <label id="50c384a2-0b44-401b-b893-8181173339c7">
-                    <name>Atlantic Records</name>
-                </label>
-            </event>
-        </release-event-list>
-    </release>
-</metadata>

=== removed file 'test-data/valid/release/search_result_1.xml'
--- test-data/valid/release/search_result_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/release/search_result_1.xml	1970-01-01 00:00:00 +0000
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
-          xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
-
-    <release-list offset="0" count="234">
-        <release id="290e10c5-7efc-4f60-ba2c-0dfc0208fbf5" type="Album Official" ext:score="100">
-            <title>Under the Pink</title>
-            <text-representation language="ENG" script="Latn"/>
-            <asin>B000002IXU</asin>
-            <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
-                <name>Tori Amos</name>
-            </artist>
-            <release-event-list>
-                <event date="1994-01-28"/>
-            </release-event-list>
-            <disc-list count="4"/>
-            <track-list count="12"/>
-        </release>
-        <release id="005fe18b-144b-4fee-81c0-e04737a23500" type="Live Bootleg" ext:score="80">
-            <title>Under the Pink Tour 1994</title>
-            <text-representation language="ENG" script="Latn"/>
-            <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
-                <name>Tori Amos</name>
-            </artist>
-            <track-list count="17"/>
-        </release>
-    </release-list>
-</metadata>

=== removed directory 'test-data/valid/track'
=== removed file 'test-data/valid/track/Silent_All_These_Years_1.xml'
--- test-data/valid/track/Silent_All_These_Years_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/track/Silent_All_These_Years_1.xml	1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
-	<title>Silent All These Years</title>
-	<duration>253466</duration>
-    </track>
-</metadata>

=== removed file 'test-data/valid/track/Silent_All_These_Years_2.xml'
--- test-data/valid/track/Silent_All_These_Years_2.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/track/Silent_All_These_Years_2.xml	1970-01-01 00:00:00 +0000
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
-	<title>Silent All These Years</title>
-	<duration>253466</duration>
-	<artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
-		<name>Tori Amos</name>
-		<sort-name>Amos, Tori</sort-name>
-	</artist>
-	<relation-list target-type="Track">
-	    <relation type="Cover"
-		      direction="backward"
-		      target="31e1c0c4-967f-435e-b09a-35ee079ee234">
-                <track id="31e1c0c4-967f-435e-b09a-35ee079ee234">
-                    <title>Silent All These Years</title>
-		    <artist id="5bcd4eaa-fae7-465f-9f03-d005b959ed02"/>
-		</track>
-	    </relation>
-	</relation-list>
-    </track>
-</metadata>

=== removed file 'test-data/valid/track/Silent_All_These_Years_3.xml'
--- test-data/valid/track/Silent_All_These_Years_3.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/track/Silent_All_These_Years_3.xml	1970-01-01 00:00:00 +0000
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
-	<title>Silent All These Years</title>
-	<duration>253466</duration>
-	<puid-list>
-	    <puid id="c2a2cee5-a8ca-4f89-a092-c3e1e65ab7e6"/>
-	    <puid id="db5b66b3-fa97-4cfa-9296-de7e57ef05f4"/>
-	    <puid id="fbb3d1b6-f9e7-49ed-834c-03e9ec9726e5"/>
-	    <puid id="0e2e66e3-13d7-4138-af90-5ec8a4c2db99"/>
-	    <puid id="4778d58b-50fe-4004-8cd6-462a816114c8"/>
-	    <puid id="88541d46-9b74-4835-b8e8-d985fc77e02a"/>
-	    <puid id="42ab76ea-5d42-4259-85d7-e7f2c69e4485"/>
-	</puid-list>
-    </track>
-</metadata>

=== removed file 'test-data/valid/track/Silent_All_These_Years_4.xml'
--- test-data/valid/track/Silent_All_These_Years_4.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/track/Silent_All_These_Years_4.xml	1970-01-01 00:00:00 +0000
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
-          xmlns:mm="http://mafr.de/ns/mm-0.1#">
-
-    <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
-	<title>Silent All These Years</title>
-	<duration>253466</duration>
-	<isrc-list>
-          <isrc id="USPR37300012"/>
-	</isrc-list>
-        <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person">
-            <name>Tori Amos</name>
-            <sort-name>Amos, Tori</sort-name>
-            <life-span begin="1963-08-22"/>
-        </artist>
-	<release-list>
-            <release id="02232360-337e-4a3f-ad20-6cdd4c34288c" type="Album Official">
-                <title>Little Earthquakes</title>
-		<artist id="c0b2500e-0cef-4130-869d-732b23ed9df5" type="Person"/>
-		<track-list offset="2"/>
-	    </release>
-	</release-list>
-	<puid-list>
-	    <puid id="c2a2cee5-a8ca-4f89-a092-c3e1e65ab7e6"/>
-	    <puid id="db5b66b3-fa97-4cfa-9296-de7e57ef05f4"/>
-	    <puid id="fbb3d1b6-f9e7-49ed-834c-03e9ec9726e5"/>
-	    <puid id="0e2e66e3-13d7-4138-af90-5ec8a4c2db99"/>
-	    <puid id="4778d58b-50fe-4004-8cd6-462a816114c8"/>
-	    <puid id="88541d46-9b74-4835-b8e8-d985fc77e02a"/>
-	    <puid id="42ab76ea-5d42-4259-85d7-e7f2c69e4485"/>
-	</puid-list>
-    </track>
-</metadata>

=== removed file 'test-data/valid/track/Silent_All_These_Years_5.xml'
--- test-data/valid/track/Silent_All_These_Years_5.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/track/Silent_All_These_Years_5.xml	1970-01-01 00:00:00 +0000
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
-          xmlns:mm="http://mafr.de/ns/mm-0.1#">
-
-    <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
-	<title>Silent All These Years</title>
-	<duration>253466</duration>
-	<puid-list>
-	    <puid id="c2a2cee5-a8ca-4f89-a092-c3e1e65ab7e6"/>
-	    <puid id="db5b66b3-fa97-4cfa-9296-de7e57ef05f4"/>
-	    <puid id="fbb3d1b6-f9e7-49ed-834c-03e9ec9726e5"/>
-	    <puid id="0e2e66e3-13d7-4138-af90-5ec8a4c2db99"/>
-	    <puid id="4778d58b-50fe-4004-8cd6-462a816114c8"/>
-	    <puid id="88541d46-9b74-4835-b8e8-d985fc77e02a"/>
-	    <puid id="42ab76ea-5d42-4259-85d7-e7f2c69e4485"/>
-	</puid-list>
-	<mm:rating value="9"/>
-	<mm:annotation>This is a <em>very</em> nice song.</mm:annotation>
-    </track>
-</metadata>

=== removed file 'test-data/valid/track/Silent_All_These_Years_6.xml'
--- test-data/valid/track/Silent_All_These_Years_6.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/track/Silent_All_These_Years_6.xml	1970-01-01 00:00:00 +0000
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#">
-    <track id="d6118046-407d-4e06-a1ba-49c399a4c42f">
-	<title>Silent All These Years</title>
-	<duration>253466</duration>
-	<isrc-list>
-          <isrc id="USPR37300012"/>
-	</isrc-list>
-	<tag-list></tag-list>
-    <user-tag-list>
-        <user-tag>foo</user-tag>
-    </user-tag-list>
-    <rating votes-count="10">4.5</rating>
-    <user-rating>3</user-rating>
-    </track>
-</metadata>

=== removed file 'test-data/valid/track/search_result_1.xml'
--- test-data/valid/track/search_result_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/track/search_result_1.xml	1970-01-01 00:00:00 +0000
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
-          xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
-    <track-list count="100" offset="7">
-        <track id="748f2b79-8c50-4581-adb1-7708118a48fc" ext:score="100">
-            <title>Little Earthquakes</title>
-            <duration>457760</duration>
-            <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
-                <name>Tori Amos</name>
-            </artist>
-            <release-list>
-                <release id="93264fe5-dff2-47ab-9ca8-1c865733aad9">
-                    <title>To Venus and Back (disc 2: Live, Still Orbiting)</title>
-                    <track-list offset="9"/>
-                </release>
-            </release-list>
-        </track>
-        <track id="51d2c2ff-a5fd-44f9-9c1c-7ca9fdc7dd1d" ext:score="99">
-            <title>Little Earthquakes</title>
-            <duration>413693</duration>
-            <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
-                <name>Tori Amos</name>
-            </artist>
-            <release-list>
-                <release id="02232360-337e-4a3f-ad20-6cdd4c34288c">
-                    <title>Little Earthquakes</title>
-                    <track-list offset="11"/>
-                </release>
-            </release-list>
-        </track>
-        <track id="1954d2a1-d021-4426-b818-b5a5bce1ca07" ext:score="80">
-            <title>Little Amsterdam</title>
-            <duration>270106</duration>
-            <artist id="c0b2500e-0cef-4130-869d-732b23ed9df5">
-                <name>Tori Amos</name>
-            </artist>
-            <release-list>
-                <release id="4c31aef1-177e-4bba-9a56-180e21a0d043">
-                    <title>Boys for Pele</title>
-                    <track-list offset="11"/>
-                </release>
-            </release-list>
-        </track>
-    </track-list>
-</metadata>

=== removed directory 'test-data/valid/user'
=== removed file 'test-data/valid/user/User_1.xml'
--- test-data/valid/user/User_1.xml	2012-02-01 17:18:10 +0000
+++ test-data/valid/user/User_1.xml	1970-01-01 00:00:00 +0000
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- Note: This is a MusicBrainz extension. -->
-
-<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"
-          xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
-
-    <ext:user-list>
-        <ext:user type="AutoEditor RelationshipEditor">
-            <name>matt</name>
-            <ext:nag show="false"/>
-        </ext:user>
-    </ext:user-list>
-
-</metadata>

=== added file 'tests/.gitignore'
--- tests/.gitignore	1970-01-01 00:00:00 +0000
+++ tests/.gitignore	2012-06-25 05:56:21 +0000
@@ -0,0 +1,5 @@
+CMakeFiles/
+Makefile
+cmake_install.cmake
+ctest
+mbtest

=== modified file 'tests/CMakeLists.txt'
--- tests/CMakeLists.txt	2012-02-01 17:18:10 +0000
+++ tests/CMakeLists.txt	2012-06-25 05:56:21 +0000
@@ -4,10 +4,18 @@
 ADD_EXECUTABLE(ctest ctest.c)
 
 IF(CMAKE_COMPILER_IS_GNUCXX)
-		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wextra -pedantic-errors")
+		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic-errors")
+		IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
+			SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
+		ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
 ENDIF(CMAKE_COMPILER_IS_GNUCXX)
 
 IF(CMAKE_COMPILER_IS_GNUCC)
-		SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wextra -pedantic-errors")
+		SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic-errors")
+		IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
+			SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
+		ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
+		set_source_files_properties(ctest.c PROPERTIES COMPILE_FLAGS "-Wno-deprecated-declarations")
+		set_source_files_properties(mbtest.cc PROPERTIES COMPILE_FLAGS "-Wno-deprecated-declarations")
 ENDIF(CMAKE_COMPILER_IS_GNUCC)
 

=== modified file 'tests/ctest.c'
--- tests/ctest.c	2012-02-01 17:18:10 +0000
+++ tests/ctest.c	2012-06-25 05:56:21 +0000
@@ -10,7 +10,7 @@
    modify it under the terms of v2 of the GNU Lesser General Public
    License as published by the Free Software Foundation.
 
-   Flactag is distributed in the hope that it will be useful,
+   libmusicbrainz4 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
    Lesser General Public License for more details.
@@ -18,7 +18,7 @@
    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-     $Id: ctest.c 13385 2012-01-15 15:19:56Z adhawkins $
+     $Id$
 
 ----------------------------------------------------------------------------*/
 
@@ -28,11 +28,85 @@
 
 #include "musicbrainz4/mb4_c.h"
 
+void PrintRelationList(Mb4RelationList RelationList)
+{
+	char Type[256];
+	int count;
+
+	mb4_relation_list_get_targettype(RelationList,Type,sizeof(Type));
+	printf("Target type is '%s'\n",Type);
+
+	for (count=0;count<mb4_relation_list_size(RelationList);count++)
+	{
+		char Target[256];
+		char Type[256];
+
+		Mb4Relation Relation=mb4_relation_list_item(RelationList,count);
+
+		mb4_relation_get_target(Relation,Target,sizeof(Target));
+		mb4_relation_get_type(Relation,Type,sizeof(Type));
+
+		printf("Relation: %d - Type '%s', Target '%s'\n",count,Type,Target);
+	}
+}
+
 int main(int argc, const char *argv[])
 {
 	Mb4Query Query=0;
 	char DiscID[256]="tLGBAiCflG8ZI6lFcOt87vXjEcI-";
 
+	Query=mb4_query_new("ctest","test.musicbrainz.org",0);
+	if (Query)
+	{
+		char Version[256];
+		Mb4Metadata Metadata=0;
+
+		mb4_query_get_version(Query,Version,sizeof(Version));
+		printf("Version is '%s'\n",Version);
+
+		Metadata=mb4_query_query(Query,"work","b0d17375-5593-390e-a936-1a65ce74c630","",0,NULL,NULL);
+		if (Metadata)
+		{
+			Mb4Work Work=0;
+
+			Work=mb4_metadata_get_work(Metadata);
+			if (Work)
+			{
+				Mb4ISWCList ISWCList=0;
+				char ISWCStr[256];
+
+				mb4_work_get_iswc(Work,ISWCStr,sizeof(ISWCStr));
+				printf("ISWC: '%s'\n",ISWCStr);
+
+				ISWCList=mb4_work_get_iswclist(Work);
+				if (ISWCList)
+				{
+					int ISWCNum;
+
+					printf("Got ISWC list, size %d\n",mb4_iswc_list_size(ISWCList));
+
+					for (ISWCNum=0;ISWCNum<mb4_iswc_list_size(ISWCList);ISWCNum++)
+					{
+						Mb4ISWC ISWC=mb4_iswc_list_item(ISWCList,ISWCNum);
+
+						if (ISWC)
+						{
+							char ISWCStr[256];
+
+							mb4_iswc_get_iswc(ISWC,ISWCStr,sizeof(ISWCStr));
+
+							printf("Got ISWC %d - '%s'\n",ISWCNum,ISWCStr);
+						}
+					}
+				}
+			}
+		}
+
+		mb4_query_delete(Query);
+	}
+
+	return 0;
+
 	if (argc==2)
 	{
 		strncpy(DiscID,argv[1],sizeof(DiscID));
@@ -43,19 +117,72 @@
 	if (Query)
 	{
 		Mb4Metadata Metadata=NULL;
+		char **ParamNames;
+		char **ParamValues;
 
 		printf("Got query\n");
 
 		mb4_query_set_username(Query,"username");
 		mb4_query_set_password(Query,"password");
 
+		ParamNames=malloc(sizeof(char *));
+		ParamNames[0]=malloc(256);
+		ParamValues=malloc(sizeof(char *));
+		ParamValues[0]=malloc(256);
+
+		strcpy(ParamNames[0],"inc");
+		strcpy(ParamValues[0],"artists release-groups url-rels work-level-rels work-rels artist-rels");
+
+		Metadata=mb4_query_query(Query,"recording","3631f569-520d-40ff-a1ee-076604723275","",1,ParamNames,ParamValues);
+		if (Metadata)
+		{
+			Mb4Recording Recording=mb4_metadata_get_recording(Metadata);
+			printf("Got metadata\n");
+
+			if (Recording)
+			{
+				Mb4RelationList RelationList=mb4_recording_get_relationlist(Recording);
+				Mb4RelationListList RelationListList=mb4_recording_get_relationlistlist(Recording);
+
+				printf("Got recording\n");
+
+				if (RelationListList)
+				{
+					int RelationListNum;
+
+					printf("Got relation list list, size %d\n",mb4_relationlist_list_size(RelationListList));
+
+					for (RelationListNum=0;RelationListNum<mb4_relationlist_list_size(RelationListList);RelationListNum++)
+					{
+						Mb4RelationList RelationList=mb4_relationlist_list_item(RelationListList,RelationListNum);
+
+						if (RelationList)
+						{
+							printf("Got relation list %d\n",RelationListNum);
+
+							PrintRelationList(RelationList);
+						}
+					}
+				}
+
+				if (RelationList)
+				{
+					printf("Got relation list\n");
+
+					PrintRelationList(RelationList);
+				}
+			}
+
+			mb4_metadata_delete(Metadata);
+		}
+
 		Metadata=mb4_query_query(Query,"collection",0,0,0,NULL,NULL);
 		if (Metadata)
 		{
 			printf("Got collections");
 			mb4_metadata_delete(Metadata);
+		}
 
-		}
 		Metadata=mb4_query_query(Query,"discid",DiscID,0,0,NULL,NULL);
 		if (Metadata)
 		{
@@ -94,8 +221,6 @@
 
 						mb4_release_get_id(Release,ID,sizeof(ID));
 						printf("ID is '%s'\n",ID);
-
-						mb4_release_delete(Release);
 					}
 				}
 			}
@@ -128,8 +253,12 @@
 	Mb4DiscList DiscList=0;
 	Mb4FreeDBDisc FreeDBDisc=0;
 	Mb4FreeDBDiscList FreeDBDiscList=0;
+	Mb4IPI IPI=0;
+	Mb4IPIList IPIList=0;
 	Mb4ISRC ISRC=0;
 	Mb4ISRCList ISRCList=0;
+	Mb4ISWC ISWC=0;
+	Mb4ISWCList ISWCList=0;
 	Mb4Label Label=0;
 	Mb4LabelInfo LabelInfo=0;
 	Mb4LabelInfoList LabelInfoList=0;
@@ -151,10 +280,13 @@
 	Mb4RecordingList RecordingList=0;
 	Mb4Relation Relation=0;
 	Mb4RelationList RelationList=0;
+	Mb4RelationListList RelationListList=0;
 	Mb4Release Release=0;
 	Mb4ReleaseGroup ReleaseGroup=0;
 	Mb4ReleaseGroupList ReleaseGroupList=0;
 	Mb4ReleaseList ReleaseList=0;
+	Mb4SecondaryType SecondaryType=0;
+	Mb4SecondaryTypeList SecondaryTypeList=0;
 	Mb4Tag Tag=0;
 	Mb4TagList TagList=0;
 	Mb4TextRepresentation TextRepresentation=0;
@@ -182,6 +314,11 @@
 
 	mb4_alias_get_locale(Alias,Str,Size);
 	mb4_alias_get_text(Alias,Str,Size);
+	mb4_alias_get_sortname(Alias,Str,Size);
+	mb4_alias_get_type(Alias,Str,Size);
+	mb4_alias_get_primary(Alias,Str,Size);
+	mb4_alias_get_begindate(Alias,Str,Size);
+	mb4_alias_get_enddate(Alias,Str,Size);
 	Alias=mb4_alias_clone(Alias);
 	mb4_alias_delete(Alias);
 
@@ -199,6 +336,8 @@
 	mb4_artist_get_gender(Artist,Str,Size);
 	mb4_artist_get_country(Artist,Str,Size);
 	mb4_artist_get_disambiguation(Artist,Str,Size);
+	mb4_artist_get_ipi(Artist,Str,Size);
+	IPIList=mb4_artist_get_ipilist(Artist);
 	Lifespan=mb4_artist_get_lifespan(Artist);
 	AliasList=mb4_artist_get_aliaslist(Artist);
 	RecordingList=mb4_artist_get_recordinglist(Artist);
@@ -253,16 +392,26 @@
 	FreeDBDisc=mb4_freedbdisc_clone(FreeDBDisc);
 	mb4_freedbdisc_delete(FreeDBDisc);
 
+	mb4_ipi_get_ipi(IPI,Str,Size);
+	IPI=mb4_ipi_clone(IPI);
+	mb4_ipi_delete(IPI);
+
 	mb4_isrc_get_id(ISRC,Str,Size);
 	RecordingList=mb4_isrc_get_recordinglist(ISRC);
 	ISRC=mb4_isrc_clone(ISRC);
 	mb4_isrc_delete(ISRC);
 
+	mb4_iswc_get_iswc(ISWC,Str,Size);
+	ISWC=mb4_iswc_clone(ISWC);
+	mb4_iswc_delete(ISWC);
+
 	mb4_label_get_id(Label,Str,Size);
 	mb4_label_get_type(Label,Str,Size);
 	mb4_label_get_name(Label,Str,Size);
 	mb4_label_get_sortname(Label,Str,Size);
 	DummyInt=mb4_label_get_labelcode(Label);
+	mb4_label_get_ipi(Label,Str,Size);
+	IPIList=mb4_label_get_ipilist(Label);
 	mb4_label_get_disambiguation(Label,Str,Size);
 	mb4_label_get_country(Label,Str,Size);
 	Lifespan=mb4_label_get_lifespan(Label);
@@ -283,6 +432,7 @@
 
 	mb4_lifespan_get_begin(Lifespan,Str,Size);
 	mb4_lifespan_get_end(Lifespan,Str,Size);
+	mb4_lifespan_get_ended(Lifespan,Str,Size);
 	Lifespan=mb4_lifespan_clone(Lifespan);
 	mb4_lifespan_delete(Lifespan);
 
@@ -366,6 +516,7 @@
 	DummyResult=mb4_query_get_lastresult(Query);
 	DummyInt=mb4_query_get_lasthttpcode(Query);
 	mb4_query_get_lasterrormessage(Query,Str,Size);
+	mb4_query_get_version(Query,Str,Size);
 	mb4_query_delete(Query);
 
 	DummyInt=mb4_rating_get_votescount(Rating);
@@ -382,6 +533,7 @@
 	PUIDList=mb4_recording_get_puidlist(Recording);
 	ISRCList=mb4_recording_get_isrclist(Recording);
 	RelationList=mb4_recording_get_relationlist(Recording);
+	RelationListList=mb4_recording_get_relationlistlist(Recording);
 	TagList=mb4_recording_get_taglist(Recording);
 	UserTagList=mb4_recording_get_usertaglist(Recording);
 	Rating=mb4_recording_get_rating(Recording);
@@ -427,6 +579,7 @@
 
 	mb4_releasegroup_get_id(ReleaseGroup,Str,Size);
 	mb4_releasegroup_get_type(ReleaseGroup,Str,Size);
+	mb4_releasegroup_get_primarytype(ReleaseGroup,Str,Size);
 	mb4_releasegroup_get_firstreleasedate(ReleaseGroup,Str,Size);
 	mb4_releasegroup_get_title(ReleaseGroup,Str,Size);
 	mb4_releasegroup_get_disambiguation(ReleaseGroup,Str,Size);
@@ -437,6 +590,7 @@
 	UserTagList=mb4_releasegroup_get_usertaglist(ReleaseGroup);
 	Rating=mb4_releasegroup_get_rating(ReleaseGroup);
 	UserRating=mb4_releasegroup_get_userrating(ReleaseGroup);
+	SecondaryTypeList=mb4_releasegroup_get_secondarytypelist(ReleaseGroup);
 	ReleaseGroup=mb4_releasegroup_clone(ReleaseGroup);
 	mb4_releasegroup_delete(ReleaseGroup);
 
@@ -455,6 +609,7 @@
 	Recording=mb4_track_get_recording(Track);
 	DummyInt=mb4_track_get_length(Track);
 	ArtistCredit=mb4_track_get_artistcredit(Track);
+	mb4_track_get_number(Track,Str,Size);
 	Track=mb4_track_clone(Track);
 	mb4_track_delete(Track);
 
@@ -478,6 +633,7 @@
 	UserTagList=mb4_work_get_usertaglist(Work);
 	Rating=mb4_work_get_rating(Work);
 	UserRating=mb4_work_get_userrating(Work);
+	mb4_work_get_language(Work,Str,Size);
 
 	mb4_alias_list_size(AliasList);
 	Alias=mb4_alias_list_item(AliasList,0);
@@ -535,6 +691,13 @@
 	DummyInt=mb4_freedbdisc_list_get_offset(FreeDBDiscList);
 	mb4_freedbdisc_list_delete(FreeDBDiscList);
 
+	DummyInt=mb4_ipi_list_size(IPIList);
+	ISRC=mb4_ipi_list_item(IPIList,0);
+	ISRCList=mb4_ipi_list_clone(IPIList);
+	DummyInt=mb4_ipi_list_get_count(IPIList);
+	DummyInt=mb4_ipi_list_get_offset(IPIList);
+	mb4_ipi_list_delete(IPIList);
+
 	DummyInt=mb4_isrc_list_size(ISRCList);
 	ISRC=mb4_isrc_list_item(ISRCList,0);
 	ISRCList=mb4_isrc_list_clone(ISRCList);
@@ -542,6 +705,13 @@
 	DummyInt=mb4_isrc_list_get_offset(ISRCList);
 	mb4_isrc_list_delete(ISRCList);
 
+	DummyInt=mb4_iswc_list_size(ISWCList);
+	ISWC=mb4_iswc_list_item(ISWCList,0);
+	ISWCList=mb4_iswc_list_clone(ISWCList);
+	DummyInt=mb4_iswc_list_get_count(ISWCList);
+	DummyInt=mb4_iswc_list_get_offset(ISWCList);
+	mb4_iswc_list_delete(ISWCList);
+
 	DummyInt=mb4_label_list_size(LabelList);
 	Label=mb4_label_list_item(LabelList,0);
 	LabelList=mb4_label_list_clone(LabelList);
@@ -600,6 +770,13 @@
 	DummyInt=mb4_relation_list_get_offset(RelationList);
 	mb4_relation_list_delete(RelationList);
 
+	DummyInt=mb4_relationlist_list_size(RelationListList);
+	Relation=mb4_relationlist_list_item(RelationListList,0);
+	RelationList=mb4_relationlist_list_clone(RelationListList);
+	DummyInt=mb4_relationlist_list_get_count(RelationListList);
+	DummyInt=mb4_relationlist_list_get_offset(RelationListList);
+	mb4_relationlist_list_delete(RelationListList);
+
 	DummyInt=mb4_release_list_size(ReleaseList);
 	Release=mb4_release_list_item(ReleaseList,0);
 	ReleaseList=mb4_release_list_clone(ReleaseList);
@@ -614,6 +791,13 @@
 	DummyInt=mb4_releasegroup_list_get_offset(ReleaseGroupList);
 	mb4_releasegroup_list_delete(ReleaseGroupList);
 
+	DummyInt=mb4_secondarytype_list_size(SecondaryTypeList);
+	SecondaryType=mb4_secondarytype_list_item(SecondaryTypeList,0);
+	ReleaseGroupList=mb4_secondarytype_list_clone(SecondaryTypeList);
+	DummyInt=mb4_secondarytype_list_get_count(SecondaryTypeList);
+	DummyInt=mb4_secondarytype_list_get_offset(SecondaryTypeList);
+	mb4_secondarytype_list_delete(SecondaryTypeList);
+
 	DummyInt=mb4_tag_list_size(TagList);
 	Tag=mb4_tag_list_item(TagList,0);
 	TagList=mb4_tag_list_clone(TagList);
@@ -646,4 +830,5 @@
 	DummyDouble=DummyDouble;
 	DummyBool=DummyBool;
 	DummyResult=DummyResult;
+	SecondaryType=SecondaryType;
 }

=== modified file 'tests/mbtest.cc'
--- tests/mbtest.cc	2012-02-01 17:18:10 +0000
+++ tests/mbtest.cc	2012-06-25 05:56:21 +0000
@@ -1,121 +1,342 @@
-/* --------------------------------------------------------------------------
-
-   libmusicbrainz4 - Client library to access MusicBrainz
-
-   Copyright (C) 2011 Andrew Hawkins
-
-   This file is part of libmusicbrainz4.
-
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of v2 of the GNU Lesser General Public
-   License as published by the Free Software Foundation.
-
-   libmusicbrainz4 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this library.  If not, see <http://www.gnu.org/licenses/>.
-
-     $Id: mbtest.cc 13254 2011-08-09 09:29:20Z adhawkins $
-
-----------------------------------------------------------------------------*/
-
-#include <iostream>
-
-#include <strings.h>
-
-#include "musicbrainz4/Query.h"
-#include "musicbrainz4/Release.h"
-#include "musicbrainz4/ReleaseGroup.h"
-#include "musicbrainz4/Medium.h"
-#include "musicbrainz4/MediumList.h"
-#include "musicbrainz4/NameCredit.h"
-#include "musicbrainz4/ArtistCredit.h"
-#include "musicbrainz4/Artist.h"
-#include "musicbrainz4/HTTPFetch.h"
-#include "musicbrainz4/Track.h"
-#include "musicbrainz4/Recording.h"
-#include "musicbrainz4/Collection.h"
-#include "musicbrainz4/CollectionList.h"
-
-int main(int argc, const char *argv[])
-{
-	MusicBrainz4::CQuery MB("MBTest/v1.0");
-
-	if (argc>1)
-	{
-		std::cout << "Setting username: '" << argv[1] << "'" << std::endl;
-		MB.SetUserName(argv[1]);
-	}
-
-	if (argc>2)
-	{
-		std::cout << "Setting password: '" << argv[2] << "'" << std::endl;
-		MB.SetPassword(argv[2]);
-	}
-
-	MusicBrainz4::CMetadata Metadata=MB.Query("collection");
-	MusicBrainz4::CCollectionList *CollectionList=Metadata.CollectionList();
-	if (CollectionList && 0!=CollectionList->NumItems())
-	{
-		MusicBrainz4::CCollection *Collection=CollectionList->Item(0);
-		std::cout << "ID is " << Collection->ID() << std::endl;
-
-		MB.Query("collection",Collection->ID(),"releases");
-
-		std::vector<std::string> Releases;
-		Releases.push_back("b5748ac9-f38e-48f7-a8a4-8b43cab025bc");
-		Releases.push_back("f6335672-c521-4129-86c3-490d20533e08");
-		bool Ret=MB.AddCollectionEntries(Collection->ID(),Releases);
-		std::cout << "AddCollectionEntries returns " << std::boolalpha << Ret << std::endl;
-
-		MB.Query("collection",Collection->ID(),"releases");
-
-		Releases.clear();
-		Releases.push_back("b5748ac9-f38e-48f7-a8a4-8b43cab025bc");
-		Ret=MB.DeleteCollectionEntries(Collection->ID(),Releases);
-		std::cout << "DeleteCollectionEntries returns " << std::boolalpha << Ret << std::endl;
-
-		MB.Query("collection",Collection->ID(),"releases");
-	}
-
-	return 0;
-
-	std::string DiscID="arIS30RPWowvwNEqsqdDnZzDGhk-";
-
-	if (argc==2)
-		DiscID=argv[1];
-
-	MusicBrainz4::CReleaseList ReleaseList=MB.LookupDiscID(DiscID);
-
-	for (int count=0;count<ReleaseList.NumItems();count++)
-	{
-		MusicBrainz4::CRelease *Release=ReleaseList.Item(count);
-
-		MusicBrainz4::CRelease FullRelease=MB.LookupRelease(Release->ID());
-
-		std::cout << "Full release: " << std::endl;
-
-		std::cout << FullRelease << std::endl;
-
-		std::cout << "Release group title: '" << FullRelease.ReleaseGroup()->Title() << "'" << std::endl;
-
-		std::cout << std::endl << std::endl << "Media matching " << DiscID << ":" << std::endl;
-
-		MusicBrainz4::CMediumList MediaList=FullRelease.MediaMatchingDiscID(DiscID);
-
-		for (int count=0;count<MediaList.NumItems();count++)
-		{
-			MusicBrainz4::CMedium *Medium=MediaList.Item(count);
-
-			std::cout << *Medium << std::endl;
-		}
-
-		std::cout << std::endl << std::endl;
-	}
-
-	return 0;
-}
-
+/* --------------------------------------------------------------------------
+
+   libmusicbrainz4 - Client library to access MusicBrainz
+
+   Copyright (C) 2011 Andrew Hawkins
+
+   This file is part of libmusicbrainz4.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of v2 of the GNU Lesser General Public
+   License as published by the Free Software Foundation.
+
+   libmusicbrainz4 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+     $Id$
+
+----------------------------------------------------------------------------*/
+
+#include <iostream>
+
+#include <strings.h>
+
+#include "musicbrainz4/Query.h"
+#include "musicbrainz4/Release.h"
+#include "musicbrainz4/ReleaseGroup.h"
+#include "musicbrainz4/Medium.h"
+#include "musicbrainz4/MediumList.h"
+#include "musicbrainz4/NameCredit.h"
+#include "musicbrainz4/ArtistCredit.h"
+#include "musicbrainz4/Artist.h"
+#include "musicbrainz4/Alias.h"
+#include "musicbrainz4/HTTPFetch.h"
+#include "musicbrainz4/Track.h"
+#include "musicbrainz4/Recording.h"
+#include "musicbrainz4/Collection.h"
+#include "musicbrainz4/CollectionList.h"
+#include "musicbrainz4/RelationListList.h"
+#include "musicbrainz4/RelationList.h"
+#include "musicbrainz4/Relation.h"
+#include "musicbrainz4/Work.h"
+#include "musicbrainz4/ISWC.h"
+#include "musicbrainz4/ISWCList.h"
+#include "musicbrainz4/SecondaryType.h"
+#include "musicbrainz4/SecondaryTypeList.h"
+#include "musicbrainz4/IPI.h"
+#include "musicbrainz4/IPIList.h"
+#include "musicbrainz4/Lifespan.h"
+
+void PrintRelationList(MusicBrainz4::CRelationList *RelationList)
+{
+	std::cout << "Target type: '" << RelationList->TargetType() << "'" << std::endl;
+
+	for (int count=0;count<RelationList->NumItems();count++)
+	{
+		MusicBrainz4::CRelation *Relation=RelationList->Item(count);
+		std::cout << "Relation: " << count << " - Type '" << Relation->Type() << "', Target '" << Relation->Target() << "'" << std::endl;
+	}
+}
+
+int main(int argc, const char *argv[])
+{
+	MusicBrainz4::CQuery MB2("MBTest/v1.0","test.musicbrainz.org");
+
+	MusicBrainz4::CQuery::tParamMap Params5;
+	Params5["inc"]="aliases";
+	MusicBrainz4::CMetadata Metadata5=MB2.Query("artist","4b585938-f271-45e2-b19a-91c634b5e396","",Params5);
+	MusicBrainz4::CArtist *Artist=Metadata5.Artist();
+	if (Artist)
+	{
+		MusicBrainz4::CLifespan *Lifespan=Artist->Lifespan();
+		if (Lifespan)
+		{
+			std::cout << "Begin: " << Lifespan->Begin() << std::endl;
+			std::cout << "End: " << Lifespan->End() << std::endl;
+			std::cout << "Ended: " << Lifespan->Ended() << std::endl;
+		}
+	}
+
+	return 0;
+
+	MusicBrainz4::CMetadata Metadata8=MB2.Query("release-group","2eefe885-f050-426d-93f0-29c5eb8b4f9a");
+	std::cout << Metadata8 << std::endl;
+	return 0;
+
+	MusicBrainz4::CMetadata Metadata7=MB2.Query("artist","4b585938-f271-45e2-b19a-91c634b5e396");
+	Artist=Metadata7.Artist();
+	if (Artist)
+	{
+		std::cout << "IPI: " << Artist->IPI() << std::endl;
+
+		MusicBrainz4::CIPIList *IPIList=Artist->IPIList();
+		if (IPIList)
+		{
+			for (int count=0;count<IPIList->NumItems();count++)
+			{
+				MusicBrainz4::CIPI *IPI=IPIList->Item(count);
+				if (IPI)
+				{
+					std::cout << "IPI " << count << ": " << IPI->IPI() << std::endl;
+				}
+			}
+		}
+	}
+
+	return 0;
+
+	MusicBrainz4::CMetadata Metadata6=MB2.Query("release-group","2eefe885-f050-426d-93f0-29c5eb8b4f9a");
+	MusicBrainz4::CReleaseGroup *ReleaseGroup=Metadata6.ReleaseGroup();
+	if (ReleaseGroup)
+	{
+		std::cout << "ID: " << ReleaseGroup->ID() << std::endl;
+		std::cout << "Type: " << ReleaseGroup->Type() << std::endl;
+		std::cout << "Title: " << ReleaseGroup->Title() << std::endl;
+		std::cout << "Disambiguation: " << ReleaseGroup->Disambiguation() << std::endl;
+		std::cout << "FirstReleaseDate: " << ReleaseGroup->FirstReleaseDate() << std::endl;
+
+		MusicBrainz4::CSecondaryTypeList *SecondaryTypeList=ReleaseGroup->SecondaryTypeList();
+		if (SecondaryTypeList)
+		{
+			for (int count=0;count<SecondaryTypeList->NumItems();count++)
+			{
+				MusicBrainz4::CSecondaryType *SecondaryType=SecondaryTypeList->Item(count);
+				if (SecondaryType)
+				{
+					std::cout << "Secondary type " << count << " = " << SecondaryType->SecondaryType() << std::endl;
+				}
+			}
+		}
+	}
+
+	return 0;
+
+	MusicBrainz4::CMetadata Metadata4=MB2.Query("work","b0d17375-5593-390e-a936-1a65ce74c630");
+
+	MusicBrainz4::CWork *ThisWork=Metadata4.Work();
+	if (ThisWork)
+	{
+		std::cout << "ID: '" << ThisWork->ID() << "'" << std::endl;
+		std::cout << "Title: '" << ThisWork->Title() << "'" << std::endl;
+		std::cout << "ISWC: '" << ThisWork->ISWC() << "'" << std::endl;
+
+		MusicBrainz4::CISWCList *ISWCList=ThisWork->ISWCList();
+		if (ISWCList)
+		{
+			for (int count=0;count<ISWCList->NumItems();count++)
+			{
+				MusicBrainz4::CISWC *ISWC=ISWCList->Item(count);
+				std::cout << "ISWC " << count << " - '" << ISWC->ISWC() << "'" << std::endl;
+			}
+		}
+
+		std::cout << "Disambiguation: '" << ThisWork->Disambiguation() << "'" << std::endl;
+		std::cout << "Language: '" << ThisWork->Language() << "'" << std::endl;
+	}
+
+	MusicBrainz4::CQuery::tParamMap Params3;
+	Params3["inc"]="media recordings";
+
+	Metadata4=MB2.Query("release","ae050d13-7f86-495e-9918-10d8c0ac58e8","",Params3);
+	MusicBrainz4::CRelease *Release2=Metadata4.Release();
+	if (Release2)
+	{
+		MusicBrainz4::CMediumList *MediumList=Release2->MediumList();
+		if (MediumList)
+		{
+			for (int count=0;count<MediumList->NumItems();count++)
+			{
+				MusicBrainz4::CMedium *Medium=MediumList->Item(count);
+				if (Medium)
+				{
+					MusicBrainz4::CTrackList *TrackList=Medium->TrackList();
+					if (TrackList)
+					{
+						for (int track=0;track<TrackList->NumItems();track++)
+						{
+							MusicBrainz4::CTrack *Track=TrackList->Item(track);
+							if (Track)
+							{
+								std::cout << "Position: " << Track->Position() << std::endl;
+								std::cout << "Title: " << Track->Title() << std::endl;
+								std::cout << "Length: " << Track->Length() << std::endl;
+								std::cout << "Number: " << Track->Number() << std::endl;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return 0;
+
+	MusicBrainz4::CQuery MB("MBTest/v1.0");
+
+	if (argc>1)
+	{
+		std::cout << "Setting username: '" << argv[1] << "'" << std::endl;
+		MB.SetUserName(argv[1]);
+	}
+
+	if (argc>2)
+	{
+		std::cout << "Setting password: '" << argv[2] << "'" << std::endl;
+		MB.SetPassword(argv[2]);
+	}
+
+	MusicBrainz4::CQuery::tParamMap Params2;
+	Params2["inc"]="artists release-groups url-rels work-level-rels work-rels artist-rels";
+	MusicBrainz4::CMetadata Metadata3=MB.Query("recording","3631f569-520d-40ff-a1ee-076604723275","",Params2);
+	MusicBrainz4::CRecording *Recording=Metadata3.Recording();
+	if (Recording)
+	{
+		MusicBrainz4::CRelationList *RelationList=Recording->RelationList();
+		PrintRelationList(RelationList);
+
+		MusicBrainz4::CRelationListList *RelationListList=Recording->RelationListList();
+		for (int count=0;count<RelationListList->NumItems();count++)
+		{
+			MusicBrainz4::CRelationList *RelationList=RelationListList->Item(count);
+			PrintRelationList(RelationList);
+		}
+	}
+
+	return 0;
+
+	MusicBrainz4::CQuery::tParamMap Params;
+	Params["inc"]="artists labels recordings release-groups url-rels discids recording-level-rels work-level-rels work-rels artist-rels";
+
+	MusicBrainz4::CMetadata Metadata2=MB.Query("release","ef4596f0-5554-443a-aea9-247d2e250f61","",Params);
+
+	MusicBrainz4::CRelease *Release=Metadata2.Release();
+	if (Release)
+	{
+		MusicBrainz4::CMediumList *MediumList=Release->MediumList();
+
+		if (MediumList)
+		{
+			for (int MediumNum=0;MediumNum<MediumList->NumItems();MediumNum++)
+			{
+				MusicBrainz4::CMedium *Medium=MediumList->Item(MediumNum);
+				if (Medium)
+				{
+					MusicBrainz4::CTrackList *TrackList=Medium->TrackList();
+					if (TrackList)
+					{
+						for (int TrackNum=0;TrackNum<TrackList->NumItems();TrackNum++)
+						{
+							MusicBrainz4::CTrack *Track=TrackList->Item(TrackNum);
+							if (Track)
+							{
+								MusicBrainz4::CRecording *Recording=Track->Recording();
+								if (Recording)
+								{
+									MusicBrainz4::CRelationListList *RelationListList=Recording->RelationListList();
+									if (RelationListList)
+									{
+										std::cout << RelationListList->NumItems() << " items" << std::endl;
+										for (int RelationListNum=0;RelationListNum<RelationListList->NumItems();RelationListNum++)
+										{
+											MusicBrainz4::CRelationList *RelationList=RelationListList->Item(RelationListNum);
+											PrintRelationList(RelationList);
+										}
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return 0;
+
+	MusicBrainz4::CMetadata Metadata=MB.Query("collection");
+	MusicBrainz4::CCollectionList *CollectionList=Metadata.CollectionList();
+	if (CollectionList && 0!=CollectionList->NumItems())
+	{
+		MusicBrainz4::CCollection *Collection=CollectionList->Item(0);
+		std::cout << "ID is " << Collection->ID() << std::endl;
+
+		MB.Query("collection",Collection->ID(),"releases");
+
+		std::vector<std::string> Releases;
+		Releases.push_back("b5748ac9-f38e-48f7-a8a4-8b43cab025bc");
+		Releases.push_back("f6335672-c521-4129-86c3-490d20533e08");
+		bool Ret=MB.AddCollectionEntries(Collection->ID(),Releases);
+		std::cout << "AddCollectionEntries returns " << std::boolalpha << Ret << std::endl;
+
+		MB.Query("collection",Collection->ID(),"releases");
+
+		Releases.clear();
+		Releases.push_back("b5748ac9-f38e-48f7-a8a4-8b43cab025bc");
+		Ret=MB.DeleteCollectionEntries(Collection->ID(),Releases);
+		std::cout << "DeleteCollectionEntries returns " << std::boolalpha << Ret << std::endl;
+
+		MB.Query("collection",Collection->ID(),"releases");
+	}
+
+	return 0;
+
+	std::string DiscID="arIS30RPWowvwNEqsqdDnZzDGhk-";
+
+	if (argc==2)
+		DiscID=argv[1];
+
+	MusicBrainz4::CReleaseList ReleaseList=MB.LookupDiscID(DiscID);
+
+	for (int count=0;count<ReleaseList.NumItems();count++)
+	{
+		MusicBrainz4::CRelease *Release=ReleaseList.Item(count);
+
+		MusicBrainz4::CRelease FullRelease=MB.LookupRelease(Release->ID());
+
+		std::cout << "Full release: " << std::endl;
+
+		std::cout << FullRelease << std::endl;
+
+		std::cout << "Release group title: '" << FullRelease.ReleaseGroup()->Title() << "'" << std::endl;
+
+		std::cout << std::endl << std::endl << "Media matching " << DiscID << ":" << std::endl;
+
+		MusicBrainz4::CMediumList MediaList=FullRelease.MediaMatchingDiscID(DiscID);
+
+		for (int count=0;count<MediaList.NumItems();count++)
+		{
+			MusicBrainz4::CMedium *Medium=MediaList.Item(count);
+
+			std::cout << *Medium << std::endl;
+		}
+
+		std::cout << std::endl << std::endl;
+	}
+
+	return 0;
+}

=== modified file 'valgrind.supp'
--- valgrind.supp	2012-02-01 17:18:10 +0000
+++ valgrind.supp	2012-06-25 05:56:21 +0000
@@ -5,7 +5,7 @@
    obj:/usr/lib/i686/cmov/libcrypto.so.0.9.8
    fun:CRYPTO_malloc
    ...
- }
+}
 {
    crypto_realloc
    Memcheck:Leak
@@ -13,4 +13,20 @@
    obj:/usr/lib/i686/cmov/libcrypto.so.0.9.8
    fun:CRYPTO_realloc
    ...
- }
+}
+{
+   ne_sock_init
+   Memcheck:Leak
+   ...
+   obj:/usr/lib/libneon-gnutls.so.27.2.3
+   fun:ne_sock_init
+   ...
+}
+{
+   gcry_create_nonce
+   Memcheck:Leak
+   ...
+   obj:/usr/lib/libgcrypt.so.11.5.3
+   fun:gcry_create_nonce
+   ...
+}

