diff --git a/cxxfem/src/femPost.cpp b/cxxfem/src/femPost.cpp
index 4b30ca3576f45249f29f37c76e4402fa18a90ac4..395335a5fdeca8a9f6ad1fb530f1b3c08dcb25e5 100644
--- a/cxxfem/src/femPost.cpp
+++ b/cxxfem/src/femPost.cpp
@@ -399,6 +399,21 @@ Post::probe(std::string const &name, std::string const &grpname)
         // std::cout << "\tgot from gmsh: " << values << '\n';
         // std::cout << "\tdistance = " << distance << std::endl;
 
+        if(values.size() == 9) // tensor -> compute j2
+        {
+            // xx, xy, xz, yx, yy, yz, zx, zy, zz
+            //  0,  1,  2,  3,  4,  5,  6,  7,  8
+            double xx = values[0];
+            double yy = values[4];
+            double zz = values[8];
+            double xy = values[1];
+            double zx = values[6];
+            double yz = values[5];
+            double j2 = sqrt( ((xx-yy)*(xx-yy) + (yy-zz)*(yy-zz) + (zz-xx)*(zz-xx) )/2 + 3*(xy*xy+yz*yz+zx*zx) );
+            values.clear();
+            values.push_back(j2);
+        }
+
         all_values.insert(all_values.end(), values.begin(), values.end());
     }
 
diff --git a/models/Clidastes/Clidastes_propython_50k.py b/models/Clidastes/Clidastes_propython_50k.py
index bfe6ccb0679d1d7b1b502bc35dfd68469a236a83..15b001ff350644da4c176beac54f3f2f362d2c64 100644
--- a/models/Clidastes/Clidastes_propython_50k.py
+++ b/models/Clidastes/Clidastes_propython_50k.py
@@ -7,7 +7,7 @@ def parms(d={}):
     p = {}
     import os
     path = os.path.join(os.path.dirname(__file__),'50k')
-    p['bone'] = f'{path}\Clidastes_50k.ply'
+    p['bone'] = f'{path}/Clidastes_50k.ply'
     p['fixations'] = [
         {
             'name': 'contact_pts',
diff --git a/models/bonemodel.py b/models/bonemodel.py
index a973806c9ad25e7474eb5602b7af8e5a7c314394..6193e0bfdd2e1c53e3fafbff30f5b8817cbc6174 100644
--- a/models/bonemodel.py
+++ b/models/bonemodel.py
@@ -318,6 +318,8 @@ def getMetafor(p={}):
                 valuesmanager.add(idx, IFNodalValueExtractor(target, field), fname)
             else:
                 raise Exception(f'Unknown variable: {var}')
+            # if the target is a single node, display the extractor [TSC-EXT]
+            # otherwise, the user should read the ascii file in the workspace.
             if target.getNumberOfMeshPoints() == 1:
                 metafor.getTestSuiteChecker().checkExtractor(idx)
             idx+=1
diff --git a/models/bonemodel2.py b/models/bonemodel2.py
index 8f2defb64bd7e6e4c773558e386b9a88e9bfdc70..e7397baeabbee1ec005d47ccb884185eea7e387c 100644
--- a/models/bonemodel2.py
+++ b/models/bonemodel2.py
@@ -230,7 +230,8 @@ def solve(p={}):
         'epszz': ('smooth_strain_zz', ''), 
         'epsxy': ('smooth_strain_xy', ''), 
         'epsxz': ('smooth_strain_xz', ''), 
-        'epsyz': ('smooth_strain_yz', '')                          
+        'epsyz': ('smooth_strain_yz', ''),
+        'sigvm': ('smooth_stress_tensor', 'MPa')  # post.probe computes sigvm                  
     }
 
     for extr in p['extractors']:
diff --git a/models/dolicorhynchops/dolicorhynchops_10k.py b/models/dolicorhynchops/dolicorhynchops_10k.py
index 99e195cd8468bc6c925c8192e455e8ed43f569d5..ac51fdfd395f609e750a49fbdee007cac103f447 100644
--- a/models/dolicorhynchops/dolicorhynchops_10k.py
+++ b/models/dolicorhynchops/dolicorhynchops_10k.py
@@ -42,6 +42,18 @@ def parms(d={}):
             'direction': ['x', 'z']
         }
     ]
+    p['extractors'] = [
+        {
+            'name': 'tooth1',
+            'nodes': [-10.20362, -17.46838, -229.9061],
+            'variables': [ 'sigvm' ]
+        },
+        {
+            'name': 'tooth2',
+            'nodes': [-11.92466, 26.3042, -229.5354],
+            'variables': [ 'sigxx', 'sigyy', 'sigzz', 'sigvm' ]
+        }
+    ]
 
     # material properties
     p['density'] = 1.850e-9  # [T/mm³]