Yes, this is too difficult. Here is a workaround for this case. It's not trivial bit it works well for the problem at hand. Basically, we generate a boundary mesh from a 2D mesh that has an interior region: m = ToElementMesh[Annulus[{0, 0}, {9/10, 1}], "RegionHoles" -> None, "MeshOrder" -> 1, MaxCellMeasure -> Infinity]; m["Wireframe"] [![enter image description here][1]][1] Next, we extract the coordinates and get the largest incident number. coords = m["Coordinates"]; c1 = Join[coords, ConstantArray[{0.}, {Length[coords]}], 2]; c2 = Join[coords, ConstantArray[{1.}, {Length[coords]}], 2]; ele = m["MeshElements"]; max = Max[ElementIncidents[ele]] 136 We extract the boundary elements from the mesh and construct the sides: tohigherIndex[type_[inci_, marker___], max_] := type[inci + max, marker] (* old code: not good *) (* tmpBM = ToBoundaryMesh[m]; sides = QuadElement[Map[Join[#1, Reverse[#1 + max]] &, #]] & /@ ElementIncidents[ Flatten[MeshElementSplitByMarker[tmpBM["BoundaryElements"]]]];*) sides = QuadElement[Map[Join[#1, Reverse[#1 + max]] &, #]] & /@ ElementIncidents[ Flatten[MeshElementSplitByMarker[m["BoundaryElements"]]]]; We now construct the boundary mesh: bm = ToBoundaryMesh["Coordinates" -> Join[c1, c2], "BoundaryElements" -> Join[ele, tohigherIndex[#, max] & /@ ele, sides]] bm["Wireframe"] [![enter image description here][2]][2] And generate the full mesh: ToElementMesh[bm]["Wireframe"] [![enter image description here][3]][3] Hope this helps. With the updated version I get this for your second mesh: [![enter image description here][4]][4] [1]: https://i.sstatic.net/1X6tY.png [2]: https://i.sstatic.net/xQogo.png [3]: https://i.sstatic.net/79nH5.png [4]: https://i.sstatic.net/P2Yyi.png