--- a/src/internfile/internfile.cpp
+++ b/src/internfile/internfile.cpp
@@ -734,6 +734,13 @@
 	    if (!(setres = newflt->set_document_file(filename))) {
 		m_tmpflgs[m_handlers.size()] = false;
 		m_tempfiles.pop_back();
+	    } else {
+		// Hack here, but really helps perfs: if we happen to
+		// create a temp file for, ie, an image attachment,
+		// keep it around for preview reuse
+		if (!mimetype.compare(0, 6, "image/")) {
+		    m_imgtmp = m_tempfiles.back();
+		}
 	    }
 	}
     }
@@ -765,6 +772,10 @@
 FileInterner::Status FileInterner::internfile(Rcl::Doc& doc, const string& ipath)
 {
     LOGDEB(("FileInterner::internfile. ipath [%s]\n", ipath.c_str()));
+
+    // Get rid of possible image tempfile from older call
+    m_imgtmp.release();
+
     if (m_handlers.size() < 1) {
 	// Just means the constructor failed
 	LOGDEB(("FileInterner::internfile: no handler: constructor failed\n"));