diff --git a/main.c b/main.c
index ab2508f..bc6d9a3 100644
--- a/main.c
+++ b/main.c
@@ -55,8 +55,6 @@ const char **filenames;
 int filecnt, fileidx;
 size_t filesize;
 
-int tns_loaded;
-
 #define TITLE_LEN 256
 char win_title[TITLE_LEN];
 
@@ -131,10 +129,8 @@ int main(int argc, char **argv) {
 	win_open(&win);
 	img_init(&img, &win);
 
-	if (options->thumbnails) {
-		tns_loaded = 0;
+	if (options->thumbnails)
 		tns_init(&tns, filecnt);
-	}
 
 	if (options->thumbnails == 2) {
 		mode = MODE_THUMBS;
@@ -161,7 +157,7 @@ void update_title() {
 	if (mode == MODE_THUMBS) {
 		n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] %s",
 		             tns.cnt ? tns.sel + 1 : 0, tns.cnt,
-								 tns.cnt ? tns.thumbs[tns.sel].filename : "");
+		             tns.cnt ? filenames[tns.sel] : "");
 	} else {
 		if (img.valid) {
 			size = filesize;
@@ -490,17 +486,17 @@ void run() {
 	timeout = 0;
 
 	while (1) {
-		if (mode == MODE_THUMBS && tns_loaded < filecnt) {
+		if (mode == MODE_THUMBS && tns.cnt < filecnt) {
 			win_set_cursor(&win, CURSOR_WATCH);
 			gettimeofday(&t0, 0);
 
-			while (!XPending(win.env.dpy) && tns_loaded < filecnt) {
-				tns_load(&tns, &win, filenames[tns_loaded++]);
+			while (!XPending(win.env.dpy) && tns.cnt < filecnt) {
+				tns_load(&tns, &win, filenames[tns.cnt]);
 				gettimeofday(&t, 0);
 				if (TV_TO_DOUBLE(t) - TV_TO_DOUBLE(t0) >= 0.25)
 					break;
 			}
-			if (tns_loaded == filecnt)
+			if (tns.cnt == filecnt)
 				win_set_cursor(&win, CURSOR_ARROW);
 			if (!XPending(win.env.dpy)) {
 				redraw();
diff --git a/thumbs.c b/thumbs.c
index bac00d9..e66dd1c 100644
--- a/thumbs.c
+++ b/thumbs.c
@@ -25,6 +25,7 @@
 #include "thumbs.h"
 #include "util.h"
 
+extern Imlib_Image *im_broken;
 const int thumb_dim = THUMB_SIZE + 10;
 
 void tns_init(tns_t *tns, int cnt) {
@@ -57,19 +58,20 @@ void tns_load(tns_t *tns, win_t *win, const char *filename) {
 	if (!tns || !win || !filename)
 		return;
 
-	if (!(im = imlib_load_image(filename)))
-		return;
-
-	imlib_context_set_image(im);
+	if ((im = imlib_load_image(filename)))
+		imlib_context_set_image(im);
+	else
+		imlib_context_set_image(im_broken);
 
 	w = imlib_image_get_width();
 	h = imlib_image_get_height();
 	zw = (float) THUMB_SIZE / (float) w;
 	zh = (float) THUMB_SIZE / (float) h;
 	z = MIN(zw, zh);
+	if (!im && z > 1.0)
+		z = 1.0;
 
 	t = &tns->thumbs[tns->cnt++];
-	t->filename = filename;
 	t->w = z * w;
 	t->h = z * h;
 
diff --git a/thumbs.h b/thumbs.h
index 01b161a..82c3a1a 100644
--- a/thumbs.h
+++ b/thumbs.h
@@ -23,7 +23,6 @@
 
 typedef struct thumb_s {
 	Pixmap pm;
-	const char *filename;
 	int x;
 	int y;
 	int w;