Index: trunk/cd2flac
===================================================================
--- trunk/cd2flac	(revision 40)
+++ trunk/cd2flac	(revision 41)
@@ -37,11 +37,7 @@
 $CD_DEVICE ||= '/dev/cdrom';
 
+my $tags = $BARCODE ? { BARCODE => $BARCODE } : {};
 my $ripper = Ripper->new({ device => $CD_DEVICE });
-$ripper->rip_to_flac($archive_flac);
-
-if ($BARCODE) {
-    print "Writing barcode\n";
-    system 'metaflac', '--set-tag', "BARCODE=$BARCODE", $archive_flac;
-}
+$ripper->rip_to_flac($archive_flac, $tags);
 
 print "Rip saved as $archive_flac\n";
Index: trunk/lib/Ripper.pm
===================================================================
--- trunk/lib/Ripper.pm	(revision 40)
+++ trunk/lib/Ripper.pm	(revision 41)
@@ -4,4 +4,5 @@
 
 use Tracks;
+use DiscFlacFile;
 
 use File::Temp qw{tempdir};
@@ -20,5 +21,5 @@
 
 sub rip_to_flac {
-    my ($self, $archive_flac) = @_;
+    my ($self, $archive_flac, $tags) = @_;
 
     $self->tracks(Tracks->new);
@@ -50,5 +51,13 @@
     # copy to permanent location
     copy($flac_file, $archive_flac);
-    system 'metaflac', '--set-tag', "MUSICBRAINZ_DISCID=$discid", $archive_flac;
+
+    # tag the archive flac
+    $tags ||= {};
+    $tags->{MUSICBRAINZ_DISCID} = $discid;
+    my $flac_disc = DiscFlacFile->new({ file => $archive_flac });
+    $flac_disc->flac->{tags}{$_} = $tags->{$_} foreach keys %{$tags};
+    $flac_disc->flac->write;
+
+    return $flac_disc;
 }
 
