diff --git a/AMDiS/CMakeLists.txt b/AMDiS/CMakeLists.txt
index 5a0b88c58c3fa491084c0aa4571bce2f141acd07..c9ab23047aa1cd284ad851b7d4700d4286fc52aa 100644
--- a/AMDiS/CMakeLists.txt
+++ b/AMDiS/CMakeLists.txt
@@ -54,7 +54,7 @@ endif(Boost_FOUND)
 SET(LIB_DIR ./lib)
 SET(SOURCE_DIR ${AMDiS_SOURCE_DIR})
 SET(AMDIS_SRC ${SOURCE_DIR}/DOFIndexed.cc 
-	      ${SOURCE_DIR}/GNUPlotWriter.cc 
+	      ${SOURCE_DIR}/io/GNUPlotWriter.cc 
 	      ${SOURCE_DIR}/VertexVector.cc 
 	      ${SOURCE_DIR}/PeriodicBC.cc 
 	      ${SOURCE_DIR}/Recovery.cc 
@@ -73,9 +73,9 @@ SET(AMDIS_SRC ${SOURCE_DIR}/DOFIndexed.cc
 	      ${SOURCE_DIR}/CreatorMap.cc 
 	      ${SOURCE_DIR}/ProblemInterpolScal.cc 
 	      ${SOURCE_DIR}/ProblemInterpolVec.cc 
-              ${SOURCE_DIR}/MacroInfo.cc
-	      ${SOURCE_DIR}/MacroReader.cc 
-	      ${SOURCE_DIR}/ValueReader.cc 
+              ${SOURCE_DIR}/io/MacroInfo.cc
+	      ${SOURCE_DIR}/io/MacroReader.cc 
+	      ${SOURCE_DIR}/io/ValueReader.cc 
 	      ${SOURCE_DIR}/Projection.cc 
 	      ${SOURCE_DIR}/SubAssembler.cc 
 	      ${SOURCE_DIR}/ZeroOrderAssembler.cc 
@@ -89,8 +89,8 @@ SET(AMDIS_SRC ${SOURCE_DIR}/DOFIndexed.cc
 	      ${SOURCE_DIR}/BoundaryManager.cc 
 	      ${SOURCE_DIR}/DirichletBC.cc 
 	      ${SOURCE_DIR}/RobinBC.cc  
-	      ${SOURCE_DIR}/FileWriter.cc 
-	      ${SOURCE_DIR}/ElementFileWriter.cc 
+	      ${SOURCE_DIR}/io/FileWriter.cc 
+	      ${SOURCE_DIR}/io/ElementFileWriter.cc 
 	      ${SOURCE_DIR}/ElInfo.cc 
 	      ${SOURCE_DIR}/ElInfoStack.cc 
 	      ${SOURCE_DIR}/OperatorTerm.cc 
@@ -126,7 +126,7 @@ SET(AMDIS_SRC ${SOURCE_DIR}/DOFIndexed.cc
 	      ${SOURCE_DIR}/Lagrange.cc 
 	      ${SOURCE_DIR}/Line.cc 
 	      ${SOURCE_DIR}/MacroElement.cc 
-	      ${SOURCE_DIR}/MacroWriter.cc 
+	      ${SOURCE_DIR}/io/MacroWriter.cc 
 	      ${SOURCE_DIR}/Parameters.cc 
 	      ${SOURCE_DIR}/Parametric.cc 
 	      ${SOURCE_DIR}/Quadrature.cc 
@@ -139,19 +139,18 @@ SET(AMDIS_SRC ${SOURCE_DIR}/DOFIndexed.cc
 	      ${SOURCE_DIR}/Traverse.cc 
 	      ${SOURCE_DIR}/TraverseParallel.cc 
 	      ${SOURCE_DIR}/Triangle.cc 
-	      ${SOURCE_DIR}/TecPlotWriter.cc 
-	      ${SOURCE_DIR}/ValueWriter.cc 
-	      ${SOURCE_DIR}/VtkWriter.cc 
-	      ${SOURCE_DIR}/PngWriter.cc 
-	      ${SOURCE_DIR}/PovrayWriter.cc 
-	      ${SOURCE_DIR}/DataCollector.cc 
+	      ${SOURCE_DIR}/io/ValueWriter.cc 
+	      ${SOURCE_DIR}/io/VtkWriter.cc 
+	      ${SOURCE_DIR}/io/PngWriter.cc 
+	      ${SOURCE_DIR}/io/PovrayWriter.cc 
+	      ${SOURCE_DIR}/io/DataCollector.cc 
 	      ${SOURCE_DIR}/ScalableQuadrature.cc 
 	      ${SOURCE_DIR}/SubElInfo.cc 
 	      ${SOURCE_DIR}/parallel/InteriorBoundary.cc 
 	      ${SOURCE_DIR}/ElementDofIterator.cc 
 	      ${SOURCE_DIR}/Debug.cc
-	      ${SOURCE_DIR}/ArhReader.cc
-	      ${SOURCE_DIR}/ArhWriter.cc
+	      ${SOURCE_DIR}/io/ArhReader.cc
+	      ${SOURCE_DIR}/io/ArhWriter.cc
               ${SOURCE_DIR}/time/RosenbrockAdaptInstationary.cc 
 	      ${SOURCE_DIR}/time/RosenbrockStationary.cc 
 	      ${SOURCE_DIR}/time/RosenbrockMethod.cc
diff --git a/AMDiS/bin/Makefile.am b/AMDiS/bin/Makefile.am
index dfd523bd2103f5a486d68eeb2a3515048a18f74c..ce0437f83b61419a43a6c0536fe766965afb07e7 100644
--- a/AMDiS/bin/Makefile.am
+++ b/AMDiS/bin/Makefile.am
@@ -62,7 +62,7 @@ endif
 libamdis_la_SOURCES =  \
 $(PARALLEL_AMDIS_SOURCES) \
 $(SOURCE_DIR)/DOFIndexed.h $(SOURCE_DIR)/DOFIndexed.cc \
-$(SOURCE_DIR)/GNUPlotWriter.h $(SOURCE_DIR)/GNUPlotWriter.cc \
+$(SOURCE_DIR)/io/GNUPlotWriter.h $(SOURCE_DIR)/io/GNUPlotWriter.cc \
 $(SOURCE_DIR)/VertexVector.h $(SOURCE_DIR)/VertexVector.cc \
 $(SOURCE_DIR)/PeriodicBC.h $(SOURCE_DIR)/PeriodicBC.cc \
 $(SOURCE_DIR)/Recovery.h $(SOURCE_DIR)/Recovery.cc \
@@ -87,9 +87,9 @@ $(SOURCE_DIR)/ProblemInterpolVec.h $(SOURCE_DIR)/ProblemInterpolVec.cc \
 $(SOURCE_DIR)/Serializable.h \
 $(SOURCE_DIR)/BallProject.h \
 $(SOURCE_DIR)/CylinderProject.h \
-$(SOURCE_DIR)/MacroInfo.h $(SOURCE_DIR)/MacroInfo.cc \
-$(SOURCE_DIR)/MacroReader.h $(SOURCE_DIR)/MacroReader.cc \
-$(SOURCE_DIR)/ValueReader.h $(SOURCE_DIR)/ValueReader.cc \
+$(SOURCE_DIR)/io/MacroInfo.h $(SOURCE_DIR)/io/MacroInfo.cc \
+$(SOURCE_DIR)/io/MacroReader.h $(SOURCE_DIR)/io/MacroReader.cc \
+$(SOURCE_DIR)/io/ValueReader.h $(SOURCE_DIR)/io/ValueReader.cc \
 $(SOURCE_DIR)/Projection.h $(SOURCE_DIR)/Projection.cc \
 $(SOURCE_DIR)/SubAssembler.h $(SOURCE_DIR)/SubAssembler.cc \
 $(SOURCE_DIR)/ZeroOrderAssembler.h $(SOURCE_DIR)/ZeroOrderAssembler.cc \
@@ -108,8 +108,8 @@ $(SOURCE_DIR)/RobinBC.h $(SOURCE_DIR)/RobinBC.cc \
 $(SOURCE_DIR)/AbstractFunction.h \
 $(SOURCE_DIR)/ProblemStatBase.h \
 $(SOURCE_DIR)/DOFContainer.h \
-$(SOURCE_DIR)/FileWriter.h $(SOURCE_DIR)/FileWriter.hh $(SOURCE_DIR)/FileWriter.cc \
-$(SOURCE_DIR)/ElementFileWriter.h $(SOURCE_DIR)/ElementFileWriter.cc \
+$(SOURCE_DIR)/io/FileWriter.h $(SOURCE_DIR)/io/FileWriter.hh $(SOURCE_DIR)/io/FileWriter.cc \
+$(SOURCE_DIR)/io/ElementFileWriter.h $(SOURCE_DIR)/io/ElementFileWriter.cc \
 $(SOURCE_DIR)/ElInfo.cc \
 $(SOURCE_DIR)/ElInfoStack.h $(SOURCE_DIR)/ElInfoStack.cc \
 $(SOURCE_DIR)/OperatorTerm.h $(SOURCE_DIR)/OperatorTerm.cc \
@@ -155,7 +155,6 @@ $(SOURCE_DIRe)/RefinementManager.h \
 $(SOURCE_DIR)/RefinementManager1d.h \
 $(SOURCE_DIR)/RefinementManager2d.h \
 $(SOURCE_DIR)/RefinementManager3d.h \
-$(SOURCE_DIR)/TecPlotWriter.h $(SOURCE_DIR)/TecPlotWriter.hh \
 $(SOURCE_DIR)/Tetrahedron.h \
 $(SOURCE_DIR)/Traverse.h \
 $(SOURCE_DIR)/Triangle.h \
@@ -166,8 +165,8 @@ $(SOURCE_DIR)/ProblemNonLin.h $(SOURCE_DIR)/ProblemNonLin.cc \
 $(SOURCE_DIR)/NonLinUpdater.h $(SOURCE_DIR)/NonLinUpdater.cc \
 $(SOURCE_DIR)/Newton.h $(SOURCE_DIR)/Newton.hh  \
 $(SOURCE_DIR)/NewtonFS.h $(SOURCE_DIR)/NewtonFS.hh \
-$(SOURCE_DIR)/GridWriter.h $(SOURCE_DIR)/GridWriter.hh \
-$(SOURCE_DIR)/ValueWriter.h \
+$(SOURCE_DIR)/io/GridWriter.h $(SOURCE_DIR)/io/GridWriter.hh \
+$(SOURCE_DIR)/io/ValueWriter.h \
 $(SOURCE_DIR)/QPsiPhi.cc \
 $(SOURCE_DIR)/BasisFunction.cc \
 $(SOURCE_DIR)/Boundary.cc \
@@ -187,7 +186,7 @@ $(SOURCE_DIR)/Global.cc \
 $(SOURCE_DIR)/Lagrange.cc \
 $(SOURCE_DIR)/Line.cc \
 $(SOURCE_DIR)/MacroElement.cc \
-$(SOURCE_DIR)/MacroWriter.cc \
+$(SOURCE_DIR)/io/MacroWriter.cc \
 $(SOURCE_DIR)/Parameters.cc \
 $(SOURCE_DIR)/Parametric.cc \
 $(SOURCE_DIR)/Quadrature.cc \
@@ -200,12 +199,11 @@ $(SOURCE_DIR)/Tetrahedron.cc \
 $(SOURCE_DIR)/Traverse.cc \
 $(SOURCE_DIR)/TraverseParallel.h $(SOURCE_DIR)/TraverseParallel.cc \
 $(SOURCE_DIR)/Triangle.cc \
-$(SOURCE_DIR)/TecPlotWriter.cc \
-$(SOURCE_DIR)/ValueWriter.cc \
-$(SOURCE_DIR)/VtkWriter.h $(SOURCE_DIR)/VtkWriter.cc \
-$(SOURCE_DIR)/PngWriter.h $(SOURCE_DIR)/PngWriter.cc \
-$(SOURCE_DIR)/PovrayWriter.h $(SOURCE_DIR)/PovrayWriter.cc \
-$(SOURCE_DIR)/DataCollector.h $(SOURCE_DIR)/DataCollector.cc \
+$(SOURCE_DIR)/io/ValueWriter.cc \
+$(SOURCE_DIR)/io/VtkWriter.h $(SOURCE_DIR)/io/VtkWriter.cc \
+$(SOURCE_DIR)/io/PngWriter.h $(SOURCE_DIR)/io/PngWriter.cc \
+$(SOURCE_DIR)/io/PovrayWriter.h $(SOURCE_DIR)/io/PovrayWriter.cc \
+$(SOURCE_DIR)/io/DataCollector.h $(SOURCE_DIR)/io/DataCollector.cc \
 $(SOURCE_DIR)/ElementInfo.h \
 $(SOURCE_DIR)/VertexInfo.h \
 $(SOURCE_DIR)/PeriodicInfo.h \
@@ -216,8 +214,8 @@ $(SOURCE_DIR)/SolutionDataStorage.h $(SOURCE_DIR)/SolutionDataStorage.hh \
 $(SOURCE_DIR)/ElementDofIteartor.h $(SOURCE_DIR)/ElementDofIterator.cc \
 $(SOURCE_DIR)/parallel/InteriorBoundary.h $(SOURCE_DIR)/parallel/InteriorBoundary.cc \
 $(SOURCE_DIR)/Debug.h $(SOURCE_DIR)/Debug.cc \
-$(SOURCE_DIR)/ArhReader.h $(SOURCE_DIR)/ArhReader.cc \
-$(SOURCE_DIR)/ArhWriter.h $(SOURCE_DIR)/ArhWriter.cc \
+$(SOURCE_DIR)/io/ArhReader.h $(SOURCE_DIR)/io/ArhReader.cc \
+$(SOURCE_DIR)/io/ArhWriter.h $(SOURCE_DIR)/io/ArhWriter.cc \
 $(SOURCE_DIR)/time/RosenbrockAdaptInstationary.h $(SOURCE_DIR)/time/RosenbrockAdaptInstationary.cc \
 $(SOURCE_DIR)/time/RosenbrockStationary.h $(SOURCE_DIR)/time/RosenbrockStationary.cc \
 $(SOURCE_DIR)/time/RosenbrockMethod.h $(SOURCE_DIR)/time/RosenbrockMethod.cc 
diff --git a/AMDiS/src/AMDiS.h b/AMDiS/src/AMDiS.h
index 74da8b19f0ec4fc0643fae8ea37f4931c95fa0cb..293fb5b65cbf6e7c0214e753f8e58ef2a24a63e7 100644
--- a/AMDiS/src/AMDiS.h
+++ b/AMDiS/src/AMDiS.h
@@ -5,8 +5,6 @@
 #include "AdaptInfo.h"
 #include "AdaptInstationary.h"
 #include "AdaptStationary.h"
-#include "ArhReader.h"
-#include "ArhWriter.h"
 #include "Assembler.h"
 #include "BasisFunction.h"
 #include "Boundary.h"
@@ -36,20 +34,17 @@
 #include "ElementDofIterator.h"
 #include "Error.h"
 #include "Estimator.h"
-#include "FileWriter.h"
 #include "FiniteElemSpace.h"
 #include "FirstOrderTerm.h"
 #include "FixVec.h"
 #include "Flag.h"
 #include "Global.h"
-#include "GridWriter.h"
 #include "ITL_Preconditioner.h"
 #include "ITL_Solver.h"
 #include "Lagrange.h"
 #include "LeafData.h"
 #include "Line.h"
 #include "MacroElement.h"
-#include "MacroWriter.h"
 #include "Marker.h"
 #include "MathFunctions.h"
 #include "MatrixVector.h"
@@ -67,8 +62,6 @@
 #include "Parametric.h"
 #include "PeriodicMap.h"
 #include "PeriodicBC.h"
-#include "PngWriter.h"
-#include "PovrayWriter.h"
 #include "ProblemScal.h"
 #include "ProblemVec.h"
 #include "ProblemInstat.h"
@@ -92,16 +85,24 @@
 #include "SurfaceOperator.h"
 #include "SurfaceQuadrature.h"
 #include "SystemVector.h"
-#include "TecPlotWriter.h"
 #include "Tetrahedron.h"
 #include "TimedObject.h"
 #include "Traverse.h"
 #include "Triangle.h"
-#include "ValueWriter.h"
-#include "VertexVector.h"
-#include "VtkWriter.h"
 #include "ZeroOrderTerm.h"
 
+#include "io/ArhReader.h"
+#include "io/ArhWriter.h"
+#include "io/FileWriter.h"
+#include "io/GNUPlotWriter.h"
+#include "io/GridWriter.h"
+#include "io/MacroWriter.h"
+#include "io/PngWriter.h"
+#include "io/PovrayWriter.h"
+#include "io/ValueWriter.h"
+#include "io/VertexVector.h"
+#include "io/VtkWriter.h"
+
 #include "time/RosenbrockAdaptInstationary.h"
 #include "time/RosenbrockStationary.h"
 
diff --git a/AMDiS/src/Debug.cc b/AMDiS/src/Debug.cc
index ce62634053ff0c1f2367581c2343fc97c5f35ba4..f73cd02d343c4cf4ea601d0a4d07f182c1cc187c 100644
--- a/AMDiS/src/Debug.cc
+++ b/AMDiS/src/Debug.cc
@@ -4,9 +4,9 @@
 #include "Debug.h"
 #include "DOFVector.h"
 #include "MacroElement.h"
-#include "VtkWriter.h"
-#include "ElementFileWriter.h"
 #include "ElementDofIterator.h"
+#include "io/VtkWriter.h"
+#include "io/ElementFileWriter.h"
 
 namespace AMDiS {
 
diff --git a/AMDiS/src/Mesh.cc b/AMDiS/src/Mesh.cc
index 10001b8082e279b69cd53e1fbe053f21b75ffdcb..e1b7573ff9f41e7f51c26ad373a03e6b343b57c4 100644
--- a/AMDiS/src/Mesh.cc
+++ b/AMDiS/src/Mesh.cc
@@ -4,14 +4,16 @@
 
 #include "time.h"
 
+#include "io/MacroReader.h"
+#include "io/MacroInfo.h"
+#include "io/MacroWriter.h"
+
 #include "AdaptStationary.h"
 #include "AdaptInstationary.h"
 #include "FiniteElemSpace.h"
 #include "ElementData.h"
 #include "ElementDofIterator.h"
 #include "MacroElement.h"
-#include "MacroReader.h"
-#include "MacroInfo.h"
 #include "Mesh.h"
 #include "Traverse.h"
 #include "Parameters.h"
@@ -20,7 +22,6 @@
 #include "CoarseningManager.h"
 #include "DOFIterator.h"
 #include "VertexVector.h"
-#include "MacroWriter.h"
 #include "PeriodicMap.h"
 #include "Projection.h"
 #include "ElInfoStack.h"
diff --git a/AMDiS/src/ProblemInstat.cc b/AMDiS/src/ProblemInstat.cc
index e7d6ffeb009b1b854d6e49425092ddb4c8431bb7..4bdf5b45d4bd1b51afc147d7329ac8f0b726cf37 100644
--- a/AMDiS/src/ProblemInstat.cc
+++ b/AMDiS/src/ProblemInstat.cc
@@ -1,5 +1,5 @@
 #include "ProblemInstat.h"
-#include "FileWriter.h"
+#include "io/FileWriter.h"
 #include "AdaptStationary.h"
 #include "AdaptInstationary.h"
 #include "Estimator.h"
diff --git a/AMDiS/src/ProblemScal.cc b/AMDiS/src/ProblemScal.cc
index 9e9f90ac18fc71adddaa2e325e57cb44f2481e59..18157ce64adad26c65d5e30c6e613f5f2bac9720 100644
--- a/AMDiS/src/ProblemScal.cc
+++ b/AMDiS/src/ProblemScal.cc
@@ -15,13 +15,13 @@
 #include "Marker.h"
 #include "AdaptInfo.h"
 #include "ElInfo.h"
-#include "FileWriter.h"
+#include "io/FileWriter.h"
 #include "RefinementManager.h"
 #include "CoarseningManager.h"
 #include "Lagrange.h"
 #include "PeriodicBC.h"
-#include "ValueReader.h"
-#include "ElementFileWriter.h"
+#include "io/ValueReader.h"
+#include "io/ElementFileWriter.h"
 #include "ProblemVec.h"
 #include "Debug.h"
 
diff --git a/AMDiS/src/ProblemVec.cc b/AMDiS/src/ProblemVec.cc
index e917dddd2a3c3415c2e6bc60eca1c1be9e2adf73..0e5f5017e57ccd69e090dce1f7abe864b3aef9a9 100644
--- a/AMDiS/src/ProblemVec.cc
+++ b/AMDiS/src/ProblemVec.cc
@@ -11,7 +11,7 @@
 #include "Estimator.h"
 #include "Marker.h"
 #include "AdaptInfo.h"
-#include "FileWriter.h"
+#include "io/FileWriter.h"
 #include "CoarseningManager.h"
 #include "RefinementManager.h"
 #include "DualTraverse.h"
@@ -23,8 +23,8 @@
 #include "Lagrange.h"
 #include "Flag.h"
 #include "TraverseParallel.h"
-#include "VtkWriter.h"
-#include "ValueReader.h"
+#include "io/VtkWriter.h"
+#include "io/ValueReader.h"
 #include "ProblemVecDbg.h"
 #include "Debug.h"
 
diff --git a/AMDiS/src/ProblemVec.h b/AMDiS/src/ProblemVec.h
index 26b22f507dd6c6697e6218ba651e36b4be186c60..b93778049b61a366238e7c5c974e6bf1e132c74a 100644
--- a/AMDiS/src/ProblemVec.h
+++ b/AMDiS/src/ProblemVec.h
@@ -30,7 +30,7 @@
 #include "Boundary.h"
 #include "MatrixVector.h"
 #include "StandardProblemIteration.h"
-#include "ElementFileWriter.h"
+#include "io/ElementFileWriter.h"
 #include "ComponentTraverseInfo.h"
 #include "AbstractFunction.h"
 #include "SolverMatrix.h"
diff --git a/AMDiS/src/Serializer.h b/AMDiS/src/Serializer.h
index 3a059ba92053b46553c4dcce822bd48aa8b67069..f4858edbe55f4a954bbcf0915dea69ce271c9d52 100644
--- a/AMDiS/src/Serializer.h
+++ b/AMDiS/src/Serializer.h
@@ -25,7 +25,7 @@
 #include <map>
 #include "boost/lexical_cast.hpp"
 
-#include "FileWriter.h"
+#include "io/FileWriter.h"
 #include "Parameters.h"
 #include "AdaptInfo.h"
 
diff --git a/AMDiS/src/TecPlotWriter.cc b/AMDiS/src/TecPlotWriter.cc
deleted file mode 100644
index e0535934f7281ab149afc61a394a26e1119234ed..0000000000000000000000000000000000000000
--- a/AMDiS/src/TecPlotWriter.cc
+++ /dev/null
@@ -1,133 +0,0 @@
-#include "TecPlotWriter.h"
-#include "DOFVector.h"
-#include "SystemVector.h"
-
-namespace AMDiS {
-
-  template<>
-  int TecPlotWriter<DOFVector<double> >::writeValuesFct(ElInfo* elinfo)
-  {
-    const DOFAdmin* admin = values->getFeSpace()->getAdmin(); 
-    int n0 = admin->getNumberOfPreDOFs(VERTEX);
-    const DegreeOfFreedom **dof = elinfo->getElement()->getDof();
-  
-    int dim = elinfo->getMesh()->getDim();
-    int dow = Global::getGeo(WORLD);
-
-    // for every vertex
-    for(int i=0; i < dim+1; i++) {
-
-      // search for coords of this vertex in the coord-list of this dof 
-      DOFCoords::iterator coords = find(dofCoords[dof[i][n0]].begin(),
-					dofCoords[dof[i][n0]].end(),
-					elinfo->getCoord(i));
-
-      if(coords == dofCoords[dof[i][n0]].end()) { // coords not found
-	// add coords to list
-	VertexInfo newCoords;
-	newCoords.coord = elinfo->getCoord(i);
-	newCoords.vertex_index = nv++;
-	dofCoords[dof[i][n0]].push_back(newCoords);
-
-	// write coords of vertex
-	if(writeCoords) {
-	  for(int j=0; j < dow; j++) {
-	    (*outFile) << elinfo->getCoord(i)[j] << " ";
-	  }
-	}
-
-	// write value
-	(*outFile) << (*values)[dof[i][n0]] << std::endl;
-
-      }
-    }
-    return 0;
-  }
-
-  template<>
-  int TecPlotWriter<SystemVector>::writeValuesFct(ElInfo* elinfo)
-  {
-    const DOFAdmin* admin = values->getDOFVector(0)->getFeSpace()->getAdmin(); 
-    int n0 = admin->getNumberOfPreDOFs(VERTEX);
-    const DegreeOfFreedom **dof = elinfo->getElement()->getDof();
-  
-    int dim = elinfo->getMesh()->getDim();
-    int dow = Global::getGeo(WORLD);
-
-    // for every vertex
-    for(int i=0; i < dim+1; i++) {
-
-      // search for coords of this vertex in the coord-list of this dof 
-      DOFCoords::iterator coords = find(dofCoords[dof[i][n0]].begin(),
-					dofCoords[dof[i][n0]].end(),
-					elinfo->getCoord(i));
-
-      if(coords == dofCoords[dof[i][n0]].end()) { // coords not found
-	// add coords to list
-	VertexInfo newCoords;
-	newCoords.coord = elinfo->getCoord(i);
-	newCoords.vertex_index = nv++;
-	dofCoords[dof[i][n0]].push_back(newCoords);
-
-	// write coords of vertex
-	if(writeCoords) {
-	  for(int j=0; j < dow; j++) {
-	    (*outFile) << elinfo->getCoord(i)[j] << " ";
-	  }
-	}
-
-	// write value
-	for(int j=0; j < values->getNumVectors(); j++) {
-	  (*outFile) << (*(values->getDOFVector(i)))[dof[i][n0]] << " ";
-	}
-	(*outFile) << std::endl;
-      }
-    }
-    return 0;
-  }
-
-  template<>
-  void TecPlotWriter<DOFVector<double> >::writeVarName(int dim)
-  {
-    switch(Global::getGeo(WORLD)) {
-    case 1:
-      (*outFile) << "VARIABLES = \"x\"";
-      break;
-    case 2:
-      (*outFile) << "VARIABLES = \"x\",\"y\"";
-      break;
-    case 3:
-      (*outFile) << "VARIABLES = \"x\",\"y\",\"z\"";
-      break;
-    default:
-      ERROR_EXIT("invalid dim of world\n");
-    }
-    (*outFile) << ",\"" << values->getName() << "\"" << std::endl;
-  }
-
-  template<>
-  void TecPlotWriter<SystemVector>::writeVarName(int dim)
-  {
-    switch(Global::getGeo(WORLD)) {
-    case 1:
-      (*outFile) << "VARIABLES = \"x\"";
-      break;
-    case 2:
-      (*outFile) << "VARIABLES = \"x\",\"y\"";
-      break;
-    case 3:
-      (*outFile) << "VARIABLES = \"x\",\"y\",\"z\"";
-      break;
-    default:
-      ERROR_EXIT("invalid dim of world\n");
-    }
-
-    int i, number = values->getNumVectors();
-    for(i = 0; i < number; i++) {
-      (*outFile) << ",\"" << values->getDOFVector(i)->getName() << "\"";
-    }
-    (*outFile) << std::endl;
-  }
-
-}
-
diff --git a/AMDiS/src/TecPlotWriter.h b/AMDiS/src/TecPlotWriter.h
deleted file mode 100644
index c7ea4625fc6e59d768c4b53c9ce8901434c69dd3..0000000000000000000000000000000000000000
--- a/AMDiS/src/TecPlotWriter.h
+++ /dev/null
@@ -1,88 +0,0 @@
-// ============================================================================
-// ==                                                                        ==
-// == AMDiS - Adaptive multidimensional simulations                          ==
-// ==                                                                        ==
-// ============================================================================
-// ==                                                                        ==
-// ==  TU Dresden                                                            ==
-// ==                                                                        ==
-// ==  Institut f�r Wissenschaftliches Rechnen                               ==
-// ==  Zellescher Weg 12-14                                                  ==
-// ==  01069 Dresden                                                         ==
-// ==  germany                                                               ==
-// ==                                                                        ==
-// ============================================================================
-// ==                                                                        ==
-// ==  https://gforge.zih.tu-dresden.de/projects/amdis/                      ==
-// ==                                                                        ==
-// ============================================================================
-
-/** \file TecPlotWriter.h */
-
-#ifndef AMDIS_TEC_PLOT_WRITER_H
-#define AMDIS_TEC_PLOT_WRITER_H
-
-#include <fstream>
-#include <vector>
-#include "FixVec.h"
-#include "AMDiS_fwd.h"
-
-namespace AMDiS {
-
-  /** \ingroup Output
-   * \brief
-   * Writes a DOFVector in TecPlot format to a ascii file
-   */
-  template<typename T>
-  class TecPlotWriter
-  {
-  public:
-    /** \brief
-     * Writes the DOFVector values to the file with given name. Different 
-     * DOFVectors belonging to the same triangulation can be written to one
-     * file by setting additional=true for all DOFVectors except for the first 
-     * one.
-     */
-    static void writeValues(T* values,
-			    const char* filename,
-			    const char* plotTitle,
-			    bool additional=false);
-
-  private:
-    static int writeValuesFct(ElInfo* elinfo);
-    static int writeIndicesFct(ElInfo* elinfo);
-    static void writeVarName(int dim);
-
-  private:
-    class VertexInfo {
-    public:
-      WorldVector<double> coord;
-
-      int vertex_index;
-
-    public:
-      inline bool operator==(const WorldVector<double>& coor) 
-      {
-	return (coor == coord);
-      }
-
-      inline bool operator!=(const WorldVector<double>& coor) 
-      {
-	return !(*this == coor);
-      }
-    };
-
-    typedef std::vector<VertexInfo> DOFCoords;
-
-    static T* values;
-    static int nv;
-    static std::ofstream* outFile;
-    static bool writeCoords;
-    static std::vector<DOFCoords> dofCoords;
-  };
-
-}
-
-#include "TecPlotWriter.hh"
-
-#endif
diff --git a/AMDiS/src/TecPlotWriter.hh b/AMDiS/src/TecPlotWriter.hh
deleted file mode 100644
index 49d1df1e5feb3d05cfe5521ecfc7dc1bc3339791..0000000000000000000000000000000000000000
--- a/AMDiS/src/TecPlotWriter.hh
+++ /dev/null
@@ -1,141 +0,0 @@
-#include <fstream>
-#include <algorithm>
-
-#include "FixVec.h"
-#include "Mesh.h"
-#include "Flag.h"
-
-namespace AMDiS {
-
-  template<typename T> T* TecPlotWriter<T>::values = NULL;
-
-  template<typename T> int TecPlotWriter<T>::nv = 1;
-
-  template<typename T> std::ofstream* TecPlotWriter<T>::outFile = NULL;
-
-  template<typename T> bool TecPlotWriter<T>::writeCoords = false;
-
-  template<typename T> std::vector<typename TecPlotWriter<T>::DOFCoords> 
-  TecPlotWriter<T>::dofCoords;
-
-  template<typename T>
-  int TecPlotWriter<T>::writeIndicesFct(ElInfo* elinfo)
-  {
-    const DOFAdmin* admin = values->getFeSpace()->getAdmin(); 
-    int n0 = admin->getNumberOfPreDOFs(VERTEX);
-    const DegreeOfFreedom **dof = elinfo->getElement()->getDof();
-
-    int dim = elinfo->getMesh()->getDim();
-    //  int dow = Global::getGeo(WORLD);
-
-    for (int i=0; i < dim+1; i++) {
-      typename DOFCoords::iterator coords = find(dofCoords[dof[i][n0]].begin(),
-						 dofCoords[dof[i][n0]].end(),
-						 elinfo->getCoord(i));
-      TEST_EXIT(coords != dofCoords[dof[i][n0]].end())("coords not found");
-      (*outFile) << coords->vertex_index << " "; 
-      if (dim == 1 && i == 1) {
-	(*outFile) << coords->vertex_index;     
-      }
-    }
-    (*outFile) << std::endl;
-  
-    return 0;
-  }
-
-  template<typename T>
-  void TecPlotWriter<T>::writeValues(T* val,
-				     const char* filename,
-				     const char* plotTitle,
-				     bool additional)
-  {
-    FUNCNAME("TecPlotWriter<T>::writeValues()");
-
-    values = val;
-
-    TEST_EXIT(values)("no values\n");
-    TEST_EXIT(filename)("no filename\n");
-    TEST_EXIT(plotTitle)("no plotTitle\n");
-    TEST_EXIT(values->getFeSpace())("no fe-space\n");
-    TEST_EXIT(values->getFeSpace()->getMesh())("no mesh\n");
-
-    if (!additional)
-      outFile = new std::ofstream(filename);
-    else
-      outFile = new std::ofstream(filename, std::ios::app);
-    
-    TEST_EXIT(outFile)("can't open file %s\n", filename);
-
-    outFile->setf(std::ios::scientific,std::ios::floatfield);
-
-    const DOFAdmin* admin = values->getFeSpace()->getAdmin(); 
-    Mesh* mesh = values->getFeSpace()->getMesh();
-
-    mesh->dofCompress();
-    dofCoords.resize(admin->getUsedSize());
-
-    int dim = mesh->getDim();
-    int dow = Global::getGeo(WORLD);
-
-    writeCoords = !additional;
-    
-    if (dim == 1 && dow == 1) { // use ordered plot
-      if (!additional)
-	(*outFile) << "TITLE = \"" << plotTitle << "\"" << std::endl;
-
-      // write file header
-      if (!additional)
-	writeVarName(dim);
-      
-      (*outFile) << "ZONE T=\"" << values->getName() << "\", I=" << 
-	mesh->getNumberOfVertices();
-      (*outFile) << ", F=POINT";
-      if (additional)
-	(*outFile) << ", D=(1)";
-     
-      (*outFile) << std::endl << std::endl;
-    
-
-      // write data
-      ERROR_EXIT("Reimplement mesh traverse for TecPlot writer!\n");
-      //      mesh->traverse(-1, Mesh::CALL_LEAF_EL|Mesh::FILL_COORDS, writeValuesFct);
-
-    } else { // dow !=1 => use FE-plot
-      for (int i=0; i < 150; i++) 
-	(*outFile) << " ";
-      (*outFile) << std::endl;
-
-      // write data
-      nv = 1;
-      ERROR_EXIT("Reimplement mesh traverse for TecPlot writer!\n");
-      //      mesh->traverse(-1, Mesh::CALL_LEAF_EL|Mesh::FILL_COORDS, writeValuesFct);
-      (*outFile) << std::endl;
-      ERROR_EXIT("Reimplement mesh traverse for TecPlot writer!\n");
-      //      mesh->traverse(-1, Mesh::CALL_LEAF_EL|Mesh::FILL_COORDS, writeIndicesFct);
-
-      // write file header
-      outFile->seekp(0);
-
-      if (!additional) {
-	(*outFile) << "TITLE = \"" << plotTitle << "\"" << std::endl;
-	writeVarName(dim);
-      }
-
-      (*outFile) << "ZONE T=\"" << values->getName() << "\", N=" << nv-1;
-      (*outFile) << ", E=" << mesh->getNumberOfLeaves();
-      (*outFile) << ", F=FEPOINT";
-      (*outFile) << ((dim==3) ? ", ET=TETRAHEDRON" : ", ET=TRIANGLE");
-      if (additional) {
-	(*outFile) << ", D=(";
-	(*outFile) << ((dim==3) ? "1,2,3" : "1,2");
-	(*outFile) << ",FECONNECT)";
-      }
-      (*outFile) << std::endl;
-
-    }
-
-    dofCoords.resize(0);
-    delete outFile;
-  }
-
-}
diff --git a/AMDiS/src/ArhReader.cc b/AMDiS/src/io/ArhReader.cc
similarity index 100%
rename from AMDiS/src/ArhReader.cc
rename to AMDiS/src/io/ArhReader.cc
diff --git a/AMDiS/src/ArhReader.h b/AMDiS/src/io/ArhReader.h
similarity index 100%
rename from AMDiS/src/ArhReader.h
rename to AMDiS/src/io/ArhReader.h
diff --git a/AMDiS/src/ArhWriter.cc b/AMDiS/src/io/ArhWriter.cc
similarity index 100%
rename from AMDiS/src/ArhWriter.cc
rename to AMDiS/src/io/ArhWriter.cc
diff --git a/AMDiS/src/ArhWriter.h b/AMDiS/src/io/ArhWriter.h
similarity index 100%
rename from AMDiS/src/ArhWriter.h
rename to AMDiS/src/io/ArhWriter.h
diff --git a/AMDiS/src/DataCollector.cc b/AMDiS/src/io/DataCollector.cc
similarity index 100%
rename from AMDiS/src/DataCollector.cc
rename to AMDiS/src/io/DataCollector.cc
diff --git a/AMDiS/src/DataCollector.h b/AMDiS/src/io/DataCollector.h
similarity index 100%
rename from AMDiS/src/DataCollector.h
rename to AMDiS/src/io/DataCollector.h
diff --git a/AMDiS/src/ElementFileWriter.cc b/AMDiS/src/io/ElementFileWriter.cc
similarity index 100%
rename from AMDiS/src/ElementFileWriter.cc
rename to AMDiS/src/io/ElementFileWriter.cc
diff --git a/AMDiS/src/ElementFileWriter.h b/AMDiS/src/io/ElementFileWriter.h
similarity index 100%
rename from AMDiS/src/ElementFileWriter.h
rename to AMDiS/src/io/ElementFileWriter.h
diff --git a/AMDiS/src/FileWriter.cc b/AMDiS/src/io/FileWriter.cc
similarity index 100%
rename from AMDiS/src/FileWriter.cc
rename to AMDiS/src/io/FileWriter.cc
diff --git a/AMDiS/src/FileWriter.h b/AMDiS/src/io/FileWriter.h
similarity index 100%
rename from AMDiS/src/FileWriter.h
rename to AMDiS/src/io/FileWriter.h
diff --git a/AMDiS/src/GNUPlotWriter.cc b/AMDiS/src/io/GNUPlotWriter.cc
similarity index 100%
rename from AMDiS/src/GNUPlotWriter.cc
rename to AMDiS/src/io/GNUPlotWriter.cc
diff --git a/AMDiS/src/GNUPlotWriter.h b/AMDiS/src/io/GNUPlotWriter.h
similarity index 100%
rename from AMDiS/src/GNUPlotWriter.h
rename to AMDiS/src/io/GNUPlotWriter.h
diff --git a/AMDiS/src/GridWriter.h b/AMDiS/src/io/GridWriter.h
similarity index 100%
rename from AMDiS/src/GridWriter.h
rename to AMDiS/src/io/GridWriter.h
diff --git a/AMDiS/src/GridWriter.hh b/AMDiS/src/io/GridWriter.hh
similarity index 100%
rename from AMDiS/src/GridWriter.hh
rename to AMDiS/src/io/GridWriter.hh
diff --git a/AMDiS/src/MacroInfo.cc b/AMDiS/src/io/MacroInfo.cc
similarity index 100%
rename from AMDiS/src/MacroInfo.cc
rename to AMDiS/src/io/MacroInfo.cc
diff --git a/AMDiS/src/MacroInfo.h b/AMDiS/src/io/MacroInfo.h
similarity index 100%
rename from AMDiS/src/MacroInfo.h
rename to AMDiS/src/io/MacroInfo.h
diff --git a/AMDiS/src/MacroReader.cc b/AMDiS/src/io/MacroReader.cc
similarity index 100%
rename from AMDiS/src/MacroReader.cc
rename to AMDiS/src/io/MacroReader.cc
diff --git a/AMDiS/src/MacroReader.h b/AMDiS/src/io/MacroReader.h
similarity index 100%
rename from AMDiS/src/MacroReader.h
rename to AMDiS/src/io/MacroReader.h
diff --git a/AMDiS/src/MacroWriter.cc b/AMDiS/src/io/MacroWriter.cc
similarity index 100%
rename from AMDiS/src/MacroWriter.cc
rename to AMDiS/src/io/MacroWriter.cc
diff --git a/AMDiS/src/MacroWriter.h b/AMDiS/src/io/MacroWriter.h
similarity index 100%
rename from AMDiS/src/MacroWriter.h
rename to AMDiS/src/io/MacroWriter.h
diff --git a/AMDiS/src/PngWriter.cc b/AMDiS/src/io/PngWriter.cc
similarity index 100%
rename from AMDiS/src/PngWriter.cc
rename to AMDiS/src/io/PngWriter.cc
diff --git a/AMDiS/src/PngWriter.h b/AMDiS/src/io/PngWriter.h
similarity index 100%
rename from AMDiS/src/PngWriter.h
rename to AMDiS/src/io/PngWriter.h
diff --git a/AMDiS/src/PovrayWriter.cc b/AMDiS/src/io/PovrayWriter.cc
similarity index 100%
rename from AMDiS/src/PovrayWriter.cc
rename to AMDiS/src/io/PovrayWriter.cc
diff --git a/AMDiS/src/PovrayWriter.h b/AMDiS/src/io/PovrayWriter.h
similarity index 100%
rename from AMDiS/src/PovrayWriter.h
rename to AMDiS/src/io/PovrayWriter.h
diff --git a/AMDiS/src/ValueReader.cc b/AMDiS/src/io/ValueReader.cc
similarity index 100%
rename from AMDiS/src/ValueReader.cc
rename to AMDiS/src/io/ValueReader.cc
diff --git a/AMDiS/src/ValueReader.h b/AMDiS/src/io/ValueReader.h
similarity index 100%
rename from AMDiS/src/ValueReader.h
rename to AMDiS/src/io/ValueReader.h
diff --git a/AMDiS/src/ValueWriter.cc b/AMDiS/src/io/ValueWriter.cc
similarity index 100%
rename from AMDiS/src/ValueWriter.cc
rename to AMDiS/src/io/ValueWriter.cc
diff --git a/AMDiS/src/ValueWriter.h b/AMDiS/src/io/ValueWriter.h
similarity index 100%
rename from AMDiS/src/ValueWriter.h
rename to AMDiS/src/io/ValueWriter.h
diff --git a/AMDiS/src/VtkWriter.cc b/AMDiS/src/io/VtkWriter.cc
similarity index 100%
rename from AMDiS/src/VtkWriter.cc
rename to AMDiS/src/io/VtkWriter.cc
diff --git a/AMDiS/src/VtkWriter.h b/AMDiS/src/io/VtkWriter.h
similarity index 100%
rename from AMDiS/src/VtkWriter.h
rename to AMDiS/src/io/VtkWriter.h
diff --git a/AMDiS/src/VtkWriter.hh b/AMDiS/src/io/VtkWriter.hh
similarity index 100%
rename from AMDiS/src/VtkWriter.hh
rename to AMDiS/src/io/VtkWriter.hh
diff --git a/AMDiS/src/parallel/MeshDistributor.cc b/AMDiS/src/parallel/MeshDistributor.cc
index f1804c2e877a28b85c51a8e94f1ecc18b79d0afd..9262d3e168279df05895a9a89daca6cc05ba084c 100644
--- a/AMDiS/src/parallel/MeshDistributor.cc
+++ b/AMDiS/src/parallel/MeshDistributor.cc
@@ -11,6 +11,9 @@
 #include "parallel/ParallelDebug.h"
 #include "parallel/StdMpi.h"
 #include "parallel/ParMetisPartitioner.h"
+#include "io/ElementFileWriter.h"
+#include "io/MacroInfo.h"
+#include "io/VtkWriter.h"
 #include "Mesh.h"
 #include "Traverse.h"
 #include "ElInfo.h"
@@ -19,17 +22,14 @@
 #include "DOFMatrix.h"
 #include "DOFVector.h"
 #include "SystemVector.h"
-#include "VtkWriter.h"
 #include "ElementDofIterator.h"
 #include "ProblemStatBase.h"
 #include "StandardProblemIteration.h"
-#include "ElementFileWriter.h"
 #include "VertexVector.h"
 #include "MeshStructure.h"
 #include "ProblemVec.h"
 #include "ProblemInstat.h"
 #include "Debug.h"
-#include "MacroInfo.h"
 
 namespace AMDiS {