diff --git a/Common/Views.h b/Common/Views.h
index 24131cc2fef63fc86bd95b758d774c39b09c171e..f1d95b408fd4e204946a35b01e3ee7611a2206f2 100644
--- a/Common/Views.h
+++ b/Common/Views.h
@@ -171,7 +171,6 @@ class Post_View{
   double (*GVFI) (double min, double max, int nb, int index);
   int (*GIFV) (double min, double max, int nb, double value);
   int ExternalElementIndex;
-  Post_View *ExternalView;
   double ExternalMin, ExternalMax;
 
   // smooth the view
diff --git a/Graphics/Post.cpp b/Graphics/Post.cpp
index 12f450ba14119c619af7c06ef443dbbfa1f79b9f..5d61a27fb74f6f3ad549129cb0dbac90062d2653 100644
--- a/Graphics/Post.cpp
+++ b/Graphics/Post.cpp
@@ -1,4 +1,4 @@
-// $Id: Post.cpp,v 1.81 2004-10-26 00:43:23 geuzaine Exp $
+// $Id: Post.cpp,v 1.82 2004-10-27 17:27:40 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -242,9 +242,6 @@ void Draw_List(Post_View * v, double ValMin, double ValMax,
   if(nbelm) {
     nb = List_Nbr(list) / nbelm;
 
-    v->ExternalView = 
-      (Post_View*)List_Pointer_Test(CTX.post.list, v->ExternalViewIndex);
-
     if(v->Light && v->SmoothNormals && v->Changed) {
       Msg(DEBUG, "Preprocessing of normals in View[%d]", v->Index);
       v->ExternalElementIndex = 0;
diff --git a/Graphics/PostElement.cpp b/Graphics/PostElement.cpp
index 93f40f04ef91335fcdebb8b4e369550ef90cc8ea..bf374f339e0ca1d1de44bce96a970391d3718f95 100644
--- a/Graphics/PostElement.cpp
+++ b/Graphics/PostElement.cpp
@@ -1,4 +1,4 @@
-// $Id: PostElement.cpp,v 1.50 2004-10-26 01:04:53 geuzaine Exp $
+// $Id: PostElement.cpp,v 1.51 2004-10-27 17:27:40 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -893,77 +893,88 @@ void Draw_ScalarElement(int type, Post_View * View, int preproNormals,
   }
 }
 
-int GetDataFromOtherView(int type, int nbnod, Post_View *v, int *nbcomp,
+int GetDataFromOtherView(int type, Post_View *v, int *nbcomp,
 			 double *norm, double **vals, int *vectype)
 {
-  static int error1 = -1;
-  static int error2 = -1;
-  Post_View *v2 = v->ExternalView;
-  int num = v->ExternalElementIndex;
+  static int lastnum = -1;
+  static int lastnum2 = -1;
+
+  Post_View *v2 = (Post_View*)List_Pointer_Test(CTX.post.list, v->ExternalViewIndex);
 
   if(!v2){
-    if(error1 != v->Num){
+    if(lastnum != v->Num || lastnum2 != v->ExternalViewIndex){
       Msg(GERROR, "Nonexistent external view");
-      error1 = v->Num;
     }
+    lastnum = v->Num;
+    lastnum2 = v->ExternalViewIndex;
     return 0;
   }
 
-  int nbelm = 0, comp = 0;
+  int nbelm = 0, comp = 0, nbnod = 0;
   List_T *l;
   switch (type) {
-  case POINT: 
+  case POINT:
+    nbnod = 1;
     if(v->NbVP == v2->NbSP){ nbelm = v2->NbSP; l = v2->SP; comp = 1; }
     else if(v->NbVP == v2->NbVP){ nbelm = v2->NbVP; l = v2->VP; comp = 3; }
     else if(v->NbVP == v2->NbTP){ nbelm = v2->NbTP; l = v2->TP; comp = 9; }
     break;
-  case LINE: 
+  case LINE:
+    nbnod = 2;
     if(v->NbVL == v2->NbSL){ nbelm = v2->NbSL; l = v2->SL; comp = 1; } 
     else if(v->NbVL == v2->NbVL){ nbelm = v2->NbVL; l = v2->VL; comp = 3; } 
     else if(v->NbVL == v2->NbTL){ nbelm = v2->NbTL; l = v2->TL; comp = 9; } 
     break;
-  case TRIANGLE: 
+  case TRIANGLE:
+    nbnod = 3;
     if(v->NbVT == v2->NbST){ nbelm = v2->NbST; l = v2->ST; comp = 1;  } 
     else if(v->NbVT == v2->NbVT){ nbelm = v2->NbVT; l = v2->VT; comp = 3;  } 
     else if(v->NbVT == v2->NbTT){ nbelm = v2->NbTT; l = v2->TT; comp = 9;  } 
     break;
-  case QUADRANGLE: 
+  case QUADRANGLE:
+    nbnod = 4;
     if(v->NbVQ == v2->NbSQ){ nbelm = v2->NbSQ; l = v2->SQ; comp = 1;  } 
     else if(v->NbVQ == v2->NbVQ){ nbelm = v2->NbVQ; l = v2->VQ; comp = 3;  } 
     else if(v->NbVQ == v2->NbTQ){ nbelm = v2->NbTQ; l = v2->TQ; comp = 9;  } 
     break;
-  case TETRAHEDRON: 
+  case TETRAHEDRON:
+    nbnod = 4;
     if(v->NbVS == v2->NbSS){ nbelm = v2->NbSS; l = v2->SS; comp = 1;  } 
     else if(v->NbVS == v2->NbVS){ nbelm = v2->NbVS; l = v2->VS; comp = 3;  } 
     else if(v->NbVS == v2->NbTS){ nbelm = v2->NbTS; l = v2->TS; comp = 9;  } 
     break;
   case HEXAHEDRON:
+    nbnod = 8;
     if(v->NbVH == v2->NbSH){ nbelm = v2->NbSH; l = v2->SH; comp = 1;  }
     else if(v->NbVH == v2->NbVH){ nbelm = v2->NbVH; l = v2->VH; comp = 3;  }
     else if(v->NbVH == v2->NbTH){ nbelm = v2->NbTH; l = v2->TH; comp = 9;  }
     break;
   case PRISM:
+    nbnod = 6;
     if(v->NbVI == v2->NbSI){ nbelm = v2->NbSI; l = v2->SI; comp = 1;  }
     else if(v->NbVI == v2->NbVI){ nbelm = v2->NbVI; l = v2->VI; comp = 3;  }
     else if(v->NbVI == v2->NbTI){ nbelm = v2->NbTI; l = v2->TI; comp = 9;  }
     break;
-  case PYRAMID: 
+  case PYRAMID:
+    nbnod = 5;
     if(v->NbVY == v2->NbSY){ nbelm = v2->NbSY; l = v2->SY; comp = 1;  } 
     else if(v->NbVY == v2->NbVY){ nbelm = v2->NbVY; l = v2->VY; comp = 3;  } 
     else if(v->NbVY == v2->NbTY){ nbelm = v2->NbTY; l = v2->TY; comp = 9;  } 
     break;
   }
 
-  if(!nbelm || num < 0 || v2->NbTimeStep != v->NbTimeStep){
-    if(error2 != v->Num){
+  if(!nbelm || v2->NbTimeStep != v->NbTimeStep ||
+     v->ExternalElementIndex < 0 || v->ExternalElementIndex >= nbelm){
+    if(lastnum != v->Num || lastnum2 != v->ExternalViewIndex){
       Msg(GERROR, "Incompatible external view");
-      error2 = v->Num;
     }
+    lastnum = v->Num;
+    lastnum2 = v->ExternalViewIndex;
     return 0;
   }
 
   int nb = List_Nbr(l) / nbelm;
-  double *vv = (double *)List_Pointer(l, num * nb + 3 * nbnod + 
+  double *vv = (double *)List_Pointer(l, v->ExternalElementIndex * nb + 3 * nbnod + 
 				      comp * nbnod * v->TimeStep);
   for(int k = 0; k < nbnod; k++){
     if(comp == 1)
@@ -1005,6 +1016,8 @@ int GetDataFromOtherView(int type, int nbnod, Post_View *v, int *nbcomp,
     *vectype = v2->VectorType;
   *nbcomp = comp;
 
+  lastnum = v->Num;
+  lastnum2 = v->ExternalViewIndex;
   return 1;
 }
 
@@ -1041,7 +1054,7 @@ void Draw_VectorElement(int type, Post_View * View, int preproNormals,
     ext_norm[k] = norm[k];
   
   if(View->ExternalViewIndex >= 0){
-    GetDataFromOtherView(type, nbnod, View, &ext_nbcomp, ext_norm, &ext_vals, &ext_vectype);
+    GetDataFromOtherView(type, View, &ext_nbcomp, ext_norm, &ext_vals, &ext_vectype);
     ext_min = View->ExternalMin;
     ext_max = View->ExternalMax;
   }