diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index 30f13816bad58ba1651e7317a959397eb97a13c1..e693d950565e0f672c1b1538a266b825e01ad344 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -48,6 +48,7 @@ GModel::GModel(std::string name)
   list.push_back(this);
   // at the moment we always create (at least an empty) GEO model
   _createGEOInternals();
+  _newElemNumbers = NULL;
 #if defined(HAVE_OCC)
   _factory = new OCCFactory();
 #endif
@@ -63,6 +64,7 @@ GModel::~GModel()
   destroy();
   _deleteGEOInternals();
   _deleteOCCInternals();
+  if(_newElemNumbers) delete _newElemNumbers;
 #if defined(HAVE_MESH)
   delete _fields;
 #endif
@@ -618,8 +620,9 @@ void GModel::getMeshVerticesForPhysicalGroup(int dim, int num, std::vector<MVert
   v.insert(v.begin(), sv.begin(), sv.end());
 }
 
-MElement *GModel::getMeshElementByTag(int n)
+MElement *GModel::getMeshElementByTag(int num)
 {
+  int n = (*_newElemNumbers)(num);
   if(_elementVectorCache.empty() && _elementMapCache.empty()){
     Msg::Debug("Rebuilding mesh element cache");
     _elementVectorCache.clear();
@@ -634,14 +637,14 @@ MElement *GModel::getMeshElementByTag(int n)
       for(unsigned int i = 0; i < entities.size(); i++)
         for(unsigned int j = 0; j < entities[i]->getNumMeshElements(); j++){
           MElement *e = entities[i]->getMeshElement(j);
-          _elementVectorCache[e->getNum()] = e;
+          _elementVectorCache[(*_newElemNumbers)(e->getNum())] = e;
         }
     }
     else{
       for(unsigned int i = 0; i < entities.size(); i++)
         for(unsigned int j = 0; j < entities[i]->getNumMeshElements(); j++){
           MElement *e = entities[i]->getMeshElement(j);
-          _elementMapCache[e->getNum()] = e;
+          _elementMapCache[(*_newElemNumbers)(e->getNum())] = e;
         }
     }
   }
diff --git a/Geo/GModel.h b/Geo/GModel.h
index 8d48df7e76ce4bc15e092e5c7364135e746e09e8..394776770d3e365313199d20cbd47aab1a0fb46d 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -52,6 +52,7 @@ class GModel
   std::map<int, MVertex*> _vertexMapCache;
   std::vector<MElement*> _elementVectorCache;
   std::map<int, MElement*> _elementMapCache;
+  fullVector<double> *_newElemNumbers;
 
   // ghost cell information (stores partitions for each element acting
   // as a ghost cell)
@@ -293,6 +294,7 @@ class GModel
 
   // access a mesh element by tag, using the element cache
   MElement *getMeshElementByTag(int n);
+  int getMeshElementNumByTag(int n) { return (*_newElemNumbers)(n); }
 
   // return the total number of vertices in the mesh
   int getNumMeshVertices();
diff --git a/Geo/GModelIO_Mesh.cpp b/Geo/GModelIO_Mesh.cpp
index 673be6a20ed752ad9a9a2a8d7f216069de7af20a..f6771098d1dcad12496cf8860f762f5b2e68b387 100644
--- a/Geo/GModelIO_Mesh.cpp
+++ b/Geo/GModelIO_Mesh.cpp
@@ -517,7 +517,7 @@ int GModel::readMSH(const std::string &name)
 template<class T>
 static void writeElementMSH(FILE *fp, GModel *model, T *ele, bool saveAll, 
                             double version, bool binary, int &num, int elementary, 
-                            std::vector<int> &physicals, int parentNum)
+                            std::vector<int> &physicals, fullVector<double> *newElemNumbers, int parentNum=0)
 {
   std::vector<short> ghosts;
   if(model->getGhostCells().size()){
@@ -535,6 +535,7 @@ static void writeElementMSH(FILE *fp, GModel *model, T *ele, bool saveAll,
     for(unsigned int j = 0; j < physicals.size(); j++)
       ele->writeMSH(fp, version, binary, ++num, elementary, physicals[j],
                     parentNum, &ghosts);
+  (*newElemNumbers)(ele->getNum()) = num;
 }
 
 template<class T>
@@ -543,6 +544,7 @@ static void writeElementsMSH(FILE *fp, GModel *model, std::vector<T*> &ele,
                              bool saveAll, int saveSinglePartition, double version,
                              bool binary, int &num, int elementary,
                              std::vector<int> &physicals,
+                             fullVector<double> *newElemNumbers,
                              std::map<MElement*, int> *parentsNum=0)
 {
   for(unsigned int i = 0; i < ele.size(); i++){
@@ -557,7 +559,7 @@ static void writeElementsMSH(FILE *fp, GModel *model, std::vector<T*> &ele,
       }
     }
     writeElementMSH(fp, model, ele[i], saveAll, version, binary, num,
-                    elementary, physicals, parentNum);
+                    elementary, physicals, newElemNumbers, parentNum);
   }
 }
 
@@ -693,23 +695,25 @@ int GModel::writeMSH(const std::string &name, double version, bool binary,
   fprintf(fp, "%d\n", numElements);
   int num = elementStartNum;
   std::map<MElement*, int> parentsNum;
+  if(_newElemNumbers) delete _newElemNumbers;
+  _newElemNumbers = new fullVector<double>(numElements + 1);
 
   // points
   for(viter it = firstVertex(); it != lastVertex(); ++it)
     writeElementsMSH(fp, this, (*it)->points, saveAll, saveSinglePartition,
-                     version, binary, num, (*it)->tag(), (*it)->physicals);
+                     version, binary, num, (*it)->tag(), (*it)->physicals, _newElemNumbers);
 
   // lines
   for(std::map<MElement*, GEntity*>::const_iterator it = parents[0].begin(); 
       it != parents[0].end(); it++)
     if(it->first->getType() == TYPE_LIN) {
       writeElementMSH(fp, this, it->first, saveAll, version, binary, num,
-                      it->second->tag(), it->second->physicals, 0);
+                      it->second->tag(), it->second->physicals, _newElemNumbers);
       parentsNum[it->first] = num;
     }
   for(eiter it = firstEdge(); it != lastEdge(); ++it)
     writeElementsMSH(fp, this, (*it)->lines, saveAll, saveSinglePartition,
-                     version, binary, num, (*it)->tag(), (*it)->physicals,
+                     version, binary, num, (*it)->tag(), (*it)->physicals, _newElemNumbers,
                      &parentsNum);
 
   // triangles
@@ -717,36 +721,36 @@ int GModel::writeMSH(const std::string &name, double version, bool binary,
       it != parents[1].end(); it++)
     if(it->first->getType() == TYPE_TRI) {
       writeElementMSH(fp, this, it->first, saveAll, version, binary, num,
-                      it->second->tag(), it->second->physicals, 0);
+                      it->second->tag(), it->second->physicals, _newElemNumbers);
       parentsNum[it->first] = num;
     }
   for(fiter it = firstFace(); it != lastFace(); ++it)
     writeElementsMSH(fp, this, (*it)->triangles, saveAll, saveSinglePartition,
-                     version, binary, num, (*it)->tag(), (*it)->physicals);
+                     version, binary, num, (*it)->tag(), (*it)->physicals, _newElemNumbers);
 
   // quads
   for(std::map<MElement*, GEntity*>::const_iterator it = parents[1].begin(); 
       it != parents[1].end(); it++)
     if(it->first->getType() == TYPE_QUA) {
       writeElementMSH(fp, this, it->first, saveAll, version, binary, num,
-                      it->second->tag(), it->second->physicals, 0);
+                      it->second->tag(), it->second->physicals, _newElemNumbers);
       parentsNum[it->first] = num;
     }
   for(fiter it = firstFace(); it != lastFace(); ++it)
     writeElementsMSH(fp, this, (*it)->quadrangles, saveAll, saveSinglePartition,
-                     version, binary, num, (*it)->tag(), (*it)->physicals);
+                     version, binary, num, (*it)->tag(), (*it)->physicals, _newElemNumbers);
 
   // polygons
   for(std::map<MElement*, GEntity*>::const_iterator it = parents[1].begin();
       it != parents[1].end(); it++)
     if(it->first->getType() == TYPE_POLYG) {
       writeElementMSH(fp, this, it->first, saveAll, version, binary, num,
-                      it->second->tag(), it->second->physicals, 0);
+                      it->second->tag(), it->second->physicals, _newElemNumbers);
       parentsNum[it->first] = num;
     }
   for(fiter it = firstFace(); it != lastFace(); it++)
     writeElementsMSH(fp, this, (*it)->polygons, saveAll, saveSinglePartition,
-                     version, binary, num, (*it)->tag(), (*it)->physicals, 
+                     version, binary, num, (*it)->tag(), (*it)->physicals, _newElemNumbers, 
                      &parentsNum);
 
   // tets
@@ -754,60 +758,60 @@ int GModel::writeMSH(const std::string &name, double version, bool binary,
       it != parents[2].end(); it++)
     if(it->first->getType() == TYPE_TET) {
       writeElementMSH(fp, this, it->first, saveAll, version, binary, num,
-                      it->second->tag(), it->second->physicals, 0);
+                      it->second->tag(), it->second->physicals, _newElemNumbers);
       parentsNum[it->first] = num;
     }
   for(riter it = firstRegion(); it != lastRegion(); ++it)
     writeElementsMSH(fp, this, (*it)->tetrahedra, saveAll, saveSinglePartition,
-                     version, binary, num, (*it)->tag(), (*it)->physicals);
+                     version, binary, num, (*it)->tag(), (*it)->physicals, _newElemNumbers);
 
   // hexas
   for(std::map<MElement*, GEntity*>::const_iterator it = parents[2].begin();
       it != parents[2].end(); it++)
     if(it->first->getType() == TYPE_HEX) {
       writeElementMSH(fp, this, it->first, saveAll, version, binary, num,
-                      it->second->tag(), it->second->physicals, 0);
+                      it->second->tag(), it->second->physicals, _newElemNumbers);
       parentsNum[it->first] = num;
     }
   for(riter it = firstRegion(); it != lastRegion(); ++it)
     writeElementsMSH(fp, this, (*it)->hexahedra, saveAll, saveSinglePartition,
-                     version, binary, num, (*it)->tag(), (*it)->physicals);
+                     version, binary, num, (*it)->tag(), (*it)->physicals, _newElemNumbers);
 
   // prisms
   for(std::map<MElement*, GEntity*>::const_iterator it = parents[2].begin();
       it != parents[2].end(); it++)
     if(it->first->getType() == TYPE_PRI) {
       writeElementMSH(fp, this, it->first, saveAll, version, binary, num,
-                      it->second->tag(), it->second->physicals, 0);
+                      it->second->tag(), it->second->physicals, _newElemNumbers);
       parentsNum[it->first] = num;
     }
   for(riter it = firstRegion(); it != lastRegion(); ++it)
     writeElementsMSH(fp, this, (*it)->prisms, saveAll, saveSinglePartition,
-                     version, binary, num, (*it)->tag(), (*it)->physicals);
+                     version, binary, num, (*it)->tag(), (*it)->physicals, _newElemNumbers);
   
   // pyramids
   for(std::map<MElement*, GEntity*>::const_iterator it = parents[2].begin();
       it != parents[2].end(); it++)
     if(it->first->getType() == TYPE_PYR) {
       writeElementMSH(fp, this, it->first, saveAll, version, binary, num,
-                      it->second->tag(), it->second->physicals, 0);
+                      it->second->tag(), it->second->physicals, _newElemNumbers);
       parentsNum[it->first] = num;
     }
   for(riter it = firstRegion(); it != lastRegion(); ++it)
     writeElementsMSH(fp, this, (*it)->pyramids, saveAll, saveSinglePartition,
-                     version, binary, num, (*it)->tag(), (*it)->physicals);
+                     version, binary, num, (*it)->tag(), (*it)->physicals, _newElemNumbers);
 
   // polyhedra
   for(std::map<MElement*, GEntity*>::const_iterator it = parents[2].begin();
       it != parents[2].end(); it++)
     if(it->first->getType() == TYPE_POLYH) {
       writeElementMSH(fp, this, it->first, saveAll, version, binary, num,
-                      it->second->tag(), it->second->physicals, 0);
+                      it->second->tag(), it->second->physicals, _newElemNumbers);
       parentsNum[it->first] = num;
     }
   for(riter it = firstRegion(); it != lastRegion(); ++it)
     writeElementsMSH(fp, this, (*it)->polyhedra, saveAll, saveSinglePartition,
-                     version, binary, num, (*it)->tag(), (*it)->physicals,
+                     version, binary, num, (*it)->tag(), (*it)->physicals, _newElemNumbers,
                      &parentsNum);
 
   if(binary) fprintf(fp, "\n");
diff --git a/Post/PViewData.h b/Post/PViewData.h
index e97dc2bb0454976049adf0c136c95cf97f6e9a96..baeacf25c052d6a0d97ab53906568ca8e5b023b0 100644
--- a/Post/PViewData.h
+++ b/Post/PViewData.h
@@ -83,10 +83,12 @@ class PViewData {
   virtual int getNumLines(int step=-1){ return 0; }
   virtual int getNumTriangles(int step=-1){ return 0; }
   virtual int getNumQuadrangles(int step=-1){ return 0; }
+  virtual int getNumPolygons(int step=-1){ return 0; }
   virtual int getNumTetrahedra(int step=-1){ return 0; }
   virtual int getNumHexahedra(int step=-1){ return 0; }
   virtual int getNumPrisms(int step=-1){ return 0; }
   virtual int getNumPyramids(int step=-1){ return 0; }
+  virtual int getNumPolyhedra(int step=-1){ return 0; }
 
   // return the number of geometrical entities in the view
   virtual int getNumEntities(int step=-1){ return 0; }
diff --git a/Post/PViewDataGModel.cpp b/Post/PViewDataGModel.cpp
index 926a081002b63e3b9416e3c85542b95ca591f305..5eeece085a960beed7bbdd40ede1599c46600f83 100644
--- a/Post/PViewDataGModel.cpp
+++ b/Post/PViewDataGModel.cpp
@@ -11,6 +11,7 @@
 #include "MHexahedron.h"
 #include "MPrism.h"
 #include "MPyramid.h"
+#include "MElementCut.h"
 #include "Numeric.h"
 #include "GmshMessage.h"
 
@@ -74,6 +75,8 @@ bool PViewDataGModel::finalize()
         _addInterpolationMatricesForElement((*it)->triangles[0]);
       if((*it)->quadrangles.size()) 
         _addInterpolationMatricesForElement((*it)->quadrangles[0]);
+      if((*it)->polygons.size())
+        _addInterpolationMatricesForElement((*it)->polygons[0]);
     }
     for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); it++){
       if((*it)->tetrahedra.size()) 
@@ -84,6 +87,8 @@ bool PViewDataGModel::finalize()
         _addInterpolationMatricesForElement((*it)->prisms[0]);
       if((*it)->pyramids.size()) 
         _addInterpolationMatricesForElement((*it)->pyramids[0]);
+      if((*it)->polyhedra.size())
+        _addInterpolationMatricesForElement((*it)->polyhedra[0]);
     }
   }
 
@@ -216,6 +221,16 @@ int PViewDataGModel::getNumQuadrangles(int step)
   return n;
 }
 
+int PViewDataGModel::getNumPolygons(int step)
+{
+  if(_steps.empty()) return 0;
+  GModel *m = _steps[0]->getModel(); // to generalize
+  int n = 0;
+  for(GModel::fiter it = m->firstFace(); it != m->lastFace(); ++it)
+    n += (*it)->polygons.size();
+  return n;
+}
+
 int PViewDataGModel::getNumTetrahedra(int step)
 {
   if(_steps.empty()) return 0;
@@ -256,6 +271,16 @@ int PViewDataGModel::getNumPyramids(int step)
   return n;
 }
 
+int PViewDataGModel::getNumPolyhedra(int step)
+{
+  if(_steps.empty()) return 0;
+  GModel *m = _steps[0]->getModel(); // to generalize
+  int n = 0;
+  for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it)
+    n += (*it)->polyhedra.size();
+  return n;
+}
+
 int PViewDataGModel::getNumEntities(int step)
 {
   if(_steps.empty()) return 0;
diff --git a/Post/PViewDataGModel.h b/Post/PViewDataGModel.h
index 49118a32d186e0e28d404e0be068cfcebdbc6fe9..e94f914192c9ad948e416ba2f6d1704152c6a21f 100644
--- a/Post/PViewDataGModel.h
+++ b/Post/PViewDataGModel.h
@@ -146,10 +146,12 @@ class PViewDataGModel : public PViewData {
   int getNumLines(int step=-1);
   int getNumTriangles(int step=-1);
   int getNumQuadrangles(int step=-1);
+  int getNumPolygons(int step=-1);
   int getNumTetrahedra(int step=-1);
   int getNumHexahedra(int step=-1);
   int getNumPrisms(int step=-1);
   int getNumPyramids(int step=-1);
+  int getNumPolyhedra(int step=-1);
   int getNumEntities(int step=-1);
   int getNumElements(int step=-1, int ent=-1);
   int getDimension(int step, int ent, int ele);
diff --git a/Post/PViewDataGModelIO.cpp b/Post/PViewDataGModelIO.cpp
index 3eb0a19aa88e6be54528ec097116c97f0b53754d..910457560862d286f4810d2b64a98efd4af46e02 100644
--- a/Post/PViewDataGModelIO.cpp
+++ b/Post/PViewDataGModelIO.cpp
@@ -184,7 +184,7 @@ bool PViewDataGModel::writeMSH(std::string fileName, bool binary)
             // Warning: this will not work if the mesh we just saved
             // above changed the renumbering of the elements (which is
             // usually the case)...
-            int num = e->getNum();
+            int num = model->getMeshElementNumByTag(i);
             if(binary){
               fwrite(&num, sizeof(int), 1, fp);
               if(_type == ElementNodeData)
diff --git a/Post/PViewOptions.cpp b/Post/PViewOptions.cpp
index 3f7c440bfc62f229a8b9dd7f7ff26c5cc1279e0f..a19fafab52f330d6a70cfda25a3b5a6a7cbc2be2 100644
--- a/Post/PViewOptions.cpp
+++ b/Post/PViewOptions.cpp
@@ -124,11 +124,12 @@ bool PViewOptions::skipElement(int type)
   case TYPE_LIN: return !drawLines;
   case TYPE_TRI: return !drawTriangles;
   case TYPE_QUA: return !drawQuadrangles;
+  case TYPE_POLYG: return false;
   case TYPE_TET: return !drawTetrahedra;
   case TYPE_HEX: return !drawHexahedra;
   case TYPE_PRI: return !drawPrisms;
   case TYPE_PYR: return !drawPyramids;
-  case TYPE_POLYG: case TYPE_POLYH: return false;
+  case TYPE_POLYH: return false;
   default: return true;
   }
 }
diff --git a/Post/PViewOptions.h b/Post/PViewOptions.h
index 4f0b60b7c4e41602782a5be1eab8d2d6aeb4c264..fe63b92df3c71668ebd4b80ebe40561e247be740 100644
--- a/Post/PViewOptions.h
+++ b/Post/PViewOptions.h
@@ -72,8 +72,8 @@ class PViewOptions {
   int vectorType, tensorType, glyphLocation, centerGlyphs;
   int timeStep;
   int drawStrings;
-  int drawPoints, drawLines, drawTriangles, drawQuadrangles;
-  int drawTetrahedra, drawHexahedra, drawPrisms, drawPyramids;
+  int drawPoints, drawLines, drawTriangles, drawQuadrangles, drawPolygons;
+  int drawTetrahedra, drawHexahedra, drawPrisms, drawPyramids, drawPolyhedra;
   int drawScalars, drawVectors, drawTensors;
   int boundary, pointType, lineType, drawSkinOnly;
   double pointSize, lineWidth;
diff --git a/Post/PViewVertexArrays.cpp b/Post/PViewVertexArrays.cpp
index 46cbcbef1ef197c70915dd6f33ec92a58b279175..6a1bdbb23d786463ff5c43d115bc0b1640fddbbd 100644
--- a/Post/PViewVertexArrays.cpp
+++ b/Post/PViewVertexArrays.cpp
@@ -609,6 +609,22 @@ static void addScalarQuadrangle(PView *p, double xyz[PVIEW_NMAX][3],
     addScalarTriangle(p, xyz, val, pre, it[i][0], it[i][1], it[i][2], unique);
 }
 
+static void addOutlinePolygon(PView *p, double xyz[PVIEW_NMAX][3], 
+                                  unsigned int color, bool pre, int numNodes)
+{
+  if(numNodes == 3) addOutlineTriangle(p, xyz, color, pre);
+  if(numNodes == 4) addOutlineQuadrangle(p, xyz, color, pre);
+
+}
+
+static void addScalarPolygon(PView *p, double xyz[PVIEW_NMAX][3], 
+                             double val[PVIEW_NMAX][9], bool pre, int numNodes)
+{
+  if(numNodes == 3) addScalarTriangle(p, xyz, val, pre);
+  if(numNodes == 4) {addScalarQuadrangle(p, xyz, val, pre, 0, 1, 2, 3); addScalarQuadrangle(p, xyz, val, pre, 1, 2, 3, 0);}
+  
+}
+
 static void addOutlineTetrahedron(PView *p, double xyz[PVIEW_NMAX][3], 
                                   unsigned int color, bool pre)
 {
@@ -770,7 +786,19 @@ static void addScalarPyramid(PView *p, double xyz[PVIEW_NMAX][3],
     addScalarTetrahedron(p, xyz, val, pre, is[i][0], is[i][1], is[i][2], is[i][3]);
 }
 
-static void addOutlineElement(PView *p, int type, double xyz[PVIEW_NMAX][3], bool pre)
+static void addOutlinePolyhedron(PView *p, double xyz[PVIEW_NMAX][3], 
+                                 unsigned int color, bool pre)
+{
+  //TODO
+}
+
+static void addScalarPolyhedron(PView *p, double xyz[PVIEW_NMAX][3], 
+                                double val[PVIEW_NMAX][9], bool pre, int NumNodes)
+{
+  //TODO
+}
+
+static void addOutlineElement(PView *p, int type, double xyz[PVIEW_NMAX][3], bool pre, int numNodes=0)
 {
   PViewOptions *opt = p->getOptions();
   switch(type){
@@ -778,25 +806,29 @@ static void addOutlineElement(PView *p, int type, double xyz[PVIEW_NMAX][3], boo
   case TYPE_LIN: addOutlineLine(p, xyz, opt->color.line, pre); break;
   case TYPE_TRI: addOutlineTriangle(p, xyz, opt->color.triangle, pre); break;
   case TYPE_QUA: addOutlineQuadrangle(p, xyz, opt->color.quadrangle, pre); break;
+  case TYPE_POLYG: addOutlinePolygon(p, xyz, opt->color.quadrangle, pre, numNodes); break;
   case TYPE_TET: addOutlineTetrahedron(p, xyz, opt->color.tetrahedron, pre); break;
   case TYPE_HEX: addOutlineHexahedron(p, xyz, opt->color.hexahedron, pre); break;
   case TYPE_PRI: addOutlinePrism(p, xyz, opt->color.prism, pre); break;
   case TYPE_PYR: addOutlinePyramid(p, xyz, opt->color.pyramid, pre); break;
+  case TYPE_POLYH: addOutlinePolyhedron(p, xyz, opt->color.pyramid, pre); break;
   }
 }
 
 static void addScalarElement(PView *p, int type, double xyz[PVIEW_NMAX][3],
-                             double val[PVIEW_NMAX][9], bool pre)
+                             double val[PVIEW_NMAX][9], bool pre, int numNodes=0)
 {
   switch(type){
   case TYPE_PNT: addScalarPoint(p, xyz, val, pre); break;
   case TYPE_LIN: addScalarLine(p, xyz, val, pre); break;
   case TYPE_TRI: addScalarTriangle(p, xyz, val, pre); break;
   case TYPE_QUA: addScalarQuadrangle(p, xyz, val, pre); break;
+  case TYPE_POLYG: addScalarPolygon(p, xyz, val, pre, numNodes); break;
   case TYPE_TET: addScalarTetrahedron(p, xyz, val, pre); break;
   case TYPE_HEX: addScalarHexahedron(p, xyz, val, pre); break;
   case TYPE_PRI: addScalarPrism(p, xyz, val, pre); break;
   case TYPE_PYR: addScalarPyramid(p, xyz, val, pre); break;
+  case TYPE_POLYH: addScalarPolyhedron(p, xyz, val, pre, numNodes); break;
   }
 }
 
@@ -979,7 +1011,7 @@ static void addElementsInArrays(PView *p, bool preprocessNormalsOnly)
 
       for(int j = 0; j < numNodes; j++)
         opt->tmpBBox += SPoint3(xyz[j][0], xyz[j][1], xyz[j][2]);
-      
+
       if(opt->showElement && !data->useGaussPoints()) 
         addOutlineElement(p, type, xyz, preprocessNormalsOnly);
       
@@ -993,7 +1025,7 @@ static void addElementsInArrays(PView *p, bool preprocessNormalsOnly)
             for(int k = 0; k < numComp; k++)
               val2[0][k] = val[j][k];
             if(numComp == 1 && opt->drawScalars)
-              addScalarElement(p, TYPE_PNT, xyz2, val2, preprocessNormalsOnly);
+              addScalarElement(p, TYPE_PNT, xyz2, val2, preprocessNormalsOnly, numNodes);
             else if(numComp == 3 && opt->drawVectors)
               addVectorElement(p, ent, i, 1, TYPE_PNT, xyz2, val2, preprocessNormalsOnly);
             else if(numComp == 9 && opt->drawTensors)
@@ -1001,7 +1033,7 @@ static void addElementsInArrays(PView *p, bool preprocessNormalsOnly)
           }
         }
         else if(numComp == 1 && opt->drawScalars)
-          addScalarElement(p, type, xyz, val, preprocessNormalsOnly);
+          addScalarElement(p, type, xyz, val, preprocessNormalsOnly, numNodes);
         else if(numComp == 3 && opt->drawVectors)
           addVectorElement(p, ent, i, numNodes, type, xyz, val, preprocessNormalsOnly);
         else if(numComp == 9 && opt->drawTensors)