diff --git a/src/filelist.c b/src/filelist.c
index 215f3714606e49d47cb513666afb355121a3a49a..23239f9543af6c518a34c5682ffa0ae75ac33296 100644
--- a/src/filelist.c
+++ b/src/filelist.c
@@ -321,11 +321,10 @@ int feh_file_info_load(feh_file * file, Imlib_Image im)
 
 	if (im)
 		im1 = im;
-	else if (!feh_load_image(&im1, file))
-		return(1);
-
-	if (!im1)
+	else if (!feh_load_image(&im1, file) || !im1) {
+		weprintf("couldn't load %s", file->filename);
 		return(1);
+	}
 
 	file->info = feh_file_info_new();
 
@@ -340,7 +339,7 @@ int feh_file_info_load(feh_file * file, Imlib_Image im)
 
 	file->info->size = st.st_size;
 
-	if (need_free && im1)
+	if (need_free)
 		gib_imlib_free_image_and_decache(im1);
 	return(0);
 }
diff --git a/src/slideshow.c b/src/slideshow.c
index e6ffb56ce774437c16c271a6f7eed4d435475110..52ef4b31e52fa4de46b7df85695479f98c771cbf 100644
--- a/src/slideshow.c
+++ b/src/slideshow.c
@@ -402,41 +402,31 @@ char *feh_printf(char *str, feh_file * file)
 					strcat(ret, file->name);
 				break;
 			case 'w':
-				if (file) {
-					if (!file->info)
-						feh_file_info_load(file, NULL);
+				if (file && (file->info || !feh_file_info_load(file, NULL))) {
 					snprintf(buf, sizeof(buf), "%d", file->info->width);
 					strcat(ret, buf);
 				}
 				break;
 			case 'h':
-				if (file) {
-					if (!file->info)
-						feh_file_info_load(file, NULL);
+				if (file && (file->info || !feh_file_info_load(file, NULL))) {
 					snprintf(buf, sizeof(buf), "%d", file->info->height);
 					strcat(ret, buf);
 				}
 				break;
 			case 's':
-				if (file) {
-					if (!file->info)
-						feh_file_info_load(file, NULL);
+				if (file && (file->info || !feh_file_info_load(file, NULL))) {
 					snprintf(buf, sizeof(buf), "%d", file->info->size);
 					strcat(ret, buf);
 				}
 				break;
 			case 'p':
-				if (file) {
-					if (!file->info)
-						feh_file_info_load(file, NULL);
+				if (file && (file->info || !feh_file_info_load(file, NULL))) {
 					snprintf(buf, sizeof(buf), "%d", file->info->pixels);
 					strcat(ret, buf);
 				}
 				break;
 			case 't':
-				if (file) {
-					if (!file->info)
-						feh_file_info_load(file, NULL);
+				if (file && (file->info || !feh_file_info_load(file, NULL))) {
 					strcat(ret, file->info->format);
 				}
 				break;