diff --git a/AMDiS/src/io/ArhReader.cc b/AMDiS/src/io/ArhReader.cc
index 6747b1b2c5ffbcd9412753ff38a32d7426af5a56..b449adff0ce977ac28777cd96a4871ba685cd5f5 100644
--- a/AMDiS/src/io/ArhReader.cc
+++ b/AMDiS/src/io/ArhReader.cc
@@ -31,16 +31,13 @@ namespace AMDiS {
 		       bool writeParallel,
 		       int nProcs)
   {
-    size_t nValueVectors = getNumValueVectors(filename);
     vector<DOFVector<double>*> vecs(0);
-    if (nValueVectors > 0)
+    if (vec0)
       vecs.push_back(vec0);
-    if (nValueVectors > 1)
+    if (vec1)
       vecs.push_back(vec1);
-    if (nValueVectors > 2)
+    if (vec2)
       vecs.push_back(vec2);
-    for (size_t i = 3; i < nValueVectors; i++)
-      vecs.push_back(NULL);
 
     ArhReader::read(filename, mesh, vecs, writeParallel, nProcs);
   }
@@ -141,7 +138,7 @@ namespace AMDiS {
       if (macroInMesh.count(elIndex) == 1)
 	elementStructure.fitMeshToStructure(mesh, refManager, false, elIndex);
 
-      if(nValueVectors > 0){
+      if (nValueVectors > 0) {
 	uint32_t nValuesPerVector = 0;
 	file.read(reinterpret_cast<char*>(&nValuesPerVector), 4);
 
@@ -189,14 +186,33 @@ namespace AMDiS {
   }
 
 
+  int ArhReader::getNumValueVectors(string filename)
+  {
+    ifstream file;
+    file.open(filename.c_str(), ios::in | ios::binary);
+    
+    string typeId = "";
+    uint32_t nMacroElements = 0;
+    uint32_t nValueVectors = 0;
+    
+    file.read(const_cast<char*>(typeId.data()), 4);
+    file.read(reinterpret_cast<char*>(&nMacroElements), 4);
+    file.read(reinterpret_cast<char*>(&nValueVectors), 4);
+    
+    file.close();
+    
+    return nValueVectors;
+  }
+
+
   //the following three functions are identical to read/readfile except that they read from
   //a block of memory instead of from a file
   void ArhReader::readFromMemoryBlock(vector<char> &data, Mesh *mesh,
-           DOFVector<double>* vec0,
-           DOFVector<double>* vec1,
-           DOFVector<double>* vec2,
-           bool writeParallel,
-           int nProcs)
+				      DOFVector<double>* vec0,
+				      DOFVector<double>* vec1,
+				      DOFVector<double>* vec2,
+				      bool writeParallel,
+				      int nProcs)
   {
     uint32_t nValueVectors;
     memcpy(reinterpret_cast<char*>(&nValueVectors), &data[8], 4);
@@ -215,9 +231,9 @@ namespace AMDiS {
 
 
   void ArhReader::readFromMemoryBlock(vector<char> &data, Mesh *mesh,
-           vector<DOFVector<double>*> vecs,
-           bool writeParallel,
-           int nProcs)
+				      vector<DOFVector<double>*> vecs,
+				      bool writeParallel,
+				      int nProcs)
   {
     FUNCNAME("ArhReader::readFromMemoryBlock()");
 
@@ -230,8 +246,8 @@ namespace AMDiS {
 
 
   void ArhReader::readBlock(vector<char> &data,
-         Mesh *mesh,
-         vector<DOFVector<double>*> vecs)
+			    Mesh *mesh,
+			    vector<DOFVector<double>*> vecs)
   {
     FUNCNAME("ArhReader::readBlock()");
 
diff --git a/AMDiS/src/io/ArhReader.h b/AMDiS/src/io/ArhReader.h
index 5614d2b913f5a1a295d062bb6070194922dd9d12..5a016b7c9b4f7a68cf3394851fd35d8aabbe7bcd 100644
--- a/AMDiS/src/io/ArhReader.h
+++ b/AMDiS/src/io/ArhReader.h
@@ -53,44 +53,26 @@ namespace AMDiS {
 		     int nProcs = -1);
 
     static void readFromMemoryBlock(vector<char> &data, Mesh *mesh,
-           DOFVector<double>* vec0 = NULL,
-           DOFVector<double>* vec1 = NULL,
-           DOFVector<double>* vec2 = NULL,
+				    DOFVector<double>* vec0 = NULL,
+				    DOFVector<double>* vec1 = NULL,
+				    DOFVector<double>* vec2 = NULL,
 #ifdef HAVE_PARALLEL_DOMAIN_AMDIS
-           bool writeParallel = true,
+				    bool writeParallel = true,
 #else
-           bool writeParallel = false,
+				    bool writeParallel = false,
 #endif
-           int nProcs = -1);
-
+				    int nProcs = -1);
+    
     static void readFromMemoryBlock(vector<char> &data, Mesh *mesh,
-           vector<DOFVector<double>*> vecs,
+				    vector<DOFVector<double>*> vecs,
 #ifdef HAVE_PARALLEL_DOMAIN_AMDIS
-           bool writeParallel = true,
+				    bool writeParallel = true,
 #else
-           bool writeParallel = false,
+				    bool writeParallel = false,
 #endif
-           int nProcs = -1);
-
-    static int getNumValueVectors(string filename)
-    {
-      ifstream file;
-      file.open(filename.c_str(), ios::in | ios::binary);
-
-      string typeId = "";
-      uint32_t nMacroElements = 0;
-      uint32_t nValueVectors = 0;
-      //uint32_t nAllValues = 0;
-
-      file.read(const_cast<char*>(typeId.data()), 4);
-      file.read(reinterpret_cast<char*>(&nMacroElements), 4);
-      file.read(reinterpret_cast<char*>(&nValueVectors), 4);
-      //file.read(reinterpret_cast<char*>(&nAllValues), 4);
-
-      file.close();
-
-      return nValueVectors;
-    }
+				    int nProcs = -1);
+    
+    static int getNumValueVectors(string filename);
 
   private:
 
@@ -102,8 +84,8 @@ namespace AMDiS {
 			     vector<double>& values, DOFVector<double>* vec);
 
     static void readBlock(vector<char> &data,
-         Mesh *mesh,
-         vector<DOFVector<double>*> vecs);
+			  Mesh *mesh,
+			  vector<DOFVector<double>*> vecs);
 
   };
 }
diff --git a/AMDiS/src/io/ArhWriter.cc b/AMDiS/src/io/ArhWriter.cc
index b16c5f46233cd811a4f7f85747fe589b83665690..cb85e709007c0ffa0a4f218e60e8c56a4026c4b4 100644
--- a/AMDiS/src/io/ArhWriter.cc
+++ b/AMDiS/src/io/ArhWriter.cc
@@ -127,8 +127,11 @@ namespace AMDiS {
   void ArhWriter::writeMacroElement(ofstream &file, 
 				    MeshStructure &code,
 				    vector<vector<double> >& values,
-				    int32_t elIndex)
+				    uint32_t elIndex)
   {
+    FUNCNAME("ArhWriter::writeMacroElement()");
+
+    MSG("WRITE INDEX: %d\n", elIndex);
     file.write(reinterpret_cast<char*>(&elIndex), 4); 
     
     uint32_t nStructureCodes = code.getCode().size();
@@ -140,7 +143,7 @@ namespace AMDiS {
     file.write(reinterpret_cast<char*>(&(const_cast<vector<uint64_t>&>(code.getCode())[0])), 
 	       8 * nStructureCodes);
 
-    if(values.size() > 0){
+    if (values.size() > 0) {
       uint32_t nValuesPerVector = values[0].size();
       file.write(reinterpret_cast<char*>(&nValuesPerVector), 4);
 
diff --git a/AMDiS/src/io/ArhWriter.h b/AMDiS/src/io/ArhWriter.h
index d380324a5a8de1cc54f7ad1877d22cfdbb20dc4a..166ce2ec5a05cea6a8a092af46fb1a27194f1ed4 100644
--- a/AMDiS/src/io/ArhWriter.h
+++ b/AMDiS/src/io/ArhWriter.h
@@ -75,7 +75,7 @@ namespace AMDiS {
     static void writeMacroElement(std::ofstream &file, 
 				  MeshStructure &code, 
 				  std::vector<std::vector<double> >& values,
-				  int32_t elIndex);
+				  uint32_t elIndex);
   };
 }
 
diff --git a/AMDiS/src/io/FileWriter.cc b/AMDiS/src/io/FileWriter.cc
index 7f29ada6751edb539ecbba92ed880ebde18748f5..305e313a6272c85cee7dcb5b4bc97e23279c23f9 100644
--- a/AMDiS/src/io/FileWriter.cc
+++ b/AMDiS/src/io/FileWriter.cc
@@ -191,7 +191,7 @@ namespace AMDiS {
     }
 
     if (writeArhFormat)
-      ArhWriter::write(fn + ".arh", feSpace->getMesh(), solutionVecs);
+      ArhWriter::write(paraFilename + ".arh", feSpace->getMesh(), solutionVecs);
 
 #ifdef HAVE_PNG
     if (writePngFormat) {