diff --git a/Applications/CMakeLists.txt b/Applications/CMakeLists.txt
index 855b3a35ae5aa8f344989d4ec18ef143c3c4b47e..c900269b5761f8622c02893b3bac3d03811fbc61 100644
--- a/Applications/CMakeLists.txt
+++ b/Applications/CMakeLists.txt
@@ -1,6 +1,7 @@
 include(${PROJECT_SOURCE_DIR}/scripts/cmake/OGSEnabledElements.cmake)
 
 add_subdirectory(ApplicationsLib)
+add_subdirectory(FileIO)
 
 if(OGS_BUILD_UTILS AND NOT IS_SUBPROJECT)
     add_subdirectory(Utils)
diff --git a/FileIO/ImportFileTypes.h b/Applications/DataExplorer/Base/ImportFileTypes.h
similarity index 100%
rename from FileIO/ImportFileTypes.h
rename to Applications/DataExplorer/Base/ImportFileTypes.h
diff --git a/Applications/DataExplorer/DataExplorer.cmake b/Applications/DataExplorer/DataExplorer.cmake
index ea1a8c0f42e592564df577b2107f3bfee917f87b..e1f69fb78742f4cb3dea43db0a65597b900abfe3 100644
--- a/Applications/DataExplorer/DataExplorer.cmake
+++ b/Applications/DataExplorer/DataExplorer.cmake
@@ -8,6 +8,7 @@ set(SOURCES
 set(SOURCE_DIR_REL ${CMAKE_CURRENT_SOURCE_DIR}/../..)
 include_directories(
     ${SOURCE_DIR_REL}/Applications/Utils/OGSFileConverter
+    ${SOURCE_DIR_REL}/Applications/FileIO
     ${SOURCE_DIR_REL}/BaseLib
     ${SOURCE_DIR_REL}/MathLib
     ${SOURCE_DIR_REL}/GeoLib
@@ -53,6 +54,7 @@ target_link_libraries(DataExplorer
     Qt4::QtXml
     Qt4::QtNetwork
     ApplicationsLib
+    ApplicationsFileIO
     DataHolderLib
     FileIO
     InSituLib
diff --git a/Applications/DataExplorer/DataView/CMakeLists.txt b/Applications/DataExplorer/DataView/CMakeLists.txt
index de5ab6892dabd2f7b6715db451efe011e43d4b14..31f5a0932b7c354a70b4bb47111da00ac90a84fe 100644
--- a/Applications/DataExplorer/DataView/CMakeLists.txt
+++ b/Applications/DataExplorer/DataView/CMakeLists.txt
@@ -104,6 +104,7 @@ include_directories(
     ${CMAKE_CURRENT_BINARY_DIR}/../Base
     ${CMAKE_CURRENT_BINARY_DIR}/DiagramView
     ${CMAKE_CURRENT_BINARY_DIR}/StratView
+    ${SOURCE_DIR_REL}/Applications/FileIO
     ${SOURCE_DIR_REL}/BaseLib
     ${SOURCE_DIR_REL}/MathLib
     ${SOURCE_DIR_REL}/GeoLib
@@ -132,6 +133,7 @@ add_library(QtDataView
 
 target_link_libraries(QtDataView Qt4::QtCore Qt4::QtGui)
 target_link_libraries(QtDataView
+    ApplicationsFileIO
     FileIO
     DataHolderLib
     QtBase
diff --git a/Applications/DataExplorer/DataView/MshView.cpp b/Applications/DataExplorer/DataView/MshView.cpp
index c4de1596a785d252eea99af6b537b84603525857..e644cbdfea421374d7b1d2132861481e3c6a8058 100644
--- a/Applications/DataExplorer/DataView/MshView.cpp
+++ b/Applications/DataExplorer/DataView/MshView.cpp
@@ -23,7 +23,7 @@
 #include <QObject>
 #include <QSettings>
 
-#include "FileIO/SHPInterface.h"
+#include "SHPInterface.h"
 #include "FileIO/TetGenInterface.h"
 #include "GeoLib/IO/AsciiRasterInterface.h"
 
diff --git a/Applications/DataExplorer/VtkVis/CMakeLists.txt b/Applications/DataExplorer/VtkVis/CMakeLists.txt
index ed6fbe94b3a776c69f30f8bed13b6ed60ecbaac9..e0a717103df44130cd2d95b335db77cf9b8be857 100644
--- a/Applications/DataExplorer/VtkVis/CMakeLists.txt
+++ b/Applications/DataExplorer/VtkVis/CMakeLists.txt
@@ -99,6 +99,7 @@ source_group("UI Files" FILES ${UIS})
 set(SOURCE_DIR_REL ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
 set(GUI_SOURCE_DIR_REL ${CMAKE_CURRENT_SOURCE_DIR}/..)
 include_directories(
+    ${SOURCE_DIR_REL}/Applications/FileIO
     ${SOURCE_DIR_REL}/BaseLib
     ${SOURCE_DIR_REL}/GeoLib
     ${SOURCE_DIR_REL}/MathLib
diff --git a/Applications/DataExplorer/VtkVis/VtkAlgorithmProperties.cpp b/Applications/DataExplorer/VtkVis/VtkAlgorithmProperties.cpp
index 918e5d37ab6cf0db49bcfede5d1c0d44e42eada4..56b5e2d3a4c9a2aac992607a084bdcacb4d0e346 100644
--- a/Applications/DataExplorer/VtkVis/VtkAlgorithmProperties.cpp
+++ b/Applications/DataExplorer/VtkVis/VtkAlgorithmProperties.cpp
@@ -22,7 +22,7 @@
 #include <vtkTexture.h>
 
 #include "VtkColorLookupTable.h"
-#include "FileIO/XmlIO/Qt/XmlLutReader.h"
+#include "XmlIO/Qt/XmlLutReader.h"
 
 VtkAlgorithmProperties::VtkAlgorithmProperties(QObject* parent /*= nullptr*/)
     : QObject(parent)
diff --git a/Applications/DataExplorer/VtkVis/VtkCompositeColormapToImageFilter.cpp b/Applications/DataExplorer/VtkVis/VtkCompositeColormapToImageFilter.cpp
index 44ec587270d843d21ce60a7a61e9e4261b81f277..0572b828130db69e79400c19452a6bfe9be867c9 100644
--- a/Applications/DataExplorer/VtkVis/VtkCompositeColormapToImageFilter.cpp
+++ b/Applications/DataExplorer/VtkVis/VtkCompositeColormapToImageFilter.cpp
@@ -25,7 +25,7 @@
 #include <QFileDialog>
 
 #include "VtkColorLookupTable.h"
-#include "FileIO/XmlIO/Qt/XmlLutReader.h"
+#include "XmlIO/Qt/XmlLutReader.h"
 
 VtkCompositeColormapToImageFilter::VtkCompositeColormapToImageFilter( vtkAlgorithm* inputAlgorithm )
     : VtkCompositeFilter(inputAlgorithm)
diff --git a/Applications/DataExplorer/mainwindow.cpp b/Applications/DataExplorer/mainwindow.cpp
index 8854e1d5e0ec424b950547c2a946a5567178b31d..81ec73a23d38ad1d63c585fb580b5a8e63ff9d0d 100644
--- a/Applications/DataExplorer/mainwindow.cpp
+++ b/Applications/DataExplorer/mainwindow.cpp
@@ -60,14 +60,14 @@
 #include "InSituLib/VtkMappedMeshSource.h"
 
 // FileIO includes
-#include "FileIO/GMSInterface.h"
+#include "GMSInterface.h"
 #include "MeshLib/IO/FEFLOW/FEFLOWMeshInterface.h"
 #include "MeshLib/IO/Legacy/MeshIO.h"
 #include "MeshLib/IO/readMeshFromFile.h"
 #include "FileIO/GMSHInterface.h"
 #include "FileIO/TetGenInterface.h"
-#include "FileIO/PetrelInterface.h"
-#include "FileIO/XmlIO/Qt/XmlGspInterface.h"
+#include "PetrelInterface.h"
+#include "XmlIO/Qt/XmlGspInterface.h"
 #include "GeoLib/IO/FEFLOW/FEFLOWGeoInterface.h"
 #include "GeoLib/IO/XmlIO/Qt/XmlGmlInterface.h"
 #include "GeoLib/IO/XmlIO/Qt/XmlStnInterface.h"
diff --git a/Applications/FileIO/CMakeLists.txt b/Applications/FileIO/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d4ae93cbf6d8a673c1a18604e1c1aec516471058
--- /dev/null
+++ b/Applications/FileIO/CMakeLists.txt
@@ -0,0 +1,49 @@
+GET_SOURCE_FILES(SOURCES_FileIO)
+set(SOURCES ${SOURCES_FileIO})
+if(NOT Shapelib_FOUND)
+    list(REMOVE_ITEM SOURCES SHPInterface.h SHPInterface.cpp)
+endif()
+GET_SOURCE_FILES(SOURCES_BASE_XML XmlIO)
+set(SOURCES ${SOURCES} ${SOURCES_BASE_XML})
+GET_SOURCE_FILES(SOURCES_BOOST_XML XmlIO/Boost)
+set(SOURCES ${SOURCES} ${SOURCES_BOOST_XML})
+if(QT4_FOUND)
+    GET_SOURCE_FILES(SOURCES_QT_XML XmlIO/Qt)
+    set(SOURCES ${SOURCES} ${SOURCES_QT_XML})
+endif()
+GET_SOURCE_FILES(SOURCES_RAPID_XML XmlIO/Rapid)
+set(SOURCES ${SOURCES} ${SOURCES_RAPID_XML})
+
+include(${PROJECT_SOURCE_DIR}/scripts/cmake/OGSEnabledElements.cmake)
+
+# Create the library
+add_library(ApplicationsFileIO ${SOURCES})
+target_link_libraries(ApplicationsFileIO DataHolderLib)
+
+if(QT4_FOUND)
+    target_link_libraries(ApplicationsFileIO Qt4::QtXml Qt4::QtXmlPatterns)
+    if(WIN32 AND CMAKE_CROSSCOMPILING AND OPENSSL_FOUND)
+        target_link_libraries(ApplicationsFileIO Qt4::QtNetwork ${OPENSSL_LIBRARIES} ws2_32)
+    endif()
+endif()
+
+if(Shapelib_FOUND)
+    target_link_libraries(ApplicationsFileIO ${Shapelib_LIBRARIES})
+endif()
+
+ADD_VTK_DEPENDENCY(ApplicationsFileIO)
+
+if(TARGET Eigen)
+    add_dependencies(ApplicationsFileIO Eigen)
+endif()
+
+if(TARGET Boost)
+    add_dependencies(ApplicationsFileIO Boost)
+endif()
+
+file(GLOB XSD_FILES . XmlIO/*.xsd)
+if(APPLE AND OGS_BUILD_GUI)
+    install(FILES ${XSD_FILES} DESTINATION ${CMAKE_BINARY_DIR}/_CPack_Packages/Darwin/DragNDrop/${CPACK_PACKAGE_FILE_NAME}/ALL_IN_ONE/DataExplorer.app/Contents/MacOS COMPONENT ogs_gui)
+else()
+    install(FILES ${XSD_FILES} DESTINATION bin COMPONENT ogs_cli)
+endif()
diff --git a/FileIO/GMSInterface.cpp b/Applications/FileIO/GMSInterface.cpp
similarity index 100%
rename from FileIO/GMSInterface.cpp
rename to Applications/FileIO/GMSInterface.cpp
diff --git a/FileIO/GMSInterface.h b/Applications/FileIO/GMSInterface.h
similarity index 100%
rename from FileIO/GMSInterface.h
rename to Applications/FileIO/GMSInterface.h
diff --git a/FileIO/PetrelInterface.cpp b/Applications/FileIO/PetrelInterface.cpp
similarity index 100%
rename from FileIO/PetrelInterface.cpp
rename to Applications/FileIO/PetrelInterface.cpp
diff --git a/FileIO/PetrelInterface.h b/Applications/FileIO/PetrelInterface.h
similarity index 100%
rename from FileIO/PetrelInterface.h
rename to Applications/FileIO/PetrelInterface.h
diff --git a/FileIO/SHPInterface.cpp b/Applications/FileIO/SHPInterface.cpp
similarity index 100%
rename from FileIO/SHPInterface.cpp
rename to Applications/FileIO/SHPInterface.cpp
diff --git a/FileIO/SHPInterface.h b/Applications/FileIO/SHPInterface.h
similarity index 100%
rename from FileIO/SHPInterface.h
rename to Applications/FileIO/SHPInterface.h
diff --git a/FileIO/OpenGeoSysCND.xsd b/Applications/FileIO/XmlIO/OpenGeoSysCND.xsd
similarity index 99%
rename from FileIO/OpenGeoSysCND.xsd
rename to Applications/FileIO/XmlIO/OpenGeoSysCND.xsd
index 074100087e2144bb579e8c1db6f4cedb44a13f65..07874661b214d165c97b23865e1d563f0907c05c 100644
--- a/FileIO/OpenGeoSysCND.xsd
+++ b/Applications/FileIO/XmlIO/OpenGeoSysCND.xsd
@@ -43,8 +43,8 @@
     </xs:sequence>
     <xs:attribute name="geometry" type="xs:string" use="required" />
   </xs:complexType>
-  
-  
+
+
   <!-- definition of "extCondType" as an extension of "CondType" -->
   <xs:complexType name="extCondType">
     <xs:complexContent>
@@ -56,7 +56,7 @@
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
-  
+
 
   <!-- definition of file content -->
   <xs:element name="OpenGeoSysCond">
@@ -72,7 +72,7 @@
             </xs:sequence>
           </xs:complexType>
         </xs:element>
-          
+
         <!-- definition of boundary conditions -->
         <xs:element name="BoundaryConditions" minOccurs="0" maxOccurs="1">
           <xs:complexType>
@@ -90,9 +90,9 @@
             </xs:sequence>
           </xs:complexType>
         </xs:element>
-      
+
       </xs:sequence>
     </xs:complexType>
   </xs:element>
-    
+
 </xs:schema>
diff --git a/FileIO/OpenGeoSysNum.xsd b/Applications/FileIO/XmlIO/OpenGeoSysNum.xsd
similarity index 98%
rename from FileIO/OpenGeoSysNum.xsd
rename to Applications/FileIO/XmlIO/OpenGeoSysNum.xsd
index f1436d7c8a924b37fd2ca572d19f54b018b4eb19..befbf098924bffadd5898d024686bd5f8cfc9a92 100644
--- a/FileIO/OpenGeoSysNum.xsd
+++ b/Applications/FileIO/XmlIO/OpenGeoSysNum.xsd
@@ -8,7 +8,7 @@
       <xs:enumeration value="PETSc" />
     </xs:restriction>
   </xs:simpleType>
-  
+
   <xs:simpleType name="NonLinearType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="Newton" />
@@ -35,7 +35,7 @@
             <xs:attribute name="Library" type="LibraryType" use="required" />
           </xs:complexType>
         </xs:element>
-          
+
         <!-- definition of temporal discretization -->
         <xs:element name="IterationScheme" maxOccurs="1">
           <xs:complexType>
@@ -46,7 +46,7 @@
             </xs:sequence>
           </xs:complexType>
         </xs:element>
-        
+
         <!-- definition of convergence criteria -->
         <xs:element name="Convergence" minOccurs="0" maxOccurs="1">
       <xs:complexType>
@@ -57,9 +57,9 @@
             </xs:sequence>
           </xs:complexType>
         </xs:element>
-        
+
       </xs:sequence>
     </xs:complexType>
   </xs:element>
-    
+
 </xs:schema>
diff --git a/FileIO/OpenGeoSysProject.xsd b/Applications/FileIO/XmlIO/OpenGeoSysProject.xsd
similarity index 96%
rename from FileIO/OpenGeoSysProject.xsd
rename to Applications/FileIO/XmlIO/OpenGeoSysProject.xsd
index a44745ae80dcd14c37e599fcd61086f499cbed71..f721a815f9d8984d3ecb21b98cb84791159af4af 100644
--- a/FileIO/OpenGeoSysProject.xsd
+++ b/Applications/FileIO/XmlIO/OpenGeoSysProject.xsd
@@ -2,7 +2,7 @@
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 
   <!-- OpenGeoSysProject schema; initial implementation: Karsten Rink, 2010-08-20 -->
-  
+
   <!-- object containing just a source file definition -->
   <xs:complexType name="projectElement">
     <xs:sequence>
@@ -20,7 +20,7 @@
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
-  
+
   <!-- msh-object with optional geometry- and texture-reference -->
   <xs:complexType name="mshElement">
     <xs:complexContent>
@@ -32,9 +32,9 @@
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
-  
-  
-  <!-- definition of file content -->    
+
+
+  <!-- definition of file content -->
   <xs:element name="OpenGeoSysProject">
     <xs:complexType>
       <xs:sequence>
@@ -52,7 +52,7 @@
     <xs:element name="fct" type="projectElement" minOccurs="0" maxOccurs="unbounded" />
     <xs:element name="stn" type="projectElement" minOccurs="0" maxOccurs="unbounded" />
       </xs:sequence>
-    </xs:complexType>  
-  </xs:element> 
+    </xs:complexType>
+  </xs:element>
 
 </xs:schema>
diff --git a/FileIO/XmlIO/Qt/XmlGspInterface.cpp b/Applications/FileIO/XmlIO/Qt/XmlGspInterface.cpp
similarity index 100%
rename from FileIO/XmlIO/Qt/XmlGspInterface.cpp
rename to Applications/FileIO/XmlIO/Qt/XmlGspInterface.cpp
diff --git a/FileIO/XmlIO/Qt/XmlGspInterface.h b/Applications/FileIO/XmlIO/Qt/XmlGspInterface.h
similarity index 100%
rename from FileIO/XmlIO/Qt/XmlGspInterface.h
rename to Applications/FileIO/XmlIO/Qt/XmlGspInterface.h
diff --git a/FileIO/XmlIO/Qt/XmlLutReader.h b/Applications/FileIO/XmlIO/Qt/XmlLutReader.h
similarity index 100%
rename from FileIO/XmlIO/Qt/XmlLutReader.h
rename to Applications/FileIO/XmlIO/Qt/XmlLutReader.h
diff --git a/FileIO/XmlIO/Qt/XmlNumInterface.cpp b/Applications/FileIO/XmlIO/Qt/XmlNumInterface.cpp
similarity index 100%
rename from FileIO/XmlIO/Qt/XmlNumInterface.cpp
rename to Applications/FileIO/XmlIO/Qt/XmlNumInterface.cpp
diff --git a/FileIO/XmlIO/Qt/XmlNumInterface.h b/Applications/FileIO/XmlIO/Qt/XmlNumInterface.h
similarity index 100%
rename from FileIO/XmlIO/Qt/XmlNumInterface.h
rename to Applications/FileIO/XmlIO/Qt/XmlNumInterface.h
diff --git a/FileIO/CMakeLists.txt b/FileIO/CMakeLists.txt
index b0bbca03fcda55bbd3b9f3512e1296c5cb555588..6a6117542348ea7c4adf4d1853bc35b98d99190a 100644
--- a/FileIO/CMakeLists.txt
+++ b/FileIO/CMakeLists.txt
@@ -1,39 +1,11 @@
 GET_SOURCE_FILES(SOURCES_FileIO)
 set(SOURCES ${SOURCES_FileIO})
-if(NOT Shapelib_FOUND)
-    list(REMOVE_ITEM SOURCES SHPInterface.h SHPInterface.cpp)
-endif()
-
-GET_SOURCE_FILES(SOURCES_LEGACY Legacy)
 GET_SOURCE_FILES(SOURCES_GMSHIO GmshIO)
-GET_SOURCE_FILES(SOURCES_VTK VtkIO)
-set(SOURCES ${SOURCES} ${SOURCES_LEGACY} ${SOURCES_GMSHIO} ${SOURCES_VTK})
-
-GET_SOURCE_FILES(SOURCES_BASE_XML XmlIO)
-set(SOURCES ${SOURCES} ${SOURCES_BASE_XML})
-GET_SOURCE_FILES(SOURCES_BOOST_XML XmlIO/Boost)
-set(SOURCES ${SOURCES} ${SOURCES_BOOST_XML})
-if(QT4_FOUND)
-    GET_SOURCE_FILES(SOURCES_QT_XML XmlIO/Qt)
-    set(SOURCES ${SOURCES} ${SOURCES_QT_XML})
-endif()
-
-include(${PROJECT_SOURCE_DIR}/scripts/cmake/OGSEnabledElements.cmake)
+set(SOURCES ${SOURCES} ${SOURCES_GMSHIO})
 
 # Create the library
 add_library(FileIO ${SOURCES})
-target_link_libraries(FileIO DataHolderLib)
-
-if(QT4_FOUND)
-    target_link_libraries(FileIO Qt4::QtXml Qt4::QtXmlPatterns)
-    if(WIN32 AND CMAKE_CROSSCOMPILING AND OPENSSL_FOUND)
-        target_link_libraries(FileIO Qt4::QtNetwork ${OPENSSL_LIBRARIES} ws2_32)
-    endif()
-endif()
-
-if(Shapelib_FOUND)
-    target_link_libraries(FileIO ${Shapelib_LIBRARIES})
-endif()
+target_link_libraries(FileIO GeoLib MeshLib)
 
 ADD_VTK_DEPENDENCY(FileIO)
 
@@ -45,9 +17,3 @@ if(TARGET Boost)
     add_dependencies(FileIO Boost)
 endif()
 
-file(GLOB XSD_FILES . *.xsd)
-if(APPLE AND OGS_BUILD_GUI)
-    install(FILES ${XSD_FILES} DESTINATION ${CMAKE_BINARY_DIR}/_CPack_Packages/Darwin/DragNDrop/${CPACK_PACKAGE_FILE_NAME}/ALL_IN_ONE/DataExplorer.app/Contents/MacOS COMPONENT ogs_gui)
-else()
-    install(FILES ${XSD_FILES} DESTINATION bin COMPONENT ogs_cli)
-endif()
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 3b6a680ad231bf1a0653a9460360689a8fc5c703..6c3ca22f10f333e19c4efc3a02ba20393510693a 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -32,6 +32,7 @@ set_target_properties(testrunner PROPERTIES FOLDER Testing)
 
 target_link_libraries(testrunner
     ApplicationsLib
+    ApplicationsFileIO
     AssemblerLib
     FileIO
     GTest
diff --git a/Tests/FileIO/TestGmsInterface.cpp b/Tests/FileIO/TestGmsInterface.cpp
index 39695bdea31aceb1088b4a8050bda5c73d9aed5b..a98c2e7042640d1526a0432aa078195d2df37608 100644
--- a/Tests/FileIO/TestGmsInterface.cpp
+++ b/Tests/FileIO/TestGmsInterface.cpp
@@ -13,7 +13,7 @@
 #include "gtest/gtest.h"
 
 #include "BaseLib/BuildInfo.h"
-#include "FileIO/GMSInterface.h"
+#include "Applications/FileIO/GMSInterface.h"
 #include "MeshLib/Mesh.h"
 #include "MeshLib/MeshInformation.h"