diff --git a/Applications/DataExplorer/mainwindow.cpp b/Applications/DataExplorer/mainwindow.cpp
index 62c78169fe10b6b66b0530fc9430590fcb4842b3..b0a850888ba5002266faf9b1de6102d88dc3699a 100644
--- a/Applications/DataExplorer/mainwindow.cpp
+++ b/Applications/DataExplorer/mainwindow.cpp
@@ -497,8 +497,18 @@ void MainWindow::loadFile(ImportFileType::type t, const QString &fileName)
         else if (fi.suffix().toLower() == "gml")
         {
             GeoLib::IO::XmlGmlInterface xml(_project.getGEOObjects());
-            if (!xml.readFile(fileName))
-                OGSError::box("Failed to load geometry.\n Please see console for details.");
+            try
+            {
+                if (!xml.readFile(fileName))
+                    OGSError::box(
+                        "Failed to load geometry.\n Please see console for "
+                        "details.");
+            }
+            catch (std::runtime_error const& err)
+            {
+                OGSError::box(err.what(),
+                              "Failed to read file `" + fileName + "'");
+            }
         }
         // OpenGeoSys observation station files (incl. boreholes)
         else if (fi.suffix().toLower() == "stn")
diff --git a/Applications/FileIO/XmlIO/Qt/XmlPrjInterface.cpp b/Applications/FileIO/XmlIO/Qt/XmlPrjInterface.cpp
index f37e62bd8c3bfb24128e528d29ea9a773b1c7e6e..9a2b1a7118a3cf27b99676597256912ef162d07f 100644
--- a/Applications/FileIO/XmlIO/Qt/XmlPrjInterface.cpp
+++ b/Applications/FileIO/XmlIO/Qt/XmlPrjInterface.cpp
@@ -18,13 +18,14 @@
 #include <QtXml/QDomDocument>
 #include <logog/include/logog.hpp>
 
+#include "Applications/DataExplorer/Base/OGSError.h"
+#include "Applications/DataHolderLib/FemCondition.h"
+
 #include "BaseLib/BuildInfo.h"
 #include "BaseLib/FileFinder.h"
 #include "BaseLib/FileTools.h"
 #include "BaseLib/IO/Writer.h"
 
-#include "Applications/DataHolderLib/FemCondition.h"
-
 #include "GeoLib/GEOObjects.h"
 
 #include "GeoLib/IO/XmlIO/Qt/XmlGmlInterface.h"
@@ -75,7 +76,15 @@ int XmlPrjInterface::readFile(const QString& fileName)
         if (node_name == "geometry")
         {
             GeoLib::IO::XmlGmlInterface gml(_project.getGEOObjects());
-            gml.readFile(QString(path + file_name));
+            try
+            {
+                gml.readFile(QString(path + file_name));
+            }
+            catch (std::runtime_error const& err)
+            {
+                OGSError::box(err.what(),
+                              "Failed to read file `" + fileName + "'");
+            }
         }
         else if (node_name == "stations")
         {
diff --git a/Applications/Utils/GeoTools/MoveGeometry.cpp b/Applications/Utils/GeoTools/MoveGeometry.cpp
index ee5f58e3a68600faa97211f86e74bbcaffdb8798..573ee81377489850f22a017e5ef2aa110d3e8c80 100644
--- a/Applications/Utils/GeoTools/MoveGeometry.cpp
+++ b/Applications/Utils/GeoTools/MoveGeometry.cpp
@@ -50,8 +50,17 @@ int main(int argc, char *argv[])
 
     GeoLib::GEOObjects geo_objects;
     GeoLib::IO::XmlGmlInterface xml(geo_objects);
-    if (!xml.readFile(geo_input_arg.getValue()))
+    try
     {
+        if (!xml.readFile(geo_input_arg.getValue()))
+        {
+            return EXIT_FAILURE;
+        }
+    }
+    catch (std::runtime_error const& err)
+    {
+        ERR("Failed to read file `%s'.", geo_input_arg.getValue().c_str());
+        ERR("%s", err.what());
         return EXIT_FAILURE;
     }
 
diff --git a/Applications/Utils/GeoTools/TriangulatePolyline.cpp b/Applications/Utils/GeoTools/TriangulatePolyline.cpp
index f643e4fe01e9ccaf864618c845993872c8029a03..46484850ee6c79a7707968cc3adff5ce4d507dc2 100644
--- a/Applications/Utils/GeoTools/TriangulatePolyline.cpp
+++ b/Applications/Utils/GeoTools/TriangulatePolyline.cpp
@@ -56,9 +56,18 @@ int main(int argc, char *argv[])
 
     GeoLib::GEOObjects geo_objects;
     GeoLib::IO::XmlGmlInterface xml(geo_objects);
-    if (!xml.readFile(file_name))
+    try
     {
-        ERR ("Failed to load geometry file.");
+        if (!xml.readFile(file_name))
+        {
+            ERR("Failed to load geometry file.");
+            return EXIT_FAILURE;
+        }
+    }
+    catch (std::runtime_error const& err)
+    {
+        ERR("Failed to read file `%s'.", file_name.c_str());
+        ERR("%s", err.what());
         return EXIT_FAILURE;
     }
 
diff --git a/Applications/Utils/OGSFileConverter/OGSFileConverter.cpp b/Applications/Utils/OGSFileConverter/OGSFileConverter.cpp
index 9088768c7a4ce3dcb540055b87b5851b16c31e5c..dbcda6beab56113efb4dbe5353d8392f89973b97 100644
--- a/Applications/Utils/OGSFileConverter/OGSFileConverter.cpp
+++ b/Applications/Utils/OGSFileConverter/OGSFileConverter.cpp
@@ -53,11 +53,21 @@ void OGSFileConverter::convertGML2GLI(const QStringList &input, const QString &o
         if (fileExists(output_str))
             continue;
 
-        if (!xml.readFile(input_string))
+        try
         {
-            OGSError::box("Error reading geometry " + fi.fileName());
+            if (!xml.readFile(input_string))
+            {
+                OGSError::box("Error reading geometry " + fi.fileName());
+                continue;
+            }
+        }
+        catch (std::runtime_error const& err)
+        {
+            OGSError::box(err.what(),
+                          "Failed to read file `" + input_string + "'");
             continue;
         }
+
         std::vector<std::string> geo_names;
         geo_objects.getGeometryNames(geo_names);
         FileIO::Legacy::writeGLIFileV4(output_str, geo_names[0], geo_objects);