--- src/flac.c	2006-08-31 11:22:19.000000000 +0200
+++ src/flac.c	2007-07-10 21:16:47.000000000 +0200
@@ -353,6 +353,22 @@
 } /* sf_flac_write_callback */
 
 static void
+sf_flac_meta_getvorbiscomment (SF_PRIVATE *psf, int str_type, const FLAC__StreamMetadata *metadata, const char *tag)
+{
+	int i;
+	const char *value, *s;
+
+	i = FLAC__metadata_object_vorbiscomment_find_entry_from(metadata, 0, tag);
+	if (i >= 0) {
+		value = metadata->data.vorbis_comment.comments[i].entry;
+		if ((s = strchr(value, '=')) != NULL)
+			value = s + 1;
+		
+		psf_store_string (psf, str_type, value);
+	}
+}
+
+static void
 sf_flac_meta_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data)
 {	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
 
@@ -378,6 +394,10 @@
 				} ;
 			break ;
 
+		case FLAC__METADATA_TYPE_VORBIS_COMMENT :
+			sf_flac_meta_getvorbiscomment (psf, SF_STR_ARTIST, metadata, "artist");
+			sf_flac_meta_getvorbiscomment (psf, SF_STR_TITLE, metadata, "title");
+			break;
 		default :
 			psf_log_printf (psf, "sf_flac_meta_callback : metadata-type %d not yet implemented.\n", metadata->type) ;
 		break ;
@@ -603,6 +623,7 @@
 	FLAC__seekable_stream_decoder_set_eof_callback (pflac->fsd, sf_flac_eof_callback) ;
 	FLAC__seekable_stream_decoder_set_write_callback (pflac->fsd, sf_flac_write_callback) ;
 	FLAC__seekable_stream_decoder_set_metadata_callback (pflac->fsd, sf_flac_meta_callback) ;
+	FLAC__seekable_stream_decoder_set_metadata_respond(pflac->fsd, FLAC__METADATA_TYPE_VORBIS_COMMENT);
 	FLAC__seekable_stream_decoder_set_error_callback (pflac->fsd, sf_flac_error_callback) ;
 	FLAC__seekable_stream_decoder_set_client_data (pflac->fsd, psf) ;
 
