diff --git a/Geo/GModelIO_Mesh.cpp b/Geo/GModelIO_Mesh.cpp
index 4b6ba665ad136ac583947b7ce572f1780b640f2a..70c3f8dc649032d3c5a1cb287460dff73de42e09 100644
--- a/Geo/GModelIO_Mesh.cpp
+++ b/Geo/GModelIO_Mesh.cpp
@@ -2346,7 +2346,7 @@ int GModel::readDIFF(const std::string &name)
           vertexVector[it->first] = it->second;
         vertexMap.clear();
       }
-      Msg::Info("%d ( %lf , %lf , %lf ) [%d]", i, xyz[0], xyz[1], xyz[2], 
+      Msg::Info("%d ( %lf , %lf , %lf ) [%d]",i, xyz[0], xyz[1], xyz[2], 
                 elementary[i][0]);
       std::string format_read_bi = "%*d ( %*lf , %*lf , %*lf ) [%*d]";
       for(int j = 0; j < elementary[i][0]; j++){
@@ -2356,7 +2356,7 @@ int GModel::readDIFF(const std::string &name)
         }
         else
           format_read_bi += " %d";
-        if(sscanf(str, format_read_bi.c_str(), &(elementary[i][j + 1])) != 1)
+        if(sscanf(str, format_read_bi.c_str(), &(elementary[i][j + 1])) != 1) 
           return 0;
         Msg::Info("elementary[%d][%d]=%d", i + 1, j + 1, elementary[i][j + 1]); 
       }
@@ -2365,78 +2365,79 @@ int GModel::readDIFF(const std::string &name)
       if(!fgets(str, sizeof(str), fp) || feof(fp))
         break;
     }
-    
     std::vector<int> material(numElements);
     std::vector<std::vector<int> > ElementsNodes(numElements);
     for(int i = 0; i < numVertices; i++){
       ElementsNodes[i].resize(numVerticesPerElement);
     }
-    char eleType[20]="";
+    char eleTypec[20]="";
+    std::string eleType;
     Msg::ResetProgressMeter();
     std::vector<int> mapping;
     for(int i = 1; i <= numElements; i++){
       if(!fgets(str, sizeof(str), fp)) return 0;
       int num, type, physical = 0, partition = 0;
       int indices[60];
-      if(sscanf(str, "%*d %s %d", eleType, &material[i-1])!=2) return 0;
+      if(sscanf(str, "%*d %s %d", eleTypec, &material[i-1])!=2) return 0;
+      eleType=std::string(eleTypec);
       int k2; // local number for the element
       int NoVertices; // number of vertices per element
-      if(eleType=="ElmT3n2D"){ 
+      if(eleType.compare("ElmT3n2D")==0){ 
         NoVertices=3;
         static int map[3]={0, 1, 2}; // identical to gmsh
         mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
         type= MSH_TRI_3;
       }
-      else if(eleType=="ElmT6n2D"){ 
+      else if(eleType.compare("ElmT6n2D")==0){ 
         NoVertices=6;
         static int map[6]={0, 1, 2, 3, 4, 5}; // identical to gmsh
         mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
         type= MSH_TRI_6;
       }
-      else if(eleType=="ElmB4n2D"){ 
+      else if(eleType.compare("ElmB4n2D")==0){ 
         NoVertices=4;
         static int map[4]={0, 1, 3, 2}; // local numbering
         mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
         type= MSH_QUA_4;
       }
-      else if(eleType=="ElmB8n2D"){ 
+      else if(eleType.compare("ElmB8n2D")==0){ 
         NoVertices=8;
         static int map[8]={0, 1, 3, 2, 4, 6, 7, 5}; // local numbering
         mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
         type= MSH_QUA_8;
       }
-      else if(eleType=="ElmB9n2D"){ 
+      else if(eleType.compare("ElmB9n2D")==0){ 
         NoVertices=9;
         static int map[9]={0, 4, 1, 7, 8, 5, 3, 6, 2}; // local numbering
         mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
         type= MSH_QUA_9;
       }
-      else if(eleType=="ElmT4n3D"){
+      else if(eleType.compare("ElmT4n3D")==0){
         NoVertices=4;
         static int map[4]={0, 1, 2, 3}; // identical to gmsh
         mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
         type= MSH_TET_4;
       } 
-      else if(eleType=="ElmT10n3D"){ 
+      else if(eleType.compare("ElmT10n3D")==0){ 
         NoVertices=10;
         static int map[10]={1, 0, 2, 3, 4, 6, 5, 9, 7, 8}; // local numbering
         mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
         type= MSH_TET_10;
       }
-      else if(eleType=="ElmB8n3D"){
+      else if(eleType.compare("ElmB8n3D")==0){
         NoVertices=8;
         static int map[8]={4, 5, 0, 1, 7, 6, 3, 2};
         mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
         type= MSH_HEX_8;
       } 
-      else if(eleType=="ElmB20n3D"){
+      else if(eleType.compare("ElmB20n3D")==0){
         NoVertices=20;
-        static int map[20]={4, 5, 0, 1, 7, 6, 3, 2, 16, 8, 19, 
-                            13, 15, 12, 14, 17, 18, 9, 11};
+        static int map[20]={4, 5, 0, 1, 7, 6, 3, 2, 16, 8, 19, 13, 15, 12, 14,
+                            17, 18, 9, 11};
         mapping=std::vector<int> (map, map + sizeof(map) / sizeof(int) );
         type= MSH_HEX_20;
       } 
-      else if(eleType=="ElmB27n3D"){
+      else if(eleType.compare("ElmB27n3D")==0){
         NoVertices=27;
         static int map[27]={4, 16, 5, 10, 21, 12, 0, 8, 1, 17, 25, 18, 22, 
                             26, 23, 9, 20, 11, 7, 19, 6, 15, 24, 14, 3, 13, 2};
@@ -2444,7 +2445,9 @@ int GModel::readDIFF(const std::string &name)
         type= MSH_HEX_27;
       } 
       else
+      {
         return 0;
+      }
       std::string format_read_vertices = "%*d %*s %*d";
       for(int k = 0; k < NoVertices; k++){
         if(format_read_vertices[format_read_vertices.size()-2] != '*') {
@@ -2454,7 +2457,7 @@ int GModel::readDIFF(const std::string &name)
         else
           format_read_vertices += " %d";
         k2=mapping[k];
-        if(sscanf(str, format_read_vertices.c_str(), &ElementsNodes[i-1][k2]) != 1)
+        if(sscanf(str, format_read_vertices.c_str(), &ElementsNodes[i-1][k2]) != 1) 
           return 0;
       }
       mapping.clear();
@@ -2462,11 +2465,11 @@ int GModel::readDIFF(const std::string &name)
         indices[j] = ElementsNodes[i - 1][j];
       std::vector<MVertex*> vertices;
       if(vertexVector.size()){
-        if(!getVertices(numVerticesPerElement, indices, vertexVector, vertices))
+        if(!getVertices(numVerticesPerElement, indices, vertexVector, vertices)) 
           return 0;
       }
       else{
-        if(!getVertices(numVerticesPerElement, indices, vertexMap, vertices))
+        if(!getVertices(numVerticesPerElement, indices, vertexMap, vertices)) 
           return 0;
       }
       createElementMSH(this, num, type, physical, elementary[i-1][1], partition,