diff --git a/man/feh.pre b/man/feh.pre
index 7ff69cfe15751ea94af2c99eef9a70704148e6a8..173410e287b0ecc7f7b10835f8064f967c7f4baa 100644
--- a/man/feh.pre
+++ b/man/feh.pre
@@ -594,7 +594,9 @@ image.
 .
 Save files to
 .Ar directory
-.Pq only useful with -k .
+when using
+.Cm --keep-http
+or the save_image command.
 By default, files are saved in the current working directory.
 .
 .It Cm -p , --preload
diff --git a/src/slideshow.c b/src/slideshow.c
index b4043184442a3357fcf6cf57af9601d3cf6d7e20..145bee168ff0b4668e6925bc52aaf4d2b287acf3 100644
--- a/src/slideshow.c
+++ b/src/slideshow.c
@@ -615,16 +615,24 @@ void slideshow_save_image(winwidget win)
 {
 	char *tmpname;
 	Imlib_Load_Error err;
+	char *base_dir = "";
+	if (opt.output_dir) {
+		base_dir = estrjoin("", opt.output_dir, "/", NULL);
+	}
 
 	if (win->file) {
-		tmpname = feh_unique_filename("", FEH_FILE(win->file->data)->name);
+		tmpname = feh_unique_filename(base_dir, FEH_FILE(win->file->data)->name);
 	} else if (mode) {
 		char *tmp;
 		tmp = estrjoin(".", mode, "png", NULL);
-		tmpname = feh_unique_filename("", tmp);
+		tmpname = feh_unique_filename(base_dir, tmp);
 		free(tmp);
 	} else {
-		tmpname = feh_unique_filename("", "noname.png");
+		tmpname = feh_unique_filename(base_dir, "noname.png");
+	}
+
+	if (opt.output_dir) {
+		free(base_dir);
 	}
 
 	if (opt.verbose)
diff --git a/src/utils.c b/src/utils.c
index ec30d4a83ef2c69807588be1324dc28eab0edbda..087e7f6287fcc6a302b6e14217b2a8ed07e8f3d8 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -152,6 +152,7 @@ char path_is_url(char *path) {
 	return 0;
 }
 
+/* Note: path must end with a trailing / or be an empty string */
 /* free the result please */
 char *feh_unique_filename(char *path, char *basename)
 {