diff --git a/src/tag/Id3Scan.cxx b/src/tag/Id3Scan.cxx
index c85de6b70..2ae21dc10 100644
--- a/src/tag/Id3Scan.cxx
+++ b/src/tag/Id3Scan.cxx
@@ -28,12 +28,9 @@
 #include "util/ScopeExit.hxx"
 #include "util/StringStrip.hxx"
 #include "util/StringView.hxx"
-#include "Log.hxx"
 
 #include <id3tag.h>
 
-#include <exception>
-
 #include <string.h>
 #include <stdlib.h>
 
@@ -381,18 +378,11 @@ tag_id3_import(const struct id3_tag *tag) noexcept
 }
 
 bool
-tag_id3_scan(InputStream &is, TagHandler &handler) noexcept
+tag_id3_scan(InputStream &is, TagHandler &handler)
 {
-	UniqueId3Tag tag;
-
-	try {
-		tag = tag_id3_load(is);
-		if (!tag)
-			return false;
-	} catch (...) {
-		LogError(std::current_exception());
+	auto tag = tag_id3_load(is);
+	if (!tag)
 		return false;
-	}
 
 	scan_id3_tag(tag.get(), handler);
 	return true;
diff --git a/src/tag/Id3Scan.hxx b/src/tag/Id3Scan.hxx
index b5ba43863..a7bb75682 100644
--- a/src/tag/Id3Scan.hxx
+++ b/src/tag/Id3Scan.hxx
@@ -25,8 +25,11 @@ class TagHandler;
 struct Tag;
 struct id3_tag;
 
+/**
+ * Throws on I/O error.
+ */
 bool
-tag_id3_scan(InputStream &is, TagHandler &handler) noexcept;
+tag_id3_scan(InputStream &is, TagHandler &handler);
 
 Tag
 tag_id3_import(const struct id3_tag *) noexcept;