banshee r4390 - in trunk/musicbrainz-sharp: . docs/en docs/en/MusicBrainz src/MusicBrainz src/MusicBrainz/MusicBrainz tests tests/MusicBrainz.Tests



Author: scottp
Date: Sun Aug 17 08:52:21 2008
New Revision: 4390
URL: http://svn.gnome.org/viewvc/banshee?rev=4390&view=rev

Log:
* src/MusicBrainz/MusicBrainz/MusicBrainzObject.cs,
  src/MusicBrainz/MusicBrainz/Release.cs,
  src/MusicBrainz/MusicBrainz/Track.cs: Made protected members
  internal. Minor refactoring.
* src/MusicBrainz/MusicBrainz/Relation.cs: UrlRelations uses Uri
  instead of string.
* src/MusicBrainz/MusicBrainz/Label.cs: Made protected members
  internal. Minor refactoring. Fixed bug with Country.
* src/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs,
  src/MusicBrainz/MusicBrainz/MusicBrainzItem.cs: Made protected
  members internal.
* src/MusicBrainz/MusicBrainz/XmlRequestEventArgs.cs: Use Uri instead
  of string.
* src/MusicBrainz/MusicBrainz/LocalDisc.cs: Made protected members
  internal. Removed ThreadStatic attributes and went for locks
  instead. This is the way we concurentize our code, concurentize our
  code, concurentize our code. TrackDuration is now an array of
  TimeSpans rather than ints. Because that's more awesome.
  SubissionUrl is now a Uri rather than a string. For the same
  reason. Added LocalDiscException class to wrap problems with the
  hardware layer code.
* src/MusicBrainz/MusicBrainz/MusicBrainzException.cs: Minor
  refactoring.
* src/MusicBrainz/MusicBrainz/Query.cs: Throw
  ArgumentOutOfRangeException instead of IndexOutOfRangeException
  because Framework Design Guidelines told me to. Removed ToList and
  ToArray. People can use the IEnumerable<T> extension methods if
  they want.
* src/MusicBrainz/MusicBrainz/Artist.cs: Made protected members
  internal. Removed ThreadStatic attribute from static field and
  added locks for proper concurrency handling. GetReleases
  (ArtistReleaseType) no longer changes the Artist.ArtistReleaseType
  to the provided argument. Added ReleaseArtistType enum to replace
  the various bool for ArtistReleaseType (confusing names, I know.
  Tough titties).
* src/MusicBrainz/MusicBrainz/MusicBrainzService.cs: Got rid of
  ThreadStatic and added locks. Yeah! Changed ServiceUrl to Uri from
  string. Yeah again!
* docs/en/MusicBrainz/Release.xml, docs/en/MusicBrainz/Disc.xml,
  docs/en/MusicBrainz/MusicBrainzEntity.xml,
  docs/en/MusicBrainz/ReleaseFormat.xml,
  docs/en/MusicBrainz/ReleaseQueryParameters.xml,
  docs/en/MusicBrainz/Relation`1.xml, docs/en/MusicBrainz/Artist.xml,
  docs/en/MusicBrainz/MusicBrainzService.xml,
  docs/en/MusicBrainz/XmlRequestHandler.xml,
  docs/en/MusicBrainz/MusicBrainzUnauthorizedException.xml,
  docs/en/MusicBrainz/LocalDiscException.xml,
  docs/en/MusicBrainz/RelationPrimative`1.xml,
  docs/en/MusicBrainz/LabelType.xml, docs/en/MusicBrainz/Event.xml,
  docs/en/MusicBrainz/ReleaseType.xml,
  docs/en/MusicBrainz/MusicBrainzNotFoundException.xml,
  docs/en/MusicBrainz/ReleaseStatus.xml,
  docs/en/MusicBrainz/Query`1.xml,
  docs/en/MusicBrainz/XmlRequestEventArgs.xml,
  docs/en/MusicBrainz/RelationBase`1.xml,
  docs/en/MusicBrainz/LocalDisc.xml,
  docs/en/MusicBrainz/UrlRelation.xml, docs/en/MusicBrainz/Track.xml,
  docs/en/MusicBrainz/MusicBrainzItem.xml,
  docs/en/MusicBrainz/ArtistType.xml,
  docs/en/MusicBrainz/ItemQueryParameters.xml,
  docs/en/MusicBrainz/ArtistReleaseType.xml,
  docs/en/MusicBrainz/MusicBrainzInvalidParameterException.xml,
  docs/en/MusicBrainz/MusicBrainzObject.xml,
  docs/en/MusicBrainz/TrackQueryParameters.xml,
  docs/en/MusicBrainz/RelationDirection.xml,
  docs/en/MusicBrainz/Label.xml, docs/en/index.xml: Docs updated.
* tests/MusicBrainz.Tests/ArtistTests.cs: Use ReleaseArtistType instead
  of the various bool when instantiating ArtistReleaseType.

Added:
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/LocalDisc.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/LocalDiscException.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzService.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/RelationBase`1.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/XmlRequestEventArgs.xml
Removed:
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/RelationPrimative`1.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/XmlRequestHandler.xml
Modified:
   trunk/musicbrainz-sharp/ChangeLog
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/Artist.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/ArtistReleaseType.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/ArtistType.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/Disc.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/Event.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/ItemQueryParameters.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/Label.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/LabelType.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzEntity.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzInvalidParameterException.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzItem.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzNotFoundException.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzObject.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzUnauthorizedException.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/Query`1.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/RelationDirection.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/Relation`1.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/Release.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseFormat.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseQueryParameters.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseStatus.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseType.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/Track.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/TrackQueryParameters.xml
   trunk/musicbrainz-sharp/docs/en/MusicBrainz/UrlRelation.xml
   trunk/musicbrainz-sharp/docs/en/index.xml
   trunk/musicbrainz-sharp/src/MusicBrainz/ChangeLog
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Artist.cs
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Label.cs
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/LocalDisc.cs
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzException.cs
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzItem.cs
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzObject.cs
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzService.cs
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Query.cs
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Relation.cs
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Release.cs
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Track.cs
   trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/XmlRequestEventArgs.cs
   trunk/musicbrainz-sharp/tests/ChangeLog
   trunk/musicbrainz-sharp/tests/MusicBrainz.Tests/ArtistTests.cs

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/Artist.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/Artist.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/Artist.xml	Sun Aug 17 08:52:21 2008
@@ -9,198 +9,244 @@
   </Base>
   <Interfaces />
   <Docs>
-    <summary>The Artist class encapsulates the MusicBrainz Artist resource.</summary>
+    <summary>Encapsulates the MusicBrainz Artist resource.</summary>
     <remarks>
+      <para>
+Print all of the releases by the artist "Betchadupa":
+<example><code lang="C#">
+Artist a = Artist.Query ("Betchadupa");
+foreach (Release r in a.GetReleases ()) {
+    Console.WriteLine (r.GetTitle ());
+}
+</code></example></para>
+      <para>
+Get an artist by MusicBrainz ID:
+<example><code lang="C#">
+Artist a = Artist.Get ("ff05359c-09ae-4113-9da2-c3dc32eebb0f");
+</code></example></para>
       <block subset="none" type="note">
 See http://wiki.musicbrainz.org/Artist
 </block>
     </remarks>
   </Docs>
   <Members>
+    
+    
+    
+    
+    
+    
+    
+    
     <Member MemberName="ArtistReleaseType">
-      <MemberSignature Language="C#" Value="public MusicBrainz.ArtistReleaseType ArtistReleaseType { set; get; };" />
+      <MemberSignature Language="C#" Value="public MusicBrainz.ArtistReleaseType ArtistReleaseType { set; get; }" />
       <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.ArtistReleaseType</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>The ArtistReleaseType will determin the Releases that are in <see cref="M:MusicBrainz.Artist.Releases" />.</summary>
-        <value>To be added.</value>
-        <remarks>
+      <ReturnValue><ReturnType>MusicBrainz.ArtistReleaseType</ReturnType></ReturnValue>
+      <Docs><summary>The ArtistReleaseType will determin the Releases that are returned by <see cref="M:MusicBrainz.Artist.GetReleases()" /></summary><value>The <see cref="T:MusicBrainz.ArtistReleaseType" /> of the Artist.</value><remarks>
           <para>
             <see cref="M:MusicBrainz.Artist.DefaultArtistReleaseType" /> will be used if no ArtistReleaseType is specified.</para>
           <para>
-If you wanted the <see cref="M:MusicBrainz.Artist.Releases" /> list to consist of official releases on which the artist appears as one of various artists, you would do the following:
+If you wanted <see cref="M:MusicBrainz.Artist.GetReleases()" /> to return official releases on which the artist appears as one of various artists, you would do the following:
 <example><code lang="C#">
-Artist a = GetSomeArtist();
-a.ArtistReleaseType = new ArtistReleaseType(ReleaseStatus.Official, true);
-foreach(Release r in a.Releases)
+artist.ArtistReleaseType = new ArtistReleaseType (ReleaseStatus.Official, ReleaseArtistType.SingleArtist);
+foreach (Release r in artist.GetReleases ())
     {...}
-  </code></example></para>
+</code></example></para>
           <para>
-If you wanted the the <see cref="M:MusicBrainz.Artist.Releases" /> list to consist of EPs releases authored soley by the artist, you would do the following:
+If you wanted <see cref="M:MusicBrainz.Artist.GetReleases()" /> to return of EPs releases authored soley by the artist, you would do the following:
 
 <example><code lang="C#">
-Artist a = GetSomeArtist();
-a.ArtistReleaseType = new ArtistReleaseType(ReleaseType.EP, false);
-foreach(Release r in a.Releases)
+artist.ArtistReleaseType = new ArtistReleaseType (ReleaseType.EP, ReleaseArtistType.SingleArtist);
+foreach (Release r in artist.GetReleases ())
     {...}
-  </code></example></para>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="DefaultArtistReleaseType">
-      <MemberSignature Language="C#" Value="public static MusicBrainz.ArtistReleaseType DefaultArtistReleaseType;" />
-      <MemberType>Field</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.ArtistReleaseType</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>The default <see cref="M:MusicBrainz.Artist.ArtistReleaseType" /> that will be adopted by all newly instantiated Artists.</summary>
-        <remarks>The default value of DefaultArtistReleaseType is:
-<example><code lang="C#">new ArtistReleaseType(ReleaseStatus.Official, false)
-  </code></example>
-This means Official Releases which are authored by the Artist alone.</remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Get">
-      <MemberSignature Language="C#" Value="public static MusicBrainz.Artist Get (string mbid);" />
+</code></example></para>
+          <block subset="none" type="note">
+            <para>
+You can use the <see cref="M:MusicBrainz.Artist.GetReleases(MusicBrainz.ArtistReleaseType)" /> override to retrieve releases other than those which conform to <see cref="M:MusicBrainz.Artist.ArtistReleaseType" /></para>
+          </block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="DefaultArtistReleaseType">
+      <MemberSignature Language="C#" Value="public static MusicBrainz.ArtistReleaseType DefaultArtistReleaseType { set; get; }" />
+      <MemberType>Property</MemberType>
+      <ReturnValue><ReturnType>MusicBrainz.ArtistReleaseType</ReturnType></ReturnValue>
+      <Docs><summary>The default <see cref="M:MusicBrainz.Artist.ArtistReleaseType" /> that will be adopted by all newly instantiated Artists.</summary><value>The <see cref="T:MusicBrainz.ArtistReleaseType" /> of newly instantiated Artists.</value><remarks>
+          <para>
+This property is thread-safe.
+</para>
+          <para>
+The default value of DefaultArtistReleaseType is:
+<example><code lang="C#">new ArtistReleaseType (ReleaseStatus.Official, ReleaseArtistType.SingleArtist)
+</code></example>
+This means Official Releases which are authored by the Artist alone.</para>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            The value is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Get">
+      <MemberSignature Language="C#" Value="public static MusicBrainz.Artist Get (string id);" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.Artist</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="mbid" Type="System.String" />
-      </Parameters>
-      <Docs>
-        <param name="mbid">The MusicBrainz ID; a universal identifier.</param>
-        <summary>Retrieve an Artist by universal identifier.</summary>
-        <returns>The Artist with the specified MBID.</returns>
-        <remarks>
+      <ReturnValue><ReturnType>MusicBrainz.Artist</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="id" Type="System.String" /></Parameters>
+      <Docs><param name="id">The MusicBrainz ID of the desired Artist.</param><summary>Retrieve an Artist by universal ID.</summary><returns>The Artist with the specified ID.</returns><remarks>
+          <para>
+Get the artist "Goodshirt":
+<example><code lang="C#">
+Artist a = Artist.Get ("ff05359c-09ae-4113-9da2-c3dc32eebb0f");
+</code></example></para>
           <block subset="none" type="note">
 See http://wiki.musicbrainz.org/ArtistID
 </block>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="op_Implicit">
-      <MemberSignature Language="C#" Value="public static string op_Implicit (MusicBrainz.Artist a);" />
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="id" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception><exception cref="T:MusicBrainz.MusicBrainzInvalidParameterException">
+          <para>
+            <paramref name="id" /> is not a valid MusicBrainz ID.
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetArtistType">
+      <MemberSignature Language="C#" Value="public MusicBrainz.ArtistType GetArtistType ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>MusicBrainz.ArtistType</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Get the type of the Artist.</summary><returns>The type of the Artist.</returns><remarks>
+          <para>
+If the type has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/ArtistType
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetReleases">
+      <MemberSignature Language="C#" Value="public System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Release&gt; GetReleases ();" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>System.String</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="a" Type="MusicBrainz.Artist" />
-      </Parameters>
-      <Docs>
-        <param name="a">To be added.</param>
-        <summary>This operator is provided for the benefit of LINQ syntax. See remarks for details.</summary>
-        <returns>a.ToString()</returns>
-        <remarks>
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Release&gt;</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns a collection of the Artist's Releases which conform to the Artist's <see cref="M:MusicBrainz.Artist.ArtistReleaseType" /></summary><returns>A read-only collection of <see cref="T:MusicBrainz.Release" />s. If there are no matching releases, an empty collection.</returns><remarks>
+          <para>
+Print all of the releases by the artist "Betchadupa":
+<example><code lang="C#">
+Artist a = Artist.Query ("Betchadupa");
+foreach (Release r in a.GetReleases ()) {
+    Console.WriteLine (r.GetTitle ());
+}
+</code></example></para>
+          <para>
+If the releases have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+          <para>
+This method will never return null.
+</para>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetReleases">
+      <MemberSignature Language="C#" Value="public System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Release&gt; GetReleases (MusicBrainz.ArtistReleaseType artistReleaseType);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Release&gt;</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="artistReleaseType" Type="MusicBrainz.ArtistReleaseType" /></Parameters>
+      <Docs><param name="artistReleaseType">An <see cref="T:MusicBrainz.ArtistReleaseType" /> which describes the desired Releases.</param><summary>Returns a collection of the Artist's Releases which conform to the specified <see cref="T:MusicBrainz.ArtistReleaseType" />.</summary><returns>A read-only collection of MusicBrainz.Releases. If there are no matching releases, an empty collection.</returns><remarks>Print all of the bootleg releases of the band "NOFX":
+<example><code lang="C#">
+Artist a = Artist.Query ("NOFX");
+foreach (Release r in a.GetReleases (new ArtistReleaseType (ReleaseStatus.Bootleg, ReleaseArtistType.SingleArtist))) {
+    Console.WriteLine (r.GetTitle ());
+}
+</code></example><para>
+This method call will incure a request to the MusicBrainz server which can take upwards of a second.
+</para><para>
+This method will never return null.
+</para></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="op_Implicit">
+      <MemberSignature Language="C#" Value="public static string op_Implicit (MusicBrainz.Artist artist);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="artist" Type="MusicBrainz.Artist" /></Parameters>
+      <Docs><param name="artist">The Artist.</param><summary>This operator is provided for the benefit of LINQ syntax. See remarks for details.</summary><returns>artist.ToString ();</returns><remarks>
           <para>The purpose of providing this operator is to allow for the following LINQ syntax:
 <example><code lang="C#">
 var q = from a in MB.Artists
          where a == "Me First"
          select a;
-  </code></example></para>
+</code></example></para>
           <para>
 This syntax is beneficial for the following reason: LINQ queries are translated into Lucene queries and executed using the <see cref="M:MusicBrainz.Artist.QueryLucene" /> method. Given the following LINQ query:
 <example><code lang="C#">
 var q = from a in MB.Artists
-         where a.Name == "Me First"
+         where a.GetName () == "Me First"
          select a;
-  </code></example></para>
+</code></example></para>
           <para>
 the LINQ provider will make the following call:
 <example><code lang="C#">
 Artist.QueryLucene(@"artist:""Me First""");
-  </code></example></para>
+</code></example></para>
           <para>
 However, given the first query mentioned above, the LINQ provider will make this call:
 <example><code lang="C#">
 Artist.QueryLucene("Me First");
-  </code></example></para>
+</code></example></para>
           <para>
 These two queries are substantively different. See http://wiki.musicbrainz.org/TextSearchSyntax for more information.
 </para>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Query">
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Query">
       <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Artist&gt; Query (string name);" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.Query&lt;MusicBrainz.Artist&gt;</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="name" Type="System.String" />
-      </Parameters>
-      <Docs>
-        <param name="name">The name of an artist.</param>
-        <summary>Query for Artists by name.</summary>
-        <returns>An enumerable Query of results.</returns>
-        <remarks>To be added.</remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="QueryLucene">
-      <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Artist&gt; QueryLucene (string lucene_query);" />
+      <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Artist&gt;</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="name" Type="System.String" /></Parameters>
+      <Docs><param name="name">The name of an Artist.</param><summary>Query for Artists by name.</summary><returns>An enumerable Query of results.</returns><remarks>
+          <para>
+            Search for artists named "Sting":
+            <example><code lang="C#">
+foreach (Artist a in Artist.Query ("Sting"))
+    Console.WriteLine (string.Format ("{0} ({1}% relevance)", a.GetName (), a.Score));
+</code></example></para>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="name" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="QueryLucene">
+      <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Artist&gt; QueryLucene (string luceneQuery);" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.Query&lt;MusicBrainz.Artist&gt;</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="lucene_query" Type="System.String" />
-      </Parameters>
-      <Docs>
-        <param name="lucene_query">A lucene text query.</param>
-        <summary>Query for Artists by lucene text query.</summary>
-        <returns>An enumerable Query of results.</returns>
-        <remarks>
+      <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Artist&gt;</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="luceneQuery" Type="System.String" /></Parameters>
+      <Docs><param name="luceneQuery">A lucene text query.</param><summary>Query for Artists by lucene text query.</summary><returns>An enumerable Query of results.</returns><remarks>
           <block subset="none" type="note">
 See http://wiki.musicbrainz.org/TextSearchSyntax
 </block>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Releases">
-      <MemberSignature Language="C#" Value="public System.Collections.Generic.List&lt;MusicBrainz.Release&gt; Releases { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>System.Collections.Generic.List&lt;MusicBrainz.Release&gt;</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>A list of the Artist's Releases. The Releases in the list will be determined by the Artist's <see cref="M:MusicBrainz.Artist.ArtistReleaseType" />.</summary>
-        <value>A List of <see cref="T:MusicBrainz.Release" />s. If there are no releases, an empty List.</value>
-        <remarks>This property will never be null.</remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Type">
-      <MemberSignature Language="C#" Value="public MusicBrainz.ArtistType Type { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.ArtistType</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>The Type of the Artist.</summary>
-        <value>To be added.</value>
-        <remarks>
-          <block subset="none" type="note">
-See http://wiki.musicbrainz.org/ArtistType
-</block>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="UrlExtension">
-      <MemberSignature Language="C#" Value="protected override string UrlExtension { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>System.String</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>To be added.</summary>
-        <value>To be added.</value>
-        <remarks>To be added.</remarks>
-      </Docs>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="luceneQuery" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
-</Type>
\ No newline at end of file
+</Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/ArtistReleaseType.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/ArtistReleaseType.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/ArtistReleaseType.xml	Sun Aug 17 08:52:21 2008
@@ -9,7 +9,7 @@
   </Base>
   <Interfaces />
   <Docs>
-    <summary>An ArtistReleaseType determins the Releses that will appear in an <see cref="T:MusicBrainz.Artist" />'s <see cref="M:MusicBrainz.Artist.Releases" />.</summary>
+    <summary>Determins the Releses returned by <see cref="M:MusicBrainz.Artist.GetReleases" />.</summary>
     <remarks>The MusicBrainz XMLWebService requires that a request for an <see cref="T:MusicBrainz.Artist" />'s list of <see cref="T:MusicBrainz.Release" />s include a constraint of the type of releases to return. The constraint must specify both 1) whether to return releases which are solely the product of the Artist (single artist) or releases with multiple artists, of which the Artist is one (various artists)*, and 2) either the <see cref="T:MusicBrainz.ReleaseType" /> or <see cref="T:MusicBrainz.ReleaseStatus" /> of the releases to return. The ArtistReleaseType class encapsulates this constraint.
 <block subset="none" type="note">
 *See http://wiki.musicbrainz.org/SingleArtistRelease and http://wiki.musicbrainz.org/VariousArtistsRelease
@@ -17,22 +17,69 @@
   </Docs>
   <Members>
     
+    
+    
+    
     <Member MemberName=".ctor">
-      <MemberSignature Language="C#" Value="public ArtistReleaseType (MusicBrainz.ReleaseStatus status, bool various);" />
+      <MemberSignature Language="C#" Value="public ArtistReleaseType (MusicBrainz.ReleaseStatus status, MusicBrainz.ReleaseArtistType artistType);" />
+      <MemberType>Constructor</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <Parameters><Parameter Name="status" Type="MusicBrainz.ReleaseStatus" /><Parameter Name="artistType" Type="MusicBrainz.ReleaseArtistType" /></Parameters>
+      <Docs><param name="status">The desired <see cref="T:MusicBrainz.ReleaseStatus" /> of Releases to be returned by <see cref="M:MusicBrainz.Artist.GetReleases" />.</param><param name="artistType">Whether the Releases returned by <see cref="M:MusicBrainz.Artist.GetReleases" /> should consist of those which are authored by various artists.
+<block subset="none" type="note">
+See http://wiki.musicbrainz.org/SingleArtistRelease and http://wiki.musicbrainz.org/VariousArtistsRelease
+</block></param><summary>To be added.</summary><remarks>This describes bootleg releases in which the Artist is but one of various artists:
+<example><code lang="C#">
+new ArtistReleaseType (ReleaseStatus.Bootleg, ReleaseArtistType.VariousArtists);
+</code></example></remarks></Docs>
+    </Member><Member MemberName=".ctor">
+      <MemberSignature Language="C#" Value="public ArtistReleaseType (MusicBrainz.ReleaseType type, MusicBrainz.ReleaseArtistType artistType);" />
       <MemberType>Constructor</MemberType>
-      <Parameters><Parameter Name="status" Type="MusicBrainz.ReleaseStatus" /><Parameter Name="various" Type="System.Boolean" /></Parameters>
-      <Docs><param name="status">The desired <see cref="T:MusicBrainz.ReleaseStatus" /> of Releases to be included in the Artist's <see cref="M:MusicBrainz.Artist.Releases" />.</param><param name="various">Whether the Releases in the Artist's <see cref="M:MusicBrainz.Artist.Releases" /> should consist of those which are authored by various artists.
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <Parameters><Parameter Name="type" Type="MusicBrainz.ReleaseType" /><Parameter Name="artistType" Type="MusicBrainz.ReleaseArtistType" /></Parameters>
+      <Docs><param name="type">The desired <see cref="T:MusicBrainz.ReleaseType" /> of Releases to be returned by <see cref="M:MusicBrainz.Artist.GetReleases" />.</param><param name="artistType">Whether the Releases returned by <see cref="M:MusicBrainz.Artist.GetReleases" /> should consist of those which are authored by various artists.
 <block subset="none" type="note">
 See http://wiki.musicbrainz.org/SingleArtistRelease and http://wiki.musicbrainz.org/VariousArtistsRelease
-</block></param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
+</block></param><summary>To be added.</summary><remarks>This describes audiobooks which of which the Artist alone is the author:
+<example><code lang="C#">
+new ArtistReleaseType (ReleaseType.Audiobook, ReleaseArtistType.SingleArtist);
+</code></example></remarks></Docs>
     </Member><Member MemberName=".ctor">
-      <MemberSignature Language="C#" Value="public ArtistReleaseType (MusicBrainz.ReleaseType type, bool various);" />
+      <MemberSignature Language="C#" Value="public ArtistReleaseType (MusicBrainz.ReleaseType type, MusicBrainz.ReleaseStatus status, MusicBrainz.ReleaseArtistType artistType);" />
       <MemberType>Constructor</MemberType>
-      <Parameters><Parameter Name="type" Type="MusicBrainz.ReleaseType" /><Parameter Name="various" Type="System.Boolean" /></Parameters>
-      <Docs><param name="type">The desired <see cref="T:MusicBrainz.ReleaseType" /> of Releases to be included in the Artist's <see cref="M:MusicBrainz.Artist.Releases" />.</param><param name="various">Whether the Releases in the Artist's <see cref="M:MusicBrainz.Artist.Releases" /> should consist of those which are authored by various artists.
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <Parameters><Parameter Name="type" Type="MusicBrainz.ReleaseType" /><Parameter Name="status" Type="MusicBrainz.ReleaseStatus" /><Parameter Name="artistType" Type="MusicBrainz.ReleaseArtistType" /></Parameters>
+      <Docs><param name="type">The desired <see cref="T:MusicBrainz.ReleaseType" /> of Releases to be returned by <see cref="M:MusicBrainz.Artist.GetReleases" />.</param><param name="status">The desired <see cref="T:MusicBrainz.ReleaseStatus" /> of Releases to be returned by <see cref="M:MusicBrainz.Artist.GetReleases" />.</param><param name="artistType">Whether the Releases returned by <see cref="M:MusicBrainz.Artist.GetReleases" /> should consist of those which are authored by various artists.
 <block subset="none" type="note">
 See http://wiki.musicbrainz.org/SingleArtistRelease and http://wiki.musicbrainz.org/VariousArtistsRelease
-</block></param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
+</block></param><summary>To be added.</summary><remarks>This describes promotional interviews in which the Artist is but one of various artists: 
+<example><code lang="C#">
+new ArtistReleaseType (ReleaseType.Interview, ReleaseStatus.Promotion, ReleaseArtistType.VariousArtists);
+</code></example></remarks></Docs>
+    </Member><Member MemberName="op_Equality">
+      <MemberSignature Language="C#" Value="public static bool op_Equality (MusicBrainz.ArtistReleaseType artistReleaseType1, MusicBrainz.ArtistReleaseType artistReleaseType2);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Boolean</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="artistReleaseType1" Type="MusicBrainz.ArtistReleaseType" /><Parameter Name="artistReleaseType2" Type="MusicBrainz.ArtistReleaseType" /></Parameters>
+      <Docs><param name="artistReleaseType1">The first ArtistReleaseType.</param><param name="artistReleaseType2">The second ArtistReleaseType.</param><summary>Determins equality between two ArtistReleaseType objects.</summary><returns>True if the two ArtistReleaseTypes were instantiated with the same parameters or both are null, false otherwise.</returns><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="op_Inequality">
+      <MemberSignature Language="C#" Value="public static bool op_Inequality (MusicBrainz.ArtistReleaseType artistReleaseType1, MusicBrainz.ArtistReleaseType artistReleaseType2);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Boolean</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="artistReleaseType1" Type="MusicBrainz.ArtistReleaseType" /><Parameter Name="artistReleaseType2" Type="MusicBrainz.ArtistReleaseType" /></Parameters>
+      <Docs><param name="artistReleaseType1">The first ArtistReleaseType.</param><param name="artistReleaseType2">The second ArtistReleaseType.</param><summary>Determins inequality between two ArtistReleaseType objects.</summary><returns>True if the two ArtistReleaseTypes were instantiated with different parameters or one is null and the other is not, false otherwise.</returns><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/ArtistType.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/ArtistType.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/ArtistType.xml	Sun Aug 17 08:52:21 2008
@@ -23,16 +23,25 @@
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ArtistType</ReturnType></ReturnValue>
       <Docs><summary>A group of people such as a band.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Person">
       <MemberSignature Language="C#" Value="Person" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ArtistType</ReturnType></ReturnValue>
       <Docs><summary>A single person.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Unknown">
       <MemberSignature Language="C#" Value="Unknown" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ArtistType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/Disc.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/Disc.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/Disc.xml	Sun Aug 17 08:52:21 2008
@@ -9,61 +9,33 @@
   </Base>
   <Interfaces />
   <Docs>
-    <summary>The Disc class represents an optical storage disc (such as a CD).</summary>
-    <remarks>An instance of a Disc can be retrieved from a <see cref="T:MusicBrainz.Release" />'s <see cref="M:MusicBrainz.Release.Discs" /> list or from an optical drive on the local machine via <see cref="M:MusicBrainz.Disc.GetFromDevice" />.</remarks>
+    <summary>Represents an optical storage disc (such as a CD).</summary>
+    <remarks>An instance of a Disc can be retrieved by calling <see cref="M:MusicBrainz.Release.GetDiscs" /> or from an optical drive on the local machine via <see cref="M:MusicBrainz.LocalDisc.GetFromDevice" />.</remarks>
   </Docs>
   <Members>
     
-    
-    
-    
-    
-    
-    
-    <Member MemberName=".ctor">
-      <MemberSignature Language="C#" Value="protected Disc ();" />
-      <MemberType>Constructor</MemberType>
-      <Parameters />
-      <Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="FirstTrack">
-      <MemberSignature Language="C#" Value="protected byte FirstTrack { set; get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Byte</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="GetFromDevice">
-      <MemberSignature Language="C#" Value="public static MusicBrainz.Disc GetFromDevice (string device);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>MusicBrainz.Disc</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="device" Type="System.String" /></Parameters>
-      <Docs><param name="device">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="ID">
-      <MemberSignature Language="C#" Value="public string ID { get; };" />
+    <Member MemberName="Id">
+      <MemberSignature Language="C#" Value="public string Id { protected set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>A unique identifier for the Disc.</summary><value>A string of a base64-encoded SHA1 hash.</value><remarks>The ID is a SHA1 hash of the disc's TOC (table of contents) so the ID will identify any physical copy of a Disc.
-<block subset="none" type="note">
+      <Docs><summary>A unique identifier for the Disc.</summary><value>A string of a base64-encoded SHA1 hash.</value><remarks>
+          <para>The ID is a SHA1 hash of the disc's TOC (table of contents) so the ID will identify any physical copy of a Disc.
+</para>
+          <block subset="none" type="note">
 See http://wiki.musicbrainz.org/DiscID
-</block></remarks></Docs>
-    </Member><Member MemberName="Init"><MemberSignature Language="C#" Value="protected void Init ();" /><MemberType>Method</MemberType><ReturnValue><ReturnType>System.Void</ReturnType></ReturnValue><Parameters /><Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs></Member><Member MemberName="LastTrack">
-      <MemberSignature Language="C#" Value="protected byte LastTrack { set; get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Byte</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Sectors">
-      <MemberSignature Language="C#" Value="public int Sectors { protected set; get; };" />
+      <MemberSignature Language="C#" Value="public int Sectors { protected set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.Int32</ReturnType></ReturnValue>
-      <Docs><summary>The total number of sectors on the Disc.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="TrackDurations">
-      <MemberSignature Language="C#" Value="public int[] TrackDurations { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Int32[]</ReturnType></ReturnValue>
-      <Docs><summary>An array of the durations of each track on the disc.</summary><value>The durations, in milliseconds, of each track on the disc.</value><remarks>This property is only availible for Discs retrieved with the <see cref="M:MusicBrainz.Disc.GetFromDevice" /> method. Otherwise it is null.</remarks></Docs>
-    </Member><Member MemberName="TrackOffsets">
-      <MemberSignature Language="C#" Value="protected int[] TrackOffsets { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Int32[]</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The total number of sectors on the Disc.</summary><value>The number of sectors on the disc.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/Event.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/Event.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/Event.xml	Sun Aug 17 08:52:21 2008
@@ -9,8 +9,24 @@
   </Base>
   <Interfaces />
   <Docs>
-    <summary>To be added.</summary>
-    <remarks>To be added.</remarks>
+    <summary>Describes a release event.</summary>
+    <remarks>
+      <para>
+A release event refers to the release of a particular product of a Release. For example, if an album is released internationally, different regions may recieve different dics. These dics corrispond to release events.
+</para>
+      <para>Prints the dates of each release of "Dark Side of the Moon":
+<example><code lang="C#">
+Release r = Release.Query ("Dark Side of the Moon");
+foreach (Event e in r.GetEvents ()) {
+    Console.WriteLine (e.Date);
+}
+</code></example></para>
+      <para>
+        <block subset="none" type="note">
+See http://wiki.musicbrainz.org/ReleaseEvent
+</block>
+      </para>
+    </remarks>
   </Docs>
   <Members>
     
@@ -19,35 +35,95 @@
     
     
     <Member MemberName="Barcode">
-      <MemberSignature Language="C#" Value="public string Barcode { get; };" />
+      <MemberSignature Language="C#" Value="public string Barcode { get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The barcode number of the producted released in the event.</summary><value>A string of the barcode or null if no information is availible.</value><remarks>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/BarCode
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="CatalogNumber">
-      <MemberSignature Language="C#" Value="public string CatalogNumber { get; };" />
+      <MemberSignature Language="C#" Value="public string CatalogNumber { get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The catalog number of the product released in the event.</summary><value>A string of the catalog number or null if no information is availible.</value><remarks>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/ReleaseCatalogNumber
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Country">
-      <MemberSignature Language="C#" Value="public string Country { get; };" />
+      <MemberSignature Language="C#" Value="public string Country { get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The country in which the release event occured.</summary><value>A string with the two-letter ISO 3166 country code or null if no information is available.</value><remarks>
+          <para>
+MusicBrainz uses a mix of 3166-1 and 3166-2 codes as well as some user-reserved codes. Consult the MusicBrainz wiki for a full list. Be aware the user-reserved codes will cause an exception when passed to <see cref="C:System.Globalization.RegionInfo(System.String)" />.</para>
+          <para>
+Print the names of each country in which the album "Love Kraft" was released:
+<example><code lang="C#">
+foreach (Event e in Release.Query ("Love Kraft").First ().GetEvents ()) {
+    try {
+        Console.WriteLine (new System.Globalization.RegionInfo (e.Country).Name);
+    } catch {
+        Console.WriteLine (e.Country);
+    }
+}
+</code></example></para>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/ReleaseCountry
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Date">
-      <MemberSignature Language="C#" Value="public string Date { get; };" />
+      <MemberSignature Language="C#" Value="public string Date { get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The date on which the release event occured.</summary><value>A string of the date or null if no information is availible. E.g., "2008-04-23"</value><remarks>
+          <para>
+Different release events may have different levels of specificity regarding the date depending on the availibility of information. Some may specify just the year, others the month and the year, and others may have the day, month, and year. It is for this reason that this property is a <see cref="T:System.String" /> rather than a <see cref="T:System.DateTime" />.
+</para>
+          <para>
+            <block subset="none" type="note">
+See http://wiki.musicbrainz.org/ReleaseDate
+</block>
+          </para>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Format">
-      <MemberSignature Language="C#" Value="public MusicBrainz.ReleaseFormat Format { get; };" />
+      <MemberSignature Language="C#" Value="public MusicBrainz.ReleaseFormat Format { get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The physical format of the released product.</summary><value>The format of the released product.</value><remarks>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/ReleaseFormat
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Label">
-      <MemberSignature Language="C#" Value="public MusicBrainz.Label Label { get; };" />
+      <MemberSignature Language="C#" Value="public MusicBrainz.Label Label { get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.Label</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The record label responsible for the event.</summary><value>The Label responsible for the release.</value><remarks>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/Label
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/ItemQueryParameters.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/ItemQueryParameters.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/ItemQueryParameters.xml	Sun Aug 17 08:52:21 2008
@@ -9,8 +9,8 @@
   </Base>
   <Interfaces />
   <Docs>
-    <summary>This class encapsulates the query parameters common to <see cref="T:MusicBrainz.MusicBrainzItem" />s.</summary>
-    <remarks>To be added.</remarks>
+    <summary>Encapsulates the query parameters common to <see cref="T:MusicBrainz.MusicBrainzItem" />s.</summary>
+    <remarks>Subclasses include <see cref="T:MusicBrainz.ReleaseQueryParameters" /> and <see cref="T:MusicBrainz.TrackQueryParameters" /></remarks>
   </Docs>
   <Members>
     
@@ -18,53 +18,58 @@
     
     
     
-    
-    
-    <Member MemberName=".ctor">
-      <MemberSignature Language="C#" Value="protected ItemQueryParameters ();" />
-      <MemberType>Constructor</MemberType>
-      <Parameters />
-      <Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="AppendBaseToBuilder">
-      <MemberSignature Language="C#" Value="protected void AppendBaseToBuilder (System.Text.StringBuilder builder);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>System.Void</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="builder" Type="System.Text.StringBuilder" /></Parameters>
-      <Docs><param name="builder">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="Artist">
-      <MemberSignature Language="C#" Value="public string Artist { set; get; };" />
+    <Member MemberName="Artist">
+      <MemberSignature Language="C#" Value="public string Artist { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The name of the artist who created the item.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The name of the artist who created the item.</summary><value>The name of an artist.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="ArtistId">
-      <MemberSignature Language="C#" Value="public string ArtistId { set; get; };" />
+      <MemberSignature Language="C#" Value="public string ArtistId { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The universal identifier for the artist who created the item.</summary><value>To be added.</value><remarks>
+      <Docs><summary>The universal identifier for the artist who created the item.</summary><value>The ID of an artist.</value><remarks>
           <block subset="none" type="note">
 See http://wiki.musicbrainz.org/ArtistID
 </block>
         </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="ReleaseStatus">
-      <MemberSignature Language="C#" Value="public Nullable&lt;MusicBrainz.ReleaseStatus&gt; ReleaseStatus { set; get; };" />
+      <MemberSignature Language="C#" Value="public Nullable&lt;MusicBrainz.ReleaseStatus&gt; ReleaseStatus { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.Nullable&lt;MusicBrainz.ReleaseStatus&gt;</ReturnType></ReturnValue>
-      <Docs><summary>The status of the Release with which the item is associated.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The status of the Release with which the item is associated.</summary><value>The status of a release.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="ReleaseType">
-      <MemberSignature Language="C#" Value="public Nullable&lt;MusicBrainz.ReleaseType&gt; ReleaseType { set; get; };" />
+      <MemberSignature Language="C#" Value="public Nullable&lt;MusicBrainz.ReleaseType&gt; ReleaseType { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.Nullable&lt;MusicBrainz.ReleaseType&gt;</ReturnType></ReturnValue>
-      <Docs><summary>The type of Release with which the item is associated.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The type of Release with which the item is associated.</summary><value>The type of a release.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Title">
-      <MemberSignature Language="C#" Value="public string Title { set; get; };" />
+      <MemberSignature Language="C#" Value="public string Title { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The title of the item.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The title of the item.</summary><value>The title of an item.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="TrackCount">
-      <MemberSignature Language="C#" Value="public Nullable&lt;int&gt; TrackCount { set; get; };" />
+      <MemberSignature Language="C#" Value="public Nullable&lt;int&gt; TrackCount { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.Nullable&lt;System.Int32&gt;</ReturnType></ReturnValue>
-      <Docs><summary>The number of tracks on the Release with which the item is associated.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The number of tracks on the Release with which the item is associated.</summary><value>The number of tracks on a release.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/Label.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/Label.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/Label.xml	Sun Aug 17 08:52:21 2008
@@ -9,12 +9,14 @@
   </Base>
   <Interfaces />
   <Docs>
-    <summary>The Label class encapsulates the MusicBrainz Label resource.</summary>
-    <remarks>
-      <block subset="none" type="note">
+    <summary>Encapsulates the MusicBrainz Label resource.</summary>
+    <remarks>Print the country code for "Mai Music":
+<example><code lang="C#">
+Label l = Label.Query ("Mai Music");
+Console.WriteLine (l.GetCountry ());
+</code></example><para><block subset="none" type="note">
 See http://wiki.musicbrainz.org/Label
-</block>
-    </remarks>
+</block></para></remarks>
   </Docs>
   <Members>
     
@@ -22,86 +24,146 @@
     
     
     
-    
-    
-    
-    
-  <Member MemberName="Country">
-      <MemberSignature Language="C#" Value="public string Country { get; };" />
-      <MemberType>Property</MemberType>
+    <Member MemberName="Get">
+      <MemberSignature Language="C#" Value="public static MusicBrainz.Label Get (string id);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>MusicBrainz.Label</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="id" Type="System.String" /></Parameters>
+      <Docs><param name="id">The MusicBrainz ID of the desired Label.</param><summary>Retrieve an Label by universal ID.</summary><returns>The Label with the specified ID.</returns><remarks>
+          <para>
+Get the label "Sony BMG":
+<example><code lang="C#">
+Label = Label.Get ("d49fe768-e91c-404f-9542-3008c4ef9b51");
+</code></example></para>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/LabelID
+</block>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="id" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception><exception cref="T:MusicBrainz.MusicBrainzInvalidParameterException">
+          <para>
+            <paramref name="id" /> is not a valid MusicBrainz ID.
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetCountry">
+      <MemberSignature Language="C#" Value="public string GetCountry ();" />
+      <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The country in which the Label was created.</summary><value>An ISO 3166 country code. null if MusicBrainz does not have country data for a given Label.</value><remarks>
+      <Parameters />
+      <Docs><summary>Get the country in which the Label was incorporated.</summary><returns>A string with the two-letter ISO 3166 country code or null if no information is available.</returns><remarks>
+          <para>
+MusicBrainz uses a mix of 3166-1 and 3166-2 codes as well as some user-reserved codes. Consult the MusicBrainz wiki for a full list. Be aware the user-reserved codes will cause an exception when passed to <see cref="C:System.Globalization.RegionInfo(System.String)" />.</para>
+          <para>
+Print the names and country codes of labels whose name's match "Universal Music" by at least 50%:
+<example><code lang="C#">
+foreach(Label l in Label.Query ("Universal Music").Best (50)) {
+    Console.WriteLine ("{0} ({1})", l.GetName (), l.GetCountry ());
+}
+</code></example></para>
+          <para>
+If the country has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
           <block subset="none" type="note">
-See http://wiki.musicbrainz.org/LabelCountry
+See http://wiki.musicbrainz.org/LabelCountry and http://wiki.musicbrainz.org/ReleaseCountry
 </block>
         </remarks></Docs>
-    </Member><Member MemberName="Get">
-      <MemberSignature Language="C#" Value="public static MusicBrainz.Label Get (string mbid);" />
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetLabelType">
+      <MemberSignature Language="C#" Value="public MusicBrainz.LabelType GetLabelType ();" />
       <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>MusicBrainz.Label</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="mbid" Type="System.String" /></Parameters>
-      <Docs><param name="mbid">The MusicBrainz ID; a universal identifier.</param><summary>Retrieve a Label by universal identifier.</summary><returns>The Label with the specified MBID.</returns><remarks>
+      <ReturnValue><ReturnType>MusicBrainz.LabelType</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Get the type of the Label.</summary><returns>The type of the Label.</returns><remarks>
+          <para>
+If the type has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
           <block subset="none" type="note">
-See http://wiki.musicbrainz.org/LabelID
+See http://wiki.musicbrainz.org/LabelType
 </block>
         </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="op_Implicit">
-      <MemberSignature Language="C#" Value="public static string op_Implicit (MusicBrainz.Label l);" />
+      <MemberSignature Language="C#" Value="public static string op_Implicit (MusicBrainz.Label label);" />
       <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="l" Type="MusicBrainz.Label" /></Parameters>
-      <Docs><param name="l">To be added.</param><summary>This operator is provided for the benefit of LINQ syntax. See remarks for details.</summary><returns>l.ToString()</returns><remarks>
+      <Parameters><Parameter Name="label" Type="MusicBrainz.Label" /></Parameters>
+      <Docs><param name="label">The Label.</param><summary>This operator is provided for the benefit of LINQ syntax. See remarks for details.</summary><returns>label.ToString ();</returns><remarks>
           <para>The purpose of providing this operator is to allow for the following LINQ syntax:
 <example><code lang="C#">
 var q = from l in MB.Labels
          where l == "Fat Wreck Chords"
          select l;
-  </code></example></para>
+</code></example></para>
           <para>
 This syntax is beneficial for the following reason: LINQ queries are translated into Lucene queries and executed using the <see cref="M:MusicBrainz.Label.QueryLucene" /> method. Given the following LINQ query:
 <example><code lang="C#">
 var q = from l in MB.Labels
-         where l.Name == "Fat Wreck Chords"
+         where l.GetName () == "Fat Wreck Chords"
          select l;
-  </code></example></para>
+</code></example></para>
           <para>
 the LINQ provider will make the following call:
 <example><code lang="C#">
 Label.QueryLucene(@"label:""Fat Wreck Chords""");
-  </code></example></para>
+</code></example></para>
           <para>
 However, given the first query mentioned above, the LINQ provider will make this call:
 <example><code lang="C#">
 Label.QueryLucene("Fat Wreck Chords");
-  </code></example></para>
+</code></example></para>
           <para>
 These two queries are substantively different. See http://wiki.musicbrainz.org/TextSearchSyntax for more information.
 </para>
         </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Query">
       <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Label&gt; Query (string name);" />
       <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Label&gt;</ReturnType></ReturnValue>
       <Parameters><Parameter Name="name" Type="System.String" /></Parameters>
-      <Docs><param name="name">The name of a label.</param><summary>Query for Labels by name.</summary><returns>An enumerable Query of results.</returns><remarks>To be added.</remarks></Docs>
+      <Docs><param name="name">The name of a Label.</param><summary>Query for Labels by name.</summary><returns>An enumerable Query of results.</returns><remarks>
+          <para>
+            Search for labels named "Universal":
+            <example><code lang="C#">
+foreach (Label l in Label.Query ("Universal"))
+    Console.WriteLine (string.Format ("{0} ({1}% relevance)", l.GetName (), l.Score));
+</code></example></para>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="name" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="QueryLucene">
-      <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Label&gt; QueryLucene (string lucene_query);" />
+      <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Label&gt; QueryLucene (string luceneQuery);" />
       <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Label&gt;</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="lucene_query" Type="System.String" /></Parameters>
-      <Docs><param name="lucene_query">A lucene text query.</param><summary>Query for Labels by lucene text query.</summary><returns>An enumerable Query of results.</returns><remarks>
+      <Parameters><Parameter Name="luceneQuery" Type="System.String" /></Parameters>
+      <Docs><param name="luceneQuery">A lucene text query.</param><summary>Query for Labels by lucene text query.</summary><returns>An enumerable Query of results.</returns><remarks>
           <block subset="none" type="note">
 See http://wiki.musicbrainz.org/TextSearchSyntax
 </block>
-        </remarks></Docs>
-    </Member><Member MemberName="Type">
-      <MemberSignature Language="C#" Value="public MusicBrainz.LabelType Type { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>MusicBrainz.LabelType</ReturnType></ReturnValue>
-      <Docs><summary>The Type of the Label.</summary><value>To be added.</value><remarks>
-          <block subset="none" type="note">
-See http://wiki.musicbrainz.org/LabelType
-</block>
-        </remarks></Docs>
-    </Member><Member MemberName="UrlExtension"><MemberSignature Language="C#" Value="protected override string UrlExtension { get; };" /><MemberType>Property</MemberType><ReturnValue><ReturnType>System.String</ReturnType></ReturnValue><Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs></Member></Members>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="luceneQuery" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member>
+  </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/LabelType.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/LabelType.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/LabelType.xml	Sun Aug 17 08:52:21 2008
@@ -8,7 +8,7 @@
     <BaseTypeName>System.Enum</BaseTypeName>
   </Base>
   <Docs>
-    <summary>The Type of a Label.</summary>
+    <summary>The type of a Label.</summary>
     <remarks>
       <block subset="none" type="note">
 See http://wiki.musicbrainz.org/LabelType
@@ -26,31 +26,49 @@
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.LabelType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Distributor">
       <MemberSignature Language="C#" Value="Distributor" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.LabelType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Holding">
       <MemberSignature Language="C#" Value="Holding" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.LabelType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="None">
+      <MemberSignature Language="C#" Value="None" />
+      <MemberType>Field</MemberType>
+      <ReturnValue><ReturnType>MusicBrainz.LabelType</ReturnType></ReturnValue>
+      <Docs><summary>MusicBrainz does not have a type for the Label.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="OriginalProduction">
       <MemberSignature Language="C#" Value="OriginalProduction" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.LabelType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="ReissueProduction">
       <MemberSignature Language="C#" Value="ReissueProduction" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.LabelType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
-    </Member><Member MemberName="Unspecified">
-      <MemberSignature Language="C#" Value="Unspecified" />
-      <MemberType>Field</MemberType>
-      <ReturnValue><ReturnType>MusicBrainz.LabelType</ReturnType></ReturnValue>
-      <Docs><summary>MusicBrainz does not have a Type for the Label.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Added: trunk/musicbrainz-sharp/docs/en/MusicBrainz/LocalDisc.xml
==============================================================================
--- (empty file)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/LocalDisc.xml	Sun Aug 17 08:52:21 2008
@@ -0,0 +1,100 @@
+<Type Name="LocalDisc" FullName="MusicBrainz.LocalDisc">
+  <TypeSignature Language="C#" Value="public abstract class LocalDisc : MusicBrainz.Disc" />
+  <AssemblyInfo>
+    <AssemblyName>MusicBrainz</AssemblyName>
+    <AssemblyVersion>0.0.0.0</AssemblyVersion>
+  </AssemblyInfo>
+  <Base>
+    <BaseTypeName>MusicBrainz.Disc</BaseTypeName>
+  </Base>
+  <Interfaces />
+  <Docs>
+    <summary>Represents an optical storage disc (such as a CD) which is locally present on the executing machine.</summary>
+    <remarks>List the durations of each track:<example><code lang="C#">
+LocalDisc l = LocalDisc.GetFromDevice ("/dev/cdrom");
+TimeSpan [] durations = l.GetTrackDurations ();
+for(int i = 0; i &lt; durations.Length; i++) {
+    Console.WriteLine ("Track {0} ({1:0}:{2:00})", i + 1, durations[i].TotalMinutes, durations[i].Seconds);
+}
+</code></example><para><block subset="none" type="note">
+ LocalDiscs can only be retrieved on Windows and Linux.
+</block></para></remarks>
+  </Docs>
+  <Members>
+    
+    
+    
+    <Member MemberName="GetFromDevice">
+      <MemberSignature Language="C#" Value="public static MusicBrainz.LocalDisc GetFromDevice (string device);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>MusicBrainz.LocalDisc</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="device" Type="System.String" /></Parameters>
+      <Docs><param name="device">A path to an optical disc device. On Unix this could be "/dev/cdrom" and on Windows this will be the drive letter for a disc drive, such as "E:\"</param><summary>Get a LocalDisc for the optical disc at the specified device path.</summary><returns>A LocalDisc describing the disc at the specified device path.</returns><remarks>Open the webpage for submitting the disc to the MusicBrainz database:
+<example><code lang="C#">
+LocalDisc l = LocalDisc.GetFromDevice ("E:\");
+System.Diagnostics.Process.Start(l.SubmissionUrl.AbsoluteUri);
+</code></example><para><block subset="none" type="note">
+This method is only supported on Windows and Linux.
+</block></para></remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="device" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception>
+        <exception cref="T:MusicBrainz.LocalDiscException">
+          <para>
+            GetFromDevice is not supported on the executing system.
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetTrackDurations">
+      <MemberSignature Language="C#" Value="public TimeSpan[] GetTrackDurations ();" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue><ReturnType>System.TimeSpan[]</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Get an array with the durations of all tracks on a local disc.</summary><returns>An array with the durations of each track on the disc.</returns><remarks>
+          <para>The 0th element corrisponds to the first track.
+</para>List the durations of each track:<example><code lang="C#">
+LocalDisc l = LocalDisc.GetFromDevice ("/dev/cdrom");
+TimeSpan [] durations = l.GetTrackDurations ();
+for(int i = 0; i &lt; durations.Length; i++) {
+    Console.WriteLine ("Track {0} ({1:0}:{2:00})", i + 1, durations[i].TotalMinutes, durations[i].Seconds);
+}
+</code></example></remarks></Docs>
+    </Member><Member MemberName="SubmissionServiceUrl">
+      <MemberSignature Language="C#" Value="public static Uri SubmissionServiceUrl { set; get; }" />
+      <MemberType>Property</MemberType>
+      <ReturnValue><ReturnType>System.Uri</ReturnType></ReturnValue>
+      <Docs><summary>The URL of the disc submission service.</summary><value>Default is "http://mm.musicbrainz.org/bare/cdlookup.html";.</value><remarks>
+          <para>
+If you would like to submit local discs to another location (such as a testing server), you can specify that URL and it will be used to generate the <see cref="M:MusicBrainz.LocalDisc.SubmissionUrl" />s.</para>
+          <para>
+This property is thread-safe.
+</para>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            The value is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="SubmissionUrl">
+      <MemberSignature Language="C#" Value="public Uri SubmissionUrl { get; }" />
+      <MemberType>Property</MemberType>
+      <ReturnValue><ReturnType>System.Uri</ReturnType></ReturnValue>
+      <Docs><summary>Get the URL for submitting a disc to the MusicBrainz database.</summary><value>The URL for submitting the disc to the MusicBrainz database.</value><remarks>Open the webpage for submitting the disc to the MusicBrainz database:
+<example><code lang="C#">
+LocalDisc l = LocalDisc.GetFromDevice ("E:\");
+System.Diagnostics.Process.Start(l.SubmissionUrl.AbsoluteUri);
+</code></example></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member>
+  </Members>
+</Type>

Added: trunk/musicbrainz-sharp/docs/en/MusicBrainz/LocalDiscException.xml
==============================================================================
--- (empty file)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/LocalDiscException.xml	Sun Aug 17 08:52:21 2008
@@ -0,0 +1,32 @@
+<Type Name="LocalDiscException" FullName="MusicBrainz.LocalDiscException">
+  <TypeSignature Language="C#" Value="public class LocalDiscException : Exception" />
+  <AssemblyInfo>
+    <AssemblyName>MusicBrainz</AssemblyName>
+    <AssemblyVersion>0.0.0.0</AssemblyVersion>
+  </AssemblyInfo>
+  <Base>
+    <BaseTypeName>System.Exception</BaseTypeName>
+  </Base>
+  <Interfaces />
+  <Docs>
+    <summary>To be added.</summary>
+    <remarks>To be added.</remarks>
+  </Docs>
+  <Members>
+    <Member MemberName=".ctor">
+      <MemberSignature Language="C#" Value="public LocalDiscException (Exception exception);" />
+      <MemberType>Constructor</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <Parameters>
+        <Parameter Name="exception" Type="System.Exception" />
+      </Parameters>
+      <Docs>
+        <param name="exception">To be added.</param>
+        <summary>To be added.</summary>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
+  </Members>
+</Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzEntity.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzEntity.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzEntity.xml	Sun Aug 17 08:52:21 2008
@@ -9,8 +9,8 @@
   </Base>
   <Interfaces />
   <Docs>
-    <summary>MusicBrainzEntity is the base class for a person-like MusicBrainz resource such as an <see cref="T:MusicBrainz.Artist" /> or a <see cref="T:MusicBrainz.Label" />.</summary>
-    <remarks>To be added.</remarks>
+    <summary>The base class for a person-like MusicBrainz resource.</summary>
+    <remarks>Subclasses include <see cref="T:MusicBrainz.Artist" /> and <see cref="T:MusicBrainz.Label" />.</remarks>
   </Docs>
   <Members>
     
@@ -18,81 +18,89 @@
     
     
     
-    
-    
-    
-    
-    <Member MemberName=".ctor">
-      <MemberSignature Language="C#" Value="protected MusicBrainzEntity (string mbid, string parameters);" />
-      <MemberType>Constructor</MemberType>
-      <Parameters><Parameter Name="mbid" Type="System.String" /><Parameter Name="parameters" Type="System.String" /></Parameters>
-      <Docs><param name="mbid">To be added.</param><param name="parameters">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName=".ctor">
-      <MemberSignature Language="C#" Value="protected MusicBrainzEntity (System.Xml.XmlReader reader, bool all_rels_loaded);" />
-      <MemberType>Constructor</MemberType>
-      <Parameters><Parameter Name="reader" Type="System.Xml.XmlReader" /><Parameter Name="all_rels_loaded" Type="System.Boolean" /></Parameters>
-      <Docs><param name="reader">To be added.</param><param name="all_rels_loaded">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="Aliases">
-      <MemberSignature Language="C#" Value="public virtual System.Collections.Generic.List&lt;string&gt; Aliases { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Collections.Generic.List&lt;System.String&gt;</ReturnType></ReturnValue>
-      <Docs><summary>A list of other names by which the entity is known.</summary><value>A List of strings. If there are no aliases, an empty List.</value><remarks>This property will never be null.
-<block subset="none" type="note">
+    <Member MemberName="GetAliases">
+      <MemberSignature Language="C#" Value="public virtual System.Collections.ObjectModel.ReadOnlyCollection&lt;string&gt; GetAliases ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;System.String&gt;</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns a collection of other names by which the entity is known.</summary><returns>A read-only collection of strings. If there are no aliases, an empty collection.</returns><remarks>If the aliases have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.<para>This method will never return null.
+</para><para><block subset="none" type="note">
 See http://wiki.musicbrainz.org/ArtistAlias and http://wiki.musicbrainz.org/LabelAlias
-</block></remarks></Docs>
-    </Member><Member MemberName="BeginDate">
-      <MemberSignature Language="C#" Value="public virtual string BeginDate { get; };" />
-      <MemberType>Property</MemberType>
+</block></para></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetBeginDate">
+      <MemberSignature Language="C#" Value="public virtual string GetBeginDate ();" />
+      <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The data of the entity's begining.</summary><value>A string of the date.</value><remarks>For bands and Labels this will be the date the organization began. For individuals this will be their date of birth. The string may be specific to the year, month, or day, depending on the availibility of such information. For example, it may just be "1962", or it may be "1962-10-23".
-<block subset="none" type="note">
+      <Parameters />
+      <Docs><summary>Returns the data the entity began.</summary><returns>A string of the date or null if no information is availible. E.g., "2008-04-23"</returns><remarks>For bands and Labels this will be the date of the organization's formation. For individuals this will be their date of birth. Different entities may have different levels of specificity regarding the date depending on the availibility of information. Some may specify just the year, others the month and the year, and others may have the day, month, and year. It is for this reason that this property is a <see cref="T:System.String" /> rather than a <see cref="T:System.DateTime" />.
+<para>
+If the begin date has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para><block subset="none" type="note">
 See http://wiki.musicbrainz.org/ArtistBeginDate and http://wiki.musicbrainz.org/LabelBeginDate
 </block></remarks></Docs>
-    </Member><Member MemberName="CreateNameParameter">
-      <MemberSignature Language="C#" Value="protected static string CreateNameParameter (string name);" />
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetDisambiguation">
+      <MemberSignature Language="C#" Value="public virtual string GetDisambiguation ();" />
       <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="name" Type="System.String" /></Parameters>
-      <Docs><param name="name">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="Disambiguation">
-      <MemberSignature Language="C#" Value="public virtual string Disambiguation { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>A string to disambiguate the entity from other identically named entities.</summary><value>To be added.</value><remarks>For example, two Artists named "Justice" are disambiguated as "Thrash/death metal band from Franconia (Germany)" and "French electro house, Gaspard Augà and Zavier de Rosnay".
-<block subset="none" type="note">
+      <Parameters />
+      <Docs><summary>Returns a string to disambiguate the entity from other identically named entities.</summary><returns>A string to disambiguate identically named entities or null if no information is availible.</returns><remarks>
+          <para>For example, two Artists named "Justice" are disambiguated as "Thrash/death metal band from Franconia (Germany)" and "French electro house, Gaspard Augà and Zavier de Rosnay".</para>
+          <para>
+If the disambiguation has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+          <block subset="none" type="note">
 See http://wiki.musicbrainz.org/ArtistComment and http://wiki.musicbrainz.org/LabelComment
-</block></remarks></Docs>
-    </Member><Member MemberName="EndDate">
-      <MemberSignature Language="C#" Value="public virtual string EndDate { get; };" />
-      <MemberType>Property</MemberType>
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetEndDate">
+      <MemberSignature Language="C#" Value="public virtual string GetEndDate ();" />
+      <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The date of the entity's ending.</summary><value>A string of the date.</value><remarks>For bands and Labels this will be the date the organization dissolved. For individuals this will be the date of death. The string may be specific to the year, month, or day, depending on the availibility of such information. For example, it may just be "1962", or it may be "1962-10-23".
-<block subset="none" type="note">
+      <Parameters />
+      <Docs><summary>Returns the data the entity began.</summary><returns>A string of the date or null if no information is availible. E.g., "2008-04-23"</returns><remarks>For bands and Labels this will be the date of the organization's disbandment. For individuals this will be their date of death. Different entities may have different levels of specificity regarding the date depending on the availibility of information. Some may specify just the year, others the month and the year, and others may have the day, month, and year. It is for this reason that this property is a <see cref="T:System.String" /> rather than a <see cref="T:System.DateTime" />.
+<para>
+If the end date has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para><block subset="none" type="note">
 See http://wiki.musicbrainz.org/ArtistEndDate and http://wiki.musicbrainz.org/LabelEndDate
 </block></remarks></Docs>
-    </Member><Member MemberName="HandleLoadMissingData">
-      <MemberSignature Language="C#" Value="protected void HandleLoadMissingData (MusicBrainz.MusicBrainzEntity entity);" />
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetName">
+      <MemberSignature Language="C#" Value="public virtual string GetName ();" />
       <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>System.Void</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="entity" Type="MusicBrainz.MusicBrainzEntity" /></Parameters>
-      <Docs><param name="entity">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="Name">
-      <MemberSignature Language="C#" Value="public virtual string Name { get; };" />
-      <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The name of the enity.</summary><value>To be added.</value><remarks>
-          <block subset="none" type="note">
+      <Parameters />
+      <Docs><summary>Returns the name of the enity.</summary><returns>The name of the enity.</returns><remarks>If the name has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+<block subset="none" type="note">
 See http://wiki.musicbrainz.org/ArtistName and http://wiki.musicbrainz.org/LabelName
-</block>
-        </remarks></Docs>
-    </Member><Member MemberName="SortName">
-      <MemberSignature Language="C#" Value="public virtual string SortName { get; };" />
-      <MemberType>Property</MemberType>
+</block></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetSortName">
+      <MemberSignature Language="C#" Value="public virtual string GetSortName ();" />
+      <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The name by which the enity should be sorted alphabetically.</summary><value>To be added.</value><remarks>For example, the SortName for the Artist "The Killers" is "Killers, The".
-<block subset="none" type="note">
+      <Parameters />
+      <Docs><summary>Returns the name by which the enity should be sorted alphabetically.</summary><returns>The name by which the enity should be sorted alphabetically or null if no information is availible.</returns><remarks>For example, the sort name for the artist "The Killers" is "Killers, The".
+<para>
+If the name has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para><block subset="none" type="note">
 See http://wiki.musicbrainz.org/ArtistSortName and http://wiki.musicbrainz.org/LabelSortName
 </block></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzInvalidParameterException.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzInvalidParameterException.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzInvalidParameterException.xml	Sun Aug 17 08:52:21 2008
@@ -18,6 +18,6 @@
       <MemberType>Constructor</MemberType>
       <Parameters />
       <Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member>
+    <AssemblyInfo><AssemblyVersion>0.0.0.0</AssemblyVersion></AssemblyInfo></Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzItem.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzItem.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzItem.xml	Sun Aug 17 08:52:21 2008
@@ -9,40 +9,29 @@
   </Base>
   <Interfaces />
   <Docs>
-    <summary>MusicBrainzItem is the base class for a MusicBrainz resource which is the product of an artist, such as a <see cref="T:MusicBrainz.Release" /> or a <see cref="T:MusicBrainz.Track" />.</summary>
-    <remarks>To be added.</remarks>
+    <summary>The base class for a MusicBrainz resource which is the product of an artist.</summary>
+    <remarks>Subclasses include <see cref="T:MusicBrainz.Release" /> and <see cref="T:MusicBrainz.Track" />.</remarks>
   </Docs>
   <Members>
     
-    
-    
-    
-    <Member MemberName=".ctor">
-      <MemberSignature Language="C#" Value="protected MusicBrainzItem (string mbid, string parameters);" />
-      <MemberType>Constructor</MemberType>
-      <Parameters><Parameter Name="mbid" Type="System.String" /><Parameter Name="parameters" Type="System.String" /></Parameters>
-      <Docs><param name="mbid">To be added.</param><param name="parameters">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName=".ctor">
-      <MemberSignature Language="C#" Value="protected MusicBrainzItem (System.Xml.XmlReader reader, bool all_rels_loaded);" />
-      <MemberType>Constructor</MemberType>
-      <Parameters><Parameter Name="reader" Type="System.Xml.XmlReader" /><Parameter Name="all_rels_loaded" Type="System.Boolean" /></Parameters>
-      <Docs><param name="reader">To be added.</param><param name="all_rels_loaded">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="Artist">
-      <MemberSignature Language="C#" Value="public virtual MusicBrainz.Artist Artist { get; };" />
-      <MemberType>Property</MemberType>
+    <Member MemberName="GetArtist">
+      <MemberSignature Language="C#" Value="public virtual MusicBrainz.Artist GetArtist ();" />
+      <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.Artist</ReturnType></ReturnValue>
-      <Docs><summary>The Artist who authored the item.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="HandleLoadMissingData">
-      <MemberSignature Language="C#" Value="protected void HandleLoadMissingData (MusicBrainz.MusicBrainzItem item);" />
+      <Parameters />
+      <Docs><summary>Returns the Artist who authored the item.</summary><returns>The artist of the item.</returns><remarks>If the artist has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetTitle">
+      <MemberSignature Language="C#" Value="public virtual string GetTitle ();" />
       <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>System.Void</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="item" Type="MusicBrainz.MusicBrainzItem" /></Parameters>
-      <Docs><param name="item">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="Title">
-      <MemberSignature Language="C#" Value="public virtual string Title { get; };" />
-      <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The Title of the item.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Parameters />
+      <Docs><summary>Returns the title of the item.</summary><returns>The title of the item.</returns><remarks>If the title has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzNotFoundException.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzNotFoundException.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzNotFoundException.xml	Sun Aug 17 08:52:21 2008
@@ -18,6 +18,6 @@
       <MemberType>Constructor</MemberType>
       <Parameters />
       <Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member>
+    <AssemblyInfo><AssemblyVersion>0.0.0.0</AssemblyVersion></AssemblyInfo></Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzObject.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzObject.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzObject.xml	Sun Aug 17 08:52:21 2008
@@ -9,8 +9,8 @@
   </Base>
   <Interfaces />
   <Docs>
-    <summary>MusicBrainzObject is the base class for a MusicBrainz resource such as an <see cref="T:MusicBrainz.Artist" />, a <see cref="T:MusicBrainz.Release" />, a <see cref="T:MusicBrainz.Track" /> or a <see cref="T:MusicBrainz.Label" />.</summary>
-    <remarks>To be added.</remarks>
+    <summary>MusicBrainzObject is the base class for a MusicBrainz resource.</summary>
+    <remarks>Concrete subclasses include <see cref="T:MusicBrainz.Artist" />, <see cref="T:MusicBrainz.Release" />, <see cref="T:MusicBrainz.Track" /> and <see cref="T:MusicBrainz.Label" /></remarks>
   </Docs>
   <Members>
     
@@ -21,248 +21,112 @@
     
     
     
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    <Member MemberName=".ctor">
-      <MemberSignature Language="C#" Value="protected MusicBrainzObject (string mbid, string parameters);" />
-      <MemberType>Constructor</MemberType>
-      <Parameters><Parameter Name="mbid" Type="System.String" /><Parameter Name="parameters" Type="System.String" /></Parameters>
-      <Docs><param name="mbid">To be added.</param><param name="parameters">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName=".ctor">
-      <MemberSignature Language="C#" Value="protected MusicBrainzObject (System.Xml.XmlReader reader, bool all_rels_loaded);" />
-      <MemberType>Constructor</MemberType>
-      <Parameters><Parameter Name="reader" Type="System.Xml.XmlReader" /><Parameter Name="all_rels_loaded" Type="System.Boolean" /></Parameters>
-      <Docs><param name="reader">To be added.</param><param name="all_rels_loaded">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="AllDataLoaded">
-      <MemberSignature Language="C#" Value="protected bool AllDataLoaded { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Boolean</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="AllRelsLoaded">
-      <MemberSignature Language="C#" Value="protected bool AllRelsLoaded { set; get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Boolean</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="AppendIncParameters">
-      <MemberSignature Language="C#" Value="protected void AppendIncParameters (System.Text.StringBuilder builder, string[] parameters);" />
+    <Member MemberName="GetArtistRelations">
+      <MemberSignature Language="C#" Value="public virtual System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Relation&lt;MusicBrainz.Artist&gt;&gt; GetArtistRelations ();" />
       <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>System.Void</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="builder" Type="System.Text.StringBuilder" /><Parameter Name="parameters" Type="System.String[]"><Attributes><Attribute><AttributeName>System.ParamArray</AttributeName></Attribute></Attributes></Parameter></Parameters>
-      <Docs><param name="builder">To be added.</param><param name="parameters">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="ArtistRelations">
-      <MemberSignature Language="C#" Value="public virtual System.Collections.Generic.List&lt;MusicBrainz.Relation&lt;MusicBrainz.Artist&gt;&gt; ArtistRelations { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Collections.Generic.List&lt;MusicBrainz.Relation&lt;MusicBrainz.Artist&gt;&gt;</ReturnType></ReturnValue>
-      <Docs><summary>A list of Relations to Artists.</summary><value>A List of Relations to <see cref="T:MusicBrainz.Artist" />s. If there are no relations, an empty List.</value><remarks>This property will never be null.
-<block subset="none" type="note">
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Relation&lt;MusicBrainz.Artist&gt;&gt;</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns a collection of Relations to Artists.</summary><returns>A read-only collection of <see cref="T:MusicBrainz.Relation&lt;T&gt;" />s to <see cref="T:MusicBrainz.Artist" />s. If there are no relations, an empty collection.</returns><remarks>If the relations have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+<para>
+This method will never return null.</para><block subset="none" type="note">
 See http://wiki.musicbrainz.org/ArtistArtistRelationship, http://wiki.musicbrainz.org/ReleaseArtistRelationship, http://wiki.musicbrainz.org/LabelArtistRelationship, and http://wiki.musicbrainz.org/ArtistTrackRelationship
 </block></remarks></Docs>
-    </Member><Member MemberName="CachePolicy">
-      <MemberSignature Language="C#" Value="public static System.Net.Cache.RequestCachePolicy CachePolicy;" />
-      <MemberType>Field</MemberType>
-      <ReturnValue><ReturnType>System.Net.Cache.RequestCachePolicy</ReturnType></ReturnValue>
-      <Docs><summary>The policy for caching the XML which is retrieved from the MusicBrainz servers.</summary><remarks>Mono does not implement caching so changing the CachePolicy will have no effect.</remarks></Docs>
-    </Member><Member MemberName="CreateInc">
-      <MemberSignature Language="C#" Value="protected string CreateInc ();" />
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetLabelRelations">
+      <MemberSignature Language="C#" Value="public virtual System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Relation&lt;MusicBrainz.Label&gt;&gt; GetLabelRelations ();" />
       <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Relation&lt;MusicBrainz.Label&gt;&gt;</ReturnType></ReturnValue>
       <Parameters />
-      <Docs><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="CreateLuceneParameter">
-      <MemberSignature Language="C#" Value="protected static string CreateLuceneParameter (string query);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="query" Type="System.String" /></Parameters>
-      <Docs><param name="query">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="GetPropertyOrDefault&lt;T&gt;">
-      <MemberSignature Language="C#" Value="protected T GetPropertyOrDefault&lt;T&gt; (ref Nullable&lt;T&gt; field_reference, T default_value);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>T</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="field_reference" Type="System.Nullable&lt;T&gt;&amp;" RefType="ref" /><Parameter Name="default_value" Type="T" /></Parameters>
-      <Docs><typeparam name="T">To be added.</typeparam><param name="field_reference">To be added.</param><param name="default_value">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="GetPropertyOrNew&lt;T&gt;">
-      <MemberSignature Language="C#" Value="protected T GetPropertyOrNew&lt;T&gt; (ref T field_reference);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>T</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="field_reference" Type="T&amp;" RefType="ref" /></Parameters>
-      <Docs><typeparam name="T">To be added.</typeparam><param name="field_reference">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="GetPropertyOrNew&lt;T&gt;">
-      <MemberSignature Language="C#" Value="protected T GetPropertyOrNew&lt;T&gt; (ref T field_reference, bool condition);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>T</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="field_reference" Type="T&amp;" RefType="ref" /><Parameter Name="condition" Type="System.Boolean" /></Parameters>
-      <Docs><typeparam name="T">To be added.</typeparam><param name="field_reference">To be added.</param><param name="condition">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="GetPropertyOrNull&lt;T&gt;">
-      <MemberSignature Language="C#" Value="protected T GetPropertyOrNull&lt;T&gt; (ref T field_reference);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>T</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="field_reference" Type="T&amp;" RefType="ref" /></Parameters>
-      <Docs><typeparam name="T">To be added.</typeparam><param name="field_reference">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="HandleAttributes">
-      <MemberSignature Language="C#" Value="protected abstract bool HandleAttributes (System.Xml.XmlReader reader);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>System.Boolean</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="reader" Type="System.Xml.XmlReader" /></Parameters>
-      <Docs><param name="reader">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="HandleCreateInc">
-      <MemberSignature Language="C#" Value="protected virtual void HandleCreateInc (System.Text.StringBuilder builder);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>System.Void</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="builder" Type="System.Text.StringBuilder" /></Parameters>
-      <Docs><param name="builder">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="HandleLoadMissingData">
-      <MemberSignature Language="C#" Value="protected abstract void HandleLoadMissingData ();" />
+      <Docs><summary>Returns a collection of Relations to Labels.</summary><returns>A read-only collection of <see cref="T:MusicBrainz.Relation&lt;T&gt;" />s to <see cref="T:MusicBrainz.Label" />s. If there are no relations, an empty collection.</returns><remarks>If the relations have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+<para>
+This method will never return null.</para><block subset="none" type="note">
+See http://wiki.musicbrainz.org/LabelArtistRelationship, http://wiki.musicbrainz.org/LabelReleaseRelationship, http://wiki.musicbrainz.org/LabelLabelRelationship, http://wiki.musicbrainz.org/LabelTrackRelationship
+</block></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetReleaseRelations">
+      <MemberSignature Language="C#" Value="public virtual System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Relation&lt;MusicBrainz.Release&gt;&gt; GetReleaseRelations ();" />
       <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>System.Void</ReturnType></ReturnValue>
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Relation&lt;MusicBrainz.Release&gt;&gt;</ReturnType></ReturnValue>
       <Parameters />
-      <Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="HandleLoadMissingData">
-      <MemberSignature Language="C#" Value="protected void HandleLoadMissingData (MusicBrainz.MusicBrainzObject obj);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>System.Void</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="obj" Type="MusicBrainz.MusicBrainzObject" /></Parameters>
-      <Docs><param name="obj">To be added.</param><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="HandleXml">
-      <MemberSignature Language="C#" Value="protected abstract bool HandleXml (System.Xml.XmlReader reader);" />
+      <Docs><summary>Returns a collection of Relations to Releases.</summary><returns>A read-only collection of <see cref="T:MusicBrainz.Relation&lt;T&gt;" />s to <see cref="T:MusicBrainz.Release" />s. If there are no relations, an empty collection.</returns><remarks>If the relations have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+<para>
+This method will never return null.</para><block subset="none" type="note">
+See http://wiki.musicbrainz.org/ReleaseArtistRelationship, http://wiki.musicbrainz.org/ReleaseReleaseRelationship, http://wiki.musicbrainz.org/LabelReleaseRelationship, and http://wiki.musicbrainz.org/ReleaseTrackRelationship
+</block></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetTrackRelations">
+      <MemberSignature Language="C#" Value="public virtual System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Relation&lt;MusicBrainz.Track&gt;&gt; GetTrackRelations ();" />
       <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>System.Boolean</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="reader" Type="System.Xml.XmlReader" /></Parameters>
-      <Docs><param name="reader">To be added.</param><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="LabelRelations">
-      <MemberSignature Language="C#" Value="public virtual System.Collections.Generic.List&lt;MusicBrainz.Relation&lt;MusicBrainz.Label&gt;&gt; LabelRelations { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Collections.Generic.List&lt;MusicBrainz.Relation&lt;MusicBrainz.Label&gt;&gt;</ReturnType></ReturnValue>
-      <Docs><summary>A list of Relations to Labels.</summary><value>A List of Relations to <see cref="T:MusicBrainz.Label" />s. If there are no relations, an empty List.</value><remarks>This property will never be null.
-<block subset="none" type="note">
-See http://wiki.musicbrainz.org/LabelArtistRelationship, http://wiki.musicbrainz.org/LabelReleaseRelationship, http://wiki.musicbrainz.org/LabelLabelRelationship, http://wiki.musicbrainz.org/LabelTrackRelationship
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Relation&lt;MusicBrainz.Track&gt;&gt;</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns a collection of Relations to Tracks.</summary><returns>A read-only collection of <see cref="T:MusicBrainz.Relation&lt;T&gt;" />s to <see cref="T:MusicBrainz.Track" />s. If there are no relations, an empty collection.</returns><remarks>If the relations have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+<para>
+This method will never return null.</para><block subset="none" type="note">
+See http://wiki.musicbrainz.org/ArtistTrackRelationship, http://wiki.musicbrainz.org/ReleaseTrackRelationship, http://wiki.musicbrainz.org/LabelTrackRelationship, and http://wiki.musicbrainz.org/TrackTrackRelationship
 </block></remarks></Docs>
-    </Member><Member MemberName="LoadMissingData">
-      <MemberSignature Language="C#" Value="protected void LoadMissingData ();" />
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetUrlRelations">
+      <MemberSignature Language="C#" Value="public virtual System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.UrlRelation&gt; GetUrlRelations ();" />
       <MemberType>Method</MemberType>
-      <ReturnValue><ReturnType>System.Void</ReturnType></ReturnValue>
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.UrlRelation&gt;</ReturnType></ReturnValue>
       <Parameters />
-      <Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="MBID">
-      <MemberSignature Language="C#" Value="public virtual string MBID { get; };" />
+      <Docs><summary>Returns a collection of Relations to URLs.</summary><returns>A read-only collection of <see cref="T:MusicBrainz.UrlRelation" />s. If there are no relations, an empty collection.</returns><remarks>If the relations have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+<para>
+This method will never return null.</para><block subset="none" type="note">
+  See http://wiki.musicbrainz.org/ArtistUrlRelationship, http://wiki.musicbrainz.org/ReleaseUrlRelationship, http://wiki.musicbrainz.org/TrackUrlRelationship, and http://wiki.musicbrainz.org/LabelUrlRelationship
+</block></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Id">
+      <MemberSignature Language="C#" Value="public virtual string Id { get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The MusicBrainzID: A global resource identifier.</summary><value>To be added.</value><remarks>
+      <Docs><summary>Get the universal identifier for the resource.</summary><value>The MusicBrainz ID.</value><remarks>
           <block subset="none" type="note">
 See http://wiki.musicbrainz.org/ArtistID, http://wiki.musicbrainz.org/ReleaseID, http://wiki.musicbrainz.org/TrackID, and http://wiki.musicbrainz.org/LabelID
 </block>
         </remarks></Docs>
-    </Member><Member MemberName="ProviderUrl">
-      <MemberSignature Language="C#" Value="public static string ProviderUrl;" />
-      <MemberType>Field</MemberType>
-      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The URL of the MusicBrainz XMLWebService provider.</summary><remarks>By default is "http://musicbrainz.org/ws/1/";. Change to use another server.</remarks></Docs>
-    </Member><Member MemberName="QueryLimit">
-      <MemberSignature Language="C#" Value="protected static byte QueryLimit { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Byte</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="ReleaseRelations">
-      <MemberSignature Language="C#" Value="public virtual System.Collections.Generic.List&lt;MusicBrainz.Relation&lt;MusicBrainz.Release&gt;&gt; ReleaseRelations { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Collections.Generic.List&lt;MusicBrainz.Relation&lt;MusicBrainz.Release&gt;&gt;</ReturnType></ReturnValue>
-      <Docs><summary>A list of Relations to Releases.</summary><value>A List of Relations to <see cref="T:MusicBrainz.Release" />s. If there are no relations, an empty List.</value><remarks>This property will never be null.
-<block subset="none" type="note">
-See http://wiki.musicbrainz.org/ReleaseArtistRelationship, http://wiki.musicbrainz.org/ReleaseReleaseRelationship, http://wiki.musicbrainz.org/LabelReleaseRelationship, and http://wiki.musicbrainz.org/ReleaseTrackRelationship
-</block></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="op_Equality">
+      <MemberSignature Language="C#" Value="public static bool op_Equality (MusicBrainz.MusicBrainzObject obj1, MusicBrainz.MusicBrainzObject obj2);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Boolean</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="obj1" Type="MusicBrainz.MusicBrainzObject" /><Parameter Name="obj2" Type="MusicBrainz.MusicBrainzObject" /></Parameters>
+      <Docs><param name="obj1">The first MusicBrainzObject.</param><param name="obj2">The second MusicBrainzObject.</param><summary>Determins equality between two MusicBrainzObject objects.</summary><returns>True if the two MusicBrainzObjects are of the same exact type and have the same ID or both are null, false otherwise.</returns><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="op_Inequality">
+      <MemberSignature Language="C#" Value="public static bool op_Inequality (MusicBrainz.MusicBrainzObject obj1, MusicBrainz.MusicBrainzObject obj2);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Boolean</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="obj1" Type="MusicBrainz.MusicBrainzObject" /><Parameter Name="obj2" Type="MusicBrainz.MusicBrainzObject" /></Parameters>
+      <Docs><param name="obj1">The first MusicBrainzObject.</param><param name="obj2">The second MusicBrainzObject.</param><summary>Determins inequality between two MusicBrainzObject objects.</summary><returns>True if the two MusicBrainzObjects are of different exact types or have different IDs or one is null and the other is not, false otherwise.</returns><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Score">
-      <MemberSignature Language="C#" Value="public virtual byte Score { get; };" />
+      <MemberSignature Language="C#" Value="public virtual byte Score { get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.Byte</ReturnType></ReturnValue>
-      <Docs><summary>A Lucene search relevance score for objects retrieved from a query.</summary><value>0-100</value><remarks>Score will only be non-zero if and only if the object was retrieved from a query.
+      <Docs><summary>Get a Lucene search relevance score for objects retrieved from a query.</summary><value>0-100.</value><remarks>Score will only be non-zero if and only if the object was retrieved from a query.
 <block subset="none" type="note">
 See http://lucene.apache.org/java/docs/scoring.html
 </block></remarks></Docs>
-    </Member><Member MemberName="TrackRelations">
-      <MemberSignature Language="C#" Value="public virtual System.Collections.Generic.List&lt;MusicBrainz.Relation&lt;MusicBrainz.Track&gt;&gt; TrackRelations { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Collections.Generic.List&lt;MusicBrainz.Relation&lt;MusicBrainz.Track&gt;&gt;</ReturnType></ReturnValue>
-      <Docs><summary>A list of Relations to Tracks.</summary><value>A List of Relations to <see cref="T:MusicBrainz.Track" />s. If there are no relations, an empty List.</value><remarks>This property will never be null.
-<block subset="none" type="note">
-See http://wiki.musicbrainz.org/ArtistTrackRelationship, http://wiki.musicbrainz.org/ReleaseTrackRelationship, http://wiki.musicbrainz.org/LabelTrackRelationship, and http://wiki.musicbrainz.org/TrackTrackRelationship
-</block></remarks></Docs>
-    </Member><Member MemberName="UrlExtension">
-      <MemberSignature Language="C#" Value="protected abstract string UrlExtension { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="UrlRelations">
-      <MemberSignature Language="C#" Value="public virtual System.Collections.Generic.List&lt;MusicBrainz.UrlRelation&gt; UrlRelations { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Collections.Generic.List&lt;MusicBrainz.UrlRelation&gt;</ReturnType></ReturnValue>
-      <Docs><summary>A list of Relations to URLs.</summary><value>A List of  <see cref="T:MusicBrainz.UrlRelation" />s. If there are no relations, an empty List.</value><remarks>This property will never be null.
-<block subset="none" type="note">
-  See http://wiki.musicbrainz.org/ArtistUrlRelationship, http://wiki.musicbrainz.org/ReleaseUrlRelationship, http://wiki.musicbrainz.org/TrackUrlRelationship, and http://wiki.musicbrainz.org/LabelUrlRelationship
-</block></remarks></Docs>
-    </Member><Member MemberName="XmlRequest">
-      <MemberSignature Language="C#" Value="public static event MusicBrainz.XmlRequestHandler XmlRequest;" />
-      <MemberType>Event</MemberType>
-      <ReturnValue><ReturnType>MusicBrainz.XmlRequestHandler</ReturnType></ReturnValue>
-      <Docs><summary>This event is raised every time XML is fetched from the MusicBrainz servers.</summary><remarks>
-          <para>
-The MusicBrainz-Sharp API hides the underlying XMLWebService, however the exchange of XML with the MusicBrainz server is key to the performance of code. Whenever data is requested through the API which has not yet been fetched from the MusicBrainz servers, XML must be requested. In addition to the ordinary latency between the local machine and the MusicBrainz servers, requests are limited to one per second - a restriction imposed by the MusicBrainz service.
-</para>
-          <para>
-The XmlRequest event is provided to help diagnose performance problems. It is raised whenever XML is requested from the MusicBrainz servers. For example, consider the following code:
-<example><code lang="C#">
-foreach(Artist a in Artist.Query("Goodshirt")) {
-    foreach(Release r in a.Releases) {
-        Console.WriteLine("\t" + r);
-        foreach(Track t in r.Tracks) {
-            Console.WriteLine("\t\t" + t);
-            foreach(string puid in t.Puids)
-                Console.WriteLine("\t\t\t" + puid);
-        }
-    }
-}
-  </code></example></para>
-          <para>
-When executed, this code will take upwards of 30 seconds to finish. If we register the XmlRequest event, like so:
-<example><code lang="C#">
-MusicBrainzObject.XmlRequest += delegate(string url, bool cache) {
-    if(!cache)
-        Console.WriteLine("Fetching: " + url);
-};
-  </code></example></para>
-          <para>
-Then we see the problem: XML is being fetched for every song from every release. If we look at the actual XML, we see the reason: the Tracks are instantiated based on the XML from http://musicbrainz.org/ws/1/release/24d6b067-b626-4c56-af40-99832c11e08b?type=xml&amp;inc=tracks. This XML does not include PUID information. When t.PUID is accessed, the PUID information must be fetched on a per-song basis, such as from http://musicbrainz.org/ws/1/track/e29f7fca-4e35-4015-9e56-808a0ede1a85?type=xml&amp;inc=puids. If we remove the PUID loop from the above code, like so:
-<example><code lang="C#">
-foreach(Artist a in Artist.Query("Goodshirt")) {
-    foreach(Release r in a.Releases) {
-        Console.WriteLine("\t" + r);
-        foreach(Track t in r.Tracks)
-            Console.WriteLine("\t\t" + t);
-    }
-}
-  </code></example></para>
-          <para />
-Then execution time drops to about 5 seconds.
-<block subset="none" type="note"><para>
-When XML is requested, all of an objet's missing data is fetched. This means, for example, that you could access t.Puids and incure an XML request, or you could access t.Artist and incure an XML request, but not both. Supposing that a Track t did not have the Puids or Artist data locally availible, if you were to access first t.Puids, this would incure an XML request which would fetch all missing data, including the artist. Any subsiquent access to t.Artist (or any other property) would not incure an XML request.
-  </para></block></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Added: trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzService.xml
==============================================================================
--- (empty file)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzService.xml	Sun Aug 17 08:52:21 2008
@@ -0,0 +1,100 @@
+<Type Name="MusicBrainzService" FullName="MusicBrainz.MusicBrainzService">
+  <TypeSignature Language="C#" Value="public static class MusicBrainzService" />
+  <AssemblyInfo>
+    <AssemblyName>MusicBrainz</AssemblyName>
+    <AssemblyVersion>0.0.0.0</AssemblyVersion>
+  </AssemblyInfo>
+  <Base>
+    <BaseTypeName>System.Object</BaseTypeName>
+  </Base>
+  <Interfaces />
+  <Docs>
+    <summary>A static class governing global members pertaining to the interaction with the MusicBrainz web service.</summary>
+    <remarks>To be added.</remarks>
+  </Docs>
+  <Members>
+    
+    
+    <Member MemberName="CachePolicy">
+      <MemberSignature Language="C#" Value="public static System.Net.Cache.RequestCachePolicy CachePolicy { set; get; }" />
+      <MemberType>Property</MemberType>
+      <ReturnValue><ReturnType>System.Net.Cache.RequestCachePolicy</ReturnType></ReturnValue>
+      <Docs><summary>Get or set the policy for caching the XML which is retrieved from the MusicBrainz servers.</summary><value>The cache policy to be used when contacting the MusicBrainz servers.</value><remarks>
+          <para>Mono does not implement caching so changing the CachePolicy will have no effect.</para>
+          <para>
+This property is thread-safe.
+</para>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="ServiceUrl">
+      <MemberSignature Language="C#" Value="public static Uri ServiceUrl { set; get; }" />
+      <MemberType>Property</MemberType>
+      <ReturnValue><ReturnType>System.Uri</ReturnType></ReturnValue>
+      <Docs><summary>Get or set the URL of the MusicBrainz XMLWebService provider.</summary><value>Default is "http://musicbrainz.org/ws/1/";.</value><remarks>
+          <para>
+This can be changed to point to another server running the MusicBrainz XMLWebService software (for example, a testing server).</para>
+          <para>
+This property is thread-safe.
+</para>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            The value is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="XmlRequest">
+      <MemberSignature Language="C#" Value="public static event EventHandler&lt;MusicBrainz.XmlRequestEventArgs&gt; XmlRequest;" />
+      <MemberType>Event</MemberType>
+      <ReturnValue><ReturnType>System.EventHandler&lt;MusicBrainz.XmlRequestEventArgs&gt;</ReturnType></ReturnValue>
+      <Docs><summary>This event is raised every time XML is fetched from the MusicBrainz servers.</summary><remarks>
+          <para>
+The MusicBrainz# API hides the underlying XMLWebService, however the exchange of XML with the MusicBrainz server is key to the performance of code. Whenever data is requested through the API which has not yet been fetched from the MusicBrainz servers, XML must be requested. In addition to the ordinary latency between the local machine and the MusicBrainz servers, requests are limited to one per second from a given IP - a restriction imposed by the MusicBrainz service.
+</para>
+          <para>
+The XmlRequest event is provided to help diagnose performance problems. It is raised whenever XML is requested from the MusicBrainz servers. For example, consider the following code:
+<example><code lang="C#">
+foreach (Artist a in Artist.Query("Goodshirt")) {
+    foreach (Release r in a.GetReleases ()) {
+        Console.WriteLine ("\t" + r);
+        foreach (Track t in r.GetTracks ()) {
+            Console.WriteLine ("\t\t" + t);
+            foreach (string puid in t.GetPuids ())
+                Console.WriteLine ("\t\t\t" + puid);
+        }
+    }
+}
+</code></example></para>
+          <para>
+When executed, this code will take upwards of 30 seconds to finish. If we register the XmlRequest event, like so:
+<example><code lang="C#">
+MusicBrainzService.XmlRequest += delegate (object o, XmlRequestEventArgs args) {
+    if (!args.FromCache)
+        Console.WriteLine ("Fetching: " + args.Uri.AbsoluteUri);
+};
+</code></example></para>
+          <para>
+Then we see the problem: XML is being fetched for every song from every release. If we look at the actual XML, we see the reason: the Tracks are instantiated based on the XML from http://musicbrainz.org/ws/1/release/24d6b067-b626-4c56-af40-99832c11e08b?type=xml&amp;inc=tracks. This XML does not include PUID information. When t.GetPuid() is accessed, the PUID information must be fetched on a per-song basis, such as from http://musicbrainz.org/ws/1/track/e29f7fca-4e35-4015-9e56-808a0ede1a85?type=xml&amp;inc=puids. If we remove the PUID loop from the above code, like so:
+<example><code lang="C#">
+foreach(Artist a in Artist.Query("Goodshirt")) {
+    foreach(Release r in a.GetReleases ()) {
+        Console.WriteLine("\t" + r);
+        foreach(Track t in r.GetTracks ())
+            Console.WriteLine("\t\t" + t);
+    }
+}
+</code></example></para>
+          <para />
+Then execution time drops to about 5 seconds.
+<block subset="none" type="note"><para>
+When XML is requested, all of an object's missing data is fetched. This means, for example, that you could access t.GetPuids() and incure an XML request, or you could access t.GetArtist() and incure an XML request, but not both. Supposing that a Track t did not have the Puids or Artist data locally availible, if you were to access first t.GetPuids(), this would incure an XML request which would fetch all missing data, including the artist. Any subsiquent access to t.GetArtist() (or any other Get* method) would not incure an XML request.
+</para></block></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member>
+  </Members>
+</Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzUnauthorizedException.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzUnauthorizedException.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/MusicBrainzUnauthorizedException.xml	Sun Aug 17 08:52:21 2008
@@ -18,6 +18,6 @@
       <MemberType>Constructor</MemberType>
       <Parameters />
       <Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
-    </Member>
+    <AssemblyInfo><AssemblyVersion>0.0.0.0</AssemblyVersion></AssemblyInfo></Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/Query`1.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/Query`1.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/Query`1.xml	Sun Aug 17 08:52:21 2008
@@ -1,11 +1,15 @@
 <Type Name="Query&lt;T&gt;" FullName="MusicBrainz.Query&lt;T&gt;">
-  <TypeSignature Language="C#" Value="public sealed class Query&lt;T&gt; : System.Collections.Generic.IEnumerable&lt;T&gt;" />
+  <TypeSignature Language="C#" Value="public sealed class Query&lt;T&gt; : System.Collections.Generic.IEnumerable&lt;T&gt; where T : MusicBrainzObject" />
   <AssemblyInfo>
     <AssemblyName>MusicBrainz</AssemblyName>
     <AssemblyVersion>0.0.0.0</AssemblyVersion>
   </AssemblyInfo>
   <TypeParameters>
-    <TypeParameter>T</TypeParameter>
+    <TypeParameter Name="T">
+      <Constraints>
+        <BaseTypeName>MusicBrainz.MusicBrainzObject</BaseTypeName>
+      </Constraints>
+    </TypeParameter>
   </TypeParameters>
   <Base>
     <BaseTypeName>System.Object</BaseTypeName>
@@ -21,224 +25,173 @@
     </Attribute>
   </Attributes>
   <Docs>
-    <typeparam name="T">T must inherit from <see cref="T:MusicBrainz.MusicBrainzObject" /></typeparam>
-    <summary>This class encapsulates a query for a MusicBrainz resource.</summary>
+    <typeparam name="T">Either <see cref="T:MusicBrainz.Artist" />, <see cref="T:MusicBrainz.Release" />, <see cref="T:MusicBrainz.Track" />, or <see cref="T:MusicBrainz.Label" />.</typeparam>
+    <summary>Encapsulates a query for a MusicBrainz resource.</summary>
     <remarks>
       <para>
-A Query is attainted by calling one of the static Query() methods on one of the concrete MusicBrainz resources: <see cref="T:MusicBrainz.Artist" />, <see cref="T:MusicBrainz.Release" />, <see cref="T:MusicBrainz.Track" />, or <see cref="T:MusicBrainz.Label" />. Results are ordered in descending relevance.
+A Query is attainted by calling one of the static Query() methods on one of the concrete MusicBrainz resources: <see cref="T:MusicBrainz.Artist" />, <see cref="T:MusicBrainz.Release" />, <see cref="T:MusicBrainz.Track" />, or <see cref="T:MusicBrainz.Label" />. Results are ordered by descending relevance.
 </para>
       <para>
-In this example, we query for all artists named "Justice" and print their names and MBIDs:
+In this example, we query for all artists named "Justice" and print their names and IDs:
 <example><code lang="C#">
-foreach(Artist a in Artist.Query("Justice"))
-    Console.WriteLine("{0} ({1})", a.Name, a.MBID);
-  </code></example></para>
+foreach (Artist a in Artist.Query ("Justice"))
+    Console.WriteLine ("{0} ({1})", a.GetName (), a.Id);
+</code></example></para>
       <para>A Query can also be implicitly cast as the type for which you are querying. So if you would like just the first result of a Query, you can simple do this:
 <example><code lang="C#">
-Release r = Release.Query("Fiji Baby");
-Console.WriteLine(r.Artist.Name);
-  </code></example>
+Release r = Release.Query ("Fiji Baby");
+Console.WriteLine (r.GetArtist ().GetName ());
+</code></example>
 Note: this will return null if no results are returned.
 </para>
       <para>It is often the case that you will only care about results at or above a certain level of relevance. For convienience, you can iterate over a Query's Best(int) method. This will return only the results with scores at or above the specified threshold. Or you can call Best() with no parameters, which will only return results with a 100 relevancy score.
 <example><code lang="C#">
-foreach(Artist a in Artist.Query("Me First").Best(70)) // Only returns results whose score is 70 or better
-    Console.WriteLine(a.Name);
+foreach (Artist a in Artist.Query ("Me First").Best (70)) // Only returns results whose score is 70 or better
+    Console.WriteLine (a.GetName ());
 
-foreach(Release r in Release.Query("Are a Drag").Best()) // Only returns results with a score of 100
-    Console.WriteLine(r.Title);
-  </code></example></para>
+foreach (Release r in Release.Query ("Are a Drag").Best ()) // Only returns results with a score of 100
+    Console.WriteLine (r.GetTitle ());
+</code></example></para>
       <para>A Query does not actually contact the MusicBrainz servers until its results are accessed. For example, the following code does not involve a XMLWebService request:
 <example><code lang="C#">
-Query&lt;Track&gt; q = Track.Query("Hey Jude");
-  </code></example></para>
+Query&lt;Track&gt; q = Track.Query ("Hey Jude");
+</code></example></para>
       <para>
 The MusicBrainz servers are contact only when accessing the results of the Query, as in one of the following manners:
 <example><code lang="C#">
-foreach(Track t in q)
+foreach (Track t in q)
 {
     // something
 }
 // or
 Track t = q[0];
 // or 
-List&lt;Track&gt; results = q.ToList();
+List&lt;Track&gt; results = q.ToList ();
 // or
 Track t = q;
-  </code></example></para>
+</code></example></para>
       <para>
 Be aware that the MusicBrainz XMLWebService can only return results 100 at a time, so each 100 iterations over a Query will result in another call to the MusicBrainz server, which means a significant delay in execution. For this reason it is important to break out of iterating over a Query when you are able.
 </para>
     </remarks>
   </Docs>
   <Members>
-    <Member MemberName="Count">
-      <MemberSignature Language="C#" Value="public int Count { get; };" />
+    
+    
+    
+    
+    
+    
+    
+    
+    <Member MemberName="Best">
+      <MemberSignature Language="C#" Value="public System.Collections.Generic.IEnumerable&lt;T&gt; Best ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Collections.Generic.IEnumerable&lt;T&gt;</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns only results with a <see cref="M:MusicBrainz.MusicBrainzObject.Score" /> of 100 (100% relevancy - the highest possible value).</summary><returns>Results with a 100 relevancy score.</returns><remarks>This method is logically identical to calling Query.Best (100);</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Best">
+      <MemberSignature Language="C#" Value="public System.Collections.Generic.IEnumerable&lt;T&gt; Best (int scoreThreshold);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Collections.Generic.IEnumerable&lt;T&gt;</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="scoreThreshold" Type="System.Int32" /></Parameters>
+      <Docs><param name="scoreThreshold">The relevancy threshold. Any result with a <see cref="M:MusicBrainz.MusicBrainzObject.Score" /> lower than this number will not be returned.</param><summary>Returns only results with a <see cref="M:MusicBrainz.MusicBrainzObject.Score" /> at or above the specified relevancy threshold.</summary><returns>Results at or above the specified relevancy.</returns><remarks>If you only want results of a given quality, this is the perfered method for retrieving them. This example iterates over all artists with a score of 50 or better when querying for "Dylan":
+<example><code lang="C#">
+foreach (Artist a in Artist.Query ("Dylan").Best (50))
+    Console.WriteLine (a.GetName ());
+</code></example></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Count">
+      <MemberSignature Language="C#" Value="public int Count { get; }" />
       <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>System.Int32</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>The number of results.</summary>
-        <value>The total number of results to the query.</value>
-        <remarks>To be added.</remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="GetEnumerator">
+      <ReturnValue><ReturnType>System.Int32</ReturnType></ReturnValue>
+      <Docs><summary>Get the number of results.</summary><value>The total number of results to the query.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="First">
+      <MemberSignature Language="C#" Value="public T First ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>T</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns the first result.</summary><returns>The first result of the query, regardless of its score. If there are no results, null.</returns><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetEnumerator">
       <MemberSignature Language="C#" Value="public System.Collections.Generic.IEnumerator&lt;T&gt; GetEnumerator ();" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>System.Collections.Generic.IEnumerator&lt;T&gt;</ReturnType>
-      </ReturnValue>
+      <ReturnValue><ReturnType>System.Collections.Generic.IEnumerator&lt;T&gt;</ReturnType></ReturnValue>
       <Parameters />
-      <Docs>
-        <summary>To be added.</summary>
-        <returns>To be added.</returns>
-        <remarks>To be added.</remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Item">
-      <MemberSignature Language="C#" Value="public T this[int i] { get; };" />
+      <Docs><summary>Returns an enumerator for the query results.</summary><returns>An enumerator with which one can iterate over the results of a query.</returns><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Item">
+      <MemberSignature Language="C#" Value="public T this[int i] { get; }" />
       <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>T</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="i" Type="System.Int32" />
-      </Parameters>
-      <Docs>
-        <param name="i">A value less than Count and greater than or equal to 0.</param>
-        <summary>Access a given result from the query with a zero-based indexer.</summary>
-        <value>The result from the query which corrisponds to the zero-based index.</value>
-        <remarks>
-          <para>Throws a <see cref="T:System.IndexOutOfRangeException" /> if i is equal to or greater than Count, or less than zero.</para>
+      <ReturnValue><ReturnType>T</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="i" Type="System.Int32" /></Parameters>
+      <Docs><param name="i">A value less than Count and greater than or equal to 0.</param><summary>Get a given result from the query with a zero-based indexer.</summary><value>The result from the query which corrisponds to the zero-based index.</value><remarks>
           <para>
 In this example, we retrieve the first result of a Query using the indexer:
 <example><code lang="C#">
-Query&lt;Artist&gt; q = Artist.Query("The Wallflowers");
+Query&lt;Artist&gt; q = Artist.Query ("The Wallflowers");
 Artist a = q.Count &gt; 0 ? q[0] : null;
-  </code></example>
-Note: this is how Query's implicit conversion to T works</para>
+</code></example>
+Note: this is how <see cref="M:MusicBrainz.Query&lt;T&gt;.First" /> works</para>
           <para>
 In this example, we iterate over the first 10 results of a Query with a for loop and the indexer:
 <example><code lang="C#">
 Query&lt;Release&gt; q = Release.Query("Classics");
 for(int i = 0; i &lt; 10 &amp;&amp; i &lt; q.Count; i++)
 {
-    Console.WriteLine("{0} by {1}", q[i].Title, q[i].Artist.Name); 
+    Console.WriteLine ("{0} by {1}", q[i].GetTitle (), q[i].GetArtist ().GetName ()); 
 }
-  </code></example></para>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="ToArray">
-      <MemberSignature Language="C#" Value="public T[] ToArray ();" />
-      <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>T[]</ReturnType>
-      </ReturnValue>
-      <Parameters />
-      <Docs>
-        <summary>Convert a Query to an array of results.</summary>
-        <returns>An array of all the results.</returns>
-        <remarks>
-          <para>
-The MusicBrainz XMLWebService only returns results 100 at a time, so iterating over each 100 results incures another XML transaction, i.e. a significant delay in execution. Since the ToArray() method must iterate over all results, it is highly advisible to use another method whenever possible (such as the foreach statement, or a for loop and the indexer).
-</para>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="ToList">
-      <MemberSignature Language="C#" Value="public System.Collections.Generic.List&lt;T&gt; ToList ();" />
-      <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>System.Collections.Generic.List&lt;T&gt;</ReturnType>
-      </ReturnValue>
-      <Parameters />
-      <Docs>
-        <summary>Returns a List of all results.</summary>
-        <returns>A List of all the Query results.</returns>
-        <remarks>
+</code></example></para>
+        </remarks><exception cref="T:System.ArgumentOutOfRangeException">
           <para>
-The MusicBrainz XMLWebService only returns results 100 at a time, so iterating over each 100 results incures another XML transaction, i.e. a significant delay in execution. Since the ToList() method must iterate over all results, it is advisible to use another method whenever possible (such as the foreach statement, or a for loop and the indexer). If you are only interested in results with a relavance score higher than, say, 50, you should use the overload ToList(int) which takes a score threshold.
-</para>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Best">
-      <MemberSignature Language="C#" Value="public System.Collections.Generic.IEnumerable&lt;T&gt; Best ();" />
-      <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>System.Collections.Generic.IEnumerable&lt;T&gt;</ReturnType>
-      </ReturnValue>
-      <Parameters />
-      <Docs>
-        <summary>Returns only results with a <see cref="M:MusicBrainz.MusicBrainzObject.Score" /> of 100 (the highest).</summary>
-        <returns>Results with a 100 relevancy score.</returns>
-        <remarks>This method is logically identical to calling Query.Best(100);</remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Best">
-      <MemberSignature Language="C#" Value="public System.Collections.Generic.IEnumerable&lt;T&gt; Best (int score_threshold);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>System.Collections.Generic.IEnumerable&lt;T&gt;</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="score_threshold" Type="System.Int32" />
-      </Parameters>
-      <Docs>
-        <param name="score_threshold">The relevancy threshold. Any result with a <see cref="M:MusicBrainz.MusicBrainzObject.Score" /> lower than this number will not be returned.</param>
-        <summary>Returns only results with a <see cref="M:MusicBrainz.MusicBrainzObject.Score" /> at or above the specified relevancy threshold.</summary>
-        <returns>Results at or above the specified relevancy.</returns>
-        <remarks>If you only want results of a given quality, this is the perfered method for retrieving them. This example iterates over all artists with a score of 50 or better when querying for "Dylan":
-<example><code lang="C#">
-foreach(Artist a in Artist.Query("Dylan").Best(50))
-    Console.WriteLine(a.Name);
-  </code></example></remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="op_Implicit">
+            <paramref name="i"/> is less than 0 or greater than <see cref="M:MusicBrainz.Query&lt;T&gt;.Count" />.
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="op_Implicit">
       <MemberSignature Language="C#" Value="public static T op_Implicit (MusicBrainz.Query&lt;T&gt; query);" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>T</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="query" Type="MusicBrainz.Query&lt;T&gt;" />
-      </Parameters>
-      <Docs>
-        <param name="query">To be added.</param>
-        <summary>The first result.</summary>
-        <returns>The first result of the Query or null if there are no results.
-<block subset="none" type="note"><para>
+      <ReturnValue><ReturnType>T</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="query" Type="MusicBrainz.Query&lt;T&gt;" /></Parameters>
+      <Docs><param name="query">The query.</param><summary>Returns the first result of the query.</summary><returns>The first result of the Query or null if there are no results.
+<block subset="none" type="note">
 This result may not nessisarily have a <see cref="M:MusicBrainz.MusicBrainzObject.Score" /> of 100. While this will be the most relevant result, it's relevancy to the query may still be weak.
-  </para></block></returns>
-        <remarks>This operator makes it easy to get the first result form a query:
-<example><code lang="C#">
-Artist a = Artist.Query("The Scissor Sisters");
-  </code></example></remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="ToList">
-      <MemberSignature Language="C#" Value="public System.Collections.Generic.List&lt;T&gt; ToList (int score_threshold);" />
+</block></returns><remarks>This operator simply calls <see cref="M:MusicBrainz.Query&lt;T&gt;.First" /> on the specified query.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="PerfectMatch">
+      <MemberSignature Language="C#" Value="public T PerfectMatch ();" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>System.Collections.Generic.List&lt;T&gt;</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="score_threshold" Type="System.Int32" />
-      </Parameters>
-      <Docs>
-        <param name="score_threshold">The relevancy threshold. Any result with a <see cref="M:MusicBrainz.MusicBrainzObject.Score" /> below this number will not be included in the List.</param>
-        <summary>Returns a List of results above the specified relevance threshold.</summary>
-        <returns>A List of results at or above the specified relevancy threshold.</returns>
-        <remarks>
-          <para>
-The MusicBrainz XMLWebService only returns results 100 at a time, so iterating over each 100 results incures another XML transaction, i.e. a significant delay in execution. The lower the threshold you specify, the more results will be included. Be aware that too low a threshold can cause multiple XML transaction (one transaction per 100 results) and can slow down your program.
-</para>
-        </remarks>
-      </Docs>
+      <ReturnValue><ReturnType>T</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns the one and only result with a score of 100.</summary><returns>The one and only result with a score of 100. If there are no results with a score of 100 or if there are multiple results with a score of 100, this method will return null.</returns><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="System.Collections.IEnumerable.GetEnumerator">
+      <MemberSignature Language="C#" Value="System.Collections.IEnumerator IEnumerable.GetEnumerator ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Collections.IEnumerator</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>To be added.</summary><returns>To be added.</returns><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
-</Type>
\ No newline at end of file
+</Type>

Added: trunk/musicbrainz-sharp/docs/en/MusicBrainz/RelationBase`1.xml
==============================================================================
--- (empty file)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/RelationBase`1.xml	Sun Aug 17 08:52:21 2008
@@ -0,0 +1,99 @@
+<Type Name="RelationBase&lt;T&gt;" FullName="MusicBrainz.RelationBase&lt;T&gt;">
+  <TypeSignature Language="C#" Value="public abstract class RelationBase&lt;T&gt;" />
+  <AssemblyInfo>
+    <AssemblyName>MusicBrainz</AssemblyName>
+    <AssemblyVersion>0.0.0.0</AssemblyVersion>
+  </AssemblyInfo>
+  <TypeParameters>
+    <TypeParameter Name="T" />
+  </TypeParameters>
+  <Base>
+    <BaseTypeName>System.Object</BaseTypeName>
+  </Base>
+  <Interfaces />
+  <Docs>
+    <typeparam name="T">The type of the object to which the relationship refers.</typeparam>
+    <summary>The base class for advanced relationships.</summary>
+    <remarks>
+      <para>Subclasses include <see cref="T:MusicBrainz.Relation&lt;T&gt;" /> and <see cref="T:MusicBrainz.UrlRelation" /></para>
+      <block subset="none" type="note">
+See http://wiki.musicbrainz.org/AdvancedRelationships
+</block>
+    </remarks>
+  </Docs>
+  <Members>
+    
+    
+    
+    
+    
+    <Member MemberName="Attributes">
+      <MemberSignature Language="C#" Value="public System.Collections.ObjectModel.ReadOnlyCollection&lt;string&gt; Attributes { get; }" />
+      <MemberType>Property</MemberType>
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;System.String&gt;</ReturnType></ReturnValue>
+      <Docs><summary>Get a collection of the relationship attributes.</summary><value>A read-only collections of the relationship attributes in string form. If there are no relationship attributes, an empty collection.</value><remarks>
+          <para>
+This property will never be null.
+</para>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/AdvancedRelationshipAttribute
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="BeginDate">
+      <MemberSignature Language="C#" Value="public string BeginDate { get; }" />
+      <MemberType>Property</MemberType>
+      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
+      <Docs><summary>Get the date on which the relation began.</summary><value>A string of the date or null if no information is availible. E.g., "2008-04-23"</value><remarks>
+          <para>
+Different relations may have different levels of specificity regarding the date depending on the availibility of information. Some may specify just the year, others the month and the year, and others may have the day, month, and year. It is for this reason that this property is a <see cref="T:System.String" /> rather than a <see cref="T:System.DateTime" />.
+</para>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Direction">
+      <MemberSignature Language="C#" Value="public MusicBrainz.RelationDirection Direction { get; }" />
+      <MemberType>Property</MemberType>
+      <ReturnValue><ReturnType>MusicBrainz.RelationDirection</ReturnType></ReturnValue>
+      <Docs><summary>Get the direction of the relation.</summary><value>The direction of the relation.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="EndDate">
+      <MemberSignature Language="C#" Value="public string EndDate { get; }" />
+      <MemberType>Property</MemberType>
+      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
+      <Docs><summary>Get the date on which the relation ended.</summary><value>A string of the date or null if no information is availible. E.g., "2008-04-23"</value><remarks>
+          <para>
+Different relations may have different levels of specificity regarding the date depending on the availibility of information. Some may specify just the year, others the month and the year, and others may have the day, month, and year. It is for this reason that this property is a <see cref="T:System.String" /> rather than a <see cref="T:System.DateTime" />.
+</para>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Target">
+      <MemberSignature Language="C#" Value="public T Target { get; }" />
+      <MemberType>Property</MemberType>
+      <ReturnValue><ReturnType>T</ReturnType></ReturnValue>
+      <Docs><summary>Get the target of the relation.</summary><value>The target of the relation.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Type">
+      <MemberSignature Language="C#" Value="public string Type { get; }" />
+      <MemberType>Property</MemberType>
+      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
+      <Docs><summary>Get the type of the relation.</summary><value>A string of the type of the relation.</value><remarks>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/AdvancedRelationshipType
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member>
+  </Members>
+</Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/RelationDirection.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/RelationDirection.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/RelationDirection.xml	Sun Aug 17 08:52:21 2008
@@ -9,7 +9,7 @@
   </Base>
   <Docs>
     <summary>The direction of a Relation.</summary>
-    <remarks>If a relation has a backward direction, the relation's Target holds that relation to the object. For example, consider the artist "The Beatles". That Artist has in its ArtistRelations list a relation of type "MemberOfBand" to the Artist "John Lennon". This is a backwards relations. It is backwards because the target of the relation ("John Lennon") is a "MemberOfBand" to "The Beatles"; "The Beatles" is not a member of the band "John Lennon" (as it would appear to be if it were a forward direction). Howerver, in "John Lennon"'s ArtistRelation list is a forward relation of type "MemberOfBand" to "The Beatles".</remarks>
+    <remarks>If a relation has a backward direction, the relation's Target holds that relation to the object from which the relation was got. For example, consider the artist "The Beatles". That Artist has in its ArtistRelations list a relation of type "MemberOfBand" to the Artist "John Lennon". This is a backwards relations. It is backwards because the target of the relation ("John Lennon") is a "MemberOfBand" to "The Beatles"; "The Beatles" is not a member of the band "John Lennon" (as it would appear to be if it were a forward direction). Howerver, in "John Lennon"'s ArtistRelation list is a forward relation of type "MemberOfBand" to "The Beatles".</remarks>
   </Docs>
   <Members>
     
@@ -17,12 +17,18 @@
       <MemberSignature Language="C#" Value="Backward" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.RelationDirection</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary></Docs>
+      <Docs><summary>The <see cref="M:MusicBrainz.RelationBase&lt;T&gt;.Target" /> is the subject of the relationship and the object from which the relation was got is the object of the relationship.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Forward">
       <MemberSignature Language="C#" Value="Forward" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.RelationDirection</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary></Docs>
+      <Docs><summary>The <see cref="M:MusicBrainz.RelationBase&lt;T&gt;.Target" /> is the object of the relationship and the object from which the relation was got is the subject of the relationship.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/Relation`1.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/Relation`1.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/Relation`1.xml	Sun Aug 17 08:52:21 2008
@@ -1,20 +1,24 @@
 <Type Name="Relation&lt;T&gt;" FullName="MusicBrainz.Relation&lt;T&gt;">
-  <TypeSignature Language="C#" Value="public sealed class Relation&lt;T&gt; : MusicBrainz.RelationPrimative&lt;T&gt;" />
+  <TypeSignature Language="C#" Value="public sealed class Relation&lt;T&gt; : MusicBrainz.RelationBase&lt;T&gt; where T : MusicBrainzObject" />
   <AssemblyInfo>
     <AssemblyName>MusicBrainz</AssemblyName>
     <AssemblyVersion>0.0.0.0</AssemblyVersion>
   </AssemblyInfo>
   <TypeParameters>
-    <TypeParameter>T</TypeParameter>
+    <TypeParameter Name="T">
+      <Constraints>
+        <BaseTypeName>MusicBrainz.MusicBrainzObject</BaseTypeName>
+      </Constraints>
+    </TypeParameter>
   </TypeParameters>
   <Base>
-    <BaseTypeName>MusicBrainz.RelationPrimative&lt;T&gt;</BaseTypeName>
+    <BaseTypeName>MusicBrainz.RelationBase&lt;T&gt;</BaseTypeName>
     
   <BaseTypeArguments><BaseTypeArgument TypeParamName="T">T</BaseTypeArgument></BaseTypeArguments></Base>
   <Interfaces />
   <Docs>
-    <typeparam name="T">T must inherit from <see cref="T:MusicBrainz.MusicBrainzObject" />.</typeparam>
-    <summary>A Relation describes a relationship to a MusicBrainz resource, such as an <see cref="T:MusicBrainz.Artist" />, <see cref="T:MusicBrainz.Release" />, <see cref="T:MusicBrainz.Track" /> or <see cref="T:MusicBrainz.Label" />.</summary>
+    <typeparam name="T">Can be <see cref="T:MusicBrainz.Artist" />, <see cref="T:MusicBrainz.Release" />, <see cref="T:MusicBrainz.Track" />, or <see cref="T:MusicBrainz.Label" />.</typeparam>
+    <summary>Describes a relationship to a MusicBrainz resource.</summary>
     <remarks>
       <block subset="none" type="note">
 See http://wiki.musicbrainz.org/AdvancedRelationships

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/Release.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/Release.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/Release.xml	Sun Aug 17 08:52:21 2008
@@ -9,304 +9,410 @@
   </Base>
   <Interfaces />
   <Docs>
-    <summary>The Release class encapsulates the MusicBrainz Release resource.</summary>
+    <summary>Encapsulates the MusicBrainz Release resource.</summary>
     <remarks>
+      <para>
+Print all tracks in the album "You Forgot It in People":
+<example><code lang="C#">
+Release r = Release.Query ("You Forgot It in People");
+foreach (Track t in r.GetTracks ()) {
+    Console.WriteLine (t.GetTitle ());
+}
+</code></example></para>
+      <para>
+Print the title of the CD in the CD Rom tray and all of its tracks:
+<example><code lang="C#">
+Release r = Release.QueryFromDevice (cd_device); // Where cd_device is something like "/dev/cdrom" or "E:\"
+Console.WriteLine (r.GetTitle ());
+foreach (Track t in r.GetTracks ()) {
+    Console.WriteLine ("\t{0}", t.GetTitle ());
+}
+</code></example></para>
       <block subset="none" type="note">
 See http://wiki.musicbrainz.org/Release
 </block>
     </remarks>
   </Docs>
   <Members>
-    <Member MemberName="Asin">
-      <MemberSignature Language="C#" Value="public string Asin { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>System.String</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>The Amazon Standard Identification Number for the Release.</summary>
-        <value>A string of the ASIN.</value>
-        <remarks>
-          <block subset="none" type="note">
-See http://wiki.musicbrainz.org/ASIN
-</block>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Discs">
-      <MemberSignature Language="C#" Value="public System.Collections.Generic.List&lt;MusicBrainz.Disc&gt; Discs { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>System.Collections.Generic.List&lt;MusicBrainz.Disc&gt;</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>A list of Discs on which the Release appears.</summary>
-        <value>A list of <see cref="T:MusicBrainz.Disc" />s. If there are no Discs, an empy list.</value>
-        <remarks>This property will never be null.</remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Events">
-      <MemberSignature Language="C#" Value="public System.Collections.Generic.List&lt;MusicBrainz.Event&gt; Events { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>System.Collections.Generic.List&lt;MusicBrainz.Event&gt;</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>To be added.</summary>
-        <value>To be added.</value>
-        <remarks>To be added.</remarks>
-      </Docs>
-    </Member>
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
     <Member MemberName="Get">
-      <MemberSignature Language="C#" Value="public static MusicBrainz.Release Get (string mbid);" />
+      <MemberSignature Language="C#" Value="public static MusicBrainz.Release Get (string id);" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.Release</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="mbid" Type="System.String" />
-      </Parameters>
-      <Docs>
-        <param name="mbid">To be added.</param>
-        <summary>Retrieve a Release by universal identifier.</summary>
-        <returns>The Release with the specified MBID.</returns>
-        <remarks>
+      <ReturnValue><ReturnType>MusicBrainz.Release</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="id" Type="System.String" /></Parameters>
+      <Docs><param name="id">The MusicBrainz ID of the desired Label.</param><summary>Retrieve a Release by universal ID.</summary><returns>The Release with the specified ID.</returns><remarks>
+          <para>
+Get the release "Bananaphone" by Raffi:
+<example><code lang="C#">
+Release r = Release.Get ("6318d3f5-3641-4009-b084-cfa1878dc0d2");
+</code></example></para>
           <block subset="none" type="note">
 See http://wiki.musicbrainz.org/ReleaseID
 </block>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Language">
-      <MemberSignature Language="C#" Value="public string Language { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>System.String</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>The language of the Release title and track titles.</summary>
-        <value>An ISO 639 language code. null if MusicBrainz does not have language data for a given Release.</value>
-        <remarks>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="id" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception><exception cref="T:MusicBrainz.MusicBrainzInvalidParameterException">
+          <para>
+            <paramref name="id" /> is not a valid MusicBrainz ID.
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetAsin">
+      <MemberSignature Language="C#" Value="public string GetAsin ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns the Amazon Standard Identification Number for the Release.</summary><returns>A string of the ASIN.</returns><remarks>
+          <para>
+Print the ASIN of "Bananaphone" by Raffi:
+<example><code lang="C#">
+Release r = Release.Get ("6318d3f5-3641-4009-b084-cfa1878dc0d2");
+Console.WriteLine (r.GetAsin ());
+</code></example></para>
+          <para>
+If the ASIN has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/ASIN
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetDiscs">
+      <MemberSignature Language="C#" Value="public System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Disc&gt; GetDiscs ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Disc&gt;</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns a collection of Discs on which the Release appears.</summary><returns>A read-only collection of <see cref="T:MusicBrainz.Disc" />s. If there are no Discs, an empy collection.</returns><remarks>
+          <para>
+Print the IDs of all discs for the release "Punk in Drublic" by NOFX:
+<example><code lang="C#">
+Release r = Release.Query ("Punk in Drublic");
+foreach (Disc d in r.GetDiscs ()) {
+    Console.WriteLine (d.Id);
+}
+</code></example></para>
+          <para>
+If the discs have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+          <para>
+This property will never be null.
+</para>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetEvents">
+      <MemberSignature Language="C#" Value="public System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Event&gt; GetEvents ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Event&gt;</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns a collection of release events pertaining to the Release.</summary><returns>A read-only collection of <see cref="T:MusicBrainz.Event" />s. If there are no events, an empty collection.</returns><remarks>
+          <para>
+Print the country and date of all release events for the release "Just Enough Education To Perform" by Stereophonics:
+<example><code lang="C#">
+Release r = Release.Query ("Just Enough Education To Perform");
+foreach (Event e in r.GetEvents ()) {
+    Console.WriteLine ("{0} {1}", e.Country, e.Date);
+}
+</code></example></para>
+          <para>
+If the events have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+          <para>
+This property will never be null.
+</para>
+          <para>
+            <block subset="none" type="note">
+See http://wiki.musicbrainz.org/ReleaseEvent
+</block>
+          </para>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetLanguage">
+      <MemberSignature Language="C#" Value="public string GetLanguage ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns the language of the Release title and track titles.</summary><returns>An ISO 639 language code or null if no information is available.</returns><remarks>
+          <para>
+Prints the language code of "Mi Tierra" by Gloria Estefan:
+<example><code lang="C#">
+Release r = Release.Query ("Mi Tierra");
+Console.WriteLine (r.GetLanguage ());
+</code></example></para>
+          <para>
+If the events have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
           <block subset="none" type="note">
 See http://wiki.musicbrainz.org/ReleaseLanguage and http://en.wikipedia.org/wiki/ISO_639
 </block>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="op_Implicit">
-      <MemberSignature Language="C#" Value="public static string op_Implicit (MusicBrainz.Release r);" />
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetReleaseStatus">
+      <MemberSignature Language="C#" Value="public MusicBrainz.ReleaseStatus GetReleaseStatus ();" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>System.String</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="r" Type="MusicBrainz.Release" />
-      </Parameters>
-      <Docs>
-        <param name="r">To be added.</param>
-        <summary>This operator is provided for the benefit of LINQ syntax. See remarks for details.</summary>
-        <returns>r.ToString()</returns>
-        <remarks>
+      <ReturnValue><ReturnType>MusicBrainz.ReleaseStatus</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns the status of the Release.</summary><returns>The status of the release.</returns><remarks>
+          <para>
+If the status has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/ReleaseStatus
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetReleaseType">
+      <MemberSignature Language="C#" Value="public MusicBrainz.ReleaseType GetReleaseType ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns the type of the Release.</summary><returns>The type of the release.</returns><remarks>
+          <para>
+If the type has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/ReleaseType
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetScript">
+      <MemberSignature Language="C#" Value="public string GetScript ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns the script of the Release title and track titles.</summary><returns>An ISO 15924 script code or null if no information is available.</returns><remarks>
+          <para>
+If the script has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/ReleaseLanguage and http://www.unicode.org/iso15924/iso15924-codes.html
+</block>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetTracks">
+      <MemberSignature Language="C#" Value="public System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Track&gt; GetTracks ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Track&gt;</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns the collection of the Tracks that are included in the Release.</summary><returns>A read-only collection of <see cref="T:MusicBrainz.Track" />s. If there are no Tracks, an empty collection.</returns><remarks>
+          <para>
+Print the tracks in "Dawganova" by the David Grisman Quintet:
+<example><code lang="C#">
+foreach (Track t in Release.Query ("Dawganova").First ().GetTracks ()) {
+    Console.WriteLine (t.GetTitle ());
+}
+</code></example></para>
+          <para>
+If the tracks have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+          <para>
+This method will never return null.</para>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="op_Implicit">
+      <MemberSignature Language="C#" Value="public static string op_Implicit (MusicBrainz.Release release);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="release" Type="MusicBrainz.Release" /></Parameters>
+      <Docs><param name="release">The Release.</param><summary>This operator is provided for the benefit of LINQ syntax. See remarks for details.</summary><returns>r.ToString ();</returns><remarks>
           <para>The purpose of providing this operator is to allow for the following LINQ syntax:
 <example><code lang="C#">
 var q = from r in MB.Releases
          where r == "Are a Drag"
          select r;
-  </code></example></para>
+</code></example></para>
           <para>
 This syntax is beneficial for the following reason: LINQ queries are translated into Lucene queries and executed using the <see cref="M:MusicBrainz.Release.QueryLucene" /> method. Given the following LINQ query:
 <example><code lang="C#">
 var q = from r in MB.Releases
-         where r.Title == "Are a Drag"
+         where r.GetTitle () == "Are a Drag"
          select r;
-  </code></example></para>
+</code></example></para>
           <para>
 the LINQ provider will make the following call:
 <example><code lang="C#">
-Release.QueryLucene(@"release:""Are a Drag""");
-  </code></example></para>
+Release.QueryLucene (@"release:""Are a Drag""");
+</code></example></para>
           <para>
 However, given the first query mentioned above, the LINQ provider will make this call:
 <example><code lang="C#">
-Release.QueryLucene("Are a Drag");
-  </code></example></para>
+Release.QueryLucene ("Are a Drag");
+</code></example></para>
           <para>
-These two queries ARE NOT substantively different, but the syntax is provided to remain consistant with <see cref="M:MusicBrainz.Artist.Conversion" />. See http://wiki.musicbrainz.org/TextSearchSyntax for more information.
+These two queries are NOT substantively different, but the syntax is provided to remain consistant with <see cref="M:MusicBrainz.Artist.Conversion" /> and <see cref="M:MusicBrainz.Label.Conversion" />. See http://wiki.musicbrainz.org/TextSearchSyntax for more information.
 </para>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Query">
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Query">
+      <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Release&gt; Query (MusicBrainz.Disc disc);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Release&gt;</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="disc" Type="MusicBrainz.Disc" /></Parameters>
+      <Docs><param name="disc">A disc on which the Release appears.</param><summary>Query for Releases by Disc.</summary><returns>An enumerable Query of results.</returns><remarks>
+          <para>This is most often used with a <see cref="T:MusicBrainz.LocalDisc" />.
+</para>
+          <para>
+Find the Release corrisponding to the disc in the CD Rom tray.
+<example><code lang="C#">
+LocalDisc l = LocalDisc.GetFromDevice (cd_device); // where cd_device is something like "/dev/cdrom" or "E:\"
+Release r = Release.Query (l);
+</code></example><block subset="none" type="note">
+This is logically identical to calling <see cref="M:MusicBrainz.QueryFromDevice" /> with cd_device.
+</block></para>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="disc" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Query">
       <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Release&gt; Query (MusicBrainz.ReleaseQueryParameters parameters);" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.Query&lt;MusicBrainz.Release&gt;</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="parameters" Type="MusicBrainz.ReleaseQueryParameters" />
-      </Parameters>
-      <Docs>
-        <param name="parameters">The parameters of the query.</param>
-        <summary>Query for Releases parametrically.</summary>
-        <returns>An enumerable Query of results.</returns>
-        <remarks>To be added.</remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Query">
+      <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Release&gt;</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="parameters" Type="MusicBrainz.ReleaseQueryParameters" /></Parameters>
+      <Docs><param name="parameters">The parameters of the query.</param><summary>Query for Releases parametrically.</summary><returns>An enumerable Query of results.</returns><remarks>
+          <para>
+Query for promotional releases by Super Furry Animals:
+<example><code lang="C#">
+ReleaseQueryParameters p = new ReleaseQueryParameters ();
+p.Artist = "Super Furry Animals";
+p.ReleaseStatus = ReleaseStatus.Promotion;
+foreach (Release r in Release.Query (p)) {
+     Console.WriteLine (r.GetTitle ());
+}
+</code></example></para>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="parameters" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Query">
       <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Release&gt; Query (string title);" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.Query&lt;MusicBrainz.Release&gt;</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="title" Type="System.String" />
-      </Parameters>
-      <Docs>
-        <param name="title">The title of a release.</param>
-        <summary>Query for Releases by title.</summary>
-        <returns>An enumerable Query of results.</returns>
-        <remarks>This overload is shorthand for:
-<example><code lang="C#">
-ReleaseQueryParameters p = new ReleaseQueryParameters();
-p.Title = "some title";
-Release.Query(p);
-  </code></example></remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Query">
+      <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Release&gt;</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="title" Type="System.String" /></Parameters>
+      <Docs><param name="title">The title of a release.</param><summary>Query for Releases by title.</summary><returns>An enumerable Query of results.</returns><remarks>
+          <para>
+Query for releases entitled "Good" and print the titles and artist names of all results which are a 100% match.
+<example><code lang="C#">
+Query&lt;Release&gt; q = Release.Query ("Good");
+foreach (Release r in q.Best ()) {
+    Console.WriteLine (@"""{0}"" by {1}", r.GetTitle (), r.GetArtist ().GetName ());
+}
+</code></example></para>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="title" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Query">
       <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Release&gt; Query (string title, string artist);" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.Query&lt;MusicBrainz.Release&gt;</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="title" Type="System.String" />
-        <Parameter Name="artist" Type="System.String" />
-      </Parameters>
-      <Docs>
-        <param name="title">The title of a release.</param>
-        <param name="artist">The name of a release's artist.</param>
-        <summary>Query for Releases by their title and artist.</summary>
-        <returns>An enumerable Query of results.</returns>
-        <remarks>This overload is shorthand for:
-<example><code lang="C#">
-ReleaseQueryParameters p = new ReleaseQueryParameters();
-p.Title = "some title";
-p.Artist = "some artist";
-Release.Query(p);
-  </code></example></remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="QueryLucene">
-      <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Release&gt; QueryLucene (string lucene_query);" />
+      <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Release&gt;</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="title" Type="System.String" /><Parameter Name="artist" Type="System.String" /></Parameters>
+      <Docs><param name="title">The title of a release.</param><param name="artist">The name of an artist.</param><summary>Query for Releases by title and artist name.</summary><returns>An enumerable Query of results.</returns><remarks>
+          <para>Print the IDs of releases entitled "Revival" by the artist "Katchafire":
+<example><code lang="C#">
+foreach (Release r in Release.Query ("Revival", "Katchafire")) {
+    Console.WriteLine (r.Id);
+}
+</code></example></para>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="title" /> or <paramref name="artist" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="QueryFromDevice">
+      <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Release&gt; QueryFromDevice (string device);" />
       <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.Query&lt;MusicBrainz.Release&gt;</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="lucene_query" Type="System.String" />
-      </Parameters>
-      <Docs>
-        <param name="lucene_query">A lucene text query.</param>
-        <summary>Query for Releases by lucene text query.</summary>
-        <returns>An enumerable Query of results.</returns>
-        <remarks>
-          <block subset="none" type="note">
-See http://wiki.musicbrainz.org/TextSearchSyntax
-</block>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Script">
-      <MemberSignature Language="C#" Value="public string Script { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>System.String</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>The script of the Release title and track titles.</summary>
-        <value>An ISO 15924 script code. null if MusicBrainz does not have script data for a given Release.</value>
-        <remarks>
-          <block subset="none" type="note">
-See http://wiki.musicbrainz.org/ReleaseLanguage and http://www.unicode.org/iso15924/iso15924-codes.html
-</block>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Status">
-      <MemberSignature Language="C#" Value="public MusicBrainz.ReleaseStatus Status { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.ReleaseStatus</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>The Status of the Release.</summary>
-        <value>To be added.</value>
-        <remarks>
+      <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Release&gt;</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="device" Type="System.String" /></Parameters>
+      <Docs><param name="device">A path to an optical disc device. On Unix this could be "/dev/cdrom" and on Windows this will be the drive letter for a disc drive, such as "E:\"</param><summary>Query for Releases which matches the disc at the specified device path.</summary><returns>An enumerable Query of results.</returns><remarks>
+          <para>
+            Print the title of a CD in the CD Rom tray:
+            <example><code lang="C#">
+Release r = Release.QueryFromDevice (cd_device); // Where cd_device is something like "/dev/cdrom" or "E:\"
+Console.WriteLine (r.GetTitle ());
+</code></example></para>
           <block subset="none" type="note">
-See http://wiki.musicbrainz.org/ReleaseStatus
+This uses <see cref="M:MusicBrainz.Query&lt;T&gt;.Conversion" /> to implicitly cast the <see cref="T:MusicBrainz.Query&lt;T&gt;" /> to <see cref="T:MusicBrainz.Release" />, returning the first result. Queries got from QueryFromDevice should have at most one result.
 </block>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Tracks">
-      <MemberSignature Language="C#" Value="public System.Collections.Generic.List&lt;MusicBrainz.Track&gt; Tracks { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>System.Collections.Generic.List&lt;MusicBrainz.Track&gt;</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>The list of the Tracks that are included in the Release.</summary>
-        <value>A list of <see cref="T:MusicBrainz.Track" />s. If there are no Tracks, an empty list.</value>
-        <remarks>This property will never be null.</remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="Type">
-      <MemberSignature Language="C#" Value="public MusicBrainz.ReleaseType Type { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.ReleaseType</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>The Type of the Release.</summary>
-        <value>To be added.</value>
-        <remarks>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="device" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception>
+        <exception cref="T:MusicBrainz.LocalDiscException">
+          <para>
+            QueryFromDevice is not supported on the executing system.
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="QueryLucene">
+      <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Release&gt; QueryLucene (string luceneQuery);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Release&gt;</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="luceneQuery" Type="System.String" /></Parameters>
+      <Docs><param name="luceneQuery">A lucene text query.</param><summary>Query for Releases by lucene text query.</summary><returns>An enumerable Query of results.</returns><remarks>
           <block subset="none" type="note">
-See http://wiki.musicbrainz.org/ReleaseType
+See http://wiki.musicbrainz.org/TextSearchSyntax
 </block>
-        </remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="UrlExtension">
-      <MemberSignature Language="C#" Value="protected override string UrlExtension { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue>
-        <ReturnType>System.String</ReturnType>
-      </ReturnValue>
-      <Docs>
-        <summary>To be added.</summary>
-        <value>To be added.</value>
-        <remarks>To be added.</remarks>
-      </Docs>
-    </Member>
-    <Member MemberName="QueryFromDevice">
-      <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Release&gt; QueryFromDevice (string device);" />
-      <MemberType>Method</MemberType>
-      <ReturnValue>
-        <ReturnType>MusicBrainz.Query&lt;MusicBrainz.Release&gt;</ReturnType>
-      </ReturnValue>
-      <Parameters>
-        <Parameter Name="device" Type="System.String" />
-      </Parameters>
-      <Docs>
-        <param name="device">The path to a device, e.g. "/dev/cdrom/" or "E:\"</param>
-        <summary>Query for Releases which match the disc in the specified device.</summary>
-        <returns>An enumerable Query of results.</returns>
-        <remarks>It is almost always the case that only one Release matches a given disc. It is more often the case still that one Release suffices as the result of querying by device. The Query&lt;Release&gt; type can be implicitly converted to a Release, allowing for the very simple syntax of:
-<example><code lang="C#">
-Release r = Release.QueryFromDevice("/dev/cdrom/");
-  </code></example></remarks>
-      </Docs>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="luceneQuery" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
-</Type>
\ No newline at end of file
+</Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseFormat.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseFormat.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseFormat.xml	Sun Aug 17 08:52:21 2008
@@ -8,7 +8,7 @@
     <BaseTypeName>System.Enum</BaseTypeName>
   </Base>
   <Docs>
-    <summary>The format of the release medium.</summary>
+    <summary>The physical format of a released product.</summary>
     <remarks>
       <block subset="none" type="note">
 See http://wiki.musicbrainz.org/ReleaseFormat
@@ -28,77 +28,119 @@
     
     
     
+    
     <Member MemberName="Cartridge">
       <MemberSignature Language="C#" Value="Cartridge" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Cassette">
       <MemberSignature Language="C#" Value="Cassette" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="CD">
       <MemberSignature Language="C#" Value="CD" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="DAT">
       <MemberSignature Language="C#" Value="DAT" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Digital">
       <MemberSignature Language="C#" Value="Digital" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="DualDisc">
       <MemberSignature Language="C#" Value="DualDisc" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="DVD">
       <MemberSignature Language="C#" Value="DVD" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="LaserDisc">
       <MemberSignature Language="C#" Value="LaserDisc" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="MiniDisc">
       <MemberSignature Language="C#" Value="MiniDisc" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="None">
       <MemberSignature Language="C#" Value="None" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
-      <Docs><summary>MusicBrainz does not have Format information.</summary></Docs>
+      <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Other">
       <MemberSignature Language="C#" Value="Other" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="ReelToReel">
       <MemberSignature Language="C#" Value="ReelToReel" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="SACD">
       <MemberSignature Language="C#" Value="SACD" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Vinyl">
       <MemberSignature Language="C#" Value="Vinyl" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseFormat</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
-    
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseQueryParameters.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseQueryParameters.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseQueryParameters.xml	Sun Aug 17 08:52:21 2008
@@ -10,7 +10,18 @@
   <Interfaces />
   <Docs>
     <summary>This class encapsulates the parameters for querying for <see cref="T:MusicBrainz.Release" />s.</summary>
-    <remarks>To be added.</remarks>
+    <remarks>
+      <para>
+Query for promotional releases by Super Furry Animals:
+<example><code lang="C#">
+ReleaseQueryParameters p = new ReleaseQueryParameters ();
+p.Artist = "Super Furry Animals";
+p.ReleaseStatus = ReleaseStatus.Promotion;
+foreach (Release r in Release.Query (p)) {
+     Console.WriteLine (r.GetTitle ());
+}
+</code></example></para>
+    </remarks>
   </Docs>
   <Members>
     
@@ -23,31 +34,49 @@
       <MemberType>Constructor</MemberType>
       <Parameters />
       <Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Asin">
-      <MemberSignature Language="C#" Value="public string Asin { set; get; };" />
+      <MemberSignature Language="C#" Value="public string Asin { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The ASIN of the release.</summary><value>An Amazon Standard Identification Number</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The ASIN of the release.</summary><value>An Amazon Standard Identification Number.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Date">
-      <MemberSignature Language="C#" Value="public string Date { set; get; };" />
+      <MemberSignature Language="C#" Value="public string Date { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The earliest date of release.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="DiscID">
-      <MemberSignature Language="C#" Value="public string DiscID { set; get; };" />
+      <Docs><summary>The earliest date of release.</summary><value>A string of the date in any of the following forms: "YYYY", "YYYY-MM", "YYYY-MM-DD".</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="DiscId">
+      <MemberSignature Language="C#" Value="public string DiscId { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The <see cref="M:MusicBrainz.Disc.ID" /> of one of the release's Discs.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The <see cref="M:MusicBrainz.Disc.ID" /> of one of the release's Discs.</summary><value>A string of the disc ID.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Language">
-      <MemberSignature Language="C#" Value="public string Language { set; get; };" />
+      <MemberSignature Language="C#" Value="public string Language { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The language of the release.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The language of the release.</summary><value>An ISO 639 language code.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Script">
-      <MemberSignature Language="C#" Value="public string Script { set; get; };" />
+      <MemberSignature Language="C#" Value="public string Script { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The script of the release.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The script of the release.</summary><value>An ISO 15924 script code.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseStatus.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseStatus.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseStatus.xml	Sun Aug 17 08:52:21 2008
@@ -25,26 +25,41 @@
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseStatus</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="None">
       <MemberSignature Language="C#" Value="None" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseStatus</ReturnType></ReturnValue>
-      <Docs><summary>MusicBrainz does not have a Status for the Release.</summary></Docs>
+      <Docs><summary>MusicBrainz does not have a status for the Release.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Official">
       <MemberSignature Language="C#" Value="Official" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseStatus</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Promotion">
       <MemberSignature Language="C#" Value="Promotion" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseStatus</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="PsudoRelease">
       <MemberSignature Language="C#" Value="PsudoRelease" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseStatus</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseType.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseType.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/ReleaseType.xml	Sun Aug 17 08:52:21 2008
@@ -32,61 +32,97 @@
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Audiobook">
       <MemberSignature Language="C#" Value="Audiobook" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Compilation">
       <MemberSignature Language="C#" Value="Compilation" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="EP">
       <MemberSignature Language="C#" Value="EP" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Interview">
       <MemberSignature Language="C#" Value="Interview" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Live">
       <MemberSignature Language="C#" Value="Live" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="None">
       <MemberSignature Language="C#" Value="None" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
-      <Docs><summary>MusicBrainz does not have a Type for the Release.</summary></Docs>
+      <Docs><summary>MusicBrainz does not have a type for the Release.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Other">
       <MemberSignature Language="C#" Value="Other" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Remix">
       <MemberSignature Language="C#" Value="Remix" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Single">
       <MemberSignature Language="C#" Value="Single" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Soundtrack">
       <MemberSignature Language="C#" Value="Soundtrack" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Spokenword">
       <MemberSignature Language="C#" Value="Spokenword" />
       <MemberType>Field</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.ReleaseType</ReturnType></ReturnValue>
       <Docs><summary>To be added.</summary></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/Track.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/Track.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/Track.xml	Sun Aug 17 08:52:21 2008
@@ -9,8 +9,15 @@
   </Base>
   <Interfaces />
   <Docs>
-    <summary>The Track class encapsulates the MusicBrainz Track resource.</summary>
+    <summary>Encapsulates the MusicBrainz Track resource.</summary>
     <remarks>
+      <para>
+Print the artists who have covered "Money (That's What I Want)":
+<example><code lang="C#">
+foreach (Track t in Track.Query ("Money (That's What I Want)").Best ()) {
+	Console.WriteLine ("{0}", t.GetArtist ().GetName ());
+}
+</code></example></para>
       <block subset="none" type="note">
 See http://wiki.musicbrainz.org/Track
 </block>
@@ -27,122 +34,224 @@
     
     
     
-    
-    
-    
-    
-    
-    <Member MemberName="Duration">
-      <MemberSignature Language="C#" Value="public uint Duration { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.UInt32</ReturnType></ReturnValue>
-      <Docs><summary>The length of the track.</summary><value>The length, in milliseconds of the track.</value><remarks>To be added.</remarks></Docs>
-    </Member><Member MemberName="Get">
-      <MemberSignature Language="C#" Value="public static MusicBrainz.Track Get (string mbid);" />
+    <Member MemberName="Get">
+      <MemberSignature Language="C#" Value="public static MusicBrainz.Track Get (string id);" />
       <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.Track</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="mbid" Type="System.String" /></Parameters>
-      <Docs><param name="mbid">To be added.</param><summary>Retrieve a Track by universal identifier.</summary><returns>The Track with the specified MBID.</returns><remarks>
+      <Parameters><Parameter Name="id" Type="System.String" /></Parameters>
+      <Docs><param name="id">The MusicBrainz ID of the desired track.</param><summary>Retrieve a Track by universal ID.</summary><returns>The track with the specified ID.</returns><remarks>
+          <para>Get the title track from the album "Bananaphone" by Raffi:
+<example><code lang="C#">
+Track t = Track.Get ("1dfcdad5-8c9f-442c-9e94-6e724e7fc833");
+</code></example></para>
           <block subset="none" type="note">
 See http://wiki.musicbrainz.org/TrackID
 </block>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="id" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception><exception cref="T:MusicBrainz.MusicBrainzInvalidParameterException">
+          <para>
+            <paramref name="id" /> is not a valid MusicBrainz ID.
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetDuration">
+      <MemberSignature Language="C#" Value="public uint GetDuration ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.UInt32</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns the length of the track.</summary><returns>The length of the track in milliseconds.</returns><remarks>
+          <para>
+If the duration has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetPuids">
+      <MemberSignature Language="C#" Value="public System.Collections.ObjectModel.ReadOnlyCollection&lt;string&gt; GetPuids ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;System.String&gt;</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns a collection of the Track's PUIDs.</summary><returns>A read-only collection of PUID strings. If there are no PUIDs, an empty collection.</returns><remarks>
+          <para>
+If the PUIDs have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+          <para>
+This property will never be null.</para>
+          <block subset="none" type="note">
+See http://wiki.musicbrainz.org/PUID
+</block>
         </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="GetReleases">
+      <MemberSignature Language="C#" Value="public System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Release&gt; GetReleases ();" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;MusicBrainz.Release&gt;</ReturnType></ReturnValue>
+      <Parameters />
+      <Docs><summary>Returns a collection of <see cref="T:MusicBrainz.Release" />s on which the track appears.</summary><returns>A read-only collection of <see cref="T:MusicBrainz.Release" />s. If there are no releases, an empty collection.</returns><remarks>
+          <para>
+If the releases have not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+          <para>
+This property will never be null.</para>
+        </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="GetTrackNumber">
       <MemberSignature Language="C#" Value="public int GetTrackNumber (MusicBrainz.Release release);" />
       <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>System.Int32</ReturnType></ReturnValue>
       <Parameters><Parameter Name="release" Type="MusicBrainz.Release" /></Parameters>
-      <Docs><param name="release">A Release on which the Track appears.</param><summary>Get the track number of the Track as it appears on a given Release</summary><returns>The track-number of the Track on the given Release. -1 if the Track does not appear on the Release or if MusicBrainz does not have track-number data for the Release.</returns><remarks>To be added.</remarks></Docs>
+      <Docs><param name="release">A release on which the track is featured.</param><summary>Returns the number of the Track on the specified Release.</summary><returns>The 1-based number of the track on the given release. -1 if the track is not featured on the given release.</returns><remarks>
+          <para>
+If a track number has not previously been retrieved, this method call may incure a request to the MusicBrainz server which can take upwards of a second. It is for this reason that this member is not a property.
+</para>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="release" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="op_Implicit">
-      <MemberSignature Language="C#" Value="public static string op_Implicit (MusicBrainz.Track t);" />
+      <MemberSignature Language="C#" Value="public static string op_Implicit (MusicBrainz.Track track);" />
       <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="t" Type="MusicBrainz.Track" /></Parameters>
-      <Docs><param name="t">To be added.</param><summary>This operator is provided for the benefit of LINQ syntax. See remarks for details.</summary><returns>t.ToString()</returns><remarks>
+      <Parameters><Parameter Name="track" Type="MusicBrainz.Track" /></Parameters>
+      <Docs><param name="track">The Track.</param><summary>This operator is provided for the benefit of LINQ syntax. See remarks for details.</summary><returns>track.ToString ();</returns><remarks>
           <para>The purpose of providing this operator is to allow for the following LINQ syntax:
 <example><code lang="C#">
 var q = from t in MB.Tracks
          where t == "Somewhere Over the Rainbow"
          select t;
-  </code></example></para>
+</code></example></para>
           <para>
 This syntax is beneficial for the following reason: LINQ queries are translated into Lucene queries and executed using the <see cref="M:MusicBrainz.Track.QueryLucene" /> method. Given the following LINQ query:
 <example><code lang="C#">
 var q = from t in MB.Tracks
-         where t.Title == "Somewhere Over the Rainbow"
+         where t.GetTitle () == "Somewhere Over the Rainbow"
          select t;
-  </code></example></para>
+</code></example></para>
           <para>
 the LINQ provider will make the following call:
 <example><code lang="C#">
-Track.QueryLucene(@"release:""Somewhere Over the Rainbow""");
-  </code></example></para>
+Track.QueryLucene (@"release:""Somewhere Over the Rainbow""");
+</code></example></para>
           <para>
 However, given the first query mentioned above, the LINQ provider will make this call:
 <example><code lang="C#">
-Track.QueryLucene("Somewhere Over the Rainbow");
-  </code></example></para>
+Track.QueryLucene ("Somewhere Over the Rainbow");
+</code></example></para>
           <para>
-These two queries ARE NOT substantively different, but the syntax is provided to remain consistant with <see cref="M:MusicBrainz.Artist.Conversion" />. See http://wiki.musicbrainz.org/TextSearchSyntax for more information.
+These two queries are NOT substantively different, but the syntax is provided to remain consistant with <see cref="M:MusicBrainz.Artist.Conversion" />. See http://wiki.musicbrainz.org/TextSearchSyntax for more information.
 </para>
         </remarks></Docs>
-    </Member><Member MemberName="Puids">
-      <MemberSignature Language="C#" Value="public System.Collections.Generic.List&lt;string&gt; Puids { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Collections.Generic.List&lt;System.String&gt;</ReturnType></ReturnValue>
-      <Docs><summary>A list of the PUID's by which the track can be identified.</summary><value>A List of PUID strings. If no PUIDs are availible, an empty list.</value><remarks>This property will never be null.
-<block subset="none" type="note">
-See http://wiki.musicbrainz.org/PUID
-</block></remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Query">
       <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Track&gt; Query (MusicBrainz.TrackQueryParameters parameters);" />
       <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Track&gt;</ReturnType></ReturnValue>
       <Parameters><Parameter Name="parameters" Type="MusicBrainz.TrackQueryParameters" /></Parameters>
-      <Docs><param name="parameters">The parameters of the query.</param><summary>Query for Tracks parameterically.</summary><returns>An enumerable Query of results.</returns><remarks>To be added.</remarks></Docs>
+      <Docs><param name="parameters">The parameters of the query.</param><summary>Query for Tracks parametrically.</summary><returns>An enumerable Query of results.</returns><remarks>
+          <para>
+Query for "Mr. Brightside" on the release "Sawdust":
+<example><code lang="C#">
+TrackQueryParameters p = new TrackQueryParameters ();
+p.Title = "Mr. Brightside";
+p.Release = "Sawdust";
+Query&lt;Track&gt; q = Track.Query (p);
+Console.WriteLine (q.First ().Id);
+</code></example></para>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="parameters" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Query">
       <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Track&gt; Query (string title);" />
       <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Track&gt;</ReturnType></ReturnValue>
       <Parameters><Parameter Name="title" Type="System.String" /></Parameters>
-      <Docs><param name="title">The title of a track.</param><summary>Query for Tracks by title.</summary><returns>An enumerable Query of results.</returns><remarks>This overload is shorthand for:
+      <Docs><param name="title">The title of a track.</param><summary>Query for tracks by title.</summary><returns>An enumerable Query of results.</returns><remarks>
+          <para>
+Search for "Harder, Better, Faster, Stronger" and print the artist's name:
 <example><code lang="C#">
-TrackQueryParameters p = new TrackQueryParameters();
-p.Title = "title";
-Track.Query(p);
-  </code></example></remarks></Docs>
+Track t = Track.Query ("Harder, Better, Faster, Stronger");
+Console.WriteLine (t.GetArtist ().GetName ()); 
+</code></example></para>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="title" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Query">
       <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Track&gt; Query (string title, string artist);" />
       <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Track&gt;</ReturnType></ReturnValue>
       <Parameters><Parameter Name="title" Type="System.String" /><Parameter Name="artist" Type="System.String" /></Parameters>
-      <Docs><param name="title">The title of a track.</param><param name="artist">The name of a track's artist.</param><summary>Query for Tracks by title and artist.</summary><returns>An enumerable Query of results.</returns><remarks>This override is shorthand for:
+      <Docs><param name="title">The title of a track.</param><param name="artist">The name of an artist.</param><summary>Query for track by title and artist name.</summary><returns>An enumerable Query of results.</returns><remarks>Search for "Mr. Brightside" by The Killers and print the first release title:
+<example><code lang="C#">
+Track t = Track.Query ("Mr. Brightside", "The Killers");
+Console.WriteLine (t.GetReleases ()[0].GetTitle ());
+</code></example></remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="title" /> or <paramref name="artist" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Query">
+      <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Track&gt; Query (string title, string artist, string release);" />
+      <MemberType>Method</MemberType>
+      <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Track&gt;</ReturnType></ReturnValue>
+      <Parameters><Parameter Name="title" Type="System.String" /><Parameter Name="artist" Type="System.String" /><Parameter Name="release" Type="System.String" /></Parameters>
+      <Docs><param name="title">The title of a track.</param><param name="artist">The name of an artist.</param><param name="release">The title of a release.</param><summary>Query for tracks by track title, artist name, and release title.</summary><returns>An enumerable Query of results.</returns><remarks>Search for "Mr. Brightside" by The Killers from "Sawdust" and print the full title:
 <example><code lang="C#">
-TrackQueryParameters p = new TrackQueryParameters();
-p.Title = "title";
-p.Artist = "artist";
-Track.Query(p);
-  </code></example></remarks></Docs>
+Track t = Track.Query ("Mr. Brightside", "The Killers", "Sawdust");
+Console.WriteLine (t.GetTitle ());
+</code></example></remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="title" />, <paramref name="artist" />, or <paramref name="release" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="QueryLucene">
-      <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Track&gt; QueryLucene (string lucene_query);" />
+      <MemberSignature Language="C#" Value="public static MusicBrainz.Query&lt;MusicBrainz.Track&gt; QueryLucene (string luceneQuery);" />
       <MemberType>Method</MemberType>
       <ReturnValue><ReturnType>MusicBrainz.Query&lt;MusicBrainz.Track&gt;</ReturnType></ReturnValue>
-      <Parameters><Parameter Name="lucene_query" Type="System.String" /></Parameters>
-      <Docs><param name="lucene_query">A lucene text query.</param><summary>Query for Tracks by lucene text query.</summary><returns>An enumerable Query of results.</returns><remarks>
+      <Parameters><Parameter Name="luceneQuery" Type="System.String" /></Parameters>
+      <Docs><param name="luceneQuery">A lucene text query.</param><summary>Query for Tracks by lucene text query.</summary><returns>An enumerable Query of results.</returns><remarks>
           <block subset="none" type="note">
 See http://wiki.musicbrainz.org/TextSearchSyntax
 </block>
-        </remarks></Docs>
-    </Member><Member MemberName="Releases">
-      <MemberSignature Language="C#" Value="public System.Collections.Generic.List&lt;MusicBrainz.Release&gt; Releases { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.Collections.Generic.List&lt;MusicBrainz.Release&gt;</ReturnType></ReturnValue>
-      <Docs><summary>A list of Releases on which the Track appears.</summary><value>A List of <see cref="T:MusicBrainz.Release" />s on which the Track appears. If no Releases are availible, an empty list.</value><remarks>This property will never be null.</remarks></Docs>
-    </Member><Member MemberName="UrlExtension">
-      <MemberSignature Language="C#" Value="protected override string UrlExtension { get; };" />
-      <MemberType>Property</MemberType>
-      <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>To be added.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+        </remarks><exception cref="T:System.ArgumentNullException">
+          <para>
+            <paramref name="luceneQuery" /> is a null reference (Nothing in Visual Basic).
+          </para>
+        </exception></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/TrackQueryParameters.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/TrackQueryParameters.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/TrackQueryParameters.xml	Sun Aug 17 08:52:21 2008
@@ -11,16 +11,16 @@
   <Docs>
     <summary>This class encapsulates the parameters for querying for <see cref="T:MusicBrainz.Track" />s.</summary>
     <remarks>
-      <example>
-        <code lang="C#">
-TrackQueryParameters p = new TrackQueryParameters();
-p.Artist = "Styx";
-p.TrackNumber = 1;
-foreach(Track t in Tracks.Query(p))
-    Console.WriteLine(t.Title);
-  </code>
-      </example>
-This will print the title of every track which has appeared as the first song on a Styx release.</remarks>
+      <para>
+Query for "Mr. Brightside" on the release "Sawdust":
+<example><code lang="C#">
+TrackQueryParameters p = new TrackQueryParameters ();
+p.Title = "Mr. Brightside";
+p.Release = "Sawdust";
+Query&lt;Track&gt; q = Track.Query (p);
+Console.WriteLine (q.First ().Id);
+</code></example></para>
+    </remarks>
   </Docs>
   <Members>
     
@@ -33,35 +33,53 @@
       <MemberType>Constructor</MemberType>
       <Parameters />
       <Docs><summary>To be added.</summary><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Duration">
-      <MemberSignature Language="C#" Value="public Nullable&lt;uint&gt; Duration { set; get; };" />
+      <MemberSignature Language="C#" Value="public Nullable&lt;uint&gt; Duration { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.Nullable&lt;System.UInt32&gt;</ReturnType></ReturnValue>
-      <Docs><summary>The duration in milleseconds of the track.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The duration in milleseconds of the track.</summary><value>The duration in milleseconds of the track or null if you do not want to query for a duration.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Puid">
-      <MemberSignature Language="C#" Value="public string Puid { set; get; };" />
+      <MemberSignature Language="C#" Value="public string Puid { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>One of the <see cref="M:MusicBrainz.Track.Puids" /> of the track.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>One of the PUIDs of the track.</summary><value>A string of a PUID.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="Release">
-      <MemberSignature Language="C#" Value="public string Release { set; get; };" />
+      <MemberSignature Language="C#" Value="public string Release { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The title of a release on which the track appears.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The title of a release on which the track appears.</summary><value>The title of a release.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="ReleaseId">
-      <MemberSignature Language="C#" Value="public string ReleaseId { set; get; };" />
+      <MemberSignature Language="C#" Value="public string ReleaseId { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.String</ReturnType></ReturnValue>
-      <Docs><summary>The universal identifier of a release on which the track appears.</summary><value>To be added.</value><remarks>
+      <Docs><summary>The universal identifier of a release on which the track appears.</summary><value>The universal ID of a release.</value><remarks>
           <block subset="none" type="note">
 See http://wiki.musicbrainz.org/ReleaseID
 </block>
         </remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member><Member MemberName="TrackNumber">
-      <MemberSignature Language="C#" Value="public Nullable&lt;int&gt; TrackNumber { set; get; };" />
+      <MemberSignature Language="C#" Value="public Nullable&lt;int&gt; TrackNumber { set; get; }" />
       <MemberType>Property</MemberType>
       <ReturnValue><ReturnType>System.Nullable&lt;System.Int32&gt;</ReturnType></ReturnValue>
-      <Docs><summary>The track number of the track as it appears on one of its releases.</summary><value>To be added.</value><remarks>To be added.</remarks></Docs>
+      <Docs><summary>The track number of the track as it appears on one of its releases.</summary><value>A track number or null if you do not want to query by track number.</value><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
     </Member>
   </Members>
 </Type>

Modified: trunk/musicbrainz-sharp/docs/en/MusicBrainz/UrlRelation.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/MusicBrainz/UrlRelation.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/UrlRelation.xml	Sun Aug 17 08:52:21 2008
@@ -1,17 +1,25 @@
 <Type Name="UrlRelation" FullName="MusicBrainz.UrlRelation">
-  <TypeSignature Language="C#" Value="public sealed class UrlRelation : MusicBrainz.RelationPrimative&lt;string&gt;" />
+  <TypeSignature Language="C#" Value="public sealed class UrlRelation : MusicBrainz.RelationBase&lt;Uri&gt;" />
   <AssemblyInfo>
     <AssemblyName>MusicBrainz</AssemblyName>
     <AssemblyVersion>0.0.0.0</AssemblyVersion>
   </AssemblyInfo>
   <Base>
-    <BaseTypeName>MusicBrainz.RelationPrimative&lt;System.String&gt;</BaseTypeName>
+    <BaseTypeName>MusicBrainz.RelationBase&lt;System.Uri&gt;</BaseTypeName>
     
-  <BaseTypeArguments><BaseTypeArgument TypeParamName="T">System.String</BaseTypeArgument></BaseTypeArguments></Base>
+  <BaseTypeArguments><BaseTypeArgument TypeParamName="T">System.Uri</BaseTypeArgument></BaseTypeArguments></Base>
   <Interfaces />
   <Docs>
-    <summary>A UrlRelation describes a relationship to a URL.</summary>
+    <summary>Describes a relationship to a URL.</summary>
     <remarks>
+      <para>
+List the URLs associated with The Beatles:
+<example><code lang="C#">
+Artist a = Artist.Query ("The Beatles");
+foreach (UrlRelation u in a.GetUrlRelations ()) {
+    Console.WriteLine (u.Target.AbsoluteUri);
+}
+</code></example></para>
       <block subset="none" type="note">
   See http://wiki.musicbrainz.org/ArtistUrlRelationship, http://wiki.musicbrainz.org/ReleaseUrlRelationship, http://wiki.musicbrainz.org/TrackUrlRelationship, and http://wiki.musicbrainz.org/LabelUrlRelationship
 </block>

Added: trunk/musicbrainz-sharp/docs/en/MusicBrainz/XmlRequestEventArgs.xml
==============================================================================
--- (empty file)
+++ trunk/musicbrainz-sharp/docs/en/MusicBrainz/XmlRequestEventArgs.xml	Sun Aug 17 08:52:21 2008
@@ -0,0 +1,35 @@
+<Type Name="XmlRequestEventArgs" FullName="MusicBrainz.XmlRequestEventArgs">
+  <TypeSignature Language="C#" Value="public sealed class XmlRequestEventArgs : EventArgs" />
+  <AssemblyInfo>
+    <AssemblyName>MusicBrainz</AssemblyName>
+    <AssemblyVersion>0.0.0.0</AssemblyVersion>
+  </AssemblyInfo>
+  <Base>
+    <BaseTypeName>System.EventArgs</BaseTypeName>
+  </Base>
+  <Interfaces />
+  <Docs>
+    <summary>The arguments passed with the <see cref="M:MusicBrainz.MusicBrainzService.XmlRequest" /> event.</summary>
+    <remarks>To be added.</remarks>
+  </Docs>
+  <Members>
+    
+    <Member MemberName="FromCache">
+      <MemberSignature Language="C#" Value="public readonly bool FromCache;" />
+      <MemberType>Field</MemberType>
+      <ReturnValue><ReturnType>System.Boolean</ReturnType></ReturnValue>
+      <Docs><summary>Whether the requested XML was returned from the local cache.</summary><remarks>You can specify the caching behavior with <see cref="M:MusicBrainz.MusicBrainzService.CachePolicy" />.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member><Member MemberName="Uri">
+      <MemberSignature Language="C#" Value="public readonly Uri Uri;" />
+      <MemberType>Field</MemberType>
+      <ReturnValue><ReturnType>System.Uri</ReturnType></ReturnValue>
+      <Docs><summary>The URI of the XML request.</summary><remarks>To be added.</remarks></Docs>
+      <AssemblyInfo>
+        <AssemblyVersion>0.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+    </Member>
+  </Members>
+</Type>

Modified: trunk/musicbrainz-sharp/docs/en/index.xml
==============================================================================
--- trunk/musicbrainz-sharp/docs/en/index.xml	(original)
+++ trunk/musicbrainz-sharp/docs/en/index.xml	Sun Aug 17 08:52:21 2008
@@ -12,33 +12,37 @@
   <Copyright>To be added.</Copyright>
   <Types>
     <Namespace Name="MusicBrainz">
-      <Type Name="Artist" />
-      <Type Name="ArtistReleaseType" />
-      <Type Name="ArtistType" />
-      <Type Name="Disc" />
-      <Type Name="Event" />
-      <Type Name="ItemQueryParameters" />
-      <Type Name="Label" />
-      <Type Name="LabelType" />
-      <Type Name="MusicBrainzEntity" />
-      <Type Name="MusicBrainzInvalidParameterException" />
-      <Type Name="MusicBrainzItem" />
-      <Type Name="MusicBrainzNotFoundException" />
-      <Type Name="MusicBrainzObject" />
-      <Type Name="MusicBrainzUnauthorizedException" />
-      <Type Name="Query`1" DisplayName="Query&lt;T&gt;" />
-      <Type Name="Relation`1" DisplayName="Relation&lt;T&gt;" />
-      <Type Name="RelationDirection" />
-      <Type Name="RelationPrimative`1" DisplayName="RelationPrimative&lt;T&gt;" />
-      <Type Name="Release" />
-      <Type Name="ReleaseFormat" />
-      <Type Name="ReleaseQueryParameters" />
-      <Type Name="ReleaseStatus" />
-      <Type Name="ReleaseType" />
-      <Type Name="Track" />
-      <Type Name="TrackQueryParameters" />
-      <Type Name="UrlRelation" />
-      <Type Name="XmlRequestHandler" />
+      <Type Name="Artist" Kind="Class" />
+      <Type Name="ArtistReleaseType" Kind="Class" />
+      <Type Name="ArtistType" Kind="Enumeration" />
+      <Type Name="Disc" Kind="Class" />
+      <Type Name="Event" Kind="Class" />
+      <Type Name="ItemQueryParameters" Kind="Class" />
+      <Type Name="Label" Kind="Class" />
+      <Type Name="LabelType" Kind="Enumeration" />
+      <Type Name="LocalDisc" Kind="Class" />
+      <Type Name="LocalDiscException" Kind="Class" />
+      <Type Name="MusicBrainzEntity" Kind="Class" />
+      <Type Name="MusicBrainzInvalidParameterException" Kind="Class" />
+      <Type Name="MusicBrainzItem" Kind="Class" />
+      <Type Name="MusicBrainzNotFoundException" Kind="Class" />
+      <Type Name="MusicBrainzObject" Kind="Class" />
+      <Type Name="MusicBrainzService" Kind="Class" />
+      <Type Name="MusicBrainzUnauthorizedException" Kind="Class" />
+      <Type Name="Query`1" DisplayName="Query&lt;T&gt;" Kind="Class" />
+      <Type Name="Relation`1" DisplayName="Relation&lt;T&gt;" Kind="Class" />
+      <Type Name="RelationBase`1" DisplayName="RelationBase&lt;T&gt;" Kind="Class" />
+      <Type Name="RelationDirection" Kind="Enumeration" />
+      <Type Name="Release" Kind="Class" />
+      <Type Name="ReleaseArtistType" Kind="Enumeration" />
+      <Type Name="ReleaseFormat" Kind="Enumeration" />
+      <Type Name="ReleaseQueryParameters" Kind="Class" />
+      <Type Name="ReleaseStatus" Kind="Enumeration" />
+      <Type Name="ReleaseType" Kind="Enumeration" />
+      <Type Name="Track" Kind="Class" />
+      <Type Name="TrackQueryParameters" Kind="Class" />
+      <Type Name="UrlRelation" Kind="Class" />
+      <Type Name="XmlRequestEventArgs" Kind="Class" />
     </Namespace>
   </Types>
   <Title>MusicBrainz</Title>

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Artist.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Artist.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Artist.cs	Sun Aug 17 08:52:21 2008
@@ -43,16 +43,16 @@
         
         #region Constructors
 
-        Artist (string mbid) : base (mbid, null)
+        Artist (string id) : base (id, null)
         {
         }
 
-        Artist (string mbid, string parameters) : base (mbid, parameters)
+        Artist (string id, string parameters) : base (id, parameters)
         {
         }
 
-        Artist (string mbid, ArtistReleaseType artist_release_type)
-            : this (mbid, "&inc=" + artist_release_type.ToString ())
+        Artist (string id, ArtistReleaseType artist_release_type)
+            : this (id, "&inc=" + artist_release_type.ToString ())
         {
             have_all_releases = true;
             this.artist_release_type = artist_release_type;
@@ -66,24 +66,24 @@
         
         #region Protected
         
-        protected override string UrlExtension {
+        internal override string UrlExtension {
             get { return EXTENSION; }
         }
 
-        protected override void CreateIncCore (StringBuilder builder)
+        internal override void CreateIncCore (StringBuilder builder)
         {
             AppendIncParameters (builder, artist_release_type.ToString ());
             base.CreateIncCore (builder);
         }
 
-        protected override void LoadMissingDataCore ()
+        internal override void LoadMissingDataCore ()
         {
             Artist artist = new Artist (Id, CreateInc ());
             type = artist.GetArtistType ();
             base.LoadMissingDataCore (artist);
         }
 
-        protected override bool ProcessAttributes (XmlReader reader)
+        internal override bool ProcessAttributes (XmlReader reader)
         {
             switch (reader ["type"]) {
             case "Group":
@@ -96,7 +96,7 @@
             return type != ArtistType.Unknown;
         }
 
-        protected override bool ProcessXml (XmlReader reader)
+        internal override bool ProcessXml (XmlReader reader)
         {
             reader.Read ();
             bool result = base.ProcessXml (reader);
@@ -125,18 +125,19 @@
 
         #region Public
         
-        [ThreadStatic]
-        private static ArtistReleaseType default_artist_release_type;
+        static readonly object default_artist_release_type_mutex = new object ();
+        static ArtistReleaseType default_artist_release_type = new ArtistReleaseType (ReleaseStatus.Official, ReleaseArtistType.SingleArtist);
         public static ArtistReleaseType DefaultArtistReleaseType {
             get {
-                if (default_artist_release_type == null) {
-                    default_artist_release_type = new ArtistReleaseType (ReleaseStatus.Official, false);
+                lock (default_artist_release_type_mutex) {
+                    return default_artist_release_type;
                 }
-                return default_artist_release_type;
             }
             set {
                 if (value == null) throw new ArgumentNullException ("value");
-                default_artist_release_type = value; 
+                lock (default_artist_release_type_mutex) {
+                    default_artist_release_type = value;
+                }
             }
         }
         
@@ -171,25 +172,24 @@
         
         public ReadOnlyCollection<Release> GetReleases ()
         {
-            return GetReleases (artist_release_type);
+            return releases ?? (have_all_releases
+                ? releases = new ReadOnlyCollection<Release> (new Release [0])
+                : new Artist (Id, ArtistReleaseType).GetReleases ());
         }
 
         public ReadOnlyCollection<Release> GetReleases (ArtistReleaseType artistReleaseType)
         {
-            ArtistReleaseType = artistReleaseType;
-            return releases ?? (have_all_releases
-                ? releases = new ReadOnlyCollection<Release> (new Release [0])
-                : new Artist (Id, artistReleaseType).GetReleases ());
+            return new Artist (Id, artistReleaseType).GetReleases ();
         }
 
         #endregion
         
         #region Static
 
-        public static Artist Get (string mbid)
+        public static Artist Get (string id)
         {
-            if (mbid == null) throw new ArgumentNullException ("mbid");
-            return new Artist (mbid);
+            if (id == null) throw new ArgumentNullException ("id");
+            return new Artist (id);
         }
 
         public static Query<Artist> Query (string name)
@@ -222,37 +222,43 @@
         Person
     }
     
+    public enum ReleaseArtistType
+    {
+        VariousArtists,
+        SingleArtist
+    }
+    
     public sealed class ArtistReleaseType
     {
         string str;
 
-        public ArtistReleaseType (ReleaseType type, bool various) : this ((Enum)type, various)
+        public ArtistReleaseType (ReleaseType type, ReleaseArtistType artistType) : this ((Enum)type, artistType)
         {
         }
 
-        public ArtistReleaseType (ReleaseStatus status, bool various) : this ((Enum)status, various)
+        public ArtistReleaseType (ReleaseStatus status, ReleaseArtistType artistType) : this ((Enum)status, artistType)
         {
         }
         
-        public ArtistReleaseType (ReleaseType type, ReleaseStatus status, bool various)
+        public ArtistReleaseType (ReleaseType type, ReleaseStatus status, ReleaseArtistType artistType)
         {
             StringBuilder builder = new StringBuilder ();
-            Format (builder, type, various);
+            Format (builder, type, artistType);
             builder.Append ('+');
-            Format (builder, status, various);
+            Format (builder, status, artistType);
             str = builder.ToString ();
         }
 
-        ArtistReleaseType (Enum enumeration, bool various)
+        ArtistReleaseType (Enum enumeration, ReleaseArtistType artistType)
         {
             StringBuilder builder = new StringBuilder ();
-            Format (builder, enumeration, various);
+            Format (builder, enumeration, artistType);
             str = builder.ToString ();
         }
         
-        static void Format (StringBuilder builder, Enum enumeration, bool various)
+        static void Format (StringBuilder builder, Enum enumeration, ReleaseArtistType artistType)
         {
-            builder.Append (various ? "va-" : "sa-");
+            builder.Append (artistType == ReleaseArtistType.VariousArtists ? "va-" : "sa-");
             Utils.EnumToString (builder, enumeration.ToString ());
         }
 

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Label.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Label.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Label.cs	Sun Aug 17 08:52:21 2008
@@ -39,11 +39,11 @@
         
         #region Constructors
 
-        Label (string mbid) : base (mbid, null)
+        Label (string id) : base (id, null)
         {
         }
 
-        Label (string mbid, string parameters) : base (mbid, parameters)
+        Label (string id, string parameters) : base (id, parameters)
         {
         }
 
@@ -55,24 +55,25 @@
         
         #region Protected
         
-        protected override string UrlExtension {
+        internal override string UrlExtension {
             get { return EXTENSION; }
         }
 
-        protected override void LoadMissingDataCore ()
+        internal override void LoadMissingDataCore ()
         {
             Label label = new Label (Id, CreateInc ());
             type = label.GetLabelType ();
+            country = label.GetCountry ();
             base.LoadMissingDataCore (label);
         }
 
-        protected override bool ProcessAttributes (XmlReader reader)
+        internal override bool ProcessAttributes (XmlReader reader)
         {
             type = Utils.StringToEnum<LabelType> (reader ["type"]);
             return this.type != null;
         }
 
-        protected override bool ProcessXml (XmlReader reader)
+        internal override bool ProcessXml (XmlReader reader)
         {
             reader.Read ();
             bool result = base.ProcessXml (reader);
@@ -80,8 +81,9 @@
                 if (reader.Name == "country") {
                     result = true;
                     reader.Read ();
-                    if (reader.NodeType == XmlNodeType.Text)
+                    if (reader.NodeType == XmlNodeType.Text){
                         country = reader.ReadContentAsString ();
+                    }
                 } else reader.Skip (); // FIXME this is a workaround for Mono bug 334752
             }
             reader.Close ();
@@ -106,10 +108,10 @@
         
         #region Static
 
-        public static Label Get (string mbid)
+        public static Label Get (string id)
         {
-            if (mbid == null) throw new ArgumentNullException ("mbid");
-            return new Label (mbid);
+            if (id == null) throw new ArgumentNullException ("id");
+            return new Label (id);
         }
 
         public static Query<Label> Query (string name)

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/LocalDisc.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/LocalDisc.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/LocalDisc.cs	Sun Aug 17 08:52:21 2008
@@ -28,38 +28,37 @@
 {
     public abstract class LocalDisc : Disc
     {
-        [ThreadStatic]
-        private static string submission_service_url;
-        public static string SubmissionServiceUrl {
+        static readonly object submission_service_url_mutex = new object ();
+        static Uri submission_service_url = new Uri("http://mm.musicbrainz.org/bare/cdlookup.html";);
+        public static Uri SubmissionServiceUrl {
             get {
-                if (submission_service_url == null) {
-                    submission_service_url = "http://mm.musicbrainz.org/bare/cdlookup.html";;
+                lock (submission_service_url_mutex) {
+                    return submission_service_url;
                 }
-                return submission_service_url;
             }
             set {
                 if (value == null) throw new ArgumentNullException ("value");
-                submission_service_url = value;
+                lock (submission_service_url_mutex) {
+                    submission_service_url = value;
+                }
             }
         }
         
-        protected byte first_track;
-        protected byte last_track;
-        protected int [] track_offsets = new int [100];
-        int [] track_durations;
+        internal byte first_track;
+        internal byte last_track;
+        internal int [] track_offsets = new int [100];
+        TimeSpan [] track_durations;
         
         internal LocalDisc()
         {
         }
         
-        protected void Init ()
+        internal void Init ()
         {
-            track_durations = new int [last_track];
+            track_durations = new TimeSpan [last_track];
             for (int i = 1; i <= last_track; i++) {
-                track_durations [i - 1] = i < last_track
-                    ? track_offsets [i + 1] - track_offsets [i]
-                    : track_offsets [0] - track_offsets [i];
-                track_durations [i - 1] /= 75; // 75 frames in a second
+                track_durations [i - 1] = TimeSpan.FromSeconds (
+                    ((i < last_track ? track_offsets [i + 1] : track_offsets [0]) - track_offsets [i]) / 75); // 75 frames in a second
             }
             GenerateId ();
         }
@@ -88,20 +87,20 @@
             Id = hash_builder.ToString ();
         }
         
-        public int [] GetTrackDurations ()
+        public TimeSpan [] GetTrackDurations ()
         {
-            return (int []) track_durations.Clone ();
+            return (TimeSpan []) track_durations.Clone ();
         }
         
-        string submission_url;
-        public string SubmissionUrl {
+        Uri submission_url;
+        public Uri SubmissionUrl {
             get { return submission_url ?? submission_url = BuildSubmissionUrl (); }
         }
         
-        string BuildSubmissionUrl ()
+        Uri BuildSubmissionUrl ()
         {
             StringBuilder builder = new StringBuilder ();
-            builder.Append (SubmissionServiceUrl);
+            builder.Append (SubmissionServiceUrl.AbsoluteUri);
             builder.Append ("?id=");
             builder.Append (Id);
             builder.Append ("&tracks=");
@@ -116,15 +115,26 @@
                 builder.Append ('+');
                 builder.Append (track_offsets [i]);
             }
-            return builder.ToString ();
+            return new Uri(builder.ToString ());
         }
         
         public static LocalDisc GetFromDevice (string device)
         {
             if (device == null) throw new ArgumentNullException ("device");
-            return Environment.OSVersion.Platform != PlatformID.Unix
-                ? (LocalDisc)new DiscWin32 (device)
-                : new DiscLinux (device);
+            try {
+                return Environment.OSVersion.Platform != PlatformID.Unix
+                    ? (LocalDisc)new DiscWin32 (device)
+                    : new DiscLinux (device);
+            } catch (Exception exception) {
+                throw new LocalDiscException (exception);
+            }
+        }
+    }
+    
+    public class LocalDiscException : Exception
+    {
+        public LocalDiscException (Exception exception) : base ("Could not load local disc from device.", exception)
+        {
         }
     }
 }

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzEntity.cs	Sun Aug 17 08:52:21 2008
@@ -45,7 +45,7 @@
         
         #region Constructors
         
-        internal MusicBrainzEntity (string mbid, string parameters) : base (mbid, parameters)
+        internal MusicBrainzEntity (string id, string parameters) : base (id, parameters)
         {
         }
 
@@ -57,13 +57,13 @@
         
         #region Protected
 
-        protected override void CreateIncCore (StringBuilder builder)
+        internal override void CreateIncCore (StringBuilder builder)
         {
             if (aliases == null) AppendIncParameters (builder, "aliases");
             base.CreateIncCore (builder);
         }
 
-        protected void LoadMissingDataCore (MusicBrainzEntity entity)
+        internal void LoadMissingDataCore (MusicBrainzEntity entity)
         {
             name = entity.GetName ();
             sort_name = entity.GetSortName ();
@@ -74,7 +74,7 @@
             base.LoadMissingDataCore (entity);
         }
 
-        protected override bool ProcessXml (XmlReader reader)
+        internal override bool ProcessXml (XmlReader reader)
         {
             bool result = true;
             switch (reader.Name) {
@@ -115,7 +115,7 @@
             return result;
         }
         
-        protected static string CreateNameParameter (string name)
+        internal static string CreateNameParameter (string name)
         {
             StringBuilder builder = new StringBuilder (name.Length + 6);
             builder.Append ("&name=");

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzException.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzException.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzException.cs	Sun Aug 17 08:52:21 2008
@@ -27,7 +27,7 @@
     public sealed class MusicBrainzInvalidParameterException : Exception
     {
         public MusicBrainzInvalidParameterException ()
-            : base ("One of the parameters is invalid. The MBID may be invalid, or you may be using an illegal parameter for this resource type.")
+            : base ("One of the parameters is invalid. The ID may be invalid, or you may be using an illegal parameter for this resource type.")
         {
         }
     }

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzItem.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzItem.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzItem.cs	Sun Aug 17 08:52:21 2008
@@ -39,7 +39,7 @@
         
         #region Constructors
         
-        internal MusicBrainzItem (string mbid, string parameters) : base (mbid, parameters)
+        internal MusicBrainzItem (string id, string parameters) : base (id, parameters)
         {
         }
 
@@ -52,20 +52,20 @@
         
         #region Protected Overrides
 
-        protected override void CreateIncCore (StringBuilder builder)
+        internal override void CreateIncCore (StringBuilder builder)
         {
             if (artist == null) AppendIncParameters(builder, "artist");
             base.CreateIncCore (builder);
         }
 
-        protected void LoadMissingDataCore (MusicBrainzItem item)
+        internal void LoadMissingDataCore (MusicBrainzItem item)
         {
             title = item.GetTitle ();
             if (artist == null) artist = item.GetArtist ();
             base.LoadMissingDataCore (item);
         }
 
-        protected override bool ProcessXml (XmlReader reader)
+        internal override bool ProcessXml (XmlReader reader)
         {
             bool result = true;
             switch (reader.Name) {
@@ -152,7 +152,7 @@
             set { count = value; }
         }
 
-        protected abstract void ToStringCore (StringBuilder builder);
+        internal abstract void ToStringCore (StringBuilder builder);
         
         public override string ToString ()
         {

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzObject.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzObject.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzObject.cs	Sun Aug 17 08:52:21 2008
@@ -63,10 +63,10 @@
         
         #region Constructors
 
-        internal MusicBrainzObject (string mbid, string parameters)
+        internal MusicBrainzObject (string id, string parameters)
         {
             all_data_loaded = true;
-            CreateFromMbid (mbid, parameters ?? CreateInc ());
+            CreateFromId (id, parameters ?? CreateInc ());
         }
 
         internal MusicBrainzObject (XmlReader reader, bool all_rels_loaded)
@@ -79,10 +79,10 @@
         
         #region Private Methods
         
-        void CreateFromMbid (string mbid, string parameters)
+        void CreateFromId (string id, string parameters)
         {
             XmlProcessingClosure (
-                CreateUrl (UrlExtension, mbid, parameters),
+                CreateUrl (UrlExtension, id, parameters),
                 delegate (XmlReader reader) {
                     reader.ReadToFollowing ("metadata");
                     reader.Read ();
@@ -146,35 +146,35 @@
         
         #region Protected
         
-        protected bool AllDataLoaded {
+        internal bool AllDataLoaded {
             get { return all_data_loaded; }
         }
         
-        protected bool AllRelsLoaded {
+        internal bool AllRelsLoaded {
             get { return all_rels_loaded; }
             set { all_rels_loaded = value; }
         }
         
-        protected string CreateInc ()
+        internal string CreateInc ()
         {
             StringBuilder builder = new StringBuilder ();
             CreateIncCore (builder);
             return builder.ToString ();
         }
         
-        protected virtual void CreateIncCore (StringBuilder builder)
+        internal virtual void CreateIncCore (StringBuilder builder)
         {
             if (!all_rels_loaded)
                 AppendIncParameters (builder, rels_params);
         }
         
-        protected static void AppendIncParameters (StringBuilder builder, string parameter)
+        internal static void AppendIncParameters (StringBuilder builder, string parameter)
         {
             builder.Append (builder.Length == 0 ? "&inc=" : "+");
             builder.Append (parameter);
         }
         
-        protected static void AppendIncParameters (StringBuilder builder, string parameter1, string parameter2)
+        internal static void AppendIncParameters (StringBuilder builder, string parameter1, string parameter2)
         {
             builder.Append (builder.Length == 0 ? "&inc=" : "+");
             builder.Append (parameter1);
@@ -182,13 +182,13 @@
             builder.Append (parameter2);
         }
 
-        protected static void AppendIncParameters (StringBuilder builder, string [] parameters)
+        internal static void AppendIncParameters (StringBuilder builder, string [] parameters)
         {
             foreach (string parameter in parameters)
                 AppendIncParameters (builder, parameter);
         }
         
-        protected void LoadMissingData ()
+        internal void LoadMissingData ()
         {
             if (!all_data_loaded) {
                 LoadMissingDataCore ();
@@ -196,7 +196,7 @@
             }
         }
 
-        protected void LoadMissingDataCore (MusicBrainzObject obj)
+        internal void LoadMissingDataCore (MusicBrainzObject obj)
         {
             if (!all_rels_loaded) {
                 artist_rels = obj.GetArtistRelations ();
@@ -207,33 +207,33 @@
             }
         }
         
-        protected T GetPropertyOrNull<T> (ref T field_reference) where T : class
+        internal T GetPropertyOrNull<T> (ref T field_reference) where T : class
         {
             if (field_reference == null) LoadMissingData ();
             return field_reference;
         }
         
-        protected T GetPropertyOrDefault<T> (ref T? field_reference, T default_value) where T : struct
+        internal T GetPropertyOrDefault<T> (ref T? field_reference, T default_value) where T : struct
         {
             if (field_reference == null) LoadMissingData ();
             return field_reference ?? default_value;
         }
         
-        protected ReadOnlyCollection<T> GetPropertyOrNew<T> (ref ReadOnlyCollection<T> field_reference)
+        internal ReadOnlyCollection<T> GetPropertyOrNew<T> (ref ReadOnlyCollection<T> field_reference)
         {
             return GetPropertyOrNew (ref field_reference, true);
         }
         
-        protected ReadOnlyCollection<T> GetPropertyOrNew<T> (ref ReadOnlyCollection<T> field_reference, bool condition)
+        internal ReadOnlyCollection<T> GetPropertyOrNew<T> (ref ReadOnlyCollection<T> field_reference, bool condition)
         {
             if (field_reference == null && condition) LoadMissingData ();
             return field_reference ?? new ReadOnlyCollection<T> (new T [0]);
         }
         
-        protected abstract void LoadMissingDataCore ();
-        protected abstract bool ProcessAttributes (XmlReader reader);
-        protected abstract bool ProcessXml (XmlReader reader);
-        protected abstract string UrlExtension { get; }
+        internal abstract void LoadMissingDataCore ();
+        internal abstract bool ProcessAttributes (XmlReader reader);
+        internal abstract bool ProcessXml (XmlReader reader);
+        internal abstract string UrlExtension { get; }
         
         #endregion
         
@@ -339,14 +339,14 @@
             return CreateUrl (url_extension, string.Empty, builder.ToString ());
         }
 
-        static string CreateUrl (string url_extension, string mbid, string parameters)
+        static string CreateUrl (string url_extension, string id, string parameters)
         {
             StringBuilder builder = new StringBuilder (
-                MusicBrainzService.ServiceUrl.Length + mbid.Length + parameters.Length + 9);
-            builder.Append (MusicBrainzService.ServiceUrl);
+                MusicBrainzService.ServiceUrl.AbsoluteUri.Length + id.Length + parameters.Length + 9);
+            builder.Append (MusicBrainzService.ServiceUrl.AbsoluteUri);
             builder.Append (url_extension);
             builder.Append ('/');
-            builder.Append (mbid);
+            builder.Append (id);
             builder.Append ("?type=xml");
             builder.Append (parameters);
             return builder.ToString ();
@@ -411,11 +411,11 @@
 
         #region Query
 
-        protected static byte QueryLimit {
+        internal static byte QueryLimit {
             get { return 100; }
         }
 
-        protected static string CreateLuceneParameter (string query)
+        internal static string CreateLuceneParameter (string query)
         {
             StringBuilder builder = new StringBuilder (query.Length + 7);
             builder.Append ("&query=");

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzService.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzService.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/MusicBrainzService.cs	Sun Aug 17 08:52:21 2008
@@ -27,26 +27,35 @@
 {
     public static class MusicBrainzService
     {
-        [ThreadStatic]
-        private static string service_url;
-        public static string ServiceUrl {
+        static readonly object service_url_mutex = new object ();
+        static Uri service_url = new Uri(@"http://musicbrainz.org/ws/1/";);
+        public static Uri ServiceUrl {
             get {
-                if (service_url == null) {
-                    service_url = @"http://musicbrainz.org/ws/1/";;
+                lock (service_url_mutex) {
+                    return service_url;
                 }
-                return service_url;
             }
             set {
                 if (value == null) throw new ArgumentNullException ("value");
-                service_url = value;
+                lock (service_url_mutex) {
+                    service_url = value;
+                }
             }
         }
         
-        [ThreadStatic]
-        private static RequestCachePolicy cache_policy;
+        static readonly object cache_policy_mutex = new object ();
+        static RequestCachePolicy cache_policy;
         public static RequestCachePolicy CachePolicy {
-            get { return cache_policy; }
-            set { cache_policy = value; }
+            get {
+                lock (cache_policy_mutex) {
+                    return cache_policy;
+                }
+            }
+            set {
+                lock (cache_policy_mutex) {
+                    cache_policy = value;
+                }
+            }
         }
         
         public static event EventHandler<XmlRequestEventArgs> XmlRequest;
@@ -54,7 +63,7 @@
         internal static void OnXmlRequest (string url, bool fromCache)
         {
             EventHandler<XmlRequestEventArgs> handler = XmlRequest;
-            if (handler != null) handler (null, new XmlRequestEventArgs (url, fromCache));
+            if (handler != null) handler (null, new XmlRequestEventArgs (new Uri (url), fromCache));
         }
     }
 }

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Query.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Query.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Query.cs	Sun Aug 17 08:52:21 2008
@@ -92,7 +92,7 @@
 
         public T this [int i] {
             get {
-                if (i < 0 || i >= Count) throw new IndexOutOfRangeException ();
+                if (i < 0 || i >= Count) throw new ArgumentOutOfRangeException ("i");
                 if (i <= offset || i >= offset + limit) 
                     Offset = i;
                 return ResultsWindow [i - offset];
@@ -133,25 +133,6 @@
             }
         }
         
-        public IList<T> ToList ()
-        {
-            return ToList (0);
-        }
-        
-        public IList<T> ToList (int scoreThreshold)
-        {
-            List<T> list = new List<T> (scoreThreshold == 0 ? Count : 0);
-            foreach (T result in Best(scoreThreshold)) list.Add (result);
-            return list;
-        }
-        
-        public T [] ToArray ()
-        {
-            T [] array = new T [Count];
-            for(int i = 0; i < Count; i++) array [i] = this [i];
-            return array;
-        }
-        
         public IEnumerator<T> GetEnumerator ()
         {
             for (int i = 0; i < Count; i++) yield return this [i];

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Relation.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Relation.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Relation.cs	Sun Aug 17 08:52:21 2008
@@ -83,7 +83,7 @@
         }
     }
 
-    public sealed class UrlRelation : RelationBase<string>
+    public sealed class UrlRelation : RelationBase<Uri>
     {
         internal UrlRelation(string type,
                              string target,
@@ -91,7 +91,7 @@
                              string begin,
                              string end,
                              string [] attributes)
-            : base (type, target, direction, begin, end, attributes)
+            : base (type, new Uri (target), direction, begin, end, attributes)
         {
         }
     }

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Release.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Release.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Release.cs	Sun Aug 17 08:52:21 2008
@@ -48,11 +48,11 @@
         
         #region Constructors
 
-        Release (string mbid) : base (mbid, null)
+        Release (string id) : base (id, null)
         {
         }
 
-        Release (string mbid, string parameters) : base (mbid, parameters)
+        Release (string id, string parameters) : base (id, parameters)
         {
         }
 
@@ -64,13 +64,13 @@
         
         #region Protected
         
-        protected override string UrlExtension {
+        internal override string UrlExtension {
             get { return EXTENSION; }
         }
         
         static readonly string [] track_params = new string [] { "tracks", "track-level-rels", "artist" };
         
-        protected override void CreateIncCore (StringBuilder builder)
+        internal override void CreateIncCore (StringBuilder builder)
         {
             AppendIncParameters (builder, "release-events", "labels");
             if (discs == null) AppendIncParameters (builder, "discs");
@@ -81,7 +81,7 @@
             base.CreateIncCore (builder);
         }
 
-        protected override void LoadMissingDataCore ()
+        internal override void LoadMissingDataCore ()
         {
             Release release = new Release (Id, CreateInc ());
             type = release.GetReleaseType ();
@@ -95,7 +95,7 @@
             base.LoadMissingDataCore (release);
         }
 
-        protected override bool ProcessAttributes (XmlReader reader)
+        internal override bool ProcessAttributes (XmlReader reader)
         {
             // How sure am I about getting the type and status in the "Type Status" format?
             // MB really ought to specify these two things seperatly.
@@ -111,7 +111,7 @@
             return this.type != null || this.status != null;
         }
 
-        protected override bool ProcessXml (XmlReader reader)
+        internal override bool ProcessXml (XmlReader reader)
         {
             reader.Read ();
             bool result = base.ProcessXml (reader);
@@ -236,10 +236,10 @@
         
         #region Static
 
-        public static Release Get (string mbid)
+        public static Release Get (string id)
         {
-            if (mbid == null) throw new ArgumentNullException ("mbid");
-            return new Release (mbid);
+            if (id == null) throw new ArgumentNullException ("id");
+            return new Release (id);
         }
 
         public static Query<Release> Query (string title)
@@ -378,7 +378,7 @@
             set { script = value; }
         }
 
-        protected override void ToStringCore (StringBuilder builder)
+        internal override void ToStringCore (StringBuilder builder)
         {
             if (disc_id != null) {
                 builder.Append ("&discid=");

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Track.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Track.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/Track.cs	Sun Aug 17 08:52:21 2008
@@ -42,11 +42,11 @@
         
         #region Constructors
 
-        Track (string mbid) : base (mbid, null)
+        Track (string id) : base (id, null)
         {
         }
 
-        Track (string mbid, string parameters) : base (mbid, parameters)
+        Track (string id, string parameters) : base (id, parameters)
         {
         }
 
@@ -62,18 +62,18 @@
 
         #region Protected
         
-        protected override string UrlExtension {
+        internal override string UrlExtension {
             get { return EXTENSION; }
         }
         
-        protected override void CreateIncCore (StringBuilder builder)
+        internal override void CreateIncCore (StringBuilder builder)
         {
             if (releases == null) AppendIncParameters (builder, "releases");
             if (puids == null) AppendIncParameters (builder, "puids");
             base.CreateIncCore (builder);
         }
 
-        protected override void LoadMissingDataCore ()
+        internal override void LoadMissingDataCore ()
         {
             Track track = new Track (Id, CreateInc ());
             duration = track.GetDuration ();
@@ -82,12 +82,12 @@
             base.LoadMissingDataCore (track);
         }
 
-        protected override bool ProcessAttributes (XmlReader reader)
+        internal override bool ProcessAttributes (XmlReader reader)
         {
             return true;
         }
 
-        protected override bool ProcessXml (XmlReader reader)
+        internal override bool ProcessXml (XmlReader reader)
         {
             reader.Read ();
             bool result = base.ProcessXml (reader);
@@ -171,10 +171,10 @@
         
         #region Static
 
-        public static Track Get (string mbid)
+        public static Track Get (string id)
         {
-            if (mbid == null) throw new ArgumentNullException ("mbid");
-            return new Track (mbid);
+            if (id == null) throw new ArgumentNullException ("id");
+            return new Track (id);
         }
 
         public static Query<Track> Query (string title)
@@ -186,27 +186,27 @@
             return Query (parameters);
         }
 
-        public static Query<Track> Query (string title, string release)
+        public static Query<Track> Query (string title, string artist)
         {
             if (title == null) throw new ArgumentNullException ("title");
-            if (release == null) throw new ArgumentNullException ("release");
+            if (artist == null) throw new ArgumentNullException ("artist");
             
             TrackQueryParameters parameters = new TrackQueryParameters ();
             parameters.Title = title;
-            parameters.Release = release;
+            parameters.Artist = artist;
             return Query (parameters);
         }
         
-        public static Query<Track> Query (string title, string release, string artist)
+        public static Query<Track> Query (string title, string artist, string release)
         {
             if (title == null) throw new ArgumentNullException ("title");
-            if (release == null) throw new ArgumentNullException ("release");
             if (artist == null) throw new ArgumentNullException ("artist");
+            if (release == null) throw new ArgumentNullException ("release");
             
             TrackQueryParameters parameters = new TrackQueryParameters ();
             parameters.Title = title;
-            parameters.Release = release;
             parameters.Artist = artist;
+            parameters.Release = release;
             return Query (parameters);
         }
 
@@ -265,7 +265,7 @@
             set { puid = value; }
         }
 
-        protected override void ToStringCore (StringBuilder builder)
+        internal override void ToStringCore (StringBuilder builder)
         {
             if (release != null) {
                 builder.Append ("&release=");

Modified: trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/XmlRequestEventArgs.cs
==============================================================================
--- trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/XmlRequestEventArgs.cs	(original)
+++ trunk/musicbrainz-sharp/src/MusicBrainz/MusicBrainz/XmlRequestEventArgs.cs	Sun Aug 17 08:52:21 2008
@@ -26,10 +26,10 @@
 {
     public sealed class XmlRequestEventArgs : EventArgs
     {
-        public readonly string Uri;
+        public readonly Uri Uri;
         public readonly bool FromCache;
         
-        public XmlRequestEventArgs (string uri, bool fromCache)
+        internal XmlRequestEventArgs (Uri uri, bool fromCache)
         {
             Uri = uri;
             FromCache = fromCache;

Modified: trunk/musicbrainz-sharp/tests/MusicBrainz.Tests/ArtistTests.cs
==============================================================================
--- trunk/musicbrainz-sharp/tests/MusicBrainz.Tests/ArtistTests.cs	(original)
+++ trunk/musicbrainz-sharp/tests/MusicBrainz.Tests/ArtistTests.cs	Sun Aug 17 08:52:21 2008
@@ -76,7 +76,7 @@
         public void GetAndCheckCustomReleaseCount1()
         {
             Artist artist = Artist.Get(goodshirt_mbid);
-            artist.ArtistReleaseType = new ArtistReleaseType(ReleaseStatus.Promotion, true);
+            artist.ArtistReleaseType = new ArtistReleaseType(ReleaseStatus.Promotion, ReleaseArtistType.VariousArtists);
             Assert.AreEqual(artist.GetReleases ().Count, 1);
         }
         
@@ -84,7 +84,7 @@
         public void GetAndCheckCustomReleaseCount2()
         {
             Artist artist = Artist.Get(goodshirt_mbid);
-            artist.ArtistReleaseType = new ArtistReleaseType(ReleaseType.Live, true);
+            artist.ArtistReleaseType = new ArtistReleaseType(ReleaseType.Live, ReleaseArtistType.VariousArtists);
             Assert.AreEqual(artist.GetReleases ().Count, 1);
         }
         
@@ -93,7 +93,7 @@
         {
             Artist artist = Artist.Get(goodshirt_mbid);
             Assert.AreEqual(artist.GetReleases ().Count, 2);
-            artist.ArtistReleaseType = new ArtistReleaseType(ReleaseType.Live, true);
+            artist.ArtistReleaseType = new ArtistReleaseType(ReleaseType.Live, ReleaseArtistType.VariousArtists);
             Assert.AreEqual(artist.GetReleases ().Count, 1);
         }
         
@@ -101,7 +101,7 @@
         public void GetAndCheckNoReleaseCount()
         {
             Artist artist = Artist.Get(goodshirt_mbid);
-            artist.ArtistReleaseType = new ArtistReleaseType(ReleaseType.Audiobook, false);
+            artist.ArtistReleaseType = new ArtistReleaseType(ReleaseType.Audiobook, ReleaseArtistType.SingleArtist);
             Assert.AreEqual(artist.GetReleases ().Count, 0);
         }
         



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