diff --git a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaLibrary.java b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaLibrary.java
index 2c961339..cdf9e857 100644
--- a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaLibrary.java
+++ b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaLibrary.java
@@ -61,6 +61,8 @@ public class MediaLibrary  {
 	public static final int ROLE_ALBUMARTIST              = 2;
 
 	public static final int SONG_FLAG_OUTDATED            = (1 << 0); // entry in library should get rescanned.
+	public static final int SONG_FLAG_NO_ALBUM            = (1 << 1); // file had no real album tag.
+	public static final int SONG_FLAG_NO_ARTIST           = (1 << 2); // file had no real artist tag.
 
 	public static final String PREFERENCES_FILE = "_prefs-v1.obj";
 
diff --git a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaScanner.java b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaScanner.java
index e589fba0..3513fe50 100644
--- a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaScanner.java
+++ b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaScanner.java
@@ -509,18 +509,27 @@ public class MediaScanner implements Handler.Callback {
 		if (mustInsert) {
 			hasChanged = true;
 
+			// Clear old flags of this song:
+			songFlags &= ~MediaLibrary.SONG_FLAG_OUTDATED;   // This file is not outdated anymore
+			songFlags &= ~MediaLibrary.SONG_FLAG_NO_ARTIST;  // May find an artist now.
+			songFlags &= ~MediaLibrary.SONG_FLAG_NO_ALBUM;   // May find an album now.
+
 			// Get tags which always must be set
 			String title = tags.getFirst(MediaMetadataExtractor.TITLE);
 			if (isUnset(title))
 				title = file.getName();
 
 			String album = tags.getFirst(MediaMetadataExtractor.ALBUM);
-			if (isUnset(album))
+			if (isUnset(album)) {
 				album = "<No Album>";
+				songFlags |= MediaLibrary.SONG_FLAG_NO_ALBUM;
+			}
 
 			String artist = tags.getFirst(MediaMetadataExtractor.ARTIST);
-			if (isUnset(artist))
+			if (isUnset(artist)) {
 				artist = "<No Artist>";
+				songFlags |= MediaLibrary.SONG_FLAG_NO_ARTIST;
+			}
 
 			String discNumber = tags.getFirst(MediaMetadataExtractor.DISC_NUMBER);
 			if (isUnset(discNumber))
@@ -546,7 +555,7 @@ public class MediaScanner implements Handler.Callback {
 			v.put(MediaLibrary.SongColumns.PLAYCOUNT,   playCount);
 			v.put(MediaLibrary.SongColumns.SKIPCOUNT,   skipCount);
 			v.put(MediaLibrary.SongColumns.PATH,        path);
-			v.put(MediaLibrary.SongColumns.FLAGS,       (songFlags &~MediaLibrary.SONG_FLAG_OUTDATED));
+			v.put(MediaLibrary.SongColumns.FLAGS,       songFlags);
 			mBackend.insert(MediaLibrary.TABLE_SONGS, null, v);
 
 			v.clear();
diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/Song.java b/app/src/main/java/ch/blinkenlights/android/vanilla/Song.java
index 2fb5884c..d3c718bd 100644
--- a/app/src/main/java/ch/blinkenlights/android/vanilla/Song.java
+++ b/app/src/main/java/ch/blinkenlights/android/vanilla/Song.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010, 2011 Christopher Eby <kreed@kreed.org>
+ * Copyright (C) 2019 Adrian Ulrich <adrian@blinkenlights.ch>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
@@ -63,6 +64,7 @@ public class Song implements Comparable<Song> {
 		MediaLibrary.SongColumns.DURATION,
 		MediaLibrary.SongColumns.SONG_NUMBER,
 		MediaLibrary.SongColumns.DISC_NUMBER,
+		MediaLibrary.SongColumns.FLAGS,
 	};
 
 	public static final String[] EMPTY_PLAYLIST_PROJECTION = {
@@ -188,6 +190,15 @@ public class Song implements Comparable<Song> {
 		duration = cursor.getLong(7);
 		trackNumber = cursor.getInt(8);
 		discNumber = cursor.getInt(9);
+
+		// Read and interpret the media library flags of this entry.
+		// There is no 1:1 mapping, so we must check each flag on its own.
+		int libraryFlags = cursor.getInt(10);
+		if ((libraryFlags & MediaLibrary.SONG_FLAG_NO_ALBUM) != 0) {
+			// Note that we only set, never unset: the song may already
+			// have the flag set for other reasons.
+			flags |= FLAG_NO_COVER;
+		}
 	}
 
 	/**