diff --git a/Fltk/partitionDialog.cpp b/Fltk/partitionDialog.cpp
index d88a7de24dde2c7f6c244668cd47341c9e021961..08ee3c964bebbcaf85108691e711d900975dcda0 100644
--- a/Fltk/partitionDialog.cpp
+++ b/Fltk/partitionDialog.cpp
@@ -36,6 +36,7 @@ void partition_opt_chaco_globalalg_cb(Fl_Widget *widget, void *data);
 void partition_opt_architecture_cb(Fl_Widget *widget, void *data);
 void partition_opt_num_partitions_cb(Fl_Widget *widget, void *data);
 void partition_opt_spectralcheck_cb(Fl_Widget *widget, void *data);
+void partition_opt_booleans_cb(Fl_Widget *widget, void *data);
 void partition_select_groups_cb(Fl_Widget *widget, void *data);
 
 // Pointers to required widgets
@@ -45,6 +46,10 @@ struct PartitionDialog
   // Group 0
   Fl_Choice *choicePartitioner;
   Fl_Value_Input *inputNumPartition;
+  Fl_Check_Button *setPartitionEntities;
+  Fl_Check_Button *setGhostCells;
+  Fl_Check_Button *setPartitionBoundaries;
+  Fl_Check_Button *setTopologyFile;
   // Group 1
   Fl_Choice *choiceChacoAlg;
   Fl_Toggle_Button *toggleButtonAdvChaco;
@@ -83,6 +88,10 @@ struct PartitionDialog
     CTX::instance()->partitionOptions.partitioner = choicePartitioner->value() + 1;
     CTX::instance()->partitionOptions.num_partitions =
       static_cast<int>(inputNumPartition->value());
+    CTX::instance()->partitionOptions.createPartitionEntities = setPartitionEntities->value();
+    CTX::instance()->partitionOptions.createGhostCells = setGhostCells->value();
+    CTX::instance()->partitionOptions.createPartitionBoundaries = setPartitionBoundaries->value();
+    CTX::instance()->partitionOptions.createTopologyFile = setTopologyFile->value();
 
     // Group 1
     CTX::instance()->partitionOptions.global_method = choiceChacoAlg->value() + 1;
@@ -137,6 +146,10 @@ struct PartitionDialog
     // Group 0
     choicePartitioner->value(CTX::instance()->partitionOptions.partitioner - 1);
     inputNumPartition->value(CTX::instance()->partitionOptions.num_partitions);
+    setPartitionEntities->value(CTX::instance()->partitionOptions.createPartitionEntities);
+    setGhostCells->value(CTX::instance()->partitionOptions.createGhostCells);
+    setPartitionBoundaries->value(CTX::instance()->partitionOptions.createPartitionBoundaries);
+    setTopologyFile->value(CTX::instance()->partitionOptions.createTopologyFile);
 
     // Group 1
     choiceChacoAlg->value(CTX::instance()->partitionOptions.global_method - 1);
@@ -323,6 +336,25 @@ void partition_opt_spectralcheck_cb(Fl_Widget *widget, void *data)
   }
 }
 
+// Option considerations for the booleans
+void partition_opt_booleans_cb(Fl_Widget *widget, void *data)
+{
+  PartitionDialog *dlg = static_cast<PartitionDialog*>(data);
+  if(dlg->setTopologyFile->value() == 1)
+  {
+    dlg->setPartitionEntities->value(1);
+    dlg->setPartitionEntities->deactivate();
+    dlg->setPartitionBoundaries->value(1);
+    dlg->setPartitionBoundaries->deactivate();
+  }
+  else
+  {
+    dlg->setPartitionEntities->activate();
+    dlg->setPartitionBoundaries->activate();
+  }
+}
+
+
 void partition_defaults_cb(Fl_Widget *widget, void *data)
 {
   PartitionDialog *dlg = static_cast<PartitionDialog*>(data);
@@ -485,7 +517,7 @@ void partition_dialog()
     {0}
   };
 
-  const int h = 6 * WB + 3 * BH + 4;    // This will be resized based on groups
+  const int h = 8 * WB + 5 * BH + 4;    // This will be resized based on groups
                                         // that are displayed
   const int w = 3 * BB + IW + 3 * WB;   // Window width
   int y = 0;
@@ -497,7 +529,7 @@ void partition_dialog()
 
   // Main options group [0]
   {
-    const int GH = BH + 2 + 3*WB;
+    const int GH = 3*BH + 2 + 5*WB;
     y += WB;
     Fl_Group *g = new Fl_Group(0, y, w, GH);
     // Partitioner
@@ -526,6 +558,29 @@ void partition_dialog()
       o->align(FL_ALIGN_RIGHT);
     }
     y += BH + WB;
+    // Booleans options
+    {
+      Fl_Check_Button *const o = new Fl_Check_Button (WB, y, 2*BB, BH, "Create partition entities");
+      dlg.setPartitionEntities = o;
+      o->callback((Fl_Callback *)partition_opt_booleans_cb, &dlg);
+    }
+    {
+      Fl_Check_Button *const o = new Fl_Check_Button (2*WB + 2*BB, y, 2*BB, BH, "Create ghost cells");
+      dlg.setGhostCells = o;
+      o->callback((Fl_Callback *)partition_opt_booleans_cb, &dlg);
+    }
+    y += BH + WB;
+    {
+      Fl_Check_Button *const o = new Fl_Check_Button (WB, y, 2*BB, BH, "Create partition boundaries");
+      dlg.setPartitionBoundaries = o;
+      o->callback((Fl_Callback *)partition_opt_booleans_cb, &dlg);
+    }
+    {
+      Fl_Check_Button *const o = new Fl_Check_Button (2*WB + 2*BB, y, 2*BB, BH, "Create a totpology file");
+      dlg.setTopologyFile = o;
+      o->callback((Fl_Callback *)partition_opt_booleans_cb, &dlg);
+    }
+    y += BH + WB;
     // Box (line)
     { Fl_Box* o = new Fl_Box(WB, y, w - 2*WB, 2);
       o->box(FL_ENGRAVED_FRAME);
diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index 743ab8e73194dddb430d4fa89d5b7172030f4a1c..5896ad44a8abf5c7aaa445f4eb3acdef948cb723 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -4081,10 +4081,10 @@ void GModel::classifyFaces(std::set<GFace*> &_faces)
 #endif
 }
 
-void GModel::createPartitionBoundaries(int createGhostCells, int createAllDims)
+void GModel::createPartitionBoundaries(int createGhostCells)
 {
 #if (defined(HAVE_CHACO) || defined(HAVE_METIS)) && defined(HAVE_MESH)
-  CreatePartitionBoundaries(this, createGhostCells, createAllDims);
+  CreatePartitionBoundaries(this, createGhostCells);
 #endif
 }
 
diff --git a/Geo/GModel.h b/Geo/GModel.h
index e292adf43f030b3fc9c63415c21ad805693b6038..249f753a8b8e070e7478be40431055a886ed429c 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -478,7 +478,7 @@ class GModel {
   int partitionMesh(int num);
 
   // create partition boundaries
-  void createPartitionBoundaries(int createGhostCells, int createAllDims = 0);
+  void createPartitionBoundaries(int createGhostCells);
 
   // fill the vertex arrays, given the current option and data
   bool fillVertexArrays();
diff --git a/Mesh/meshPartition.cpp b/Mesh/meshPartition.cpp
index 033a1bb85a4a540486efa85cc47792f30a527088..8cc7c78e227990cc88fe3176a83bc8bc90dc4394 100644
--- a/Mesh/meshPartition.cpp
+++ b/Mesh/meshPartition.cpp
@@ -84,10 +84,10 @@ int PartitionMesh(GModel *const model, meshPartitionOptions &options)
   
   if (options.createPartitionBoundaries || options.createGhostCells)
   {
-    CreatePartitionBoundaries(model, options.createGhostCells, options.createAllDims);
+    CreatePartitionBoundaries(model, options.createGhostCells);
   }
   
-  if (options.createTopologyFile && options.createPartitionEntities)
+  if (options.createTopologyFile && options.createPartitionEntities && (options.createPartitionBoundaries || options.createGhostCells))
   {
     CreateTopologyFile(model, options.num_partitions);
   }
@@ -828,7 +828,7 @@ void addPhysical(GModel *model, GEntity *newEntity, GEntity *oldEntity, int part
  *
  ******************************************************************************/
 
-int CreatePartitionBoundaries(GModel *model, bool createGhostCells, bool createAllDims)
+int CreatePartitionBoundaries(GModel *model, bool createGhostCells)
 {
   unsigned int numElem[6];
   const int meshDim = model->getNumMeshElements(numElem);
diff --git a/Mesh/meshPartition.h b/Mesh/meshPartition.h
index 4442df8f74d53b1bdb8702bda9514d262b759d3d..0f644485285b57098c9e8b4ce0d4db96ace0655d 100644
--- a/Mesh/meshPartition.h
+++ b/Mesh/meshPartition.h
@@ -48,7 +48,7 @@ template <class ITERATOR>
 void assignElementsToEntities(GModel *model, std::vector<GVertex *> &newVertices, GVertex *vertex, std::vector<discreteVertex *> &dVertices, ITERATOR it_beg, ITERATOR it_end);
 void addPhysical(GModel *model, GEntity *newEntity, GEntity *oldEntity, int partition);
 
-int CreatePartitionBoundaries(GModel *model, bool createGhostCells, bool createAllDims = false);
+int CreatePartitionBoundaries(GModel *model, bool createGhostCells);
 template <class ITERATOR>
 void fillit_(std::unordered_map<MFace, std::vector<MElement*> , Hash_Face, Equal_Face> &faceToElement, ITERATOR it_beg, ITERATOR it_end);
 template <class ITERATOR>
diff --git a/Mesh/meshPartitionOptions.h b/Mesh/meshPartitionOptions.h
index 16ad8cb8b4007d66a19f79829280fba09f7cbbe3..ba38fee16c747f0f5c0498462f058dd312ac9948 100644
--- a/Mesh/meshPartitionOptions.h
+++ b/Mesh/meshPartitionOptions.h
@@ -19,7 +19,6 @@ class meshPartitionOptions
   int renumber;
   bool createPartitionBoundaries;
   bool createGhostCells;
-  bool createAllDims;
   bool createPartitionEntities;
   bool createTopologyFile;
 
@@ -126,10 +125,9 @@ class meshPartitionOptions
     edge_matching = 3;
     refine_algorithm = 3;
     createPartitionBoundaries = true;
-    createGhostCells = true;
-    createAllDims = false;
+    createGhostCells = false;
     createPartitionEntities = true;
-    createTopologyFile = true;
+    createTopologyFile = false;
     triWeight = 1;
     quaWeight = 1;
     tetWeight = 1;