diff --git a/Fltk/Main.cpp b/Fltk/Main.cpp
index eb5031384cceb499751d886bbd1b25fccb959416..21a80eb352da68b7763ca39df216d7ea51ded3ac 100644
--- a/Fltk/Main.cpp
+++ b/Fltk/Main.cpp
@@ -1,4 +1,4 @@
-// $Id: Main.cpp,v 1.52 2003-11-27 02:33:31 geuzaine Exp $
+// $Id: Main.cpp,v 1.53 2003-11-29 19:29:26 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
@@ -99,7 +99,7 @@ int main(int argc, char *argv[])
             gmsh_progname, GMSH_MAJOR_VERSION, GMSH_MINOR_VERSION,
             GMSH_PATCH_VERSION, currtime);
 
-  // Register Default Plugins (in test ...)
+  // Register Default Plugins
   if(CTX.default_plugins)
     GMSH_PluginManager::instance()->registerDefaultPlugins();
 
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index b7a0185ec4433b82a5cd7f98a02ee44af6242d28..d217fb3be4840e14c752a6e37d3a75835011df9d 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -190,7 +190,7 @@
 
 #line 1 "Gmsh.y"
  
-// $Id: Gmsh.tab.cpp,v 1.171 2003-11-29 01:38:51 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.172 2003-11-29 19:29:26 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
@@ -267,7 +267,7 @@ void yyerror (char *s);
 void yymsg (int type, char *fmt, ...);
 void skip_until (char *skip, char *until);
 int PrintListOfDouble (char *format, List_T *list, char *buffer);
- void FixRelativePath(char *in, char *out);
+void FixRelativePath(char *in, char *out);
 
 #line 82 "Gmsh.y"
 typedef union {
@@ -746,12 +746,12 @@ static const short yyrline[] = { 0,
   1087,  1090,  1094,  1111,  1117,  1123,  1130,  1138,  1144,  1150,
   1157,  1165,  1174,  1176,  1177,  1178,  1179,  1182,  1184,  1187,
   1218,  1252,  1299,  1314,  1323,  1338,  1350,  1364,  1387,  1411,
-  1423,  1437,  1449,  1463,  1483,  1505,  1517,  1533,  1544,  1550,
-  1569,  1583,  1589,  1595,  1614,  1620,  1626,  1642,  1649,  1655,
-  1661,  1672,  1683,  1708,  1714,  1733,  1755,  1761,  1769,  1775,
-  1781,  1790,  1796,  1802,  1812,  1818,  1823,  1828,  1835,  1837,
-  1838,  1841,  1846,  1850,  1864,  1878,  1896,  1907,  1917,  1925,
-  1929,  1937,  1949,  1989,  2002,  2019,  2024,  2031,  2035,  2055,
+  1423,  1437,  1449,  1463,  1483,  1505,  1515,  1529,  1540,  1546,
+  1565,  1579,  1585,  1591,  1610,  1616,  1622,  1638,  1645,  1651,
+  1657,  1668,  1679,  1704,  1710,  1729,  1751,  1757,  1765,  1771,
+  1777,  1786,  1792,  1798,  1808,  1814,  1819,  1824,  1831,  1833,
+  1834,  1837,  1842,  1846,  1860,  1874,  1892,  1903,  1913,  1921,
+  1925,  1933,  1945,  1985,  1998,  2015,  2024,  2031,  2035,  2055,
   2067,  2077,  2098,  2119,  2140,  2146,  2151,  2156,  2160,  2168,
   2181,  2191,  2201,  2206,  2216,  2221,  2231,  2236,  2248,  2265,
   2282,  2299,  2304,  2321,  2326,  2343,  2348,  2368,  2384,  2400,
@@ -5902,31 +5902,27 @@ case 225:
 case 226:
 #line 1506 "Gmsh.y"
 {
-      if(CTX.default_plugins){
-	try {
-	  GMSH_PluginManager::instance()->setPluginOption(yyvsp[-6].c, yyvsp[-3].c, yyvsp[-1].d); 
-	}
-	catch (...) {
-	  yymsg(WARNING, "Unknown option '%s' or plugin '%s'", yyvsp[-3].c, yyvsp[-6].c);
-	}
+      try {
+	GMSH_PluginManager::instance()->setPluginOption(yyvsp[-6].c, yyvsp[-3].c, yyvsp[-1].d); 
+      }
+      catch (...) {
+	yymsg(WARNING, "Unknown option '%s' or plugin '%s'", yyvsp[-3].c, yyvsp[-6].c);
       }
     ;
     break;}
 case 227:
-#line 1518 "Gmsh.y"
+#line 1516 "Gmsh.y"
 {
-      if(CTX.default_plugins){
-	try {
-	  GMSH_PluginManager::instance()->setPluginOption(yyvsp[-6].c, yyvsp[-3].c, yyvsp[-1].c); 
-	}
-	catch (...) {
-	  yymsg(WARNING, "Unknown option '%s' or plugin '%s'", yyvsp[-3].c, yyvsp[-6].c);
-	}
+      try {
+	GMSH_PluginManager::instance()->setPluginOption(yyvsp[-6].c, yyvsp[-3].c, yyvsp[-1].c); 
+      }
+      catch (...) {
+	yymsg(WARNING, "Unknown option '%s' or plugin '%s'", yyvsp[-3].c, yyvsp[-6].c);
       }
     ;
     break;}
 case 228:
-#line 1538 "Gmsh.y"
+#line 1534 "Gmsh.y"
 {
       Cdbpts101((int)yyvsp[-4].d, yyvsp[-1].v[0], yyvsp[-1].v[1], yyvsp[-1].v[2], yyvsp[-1].v[3], yyvsp[-1].v[4]);
       yyval.s.Type = MSH_POINT;
@@ -5934,7 +5930,7 @@ case 228:
     ;
     break;}
 case 229:
-#line 1545 "Gmsh.y"
+#line 1541 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_POINT, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
       yyval.s.Type = MSH_PHYSICAL_POINT;
@@ -5942,7 +5938,7 @@ case 229:
     ;
     break;}
 case 230:
-#line 1551 "Gmsh.y"
+#line 1547 "Gmsh.y"
 {
       Vertex *v;
       Attractor *a;
@@ -5963,7 +5959,7 @@ case 230:
     ;
     break;}
 case 231:
-#line 1570 "Gmsh.y"
+#line 1566 "Gmsh.y"
 {
       for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){
 	List_Read(yyvsp[-3].l, i, &d);
@@ -5976,7 +5972,7 @@ case 231:
     ;
     break;}
 case 232:
-#line 1584 "Gmsh.y"
+#line 1580 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_LINE, 1, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
       yyval.s.Type = MSH_SEGM_LINE;
@@ -5984,7 +5980,7 @@ case 232:
     ;
     break;}
 case 233:
-#line 1590 "Gmsh.y"
+#line 1586 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_SPLN, 3, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
       yyval.s.Type = MSH_SEGM_SPLN;
@@ -5992,7 +5988,7 @@ case 233:
     ;
     break;}
 case 234:
-#line 1596 "Gmsh.y"
+#line 1592 "Gmsh.y"
 {
       Curve *c;
       Attractor *a;
@@ -6013,7 +6009,7 @@ case 234:
     ;
     break;}
 case 235:
-#line 1615 "Gmsh.y"
+#line 1611 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_CIRC, 2, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
       yyval.s.Type = MSH_SEGM_CIRC ;
@@ -6021,7 +6017,7 @@ case 235:
     ;
     break;}
 case 236:
-#line 1621 "Gmsh.y"
+#line 1617 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_ELLI, 2, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
       yyval.s.Type = MSH_SEGM_ELLI ;
@@ -6029,7 +6025,7 @@ case 236:
     ;
     break;}
 case 237:
-#line 1627 "Gmsh.y"
+#line 1623 "Gmsh.y"
 {
       List_T *temp;
       int i, j;
@@ -6047,7 +6043,7 @@ case 237:
     ;
     break;}
 case 238:
-#line 1644 "Gmsh.y"
+#line 1640 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-14].d, MSH_SEGM_PARAMETRIC, 2, NULL, NULL, -1, -1, yyvsp[-10].d, yyvsp[-8].d, yyvsp[-6].c, yyvsp[-4].c, yyvsp[-2].c);
       yyval.s.Type = MSH_SEGM_PARAMETRIC ;
@@ -6055,7 +6051,7 @@ case 238:
     ;
     break;}
 case 239:
-#line 1650 "Gmsh.y"
+#line 1646 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_LINE, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
       yyval.s.Type = MSH_PHYSICAL_LINE;
@@ -6063,7 +6059,7 @@ case 239:
     ;
     break;}
 case 240:
-#line 1656 "Gmsh.y"
+#line 1652 "Gmsh.y"
 {
       yyval.s.Type = MSH_SEGM_LOOP;
       Cdbz101((int)yyvsp[-4].d, yyval.s.Type, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
@@ -6071,7 +6067,7 @@ case 240:
     ;
     break;}
 case 241:
-#line 1662 "Gmsh.y"
+#line 1658 "Gmsh.y"
 {
       if(List_Nbr(yyvsp[-1].l) > 3){
 	Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_BSPLN, 2, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
@@ -6084,7 +6080,7 @@ case 241:
     ;
     break;}
 case 242:
-#line 1673 "Gmsh.y"
+#line 1669 "Gmsh.y"
 {
       if(List_Nbr(yyvsp[-1].l) > 3){
 	Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_BEZIER, 2, yyvsp[-1].l, NULL, -1, -1, 0., 1., NULL, NULL, NULL);
@@ -6097,7 +6093,7 @@ case 242:
     ;
     break;}
 case 243:
-#line 1684 "Gmsh.y"
+#line 1680 "Gmsh.y"
 {
       List_T *Temp;
       int i;
@@ -6121,7 +6117,7 @@ case 243:
     ;
     break;}
 case 244:
-#line 1709 "Gmsh.y"
+#line 1705 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
       yyval.s.Type = MSH_SURF_PLAN;
@@ -6129,7 +6125,7 @@ case 244:
     ;
     break;}
 case 245:
-#line 1715 "Gmsh.y"
+#line 1711 "Gmsh.y"
 {
       Surface *s,*support;
       support = FindSurface((int)yyvsp[-4].d, THEM);
@@ -6150,7 +6146,7 @@ case 245:
     ;
     break;}
 case 246:
-#line 1734 "Gmsh.y"
+#line 1730 "Gmsh.y"
 {
       List_Read(yyvsp[-1].l, 0, &d);
       i = (int)d;
@@ -6173,14 +6169,14 @@ case 246:
     ;
     break;}
 case 247:
-#line 1756 "Gmsh.y"
+#line 1752 "Gmsh.y"
 {
     AddTriangulationToSurface ((int) yyvsp[-10].d, (int) yyvsp[-6].d, (int) yyvsp[-4].d, yyvsp[-2].l, yyvsp[-1].l);
     yyval.s.Num = (int)yyvsp[-10].d;
   ;
     break;}
 case 248:
-#line 1764 "Gmsh.y"
+#line 1760 "Gmsh.y"
 {
       CreateNurbsSurface ((int) yyvsp[-16].d , (int)yyvsp[-4].d , (int)yyvsp[-2].d  , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
       yyval.s.Type = MSH_SURF_NURBS;
@@ -6188,13 +6184,13 @@ case 248:
     ;
     break;}
 case 249:
-#line 1772 "Gmsh.y"
+#line 1768 "Gmsh.y"
 {
       CreateNurbsSurfaceSupport ((int)yyvsp[-16].d, (int) yyvsp[-4].d , (int) yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
     ;
     break;}
 case 250:
-#line 1776 "Gmsh.y"
+#line 1772 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_SURFACE, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
       yyval.s.Type = MSH_PHYSICAL_SURFACE;
@@ -6202,7 +6198,7 @@ case 250:
     ;
     break;}
 case 251:
-#line 1782 "Gmsh.y"
+#line 1778 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d, MSH_SURF_LOOP, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
       yyval.s.Type = MSH_SURF_LOOP;
@@ -6210,7 +6206,7 @@ case 251:
     ;
     break;}
 case 252:
-#line 1791 "Gmsh.y"
+#line 1787 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
       yyval.s.Type = MSH_VOLUME;
@@ -6218,7 +6214,7 @@ case 252:
     ;
     break;}
 case 253:
-#line 1797 "Gmsh.y"
+#line 1793 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
       yyval.s.Type = MSH_VOLUME;
@@ -6226,7 +6222,7 @@ case 253:
     ;
     break;}
 case 254:
-#line 1803 "Gmsh.y"
+#line 1799 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_VOLUME, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL);
       yyval.s.Type = MSH_PHYSICAL_VOLUME;
@@ -6234,59 +6230,59 @@ case 254:
     ;
     break;}
 case 255:
-#line 1814 "Gmsh.y"
+#line 1810 "Gmsh.y"
 {
       TranslateShapes (yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-1].l, 1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 256:
-#line 1819 "Gmsh.y"
+#line 1815 "Gmsh.y"
 {
       RotateShapes(yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].d, yyvsp[-1].l, 1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 257:
-#line 1824 "Gmsh.y"
+#line 1820 "Gmsh.y"
 {
       SymmetryShapes(yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-3].v[3], yyvsp[-1].l, 1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 258:
-#line 1829 "Gmsh.y"
+#line 1825 "Gmsh.y"
 {
       DilatShapes(yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].d, yyvsp[-1].l, 1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 259:
-#line 1836 "Gmsh.y"
+#line 1832 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 260:
-#line 1837 "Gmsh.y"
+#line 1833 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 261:
-#line 1838 "Gmsh.y"
+#line 1834 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 262:
-#line 1843 "Gmsh.y"
+#line 1839 "Gmsh.y"
 {
       yyval.l = List_Create(3, 3, sizeof(Shape));
     ;
     break;}
 case 263:
-#line 1847 "Gmsh.y"
+#line 1843 "Gmsh.y"
 {
       List_Add(yyval.l, &yyvsp[0].s);
     ;
     break;}
 case 264:
-#line 1851 "Gmsh.y"
+#line 1847 "Gmsh.y"
 {
       for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){
 	List_Read(yyvsp[-2].l, i, &d);
@@ -6302,7 +6298,7 @@ case 264:
     ;
     break;}
 case 265:
-#line 1865 "Gmsh.y"
+#line 1861 "Gmsh.y"
 {
       for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){
 	List_Read(yyvsp[-2].l, i, &d);
@@ -6318,7 +6314,7 @@ case 265:
     ;
     break;}
 case 266:
-#line 1879 "Gmsh.y"
+#line 1875 "Gmsh.y"
 {
       for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){
 	List_Read(yyvsp[-2].l, i, &d);
@@ -6334,7 +6330,7 @@ case 266:
     ;
     break;}
 case 267:
-#line 1898 "Gmsh.y"
+#line 1894 "Gmsh.y"
 {
       yyval.l = List_Create(3, 3, sizeof(Shape));
       for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){
@@ -6346,14 +6342,14 @@ case 267:
     ;
     break;}
 case 268:
-#line 1908 "Gmsh.y"
+#line 1904 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-4].c, "View")) DuplicateView((int)yyvsp[-2].d, 0);
       yyval.l = NULL;
     ;
     break;}
 case 269:
-#line 1919 "Gmsh.y"
+#line 1915 "Gmsh.y"
 {
       for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){
 	List_Read (yyvsp[-1].l, i, &TheShape);
@@ -6362,19 +6358,19 @@ case 269:
     ;
     break;}
 case 270:
-#line 1926 "Gmsh.y"
+#line 1922 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-4].c, "View")) RemoveViewByIndex((int)yyvsp[-2].d);
     ;
     break;}
 case 271:
-#line 1930 "Gmsh.y"
+#line 1926 "Gmsh.y"
 {
       Init_Mesh(THEM, 1);
     ;
     break;}
 case 272:
-#line 1939 "Gmsh.y"
+#line 1935 "Gmsh.y"
 {
       for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){
 	List_Read (yyvsp[-1].l, i, &TheShape);
@@ -6383,7 +6379,7 @@ case 272:
     ;
     break;}
 case 273:
-#line 1951 "Gmsh.y"
+#line 1947 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Include")){
 	FixRelativePath(yyvsp[-1].c, tmpstring);
@@ -6424,7 +6420,7 @@ case 273:
     ;
     break;}
 case 274:
-#line 1990 "Gmsh.y"
+#line 1986 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-6].c, "Save") && !strcmp(yyvsp[-5].c, "View")){
 	Post_View *v = (Post_View *)List_Pointer_Test(CTX.post.list, (int)yyvsp[-3].d);
@@ -6439,7 +6435,7 @@ case 274:
     ;
     break;}
 case 275:
-#line 2003 "Gmsh.y"
+#line 1999 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Sleep")){
 	long sleep_time = GetTime();
@@ -6458,10 +6454,14 @@ case 275:
     ;
     break;}
 case 276:
-#line 2020 "Gmsh.y"
+#line 2016 "Gmsh.y"
 {
-    if(CTX.default_plugins)
-      GMSH_PluginManager::instance()->action(yyvsp[-4].c, yyvsp[-1].c, 0); 
+      try {
+	GMSH_PluginManager::instance()->action(yyvsp[-4].c, yyvsp[-1].c, 0);
+      }
+      catch (...) {
+	yymsg(WARNING, "Unknown action '%s' or plugin '%s'", yyvsp[-1].c, yyvsp[-4].c);
+      }
    ;
     break;}
 case 277:
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index cce06f6acf4ac5a5f503f67b9230c480e64c8a29..6ae1d77d7055ed9c671389b46c28efd53c6be74f 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,5 +1,5 @@
 %{ 
-// $Id: Gmsh.y,v 1.150 2003-11-29 01:38:52 geuzaine Exp $
+// $Id: Gmsh.y,v 1.151 2003-11-29 19:29:27 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
@@ -76,7 +76,7 @@ void yyerror (char *s);
 void yymsg (int type, char *fmt, ...);
 void skip_until (char *skip, char *until);
 int PrintListOfDouble (char *format, List_T *list, char *buffer);
- void FixRelativePath(char *in, char *out);
+void FixRelativePath(char *in, char *out);
 %}
 
 %union {
@@ -1504,25 +1504,21 @@ Affectation :
 
   | tPlugin '(' tSTRING ')' '.' tSTRING tAFFECT FExpr tEND 
     {
-      if(CTX.default_plugins){
-	try {
-	  GMSH_PluginManager::instance()->setPluginOption($3, $6, $8); 
-	}
-	catch (...) {
-	  yymsg(WARNING, "Unknown option '%s' or plugin '%s'", $6, $3);
-	}
+      try {
+	GMSH_PluginManager::instance()->setPluginOption($3, $6, $8); 
+      }
+      catch (...) {
+	yymsg(WARNING, "Unknown option '%s' or plugin '%s'", $6, $3);
       }
     }
 
   | tPlugin '(' tSTRING ')' '.' tSTRING tAFFECT StringExpr tEND 
     {
-      if(CTX.default_plugins){
-	try {
-	  GMSH_PluginManager::instance()->setPluginOption($3, $6, $8); 
-	}
-	catch (...) {
-	  yymsg(WARNING, "Unknown option '%s' or plugin '%s'", $6, $3);
-	}
+      try {
+	GMSH_PluginManager::instance()->setPluginOption($3, $6, $8); 
+      }
+      catch (...) {
+	yymsg(WARNING, "Unknown option '%s' or plugin '%s'", $6, $3);
       }
     }
 ;
@@ -2018,8 +2014,12 @@ Command :
     }
    | tPlugin '(' tSTRING ')' '.' tSTRING tEND
    {
-    if(CTX.default_plugins)
-      GMSH_PluginManager::instance()->action($3, $6, 0); 
+      try {
+	GMSH_PluginManager::instance()->action($3, $6, 0);
+      }
+      catch (...) {
+	yymsg(WARNING, "Unknown action '%s' or plugin '%s'", $6, $3);
+      }
    }
    | tCombine tSTRING tEND
     {
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 0c4dce60e7d0e9eae542775fb11fd1f11a12bf67..dee0555da98f8c77d0a30046bb09e285cd460e6a 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.170 2003-11-29 01:38:54 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.171 2003-11-29 19:29:27 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -1013,7 +1013,7 @@ char *yytext;
 #define INITIAL 0
 #line 2 "Gmsh.l"
 
-// $Id: Gmsh.yy.cpp,v 1.170 2003-11-29 01:38:54 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.171 2003-11-29 19:29:27 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
diff --git a/Plugin/Plugin.cpp b/Plugin/Plugin.cpp
index 598ab4238db824269b7aa220dfc942263f4deb8a..1bd142e392596c7f24e9abf62a89e2064443ec96 100644
--- a/Plugin/Plugin.cpp
+++ b/Plugin/Plugin.cpp
@@ -1,4 +1,4 @@
-// $Id: Plugin.cpp,v 1.44 2003-11-29 01:38:54 geuzaine Exp $
+// $Id: Plugin.cpp,v 1.45 2003-11-29 19:29:27 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
@@ -71,18 +71,15 @@ GMSH_Plugin *GMSH_PluginManager::find(char *pluginName)
 void GMSH_PluginManager::action(char *pluginName, char *action, void *data)
 {
   GMSH_Plugin *plugin = find(pluginName);
-  if(!plugin) {
-    throw 1;
-  }
-  if(!strcmp(action, "Run")) {
+  if(!plugin)
+    throw "Unknown plugin name";
+
+  if(!strcmp(action, "Run"))
     plugin->run();
-  }
-  else if(!strcmp(action, "Save")) {
+  else if(!strcmp(action, "Save"))
     plugin->save();
-  }
-  else {
-    throw 1;
-  }
+  else
+    throw "Unknown plugin action";
 }
 
 void GMSH_PluginManager::setPluginOption(char *pluginName, char *option,