diff --git a/src/vplants/cellcomplex/property_topomesh/property_topomesh_visualization/vtk_actor_topomesh.py b/src/vplants/cellcomplex/property_topomesh/property_topomesh_visualization/vtk_actor_topomesh.py
index 04af0b17687f0f2e9db84b4f16f7de90e0130437..7582c57c3fe870c85464b631660e25089446458e 100644
--- a/src/vplants/cellcomplex/property_topomesh/property_topomesh_visualization/vtk_actor_topomesh.py
+++ b/src/vplants/cellcomplex/property_topomesh/property_topomesh_visualization/vtk_actor_topomesh.py
@@ -58,6 +58,7 @@ class VtkActorTopomesh():
         self.glyph_scale = kwargs.get('glyph_scale',1.)
 
         self.polydata = None
+        self.display_polydata = None
         self.actor = None
         self.scalar_mode = None
 
@@ -107,6 +108,9 @@ class VtkActorTopomesh():
     def update_polydata(self):
         logging.info("--> Update polydata (modified="+str(self._modified)+")")
 
+        self.display_polydata = None
+        self._modified = True
+
         if self.degree == 3:
             positions = self.topomesh.wisp_property("barycenter", 0)
             compute_topomesh_property(self.topomesh,"oriented_vertices",2)
@@ -152,6 +156,8 @@ class VtkActorTopomesh():
 
         elif self.degree == 2:
             wisp_ids = numpy_to_vtk(np.array([fid for fid in self.topomesh.wisps(2)]), deep=True, array_type=vtk.VTK_LONG)
+            wisp_ids.SetName("WispId")
+
             positions = self.topomesh.wisp_property("barycenter", 0)
             compute_topomesh_property(self.topomesh,"oriented_vertices",2)
             face_vertices = self.topomesh.wisp_property("oriented_vertices", 2).values()
@@ -168,19 +174,23 @@ class VtkActorTopomesh():
                     positions = self.topomesh.wisp_property("barycenter", 2)
 
                     if property_data.shape[1] == 3 and property_data.shape[2] == 3:
-                        self.polydata = vertex_tensor_property_polydata(positions, property_data, self.polydata, tensor_glyph=self.tensor_glyph,glyph_scale=self.glyph_scale)
+                        self.polydata = vertex_tensor_property_polydata(positions, property_data, self.polydata)
+                        self.polydata.GetPointData().AddArray(wisp_ids)
+                        self.display_polydata = vtk_glyph_polydata(self.polydata, tensor_glyph=self.tensor_glyph, glyph_scale=self.glyph_scale)
                         self.scalar_mode = 'point_data'
 
                 elif property_data.ndim == 2:
                     print("VERTEX VECTOR PROP")
                     compute_topomesh_property(self.topomesh, 'barycenter', 2)
                     positions = self.topomesh.wisp_property("barycenter", 2)
-                    vector_polydata = vertex_vector_property_polydata(positions, property_data, self.polydata, update_polydata=self._modified)
-                    self.polydata = vtk_glyph_polydata(vector_polydata, vector_glyph=self.vector_glyph, glyph_scale=self.glyph_scale)
+                    self.polydata = vertex_vector_property_polydata(positions, property_data, self.polydata, update_polydata=self._modified)
+                    self.polydata.GetPointData().AddArray(wisp_ids)
+                    self.display_polydata = vtk_glyph_polydata(self.polydata, vector_glyph=self.vector_glyph, glyph_scale=self.glyph_scale)
                     self.scalar_mode = 'point_data'
 
                 elif property_data.ndim == 1:
                     self.polydata = face_scalar_property_polydata(positions, face_vertices, property_data, self.polydata, update_polydata=self._modified)
+                    self.polydata.GetCellData().AddArray(wisp_ids)
                     self.scalar_mode = 'cell_data'
             else:
                 if self.topomesh.has_wisp_property(self.property_name,self._property_degree,is_computed=True):
@@ -188,14 +198,10 @@ class VtkActorTopomesh():
 
                     if property_data.ndim == 1:
                         self.polydata = face_scalar_vertex_property_polydata(positions, face_vertices, property_data, self.polydata, update_polydata=self._modified)
+                        self.polydata.GetPointData().AddArray(wisp_ids)
+                        self.display_polydata = vtk_glyph_polydata(self.polydata, vector_glyph=self.vector_glyph, glyph_scale=self.glyph_scale)
                         self.scalar_mode = 'point_data'
 
-            wisp_ids.SetName("WispId")
-            if self.scalar_mode == 'point_data':
-                self.polydata.GetPointData().AddArray(wisp_ids)
-            elif  self.scalar_mode == 'cell_data':
-                self.polydata.GetCellData().AddArray(wisp_ids)
-
         elif self.degree == 1:
             wisp_ids = numpy_to_vtk(np.array([fid for fid in self.topomesh.wisps(1)]), deep=True, array_type=vtk.VTK_LONG)
             positions = self.topomesh.wisp_property("barycenter", 0)
@@ -228,29 +234,29 @@ class VtkActorTopomesh():
 
                 if property_data.ndim == 3:
                     if property_data.shape[1] == 3 and property_data.shape[2] == 3:
-                        tensor_polydata = vertex_tensor_property_polydata(positions, property_data)
+                        self.polydata = vertex_tensor_property_polydata(positions, property_data)
                         self.scalar_mode = 'point_data'
-                        tensor_polydata.GetPointData().AddArray(wisp_ids)
-                        self.polydata = vtk_glyph_polydata(tensor_polydata,tensor_glyph=self.tensor_glyph,glyph_scale=self.glyph_scale)
+                        self.polydata.GetPointData().AddArray(wisp_ids)
+                        self.display_polydata = vtk_glyph_polydata(self.polydata,tensor_glyph=self.tensor_glyph,glyph_scale=self.glyph_scale)
 
                 elif property_data.ndim == 2:
-                    vector_polydata = vertex_vector_property_polydata(positions, property_data)
+                    self.polydata = vertex_vector_property_polydata(positions, property_data)
                     self.scalar_mode = 'point_data'
-                    vector_polydata.GetPointData().AddArray(wisp_ids)
-                    self.polydata = vtk_glyph_polydata(vector_polydata,vector_glyph=self.vector_glyph, glyph_scale=self.glyph_scale)
+                    self.polydata.GetPointData().AddArray(wisp_ids)
+                    self.display_polydata = vtk_glyph_polydata(self.polydata,vector_glyph=self.vector_glyph, glyph_scale=self.glyph_scale)
 
                 elif property_data.ndim == 1:
-                    point_polydata = vertex_scalar_property_polydata(positions, property_data)
+                    self.polydata = vertex_scalar_property_polydata(positions, property_data)
                     self.scalar_mode = 'point_data'
-                    point_polydata.GetPointData().AddArray(wisp_ids)
-                    self.polydata = vtk_glyph_polydata(point_polydata, point_glyph=self.point_glyph, glyph_scale=self.glyph_scale)
+                    self.polydata.GetPointData().AddArray(wisp_ids)
+                    self.display_polydata = vtk_glyph_polydata(self.polydata, point_glyph=self.point_glyph, glyph_scale=self.glyph_scale)
 
             else:
                 property_data = np.ones(self.topomesh.nb_wisps(0))
-                point_polydata = vertex_scalar_property_polydata(positions, property_data)
+                self.polydata = vertex_scalar_property_polydata(positions, property_data)
                 self.scalar_mode = 'point_data'
-                point_polydata.GetPointData().AddArray(wisp_ids)
-                self.polydata = vtk_glyph_polydata(point_polydata, point_glyph=self.point_glyph, glyph_scale=self.glyph_scale)
+                self.polydata.GetPointData().AddArray(wisp_ids)
+                self.display_polydata = vtk_glyph_polydata(self.polydata, point_glyph=self.point_glyph, glyph_scale=self.glyph_scale)
 
 
     def update_actor(self, colormap='viridis', value_range=None, opacity=1):
@@ -277,7 +283,10 @@ class VtkActorTopomesh():
         elif self.scalar_mode == 'point_data':
             mapper.SetScalarModeToUsePointData()
 
-        mapper.SetInputData(self.polydata)
+        if self.display_polydata is not None:
+            mapper.SetInputData(self.display_polydata)
+        else:
+            mapper.SetInputData(self.polydata)
         mapper.SetLookupTable(lut)
 
         if self.actor is None:
diff --git a/src/vplants/cellcomplex/property_topomesh/property_topomesh_visualization/vtk_tools.py b/src/vplants/cellcomplex/property_topomesh/property_topomesh_visualization/vtk_tools.py
index 3bb3f3e3f014c6714bf406ad6702070897848636..2ccc079b9601a2b1e4e25d166175c88c2fe261a5 100644
--- a/src/vplants/cellcomplex/property_topomesh/property_topomesh_visualization/vtk_tools.py
+++ b/src/vplants/cellcomplex/property_topomesh/property_topomesh_visualization/vtk_tools.py
@@ -26,6 +26,8 @@ from vplants.container import array_dict
 from time import time as current_time
 import logging
 
+logging.getLogger().setLevel(logging.INFO)
+
 
 def vtk_lookuptable_from_mpl_cmap(colormap='gray',value_range=(0,1)):
 
@@ -223,7 +225,7 @@ def vtk_tube_polydata(input_polydata, radius=1):
     return vtk_combine_polydatas(line_polydatas)
 
 
-def face_scalar_property_polydata(positions, face_vertex_ids, face_property_data, polydata=None, update_polydata=False):
+def face_scalar_property_polydata(positions, face_vertex_ids, face_property_data, polydata=None, update_polydata=True):
 
     assert face_property_data.ndim == 1
     assert not face_property_data.dtype in ['O']
@@ -236,6 +238,7 @@ def face_scalar_property_polydata(positions, face_vertex_ids, face_property_data
         update_polydata = True
 
     if update_polydata:
+        polydata.Initialize()
         logging.info("--> Face Scalar Polydata : Re-computing polydata...")
         vtk_points = vtk.vtkPoints()
         vtk_faces = vtk.vtkCellArray()
@@ -255,11 +258,13 @@ def face_scalar_property_polydata(positions, face_vertex_ids, face_property_data
         polydata.SetPolys(vtk_faces)
 
     property_double_array  = numpy_to_vtk(face_property_data.astype(float), deep=True, array_type=vtk.VTK_DOUBLE)
+    property_double_array.SetName("Property")
     polydata.GetCellData().SetScalars(property_double_array)
 
     return polydata
 
-def face_scalar_vertex_property_polydata(positions, face_vertex_ids, vertex_property_data, polydata=None, update_polydata=False):
+
+def face_scalar_vertex_property_polydata(positions, face_vertex_ids, vertex_property_data, polydata=None, update_polydata=True):
 
     assert vertex_property_data.ndim == 1
     assert not vertex_property_data.dtype in ['O']
@@ -272,6 +277,7 @@ def face_scalar_vertex_property_polydata(positions, face_vertex_ids, vertex_prop
         update_polydata = True
 
     if update_polydata:
+        polydata.Initialize()
         logging.info("--> Face Scalar Polydata : Re-computing polydata...")
         vtk_points = vtk.vtkPoints()
         vtk_faces = vtk.vtkCellArray()
@@ -291,6 +297,7 @@ def face_scalar_vertex_property_polydata(positions, face_vertex_ids, vertex_prop
 
     property_double_array = numpy_to_vtk(vertex_property_data.astype(float), deep=True, array_type=vtk.VTK_DOUBLE)
     property_double_array.SetNumberOfComponents(1)
+    property_double_array.SetName("Property")
     polydata.GetPointData().SetScalars(property_double_array)
 
     return polydata
@@ -308,6 +315,8 @@ def edge_scalar_property_polydata(positions, edge_vertex_ids, edge_property_data
 
     if polydata is None:
         polydata = vtk.vtkPolyData()
+
+    polydata.Initialize()
     vtk_points = vtk.vtkPoints()
 
     vtk_edges = vtk.vtkCellArray()
@@ -324,6 +333,7 @@ def edge_scalar_property_polydata(positions, edge_vertex_ids, edge_property_data
         for vtk_point_id in vtk_edge_point_ids:
             vtk_edges.InsertCellPoint(vtk_point_id)
         vtk_edge_data.InsertValue(vtk_edge_id, edge_property)
+    vtk_edge_data.SetName("Property")
 
     polydata.SetPoints(vtk_points)
     polydata.SetLines(vtk_edges)
@@ -343,6 +353,8 @@ def vertex_tensor_property_polydata(positions, vertex_property_data, polydata=No
 
     if polydata is None:
         polydata = vtk.vtkPolyData()
+
+    polydata.Initialize()
     vtk_points = vtk.vtkPoints()
 
     double_array = numpy_to_vtk(positions.values(), deep=True, array_type=vtk.VTK_DOUBLE)
@@ -357,7 +369,7 @@ def vertex_tensor_property_polydata(positions, vertex_property_data, polydata=No
     vertex_property_data[property_validity] = np.einsum('ni, nji, nki->njk', eigval,eigvec,eigvec)
 
     vtk_point_data = numpy_to_vtk(vertex_property_data.reshape(len(positions),9), deep=True, array_type=vtk.VTK_DOUBLE)
-
+    vtk_point_data.SetName("Property")
     # for fid, face_property in enumerate(face_property_data):
     #     vtk_point_data.InsertTuple9(fid, *np.ravel(face_property))
 
@@ -367,7 +379,7 @@ def vertex_tensor_property_polydata(positions, vertex_property_data, polydata=No
     return polydata
 
 
-def vertex_vector_property_polydata(positions, vertex_property_data, polydata=None, update_polydata=False):
+def vertex_vector_property_polydata(positions, vertex_property_data, polydata=None, update_polydata=True):
 
     assert vertex_property_data.ndim == 2
     assert len(vertex_property_data) == len(positions)
@@ -376,18 +388,20 @@ def vertex_vector_property_polydata(positions, vertex_property_data, polydata=No
         polydata = vtk.vtkPolyData()
         update_polydata = True
 
+    polydata.Initialize()
     # if update_polydata:
     logging.info("--> Vertex Vector Polydata : Re-computing polydata...")
     vtk_points = vtk.vtkPoints()
-    vtk_faces = vtk.vtkCellArray()
+    # vtk_faces = vtk.vtkCellArray()
 
     double_array = numpy_to_vtk(positions.values(), deep=True, array_type=vtk.VTK_DOUBLE)
     vtk_points.SetData(double_array)
 
     polydata.SetPoints(vtk_points)
-    polydata.SetPolys(vtk_faces)
+    # polydata.SetPolys(vtk_faces)
 
     vtk_point_data = numpy_to_vtk(vertex_property_data.reshape(len(positions), 3), deep=True, array_type=vtk.VTK_DOUBLE)
+    vtk_point_data.SetName("Property")
     polydata.GetPointData().SetVectors(vtk_point_data)
 
     return polydata
@@ -401,6 +415,8 @@ def vertex_scalar_property_polydata(positions, vertex_property_data, polydata=No
 
     if polydata is None:
         polydata = vtk.vtkPolyData()
+
+    polydata.Initialize()
     vtk_points = vtk.vtkPoints()
 
     double_array = numpy_to_vtk(positions.values(), deep=True, array_type=vtk.VTK_DOUBLE)
@@ -408,6 +424,7 @@ def vertex_scalar_property_polydata(positions, vertex_property_data, polydata=No
 
     vtk_point_data = numpy_to_vtk(vertex_property_data, deep=True, array_type=vtk.VTK_DOUBLE)
     vtk_point_data.SetNumberOfComponents(1)
+    vtk_point_data.SetName("Property")
 
     polydata.SetPoints(vtk_points)
     polydata.GetPointData().SetScalars(vtk_point_data)
@@ -489,6 +506,7 @@ def property_topomesh_to_vtk_polydata(topomesh, degree=2, property_name=None, te
 
         return vertex_scalar_property_polydata(positions, property_data)
 
+
 def vtk_actor(polydata, actor=None, colormap='viridis', value_range=None, opacity=1):
     if value_range is None:
         if polydata.GetCellData().GetNumberOfArrays()>0:
@@ -541,6 +559,7 @@ def vtk_scalar_bar_widget(actor, render_window_interactor, scalar_bar_widget=Non
 
     return scalar_bar_widget
 
+
 def vtk_axes_actor(actor, axes_actor=None, font_size=20):
     if axes_actor is None:
         axes = vtk.vtkAxesActor()