diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp
index 1cce9b9a022bade3f2cbf7aec649ed55646f3d57..bad1dd74008288dd212d79e4926b1b2fb0e40d8a 100644
--- a/Common/CommandLine.cpp
+++ b/Common/CommandLine.cpp
@@ -93,6 +93,7 @@ void PrintUsage(const char *name)
   Msg::Direct("  -bgm file             Load background mesh from file");
   Msg::Direct("  -check                Perform various consistency checks on mesh");
   Msg::Direct("  -mpass int            Do several passes on the mesh for complex backround fields");
+  Msg::Direct("  -ignorePartBound      Ignore partitions boundaries");
 #if defined(HAVE_FLTK)
   Msg::Direct("Post-processing options:");
   Msg::Direct("  -link int             Select link mode between views (0, 1, 2, 3, 4)");
@@ -492,6 +493,10 @@ void GetOptions(int argc, char *argv[])
         else
           Msg::Fatal("Missing number");
       }
+      else if(!strcmp(argv[i] + 1, "ignorePartBound")) {
+        i++;
+        opt_mesh_ignore_part_bound(0, GMSH_SET, 1);
+      }
       else if(!strcmp(argv[i] + 1, "edgelmin")) {
         i++;
         if(argv[i]) {
diff --git a/Common/Context.cpp b/Common/Context.cpp
index 14c48277673e3670a4dc51880a5b92f1049b8237..64cb56103ce8f7c6560d35817da5b55542c815c4 100644
--- a/Common/Context.cpp
+++ b/Common/Context.cpp
@@ -80,6 +80,7 @@ CTX::CTX()
   mesh.explode = mesh.angleSmoothNormals = 0.;
   mesh.numSubEdges = 0;
   mesh.colorCarousel = 0;
+  mesh.ignorePartBound = 0;
   color.mesh.tangents = color.mesh.tetrahedron = color.mesh.triangle = 0;
   color.mesh.prism = color.mesh.pyramid = color.mesh.hexahedron = 0;
   color.mesh.tangents = color.mesh.line = color.mesh.quadrangle = 0;
diff --git a/Common/Context.h b/Common/Context.h
index 30fa9449531c78aa9cb843a9f941cbcfde9f2209..8fcab24dfc6b0b6e9cfb04d70c19ed521efcfacb 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -43,6 +43,7 @@ struct contextMeshOptions {
   int cgnsImportOrder;
   std::map<int,int> algo2d_per_face;
   int bunin;
+  int ignorePartBound;
 };
 
 struct contextGeometryOptions {
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index 458985e624bdb251e5696f1fc302ac8f084f6d2f..784ed2e4161c627f618d61d5e58e260678c4b929 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -996,6 +996,8 @@ StringXNumber MeshOptions_Number[] = {
   { F|O, "RandomFactor" , opt_mesh_rand_factor , 1.e-9 ,
     "Random factor used in the 2D meshing algorithm (should be increased if "
     "RandomFactor * size(triangle)/size(model) approaches machine accuracy)" },
+  { F|O, "IgnorePartitionBoundary" , opt_mesh_ignore_part_bound , 0. ,
+    "Ignore partitions boundaries (0=no, 1=yes)"},
 #if defined(HAVE_BLOSSOM)
   { F|O, "RecombinationAlgorithm" , opt_mesh_algo_recombine , 1 ,
 #else
diff --git a/Common/Options.cpp b/Common/Options.cpp
index d9ce3206ede42fc5babc602d8a33804d23e59bba..0e82a74519dd82e5733f257c055b7c8023f2b168 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -5588,6 +5588,13 @@ double opt_mesh_clip(OPT_ARGS_NUM)
   return CTX::instance()->mesh.clip;
 }
 
+double opt_mesh_ignore_part_bound(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX::instance()->mesh.ignorePartBound = (int) val;
+  return CTX::instance()->mesh.ignorePartBound;
+}
+
 double opt_solver_listen(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
diff --git a/Common/Options.h b/Common/Options.h
index 5ba1277f3a4d78f21fd11cb26e31cd857157dfad..a24da1d1945e44b9cb546ebbb9ced03321f2c384 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -452,6 +452,7 @@ double opt_mesh_partition_metis_algorithm(OPT_ARGS_NUM);
 double opt_mesh_partition_metis_edge_matching(OPT_ARGS_NUM);
 double opt_mesh_partition_metis_refine_algorithm(OPT_ARGS_NUM);
 double opt_mesh_clip(OPT_ARGS_NUM);
+double opt_mesh_ignore_part_bound(OPT_ARGS_NUM);
 double opt_solver_listen(OPT_ARGS_NUM);
 double opt_solver_timeout(OPT_ARGS_NUM);
 double opt_solver_plugins(OPT_ARGS_NUM);
diff --git a/Geo/GModelIO_Mesh.cpp b/Geo/GModelIO_Mesh.cpp
index 6729ff742dde1145b57896d47586ea30c042ab84..127492ebb75b0474968c04eae07f8f327e065e56 100644
--- a/Geo/GModelIO_Mesh.cpp
+++ b/Geo/GModelIO_Mesh.cpp
@@ -526,24 +526,24 @@ int GModel::readMSH(const std::string &name)
             if(dom2 && !doms[1]) Msg::Error("Domain element %d not found for element %d", dom2, num);
 #endif
 	  }
-
-          MElement *e = createElementMSH(this, num, type, physical, elementary,
-                                         partition, vertices, elements, physicals,
-                                         own, p, doms[0], doms[1]);
-
+    if (CTX::instance()->mesh.ignorePartBound && elementary<0) continue;
+    MElement *e = createElementMSH(this, num, type, physical, elementary,
+                                   partition, vertices, elements, physicals,
+                                   own, p, doms[0], doms[1]);
+    
 #if (FAST_ELEMENTS==1)
 	  elems[num] = e;
 	  elemreg[num] = elementary;
 	  elemphy[num] = physical;
 #endif
-
-          for(unsigned int j = 0; j < ghosts.size(); j++)
-            _ghostCells.insert(std::pair<MElement*, short>(e, ghosts[j]));
-          if(numElements > 100000)
-            Msg::ProgressMeter(i + 1, numElements, "Reading elements");
-          delete [] indices;
+    
+    for(unsigned int j = 0; j < ghosts.size(); j++)
+      _ghostCells.insert(std::pair<MElement*, short>(e, ghosts[j]));
+    if(numElements > 100000)
+      Msg::ProgressMeter(i + 1, numElements, "Reading elements");
+    delete [] indices;
         }
-
+        
 #if (FAST_ELEMENTS==1)
 	for(int i = 0; i < 10; i++)
 	  elements[i].clear();