diff --git a/Common/Context.h b/Common/Context.h
index cc0c02bc66433026947004f6ce2fc3d9132ae912..86623f9303be9de48288698acf889e0eadeb3154 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -170,11 +170,14 @@ class CTX {
     double angle_smooth_normals;
     double allow_swap_edge_angle;
     int zone_definition;
-    meshPartitionOptions partition_options;
-    CGNSOptions cgns_options;
     int clip; // status of clip planes (bit array)
   } mesh;
 
+  // FIXME: putting these in the mesh struct (where they belong) causes 
+  // an LNK1179 error ("duplicate COMDAT") with MSVC. I have no idea why.
+  meshPartitionOptions partition_options;
+  CGNSOptions cgns_options;
+
   // post processing options 
   struct{
     int draw, link, horizontal_scales;
diff --git a/Common/CreateFile.cpp b/Common/CreateFile.cpp
index 74632f15ba9aa8b30d8f58d9d5b4f99dfc455d71..caac6877e1ceea0b634eabe131c9966ba37385fc 100644
--- a/Common/CreateFile.cpp
+++ b/Common/CreateFile.cpp
@@ -192,7 +192,7 @@ void CreateOutputFile(std::string fileName, int format)
 
   case FORMAT_CGNS:
     GModel::current()->writeCGNS
-      (fileName, CTX::instance()->mesh.zone_definition, CTX::instance()->mesh.cgns_options, 
+      (fileName, CTX::instance()->mesh.zone_definition, CTX::instance()->cgns_options, 
        CTX::instance()->mesh.scaling_factor);
     break;
 
diff --git a/Common/Gmsh.cpp b/Common/Gmsh.cpp
index b2d4599e26b81896195496129ed998562deaf7ab..340393a3a875ef8eff94440cd39f9e1155cbd451 100644
--- a/Common/Gmsh.cpp
+++ b/Common/Gmsh.cpp
@@ -126,7 +126,7 @@ int GmshBatch()
       RefineMesh(GModel::current(), CTX::instance()->mesh.second_order_linear);
 #if defined(HAVE_CHACO) || defined(HAVE_METIS)
     if(CTX::instance()->batch_after_mesh == 1)
-      PartitionMesh(GModel::current(), CTX::instance()->mesh.partition_options);
+      PartitionMesh(GModel::current(), CTX::instance()->partition_options);
 #endif
     CreateOutputFile(CTX::instance()->output_filename, CTX::instance()->mesh.format);
   }
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 1dd1799d341784502851c4b34fa98792c52b881d..73e8a2b42a441441da82f901509f2d8f5031c2f5 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -5693,186 +5693,186 @@ double opt_mesh_partition_partitioner(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     const int ival = (int)val;
-    CTX::instance()->mesh.partition_options.partitioner =
+    CTX::instance()->partition_options.partitioner =
       (ival < 1 || ival > 2) ? 1 : ival;
   }
-  return CTX::instance()->mesh.partition_options.partitioner;
+  return CTX::instance()->partition_options.partitioner;
 }
 
 double opt_mesh_partition_num(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     const int ival = std::max(1, (int)val);
-    CTX::instance()->mesh.partition_options.num_partitions = ival;
+    CTX::instance()->partition_options.num_partitions = ival;
     unsigned hcdim = 0;  // log2 to get hypercube dimensions
     unsigned jval = ival;
     while(jval >>= 1) ++hcdim;
-    CTX::instance()->mesh.partition_options.ndims_tot = hcdim;
-    CTX::instance()->mesh.partition_options.mesh_dims[0] = ival;
-    CTX::instance()->mesh.partition_options.mesh_dims[1] = 1;
-    CTX::instance()->mesh.partition_options.mesh_dims[2] = 1;
-    if(CTX::instance()->mesh.partition_options.partitioner == 2)  // METIS
-      CTX::instance()->mesh.partition_options.algorithm = (ival <= 8) ? 1 : 2;
+    CTX::instance()->partition_options.ndims_tot = hcdim;
+    CTX::instance()->partition_options.mesh_dims[0] = ival;
+    CTX::instance()->partition_options.mesh_dims[1] = 1;
+    CTX::instance()->partition_options.mesh_dims[2] = 1;
+    if(CTX::instance()->partition_options.partitioner == 2)  // METIS
+      CTX::instance()->partition_options.algorithm = (ival <= 8) ? 1 : 2;
   }
-  return CTX::instance()->mesh.partition_options.num_partitions;
+  return CTX::instance()->partition_options.num_partitions;
 }
 
 double opt_mesh_partition_chaco_global_method(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     int ival = (int)val;
-    CTX::instance()->mesh.partition_options.global_method =
+    CTX::instance()->partition_options.global_method =
       (ival < 1 || ival > 6 || ival == 3) ? 1 : ival;
   }
-  return  CTX::instance()->mesh.partition_options.global_method;
+  return  CTX::instance()->partition_options.global_method;
 }
 
 double opt_mesh_partition_chaco_architecture(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     const int ival = (int)val;
-    CTX::instance()->mesh.partition_options.architecture =
+    CTX::instance()->partition_options.architecture =
       (ival < 0 || ival > 3) ? 1 : ival;
   }
-  return CTX::instance()->mesh.partition_options.architecture;
+  return CTX::instance()->partition_options.architecture;
 }
 
 double opt_mesh_partition_chaco_ndims_tot(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     const int ival = std::max(1, (int)val);
-    CTX::instance()->mesh.partition_options.ndims_tot = ival;
-    CTX::instance()->mesh.partition_options.num_partitions = 1 << ival;
+    CTX::instance()->partition_options.ndims_tot = ival;
+    CTX::instance()->partition_options.num_partitions = 1 << ival;
   }
-  return CTX::instance()->mesh.partition_options.ndims_tot;
+  return CTX::instance()->partition_options.ndims_tot;
 }
 
 double opt_mesh_partition_chaco_mesh_dims1(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     const int ival = std::max(1, (int)val);
-    CTX::instance()->mesh.partition_options.mesh_dims[0] = ival;
-    CTX::instance()->mesh.partition_options.num_partitions = ival;
-    if(CTX::instance()->mesh.partition_options.architecture >= 2)
-      CTX::instance()->mesh.partition_options.num_partitions *=
-        CTX::instance()->mesh.partition_options.mesh_dims[1];
-    if(CTX::instance()->mesh.partition_options.architecture == 3)
-      CTX::instance()->mesh.partition_options.num_partitions *=
-        CTX::instance()->mesh.partition_options.mesh_dims[2];
+    CTX::instance()->partition_options.mesh_dims[0] = ival;
+    CTX::instance()->partition_options.num_partitions = ival;
+    if(CTX::instance()->partition_options.architecture >= 2)
+      CTX::instance()->partition_options.num_partitions *=
+        CTX::instance()->partition_options.mesh_dims[1];
+    if(CTX::instance()->partition_options.architecture == 3)
+      CTX::instance()->partition_options.num_partitions *=
+        CTX::instance()->partition_options.mesh_dims[2];
   }
-  return CTX::instance()->mesh.partition_options.mesh_dims[0];
+  return CTX::instance()->partition_options.mesh_dims[0];
 }
 
 double opt_mesh_partition_chaco_mesh_dims2(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     const int ival = std::max(1, (int)val);
-    CTX::instance()->mesh.partition_options.mesh_dims[1] = ival;
-    CTX::instance()->mesh.partition_options.num_partitions =
-      CTX::instance()->mesh.partition_options.mesh_dims[0]*ival;
-    if(CTX::instance()->mesh.partition_options.architecture == 3)
-      CTX::instance()->mesh.partition_options.num_partitions *=
-        CTX::instance()->mesh.partition_options.mesh_dims[2];
+    CTX::instance()->partition_options.mesh_dims[1] = ival;
+    CTX::instance()->partition_options.num_partitions =
+      CTX::instance()->partition_options.mesh_dims[0]*ival;
+    if(CTX::instance()->partition_options.architecture == 3)
+      CTX::instance()->partition_options.num_partitions *=
+        CTX::instance()->partition_options.mesh_dims[2];
   }
-  return CTX::instance()->mesh.partition_options.mesh_dims[1];
+  return CTX::instance()->partition_options.mesh_dims[1];
 }
 
 double opt_mesh_partition_chaco_mesh_dims3(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     const int ival = std::max(1, (int)val);
-    CTX::instance()->mesh.partition_options.mesh_dims[2] = ival;
-    CTX::instance()->mesh.partition_options.num_partitions =
-      CTX::instance()->mesh.partition_options.mesh_dims[0]*
-      CTX::instance()->mesh.partition_options.mesh_dims[1]*ival;
+    CTX::instance()->partition_options.mesh_dims[2] = ival;
+    CTX::instance()->partition_options.num_partitions =
+      CTX::instance()->partition_options.mesh_dims[0]*
+      CTX::instance()->partition_options.mesh_dims[1]*ival;
   }
-  return CTX::instance()->mesh.partition_options.mesh_dims[2];
+  return CTX::instance()->partition_options.mesh_dims[2];
 }
 
 double opt_mesh_partition_chaco_local_method(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     int ival = (int)val;
-    if(CTX::instance()->mesh.partition_options.algorithm == 1) ival = 1;
-    CTX::instance()->mesh.partition_options.local_method = (ival < 0 || ival > 1) ? 1 : ival;
+    if(CTX::instance()->partition_options.algorithm == 1) ival = 1;
+    CTX::instance()->partition_options.local_method = (ival < 0 || ival > 1) ? 1 : ival;
   }
-  return CTX::instance()->mesh.partition_options.local_method;
+  return CTX::instance()->partition_options.local_method;
 }
 
 double opt_mesh_partition_chaco_eigensolver(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     int ival = val ? 1 : 0;
-    CTX::instance()->mesh.partition_options.rqi_flag = ival;
+    CTX::instance()->partition_options.rqi_flag = ival;
   }
-  return CTX::instance()->mesh.partition_options.rqi_flag;
+  return CTX::instance()->partition_options.rqi_flag;
 }
 
 double opt_mesh_partition_chaco_vmax(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     const int ival = (int)val;
-    CTX::instance()->mesh.partition_options.vmax = (ival < 1) ? 1 : ival;
+    CTX::instance()->partition_options.vmax = (ival < 1) ? 1 : ival;
   }
-  return CTX::instance()->mesh.partition_options.vmax;
+  return CTX::instance()->partition_options.vmax;
 }
 
 double opt_mesh_partition_chaco_nsection(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     const int ival = (int)val;
-    CTX::instance()->mesh.partition_options.ndims = (ival < 1 || ival > 3) ? 1 : ival;
-    if(CTX::instance()->mesh.partition_options.ndims > 1 &&
-       CTX::instance()->mesh.partition_options.algorithm == 2)
-      CTX::instance()->mesh.partition_options.terminal_propogation = false;
+    CTX::instance()->partition_options.ndims = (ival < 1 || ival > 3) ? 1 : ival;
+    if(CTX::instance()->partition_options.ndims > 1 &&
+       CTX::instance()->partition_options.algorithm == 2)
+      CTX::instance()->partition_options.terminal_propogation = false;
   }
-  return CTX::instance()->mesh.partition_options.ndims;
+  return CTX::instance()->partition_options.ndims;
 }
 
 double opt_mesh_partition_chaco_eigtol(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
-    CTX::instance()->mesh.partition_options.eigtol = (val <= 0.) ? 1.E-3 : val;
-  return CTX::instance()->mesh.partition_options.eigtol;
+    CTX::instance()->partition_options.eigtol = (val <= 0.) ? 1.E-3 : val;
+  return CTX::instance()->partition_options.eigtol;
 }
 
 double opt_mesh_partition_chaco_seed(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
-    CTX::instance()->mesh.partition_options.seed = (long)val;
-  return CTX::instance()->mesh.partition_options.seed;
+    CTX::instance()->partition_options.seed = (long)val;
+  return CTX::instance()->partition_options.seed;
 }
 
 double opt_mesh_partition_chaco_refine_partition(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
-    CTX::instance()->mesh.partition_options.refine_partition = val ? 1 : 0;
-  return CTX::instance()->mesh.partition_options.refine_partition;
+    CTX::instance()->partition_options.refine_partition = val ? 1 : 0;
+  return CTX::instance()->partition_options.refine_partition;
 }
 
 double opt_mesh_partition_chaco_internal_vertices(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
-    CTX::instance()->mesh.partition_options.internal_vertices = val ? 1 : 0;
-  return CTX::instance()->mesh.partition_options.internal_vertices;
+    CTX::instance()->partition_options.internal_vertices = val ? 1 : 0;
+  return CTX::instance()->partition_options.internal_vertices;
 }
 
 double opt_mesh_partition_chaco_refine_map(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
-    CTX::instance()->mesh.partition_options.refine_map = val ? 1 : 0;
-  return CTX::instance()->mesh.partition_options.refine_map;
+    CTX::instance()->partition_options.refine_map = val ? 1 : 0;
+  return CTX::instance()->partition_options.refine_map;
 }
 
 double opt_mesh_partition_chaco_terminal_propogation(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
-    CTX::instance()->mesh.partition_options.terminal_propogation = val ? 1 : 0;
-    if(CTX::instance()->mesh.partition_options.terminal_propogation &&
-       CTX::instance()->mesh.partition_options.algorithm == 2)
-      CTX::instance()->mesh.partition_options.ndims = 1;
+    CTX::instance()->partition_options.terminal_propogation = val ? 1 : 0;
+    if(CTX::instance()->partition_options.terminal_propogation &&
+       CTX::instance()->partition_options.algorithm == 2)
+      CTX::instance()->partition_options.ndims = 1;
   }
-  return CTX::instance()->mesh.partition_options.terminal_propogation;
+  return CTX::instance()->partition_options.terminal_propogation;
 }
 
 double opt_mesh_partition_metis_algorithm(OPT_ARGS_NUM)
@@ -5880,30 +5880,30 @@ double opt_mesh_partition_metis_algorithm(OPT_ARGS_NUM)
   if(action & GMSH_SET) {
     int ival = (int)val;
     if(ival < 1 || ival > 2)
-      ival = (CTX::instance()->mesh.partition_options.num_partitions <= 8) ? 1 : 2;
-    CTX::instance()->mesh.partition_options.algorithm = ival;
+      ival = (CTX::instance()->partition_options.num_partitions <= 8) ? 1 : 2;
+    CTX::instance()->partition_options.algorithm = ival;
   }
-  return  CTX::instance()->mesh.partition_options.algorithm;
+  return  CTX::instance()->partition_options.algorithm;
 }
 
 double opt_mesh_partition_metis_edge_matching(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     const int ival = (int)val;
-    CTX::instance()->mesh.partition_options.edge_matching =
+    CTX::instance()->partition_options.edge_matching =
       (ival < 1 || ival > 3) ? 3 : ival;
   }
-  return CTX::instance()->mesh.partition_options.edge_matching;
+  return CTX::instance()->partition_options.edge_matching;
 }
 
 double opt_mesh_partition_metis_refine_algorithm(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET) {
     const int ival = (int)val;
-    CTX::instance()->mesh.partition_options.refine_algorithm =
+    CTX::instance()->partition_options.refine_algorithm =
       (ival < 1 || ival > 3) ? 3 : ival;
   }
-  return CTX::instance()->mesh.partition_options.refine_algorithm;
+  return CTX::instance()->partition_options.refine_algorithm;
 }
 
 double opt_mesh_clip(OPT_ARGS_NUM)
diff --git a/Fltk/fileDialogs.cpp b/Fltk/fileDialogs.cpp
index c0ee1ea3d08a146de407ad37c492bd4fd2d210b3..f091d06f2b3b43240757b2b67526916808e93acb 100644
--- a/Fltk/fileDialogs.cpp
+++ b/Fltk/fileDialogs.cpp
@@ -960,42 +960,42 @@ struct CGNSWriteDialog
   void write_all_options()
   {
     opt_mesh_zone_definition(0, GMSH_SET | GMSH_GUI, choiceZoneDef->value());
-    CTX::instance()->mesh.cgns_options.baseName = inputBaseName->value();
-    CTX::instance()->mesh.cgns_options.zoneName = inputZoneName->value();
-    CTX::instance()->mesh.cgns_options.interfaceName = inputInterfaceName->value();
-    CTX::instance()->mesh.cgns_options.patchName = inputPatchName->value();
-    CTX::instance()->mesh.cgns_options.gridConnectivityLocation =
+    CTX::instance()->cgns_options.baseName = inputBaseName->value();
+    CTX::instance()->cgns_options.zoneName = inputZoneName->value();
+    CTX::instance()->cgns_options.interfaceName = inputInterfaceName->value();
+    CTX::instance()->cgns_options.patchName = inputPatchName->value();
+    CTX::instance()->cgns_options.gridConnectivityLocation =
       roundButton1GCatFace->value();
-    CTX::instance()->mesh.cgns_options.writeBC = checkButtonWriteBC->value();
-    CTX::instance()->mesh.cgns_options.bocoLocation = roundButton1BCatFace->value();
-    CTX::instance()->mesh.cgns_options.normalSource = (checkButtonWriteNormals->value()) ?
+    CTX::instance()->cgns_options.writeBC = checkButtonWriteBC->value();
+    CTX::instance()->cgns_options.bocoLocation = roundButton1BCatFace->value();
+    CTX::instance()->cgns_options.normalSource = (checkButtonWriteNormals->value()) ?
        roundButton1NormalElem->value() + 1 : 0;
-    CTX::instance()->mesh.cgns_options.vectorDim = choiceVecDim->value() + 2;
-    CTX::instance()->mesh.cgns_options.writeUserDef = checkButtonUnknownUserDef->value();
+    CTX::instance()->cgns_options.vectorDim = choiceVecDim->value() + 2;
+    CTX::instance()->cgns_options.writeUserDef = checkButtonUnknownUserDef->value();
   }
   void read_all_options()
   {
     choiceZoneDef->value(CTX::instance()->mesh.zone_definition);
-    inputBaseName->value(CTX::instance()->mesh.cgns_options.baseName.c_str());
-    inputZoneName->value(CTX::instance()->mesh.cgns_options.zoneName.c_str());
-    inputInterfaceName->value(CTX::instance()->mesh.cgns_options.interfaceName.c_str());
-    inputPatchName->value(CTX::instance()->mesh.cgns_options.patchName.c_str());
-    checkButtonWriteBC->value(CTX::instance()->mesh.cgns_options.writeBC);
-    checkButtonWriteNormals->value(CTX::instance()->mesh.cgns_options.normalSource);
-    choiceVecDim->value(CTX::instance()->mesh.cgns_options.vectorDim - 2);
-    checkButtonUnknownUserDef->value(CTX::instance()->mesh.cgns_options.writeUserDef);
+    inputBaseName->value(CTX::instance()->cgns_options.baseName.c_str());
+    inputZoneName->value(CTX::instance()->cgns_options.zoneName.c_str());
+    inputInterfaceName->value(CTX::instance()->cgns_options.interfaceName.c_str());
+    inputPatchName->value(CTX::instance()->cgns_options.patchName.c_str());
+    checkButtonWriteBC->value(CTX::instance()->cgns_options.writeBC);
+    checkButtonWriteNormals->value(CTX::instance()->cgns_options.normalSource);
+    choiceVecDim->value(CTX::instance()->cgns_options.vectorDim - 2);
+    checkButtonUnknownUserDef->value(CTX::instance()->cgns_options.writeUserDef);
 
     // Call all callbacks to ensure consistent options
     cgnsw_gc_location_cb
-      ((CTX::instance()->mesh.cgns_options.gridConnectivityLocation) ?
+      ((CTX::instance()->cgns_options.gridConnectivityLocation) ?
        roundButton1GCatFace : roundButton0GCatVertex, this);
     // The order of the next 4 is important
     cgnsw_normal_source_cb
-      ((CTX::instance()->mesh.cgns_options.normalSource == 2) ?
+      ((CTX::instance()->cgns_options.normalSource == 2) ?
        roundButton1NormalElem : roundButton0NormalGeo, this);
     cgnsw_write_normals_cb(checkButtonWriteNormals, this);
     cgnsw_bc_location_cb
-      ((CTX::instance()->mesh.cgns_options.bocoLocation) ?
+      ((CTX::instance()->cgns_options.bocoLocation) ?
        roundButton1BCatFace : roundButton0BCatVertex, this);
     cgnsw_write_dummy_bc_cb(checkButtonWriteBC, this);
   }
@@ -1084,7 +1084,7 @@ void cgnsw_normal_source_cb(Fl_Widget *widget, void *data)
 void cgnsw_defaults_cb(Fl_Widget *widget, void *data)
 {
   CGNSWriteDialog *dlg = static_cast<CGNSWriteDialog*>(data);
-  CTX::instance()->mesh.cgns_options.setDefaults();
+  CTX::instance()->cgns_options.setDefaults();
   dlg->read_all_options();
 }
 
diff --git a/Fltk/partitionDialog.cpp b/Fltk/partitionDialog.cpp
index 97bfc8a73d369041aa1fb4341a6372ff6ebf77be..6b7ac7d5e3d51cbf7427f3b7f073c5b90dd3f9e4 100644
--- a/Fltk/partitionDialog.cpp
+++ b/Fltk/partitionDialog.cpp
@@ -72,88 +72,88 @@ struct PartitionDialog
   void write_all_options()
   {
     // Group 0
-    CTX::instance()->mesh.partition_options.partitioner = choicePartitioner->value() + 1;
-    CTX::instance()->mesh.partition_options.num_partitions =
+    CTX::instance()->partition_options.partitioner = choicePartitioner->value() + 1;
+    CTX::instance()->partition_options.num_partitions =
       static_cast<int>(inputNumPartition->value());
 
     // Group 1
-    CTX::instance()->mesh.partition_options.global_method = choiceChacoAlg->value() + 1;
+    CTX::instance()->partition_options.global_method = choiceChacoAlg->value() + 1;
 
     // Group 2
-    CTX::instance()->mesh.partition_options.architecture = choiceArchitecture->value();
-    switch(CTX::instance()->mesh.partition_options.architecture) {
+    CTX::instance()->partition_options.architecture = choiceArchitecture->value();
+    switch(CTX::instance()->partition_options.architecture) {
     case 0:
-      CTX::instance()->mesh.partition_options.ndims_tot =
+      CTX::instance()->partition_options.ndims_tot =
         static_cast<int>(inputNumPartition1->value());
       break;
     case 3:
-      CTX::instance()->mesh.partition_options.mesh_dims[2] =
+      CTX::instance()->partition_options.mesh_dims[2] =
         static_cast<int>(inputNumPartition3->value());
     case 2:
-      CTX::instance()->mesh.partition_options.mesh_dims[1] =
+      CTX::instance()->partition_options.mesh_dims[1] =
         static_cast<int>(inputNumPartition2->value());
     case 1:
-      CTX::instance()->mesh.partition_options.mesh_dims[0] =
+      CTX::instance()->partition_options.mesh_dims[0] =
         static_cast<int>(inputNumPartition1->value());
       break;
     }
-    CTX::instance()->mesh.partition_options.ndims = choiceDivisions->value() + 1;
-    CTX::instance()->mesh.partition_options.vmax = static_cast<int>(inputVMax->value());
-    CTX::instance()->mesh.partition_options.rqi_flag = choiceEigensolver->value();
-    CTX::instance()->mesh.partition_options.eigtol = inputEigtol->value();
-    CTX::instance()->mesh.partition_options.local_method = choiceLocalAlgorithm->value() + 1;
-    CTX::instance()->mesh.partition_options.seed = static_cast<long>(inputSeed->value());
-    CTX::instance()->mesh.partition_options.refine_partition = checkButtonRefPart->value();
-    CTX::instance()->mesh.partition_options.internal_vertices = checkButtonIntVert->value();
-    CTX::instance()->mesh.partition_options.refine_map = checkButtonRefMap->value();
-    CTX::instance()->mesh.partition_options.terminal_propogation =
+    CTX::instance()->partition_options.ndims = choiceDivisions->value() + 1;
+    CTX::instance()->partition_options.vmax = static_cast<int>(inputVMax->value());
+    CTX::instance()->partition_options.rqi_flag = choiceEigensolver->value();
+    CTX::instance()->partition_options.eigtol = inputEigtol->value();
+    CTX::instance()->partition_options.local_method = choiceLocalAlgorithm->value() + 1;
+    CTX::instance()->partition_options.seed = static_cast<long>(inputSeed->value());
+    CTX::instance()->partition_options.refine_partition = checkButtonRefPart->value();
+    CTX::instance()->partition_options.internal_vertices = checkButtonIntVert->value();
+    CTX::instance()->partition_options.refine_map = checkButtonRefMap->value();
+    CTX::instance()->partition_options.terminal_propogation =
       checkButtonTermProp->value();
   
     // Group 3
-    CTX::instance()->mesh.partition_options.algorithm = choiceMetisAlg->value() + 1;
+    CTX::instance()->partition_options.algorithm = choiceMetisAlg->value() + 1;
 
     // Group 4
-    CTX::instance()->mesh.partition_options.edge_matching = choiceEdgeMatch->value() + 1;
-    CTX::instance()->mesh.partition_options.refine_algorithm = choiceRefineAlg->value() + 1;
+    CTX::instance()->partition_options.edge_matching = choiceEdgeMatch->value() + 1;
+    CTX::instance()->partition_options.refine_algorithm = choiceRefineAlg->value() + 1;
   }
   void read_all_options()
   {
     // Group 0
-    choicePartitioner->value(CTX::instance()->mesh.partition_options.partitioner - 1);
-    inputNumPartition->value(CTX::instance()->mesh.partition_options.num_partitions);
+    choicePartitioner->value(CTX::instance()->partition_options.partitioner - 1);
+    inputNumPartition->value(CTX::instance()->partition_options.num_partitions);
 
     // Group 1
-    choiceChacoAlg->value(CTX::instance()->mesh.partition_options.global_method - 1);
+    choiceChacoAlg->value(CTX::instance()->partition_options.global_method - 1);
 
     // Group 2
-    choiceArchitecture->value(CTX::instance()->mesh.partition_options.architecture);
-    switch(CTX::instance()->mesh.partition_options.architecture) {
+    choiceArchitecture->value(CTX::instance()->partition_options.architecture);
+    switch(CTX::instance()->partition_options.architecture) {
     case 0:
-      inputNumPartition1->value(CTX::instance()->mesh.partition_options.ndims_tot);
+      inputNumPartition1->value(CTX::instance()->partition_options.ndims_tot);
       break;
     case 1:
-      inputNumPartition1->value(CTX::instance()->mesh.partition_options.mesh_dims[0]);
+      inputNumPartition1->value(CTX::instance()->partition_options.mesh_dims[0]);
       break;
     }
-    inputNumPartition2->value(CTX::instance()->mesh.partition_options.mesh_dims[1]);
-    inputNumPartition3->value(CTX::instance()->mesh.partition_options.mesh_dims[2]);
-    choiceDivisions->value(CTX::instance()->mesh.partition_options.ndims - 1);
-    inputVMax->value(CTX::instance()->mesh.partition_options.vmax);
-    choiceEigensolver->value(CTX::instance()->mesh.partition_options.rqi_flag);
-    inputEigtol->value(CTX::instance()->mesh.partition_options.eigtol);
-    choiceLocalAlgorithm->value(CTX::instance()->mesh.partition_options.local_method - 1);
-    inputSeed->value(CTX::instance()->mesh.partition_options.seed);
-    checkButtonRefPart->value(CTX::instance()->mesh.partition_options.refine_partition);
-    checkButtonIntVert->value(CTX::instance()->mesh.partition_options.internal_vertices);
-    checkButtonRefMap->value(CTX::instance()->mesh.partition_options.refine_map);
-    checkButtonTermProp->value(CTX::instance()->mesh.partition_options.terminal_propogation);
+    inputNumPartition2->value(CTX::instance()->partition_options.mesh_dims[1]);
+    inputNumPartition3->value(CTX::instance()->partition_options.mesh_dims[2]);
+    choiceDivisions->value(CTX::instance()->partition_options.ndims - 1);
+    inputVMax->value(CTX::instance()->partition_options.vmax);
+    choiceEigensolver->value(CTX::instance()->partition_options.rqi_flag);
+    inputEigtol->value(CTX::instance()->partition_options.eigtol);
+    choiceLocalAlgorithm->value(CTX::instance()->partition_options.local_method - 1);
+    inputSeed->value(CTX::instance()->partition_options.seed);
+    checkButtonRefPart->value(CTX::instance()->partition_options.refine_partition);
+    checkButtonIntVert->value(CTX::instance()->partition_options.internal_vertices);
+    checkButtonRefMap->value(CTX::instance()->partition_options.refine_map);
+    checkButtonTermProp->value(CTX::instance()->partition_options.terminal_propogation);
   
     // Group 3
-    choiceMetisAlg->value(CTX::instance()->mesh.partition_options.algorithm - 1);
+    choiceMetisAlg->value(CTX::instance()->partition_options.algorithm - 1);
 
     // Group 4
-    choiceEdgeMatch->value(CTX::instance()->mesh.partition_options.edge_matching - 1);
-    choiceRefineAlg->value(CTX::instance()->mesh.partition_options.refine_algorithm - 1);
+    choiceEdgeMatch->value(CTX::instance()->partition_options.edge_matching - 1);
+    choiceRefineAlg->value(CTX::instance()->partition_options.refine_algorithm - 1);
 
     // Call all callbacks to ensure consistent options
     partition_opt_chaco_globalalg_cb(choiceChacoAlg, this);
@@ -303,7 +303,7 @@ void partition_opt_spectralcheck_cb(Fl_Widget *widget, void *data)
 void partition_defaults_cb(Fl_Widget *widget, void *data)
 {
   PartitionDialog *dlg = static_cast<PartitionDialog*>(data);
-  CTX::instance()->mesh.partition_options.setDefaults();
+  CTX::instance()->partition_options.setDefaults();
   dlg->read_all_options();
   partition_select_groups_cb(dlg->choicePartitioner, data);
 }
@@ -316,7 +316,7 @@ void partition_partition_cb(Fl_Widget *widget, void *data)
   dlg->write_all_options();
 
   // Partition the mesh
-  int ier = PartitionMesh(GModel::current(), CTX::instance()->mesh.partition_options);
+  int ier = PartitionMesh(GModel::current(), CTX::instance()->partition_options);
 
   // Update the screen
   if(!ier) {