Index: /trunk/MusicBrainz.pm
===================================================================
--- /trunk/MusicBrainz.pm	(revision 8)
+++ /trunk/MusicBrainz.pm	(revision 9)
@@ -70,6 +70,5 @@
     $info{MUSICBRAINZ_ALBUMID} = $xpath->findvalue('@id', $release)->value;
     $info{ALBUM}               = $xpath->findvalue('title', $release)->value;
-    $info{ALBUMARTIST}         = $xpath->findvalue('artist-credit/name-credit/artist/name', $release)->value;
-    $info{ALBUMARTISTSORT}     = $xpath->findvalue('artist-credit/name-credit/artist/sort-name', $release)->value;
+    @info{qw{ALBUMARTIST ALBUMARTISTSORT}} = get_artist_credits($xpath, $release);
     $info{DATE}                = $xpath->findvalue('date', $release)->value;
     $info{ORIGINALDATE}        = $xpath->findvalue('release-group/first-release-date', $release)->value;
@@ -78,25 +77,20 @@
     my ($medium) = $xpath->findnodes("medium-list/medium[disc-list/disc/\@id='$discid']", $release);
 
-    my $ua = LWP::UserAgent->new;
+    #my $ua = LWP::UserAgent->new;
     my $tracknum = 1;
     for my $track_node ($xpath->findnodes('track-list/track', $medium)) {
         my $prefix = sprintf('TRACK%02d', $tracknum);
-        my $track_mbid = $info{"$prefix.MUSICBRAINZ_TRACKID"} = $xpath->findvalue('@id', $track_node)->value;
-        my $recording_mbid = $info{"$prefix.MUSICBRAINZ_RECORDINGID"} = $xpath->findvalue('recording/@id', $track_node)->value;
-
-        $info{"$prefix.TITLE"}          = $xpath->findvalue('recording/title', $track_node)->value;
-
-        # use the MusicBrainz join phrase to build up the multiple artist credits
-        my ($credit, $sort_credit) = ('', '');
-        for my $credit_node ($xpath->findnodes('recording/artist-credit/name-credit', $track_node)) {
-            $credit .= $xpath->findvalue('concat(artist/name, @joinphrase)', $credit_node)->value;
-            $sort_credit .= $xpath->findvalue('concat(artist/sort-name, @joinphrase)', $credit_node)->value;
-        }
-        $info{"$prefix.ARTIST"}     = $credit;
-        $info{"$prefix.ARTISTSORT"} = $sort_credit;
+
+        $info{"$prefix.MUSICBRAINZ_TRACKID"} = $xpath->findvalue('@id', $track_node)->value;
+
+        my ($recording) = $xpath->findnodes('recording', $track_node);
+        $info{"$prefix.MUSICBRAINZ_RECORDINGID"} = $xpath->findvalue('@id', $recording)->value;
+        $info{"$prefix.TITLE"} = $xpath->findvalue('title', $recording)->value;
+        @info{"$prefix.ARTIST", "$prefix.ARTISTSORT"} = get_artist_credits($xpath, $recording);
 
         $info{TRACKS}[$tracknum]{TITLE} = $info{"$prefix.TITLE"};
         $info{TRACKS}[$tracknum]{ARTIST} = $info{"$prefix.ARTIST"};
         $info{TRACKS}[$tracknum]{ARTISTSORT} = $info{"$prefix.ARTISTSORT"};
+
         #my $uri = URI->new("http://musicbrainz.org/ws/2/recording/$recording_mbid");
         #$uri->query_form(inc => 'artists');
@@ -110,4 +104,17 @@
 
     return \%info;
+}
+
+sub get_artist_credits {
+    my ($xpath, $context_node) = @_;
+
+    # use the MusicBrainz join phrase to build up the multiple artist credits
+    my ($credit, $sort_credit) = ('', '');
+    for my $credit_node ($xpath->findnodes('artist-credit/name-credit', $context_node)) {
+        $credit      .= $xpath->findvalue('concat(artist/name, @joinphrase)', $credit_node)->value;
+        $sort_credit .= $xpath->findvalue('concat(artist/sort-name, @joinphrase)', $credit_node)->value;
+    }
+
+    return ($credit, $sort_credit);
 }
 
