diff --git a/src/eog-image.c b/src/eog-image.c
index 1c87b94..9493725 100644
--- a/src/eog-image.c
+++ b/src/eog-image.c
@@ -1457,6 +1457,7 @@ tmp_file_move_to_uri (EogImage *image,
 			     EOG_IMAGE_ERROR_VFS, 
 			     "VFS error moving the temp file");
 		}
+		g_error_free (*ioerror);
 	} 
 
 	return result;
@@ -1475,8 +1476,10 @@ tmp_file_delete (GFile *tmpfile)
 		char *tmpfile_path;
 		if (err != NULL) {
 			if (err->code == G_IO_ERROR_NOT_FOUND) {
+				g_error_free (err);
 				return TRUE;
 			}
+			g_error_free (err);
 		}
 		tmpfile_path = g_file_get_path (tmpfile);
 		g_warning ("Couldn't delete temporary file: %s", tmpfile_path);
@@ -1643,7 +1646,7 @@ eog_image_copy_file (EogImageSaveInfo *source, EogImageSaveInfo *target, GError
 	
 	target_file_path = g_file_get_path (target->file);
 	
-	result = g_file_move (source->file,
+	result = g_file_copy (source->file,
 			      target->file,
 			      (target->overwrite ? G_FILE_COPY_OVERWRITE : 0) |
 			      G_FILE_COPY_ALL_METADATA,
@@ -1662,6 +1665,7 @@ eog_image_copy_file (EogImageSaveInfo *source, EogImageSaveInfo *target, GError
 			     EOG_IMAGE_ERROR_VFS, 
 			     ioerror->message);
 		}
+		g_error_free (ioerror);
 	}
 
 	return result;
diff --git a/src/eog-thumbnail.c b/src/eog-thumbnail.c
index 4804045..c043e91 100644
--- a/src/eog-thumbnail.c
+++ b/src/eog-thumbnail.c
@@ -182,6 +182,7 @@ eog_thumb_data_new (GFile *file, GError **error)
 	else {
 		eog_thumb_data_free (data);
 		data = NULL;
+		g_error_free (ioerror);
 	}
 
 	g_object_unref (file_info);
