diff --git a/Applications/FileIO/GocadIO/GocadTSurfaceReader.cpp b/Applications/FileIO/GocadIO/GocadTSurfaceReader.cpp
index 53bce760347b17e6e9eb6717cdb49674336ff369..90a96a541977d218ad02d8e904f973bbb56c2de2 100644
--- a/Applications/FileIO/GocadIO/GocadTSurfaceReader.cpp
+++ b/Applications/FileIO/GocadIO/GocadTSurfaceReader.cpp
@@ -36,7 +36,7 @@ bool GocadTSurfaceReader::readFile()
     std::ifstream in(_file_name.c_str());
     if (!in.is_open())
     {
-        ERR("GocadTSurfaceReader::allSfc2Mesh(): Could not open file %s.",
+        ERR("GocadTSurfaceReader::readFile(): Could not open file %s.",
             _file_name.c_str());
         return false;
     }
@@ -171,6 +171,7 @@ void GocadTSurfaceReader::writeData(std::string const& file_name,
     }
     if (idx < _mesh_vec.size())
     {
+        INFO("Writing mesh \"%s\"", file_name.c_str());
         int data_mode = (write_binary) ? 2 : 0;
         bool compressed = (write_binary) ? true : false;
         MeshLib::IO::VtuInterface vtu(_mesh_vec[idx], data_mode, compressed);
@@ -181,6 +182,13 @@ void GocadTSurfaceReader::writeData(std::string const& file_name,
     return;
 }
 
+std::string getDelim(std::string const& str)
+{
+    std::size_t const bslash = str.find_first_of('\\');
+    char const delim = (bslash == str.npos) ? '/' : '\\';
+    return (str.back() == delim) ? "" : std::string(1, delim);
+}
+
 void GocadTSurfaceReader::writeData(std::string const& dir,
                                     bool write_binary) const
 {
@@ -190,10 +198,11 @@ void GocadTSurfaceReader::writeData(std::string const& dir,
         return;
     }
     std::size_t const n_meshes(_mesh_vec.size());
+
+    std::string const delim = getDelim(dir);
     for (std::size_t i = 0; i < n_meshes; ++i)
     {
-        std::string const delim = (dir.back() == '/') ? "" : "/";
-        writeData(dir + delim + _mesh_vec[i]->getName(), i, write_binary);
+        writeData(dir + delim + _mesh_vec[i]->getName() + ".vtu", i, write_binary);
     }
 }
 
diff --git a/Applications/Utils/FileConverter/CMakeLists.txt b/Applications/Utils/FileConverter/CMakeLists.txt
index f0fb66a6decd66e249ff36066350f6ccd70c3971..1aadd39f884916d58ca63d9dcb5866678b42ddcb 100644
--- a/Applications/Utils/FileConverter/CMakeLists.txt
+++ b/Applications/Utils/FileConverter/CMakeLists.txt
@@ -52,6 +52,14 @@ target_link_libraries(GocadSGridReader
     ${Boost_LIBRARIES}
 )
 
+add_executable(GocadTSurfaceReader GocadTSurfaceReader.cpp)
+set_target_properties(GocadTSurfaceReader PROPERTIES FOLDER Utilities)
+target_link_libraries(GocadTSurfaceReader
+    MeshLib
+    ApplicationsFileIO
+    ${Boost_LIBRARIES}
+)
+
 add_executable(Mesh2Raster MeshToRaster.cpp)
 set_target_properties(Mesh2Raster PROPERTIES FOLDER Utilities)
 target_link_libraries(Mesh2Raster MeshLib)
diff --git a/Applications/Utils/FileConverter/GocadTSurfaceReader.cpp b/Applications/Utils/FileConverter/GocadTSurfaceReader.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b9778c1d6cad6f9c8c7fb551236fd0672f435790
--- /dev/null
+++ b/Applications/Utils/FileConverter/GocadTSurfaceReader.cpp
@@ -0,0 +1,53 @@
+/**
+ *
+ * @copyright
+ * Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/LICENSE.txt
+ */
+
+#include <tclap/CmdLine.h>
+
+#include "BaseLib/BuildInfo.h"
+#include "Applications/ApplicationsLib/LogogSetup.h"
+#include "Applications/FileIO/GocadIO/GocadTSurfaceReader.h"
+
+int main(int argc, char* argv[])
+{
+    ApplicationsLib::LogogSetup logog_setup;
+
+    TCLAP::CmdLine cmd(
+        "Reads a Gocad triangular surfaces file (*.ts) and writes the "
+        "data into one or more VTU unstructured grids.\n\n"
+        "OpenGeoSys-6 software, version " +
+            BaseLib::BuildInfo::ogs_version +
+            ".\n"
+            "Copyright (c) 2012-2019, OpenGeoSys Community "
+            "(http://www.opengeosys.org)",
+        ' ', BaseLib::BuildInfo::ogs_version);
+
+    TCLAP::ValueArg<std::string> input_arg(
+        "i", "input-file", "Gocad triangular surfaces file (*.ts)", true, "",
+        "filename.ts");
+    cmd.add(input_arg);
+
+    TCLAP::ValueArg<std::string> output_arg(
+        "o", "output-dir", "output directory", true, "",
+        "output dir");
+    cmd.add(output_arg);
+
+    TCLAP::ValueArg<bool> write_binary_arg(
+        "b", "write-binary",
+        "if set, OGS-Meshes will be written in binary format",
+        false, false, "true/false");
+    cmd.add(write_binary_arg);
+
+    cmd.parse(argc, argv);
+
+    FileIO::Gocad::GocadTSurfaceReader gcts(input_arg.getValue());
+    gcts.readFile();
+    gcts.writeData(output_arg.getValue(), write_binary_arg.getValue());
+
+    return 0;
+}