diff --git a/App/main.cpp b/App/main.cpp
index 090eaa3d32af627157899cd606c4640966c6224b..3c84275eda5a28956809b3256652a6aaae180e3d 100644
--- a/App/main.cpp
+++ b/App/main.cpp
@@ -27,51 +27,63 @@
 #include <QMetaType>
 #include <QtGlobal>
 
+void custom_terminate_handler()
+{
+    try {
+        std::rethrow_exception(std::current_exception());
+    } catch (const std::exception& ex) {
+        std::cerr << "terminate called after throwing an instance of 'std::runtime_error'\n"
+                  << "what():" << std::endl;
+        std::cerr << ex.what() << std::endl;
+
+        int argc;
+        char* argv[1];
+        QApplication app(argc, argv); // needed to run QMessageBox
+        QMessageBox msgbox(QMessageBox::Critical, "BornAgain: fatal bug",
+                           QString("Sorry, you encountered a fatal bug.\n"
+                                   "The application will terminate.\n"
+                                   "Please note the following and inform the maintainers.\n\n")
+                               + ex.what() + "\n",
+                           QMessageBox::Ok, nullptr);
+        msgbox.exec();
+    }
+}
+
 int main(int argc, char* argv[])
 {
+    std::set_terminate(custom_terminate_handler);
+
     ApplicationOptions options(argc, argv);
 
     QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedStates));
     qRegisterMetaType<QVector<double>>("QVector<double>");
 
     int ret = -1;
-    try {
-        QApplication app(argc, argv);
-        app.setApplicationName("BornAgain");
-        app.setApplicationVersion(GUI::Base::Path::getBornAgainVersionString());
-        app.setOrganizationName("BornAgain");
+    QApplication app(argc, argv);
+    app.setApplicationName("BornAgain");
+    app.setApplicationVersion(GUI::Base::Path::getBornAgainVersionString());
+    app.setOrganizationName("BornAgain");
 #ifndef Q_OS_MAC
-        app.setWindowIcon(QIcon(":/images/BornAgain.ico"));
+    app.setWindowIcon(QIcon(":/images/BornAgain.ico"));
 #endif
 
-        ApplicationSettings applicationSettings;
+    ApplicationSettings applicationSettings;
 
-        auto style = applicationSettings.styleToUse();
-        applicationSettings.loadStyle(style);
+    auto style = applicationSettings.styleToUse();
+    applicationSettings.loadStyle(style);
 
-        QString dir = GUI::Base::Path::appDataFolder();
-        if (!QDir().exists(dir))
-            QDir().mkpath(dir);
+    QString dir = GUI::Base::Path::appDataFolder();
+    if (!QDir().exists(dir))
+        QDir().mkpath(dir);
 
-        MainWindow win;
-        GUI::Global::mainWindow = &win;
-        if (options.find("geometry"))
-            win.resize(options.mainWindowSize());
-        if (options.find("project-file"))
-            win.loadProject(options.projectFile());
-        win.show();
+    MainWindow win;
+    GUI::Global::mainWindow = &win;
+    if (options.find("geometry"))
+        win.resize(options.mainWindowSize());
+    if (options.find("project-file"))
+        win.loadProject(options.projectFile());
+    win.show();
 
-        ret = app.exec();
-    } catch (const std::exception& ex) {
-        QApplication app(argc, argv);
-        QMessageBox msgbox(QMessageBox::Critical, "BornAgain: fatal bug",
-                           QString("Sorry, you encountered a fatal bug.\n"
-                                   "The application will terminate.\n"
-                                   "Please note the following and inform the maintainers.\n\n")
-                               + ex.what() + "\n",
-                           QMessageBox::Ok, nullptr);
-        msgbox.exec();
-        return 1;
-    }
+    ret = app.exec();
     return ret;
 }