diff --git a/AMDiS/src/ArhReader.cc b/AMDiS/src/ArhReader.cc
index 02ca76ca020f24e0c3eeeb6ed1c2e198fa067910..2249c29de49d1a0afdc2e8032ad70ab162a1d678 100644
--- a/AMDiS/src/ArhReader.cc
+++ b/AMDiS/src/ArhReader.cc
@@ -8,7 +8,7 @@ namespace AMDiS {
   
   using namespace std;
 
-  void ArhReader::read(string filename, Mesh *mesh)
+  void ArhReader::read(string filename, Mesh *mesh, bool ignoreFinerMesh)
   {
     FUNCNAME("ArhReader::read()");
 
@@ -28,36 +28,36 @@ namespace AMDiS {
     file.open(filename.c_str(), ios::in | ios::binary);
 
     string typeId = "";
-    long nMacroElements = 0;
-    long nValueVectors = 0;
-    long nAllValues = 0;
+    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);
 
-    for (long i = 0; i < nMacroElements; i++) {
-      long elIndex = 0;
-      long nStructureCodes = 0;
-      long codeSize = 0;
+    for (unsigned int i = 0; i < nMacroElements; i++) {
+      uint32_t elIndex = 0;
+      uint32_t nStructureCodes = 0;
+      uint32_t codeSize = 0;
 
       file.read(reinterpret_cast<char*>(&elIndex), 4);
       file.read(reinterpret_cast<char*>(&nStructureCodes), 4);
       file.read(reinterpret_cast<char*>(&codeSize), 4);
 
       vector<unsigned long> structureCode(nStructureCodes);
-      file.read(reinterpret_cast<char*>(&(structureCode[0])), 4 * nStructureCodes);
+      file.read(reinterpret_cast<char*>(&(structureCode[0])), 8 * nStructureCodes);
 
       MeshStructure elementStructure;
       elementStructure.init(structureCode, codeSize);
-      elementStructure.fitMeshToStructure(mesh, refManager, 
-					  false, false, elIndex, true);
+      elementStructure.fitMeshToStructure(mesh, refManager, false, 
+					  false, elIndex, ignoreFinerMesh);
 
-      long nValuesPerVector = 0;
+      uint32_t nValuesPerVector = 0;
       file.read(reinterpret_cast<char*>(&nValuesPerVector), 4);
 
-      for (long j = 0; j < nValuesPerVector * nValueVectors; j++) {
+      for (unsigned int j = 0; j < nValuesPerVector * nValueVectors; j++) {
 	double value = 0.0;
 	file.read(reinterpret_cast<char*>(&value), 8);
       }
diff --git a/AMDiS/src/ArhReader.h b/AMDiS/src/ArhReader.h
index 4d1ddc651a430953244250020366cb34d9d50d98..8a1b74bffd8a8bc75e585e32bf15ca2140a68fe9 100644
--- a/AMDiS/src/ArhReader.h
+++ b/AMDiS/src/ArhReader.h
@@ -29,7 +29,8 @@ namespace AMDiS {
   class ArhReader
   {
   public:
-    static void read(std::string filename, Mesh *mesh);
+    static void read(std::string filename, Mesh *mesh,
+		     bool ignoreFinerMesh = true);
   };
 }
 
diff --git a/AMDiS/src/ArhWriter.cc b/AMDiS/src/ArhWriter.cc
index d15dd96f415de7d1d30cbca5b74238948ef88b28..9da84d67438055c74fbb0f60e0a1a6f952f0a95b 100644
--- a/AMDiS/src/ArhWriter.cc
+++ b/AMDiS/src/ArhWriter.cc
@@ -19,7 +19,7 @@ namespace AMDiS {
     string typeId = "arhS";
     file.write(typeId.c_str(), 4);
 
-    long nMacroElements = 0;
+    uint32_t nMacroElements = 0;
     TraverseStack stack;
     ElInfo *elInfo = stack.traverseFirst(mesh, 0, Mesh::CALL_EL_LEVEL);
     while (elInfo) {
@@ -29,14 +29,14 @@ namespace AMDiS {
 
     file.write(reinterpret_cast<char*>(&nMacroElements), 4);
     
-    long nValueVectors = 0;
+    uint32_t nValueVectors = 0;
     file.write(reinterpret_cast<char*>(&nValueVectors), 4);
 
-    long nAllValues = 0;
+    uint32_t nAllValues = 0;
     file.write(reinterpret_cast<char*>(&nAllValues), 4);
 
     MeshStructure elementStructure;
-    long macroElIndex = -1;
+    int32_t macroElIndex = -1;
 
     elInfo = stack.traverseFirst(mesh, -1, Mesh::CALL_EVERY_EL_PREORDER);
     while (elInfo) {
@@ -67,20 +67,20 @@ namespace AMDiS {
   
   void ArhWriter::writeMacroElement(std::ofstream &file, 
 				    MeshStructure &code, 
-				    long elIndex)
+				    int32_t elIndex)
   {
     file.write(reinterpret_cast<char*>(&elIndex), 4); 
     
-    long nStructureCodes = code.getCode().size();
+    uint32_t nStructureCodes = code.getCode().size();
     file.write(reinterpret_cast<char*>(&nStructureCodes), 4);
     
-    long codeSize = code.getNumElements();
+    uint32_t codeSize = code.getNumElements();
     file.write(reinterpret_cast<char*>(&codeSize), 4);
 
     file.write(reinterpret_cast<char*>(&(const_cast<vector<unsigned long int>&>(code.getCode())[0])), 
-	       4 * nStructureCodes);
+	       8 * nStructureCodes);
 
-    long nValuesPerVector = 0;
+    uint32_t nValuesPerVector = 0;
     file.write(reinterpret_cast<char*>(&nValuesPerVector), 4);
   }
 
diff --git a/AMDiS/src/ArhWriter.h b/AMDiS/src/ArhWriter.h
index d21c628159258fbcd8b7fb7b21aa0d867e462e1c..b5e3ced2b2458d5ea86b798c2b34558ffa1b5ee3 100644
--- a/AMDiS/src/ArhWriter.h
+++ b/AMDiS/src/ArhWriter.h
@@ -37,7 +37,7 @@ namespace AMDiS {
   protected:
     static void writeMacroElement(std::ofstream &file, 
 				  MeshStructure &code, 
-				  long elIndex);
+				  int32_t elIndex);
   };
 }
 
diff --git a/AMDiS/src/MeshStructure.cc b/AMDiS/src/MeshStructure.cc
index 6b35675ce0928763a8ce0431cbdbebba2feb782c..e499031ff4a56d7bc55dcd5db839e34520c077ae 100644
--- a/AMDiS/src/MeshStructure.cc
+++ b/AMDiS/src/MeshStructure.cc
@@ -257,8 +257,8 @@ namespace AMDiS {
 	    elInfo = stack.traverseNext(elInfo);
 	} else {
 	  TEST_EXIT(element->isLeaf())
-	    ("Mesh is finer than strucutre code! (Element index: %d\n", 
-	     element->getIndex());	
+	    ("Mesh is finer than strucutre code! (Element index: %d Macro element index: %d)\n", 
+	     element->getIndex(), elInfo->getMacroElement()->getIndex());
 	}
       } 
 
diff --git a/AMDiS/src/RefinementManager3d.cc b/AMDiS/src/RefinementManager3d.cc
index 2674dfcff350b2476a5f67474013b0e1e268e489..1088d1787d0fb17439c927f0a5956b3898d45db6 100644
--- a/AMDiS/src/RefinementManager3d.cc
+++ b/AMDiS/src/RefinementManager3d.cc
@@ -598,7 +598,7 @@ namespace AMDiS {
     DegreeOfFreedom *edge[2];
 
     if (el_info->getElement()->getMark() <= 0)  
-      return el_info;    /*   element may not be refined   */
+      return el_info;    // element may not be refined 
 
     // === Get memory for a list of all elements at the refinement edge. ===