--- Formats.pm.orig	2010-04-15 10:28:10.000000000 +0200
+++ Formats.pm	2010-04-15 23:13:47.000000000 +0200
@@ -159,8 +159,9 @@
 		}
 
 		# Extract tag and audio info per format
+		my $tagReaderClass;
 		eval {
-			if (my $tagReaderClass = $class->classForFormat($type)) {
+			if ($tagReaderClass = $class->classForFormat($type)) {
 				if ( !$loadedTagClasses{$type} ) {
 					eval "use $tagReaderClass";
 					if ( $@ ) {
@@ -168,16 +169,16 @@
 						return {};
 					}
 				}
-
-				$tags = $tagReaderClass->getTag($filepath, $anchor);
-				
-				$loadedTagClasses{$type} = 1;
 			}
 		};
 
 		if ($@) {
 			logBacktrace("While trying to ->getTag($filepath) : $@");
 		}
+		else {
+			$tags = $tagReaderClass->getTag($filepath, $anchor);
+			$loadedTagClasses{$type} = 1;
+		}
 
 		if (!defined $tags) {
 			main::INFOLOG && $log->is_info && $log->info("No tags found for $filepath");
@@ -249,32 +250,25 @@
 	# Bug: 3998 - Strip UTF-16 BOMs from multiple genres (or other values).
 	while (my ($tag, $value) = each %{$tags}) {
 
-		if (defined $tags->{$tag}) {
+		if (defined $value) {
 
 			use bytes;
 
-			if (ref($tags->{$tag}) eq 'ARRAY') {
-
-				for (my $i = 0; $i < scalar @{$tags->{$tag}}; $i++) {
-
-					$tags->{$tag}->[$i] =~ s/$Slim::Utils::Unicode::bomRE//;
-					$tags->{$tag}->[$i] =~ s/\000$//;
-				}
-
-			} else {
-
-				$tags->{$tag} =~ s/$Slim::Utils::Unicode::bomRE//;
-				$tags->{$tag} =~ s/\000$//;
+			for ( ref $value eq 'ARRAY' ? @{$value} : $value ) {
+				next unless defined;
+				s{$Slim::Utils::Unicode::bomRE}{};
+				s{\000$}{};
 			}
-			
+			$tags->{$tag} = $value;
+
 			# Bug 14587, sanity check all MusicBrainz ID tags to ensure it is a UUID and nothing more
 			if ( $tag =~ /^MUSICBRAINZ.*ID$/ ) {
 
 				# DiscID has a different format:
 				# http://wiki.musicbrainz.org/Disc_ID_Calculation
-				if ( $tag eq 'MUSICBRAINZ_DISCID' && $tags->{$tag} =~ /^[0-9a-z_\.-]{28}$/i ) {
+				if ( $tag eq 'MUSICBRAINZ_DISCID' && $value =~ /^[0-9a-z_\.-]{28}$/i ) {
 					$tags->{$tag} = lc($1);
-				} elsif ( $tags->{$tag} =~ /([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i ) {
+				} elsif ( $value =~ /([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i ) {
 					$tags->{$tag} = lc($1);
 				}
 				else {