Index: unk/getprops
===================================================================
--- /trunk/getprops	(revision 39)
+++ 	(revision )
@@ -1,6 +1,0 @@
-#!/bin/bash
-
-FLAC=$1
-
-metaflac --show-tag BARCODE "$FLAC"
-./flac2properties "$FLAC"
Index: /trunk/lib/DiscFlacFile.pm
===================================================================
--- /trunk/lib/DiscFlacFile.pm	(revision 39)
+++ /trunk/lib/DiscFlacFile.pm	(revision 40)
@@ -36,5 +36,10 @@
 sub discid {
     my $self = shift;
-    return $self->flac->info('MUSICBRAINZ_DISCID') || $self->tracks->discid;
+    return $self->flac->tags('MUSICBRAINZ_DISCID') || $self->tracks->discid;
+}
+
+sub barcode {
+    my $self = shift;
+    return $self->flac->tags('BARCODE');
 }
 
Index: /trunk/lib/MusicBrainz.pm
===================================================================
--- /trunk/lib/MusicBrainz.pm	(revision 39)
+++ /trunk/lib/MusicBrainz.pm	(revision 40)
@@ -33,16 +33,25 @@
 
 sub select_release {
-    my ($xpath, $discid) = @_;
+    my ($xpath, $params) = @_;
 
-    # get the release; if there is more than one, take the first one
-    my $release_count = $xpath->findvalue('count(//release)');
-    my @releases = $xpath->findnodes('//release');
-    my $base = 'http://musicbrainz.org/release/';
+    my $discid = $params->{discid};
+    my $barcode = $params->{barcode};
 
-    my $i = 1;
-    # present the user with an interactive menu to pick/confirm the correct release ID
-    warn "$release_count release(s) found matching $discid\n";
-    for my $release (@releases) {
-        warn sprintf "%2d) $base%s %s %s (%s)\n", 
+    if ($barcode) {
+        # try to pick the release automatically by the barcode
+        my @releases = $xpath->findnodes("//release[barcode='$barcode']");
+        die "Found no releases with discid $discid and barcode $barcode\n" unless @releases;
+        die "Found more than one release with discid $discid and barcode $barcode\n" if @releases > 1;
+        return $releases[0];
+    } else {
+        my $release_count = $xpath->findvalue('count(//release)');
+        my @releases = $xpath->findnodes('//release');
+        my $base = 'http://musicbrainz.org/release/';
+
+        my $i = 1;
+        # present the user with an interactive menu to pick/confirm the correct release ID
+        warn "$release_count release(s) found matching $discid\n";
+        for my $release (@releases) {
+            warn sprintf "%2d) $base%s %s %s (%s)\n", 
             $i++,
             $xpath->findvalue('@id', $release)->value,
@@ -50,20 +59,23 @@
             $xpath->findvalue('.//label-info/catalog-number', $release)->value,
             $xpath->findvalue('barcode', $release)->value;
+        }
+
+        my $selection = 0;
+
+        while ($selection < 1 || $selection > $release_count) {
+            print STDERR "Select a release (1-$release_count): ";
+            $selection = <STDIN>;
+            chomp $selection;
+            return if $selection =~ /^q/i;
+        }
+
+        return $releases[$selection - 1];
     }
-
-    my $selection = 0;
-
-    while ($selection < 1 || $selection > $release_count) {
-        print STDERR "Select a release (1-$release_count): ";
-        $selection = <STDIN>;
-        chomp $selection;
-        return if $selection =~ /^q/i;
-    }
-
-    return $releases[$selection - 1];
 }
 
 sub get_musicbrainz_info {
-    my ($discid) = @_;
+    my $params = shift;
+
+    my $discid = $params->{discid};
     my %info;
 
@@ -78,5 +90,5 @@
 
     #my $release = $releases[0];
-    my $release = select_release($xpath, $discid);
+    my $release = select_release($xpath, $params);
     return unless $release;
 
Index: /trunk/mbz
===================================================================
--- /trunk/mbz	(revision 39)
+++ /trunk/mbz	(revision 40)
@@ -12,15 +12,20 @@
 
 GetOptions(
-    'flac=s' =>\my $FLAC_FILE,
+    'flac=s'         => \my $FLAC_FILE,
+    'barcode=s'      => \my $BARCODE,
     'get-release-id' => \my $GET_RELEASE_ID,
-    'xml' =>\my $GET_XML,
+    'xml'            => \my $GET_XML,
 );
 
 my $discid;
+my $barcode;
 
 if ($FLAC_FILE) {
-    $discid = DiscFlacFile->new({ file => $FLAC_FILE })->discid;
+    my $flac_disc = DiscFlacFile->new({ file => $FLAC_FILE });
+    $discid  = $flac_disc->discid;
+    $barcode = $flac_disc->barcode;
 } else {
-    $discid = shift;
+    $discid  = shift;
+    $barcode = $BARCODE;
 }
 
@@ -35,5 +40,8 @@
 
 # otherwise, do the full parsing of the data
-my $info = get_musicbrainz_info($discid);
+my $info = get_musicbrainz_info({
+    discid  => $discid,
+    barcode => $barcode,
+});
 
 exit unless $info;
