diff --git a/benchmarks/bugs/pb_thin_structs.geo b/benchmarks/bugs/pb_thin_structs.geo
new file mode 100644
index 0000000000000000000000000000000000000000..4d05dd73ffb348f3ca725aa4fef42f681c3abf81
--- /dev/null
+++ b/benchmarks/bugs/pb_thin_structs.geo
@@ -0,0 +1,387 @@
+// from saku
+lcoil = 0.6;
+Point(1) = {8.9, 1.1, 0.3, lcoil};
+Point(2) = {10.1, 1.1, 0.3, lcoil};
+Point(3) = {10.1, 1.1, -0.1, lcoil};
+Point(4) = {8.9, 1.1, -0.1, lcoil};
+Point(5) = {9, 1.1, 0.2, lcoil};
+Point(6) = {10, 1.1, 0.2, lcoil};
+Point(7) = {10, 1.1, 0, lcoil};
+Point(8) = {9, 1.1, 0, lcoil};
+Point(9) = {8.9, 3.9, 0.3, lcoil};
+Point(10) = {10.1, 3.9, 0.3, lcoil};
+Point(11) = {10.1, 3.9, -0.1, lcoil};
+Point(12) = {8.9, 3.9, -0.1, lcoil};
+Point(13) = {9, 3.9, 0.2, lcoil};
+Point(14) = {10, 3.9, 0.2, lcoil};
+Point(15) = {10, 3.9, 0, lcoil};
+Point(16) = {9, 3.9, 0, lcoil};
+Line (1) = {4, 3};
+Line (2) = {3, 2};
+Line (3) = {2, 1};
+Line (4) = {1, 4};
+Line (5) = {8, 7};
+Line (6) = {7, 6};
+Line (7) = {6, 5};
+Line (8) = {5, 8};
+Line (9) = {8, 4};
+Line (10) = {7, 3};
+Line (11) = {6, 2};
+Line (12) = {5, 1};
+Line (13) = {3, 11};
+Line (14) = {7, 15};
+Line (15) = {6, 14};
+Line (16) = {2, 10};
+Line (17) = {5, 13};
+Line (18) = {9, 1};
+Line (19) = {4, 12};
+Line (20) = {16, 8};
+Line (21) = {16, 13};
+Line (22) = {12, 9};
+Line (23) = {9, 13};
+Line (24) = {16, 12};
+Line (25) = {12, 11};
+Line (26) = {11, 15};
+Line (27) = {15, 16};
+Line (28) = {15, 14};
+Line (29) = {10, 14};
+Line (30) = {11, 10};
+Line (31) = {14, 13};
+Line (32) = {9, 10};
+Line Loop (1000034) = {32, -16, 3, -18};
+Plane Surface (34) = {1000034};
+Line Loop (1000036) = {15, -29, -16, -11};
+Plane Surface (36) = {1000036};
+Line Loop (1000038) = {17, -23, 18, -12};
+Plane Surface (38) = {1000038};
+Line Loop (1000040) = {17, -31, -15, 7};
+Plane Surface (40) = {1000040};
+Line Loop (1000042) = {3, -12, -7, 11};
+Plane Surface (42) = {1000042};
+Line Loop (1000044) = {31, -23, 32, 29};
+Plane Surface (44) = {1000044};
+Line Loop (1000046) = {18, 4, 19, 22};
+Plane Surface (46) = {1000046};
+Line Loop (1000048) = {17, -21, 20, -8};
+Plane Surface (48) = {1000048};
+Line Loop (1000050) = {19, -24, 20, 9};
+Plane Surface (50) = {1000050};
+Line Loop (1000052) = {4, -9, -8, 12};
+Plane Surface (52) = {1000052};
+Line Loop (1000054) = {21, -23, -22, -24};
+Plane Surface (54) = {1000054};
+Line Loop (1000056) = {25, -13, -1, 19};
+Plane Surface (56) = {1000056};
+Line Loop (1000058) = {20, 5, 14, 27};
+Plane Surface (58) = {1000058};
+Line Loop (1000060) = {13, 26, -14, 10};
+Plane Surface (60) = {1000060};
+Line Loop (1000062) = {25, 26, 27, 24};
+Plane Surface (62) = {1000062};
+Line Loop (1000064) = {1, -10, -5, 9};
+Plane Surface (64) = {1000064};
+Line Loop (1000066) = {13, 30, -16, -2};
+Plane Surface (66) = {1000066};
+Line Loop (1000068) = {14, 28, -15, -6};
+Plane Surface (68) = {1000068};
+Line Loop (1000070) = {31, -21, -27, 28};
+Plane Surface (70) = {1000070};
+Line Loop (1000072) = {7, 8, 5, 6};
+Plane Surface (72) = {1000072};
+Line Loop(1000073) = {6,11,-2,-10};
+Plane Surface(1000074) = {1000073};
+Line Loop(1000075) = {28,-29,-30,26};
+Plane Surface(1000076) = {1000075};
+Surface Loop(1000077) = {58,-48,40,70,-68,-72};
+Volume(1000078) = {1000077};
+Surface Loop(1000079) = {56,-62,60,58,-50,64};
+Volume(1000080) = {1000079};
+Surface Loop(1000081) = {34,-44,-40,38,-42,-36};
+Volume(1000082) = - {1000081}; //geuz
+Surface Loop(1000083) = {68,60,-66,-1000076,36,1000074};
+Volume(1000084) = - {1000083}; //geuz
+Surface Loop(1000085) = {46,-38,48,54,-50,-52};
+Volume(1000086) = {1000085};
+Physical Volume(10000001) = {1000078};
+Physical Volume(10000002) = {1000080};
+Physical Volume(10000003) = {1000082};
+Physical Volume(10000004) = {1000084};
+Physical Volume(10000005) = {1000086};
+lsheet1 = 0.6;
+Point(17) = {0.0,0.0,0.0, lsheet1};
+Point(18) = {10,0.0,0.0, lsheet1};
+Point(19) = {10,5,0.0, lsheet1};
+Point(20) = {0,5,0.0, lsheet1};
+Point(21) = {1,1,0.0, lsheet1};
+Point(22) = {9,1,0, lsheet1};
+Point(23) = {9,4,0, lsheet1};
+Point(24) = {1,4,0, lsheet1};
+Point(27) = {0.0,0.0,0.2, lsheet1};
+Point(28) = {10,0.0,0.2, lsheet1};
+Point(29) = {10,5,0.2, lsheet1};
+Point(30) = {0,5,0.2, lsheet1};
+Point(31) = {1,1,0.2, lsheet1};
+Point(32) = {9,1,0.2, lsheet1};
+Point(33) = {9,4,0.2, lsheet1};
+Point(34) = {1,4,0.2, lsheet1};
+Line(1000087) = {15,19};
+Line(1000088) = {19,29};
+Line(1000089) = {29,14};
+Line(1000090) = {16,23};
+Line(1000091) = {23,33};
+Line(1000092) = {33,13};
+Line(1000093) = {7,18};
+Line(1000094) = {18,28};
+Line(1000095) = {28,6};
+Line(1000096) = {8,22};
+Line(1000097) = {22,32};
+Line(1000098) = {5,32};
+Line(1000099) = {24,21};
+Line(1000100) = {21,31};
+Line(1000101) = {31,34};
+Line(1000102) = {34,24};
+Line(1000103) = {20,17};
+Line(1000104) = {17,27};
+Line(1000105) = {27,30};
+Line(1000106) = {30,20};
+Line(1000107) = {18,17};
+Line(1000108) = {27,28};
+Line(1000109) = {20,19};
+Line(1000110) = {29,30};
+Line(1000111) = {22,21};
+Line(1000112) = {31,32};
+Line(1000113) = {23,24};
+Line(1000114) = {34,33};
+Line Loop(1000115) = {1000089,-28,1000087,1000088};
+Plane Surface(1000116) = {1000115};
+Line Loop(1000117) = {1000088,1000110,1000106,1000109};
+Plane Surface(1000118) = {1000117};
+Line Loop(1000119) = {1000103,1000104,1000105,1000106};
+Plane Surface(1000120) = {1000119};
+Line Loop(1000121) = {1000107,1000104,1000108,-1000094};
+Plane Surface(1000122) = {1000121};
+Line Loop(1000123) = {1000093,1000094,1000095,-6};
+Plane Surface(1000124) = {1000123};
+Line Loop(1000125) = {8,1000096,1000097,-1000098};
+Plane Surface(1000126) = {1000125};
+Line Loop(1000127) = {1000097,-1000112,-1000100,-1000111};
+Plane Surface(1000128) = {1000127};
+Line Loop(1000129) = {1000100,1000101,1000102,1000099};
+Plane Surface(1000130) = {1000129};
+Line Loop(1000131) = {1000102,-1000113,1000091,-1000114};
+Plane Surface(1000132) = {1000131};
+Line Loop(1000133) = {1000091,1000092,-21,1000090};
+Plane Surface(1000134) = {1000133};
+Line Loop(1000135) = {1000089,31,-1000092,-1000114,-1000101,1000112,-1000098,-7,-1000095,-1000108,1000105,-1000110};
+Plane Surface(1000136) = {1000135};
+Line Loop(1000137) = {5,1000093,1000107,-1000103,1000109,-1000087,27,1000090,1000113,1000099,-1000111,-1000096};
+Plane Surface(1000138) = {1000137};
+Surface Loop(1000139) = {1000132,1000130,-1000128,-1000126,72,1000136,1000116,70,-1000134,-1000138,-1000124,1000122,1000120,1000118};
+Volume(1000140) = - {1000139}; //geuz
+Physical Volume(10000006) = {1000140};
+lsheet2 = 0.6;
+Point(35) = {0.0,0.0,0.4,lsheet2};
+Point(36) = {10,0.0,0.4,lsheet2};
+Point(37) = {10,5,0.4,lsheet2};
+Point(38) = {0,5,0.4,lsheet2};
+Point(39) = {1,1,0.4,lsheet2};
+Point(40) = {4.5,1,0.4,lsheet2};
+Point(41) = {4.5,4,0.4,lsheet2};
+Point(42) = {1,4,0.4,lsheet2};
+Point(43) = {5.5,1,0.4,lsheet2};
+Point(44) = {9,1,0.4,lsheet2};
+Point(45) = {9,4,0.4,lsheet2};
+Point(46) = {5.5,4,0.4,lsheet2};
+Point(47) = {0,2.5,0.4,lsheet2};
+Point(48) = {1,2.5,0.4,lsheet2};
+Point(49) = {0,1,0.4,lsheet2};
+Point(50) = {0.0,0.0,0.5,lsheet2};
+Point(51) = {10,0.0,0.5,lsheet2};
+Point(52) = {10,5,0.5,lsheet2};
+Point(53) = {0,5,0.5,lsheet2};
+Point(54) = {1,1,0.5,lsheet2};
+Point(55) = {4.5,1,0.5,lsheet2};
+Point(56) = {4.5,4,0.5,lsheet2};
+Point(57) = {1,4,0.5,lsheet2};
+Point(58) = {5.5,1,0.5,lsheet2};
+Point(59) = {9,1,0.5,lsheet2};
+Point(60) = {9,4,0.5,lsheet2};
+Point(61) = {5.5,4,0.5,lsheet2};
+Point(62) = {0,2.5,0.5,lsheet2};
+Point(63) = {1,2.5,0.5,lsheet2};
+Point(64) = {0,1,0.5,lsheet2};
+Line(1000141) = {52,37};
+Line(1000142) = {52,53};
+Line(1000143) = {53,38};
+Line(1000144) = {38,37};
+Line(1000145) = {53,62};
+Line(1000146) = {62,47};
+Line(1000147) = {47,38};
+Line(1000148) = {62,64};
+Line(1000149) = {64,49};
+Line(1000150) = {49,47};
+Line(1000151) = {62,63};
+Line(1000152) = {63,48};
+Line(1000153) = {48,47};
+Line(1000154) = {64,54};
+Line(1000155) = {54,39};
+Line(1000156) = {39,49};
+Line(1000157) = {63,54};
+Line(1000158) = {39,48};
+Line(1000159) = {63,57};
+Line(1000160) = {57,42};
+Line(1000161) = {42,48};
+Line(1000162) = {57,56};
+Line(1000163) = {56,41};
+Line(1000164) = {41,42};
+Line(1000165) = {61,46};
+Line(1000166) = {46,45};
+Line(1000167) = {45,60};
+Line(1000168) = {60,61};
+Line(1000169) = {60,59};
+Line(1000170) = {59,44};
+Line(1000171) = {44,45};
+Line(1000172) = {52,51};
+Line(1000173) = {51,36};
+Line(1000174) = {36,37};
+Line(1000175) = {51,50};
+Line(1000176) = {50,35};
+Line(1000177) = {50,64};
+Line(1000178) = {35,49};
+Line(1000179) = {35,36};
+Line(1000180) = {54,55};
+Line(1000181) = {55,40};
+Line(1000182) = {40,39};
+Line(1000183) = {56,55};
+Line(1000184) = {40,41};
+Line(1000185) = {61,58};
+Line(1000186) = {58,43};
+Line(1000187) = {43,46};
+Line(1000188) = {58,59};
+Line(1000189) = {44,43};
+Line Loop(1000190) = {1000179,-1000173,1000175,1000176};
+Plane Surface(1000191) = {1000190};
+Line Loop(1000192) = {1000174,-1000141,1000172,1000173};
+Plane Surface(1000193) = {1000192};
+Line Loop(1000194) = {1000144,-1000141,1000142,1000143};
+Plane Surface(1000195) = {1000194};
+Line Loop(1000196) = {1000143,-1000147,-1000146,-1000145};
+Plane Surface(1000197) = {1000196};
+Line Loop(1000198) = {1000146,-1000153,-1000152,-1000151};
+Plane Surface(1000199) = {1000198};
+Line Loop(1000200) = {1000146,-1000150,-1000149,-1000148};
+Plane Surface(1000201) = {1000200};
+Line Loop(1000202) = {1000156,-1000149,1000154,1000155};
+Plane Surface(1000203) = {1000202};
+Line Loop(1000204) = {1000177,1000149,-1000178,-1000176};
+Plane Surface(1000205) = {1000204};
+Line Loop(1000206) = {1000158,-1000152,1000157,1000155};
+Plane Surface(1000207) = {1000206};
+Line Loop(1000208) = {1000159,1000160,1000161,-1000152};
+Plane Surface(1000209) = {1000208};
+Line Loop(1000210) = {1000164,-1000160,1000162,1000163};
+Plane Surface(1000211) = {1000210};
+Line Loop(1000212) = {1000184,-1000163,1000183,1000181};
+Plane Surface(1000213) = {1000212};
+Line Loop(1000214) = {1000182,-1000155,1000180,1000181};
+Plane Surface(1000215) = {1000214};
+Line Loop(1000216) = {1000187,-1000165,1000185,1000186};
+Plane Surface(1000217) = {1000216};
+Line Loop(1000218) = {1000186,-1000189,-1000170,-1000188};
+Plane Surface(1000219) = {1000218};
+Line Loop(1000220) = {1000171,1000167,1000169,1000170};
+Plane Surface(1000221) = {1000220};
+Line Loop(1000222) = {1000166,1000167,1000168,1000165};
+Plane Surface(1000223) = {1000222};
+Line Loop(1000224) = {1000147,1000144,-1000174,-1000179,1000178,-1000156,-1000182,1000184,1000164,1000161,1000153};
+Line Loop(1000225) = {1000187,1000166,-1000171,1000189};
+Plane Surface(1000226) = {1000224,1000225};
+Line Loop(1000227) = {1000158,1000153,-1000150,-1000156};
+Plane Surface(1000228) = {1000227};
+Line Loop(1000229) = {1000145,1000151,1000159,1000162,1000183,-1000180,-1000154,-1000177,-1000175,-1000172,1000142};
+Line Loop(1000230) = {1000169,-1000188,-1000185,-1000168};
+Plane Surface(1000231) = {1000229,1000230};
+Line Loop(1000232) = {1000157,-1000154,-1000148,1000151};
+Plane Surface(1000233) = {1000232};
+Surface Loop(1000234) = {1000231,-1000197,-1000195,-1000226,1000193,-1000191,1000205,-1000203,1000215,1000213,-1000211,1000209,1000199,-1000219,-1000217,1000223,1000221};
+Volume(1000235) = {1000234};
+Surface Loop(1000236) = {1000233,1000207,1000228,-1000199,-1000201,-1000203};
+Volume(1000237) = {1000236};
+Physical Volume(10000007) = {1000235};
+Physical Volume(10000008) = {1000236}; 
+dist1=7;
+lext1 = dist1 / 2;
+Point(65) = {dist1+5, dist1+2.5, -dist1/2, lext1};
+Point(66) = {-dist1+5, dist1+2.5, -dist1/2, lext1};
+Point(67) = {-dist1+5, -dist1+2.5, -dist1/2, lext1};
+Point(68) = {dist1+5, -dist1+2.5, -dist1/2, lext1};
+Point(69) = {dist1+5, dist1+2.5, dist1/2, lext1};
+Point(70) = {-dist1+5, dist1+2.5, dist1/2, lext1};
+Point(71) = {-dist1+5, -dist1+2.5, dist1/2, lext1};
+Point(72) = {dist1+5, -dist1+2.5, dist1/2, lext1};
+dist2=40;
+lext2 = dist2 / 1;
+Point(73) = {dist2+5, dist2+5, -dist2/2, lext2};
+Point(74) = {-dist2+5, dist2+5, -dist2/2, lext2};
+Point(75) = {-dist2+5, -dist2+5, -dist2/2, lext2};
+Point(76) = {dist2+5, -dist2+5, -dist2/2, lext2};
+Point(77) = {dist2+5, dist2+5, dist2/2, lext2};
+Point(78) = {-dist2+5, dist2+5, dist2/2, lext2};
+Point(79) = {-dist2+5, -dist2+5, dist2/2, lext2};
+Point(80) = {dist2+5, -dist2+5, dist2/2, lext2};
+Line(1000238) = {65,68};
+Line(1000239) = {68,72};
+Line(1000240) = {72,69};
+Line(1000241) = {66,65};
+Line(1000242) = {65,69};
+Line(1000243) = {69,70};
+Line(1000244) = {70,66};
+Line(1000245) = {66,67};
+Line(1000246) = {67,68};
+Line(1000247) = {67,71};
+Line(1000248) = {71,72};
+Line(1000249) = {71,70};
+Line(1000250) = {73,76};
+Line(1000251) = {76,75};
+Line(1000252) = {75,74};
+Line(1000253) = {74,73};
+Line(1000254) = {74,78};
+Line(1000255) = {78,77};
+Line(1000256) = {77,80};
+Line(1000257) = {80,76};
+Line(1000258) = {78,79};
+Line(1000259) = {79,75};
+Line(1000260) = {79,80};
+Line(1000261) = {73,77};
+Line Loop(1000262) = {1000252,1000254,1000258,1000259};
+Plane Surface(1000263) = {1000262};
+Line Loop(1000264) = {1000258,1000260,-1000256,-1000255};
+Plane Surface(1000265) = {1000264};
+Line Loop(1000266) = {1000259,-1000251,-1000257,-1000260};
+Plane Surface(1000267) = {1000266};
+Line Loop(1000268) = {1000252,1000253,1000250,1000251};
+Plane Surface(1000269) = {1000268};
+Line Loop(1000270) = {1000250,-1000257,-1000256,-1000261};
+Plane Surface(1000271) = {1000270};
+Line Loop(1000272) = {1000254,1000255,-1000261,-1000253};
+Plane Surface(1000273) = {1000272};
+Line Loop(1000274) = {1000245,1000246,-1000238,-1000241};
+Plane Surface(1000275) = {1000274};
+Line Loop(1000276) = {1000241,1000242,1000243,1000244};
+Plane Surface(1000277) = {1000276};
+Line Loop(1000278) = {1000249,-1000243,-1000240,-1000248};
+Plane Surface(1000279) = {1000278};
+Line Loop(1000280) = {1000247,1000248,-1000239,-1000246};
+Plane Surface(1000281) = {1000280};
+Line Loop(1000282) = {1000238,1000239,1000240,-1000242};
+Plane Surface(1000283) = {1000282};
+Line Loop(1000284) = {1000249,1000244,1000245,1000247};
+Plane Surface(1000285) = {1000284};
+Surface Loop(1000286) = {1000263,1000269,-1000273,1000265,-1000267,-1000271};
+Surface Loop(1000287) = {1000285,1000279,-1000277,1000275,-1000281,1000283};
+Volume(1000288) = {1000286,1000287};
+Surface Loop(1000289) = {1000116,1000136,-44,54,1000134,1000132,1000130,-1000128,-1000126,-52,46,34,-66,-56,62,-1000076,-1000138,-64,1000074,1000124,-1000122,-1000120,-1000118,-42};
+Surface Loop(1000290) = {1000195,1000226,-1000197,1000201,1000228,1000207,1000209,1000231,1000233,1000211,-1000213,-1000215,-1000205,1000191,-1000193,1000223,1000221,-1000219,-1000217};
+Volume(1000291) = {1000287,1000289,1000290};
+Physical Surface(1000292) = {1000273,1000265,1000263,1000269,1000271,1000267};
+Physical Volume(10000009)={1000291,1000288};