diff --git a/GUI/Support/Data/Dirs.cpp b/GUI/Support/Data/Dirs.cpp
index 7748eacf4b7fe1c8ad1ac2cd96ed521f65c4a101..e980006076c0fcdf587b296eb888ee344d41719f 100644
--- a/GUI/Support/Data/Dirs.cpp
+++ b/GUI/Support/Data/Dirs.cpp
@@ -32,6 +32,7 @@ BA_GUI_API_ std::unique_ptr<Dirs> gDirs;
 
 Dirs::Dirs()
 {
+    artifacts_export_dir = QDir::homePath();
     readSettings();
 }
 
diff --git a/GUI/Support/Data/Dirs.h b/GUI/Support/Data/Dirs.h
index a7b8652f2fba78fc4da0bc3437c0b96a7dd7e358..fdd60268f3f33aec41e0deb78e327e67ea4f7f21 100644
--- a/GUI/Support/Data/Dirs.h
+++ b/GUI/Support/Data/Dirs.h
@@ -28,6 +28,7 @@ public:
     QString import_filter_1D; //!< Last used import filter for 1D files
     QString import_filter_2D; //!< Last used import filter for 2D files
 
+    QString artifacts_export_dir; //!< Last used directory to save image, script, ...
     QString userImportDir() const;
 
     void setImportDir(const QString& dirname);
diff --git a/GUI/View/Realspace/RealspaceWidget.cpp b/GUI/View/Realspace/RealspaceWidget.cpp
index a97fad24f3623a1f2d16906239028dcd04aed60c..b3413ae1b6b592830b5a8a8bbd6901987058dda9 100644
--- a/GUI/View/Realspace/RealspaceWidget.cpp
+++ b/GUI/View/Realspace/RealspaceWidget.cpp
@@ -15,15 +15,15 @@
 #include "GUI/View/Realspace/RealspaceWidget.h"
 #include "Base/Util/Assert.h"
 #include "GUI/Model/Material/MaterialItem.h"
-#include "GUI/Model/Project/ProjectDocument.h"
 #include "GUI/Model/Sample/SampleItem.h"
+#include "GUI/Support/Data/Dirs.h"
 #include "GUI/View/Info/CautionSign.h"
 #include "GUI/View/Layout/ApplicationSettings.h"
 #include "GUI/View/Realspace/RealspaceBuilder.h"
+#include "GUI/View/Widget/FileDialog.h"
 #include "Img3D/Model/Model.h"
 #include "Img3D/View/Canvas.h"
 #include <QApplication>
-#include <QFileDialog>
 #include <QMessageBox>
 #include <QVBoxLayout>
 
@@ -78,30 +78,20 @@ void RealspaceWidget::showEvent(QShowEvent*)
 
 void RealspaceWidget::savePicture()
 {
-    ASSERT(gDoc);
-    QString dirname = gDoc->userExportDir();
-    QString defaultExtension = ".png";
-    QString selectedFilter("*" + defaultExtension);
-    QString defaultName = dirname + "/untitled";
-    QString fname = QFileDialog::getSaveFileName(
-        nullptr, "Save 3D real space view", defaultName, selectedFilter, nullptr,
-        appSettings->useNativeFileDialog() ? QFileDialog::Options()
-                                           : QFileDialog::DontUseNativeDialog);
-    QString nameToSave = fname.endsWith(defaultExtension) ? fname : fname + defaultExtension;
-    if (nameToSave.isEmpty())
+    static const QString defaultExtension = ".png";
+    QString fname = GUI::Dialog::fileSaveDialog("Save 3D real space view",
+						gDirs->artifacts_export_dir,
+						"*" + defaultExtension);
+    if (fname.isEmpty())
         return;
+    if (!fname.endsWith(defaultExtension))
+	fname += defaultExtension;
 
     QPixmap pixmap(this->size());
     render(&pixmap, QPoint(), childrenRegion());
-    try {
-        pixmap.save(nameToSave);
-    } catch (const std::exception& ex) {
-        QString message = "Attempt to save file with the name '";
-        message.append(nameToSave);
-        message.append("' has failed with following error message\n\n");
-        message.append(QString::fromStdString(ex.what()));
-        QMessageBox::warning(nullptr, "Cannot save", message);
-    }
+    bool ok = pixmap.save(fname);
+    if (!ok)
+        QMessageBox::warning(nullptr, "Cannot save", "Cannot save picture in file " + fname);
 }
 
 void RealspaceWidget::updateScene()