diff --git a/Plugin/CutGrid.cpp b/Plugin/CutGrid.cpp
index d3d9d6110a6636bd4f190ed289b110389df608b1..da3d312728e3b634be69ea0263a46ac491be1551 100644
--- a/Plugin/CutGrid.cpp
+++ b/Plugin/CutGrid.cpp
@@ -1,4 +1,4 @@
-// $Id: CutGrid.cpp,v 1.6 2004-05-12 02:02:30 geuzaine Exp $
+// $Id: CutGrid.cpp,v 1.7 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -212,20 +212,17 @@ Post_View * GMSH_CutGridPlugin::GenerateView(Post_View * v) const
 
 Post_View *GMSH_CutGridPlugin::execute(Post_View * v)
 {
-  Post_View *vv;
-
   int iView = (int)CutGridOptions_Number[11].def;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      return 0;
-    }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
-  Post_View * newView = GenerateView (vv);
-  
-  return newView;
+
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+
+  return GenerateView(v1);
 }
diff --git a/Plugin/CutMap.cpp b/Plugin/CutMap.cpp
index 943ff769f13579c37daf5b627f8c80f39674b2a1..c3da508e12536c4499d8ccf8a72cb0f82fffbdb6 100644
--- a/Plugin/CutMap.cpp
+++ b/Plugin/CutMap.cpp
@@ -1,4 +1,4 @@
-// $Id: CutMap.cpp,v 1.36 2004-03-13 21:00:19 geuzaine Exp $
+// $Id: CutMap.cpp,v 1.37 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -94,25 +94,21 @@ double GMSH_CutMapPlugin::levelset(double x, double y, double z, double val) con
 
 Post_View *GMSH_CutMapPlugin::execute(Post_View * v)
 {
-  Post_View *vv;
-
   int iView = (int)CutMapOptions_Number[3].def;
   _valueIndependent = 0;
   _valueView = (int)CutMapOptions_Number[2].def;
   _valueTimeStep = (int)CutMapOptions_Number[1].def;
   _orientation = GMSH_LevelsetPlugin::MAP;
 
+  if(iView < 0)
+    iView = v ? v->Index : 0;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(WARNING, "View[%d] does not exist", iView);
-      return 0;
-    }
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
 
-  return GMSH_LevelsetPlugin::execute(vv);
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+
+  return GMSH_LevelsetPlugin::execute(v1);
 }
diff --git a/Plugin/CutPlane.cpp b/Plugin/CutPlane.cpp
index 99d373db633b3ee9ec81bff90900f3428c59e33c..3ed27f666d8b39c56f15b6490817cceace7b51e4 100644
--- a/Plugin/CutPlane.cpp
+++ b/Plugin/CutPlane.cpp
@@ -1,4 +1,4 @@
-// $Id: CutPlane.cpp,v 1.33 2004-03-13 21:00:19 geuzaine Exp $
+// $Id: CutPlane.cpp,v 1.34 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -90,8 +90,6 @@ double GMSH_CutPlanePlugin::levelset(double x, double y, double z, double val) c
 
 Post_View *GMSH_CutPlanePlugin::execute(Post_View * v)
 {
-  Post_View *vv;
-
   int iView = (int)CutPlaneOptions_Number[4].def;
   _ref[0] = CutPlaneOptions_Number[0].def;
   _ref[1] = CutPlaneOptions_Number[1].def;
@@ -101,16 +99,15 @@ Post_View *GMSH_CutPlanePlugin::execute(Post_View * v)
   _valueTimeStep = -1;
   _orientation = GMSH_LevelsetPlugin::PLANE;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(WARNING, "View[%d] does not exist", iView);
-      return 0;
-    }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
 
-  return GMSH_LevelsetPlugin::execute(vv);
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+
+  return GMSH_LevelsetPlugin::execute(v1);
 }
diff --git a/Plugin/CutSphere.cpp b/Plugin/CutSphere.cpp
index d1d1d7706744ad0b8a96c46e15d0e9be0e31585a..87ae2637dcb74a3fdb498c49408d8713a6fff0cb 100644
--- a/Plugin/CutSphere.cpp
+++ b/Plugin/CutSphere.cpp
@@ -1,4 +1,4 @@
-// $Id: CutSphere.cpp,v 1.31 2004-03-13 21:00:19 geuzaine Exp $
+// $Id: CutSphere.cpp,v 1.32 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -94,8 +94,6 @@ double GMSH_CutSpherePlugin::levelset(double x, double y, double z,
 
 Post_View *GMSH_CutSpherePlugin::execute(Post_View * v)
 {
-  Post_View *vv;
-
   int iView = (int)CutSphereOptions_Number[4].def;
   _ref[0] = CutSphereOptions_Number[0].def;
   _ref[1] = CutSphereOptions_Number[1].def;
@@ -105,16 +103,15 @@ Post_View *GMSH_CutSpherePlugin::execute(Post_View * v)
   _valueTimeStep = -1;
   _orientation = GMSH_LevelsetPlugin::SPHERE;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(WARNING, "View[%d] does not exist", iView);
-      return 0;
-    }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
 
-  return GMSH_LevelsetPlugin::execute(vv);
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+
+  return GMSH_LevelsetPlugin::execute(v1);
 }
diff --git a/Plugin/DecomposeInSimplex.cpp b/Plugin/DecomposeInSimplex.cpp
index 09c89282b189c254d3c6206455493c295e183f29..1e777d46403a3bdf69eee73df9b4da5f26c8e15c 100644
--- a/Plugin/DecomposeInSimplex.cpp
+++ b/Plugin/DecomposeInSimplex.cpp
@@ -1,4 +1,4 @@
-// $Id: DecomposeInSimplex.cpp,v 1.10 2004-05-13 17:48:56 geuzaine Exp $
+// $Id: DecomposeInSimplex.cpp,v 1.11 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -123,48 +123,45 @@ static void decomposeList(Post_View *v, int nbNod, int nbComp,
 
 Post_View *GMSH_DecomposeInSimplexPlugin::execute(Post_View * v)
 {
-  Post_View *vv;
-
   int iView = (int)DecomposeInSimplexOptions_Number[0].def;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(WARNING, "View[%d] does not exist", iView);
-      return 0;
-    }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
 
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+
   // Bail out if the view is a duplicate or if other views duplicate it
-  if(vv->DuplicateOf || vv->Links) {
+  if(v1->DuplicateOf || v1->Links) {
     Msg(GERROR, "DecomposeInSimplex cannot be applied to a duplicated view");
     return 0;
   }
 
   // quads
-  decomposeList(vv, 4, 1, &vv->SQ, &vv->NbSQ, vv->ST, &vv->NbST);
-  decomposeList(vv, 4, 3, &vv->VQ, &vv->NbVQ, vv->VT, &vv->NbVT);
-  decomposeList(vv, 4, 9, &vv->TQ, &vv->NbTQ, vv->TT, &vv->NbTT);
+  decomposeList(v1, 4, 1, &v1->SQ, &v1->NbSQ, v1->ST, &v1->NbST);
+  decomposeList(v1, 4, 3, &v1->VQ, &v1->NbVQ, v1->VT, &v1->NbVT);
+  decomposeList(v1, 4, 9, &v1->TQ, &v1->NbTQ, v1->TT, &v1->NbTT);
 		          
   // hexas	          
-  decomposeList(vv, 8, 1, &vv->SH, &vv->NbSH, vv->SS, &vv->NbSS);
-  decomposeList(vv, 8, 3, &vv->VH, &vv->NbVH, vv->VS, &vv->NbVS);
-  decomposeList(vv, 8, 9, &vv->TH, &vv->NbTH, vv->TS, &vv->NbTS);
+  decomposeList(v1, 8, 1, &v1->SH, &v1->NbSH, v1->SS, &v1->NbSS);
+  decomposeList(v1, 8, 3, &v1->VH, &v1->NbVH, v1->VS, &v1->NbVS);
+  decomposeList(v1, 8, 9, &v1->TH, &v1->NbTH, v1->TS, &v1->NbTS);
 		          
   // prisms	          
-  decomposeList(vv, 6, 1, &vv->SI, &vv->NbSI, vv->SS, &vv->NbSS);
-  decomposeList(vv, 6, 3, &vv->VI, &vv->NbVI, vv->VS, &vv->NbVS);
-  decomposeList(vv, 6, 9, &vv->TI, &vv->NbTI, vv->TS, &vv->NbTS);
+  decomposeList(v1, 6, 1, &v1->SI, &v1->NbSI, v1->SS, &v1->NbSS);
+  decomposeList(v1, 6, 3, &v1->VI, &v1->NbVI, v1->VS, &v1->NbVS);
+  decomposeList(v1, 6, 9, &v1->TI, &v1->NbTI, v1->TS, &v1->NbTS);
 		          
   // pyramids	          
-  decomposeList(vv, 5, 1, &vv->SY, &vv->NbSY, vv->SS, &vv->NbSS);
-  decomposeList(vv, 5, 3, &vv->VY, &vv->NbVY, vv->VS, &vv->NbVS);
-  decomposeList(vv, 5, 9, &vv->TY, &vv->NbTY, vv->TS, &vv->NbTS);
+  decomposeList(v1, 5, 1, &v1->SY, &v1->NbSY, v1->SS, &v1->NbSS);
+  decomposeList(v1, 5, 3, &v1->VY, &v1->NbVY, v1->VS, &v1->NbVS);
+  decomposeList(v1, 5, 9, &v1->TY, &v1->NbTY, v1->TS, &v1->NbTS);
 
-  return vv;
+  return v1;
 }
 
 // Utility class 
diff --git a/Plugin/DisplacementRaise.cpp b/Plugin/DisplacementRaise.cpp
index d335b7d750fcd51d1f6376f58ce7eb086fe27e62..6325df1eab6cae07e5f1c7d715e5f38833ea4efc 100644
--- a/Plugin/DisplacementRaise.cpp
+++ b/Plugin/DisplacementRaise.cpp
@@ -1,4 +1,4 @@
-// $Id: DisplacementRaise.cpp,v 1.14 2004-05-13 17:48:56 geuzaine Exp $
+// $Id: DisplacementRaise.cpp,v 1.15 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -162,34 +162,32 @@ static void displacementRaise(Post_View * v, Post_View * w, double factor, int t
 
 Post_View *GMSH_DisplacementRaisePlugin::execute(Post_View * v)
 {
-  Post_View *vv, *ww;
-
   double factor = DisplacementRaiseOptions_Number[0].def;
   int dTimeStep = (int)DisplacementRaiseOptions_Number[1].def;
   int dView = (int)DisplacementRaiseOptions_Number[2].def;
   int iView = (int)DisplacementRaiseOptions_Number[3].def;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(GERROR, "View[%d] does not exist", iView);
-      return 0;
-    }
-  }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
 
-  if(dView < 0){
-    dView = vv->Index + 1; // by default, try to use the next view
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
-  if(!(ww = (Post_View *) List_Pointer_Test(CTX.post.list, dView))) {
+
+  if(dView < 0)
+    dView = iView + 1; // by default, try to use the next view
+
+  if(!List_Pointer_Test(CTX.post.list, dView)) {
     Msg(GERROR, "View[%d] does not exist", dView);
-    return 0;
+    return v;
   }
 
-  displacementRaise(vv, ww, factor, dTimeStep);
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+  Post_View *v2 = (Post_View*)List_Pointer(CTX.post.list, dView);
+
+  displacementRaise(v1, v2, factor, dTimeStep);
 
-  return vv;
+  return v1;
 }
 
diff --git a/Plugin/Evaluate.cpp b/Plugin/Evaluate.cpp
index 0230c56ffa281754b04a98de9fa20ac64bdc60d6..db0924d367496d51eada1d1468973ace709b5494 100644
--- a/Plugin/Evaluate.cpp
+++ b/Plugin/Evaluate.cpp
@@ -1,4 +1,4 @@
-// $Id: Evaluate.cpp,v 1.6 2004-05-13 17:48:56 geuzaine Exp $
+// $Id: Evaluate.cpp,v 1.7 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -187,56 +187,53 @@ static void evaluate(Post_View * v, List_T * list, int nbElm,
 
 Post_View *GMSH_EvaluatePlugin::execute(Post_View * v)
 {
-  Post_View *vv;
-
   int timeStep = (int)EvaluateOptions_Number[0].def;
   int comp = (int)EvaluateOptions_Number[1].def;
   int iView = (int)EvaluateOptions_Number[2].def;
   char *expr = EvaluateOptions_String[0].def;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(WARNING, "View[%d] does not exist", iView);
-      return 0;
-    }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
 
-  evaluate(vv, vv->SP, vv->NbSP, 1, 1, comp, timeStep, expr);
-  evaluate(vv, vv->VP, vv->NbVP, 1, 3, comp, timeStep, expr);
-  evaluate(vv, vv->TP, vv->NbTP, 1, 9, comp, timeStep, expr);
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+
+  evaluate(v1, v1->SP, v1->NbSP, 1, 1, comp, timeStep, expr);
+  evaluate(v1, v1->VP, v1->NbVP, 1, 3, comp, timeStep, expr);
+  evaluate(v1, v1->TP, v1->NbTP, 1, 9, comp, timeStep, expr);
 
-  evaluate(vv, vv->SL, vv->NbSL, 2, 1, comp, timeStep, expr);
-  evaluate(vv, vv->VL, vv->NbVL, 2, 3, comp, timeStep, expr);
-  evaluate(vv, vv->TL, vv->NbTL, 2, 9, comp, timeStep, expr);
+  evaluate(v1, v1->SL, v1->NbSL, 2, 1, comp, timeStep, expr);
+  evaluate(v1, v1->VL, v1->NbVL, 2, 3, comp, timeStep, expr);
+  evaluate(v1, v1->TL, v1->NbTL, 2, 9, comp, timeStep, expr);
 
-  evaluate(vv, vv->ST, vv->NbST, 3, 1, comp, timeStep, expr);
-  evaluate(vv, vv->VT, vv->NbVT, 3, 3, comp, timeStep, expr);
-  evaluate(vv, vv->TT, vv->NbTT, 3, 9, comp, timeStep, expr);
+  evaluate(v1, v1->ST, v1->NbST, 3, 1, comp, timeStep, expr);
+  evaluate(v1, v1->VT, v1->NbVT, 3, 3, comp, timeStep, expr);
+  evaluate(v1, v1->TT, v1->NbTT, 3, 9, comp, timeStep, expr);
 
-  evaluate(vv, vv->SQ, vv->NbSQ, 4, 1, comp, timeStep, expr);
-  evaluate(vv, vv->VQ, vv->NbVQ, 4, 3, comp, timeStep, expr);
-  evaluate(vv, vv->TQ, vv->NbTQ, 4, 9, comp, timeStep, expr);
+  evaluate(v1, v1->SQ, v1->NbSQ, 4, 1, comp, timeStep, expr);
+  evaluate(v1, v1->VQ, v1->NbVQ, 4, 3, comp, timeStep, expr);
+  evaluate(v1, v1->TQ, v1->NbTQ, 4, 9, comp, timeStep, expr);
 
-  evaluate(vv, vv->SS, vv->NbSS, 4, 1, comp, timeStep, expr);
-  evaluate(vv, vv->VS, vv->NbVS, 4, 3, comp, timeStep, expr);
-  evaluate(vv, vv->TS, vv->NbTS, 4, 9, comp, timeStep, expr);
+  evaluate(v1, v1->SS, v1->NbSS, 4, 1, comp, timeStep, expr);
+  evaluate(v1, v1->VS, v1->NbVS, 4, 3, comp, timeStep, expr);
+  evaluate(v1, v1->TS, v1->NbTS, 4, 9, comp, timeStep, expr);
 
-  evaluate(vv, vv->SH, vv->NbSH, 8, 1, comp, timeStep, expr);
-  evaluate(vv, vv->VH, vv->NbVH, 8, 3, comp, timeStep, expr);
-  evaluate(vv, vv->TH, vv->NbTH, 8, 9, comp, timeStep, expr);
+  evaluate(v1, v1->SH, v1->NbSH, 8, 1, comp, timeStep, expr);
+  evaluate(v1, v1->VH, v1->NbVH, 8, 3, comp, timeStep, expr);
+  evaluate(v1, v1->TH, v1->NbTH, 8, 9, comp, timeStep, expr);
 
-  evaluate(vv, vv->SI, vv->NbSI, 6, 1, comp, timeStep, expr);
-  evaluate(vv, vv->VI, vv->NbVI, 6, 3, comp, timeStep, expr);
-  evaluate(vv, vv->TI, vv->NbTI, 6, 9, comp, timeStep, expr);
+  evaluate(v1, v1->SI, v1->NbSI, 6, 1, comp, timeStep, expr);
+  evaluate(v1, v1->VI, v1->NbVI, 6, 3, comp, timeStep, expr);
+  evaluate(v1, v1->TI, v1->NbTI, 6, 9, comp, timeStep, expr);
 
-  evaluate(vv, vv->SY, vv->NbSY, 5, 1, comp, timeStep, expr);
-  evaluate(vv, vv->VY, vv->NbVY, 5, 3, comp, timeStep, expr);
-  evaluate(vv, vv->TY, vv->NbTY, 5, 9, comp, timeStep, expr);
+  evaluate(v1, v1->SY, v1->NbSY, 5, 1, comp, timeStep, expr);
+  evaluate(v1, v1->VY, v1->NbVY, 5, 3, comp, timeStep, expr);
+  evaluate(v1, v1->TY, v1->NbTY, 5, 9, comp, timeStep, expr);
 
-  return vv;
+  return v1;
 }
 
diff --git a/Plugin/Extract.cpp b/Plugin/Extract.cpp
index 44469f91a5059f62333d9ee58eab05e4815549c2..0cdcb06f1d70ae536c909a527e4c246b080b62fe 100644
--- a/Plugin/Extract.cpp
+++ b/Plugin/Extract.cpp
@@ -1,4 +1,4 @@
-// $Id: Extract.cpp,v 1.10 2004-05-13 15:54:56 geuzaine Exp $
+// $Id: Extract.cpp,v 1.11 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -197,70 +197,66 @@ Post_View *GMSH_ExtractPlugin::execute(Post_View * v)
   char *expr[3] = { ExtractOptions_String[0].def, 
 		    ExtractOptions_String[1].def,
 		    ExtractOptions_String[2].def };
-  Post_View *vv;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(WARNING, "View[%d] does not exist", iView);
-      return 0;
-    }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
 
-  // FIXME: this is not secure: if BeginView forces a post.list
-  // reallocation, vv is wrong
-  Post_View *view = BeginView(1);
-  Post_View *z = view;
+  Post_View *v2 = BeginView(1);
+
+  // get v1 after BeginView: this is ok even if post.list got reallocated
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
 
   // points
-  extract(expr, vv->SP, vv->NbSP, z->SP, &z->NbSP, z->VP, &z->NbVP, vv->NbTimeStep, 1, 1);
-  extract(expr, vv->VP, vv->NbVP, z->SP, &z->NbSP, z->VP, &z->NbVP, vv->NbTimeStep, 1, 3);
-  extract(expr, vv->TP, vv->NbTP, z->SP, &z->NbSP, z->VP, &z->NbVP, vv->NbTimeStep, 1, 9);
+  extract(expr, v1->SP, v1->NbSP, v2->SP, &v2->NbSP, v2->VP, &v2->NbVP, v1->NbTimeStep, 1, 1);
+  extract(expr, v1->VP, v1->NbVP, v2->SP, &v2->NbSP, v2->VP, &v2->NbVP, v1->NbTimeStep, 1, 3);
+  extract(expr, v1->TP, v1->NbTP, v2->SP, &v2->NbSP, v2->VP, &v2->NbVP, v1->NbTimeStep, 1, 9);
   // lines			                                  
-  extract(expr, vv->SL, vv->NbSL, z->SL, &z->NbSL, z->VL, &z->NbVL, vv->NbTimeStep, 2, 1);
-  extract(expr, vv->VL, vv->NbVL, z->SL, &z->NbSL, z->VL, &z->NbVL, vv->NbTimeStep, 2, 3);
-  extract(expr, vv->TL, vv->NbTL, z->SL, &z->NbSL, z->VL, &z->NbVL, vv->NbTimeStep, 2, 9);
+  extract(expr, v1->SL, v1->NbSL, v2->SL, &v2->NbSL, v2->VL, &v2->NbVL, v1->NbTimeStep, 2, 1);
+  extract(expr, v1->VL, v1->NbVL, v2->SL, &v2->NbSL, v2->VL, &v2->NbVL, v1->NbTimeStep, 2, 3);
+  extract(expr, v1->TL, v1->NbTL, v2->SL, &v2->NbSL, v2->VL, &v2->NbVL, v1->NbTimeStep, 2, 9);
   // triangles			                                  
-  extract(expr, vv->ST, vv->NbST, z->ST, &z->NbST, z->VT, &z->NbVT, vv->NbTimeStep, 3, 1);
-  extract(expr, vv->VT, vv->NbVT, z->ST, &z->NbST, z->VT, &z->NbVT, vv->NbTimeStep, 3, 3);
-  extract(expr, vv->TT, vv->NbTT, z->ST, &z->NbST, z->VT, &z->NbVT, vv->NbTimeStep, 3, 9);
+  extract(expr, v1->ST, v1->NbST, v2->ST, &v2->NbST, v2->VT, &v2->NbVT, v1->NbTimeStep, 3, 1);
+  extract(expr, v1->VT, v1->NbVT, v2->ST, &v2->NbST, v2->VT, &v2->NbVT, v1->NbTimeStep, 3, 3);
+  extract(expr, v1->TT, v1->NbTT, v2->ST, &v2->NbST, v2->VT, &v2->NbVT, v1->NbTimeStep, 3, 9);
   // quadrangles		                                  
-  extract(expr, vv->SQ, vv->NbSQ, z->SQ, &z->NbSQ, z->VQ, &z->NbVQ, vv->NbTimeStep, 4, 1);
-  extract(expr, vv->VQ, vv->NbVQ, z->SQ, &z->NbSQ, z->VQ, &z->NbVQ, vv->NbTimeStep, 4, 3);
-  extract(expr, vv->TQ, vv->NbTQ, z->SQ, &z->NbSQ, z->VQ, &z->NbVQ, vv->NbTimeStep, 4, 9);
+  extract(expr, v1->SQ, v1->NbSQ, v2->SQ, &v2->NbSQ, v2->VQ, &v2->NbVQ, v1->NbTimeStep, 4, 1);
+  extract(expr, v1->VQ, v1->NbVQ, v2->SQ, &v2->NbSQ, v2->VQ, &v2->NbVQ, v1->NbTimeStep, 4, 3);
+  extract(expr, v1->TQ, v1->NbTQ, v2->SQ, &v2->NbSQ, v2->VQ, &v2->NbVQ, v1->NbTimeStep, 4, 9);
   // tets			                                  
-  extract(expr, vv->SS, vv->NbSS, z->SS, &z->NbSS, z->VS, &z->NbVS, vv->NbTimeStep, 4, 1);
-  extract(expr, vv->VS, vv->NbVS, z->SS, &z->NbSS, z->VS, &z->NbVS, vv->NbTimeStep, 4, 3);
-  extract(expr, vv->TS, vv->NbTS, z->SS, &z->NbSS, z->VS, &z->NbVS, vv->NbTimeStep, 4, 9);
+  extract(expr, v1->SS, v1->NbSS, v2->SS, &v2->NbSS, v2->VS, &v2->NbVS, v1->NbTimeStep, 4, 1);
+  extract(expr, v1->VS, v1->NbVS, v2->SS, &v2->NbSS, v2->VS, &v2->NbVS, v1->NbTimeStep, 4, 3);
+  extract(expr, v1->TS, v1->NbTS, v2->SS, &v2->NbSS, v2->VS, &v2->NbVS, v1->NbTimeStep, 4, 9);
   // hexas			                                  
-  extract(expr, vv->SH, vv->NbSH, z->SH, &z->NbSH, z->VH, &z->NbVH, vv->NbTimeStep, 8, 1);
-  extract(expr, vv->VH, vv->NbVH, z->SH, &z->NbSH, z->VH, &z->NbVH, vv->NbTimeStep, 8, 3);
-  extract(expr, vv->TH, vv->NbTH, z->SH, &z->NbSH, z->VH, &z->NbVH, vv->NbTimeStep, 8, 9);
+  extract(expr, v1->SH, v1->NbSH, v2->SH, &v2->NbSH, v2->VH, &v2->NbVH, v1->NbTimeStep, 8, 1);
+  extract(expr, v1->VH, v1->NbVH, v2->SH, &v2->NbSH, v2->VH, &v2->NbVH, v1->NbTimeStep, 8, 3);
+  extract(expr, v1->TH, v1->NbTH, v2->SH, &v2->NbSH, v2->VH, &v2->NbVH, v1->NbTimeStep, 8, 9);
   // prisms			                                  
-  extract(expr, vv->SI, vv->NbSI, z->SI, &z->NbSI, z->VI, &z->NbVI, vv->NbTimeStep, 6, 1);
-  extract(expr, vv->VI, vv->NbVI, z->SI, &z->NbSI, z->VI, &z->NbVI, vv->NbTimeStep, 6, 3);
-  extract(expr, vv->TI, vv->NbTI, z->SI, &z->NbSI, z->VI, &z->NbVI, vv->NbTimeStep, 6, 9);
+  extract(expr, v1->SI, v1->NbSI, v2->SI, &v2->NbSI, v2->VI, &v2->NbVI, v1->NbTimeStep, 6, 1);
+  extract(expr, v1->VI, v1->NbVI, v2->SI, &v2->NbSI, v2->VI, &v2->NbVI, v1->NbTimeStep, 6, 3);
+  extract(expr, v1->TI, v1->NbTI, v2->SI, &v2->NbSI, v2->VI, &v2->NbVI, v1->NbTimeStep, 6, 9);
   // pyramids			                                  
-  extract(expr, vv->SY, vv->NbSY, z->SY, &z->NbSY, z->VY, &z->NbVY, vv->NbTimeStep, 5, 1);
-  extract(expr, vv->VY, vv->NbVY, z->SY, &z->NbSY, z->VY, &z->NbVY, vv->NbTimeStep, 5, 3);
-  extract(expr, vv->TY, vv->NbTY, z->SY, &z->NbSY, z->VY, &z->NbVY, vv->NbTimeStep, 5, 9);
+  extract(expr, v1->SY, v1->NbSY, v2->SY, &v2->NbSY, v2->VY, &v2->NbVY, v1->NbTimeStep, 5, 1);
+  extract(expr, v1->VY, v1->NbVY, v2->SY, &v2->NbSY, v2->VY, &v2->NbVY, v1->NbTimeStep, 5, 3);
+  extract(expr, v1->TY, v1->NbTY, v2->SY, &v2->NbSY, v2->VY, &v2->NbVY, v1->NbTimeStep, 5, 9);
 
-  if(view->empty()) {
-    RemoveViewByNumber(view->Num);
+  if(v2->empty()) {
+    RemoveViewByNumber(v2->Num);
+    return v1;
   }
   else{
     // copy time data
-    for(int i = 0; i < List_Nbr(vv->Time); i++)
-      List_Add(view->Time, List_Pointer(vv->Time, i));
+    for(int i = 0; i < List_Nbr(v1->Time); i++)
+      List_Add(v2->Time, List_Pointer(v1->Time, i));
     // finalize
     char name[1024], filename[1024];
-    sprintf(name, "%s_Extract", vv->Name);
-    sprintf(filename, "%s_Extract.pos", vv->Name);
-    EndView(view, 1, filename, name);
+    sprintf(name, "%s_Extract", v1->Name);
+    sprintf(filename, "%s_Extract.pos", v1->Name);
+    EndView(v2, 1, filename, name);
+    return v2;
   }
-
-  return 0;
 }
diff --git a/Plugin/Harmonic2Time.cpp b/Plugin/Harmonic2Time.cpp
index 2612dc7f66b77976b5187b71f57828391104f3d3..d44df315ad8901bb00321fc4682d284aab3c2dae 100644
--- a/Plugin/Harmonic2Time.cpp
+++ b/Plugin/Harmonic2Time.cpp
@@ -1,4 +1,4 @@
-// $Id: Harmonic2Time.cpp,v 1.13 2004-03-13 21:00:19 geuzaine Exp $
+// $Id: Harmonic2Time.cpp,v 1.14 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -109,7 +109,6 @@ static void harmonic2time(Post_View * vv, Post_View * View,
 
 Post_View *GMSH_Harmonic2TimePlugin::execute(Post_View * v)
 {
-  Post_View *vv, *View;
   int rIndex, iIndex, nbSteps, iView;
 
   rIndex = (int)Harmonic2TimeOptions_Number[0].def;
@@ -117,31 +116,31 @@ Post_View *GMSH_Harmonic2TimePlugin::execute(Post_View * v)
   nbSteps = (int)Harmonic2TimeOptions_Number[2].def;
   iView = (int)Harmonic2TimeOptions_Number[3].def;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(WARNING, "View[%d] does not exist", iView);
-      return 0;
-    }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
 
-  if(MIN(rIndex, iIndex) >= 0 && vv->NbTimeStep >= MAX(rIndex, iIndex)) {
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+
+  if(MIN(rIndex, iIndex) >= 0 && v1->NbTimeStep >= MAX(rIndex, iIndex)) {
     // FIXME: this is not secure: if BeginView forces a post.list
-    // reallocation, vv is wrong
-    View = BeginView(1);
-    harmonic2time(vv, View, rIndex, iIndex, nbSteps);
+    // reallocation, v1 could be wrong
+    Post_View *v2 = BeginView(1);
+    harmonic2time(v1, v2, rIndex, iIndex, nbSteps);
     // create time data
     // FIXME: todo
     // finalize
     char name[1024], filename[1024];
-    sprintf(name, "%s_Harmonic2Time", vv->Name);
-    sprintf(filename, "%s_Harmonic2Time.pos", vv->Name);
-    EndView(View, 1, filename, name);
+    sprintf(name, "%s_Harmonic2Time", v1->Name);
+    sprintf(filename, "%s_Harmonic2Time.pos", v1->Name);
+    EndView(v2, 1, filename, name);
+    return v2;
   }
 
-  return 0;
+  return v1;
 }
 
diff --git a/Plugin/Skin.cpp b/Plugin/Skin.cpp
index 9b17dcbf6d4484b71470778588d27a1a192c20aa..26c1794f9621c8054ebcce31b10e4743c8fdc955 100644
--- a/Plugin/Skin.cpp
+++ b/Plugin/Skin.cpp
@@ -1,4 +1,4 @@
-// $Id: Skin.cpp,v 1.26 2004-03-13 21:00:19 geuzaine Exp $
+// $Id: Skin.cpp,v 1.27 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -172,24 +172,19 @@ void GMSH_SkinPlugin::skinList(List_T *inList, int inNbList,
 Post_View *GMSH_SkinPlugin::execute(Post_View * v)
 {
   int iView = (int)SkinOptions_Number[0].def;
-  Post_View *vv;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(WARNING, "View[%d] does not exist", iView);
-      return 0;
-    }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
 
-  _nbTimeStep = vv->NbTimeStep;
+  Post_View *v2 = BeginView(1);
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
 
-  // FIXME: this is not secure: if BeginView forces a post.list
-  // reallocation, vv is wrong
-  Post_View *view = BeginView(1);
+  _nbTimeStep = v1->NbTimeStep;
 
   int skinTri[6][4] = {{0,1,-1,-1}, {1,2,-1,-1}, {2,0,-1,-1}};
   int skinQua[6][4] = {{0,1,-1,-1}, {1,2,-1,-1}, {2,3,-1,-1}, {3,0,-1,-1}};
@@ -205,23 +200,23 @@ Post_View *GMSH_SkinPlugin::execute(Post_View * v)
   _nbNod = 2;
   // scalar
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = view->SL; _nbList = &view->NbSL; _nbComp = 1;
-  skinList(vv->ST, vv->NbST, 3, 3, skinTri);
-  skinList(vv->SQ, vv->NbSQ, 4, 4, skinQua);
+  _list = v2->SL; _nbList = &v2->NbSL; _nbComp = 1;
+  skinList(v1->ST, v1->NbST, 3, 3, skinTri);
+  skinList(v1->SQ, v1->NbSQ, 4, 4, skinQua);
   Tree_Action(_skin, addInView);
   Tree_Delete(_skin);
   // vector
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = view->VL; _nbList = &view->NbVL; _nbComp = 3;
-  skinList(vv->VT, vv->NbVT, 3, 3, skinTri);
-  skinList(vv->VQ, vv->NbVQ, 4, 4, skinQua);
+  _list = v2->VL; _nbList = &v2->NbVL; _nbComp = 3;
+  skinList(v1->VT, v1->NbVT, 3, 3, skinTri);
+  skinList(v1->VQ, v1->NbVQ, 4, 4, skinQua);
   Tree_Action(_skin, addInView);
   Tree_Delete(_skin);
   // tensor
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = view->TL; _nbList = &view->NbTL; _nbComp = 9;
-  skinList(vv->TT, vv->NbTT, 3, 3, skinTri);
-  skinList(vv->TQ, vv->NbTQ, 4, 4, skinQua);
+  _list = v2->TL; _nbList = &v2->NbTL; _nbComp = 9;
+  skinList(v1->TT, v1->NbTT, 3, 3, skinTri);
+  skinList(v1->TQ, v1->NbTQ, 4, 4, skinQua);
   Tree_Action(_skin, addInView);
   Tree_Delete(_skin);
 
@@ -229,26 +224,26 @@ Post_View *GMSH_SkinPlugin::execute(Post_View * v)
   _nbNod = 3;
   // scalar
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = view->ST; _nbList = &view->NbST; _nbComp = 1;
-  skinList(vv->SS, vv->NbSS, 4, 4, skinTet);
-  skinList(vv->SI, vv->NbSI, 6, 2, skinPri2);
-  skinList(vv->SY, vv->NbSY, 5, 4, skinPyr2);
+  _list = v2->ST; _nbList = &v2->NbST; _nbComp = 1;
+  skinList(v1->SS, v1->NbSS, 4, 4, skinTet);
+  skinList(v1->SI, v1->NbSI, 6, 2, skinPri2);
+  skinList(v1->SY, v1->NbSY, 5, 4, skinPyr2);
   Tree_Action(_skin, addInView);
   Tree_Delete(_skin);
   // vector
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = view->VT; _nbList = &view->NbVT; _nbComp = 3;
-  skinList(vv->VS, vv->NbVS, 4, 4, skinTet);
-  skinList(vv->VI, vv->NbVI, 6, 2, skinPri2);
-  skinList(vv->VY, vv->NbVY, 5, 4, skinPyr2);
+  _list = v2->VT; _nbList = &v2->NbVT; _nbComp = 3;
+  skinList(v1->VS, v1->NbVS, 4, 4, skinTet);
+  skinList(v1->VI, v1->NbVI, 6, 2, skinPri2);
+  skinList(v1->VY, v1->NbVY, 5, 4, skinPyr2);
   Tree_Action(_skin, addInView);
   Tree_Delete(_skin);
   // tensor
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = view->TT; _nbList = &view->NbTT; _nbComp = 9;
-  skinList(vv->TS, vv->NbTS, 4, 4, skinTet);
-  skinList(vv->TI, vv->NbTI, 6, 2, skinPri2);
-  skinList(vv->TY, vv->NbTY, 5, 4, skinPyr2);
+  _list = v2->TT; _nbList = &v2->NbTT; _nbComp = 9;
+  skinList(v1->TS, v1->NbTS, 4, 4, skinTet);
+  skinList(v1->TI, v1->NbTI, 6, 2, skinPri2);
+  skinList(v1->TY, v1->NbTY, 5, 4, skinPyr2);
   Tree_Action(_skin, addInView);
   Tree_Delete(_skin);
 
@@ -256,42 +251,42 @@ Post_View *GMSH_SkinPlugin::execute(Post_View * v)
   _nbNod = 4;
   // scalar
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = view->SQ; _nbList = &view->NbSQ; _nbComp = 1;
-  skinList(vv->SH, vv->NbSH, 8, 6, skinHex);
-  skinList(vv->SI, vv->NbSI, 6, 3, skinPri1);
-  skinList(vv->SY, vv->NbSY, 5, 1, skinPyr1);
+  _list = v2->SQ; _nbList = &v2->NbSQ; _nbComp = 1;
+  skinList(v1->SH, v1->NbSH, 8, 6, skinHex);
+  skinList(v1->SI, v1->NbSI, 6, 3, skinPri1);
+  skinList(v1->SY, v1->NbSY, 5, 1, skinPyr1);
   Tree_Action(_skin, addInView);
   Tree_Delete(_skin);
   // vector
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = view->VQ; _nbList = &view->NbVQ; _nbComp = 3;
-  skinList(vv->VH, vv->NbVH, 8, 6, skinHex);
-  skinList(vv->VI, vv->NbVI, 6, 3, skinPri1);
-  skinList(vv->VY, vv->NbVY, 5, 1, skinPyr1);
+  _list = v2->VQ; _nbList = &v2->NbVQ; _nbComp = 3;
+  skinList(v1->VH, v1->NbVH, 8, 6, skinHex);
+  skinList(v1->VI, v1->NbVI, 6, 3, skinPri1);
+  skinList(v1->VY, v1->NbVY, 5, 1, skinPyr1);
   Tree_Action(_skin, addInView);
   Tree_Delete(_skin);
   // tensor
   _skin = Tree_Create(sizeof(Elm), fcmpElm);
-  _list = view->TQ; _nbList = &view->NbTQ; _nbComp = 9;
-  skinList(vv->TH, vv->NbTH, 8, 6, skinHex);
-  skinList(vv->TI, vv->NbTI, 6, 3, skinPri1);
-  skinList(vv->TY, vv->NbTY, 5, 1, skinPyr1);
+  _list = v2->TQ; _nbList = &v2->NbTQ; _nbComp = 9;
+  skinList(v1->TH, v1->NbTH, 8, 6, skinHex);
+  skinList(v1->TI, v1->NbTI, 6, 3, skinPri1);
+  skinList(v1->TY, v1->NbTY, 5, 1, skinPyr1);
   Tree_Action(_skin, addInView);
   Tree_Delete(_skin);
 
-  if(view->empty()) {
-    RemoveViewByNumber(view->Num);
+  if(v2->empty()) {
+    RemoveViewByNumber(v2->Num);
+    return v1;
   }
   else{
     // copy time data
-    for(int i = 0; i < List_Nbr(vv->Time); i++)
-      List_Add(view->Time, List_Pointer(vv->Time, i));
+    for(int i = 0; i < List_Nbr(v1->Time); i++)
+      List_Add(v2->Time, List_Pointer(v1->Time, i));
     // finalize
     char name[1024], filename[1024];
-    sprintf(name, "%s_Skin", vv->Name);
-    sprintf(filename, "%s_Skin.pos", vv->Name);
-    EndView(view, 1, filename, name);
+    sprintf(name, "%s_Skin", v1->Name);
+    sprintf(filename, "%s_Skin.pos", v1->Name);
+    EndView(v2, 1, filename, name);
+    return v2;
   }
-
-  return 0;
 }
diff --git a/Plugin/Smooth.cpp b/Plugin/Smooth.cpp
index 39b8bbbd2d9ff495938fa994dfad1f5c1e4225dc..f225c1d0c1e55486dce0a024f2c3f5aab6c8e400 100644
--- a/Plugin/Smooth.cpp
+++ b/Plugin/Smooth.cpp
@@ -1,4 +1,4 @@
-// $Id: Smooth.cpp,v 1.18 2004-03-13 21:00:19 geuzaine Exp $
+// $Id: Smooth.cpp,v 1.19 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -80,21 +80,19 @@ void GMSH_SmoothPlugin::catchErrorMessage(char *errorMessage) const
 
 Post_View *GMSH_SmoothPlugin::execute(Post_View * v)
 {
-  Post_View *vv;
   int iView = (int)SmoothOptions_Number[0].def;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(WARNING, "View[%d] does not exist", iView);
-      return 0;
-    }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
 
-  vv->smooth();
-  return vv;
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+
+  v1->smooth();
+  return v1;
 }
 
diff --git a/Plugin/SphericalRaise.cpp b/Plugin/SphericalRaise.cpp
index 77d8abb62f32c25dccdfd6347faf74ce4332e378..7cc6b7492d97cda2b9b91a9b0ce58dc69af037af 100644
--- a/Plugin/SphericalRaise.cpp
+++ b/Plugin/SphericalRaise.cpp
@@ -1,4 +1,4 @@
-// $Id: SphericalRaise.cpp,v 1.16 2004-05-13 17:48:56 geuzaine Exp $
+// $Id: SphericalRaise.cpp,v 1.17 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -149,7 +149,6 @@ static void sphericalRaise(Post_View * v, int timeStep, double center[3],
 
 Post_View *GMSH_SphericalRaisePlugin::execute(Post_View * v)
 {
-  Post_View *vv;
   double center[3], raise;
 
   center[0] = SphericalRaiseOptions_Number[0].def;
@@ -159,18 +158,17 @@ Post_View *GMSH_SphericalRaisePlugin::execute(Post_View * v)
   int timeStep = (int)SphericalRaiseOptions_Number[4].def;
   int iView = (int)SphericalRaiseOptions_Number[5].def;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(WARNING, "View[%d] does not exist", iView);
-      return 0;
-    }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
 
-  sphericalRaise(vv, timeStep, center, raise);
-  return vv;
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+
+  sphericalRaise(v1, timeStep, center, raise);
+  return v1;
 }
 
diff --git a/Plugin/Transform.cpp b/Plugin/Transform.cpp
index 5c8aa9a48da2926b38dc818b4260ea397bf97611..3f1c46295d7424f742603e8421ce034d3556bcc7 100644
--- a/Plugin/Transform.cpp
+++ b/Plugin/Transform.cpp
@@ -1,4 +1,4 @@
-// $Id: Transform.cpp,v 1.23 2004-03-13 21:00:19 geuzaine Exp $
+// $Id: Transform.cpp,v 1.24 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -93,7 +93,6 @@ void GMSH_TransformPlugin::catchErrorMessage(char *errorMessage) const
 
 Post_View *GMSH_TransformPlugin::execute(Post_View * v)
 {
-  Post_View *vv;
   double mat[3][3];
 
   mat[0][0] = TransformOptions_Number[0].def;
@@ -108,19 +107,18 @@ Post_View *GMSH_TransformPlugin::execute(Post_View * v)
 
   int iView = (int)TransformOptions_Number[9].def;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(WARNING, "View[%d] does not exist", iView);
-      return 0;
-    }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
 
-  vv->transform(mat);
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+
+  v1->transform(mat);
 
-  return 0;
+  return v1;
 }
 
diff --git a/Plugin/Triangulate.cpp b/Plugin/Triangulate.cpp
index 83c6df9b6e9ac64d4ec1aa620d2dc1f9ecf046ef..4b2f36b5a9e3e6a4f340d6ac71240e146f24b366 100644
--- a/Plugin/Triangulate.cpp
+++ b/Plugin/Triangulate.cpp
@@ -1,4 +1,4 @@
-// $Id: Triangulate.cpp,v 1.20 2004-03-13 21:00:19 geuzaine Exp $
+// $Id: Triangulate.cpp,v 1.21 2004-05-16 20:04:43 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -202,36 +202,34 @@ void Triangulate(Post_View * vin, Post_View * vout)
 
 Post_View *GMSH_TriangulatePlugin::execute(Post_View * v)
 {
-  Post_View *vv, *View;
-
   int iView = (int)TriangulateOptions_Number[0].def;
 
-  if(v && iView < 0)
-    vv = v;
-  else {
-    if(!v && iView < 0)
-      iView = 0;
-    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
-      Msg(WARNING, "View[%d] does not exist", iView);
-      return 0;
-    }
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
   }
 
-  if(vv->NbSP > 2) {
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+  
+  if(v1->NbSP > 2) {
     // FIXME: this is not secure: if BeginView forces a post.list
-    // reallocation, vv is wrong
-    View = BeginView(1);
-    Triangulate(vv, View);
+    // reallocation, v1 could be wrong
+    Post_View *v2 = BeginView(1);
+    Triangulate(v1, v2);
     // copy time data
-    for(int i = 0; i < List_Nbr(vv->Time); i++)
-      List_Add(View->Time, List_Pointer(vv->Time, i));
+    for(int i = 0; i < List_Nbr(v1->Time); i++)
+      List_Add(v2->Time, List_Pointer(v1->Time, i));
     // finalize
     char name[1024], filename[1024];
-    sprintf(name, "%s_Triangulate", vv->Name);
-    sprintf(filename, "%s_Triangulate.pos", vv->Name);
-    EndView(View, 1, filename, name);
+    sprintf(name, "%s_Triangulate", v1->Name);
+    sprintf(filename, "%s_Triangulate.pos", v1->Name);
+    EndView(v2, 1, filename, name);
+    return v2;
   }
 
-  return 0;
+  return v1;
 }