diff --git a/cxxfem/src/femSolver.cpp b/cxxfem/src/femSolver.cpp
index 57f33c6e0363a5eb197dc1c84b2992aef9d0ec8d..e2a92ad51be6f047046897d5548e724e7b2858f9 100644
--- a/cxxfem/src/femSolver.cpp
+++ b/cxxfem/src/femSolver.cpp
@@ -67,8 +67,8 @@ void Solver::solve()
 
     create_partition();
     fill_partition();
-    fill_rhs();
     fill_lhs();
+    fill_rhs();
     apply_bc();
     solve_static();
 
@@ -206,11 +206,11 @@ void Solver::fill_partition()
     std::cout << "\telasped = " << timers["fill_partition"].read() << "s\n";
 }
 
-/// fill right-hand side of the system of equations
+/// fill left-hand side of the system of equations
 
-void Solver::fill_rhs()
+void Solver::fill_lhs()
 {
-    timers["fill_rhs"].start();
+    timers["fill_lhs"].start();
 
     std::cout << "assembly of LHS...\n";
 
@@ -527,15 +527,15 @@ void Solver::fill_rhs()
         for (size_t j = 0; j < Kijv[i].size(); ++j)
             delete Kijv[i][j];
 
-    timers["fill_rhs"].stop();
-    std::cout << "\telasped = " << timers["fill_rhs"].read() << "s\n";
+    timers["fill_lhs"].stop();
+    std::cout << "\telasped = " << timers["fill_lhs"].read() << "s\n";
 }
 
 /// compute right-hand side 'f' (sources)
 
-void Solver::fill_lhs()
+void Solver::fill_rhs()
 {
-    timers["fill_lhs"].start();
+    timers["fill_rhs"].start();
 
     std::cout << "assembly of RHS...\n";
 
@@ -627,8 +627,8 @@ void Solver::fill_lhs()
         }
     }
 
-    timers["fill_lhs"].stop();
-    std::cout << "\telasped = " << timers["fill_lhs"].read() << "s\n";
+    timers["fill_rhs"].stop();
+    std::cout << "\telasped = " << timers["fill_rhs"].read() << "s\n";
 
 }
 
diff --git a/models/CLIpro/CLIpro_150k_15_1.py b/models/CLIpro/CLIpro_150k_15_1.py
index 98e634d68a5f4b36bb8c46a0164940bce4bc499b..df3df65f9a46e3a60c8870165a5f5425826074b9 100644
--- a/models/CLIpro/CLIpro_150k_15_1.py
+++ b/models/CLIpro/CLIpro_150k_15_1.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/CLIpro_jaw_150k.stl'
-    p['contact_pts'] = [[-13.654129, -90.974480, 4.162612],
-                [14.185822, -89.850540, 8.610174]]
-    p['axis_pt1'] = [47.751984, 205.253143, 26.247160]
-    p['axis_pt2'] = [-47.122223, 203.473282, 34.349510]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-13.654129, -90.974480, 4.162612],
+                [14.185822, -89.850540, 8.610174]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [47.751984, 205.253143, 26.247160],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-47.122223, 203.473282, 34.349510],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_150k_15_2.py b/models/CLIpro/CLIpro_150k_15_2.py
index d8655914ee5519531a6e9eace7d30e2a5438d507..df3df65f9a46e3a60c8870165a5f5425826074b9 100644
--- a/models/CLIpro/CLIpro_150k_15_2.py
+++ b/models/CLIpro/CLIpro_150k_15_2.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/CLIpro_jaw_150k.stl'
-    p['contact_pts'] = [[-34.115112, 21.823414, 10.233394],
-                [32.383774, 21.721252, 11.580667]]
-    p['axis_pt1'] = [47.751984, 205.253143, 26.247160]
-    p['axis_pt2'] = [-47.122223, 203.473282, 34.349510]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-13.654129, -90.974480, 4.162612],
+                [14.185822, -89.850540, 8.610174]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [47.751984, 205.253143, 26.247160],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-47.122223, 203.473282, 34.349510],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_150k_7_1.py b/models/CLIpro/CLIpro_150k_7_1.py
index 8445ecb0e0d6f2dda77c446da31ec2f62a8beae9..56e4aa44ebd4dd98633216e0c9a70b35cb230096 100644
--- a/models/CLIpro/CLIpro_150k_7_1.py
+++ b/models/CLIpro/CLIpro_150k_7_1.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/CLIpro_jaw_150k.stl'
-    p['contact_pts'] = [[-13.654129, -90.974480, 4.162612],
-                [14.185822, -89.850540, 8.610174]]
-    p['axis_pt1'] = [47.751984, 205.253143, 26.247160]
-    p['axis_pt2'] = [-47.122223, 203.473282, 34.349510]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-13.654129, -90.974480, 4.162612],
+                [14.185822, -89.850540, 8.610174]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [47.751984, 205.253143, 26.247160],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-47.122223, 203.473282, 34.349510],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_150k_7_2.py b/models/CLIpro/CLIpro_150k_7_2.py
index 8b3ce0420f225c20bf56d825ef881fb3f5db5e8b..56e4aa44ebd4dd98633216e0c9a70b35cb230096 100644
--- a/models/CLIpro/CLIpro_150k_7_2.py
+++ b/models/CLIpro/CLIpro_150k_7_2.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/CLIpro_jaw_150k.stl'
-    p['contact_pts'] = [[-34.115112, 21.823414, 10.233394],
-                [32.383774, 21.721252, 11.580667]]
-    p['axis_pt1'] = [47.751984, 205.253143, 26.247160]
-    p['axis_pt2'] = [-47.122223, 203.473282, 34.349510]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-13.654129, -90.974480, 4.162612],
+                [14.185822, -89.850540, 8.610174]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [47.751984, 205.253143, 26.247160],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-47.122223, 203.473282, 34.349510],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_250k_15_1.py b/models/CLIpro/CLIpro_250k_15_1.py
index 9246f0d84bab0a4e9c14cb6659ff72f27bc2453a..6a41ec4734a5a37b36aede01b162f60c682db10f 100644
--- a/models/CLIpro/CLIpro_250k_15_1.py
+++ b/models/CLIpro/CLIpro_250k_15_1.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/CLIpro_jaw_250k.stl'
-    p['contact_pts'] = [[-13.921872, -90.258591, 8.862718],
-                [13.158182, -91.377449, 7.355043]]
-    p['axis_pt1'] = [47.686401, 205.691238, 26.261269]
-    p['axis_pt2'] = [-50.710445, 204.954971, 26.360205]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-13.921872, -90.258591, 8.862718],
+                [13.158182, -91.377449, 7.355043]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [47.686401, 205.691238, 26.261269],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-50.710445, 204.954971, 26.360205],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_250k_15_2.py b/models/CLIpro/CLIpro_250k_15_2.py
index 2fabdddbcfa0a23782194f974358533ae0c6d5b1..6a41ec4734a5a37b36aede01b162f60c682db10f 100644
--- a/models/CLIpro/CLIpro_250k_15_2.py
+++ b/models/CLIpro/CLIpro_250k_15_2.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/CLIpro_jaw_250k.stl'
-    p['contact_pts'] = [[-34.058887, 21.742476, 9.846808],
-                [33.013206, 24.755995, -0.564457]]
-    p['axis_pt1'] = [47.686401, 205.691238, 26.261269]
-    p['axis_pt2'] = [-50.710445, 204.954971, 26.360205]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-13.921872, -90.258591, 8.862718],
+                [13.158182, -91.377449, 7.355043]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [47.686401, 205.691238, 26.261269],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-50.710445, 204.954971, 26.360205],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_250k_7_1.py b/models/CLIpro/CLIpro_250k_7_1.py
index a3089b7520bf18809e6c3622f99b947a74c88ef5..68066068aea85e779c73e4e660b80c23e2e5e563 100644
--- a/models/CLIpro/CLIpro_250k_7_1.py
+++ b/models/CLIpro/CLIpro_250k_7_1.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/CLIpro_jaw_250k.stl'
-    p['contact_pts'] = [[-13.921872, -90.258591, 8.862718],
-                [13.158182, -91.377449, 7.355043]]
-    p['axis_pt1'] = [47.686401, 205.691238, 26.261269]
-    p['axis_pt2'] = [-50.710445, 204.954971, 26.360205]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-13.921872, -90.258591, 8.862718],
+                [13.158182, -91.377449, 7.355043]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [47.686401, 205.691238, 26.261269],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-50.710445, 204.954971, 26.360205],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_250k_7_2.py b/models/CLIpro/CLIpro_250k_7_2.py
index ab25a9e4eba52c732e862ce71fdc8a78882bed66..68066068aea85e779c73e4e660b80c23e2e5e563 100644
--- a/models/CLIpro/CLIpro_250k_7_2.py
+++ b/models/CLIpro/CLIpro_250k_7_2.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/CLIpro_jaw_250k.stl'
-    p['contact_pts'] = [[-34.058887, 21.742476, 9.846808],
-                [33.013206, 24.755995, -0.564457]]
-    p['axis_pt1'] = [47.686401, 205.691238, 26.261269]
-    p['axis_pt2'] = [-50.710445, 204.954971, 26.360205]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-13.921872, -90.258591, 8.862718],
+                [13.158182, -91.377449, 7.355043]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [47.686401, 205.691238, 26.261269],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-50.710445, 204.954971, 26.360205],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_500k_15_1.py b/models/CLIpro/CLIpro_500k_15_1.py
index 135b4aae64a86067e0cb74fd479d590dbd9147f3..2ec33bfe7b74a5f10a3e57c4fcd9f7656ddcd345 100644
--- a/models/CLIpro/CLIpro_500k_15_1.py
+++ b/models/CLIpro/CLIpro_500k_15_1.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/CLIpro_jaw_500k.stl'
-    p['contact_pts'] = [[-12.880455, -92.642342, -0.673375],
-                [12.990344, -91.013168, 7.432779]]
-    p['axis_pt1'] = [45.043976, 199.899857, 33.671288]
-    p['axis_pt2'] = [-50.729774, 205.098663, 26.440434]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-12.880455, -92.642342, -0.673375],
+                [12.990344, -91.013168, 7.432779]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [45.043976, 199.899857, 33.671288],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-50.729774, 205.098663, 26.440434],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_500k_15_2.py b/models/CLIpro/CLIpro_500k_15_2.py
index 7bd6137498da24b282fa2f49ca71a939bac9dc99..2ec33bfe7b74a5f10a3e57c4fcd9f7656ddcd345 100644
--- a/models/CLIpro/CLIpro_500k_15_2.py
+++ b/models/CLIpro/CLIpro_500k_15_2.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/CLIpro_jaw_500k.stl'
-    p['contact_pts'] = [[-33.575844, 26.282110, -0.445806],
-                [32.137966, 22.818340, 7.904116]]
-    p['axis_pt1'] = [45.043976, 199.899857, 33.671288]
-    p['axis_pt2'] = [-50.729774, 205.098663, 26.440434]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-12.880455, -92.642342, -0.673375],
+                [12.990344, -91.013168, 7.432779]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [45.043976, 199.899857, 33.671288],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-50.729774, 205.098663, 26.440434],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_500k_7_1.py b/models/CLIpro/CLIpro_500k_7_1.py
index 0acbf7b4745ed7da1f58c004166eb0a42500dd82..620f605099b08bc8e9f451ff968c0c680fc691e3 100644
--- a/models/CLIpro/CLIpro_500k_7_1.py
+++ b/models/CLIpro/CLIpro_500k_7_1.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/CLIpro_jaw_500k.stl'
-    p['contact_pts'] = [[-12.880455, -92.642342, -0.673375],
-                [12.990344, -91.013168, 7.432779]]
-    p['axis_pt1'] = [45.043976, 199.899857, 33.671288]
-    p['axis_pt2'] = [-50.729774, 205.098663, 26.440434]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-12.880455, -92.642342, -0.673375],
+                [12.990344, -91.013168, 7.432779]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [45.043976, 199.899857, 33.671288],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-50.729774, 205.098663, 26.440434],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_500k_7_2.py b/models/CLIpro/CLIpro_500k_7_2.py
index dfa226d992c3b8a352e54217c74938ed3eff4932..620f605099b08bc8e9f451ff968c0c680fc691e3 100644
--- a/models/CLIpro/CLIpro_500k_7_2.py
+++ b/models/CLIpro/CLIpro_500k_7_2.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/CLIpro_jaw_500k.stl'
-    p['contact_pts'] = [[-33.575844, 26.282110, -0.445806],
-                [32.137966, 22.818340, 7.904116]]
-    p['axis_pt1'] = [45.043976, 199.899857, 33.671288]
-    p['axis_pt2'] = [-50.729774, 205.098663, 26.440434]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-12.880455, -92.642342, -0.673375],
+                [12.990344, -91.013168, 7.432779]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [45.043976, 199.899857, 33.671288],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-50.729774, 205.098663, 26.440434],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_750k_15_1.py b/models/CLIpro/CLIpro_750k_15_1.py
index b175d08ef048d5ce0cfc86ebba5a8e9999cc9553..11553ce4e30ee2553471228e2457df7795cb4df4 100644
--- a/models/CLIpro/CLIpro_750k_15_1.py
+++ b/models/CLIpro/CLIpro_750k_15_1.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/CLIpro_jaw_750k.stl'
-    p['contact_pts'] = [[-14.743377, -90.163612, 9.011174],
-                [13.049115, -90.677956, 7.640814]]
-    p['axis_pt1'] = [46.317547, 203.956772, 35.086609]
-    p['axis_pt2'] = [-50.729774, 205.098663, 26.440434]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-14.743377, -90.163612, 9.011174],
+                [13.049115, -90.677956, 7.640814]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [46.317547, 203.956772, 35.086609],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-50.729774, 205.098663, 26.440434],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_750k_15_2.py b/models/CLIpro/CLIpro_750k_15_2.py
index c3dfdb47faa6161523255df64ba86ca503e296c2..11553ce4e30ee2553471228e2457df7795cb4df4 100644
--- a/models/CLIpro/CLIpro_750k_15_2.py
+++ b/models/CLIpro/CLIpro_750k_15_2.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/CLIpro_jaw_750k.stl'
-    p['contact_pts'] = [[-34.126896, 21.475969, 10.220996],
-                [32.139095, 22.748108, 8.446575]]
-    p['axis_pt1'] = [46.317547, 203.956772, 35.086609]
-    p['axis_pt2'] = [-50.729774, 205.098663, 26.440434]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-14.743377, -90.163612, 9.011174],
+                [13.049115, -90.677956, 7.640814]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [46.317547, 203.956772, 35.086609],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-50.729774, 205.098663, 26.440434],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_750k_7_1.py b/models/CLIpro/CLIpro_750k_7_1.py
index 0708d756eea5506633caf0bcfadd913692bbe277..f5a78c6a859831266737cfc60768a544fb18519d 100644
--- a/models/CLIpro/CLIpro_750k_7_1.py
+++ b/models/CLIpro/CLIpro_750k_7_1.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/CLIpro_jaw_750k.stl'
-    p['contact_pts'] = [[-14.743377, -90.163612, 9.011174],
-                [13.049115, -90.677956, 7.640814]]
-    p['axis_pt1'] = [46.317547, 203.956772, 35.086609]
-    p['axis_pt2'] = [-50.729774, 205.098663, 26.440434]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-14.743377, -90.163612, 9.011174],
+                [13.049115, -90.677956, 7.640814]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [46.317547, 203.956772, 35.086609],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-50.729774, 205.098663, 26.440434],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/CLIpro/CLIpro_750k_7_2.py b/models/CLIpro/CLIpro_750k_7_2.py
index 006d0a59797385207b368a517a9248b38d91ccc9..f5a78c6a859831266737cfc60768a544fb18519d 100644
--- a/models/CLIpro/CLIpro_750k_7_2.py
+++ b/models/CLIpro/CLIpro_750k_7_2.py
@@ -9,10 +9,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/CLIpro_jaw_750k.stl'
-    p['contact_pts'] = [[-34.126896, 21.475969, 10.220996],
-                [32.139095, 22.748108, 8.446575]]
-    p['axis_pt1'] = [46.317547, 203.956772, 35.086609]
-    p['axis_pt2'] = [-50.729774, 205.098663, 26.440434]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-14.743377, -90.163612, 9.011174],
+                [13.049115, -90.677956, 7.640814]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [46.317547, 203.956772, 35.086609],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-50.729774, 205.098663, 26.440434],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -87,11 +101,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_150k_15_1.py b/models/Dolico_bon/Dolico_bon_150k_15_1.py
index 3a238034aecb061f40417a4e4230db55466207b0..9f5b0a9b9f746443627ad0b1c9a401b2d8877cdb 100644
--- a/models/Dolico_bon/Dolico_bon_150k_15_1.py
+++ b/models/Dolico_bon/Dolico_bon_150k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/Dolico_bon_150k.stl'
-    p['contact_pts'] = [[4.212819, -267.574554, 28.792574],
-                [36.007748, -269.322662, 27.255693]]
-    p['axis_pt1'] = [162.458069, 598.625000, -20.051981]
-    p['axis_pt2'] = [-145.469955, 585.402344, 11.398635]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[4.212819, -267.574554, 28.792574],
+                [36.007748, -269.322662, 27.255693]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [162.458069, 598.625000, -20.051981],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-145.469955, 585.402344, 11.398635],
+            'direction': ['x', 'y', 'z']
+        }
+    ] 
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_150k_15_2.py b/models/Dolico_bon/Dolico_bon_150k_15_2.py
index 8f47b82d016048f10206d75d6d838c86d2a5f1be..1577114b61d5bec8dc43a9e957592d8e470e6930 100644
--- a/models/Dolico_bon/Dolico_bon_150k_15_2.py
+++ b/models/Dolico_bon/Dolico_bon_150k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/Dolico_bon_150k.stl'
-    p['contact_pts'] = [[-14.645494, 62.509026, 23.022108],
-                [44.984268, 67.347466, -2.159538]]
-    p['axis_pt1'] = [162.458069, 598.625000, -20.051981]
-    p['axis_pt2'] = [-145.469955, 585.402344, 11.398635]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-14.645494, 62.509026, 23.022108],
+                [44.984268, 67.347466, -2.159538]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [162.458069, 598.625000, -20.051981],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-145.469955, 585.402344, 11.398635],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_150k_7_1.py b/models/Dolico_bon/Dolico_bon_150k_7_1.py
index 6ac47c9704d32a06f1e88fd5b6d816feab891967..72b546a455efac656041621b609ed002561c819c 100644
--- a/models/Dolico_bon/Dolico_bon_150k_7_1.py
+++ b/models/Dolico_bon/Dolico_bon_150k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/Dolico_bon_150k.stl'
-    p['contact_pts'] = [[4.212819, -267.574554, 28.792574],
-                [36.007748, -269.322662, 27.255693]]
-    p['axis_pt1'] = [162.458069, 598.625000, -20.051981]
-    p['axis_pt2'] = [-145.469955, 585.402344, 11.398635]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[4.212819, -267.574554, 28.792574],
+                [36.007748, -269.322662, 27.255693]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [162.458069, 598.625000, -20.051981],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-145.469955, 585.402344, 11.398635],
+            'direction': ['x', 'y', 'z']
+        }
+    ]   
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_150k_7_2.py b/models/Dolico_bon/Dolico_bon_150k_7_2.py
index 150f5d963b1c962821b76981ce81bb261decd918..707c7f771bb3219c79f856f76fe8f1f02e5e29b1 100644
--- a/models/Dolico_bon/Dolico_bon_150k_7_2.py
+++ b/models/Dolico_bon/Dolico_bon_150k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/Dolico_bon_150k.stl'
-    p['contact_pts'] = [[-14.645494, 62.509026, 23.022108],
-                [44.984268, 67.347466, -2.159538]]
-    p['axis_pt1'] = [162.458069, 598.625000, -20.051981]
-    p['axis_pt2'] = [-145.469955, 585.402344, 11.398635]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-14.645494, 62.509026, 23.022108],
+                [44.984268, 67.347466, -2.159538]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [162.458069, 598.625000, -20.051981],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-145.469955, 585.402344, 11.398635],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_250k_15_1.py b/models/Dolico_bon/Dolico_bon_250k_15_1.py
index bcce403f074910a8ce92780a44f0e8146ce20385..de09747537137f34d19230717ba644a364131a64 100644
--- a/models/Dolico_bon/Dolico_bon_250k_15_1.py
+++ b/models/Dolico_bon/Dolico_bon_250k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/Dolico_bon_250k.stl'
-    p['contact_pts'] = [[4.212819, -267.574554, 28.792574],
-                [36.279472, -269.853271, 26.685869]]
-    p['axis_pt1'] = [168.908783, 603.534424, -17.702827]
-    p['axis_pt2'] = [-147.934631, 590.528931, 14.065274]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[4.212819, -267.574554, 28.792574],
+                [36.279472, -269.853271, 26.685869]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [168.908783, 603.534424, -17.702827],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-147.934631, 590.528931, 14.065274],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_250k_15_2.py b/models/Dolico_bon/Dolico_bon_250k_15_2.py
index c7528d53dfe5a14b74727ab25679a01687e50e11..de09747537137f34d19230717ba644a364131a64 100644
--- a/models/Dolico_bon/Dolico_bon_250k_15_2.py
+++ b/models/Dolico_bon/Dolico_bon_250k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/Dolico_bon_250k.stl'
-    p['contact_pts'] = [[-10.472356, 31.800030, -3.685302],
-                [50.958504, 38.902874, -5.352512]]
-    p['axis_pt1'] = [168.908783, 603.534424, -17.702827]
-    p['axis_pt2'] = [-147.934631, 590.528931, 14.065274]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[4.212819, -267.574554, 28.792574],
+                [36.279472, -269.853271, 26.685869]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [168.908783, 603.534424, -17.702827],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-147.934631, 590.528931, 14.065274],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_250k_7_1.py b/models/Dolico_bon/Dolico_bon_250k_7_1.py
index d5e4ab899f8f502619e54543d6df141ebe685420..3cc553364e45e6d7ed6a27c1bc003489835d9c7b 100644
--- a/models/Dolico_bon/Dolico_bon_250k_7_1.py
+++ b/models/Dolico_bon/Dolico_bon_250k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/Dolico_bon_250k.stl'
-    p['contact_pts'] = [[4.212819, -267.574554, 28.792574],
-                [36.279472, -269.853271, 26.685869]]
-    p['axis_pt1'] = [168.908783, 603.534424, -17.702827]
-    p['axis_pt2'] = [-147.934631, 590.528931, 14.065274]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[4.212819, -267.574554, 28.792574],
+                [36.279472, -269.853271, 26.685869]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [168.908783, 603.534424, -17.702827],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-147.934631, 590.528931, 14.065274],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
diff --git a/models/Dolico_bon/Dolico_bon_250k_7_2.py b/models/Dolico_bon/Dolico_bon_250k_7_2.py
index 0725381a70707d9cbdf2099772240dbdea105ede..7706c77c50f7378936d377ffe3bdc09aa0436624 100644
--- a/models/Dolico_bon/Dolico_bon_250k_7_2.py
+++ b/models/Dolico_bon/Dolico_bon_250k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/Dolico_bon_250k.stl'
-    p['contact_pts'] = [[-10.472356, 31.800030, -3.685302],
-                [50.958504, 38.902874, -5.352512]]
-    p['axis_pt1'] = [168.908783, 603.534424, -17.702827]
-    p['axis_pt2'] = [-147.934631, 590.528931, 14.065274]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[4.212819, -267.574554, 28.792574],
+                [36.279472, -269.853271, 26.685869]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [168.908783, 603.534424, -17.702827],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-147.934631, 590.528931, 14.065274],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_500k_15_1.py b/models/Dolico_bon/Dolico_bon_500k_15_1.py
index d505ce3ccf0f019220bbb5e8c556c3b48ee11998..8cd0ed8afa6003666bc7da28f237cf5adcff1fc8 100644
--- a/models/Dolico_bon/Dolico_bon_500k_15_1.py
+++ b/models/Dolico_bon/Dolico_bon_500k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/Dolico_bon_500k.stl'
-    p['contact_pts'] = [[4.858893, -266.720367, 28.316463],
-                [36.279472, -269.853271, 26.685869]]
-    p['axis_pt1'] = [164.323242, 605.580627, -20.302845]
-    p['axis_pt2'] = [-161.191025, 604.899658, -17.039200]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[4.858893, -266.720367, 28.316463],
+                [36.279472, -269.853271, 26.685869]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [164.323242, 605.580627, -20.302845],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-161.191025, 604.899658, -17.039200],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_500k_15_2.py b/models/Dolico_bon/Dolico_bon_500k_15_2.py
index 7ea291ca589b20d15b034f0808d63dc1c5d9763a..8cd0ed8afa6003666bc7da28f237cf5adcff1fc8 100644
--- a/models/Dolico_bon/Dolico_bon_500k_15_2.py
+++ b/models/Dolico_bon/Dolico_bon_500k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/Dolico_bon_500k.stl'
-    p['contact_pts'] = [[-16.827028, 42.577381, -1.938522],
-                [44.807407, 48.136395, -0.112404]]
-    p['axis_pt1'] = [164.323242, 605.580627, -20.302845]
-    p['axis_pt2'] = [-161.191025, 604.899658, -17.039200]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[4.858893, -266.720367, 28.316463],
+                [36.279472, -269.853271, 26.685869]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [164.323242, 605.580627, -20.302845],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-161.191025, 604.899658, -17.039200],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_500k_7_1.py b/models/Dolico_bon/Dolico_bon_500k_7_1.py
index 8019cbe3413b0b24b8a1a1dc2bf0b38f9266e1e7..8f21f7dfaf581f40506187089edffd62ff8cf6ff 100644
--- a/models/Dolico_bon/Dolico_bon_500k_7_1.py
+++ b/models/Dolico_bon/Dolico_bon_500k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/Dolico_bon_500k.stl'
-    p['contact_pts'] = [[4.858893, -266.720367, 28.316463],
-                [36.279472, -269.853271, 26.685869]]
-    p['axis_pt1'] = [164.323242, 605.580627, -20.302845]
-    p['axis_pt2'] = [-161.191025, 604.899658, -17.039200]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[4.858893, -266.720367, 28.316463],
+                [36.279472, -269.853271, 26.685869]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [164.323242, 605.580627, -20.302845],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-161.191025, 604.899658, -17.039200],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_500k_7_2.py b/models/Dolico_bon/Dolico_bon_500k_7_2.py
index bba38c982a1be78fd0f3b33e8a098bdde7d2ef85..8f21f7dfaf581f40506187089edffd62ff8cf6ff 100644
--- a/models/Dolico_bon/Dolico_bon_500k_7_2.py
+++ b/models/Dolico_bon/Dolico_bon_500k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/Dolico_bon_500k.stl'
-    p['contact_pts'] = [[-16.827028, 42.577381, -1.938522],
-                [44.807407, 48.136395, -0.112404]]
-    p['axis_pt1'] = [164.323242, 605.580627, -20.302845]
-    p['axis_pt2'] = [-161.191025, 604.899658, -17.039200]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[4.858893, -266.720367, 28.316463],
+                [36.279472, -269.853271, 26.685869]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [164.323242, 605.580627, -20.302845],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-161.191025, 604.899658, -17.039200],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_750k_15_1.py b/models/Dolico_bon/Dolico_bon_750k_15_1.py
index 88abe9a8d3b94bab879f619acd574d83f670b5d7..da3b26ab1c261f4faab429e6ff61bf7935e2b41d 100644
--- a/models/Dolico_bon/Dolico_bon_750k_15_1.py
+++ b/models/Dolico_bon/Dolico_bon_750k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/Dolico_bon_750k.stl'
-    p['contact_pts'] = [[5.189603, -266.977203, 28.278206],
-                [36.279472, -269.853271, 26.685869]]
-    p['axis_pt1'] = [163.730804, 595.499817, -20.042530]
-    p['axis_pt2'] = [-149.361832, 584.256775, 14.424056]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[5.189603, -266.977203, 28.278206],
+                [36.279472, -269.853271, 26.685869]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [163.730804, 595.499817, -20.042530],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-149.361832, 584.256775, 14.424056],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_750k_15_2.py b/models/Dolico_bon/Dolico_bon_750k_15_2.py
index c306743a02287f4f8f62a82fbbddb7d9610cf6ca..da3b26ab1c261f4faab429e6ff61bf7935e2b41d 100644
--- a/models/Dolico_bon/Dolico_bon_750k_15_2.py
+++ b/models/Dolico_bon/Dolico_bon_750k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/Dolico_bon_750k.stl'
-    p['contact_pts'] = [[-18.989965, 40.841747, -1.935307],
-                [34.655277, 41.826595, -7.642198]]
-    p['axis_pt1'] = [163.730804, 595.499817, -20.042530]
-    p['axis_pt2'] = [-149.361832, 584.256775, 14.424056]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[5.189603, -266.977203, 28.278206],
+                [36.279472, -269.853271, 26.685869]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [163.730804, 595.499817, -20.042530],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-149.361832, 584.256775, 14.424056],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_750k_7_1.py b/models/Dolico_bon/Dolico_bon_750k_7_1.py
index f7ff3ec3e3ded7f450b9e99ecf9731a812dbbf02..cc2296dce965cccc5c7199fe31d07c5687aea3e3 100644
--- a/models/Dolico_bon/Dolico_bon_750k_7_1.py
+++ b/models/Dolico_bon/Dolico_bon_750k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/Dolico_bon_750k.stl'
-    p['contact_pts'] = [[5.189603, -266.977203, 28.278206],
-                [36.279472, -269.853271, 26.685869]]
-    p['axis_pt1'] = [163.730804, 595.499817, -20.042530]
-    p['axis_pt2'] = [-149.361832, 584.256775, 14.424056]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[5.189603, -266.977203, 28.278206],
+                [36.279472, -269.853271, 26.685869]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [163.730804, 595.499817, -20.042530],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-149.361832, 584.256775, 14.424056],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_bon/Dolico_bon_750k_7_2.py b/models/Dolico_bon/Dolico_bon_750k_7_2.py
index 4f2fb0dbfb88a9fc369d4cc88d1dd7c2ae40a675..cc2296dce965cccc5c7199fe31d07c5687aea3e3 100644
--- a/models/Dolico_bon/Dolico_bon_750k_7_2.py
+++ b/models/Dolico_bon/Dolico_bon_750k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/Dolico_bon_750k.stl'
-    p['contact_pts'] = [[-18.989965, 40.841747, -1.935307],
-                [34.655277, 41.826595, -7.642198]]
-    p['axis_pt1'] = [163.730804, 595.499817, -20.042530]
-    p['axis_pt2'] = [-149.361832, 584.256775, 14.424056]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[5.189603, -266.977203, 28.278206],
+                [36.279472, -269.853271, 26.685869]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [163.730804, 595.499817, -20.042530],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-149.361832, 584.256775, 14.424056],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_150k_15_1.py b/models/Dolico_osb/Dolico_osb_150k_15_1.py
index b7321bc51e4fbd7bc03fb846c1e4a694336d1276..76ea3e2c6c1c9a54b2366b33acc679d50179cf69 100644
--- a/models/Dolico_osb/Dolico_osb_150k_15_1.py
+++ b/models/Dolico_osb/Dolico_osb_150k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/Dolico_osb_150k.stl'
-    p['contact_pts'] = [[70.939697, -369.730804, 305.997803],
-                [72.499474, -367.223450, 278.139832]]
-    p['axis_pt1'] = [39.231628, 126.756012, 209.439102]
-    p['axis_pt2'] = [40.221886, 126.551155, 385.009644]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[70.939697, -369.730804, 305.997803],
+                [72.499474, -367.223450, 278.139832]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [39.231628, 126.756012, 209.439102],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [40.221886, 126.551155, 385.009644],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_150k_15_2.py b/models/Dolico_osb/Dolico_osb_150k_15_2.py
index 30ac1f2900e69133ff13eebe369f573ffce007b0..76ea3e2c6c1c9a54b2366b33acc679d50179cf69 100644
--- a/models/Dolico_osb/Dolico_osb_150k_15_2.py
+++ b/models/Dolico_osb/Dolico_osb_150k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/Dolico_osb_150k.stl'
-    p['contact_pts'] = [[52.009193, -201.873154, 307.677521],
-                [64.623055, -199.101791, 282.517853]]
-    p['axis_pt1'] = [39.231628, 126.756012, 209.439102]
-    p['axis_pt2'] = [40.221886, 126.551155, 385.009644]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[70.939697, -369.730804, 305.997803],
+                [72.499474, -367.223450, 278.139832]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [39.231628, 126.756012, 209.439102],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [40.221886, 126.551155, 385.009644],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_150k_7_1.py b/models/Dolico_osb/Dolico_osb_150k_7_1.py
index ce7ece3bb5a77295d2ebe4fd07002f0aaea7a2b8..57d34e727fc272ccf01cc6a640231d149a37d589 100644
--- a/models/Dolico_osb/Dolico_osb_150k_7_1.py
+++ b/models/Dolico_osb/Dolico_osb_150k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/Dolico_osb_150k.stl'
-    p['contact_pts'] = [[70.939697, -369.730804, 305.997803],
-                [72.499474, -367.223450, 278.139832]]
-    p['axis_pt1'] = [39.231628, 126.756012, 209.439102]
-    p['axis_pt2'] = [40.221886, 126.551155, 385.009644]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[70.939697, -369.730804, 305.997803],
+                [72.499474, -367.223450, 278.139832]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [39.231628, 126.756012, 209.439102],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [40.221886, 126.551155, 385.009644],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_150k_7_2.py b/models/Dolico_osb/Dolico_osb_150k_7_2.py
index fe8001d7ee627884b1dd0484de74af01352bf1a1..57d34e727fc272ccf01cc6a640231d149a37d589 100644
--- a/models/Dolico_osb/Dolico_osb_150k_7_2.py
+++ b/models/Dolico_osb/Dolico_osb_150k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/Dolico_osb_150k.stl'
-    p['contact_pts'] = [[52.009193, -201.873154, 307.677521],
-                [64.623055, -199.101791, 282.517853]]
-    p['axis_pt1'] = [39.231628, 126.756012, 209.439102]
-    p['axis_pt2'] = [40.221886, 126.551155, 385.009644]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[70.939697, -369.730804, 305.997803],
+                [72.499474, -367.223450, 278.139832]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [39.231628, 126.756012, 209.439102],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [40.221886, 126.551155, 385.009644],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_250k_15_1.py b/models/Dolico_osb/Dolico_osb_250k_15_1.py
index 9e282145bccca739931890c274d6c150973b8690..399ccbfaf216eeb38f73f87b101a44979d82de35 100644
--- a/models/Dolico_osb/Dolico_osb_250k_15_1.py
+++ b/models/Dolico_osb/Dolico_osb_250k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/Dolico_osb_250k.stl'
-    p['contact_pts'] = [[71.647064, -367.307281, 303.918365],
-                [71.428085, -366.684906, 278.119751]]
-    p['axis_pt1'] = [25.142067, 117.287262, 198.309219]
-    p['axis_pt2'] = [32.822464, 115.721962, 395.664978]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[71.647064, -367.307281, 303.918365],
+                [71.428085, -366.684906, 278.119751]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [25.142067, 117.287262, 198.309219],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [32.822464, 115.721962, 395.664978],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_250k_15_2.py b/models/Dolico_osb/Dolico_osb_250k_15_2.py
index 5aa17c669468e67abbad9c04ad0b0f986a39e3bb..399ccbfaf216eeb38f73f87b101a44979d82de35 100644
--- a/models/Dolico_osb/Dolico_osb_250k_15_2.py
+++ b/models/Dolico_osb/Dolico_osb_250k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/Dolico_osb_250k.stl'
-    p['contact_pts'] = [[58.887959, -197.486603, 305.862701],
-                [64.476349, -199.363113, 282.813385]]
-    p['axis_pt1'] = [25.142067, 117.287262, 198.309219]
-    p['axis_pt2'] = [32.822464, 115.721962, 395.664978]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[71.647064, -367.307281, 303.918365],
+                [71.428085, -366.684906, 278.119751]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [25.142067, 117.287262, 198.309219],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [32.822464, 115.721962, 395.664978],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_250k_7_1.py b/models/Dolico_osb/Dolico_osb_250k_7_1.py
index 863e8ed246e13713188d8cb3e70c95b4fe245197..f39c5f24516476957a0924ea25c5813e9b0d3e33 100644
--- a/models/Dolico_osb/Dolico_osb_250k_7_1.py
+++ b/models/Dolico_osb/Dolico_osb_250k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/Dolico_osb_250k.stl'
-    p['contact_pts'] = [[71.647064, -367.307281, 303.918365],
-                [71.428085, -366.684906, 278.119751]]
-    p['axis_pt1'] = [25.142067, 117.287262, 198.309219]
-    p['axis_pt2'] = [32.822464, 115.721962, 395.664978]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[71.647064, -367.307281, 303.918365],
+                [71.428085, -366.684906, 278.119751]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [25.142067, 117.287262, 198.309219],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [32.822464, 115.721962, 395.664978],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_250k_7_2.py b/models/Dolico_osb/Dolico_osb_250k_7_2.py
index 3cc552a104fd12c2d746dfa6041cd8d1d75857ff..1ad4d477dbbbedb5a85bb4e356e4dc10e9a52a9f 100644
--- a/models/Dolico_osb/Dolico_osb_250k_7_2.py
+++ b/models/Dolico_osb/Dolico_osb_250k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/Dolico_osb_250k.stl'
-    p['contact_pts'] = [[58.887959, -197.486603, 305.862701],
-                [64.476349, -199.363113, 282.813385]]
-    p['axis_pt1'] = [25.142067, 117.287262, 198.309219]
-    p['axis_pt2'] = [32.822464, 115.721962, 395.664978]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[71.647064, -367.307281, 303.918365],
+                [71.428085, -366.684906, 278.119751]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [25.142067, 117.287262, 198.309219],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [32.822464, 115.721962, 395.664978],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_500k_15_1.py b/models/Dolico_osb/Dolico_osb_500k_15_1.py
index 3c2136ea773bfcd3e73edff03e4e66cfc1340dc2..6b234ebfb1e8f83b450455497b3e6acce5415e07 100644
--- a/models/Dolico_osb/Dolico_osb_500k_15_1.py
+++ b/models/Dolico_osb/Dolico_osb_500k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/Dolico_osb_500k.stl'
-    p['contact_pts'] = [[72.492805, -367.768738, 304.363922],
-                [72.060631, -366.996246, 278.112061]]
-    p['axis_pt1'] = [27.536142, 119.829124, 198.032684]
-    p['axis_pt2'] = [27.802645, 116.500870, 394.464966]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[72.492805, -367.768738, 304.363922],
+                [72.060631, -366.996246, 278.112061]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [27.536142, 119.829124, 198.032684],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [27.802645, 116.500870, 394.464966],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_500k_15_2.py b/models/Dolico_osb/Dolico_osb_500k_15_2.py
index b04f0a9cda27309fe7c68f0b5f09af69b3f37216..97762336971bc244c8126ffb8f5b46345995fbbc 100644
--- a/models/Dolico_osb/Dolico_osb_500k_15_2.py
+++ b/models/Dolico_osb/Dolico_osb_500k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/Dolico_osb_500k.stl'
-    p['contact_pts'] = [[58.887959, -197.486603, 305.862701],
-                [58.952919, -197.350830, 280.833832]]
-    p['axis_pt1'] = [27.536142, 119.829124, 198.032684]
-    p['axis_pt2'] = [27.802645, 116.500870, 394.464966]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[72.492805, -367.768738, 304.363922],
+                [72.060631, -366.996246, 278.112061]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [27.536142, 119.829124, 198.032684],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [27.802645, 116.500870, 394.464966],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_500k_7_1.py b/models/Dolico_osb/Dolico_osb_500k_7_1.py
index a844223709909db505ac1b3eff16436003896644..da907e8344b878c7c0d6f19998b9c818bba10169 100644
--- a/models/Dolico_osb/Dolico_osb_500k_7_1.py
+++ b/models/Dolico_osb/Dolico_osb_500k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/Dolico_osb_500k.stl'
-    p['contact_pts'] = [[72.492805, -367.768738, 304.363922],
-                [72.060631, -366.996246, 278.112061]]
-    p['axis_pt1'] = [27.536142, 119.829124, 198.032684]
-    p['axis_pt2'] = [27.802645, 116.500870, 394.464966]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[72.492805, -367.768738, 304.363922],
+                [72.060631, -366.996246, 278.112061]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [27.536142, 119.829124, 198.032684],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [27.802645, 116.500870, 394.464966],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_500k_7_2.py b/models/Dolico_osb/Dolico_osb_500k_7_2.py
index 4e0b51e329389326571e9d5e78c02c3d359cbe84..da907e8344b878c7c0d6f19998b9c818bba10169 100644
--- a/models/Dolico_osb/Dolico_osb_500k_7_2.py
+++ b/models/Dolico_osb/Dolico_osb_500k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/Dolico_osb_500k.stl'
-    p['contact_pts'] = [[58.887959, -197.486603, 305.862701],
-                [58.952919, -197.350830, 280.833832]]
-    p['axis_pt1'] = [27.536142, 119.829124, 198.032684]
-    p['axis_pt2'] = [27.802645, 116.500870, 394.464966]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[72.492805, -367.768738, 304.363922],
+                [72.060631, -366.996246, 278.112061]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [27.536142, 119.829124, 198.032684],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [27.802645, 116.500870, 394.464966],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_750k_15_1.py b/models/Dolico_osb/Dolico_osb_750k_15_1.py
index 0d7f41de4603b822d9c504ec46cb16ed4d65dee2..4396aa524085754c289cc04fb1a01f3fc89e1065 100644
--- a/models/Dolico_osb/Dolico_osb_750k_15_1.py
+++ b/models/Dolico_osb/Dolico_osb_750k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/Dolico_osb_750k.stl'
-    p['contact_pts'] = [[72.896973, -368.044189, 304.529999],
-                [72.543152, -367.867920, 278.888367]]
-    p['axis_pt1'] = [28.769444, 127.225159, 198.837112]
-    p['axis_pt2'] = [28.075665, 116.736336, 394.429504]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[72.896973, -368.044189, 304.529999],
+                [72.543152, -367.867920, 278.888367]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [28.769444, 127.225159, 198.837112],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [28.075665, 116.736336, 394.429504],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_750k_15_2.py b/models/Dolico_osb/Dolico_osb_750k_15_2.py
index 2e44fd09e67506b2d6ca89713359869d012e8ee7..5486b7a3a3a00f6fd7637dbc0c23bd1be303edf9 100644
--- a/models/Dolico_osb/Dolico_osb_750k_15_2.py
+++ b/models/Dolico_osb/Dolico_osb_750k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/Dolico_osb_750k.stl'
-    p['contact_pts'] = [[58.887959, -197.486603, 305.862701],
-                [58.952919, -197.350830, 280.833832]]
-    p['axis_pt1'] = [28.769444, 127.225159, 198.837112]
-    p['axis_pt2'] = [28.075665, 116.736336, 394.429504]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[72.896973, -368.044189, 304.529999],
+                [72.543152, -367.867920, 278.888367]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [28.769444, 127.225159, 198.837112],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [28.075665, 116.736336, 394.429504],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_750k_7_1.py b/models/Dolico_osb/Dolico_osb_750k_7_1.py
index 83511265e369b3a350279333e1fdec3aab22e696..cd40d9f01c4659d2896bb5e8f123e5401d11e16c 100644
--- a/models/Dolico_osb/Dolico_osb_750k_7_1.py
+++ b/models/Dolico_osb/Dolico_osb_750k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/Dolico_osb_750k.stl'
-    p['contact_pts'] = [[72.896973, -368.044189, 304.529999],
-                [72.543152, -367.867920, 278.888367]]
-    p['axis_pt1'] = [28.769444, 127.225159, 198.837112]
-    p['axis_pt2'] = [28.075665, 116.736336, 394.429504]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[72.896973, -368.044189, 304.529999],
+                [72.543152, -367.867920, 278.888367]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [28.769444, 127.225159, 198.837112],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [28.075665, 116.736336, 394.429504],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Dolico_osb/Dolico_osb_750k_7_2.py b/models/Dolico_osb/Dolico_osb_750k_7_2.py
index 42f4e080d88b59c1d50b519439ae4435f06e8a7a..cfb38d4628c85bd95966d59fae2ed310880b7410 100644
--- a/models/Dolico_osb/Dolico_osb_750k_7_2.py
+++ b/models/Dolico_osb/Dolico_osb_750k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/Dolico_osb_750k.stl'
-    p['contact_pts'] = [[58.887959, -197.486603, 305.862701],
-                [58.952919, -197.350830, 280.833832]]
-    p['axis_pt1'] = [28.769444, 127.225159, 198.837112]
-    p['axis_pt2'] = [28.075665, 116.736336, 394.429504]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[72.896973, -368.044189, 304.529999],
+                [72.543152, -367.867920, 278.888367]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [28.769444, 127.225159, 198.837112],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [28.075665, 116.736336, 394.429504],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Dolico_osb_MAME_L.stl',
@@ -50,11 +64,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_150k_15_1.py b/models/PLTtymFrankencarpus/PLTtympFranken_150k_15_1.py
index a593e9b82512d3b0c12585bc084db7a538bea190..c99f74698614a724d255e44507698c9831ee85e6 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_150k_15_1.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_150k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/PLTtym_150k_symph.stl'
-    p['contact_pts'] = [[-140.484802, 32.752762, 185.435608],
-                [-141.219009, -31.436172, 178.064987]]
-    p['axis_pt1'] = [207.172852, -79.520950, 187.358459]
-    p['axis_pt2'] = [205.906677, 112.895256, 190.595184]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.484802, 32.752762, 185.435608],
+                [-141.219009, -31.436172, 178.064987]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [207.172852, -79.520950, 187.358459],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [205.906677, 112.895256, 190.595184],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_150k_15_2.py b/models/PLTtymFrankencarpus/PLTtympFranken_150k_15_2.py
index 16fe330296036c57a08a883d67a6d8660dbe805f..670673e305edb5e6ee4cf55daba328eac40225cf 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_150k_15_2.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_150k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/PLTtym_150k_symph.stl'
-    p['contact_pts'] = [[-47.591175, 59.634678, 182.979019],
-                [-47.909733, -48.301151, 176.236832]]
-    p['axis_pt1'] = [207.172852, -79.520950, 187.358459]
-    p['axis_pt2'] = [205.906677, 112.895256, 190.595184]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.484802, 32.752762, 185.435608],
+                [-141.219009, -31.436172, 178.064987]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [207.172852, -79.520950, 187.358459],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [205.906677, 112.895256, 190.595184],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_150k_7_1.py b/models/PLTtymFrankencarpus/PLTtympFranken_150k_7_1.py
index f7b38aa670458154ee907bd5cdc4708775a78809..485a909f2bdb53242b7af42540ac5fa10eeea58e 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_150k_7_1.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_150k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/PLTtym_150k_symph.stl'
-    p['contact_pts'] = [[-140.484802, 32.752762, 185.435608],
-                [-141.219009, -31.436172, 178.064987]]
-    p['axis_pt1'] = [207.172852, -79.520950, 187.358459]
-    p['axis_pt2'] = [205.906677, 112.895256, 190.595184]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.484802, 32.752762, 185.435608],
+                [-141.219009, -31.436172, 178.064987]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [207.172852, -79.520950, 187.358459],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [205.906677, 112.895256, 190.595184],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_150k_7_2.py b/models/PLTtymFrankencarpus/PLTtympFranken_150k_7_2.py
index 7b826282b420800af24b04c39c8be586172390ce..485a909f2bdb53242b7af42540ac5fa10eeea58e 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_150k_7_2.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_150k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/PLTtym_150k_symph.stl'
-    p['contact_pts'] = [[-47.591175, 59.634678, 182.979019],
-                [-47.909733, -48.301151, 176.236832]]
-    p['axis_pt1'] = [207.172852, -79.520950, 187.358459]
-    p['axis_pt2'] = [205.906677, 112.895256, 190.595184]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.484802, 32.752762, 185.435608],
+                [-141.219009, -31.436172, 178.064987]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [207.172852, -79.520950, 187.358459],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [205.906677, 112.895256, 190.595184],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_20k.py b/models/PLTtymFrankencarpus/PLTtympFranken_20k.py
index 3a1addc8863b83f5eac3d23cba1666c204a8bfdd..2ca9424e30a790b8b1471b26dba47efa8ec2cd4a 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_20k.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_20k.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'20k')
     p['bone'] = f'{path}/PLTtym_20k_symph_lfs.stl'
-    p['contact_pts'] = [[-139.862946, 34.411610, 186.322037],
-                  [-140.781250, -29.009081, 185.878799]]
-    p['axis_pt1'] = [214.665802, -70.867393, 186.018097]
-    p['axis_pt2'] = [205.800995, 109.939995, 189.537064]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-139.862946, 34.411610, 186.322037],
+                  [-140.781250, -29.009081, 185.878799]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [214.665802, -70.867393, 186.018097],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [205.800995, 109.939995, 189.537064],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.850e-9  # [T/mm³]
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_250k.py b/models/PLTtymFrankencarpus/PLTtympFranken_250k.py
index 352bcac4c875169d0f17981402f2a806c5d396c4..3e0ec62e3d3848b54370e0f65534eced5b90376d 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_250k.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_250k.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/PLTtym_250k_symph_lfs.stl'
-    p['contact_pts'] = [[-140.616379, 34.634388, 178.193710],
-                [-141.087341, -31.283962, 177.457901]]
-    p['axis_pt1'] = [206.616394, -80.626038, 187.317291]
-    p['axis_pt2'] = [202.435074, 114.139923, 188.697571]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.616379, 34.634388, 178.193710],
+                [-141.087341, -31.283962, 177.457901]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [206.616394, -80.626038, 187.317291],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.435074, 114.139923, 188.697571],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.850e-9  # [T/mm³]
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_250k_15_1.py b/models/PLTtymFrankencarpus/PLTtympFranken_250k_15_1.py
index 84893b79ea3121ad0390051b91474eecb6435ec7..fc39445fcf7570833fcc6e70dc572aa66216f00b 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_250k_15_1.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_250k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/PLTtym_250k_symph.stl'
-    p['contact_pts'] = [[-140.616379, 34.634388, 178.193710],
-                [-141.087341, -31.283962, 177.457901]]
-    p['axis_pt1'] = [206.616394, -80.626038, 187.317291]
-    p['axis_pt2'] = [202.435074, 114.139923, 188.697571]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.616379, 34.634388, 178.193710],
+                [-141.087341, -31.283962, 177.457901]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [206.616394, -80.626038, 187.317291],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.435074, 114.139923, 188.697571],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,18 +100,12 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
     p['Young'] = 15000.      # [MPa]
     p['Poisson'] = 0.3       # [-]
 
-
     p.update(d)
     return p
 
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_250k_15_2.py b/models/PLTtymFrankencarpus/PLTtympFranken_250k_15_2.py
index 9d3fb4067cbaa560aa24513f721f027045447304..fc39445fcf7570833fcc6e70dc572aa66216f00b 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_250k_15_2.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_250k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/PLTtym_250k_symph.stl'
-    p['contact_pts'] = [[-47.591175, 59.634678, 182.979019],
-                [-47.556026, -48.933891, 180.280045]]
-    p['axis_pt1'] = [206.616394, -80.626038, 187.317291]
-    p['axis_pt2'] = [202.435074, 114.139923, 188.697571]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.616379, 34.634388, 178.193710],
+                [-141.087341, -31.283962, 177.457901]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [206.616394, -80.626038, 187.317291],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.435074, 114.139923, 188.697571],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,18 +100,12 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
     p['Young'] = 15000.      # [MPa]
     p['Poisson'] = 0.3       # [-]
 
-
     p.update(d)
     return p
 
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_250k_7_1.py b/models/PLTtymFrankencarpus/PLTtympFranken_250k_7_1.py
index 049b78cedf64804955a041e1186bfdc234848fdc..30b60bb6c0344d5b02b90a9508d9bbf6e8037de9 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_250k_7_1.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_250k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/PLTtym_250k_symph.stl'
-    p['contact_pts'] = [[-140.616379, 34.634388, 178.193710],
-                [-141.087341, -31.283962, 177.457901]]
-    p['axis_pt1'] = [206.616394, -80.626038, 187.317291]
-    p['axis_pt2'] = [202.435074, 114.139923, 188.697571]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.616379, 34.634388, 178.193710],
+                [-141.087341, -31.283962, 177.457901]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [206.616394, -80.626038, 187.317291],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.435074, 114.139923, 188.697571],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,18 +100,12 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
     p['Young'] = 15000.      # [MPa]
     p['Poisson'] = 0.3       # [-]
 
-
     p.update(d)
     return p
 
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_250k_7_2.py b/models/PLTtymFrankencarpus/PLTtympFranken_250k_7_2.py
index 5484e683a65c826911897ad975aa6156abc0e2fa..30b60bb6c0344d5b02b90a9508d9bbf6e8037de9 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_250k_7_2.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_250k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/PLTtym_250k_symph.stl'
-    p['contact_pts'] = [[-47.591175, 59.634678, 182.979019],
-                [-47.556026, -48.933891, 180.280045]]
-    p['axis_pt1'] = [206.616394, -80.626038, 187.317291]
-    p['axis_pt2'] = [202.435074, 114.139923, 188.697571]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.616379, 34.634388, 178.193710],
+                [-141.087341, -31.283962, 177.457901]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [206.616394, -80.626038, 187.317291],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.435074, 114.139923, 188.697571],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,18 +100,12 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
     p['Young'] = 15000.      # [MPa]
     p['Poisson'] = 0.3       # [-]
 
-
     p.update(d)
     return p
 
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_500k_15_1.py b/models/PLTtymFrankencarpus/PLTtympFranken_500k_15_1.py
index 37fb7f62d8dc93795450ebcce1f1ade1f1b68879..8009cdc8406107b0ca065912f3b483711e84f849 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_500k_15_1.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_500k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/PLTtym_500k_symph.stl'
-    p['contact_pts'] = [[-140.616379, 34.634388, 178.193710],
-                [-141.554642, -31.049093, 176.841354]]
-    p['axis_pt1'] = [209.550949, -84.342560, 175.265411]
-    p['axis_pt2'] = [202.335129, 113.899513, 188.742447]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.616379, 34.634388, 178.193710],
+                [-141.554642, -31.049093, 176.841354]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [209.550949, -84.342560, 175.265411],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.335129, 113.899513, 188.742447],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,18 +100,12 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
     p['Young'] = 15000.      # [MPa]
     p['Poisson'] = 0.3       # [-]
 
-
     p.update(d)
     return p
 
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_500k_15_2.py b/models/PLTtymFrankencarpus/PLTtympFranken_500k_15_2.py
index 52f288d1b7728cdf4b873b2b0d74ce65012081b1..8009cdc8406107b0ca065912f3b483711e84f849 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_500k_15_2.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_500k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/PLTtym_500k_symph.stl'
-    p['contact_pts'] = [[-48.250050, 60.041912, 182.285355],
-                [-47.561031, -48.934483, 180.753647]]
-    p['axis_pt1'] = [209.550949, -84.342560, 175.265411]
-    p['axis_pt2'] = [202.335129, 113.899513, 188.742447]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.616379, 34.634388, 178.193710],
+                [-141.554642, -31.049093, 176.841354]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [209.550949, -84.342560, 175.265411],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.335129, 113.899513, 188.742447],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,18 +100,12 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
     p['Young'] = 15000.      # [MPa]
     p['Poisson'] = 0.3       # [-]
 
-
     p.update(d)
     return p
 
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_500k_7_1.py b/models/PLTtymFrankencarpus/PLTtympFranken_500k_7_1.py
index e777645de1ccc49af4365468b05c047aefaa9de9..d517c0972b1d944d5c27f9878875f69b8793dcdf 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_500k_7_1.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_500k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/PLTtym_500k_symph.stl'
-    p['contact_pts'] = [[-140.616379, 34.634388, 178.193710],
-                [-141.554642, -31.049093, 176.841354]]
-    p['axis_pt1'] = [209.550949, -84.342560, 175.265411]
-    p['axis_pt2'] = [202.335129, 113.899513, 188.742447]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.616379, 34.634388, 178.193710],
+                [-141.554642, -31.049093, 176.841354]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [209.550949, -84.342560, 175.265411],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.335129, 113.899513, 188.742447],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,18 +100,12 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
     p['Young'] = 15000.      # [MPa]
     p['Poisson'] = 0.3       # [-]
 
-
     p.update(d)
     return p
 
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_500k_7_2.py b/models/PLTtymFrankencarpus/PLTtympFranken_500k_7_2.py
index a5e1f548c874e0a44a72ccd145d23baae9b344cc..d517c0972b1d944d5c27f9878875f69b8793dcdf 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_500k_7_2.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_500k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/PLTtym_500k_symph.stl'
-    p['contact_pts'] = [[-48.250050, 60.041912, 182.285355],
-                [-47.561031, -48.934483, 180.753647]]
-    p['axis_pt1'] = [209.550949, -84.342560, 175.265411]
-    p['axis_pt2'] = [202.335129, 113.899513, 188.742447]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.616379, 34.634388, 178.193710],
+                [-141.554642, -31.049093, 176.841354]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [209.550949, -84.342560, 175.265411],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.335129, 113.899513, 188.742447],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,18 +100,12 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
     p['Young'] = 15000.      # [MPa]
     p['Poisson'] = 0.3       # [-]
 
-
     p.update(d)
     return p
 
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_750k.py b/models/PLTtymFrankencarpus/PLTtympFranken_750k.py
index 406573ae8d047d07a4a6c4de3ad3785b99687d3a..dace08a7291ff19c4890411bc766c09a385d2aa3 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_750k.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_750k.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/PLTtym_750k_symph_lfs.stl'
-    p['contact_pts'] = [[-140.392929, 34.519073, 177.620209],
-                [-141.554642, -31.049093, 176.841354]]
-    p['axis_pt1'] = [207.311279, -80.298553, 187.387451]
-    p['axis_pt2'] = [202.485397, 112.689812, 189.151352]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.392929, 34.519073, 177.620209],
+                [-141.554642, -31.049093, 176.841354]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [207.311279, -80.298553, 187.387451],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.485397, 112.689812, 189.151352],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1_lfs.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.850e-9  # [T/mm³]
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_750k_15_1.py b/models/PLTtymFrankencarpus/PLTtympFranken_750k_15_1.py
index cc1fea2b541812e6ad52dd1dfd566b7b126d9557..2669347bb95bfa07e3d9b0c7d98df2f0f8d1ec0b 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_750k_15_1.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_750k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/PLTtym_750k_symph.stl'
-    p['contact_pts'] = [[-140.392929, 34.519073, 177.620209],
-                [-141.554642, -31.049093, 176.841354]]
-    p['axis_pt1'] = [207.311279, -80.298553, 187.387451]
-    p['axis_pt2'] = [202.485397, 112.689812, 189.151352]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.392929, 34.519073, 177.620209],
+                [-141.554642, -31.049093, 176.841354]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [207.311279, -80.298553, 187.387451],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.485397, 112.689812, 189.151352],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,18 +100,12 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
     p['Young'] = 15000.      # [MPa]
     p['Poisson'] = 0.3       # [-]
 
-
     p.update(d)
     return p
 
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_750k_15_2.py b/models/PLTtymFrankencarpus/PLTtympFranken_750k_15_2.py
index 109309f40d632c6b81c97e955a8076b2c364e6a7..2669347bb95bfa07e3d9b0c7d98df2f0f8d1ec0b 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_750k_15_2.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_750k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/PLTtym_750k_symph.stl'
-    p['contact_pts'] = [[-48.250050, 60.041912, 182.285355],
-                [-47.400860, -48.840836, 180.895721]]
-    p['axis_pt1'] = [207.311279, -80.298553, 187.387451]
-    p['axis_pt2'] = [202.485397, 112.689812, 189.151352]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.392929, 34.519073, 177.620209],
+                [-141.554642, -31.049093, 176.841354]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [207.311279, -80.298553, 187.387451],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.485397, 112.689812, 189.151352],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,18 +100,12 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
     p['Young'] = 15000.      # [MPa]
     p['Poisson'] = 0.3       # [-]
 
-
     p.update(d)
     return p
 
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_750k_7_1.py b/models/PLTtymFrankencarpus/PLTtympFranken_750k_7_1.py
index 78c54642aaaae33a3ea76ca870c335b2b96a90e9..4f4b2c4d18e656e2a2d092efda2856c7db2e5eb2 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_750k_7_1.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_750k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/PLTtym_750k_symph.stl'
-    p['contact_pts'] = [[-140.392929, 34.519073, 177.620209],
-                [-141.554642, -31.049093, 176.841354]]
-    p['axis_pt1'] = [207.311279, -80.298553, 187.387451]
-    p['axis_pt2'] = [202.485397, 112.689812, 189.151352]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.392929, 34.519073, 177.620209],
+                [-141.554642, -31.049093, 176.841354]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [207.311279, -80.298553, 187.387451],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.485397, 112.689812, 189.151352],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,18 +100,12 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
     p['Young'] = 15000.      # [MPa]
     p['Poisson'] = 0.3       # [-]
 
-
     p.update(d)
     return p
 
diff --git a/models/PLTtymFrankencarpus/PLTtympFranken_750k_7_2.py b/models/PLTtymFrankencarpus/PLTtympFranken_750k_7_2.py
index 43ff571c9dac3dc0cb4965c208db96542b45f56f..4f4b2c4d18e656e2a2d092efda2856c7db2e5eb2 100644
--- a/models/PLTtymFrankencarpus/PLTtympFranken_750k_7_2.py
+++ b/models/PLTtymFrankencarpus/PLTtympFranken_750k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/PLTtym_750k_symph.stl'
-    p['contact_pts'] = [[-48.250050, 60.041912, 182.285355],
-                [-47.400860, -48.840836, 180.895721]]
-    p['axis_pt1'] = [207.311279, -80.298553, 187.387451]
-    p['axis_pt2'] = [202.485397, 112.689812, 189.151352]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-140.392929, 34.519073, 177.620209],
+                [-141.554642, -31.049093, 176.841354]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [207.311279, -80.298553, 187.387451],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [202.485397, 112.689812, 189.151352],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/PLTtym_M_Adductor_externus_L1.stl',
@@ -86,18 +100,12 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
     p['Young'] = 15000.      # [MPa]
     p['Poisson'] = 0.3       # [-]
 
-
     p.update(d)
     return p
 
diff --git a/models/Panthera_pardus/Panthera_pardus_RC_30.py b/models/Panthera_pardus/Panthera_pardus_RC_30.py
index 31b3e6ee502e887042991c17f0db38bf4408c87b..0726ed9729c2a19642609800304d50de956795c8 100644
--- a/models/Panthera_pardus/Panthera_pardus_RC_30.py
+++ b/models/Panthera_pardus/Panthera_pardus_RC_30.py
@@ -8,10 +8,23 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/Panthera_pardus_AMNH_113745_mandible.stl'
-    p['contact_pts'] = [16.4418, 17.3567, -53.2842]
-    p['axis_pt1'] = [-37.433147, -7.689619, 48.622185]
-    p['axis_pt2'] = [37.795021,	-7.337307, 49.882557]
-    
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [16.4418, 17.3567, -53.2842],
+            'direction': ['x', 'z', 'y']
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-37.433147, -7.689619, 48.622185],
+            'direction': ['z', 'y']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [37.795021, -7.337307, 49.882557],
+            'direction': ['z', 'y']
+        }
+    ]   
     p['muscles'] = [
         {
             'file': f'{path}/m. masseter left.stl', 
@@ -50,11 +63,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x', 'z','y'],
-        'axis_pt1': ['z','y'],
-        'axis_pt2': ['z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Smilodon_fatalis_juvenile/LACMHC_2002_L_R_3_30.py b/models/Smilodon_fatalis_juvenile/LACMHC_2002_L_R_3_30.py
index e3f411966a8025b7c5bdb5d085347dc02aedc619..d413a095f2fc68d2a87a1b2320e42196e16942fd 100644
--- a/models/Smilodon_fatalis_juvenile/LACMHC_2002_L_R_3_30.py
+++ b/models/Smilodon_fatalis_juvenile/LACMHC_2002_L_R_3_30.py
@@ -8,12 +8,26 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}\Smilodon_fatalis_juvenile_LACMHC2002LR3_mandible_500k_lfs.ply'
-    p['contact_pts'] = [ 
-                   [-3.128700, 44.665501, -9.424970] ,
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [ 
+                   [-3.128700, 44.665501, -9.424970],
                    [3.667650, 45.900398, -8.284160],
-                   [9.765930, 44.752102, -6.164700]]
-    p['axis_pt1'] = [-27.858801, -35.784000, -1.227750]
-    p['axis_pt2'] = [22.619600, -43.196201, 4.224330] 
+                   [9.765930, 44.752102, -6.164700]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-27.858801, -35.784000, -1.227750],
+            'direction': ['y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [22.619600, -43.196201, 4.224330],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}\m. masseter left.stl', 
@@ -52,11 +66,6 @@ def parms(d={}):
             'method': 'T+N'                              # 'U', 'T', 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['z','y'],
-        'axis_pt2': ['z','y','x']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T\mm³]
diff --git a/models/TYLber/TYLber_150k_15_1.py b/models/TYLber/TYLber_150k_15_1.py
index 63296cdfbbde144161f6d0f0df5326ecbbd5bde8..8c387529678c454b1cf3ec97d4f3acd45c3531b1 100644
--- a/models/TYLber/TYLber_150k_15_1.py
+++ b/models/TYLber/TYLber_150k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/TYLber_jaw_150k.stl'
-    p['contact_pts'] = [[74.470337, 531.928772, 38.113079],
-                [-71.465904, 531.618591, 37.830475]]
-    p['axis_pt1'] = [-232.980133, -518.113647, 14.254566]
-    p['axis_pt2'] = [258.104462, -520.396851, -14.235010]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[74.470337, 531.928772, 38.113079],
+                [-71.465904, 531.618591, 37.830475]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-232.980133, -518.113647, 14.254566],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [258.104462, -520.396851, -14.235010],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_150k_15_2.py b/models/TYLber/TYLber_150k_15_2.py
index ce405a17e03e3d9ecd949dbc365f029e92eacbb7..8c387529678c454b1cf3ec97d4f3acd45c3531b1 100644
--- a/models/TYLber/TYLber_150k_15_2.py
+++ b/models/TYLber/TYLber_150k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/TYLber_jaw_150k.stl'
-    p['contact_pts'] = [[159.952377, 145.793655, 10.386530],
-                [-147.823532, 152.052460, 16.779087]]
-    p['axis_pt1'] = [-232.980133, -518.113647, 14.254566]
-    p['axis_pt2'] = [258.104462, -520.396851, -14.235010]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[74.470337, 531.928772, 38.113079],
+                [-71.465904, 531.618591, 37.830475]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-232.980133, -518.113647, 14.254566],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [258.104462, -520.396851, -14.235010],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_150k_7_1.py b/models/TYLber/TYLber_150k_7_1.py
index 1064cfdbea466eb5b2268bb6f172b1b44c4d8255..3bdcb46921b15807814efce3f5e93459fda1bcf7 100644
--- a/models/TYLber/TYLber_150k_7_1.py
+++ b/models/TYLber/TYLber_150k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/TYLber_jaw_150k.stl'
-    p['contact_pts'] = [[74.470337, 531.928772, 38.113079],
-                [-71.465904, 531.618591, 37.830475]]
-    p['axis_pt1'] = [-232.980133, -518.113647, 14.254566]
-    p['axis_pt2'] = [258.104462, -520.396851, -14.235010]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[74.470337, 531.928772, 38.113079],
+                [-71.465904, 531.618591, 37.830475]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-232.980133, -518.113647, 14.254566],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [258.104462, -520.396851, -14.235010],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_150k_7_2.py b/models/TYLber/TYLber_150k_7_2.py
index 753edca4a06a5c353bd425485bf2bda45501b9ec..3bdcb46921b15807814efce3f5e93459fda1bcf7 100644
--- a/models/TYLber/TYLber_150k_7_2.py
+++ b/models/TYLber/TYLber_150k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/TYLber_jaw_150k.stl'
-    p['contact_pts'] = [[159.952377, 145.793655, 10.386530],
-                [-147.823532, 152.052460, 16.779087]]
-    p['axis_pt1'] = [-232.980133, -518.113647, 14.254566]
-    p['axis_pt2'] = [258.104462, -520.396851, -14.235010]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[74.470337, 531.928772, 38.113079],
+                [-71.465904, 531.618591, 37.830475]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-232.980133, -518.113647, 14.254566],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [258.104462, -520.396851, -14.235010],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_250k_15_1.py b/models/TYLber/TYLber_250k_15_1.py
index 0ecee26045b2d844986991589f2ef35ce6703f98..51c78d0170a7658b9c9ff1501c226891ea2bb7b0 100644
--- a/models/TYLber/TYLber_250k_15_1.py
+++ b/models/TYLber/TYLber_250k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/TYLber_jaw_250k.stl'
-    p['contact_pts'] = [[76.895927, 530.584045, 32.612164],
-                [-73.001038, 536.202087, 37.195301]]
-    p['axis_pt1'] = [-249.095215, -528.940735, -12.830746]
-    p['axis_pt2'] = [259.810211, -524.600159, -11.910051]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[76.895927, 530.584045, 32.612164],
+                [-73.001038, 536.202087, 37.195301]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-249.095215, -528.940735, -12.830746],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [259.810211, -524.600159, -11.910051],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_250k_15_2_bad.py b/models/TYLber/TYLber_250k_15_2_bad.py
index b81af7079c67ec4d4f93272849d4de196bf9bb53..51c78d0170a7658b9c9ff1501c226891ea2bb7b0 100644
--- a/models/TYLber/TYLber_250k_15_2_bad.py
+++ b/models/TYLber/TYLber_250k_15_2_bad.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/TYLber_jaw_250k.stl'
-    p['contact_pts'] = [[159.370773, 150.709351, 18.192839],
-                [-152.182220, 150.355057, 22.975760]]
-    p['axis_pt1'] = [-249.095215, -528.940735, -12.830746]
-    p['axis_pt2'] = [259.810211, -524.600159, -11.910051]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[76.895927, 530.584045, 32.612164],
+                [-73.001038, 536.202087, 37.195301]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-249.095215, -528.940735, -12.830746],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [259.810211, -524.600159, -11.910051],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_250k_7_1.py b/models/TYLber/TYLber_250k_7_1.py
index dcef18bc2b9a4a2201f202e9d1e1b69dfe15bca6..ae7982ebf8e4c8f662a23227712b69ba9d3aa687 100644
--- a/models/TYLber/TYLber_250k_7_1.py
+++ b/models/TYLber/TYLber_250k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/TYLber_jaw_250k.stl'
-    p['contact_pts'] = [[76.895927, 530.584045, 32.612164],
-                [-73.001038, 536.202087, 37.195301]]
-    p['axis_pt1'] = [-249.095215, -528.940735, -12.830746]
-    p['axis_pt2'] = [259.810211, -524.600159, -11.910051]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[76.895927, 530.584045, 32.612164],
+                [-73.001038, 536.202087, 37.195301]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-249.095215, -528.940735, -12.830746],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [259.810211, -524.600159, -11.910051],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_250k_7_2_bad.py b/models/TYLber/TYLber_250k_7_2_bad.py
index f2e7fa0dbd552e02865ef1b329ff57efd1896040..ae7982ebf8e4c8f662a23227712b69ba9d3aa687 100644
--- a/models/TYLber/TYLber_250k_7_2_bad.py
+++ b/models/TYLber/TYLber_250k_7_2_bad.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/TYLber_jaw_250k.stl'
-    p['contact_pts'] = [[159.370773, 150.709351, 18.192839],
-                [-152.182220, 150.355057, 22.975760]]
-    p['axis_pt1'] = [-249.095215, -528.940735, -12.830746]
-    p['axis_pt2'] = [259.810211, -524.600159, -11.910051]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[76.895927, 530.584045, 32.612164],
+                [-73.001038, 536.202087, 37.195301]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-249.095215, -528.940735, -12.830746],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [259.810211, -524.600159, -11.910051],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_500k_15_1.py b/models/TYLber/TYLber_500k_15_1.py
index f664fc3149132c6e639b7001aebb51f51d6fdbfb..e19c4b2e6930d6d49f34eca667589eebd11cba27 100644
--- a/models/TYLber/TYLber_500k_15_1.py
+++ b/models/TYLber/TYLber_500k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/TYLber_jaw_500k.stl'
-    p['contact_pts'] = [[77.305153, 544.409424, 30.836790],
-                [-73.187263, 536.783264, 36.419006]]
-    p['axis_pt1'] = [-228.034103, -519.674866, 16.911722]
-    p['axis_pt2'] = [256.089417, -529.891724, -10.076393]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[77.305153, 544.409424, 30.836790],
+                [-73.187263, 536.783264, 36.419006]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-228.034103, -519.674866, 16.911722],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [256.089417, -529.891724, -10.076393],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_500k_15_2.py b/models/TYLber/TYLber_500k_15_2.py
index 17c423fbfdf591c6b19ee48ca0a95aaadd905300..e19c4b2e6930d6d49f34eca667589eebd11cba27 100644
--- a/models/TYLber/TYLber_500k_15_2.py
+++ b/models/TYLber/TYLber_500k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/TYLber_jaw_500k.stl'
-    p['contact_pts'] = [[153.858017, 155.593140, 17.697323],
-                [-150.512238, 145.369690, 17.743414]]
-    p['axis_pt1'] = [-228.034103, -519.674866, 16.911722]
-    p['axis_pt2'] = [256.089417, -529.891724, -10.076393]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[77.305153, 544.409424, 30.836790],
+                [-73.187263, 536.783264, 36.419006]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-228.034103, -519.674866, 16.911722],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [256.089417, -529.891724, -10.076393],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_500k_7_1.py b/models/TYLber/TYLber_500k_7_1.py
index 007b7e1c4f17affe2f3fbdaebd741a7c0f7fc622..6c90ec3e3e559bc19e93df8a6555ed51dd61d047 100644
--- a/models/TYLber/TYLber_500k_7_1.py
+++ b/models/TYLber/TYLber_500k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/TYLber_jaw_500k.stl'
-    p['contact_pts'] = [[77.305153, 544.409424, 30.836790],
-                [-73.187263, 536.783264, 36.419006]]
-    p['axis_pt1'] = [-228.034103, -519.674866, 16.911722]
-    p['axis_pt2'] = [256.089417, -529.891724, -10.076393]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[77.305153, 544.409424, 30.836790],
+                [-73.187263, 536.783264, 36.419006]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-228.034103, -519.674866, 16.911722],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [256.089417, -529.891724, -10.076393],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_500k_7_2.py b/models/TYLber/TYLber_500k_7_2.py
index eb2cdaf50f855f238cf6b8f0bda6376c4eafda48..6c90ec3e3e559bc19e93df8a6555ed51dd61d047 100644
--- a/models/TYLber/TYLber_500k_7_2.py
+++ b/models/TYLber/TYLber_500k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/TYLber_jaw_500k.stl'
-    p['contact_pts'] = [[153.858017, 155.593140, 17.697323],
-                [-150.512238, 145.369690, 17.743414]]
-    p['axis_pt1'] = [-228.034103, -519.674866, 16.911722]
-    p['axis_pt2'] = [256.089417, -529.891724, -10.076393]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[77.305153, 544.409424, 30.836790],
+                [-73.187263, 536.783264, 36.419006]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-228.034103, -519.674866, 16.911722],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [256.089417, -529.891724, -10.076393],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,12 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_750k_15_1.py b/models/TYLber/TYLber_750k_15_1.py
index 478acf9fb86a379f1ffd63bac4d420fd7f71a489..07a7fbde54c3a9a67dd00434b21edb291cf0eb05 100644
--- a/models/TYLber/TYLber_750k_15_1.py
+++ b/models/TYLber/TYLber_750k_15_1.py
@@ -12,6 +12,24 @@ def parms(d={}):
                 [-73.820549, 540.698853, 33.361473]]
     p['axis_pt1'] = [-212.512512, -567.425232, -59.523800]
     p['axis_pt2'] = [257.484497, -534.512878, -6.094533]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[77.305153, 544.409424, 30.836790],
+                [-73.187263, 536.783264, 36.419006]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-228.034103, -519.674866, 16.911722],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [256.089417, -529.891724, -10.076393],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
diff --git a/models/TYLber/TYLber_750k_15_2.py b/models/TYLber/TYLber_750k_15_2.py
index 7ec71acd6da581ccac2b816a316ace9e1193cfc1..e4ac65ada5ee510fc4ae1c07c37c07a833cff4d0 100644
--- a/models/TYLber/TYLber_750k_15_2.py
+++ b/models/TYLber/TYLber_750k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/TYLber_jaw_750k.stl'
-    p['contact_pts'] = [[196.424347, 90.526627, -41.083321],
-                [-159.784760, 98.047890, 30.349947]]
-    p['axis_pt1'] = [-212.512512, -567.425232, -59.523800]
-    p['axis_pt2'] = [257.484497, -534.512878, -6.094533]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[77.305153, 544.409424, 30.836790],
+                [-73.187263, 536.783264, 36.419006]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-228.034103, -519.674866, 16.911722],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [256.089417, -529.891724, -10.076393],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_750k_7_1.py b/models/TYLber/TYLber_750k_7_1.py
index c65f227db1cb920eef29a1c753fa3f54d0406c8f..e88916e50cedcd0baf77ab9352a9d398a0a7676e 100644
--- a/models/TYLber/TYLber_750k_7_1.py
+++ b/models/TYLber/TYLber_750k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/TYLber_jaw_750k.stl'
-    p['contact_pts'] = [[78.026253, 541.746887, 33.878143],
-                [-73.820549, 540.698853, 33.361473]]
-    p['axis_pt1'] = [-212.512512, -567.425232, -59.523800]
-    p['axis_pt2'] = [257.484497, -534.512878, -6.094533]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[77.305153, 544.409424, 30.836790],
+                [-73.187263, 536.783264, 36.419006]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-228.034103, -519.674866, 16.911722],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [256.089417, -529.891724, -10.076393],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLber/TYLber_750k_7_2.py b/models/TYLber/TYLber_750k_7_2.py
index bcdcbb79d3b593d582f9e8f4f3e262cdcec36044..e88916e50cedcd0baf77ab9352a9d398a0a7676e 100644
--- a/models/TYLber/TYLber_750k_7_2.py
+++ b/models/TYLber/TYLber_750k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/TYLber_jaw_750k.stl'
-    p['contact_pts'] = [[196.424347, 90.526627, -41.083321],
-                [-159.784760, 98.047890, 30.349947]]
-    p['axis_pt1'] = [-212.512512, -567.425232, -59.523800]
-    p['axis_pt2'] = [257.484497, -534.512878, -6.094533]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[77.305153, 544.409424, 30.836790],
+                [-73.187263, 536.783264, 36.419006]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [-228.034103, -519.674866, 16.911722],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [256.089417, -529.891724, -10.076393],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_150k_15_1.py b/models/TYLnep/TYLnep_150k_15_1.py
index 6cf6e73252323f41210a74e39a87f964452260d3..466371685b861d09f7c91ec111ed7bfbc6abe578 100644
--- a/models/TYLnep/TYLnep_150k_15_1.py
+++ b/models/TYLnep/TYLnep_150k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/TYLnep_jaw_150k.stl'
-    p['contact_pts'] = [[-411.039917, 227.579102, 43.466621],
-                [-426.836792, 165.685944, 36.533264]]
-    p['axis_pt1'] = [380.324341, 44.402424, 89.259888]
-    p['axis_pt2'] = [394.083679, 396.327271, 59.939686]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-411.039917, 227.579102, 43.466621],
+                [-426.836792, 165.685944, 36.533264]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [380.324341, 44.402424, 89.259888],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [394.083679, 396.327271, 59.939686],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_150k_15_2.py b/models/TYLnep/TYLnep_150k_15_2.py
index 6ad72d91da5cfbf92aebedc5aab475dab2f4a1fa..466371685b861d09f7c91ec111ed7bfbc6abe578 100644
--- a/models/TYLnep/TYLnep_150k_15_2.py
+++ b/models/TYLnep/TYLnep_150k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/TYLnep_jaw_150k.stl'
-    p['contact_pts'] = [[-87.998215, 318.365540, 63.300953],
-                [-99.972519, 80.537491, 43.511547]]
-    p['axis_pt1'] = [380.324341, 44.402424, 89.259888]
-    p['axis_pt2'] = [394.083679, 396.327271, 59.939686]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-411.039917, 227.579102, 43.466621],
+                [-426.836792, 165.685944, 36.533264]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [380.324341, 44.402424, 89.259888],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [394.083679, 396.327271, 59.939686],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_150k_7_1.py b/models/TYLnep/TYLnep_150k_7_1.py
index 819e1999d3fe84ed798bbec348b836f3326d8f39..68e1eed38a1753a4efc2349065fd9c270069f2e9 100644
--- a/models/TYLnep/TYLnep_150k_7_1.py
+++ b/models/TYLnep/TYLnep_150k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/TYLnep_jaw_150k.stl'
-    p['contact_pts'] = [[-411.039917, 227.579102, 43.466621],
-                [-426.836792, 165.685944, 36.533264]]
-    p['axis_pt1'] = [380.324341, 44.402424, 89.259888]
-    p['axis_pt2'] = [394.083679, 396.327271, 59.939686]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-411.039917, 227.579102, 43.466621],
+                [-426.836792, 165.685944, 36.533264]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [380.324341, 44.402424, 89.259888],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [394.083679, 396.327271, 59.939686],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_150k_7_2.py b/models/TYLnep/TYLnep_150k_7_2.py
index f396b6e75d3dd2a2c6b37b0d27fb3f1ceea05266..68e1eed38a1753a4efc2349065fd9c270069f2e9 100644
--- a/models/TYLnep/TYLnep_150k_7_2.py
+++ b/models/TYLnep/TYLnep_150k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'150k')
     p['bone'] = f'{path}/TYLnep_jaw_150k.stl'
-    p['contact_pts'] = [[-87.998215, 318.365540, 63.300953],
-                [-99.972519, 80.537491, 43.511547]]
-    p['axis_pt1'] = [380.324341, 44.402424, 89.259888]
-    p['axis_pt2'] = [394.083679, 396.327271, 59.939686]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-411.039917, 227.579102, 43.466621],
+                [-426.836792, 165.685944, 36.533264]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [380.324341, 44.402424, 89.259888],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [394.083679, 396.327271, 59.939686],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_250k_15_1.py b/models/TYLnep/TYLnep_250k_15_1.py
index 0dfe9faede24b1e99029a2ea8a168c8881b7e0f2..d813ea08da96b347b7b4d0c59412023f9656630e 100644
--- a/models/TYLnep/TYLnep_250k_15_1.py
+++ b/models/TYLnep/TYLnep_250k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/TYLnep_jaw_250k.stl'
-    p['contact_pts'] = [[-420.489166, 226.380966, 16.269716],
-                [-426.962891, 159.505264, 35.790138]]
-    p['axis_pt1'] = [384.577301, 39.049088, 84.218117]
-    p['axis_pt2'] = [387.968872, 381.002136, 81.069290]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-420.489166, 226.380966, 16.269716],
+                [-426.962891, 159.505264, 35.790138]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [384.577301, 39.049088, 84.218117],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [387.968872, 381.002136, 81.069290],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_250k_15_2.py b/models/TYLnep/TYLnep_250k_15_2.py
index f420494fed259c5e2c3bab8fbd2909f3d01cf25f..d813ea08da96b347b7b4d0c59412023f9656630e 100644
--- a/models/TYLnep/TYLnep_250k_15_2.py
+++ b/models/TYLnep/TYLnep_250k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/TYLnep_jaw_250k.stl'
-    p['contact_pts'] = [[-86.279778, 320.183533, 52.348541],
-                [-96.408920, 78.982399, 52.918877]]
-    p['axis_pt1'] = [384.577301, 39.049088, 84.218117]
-    p['axis_pt2'] = [387.968872, 381.002136, 81.069290]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-420.489166, 226.380966, 16.269716],
+                [-426.962891, 159.505264, 35.790138]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [384.577301, 39.049088, 84.218117],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [387.968872, 381.002136, 81.069290],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_250k_7_1.py b/models/TYLnep/TYLnep_250k_7_1.py
index 14f65db7203e84bc8d208ada1fc89c1f67cf6039..d1fa105985b0b477c1122ab62cc92883026cff88 100644
--- a/models/TYLnep/TYLnep_250k_7_1.py
+++ b/models/TYLnep/TYLnep_250k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/TYLnep_jaw_250k.stl'
-    p['contact_pts'] = [[-420.489166, 226.380966, 16.269716],
-                [-426.962891, 159.505264, 35.790138]]
-    p['axis_pt1'] = [384.577301, 39.049088, 84.218117]
-    p['axis_pt2'] = [387.968872, 381.002136, 81.069290]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-420.489166, 226.380966, 16.269716],
+                [-426.962891, 159.505264, 35.790138]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [384.577301, 39.049088, 84.218117],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [387.968872, 381.002136, 81.069290],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_250k_7_2.py b/models/TYLnep/TYLnep_250k_7_2.py
index 9be95c5a6fff1069f55c83ffdd940217afa81f54..d1fa105985b0b477c1122ab62cc92883026cff88 100644
--- a/models/TYLnep/TYLnep_250k_7_2.py
+++ b/models/TYLnep/TYLnep_250k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'250k')
     p['bone'] = f'{path}/TYLnep_jaw_250k.stl'
-    p['contact_pts'] = [[-86.279778, 320.183533, 52.348541],
-                [-96.408920, 78.982399, 52.918877]]
-    p['axis_pt1'] = [384.577301, 39.049088, 84.218117]
-    p['axis_pt2'] = [387.968872, 381.002136, 81.069290]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-420.489166, 226.380966, 16.269716],
+                [-426.962891, 159.505264, 35.790138]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [384.577301, 39.049088, 84.218117],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [387.968872, 381.002136, 81.069290],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_500k_15_1.py b/models/TYLnep/TYLnep_500k_15_1.py
index 6ed9d159fb63502435d7529ef04fc05b70e2542f..5c48ebd3eec92df023ac2096b738effbb4949562 100644
--- a/models/TYLnep/TYLnep_500k_15_1.py
+++ b/models/TYLnep/TYLnep_500k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/TYLnep_jaw_500k.stl'
-    p['contact_pts'] = [[-417.999359, 222.242569, 31.007950],
-                [-428.224182, 162.031265, 36.896519]]
-    p['axis_pt1'] = [381.261627, 39.182289, 82.731766]
-    p['axis_pt2'] = [391.689667, 381.874176, 81.844215]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-417.999359, 222.242569, 31.007950],
+                [-428.224182, 162.031265, 36.896519]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [381.261627, 39.182289, 82.731766],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [391.689667, 381.874176, 81.844215],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_500k_15_2.py b/models/TYLnep/TYLnep_500k_15_2.py
index e529b5a1c0ee89d7e6165be764e90a5fe7bb5e51..0bdc4767a802dd70b6a4c59ae529b0e40bb2790e 100644
--- a/models/TYLnep/TYLnep_500k_15_2.py
+++ b/models/TYLnep/TYLnep_500k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/TYLnep_jaw_500k.stl'
-    p['contact_pts'] = [[-88.511429, 320.280304, 40.494282],
-                [-95.066902, 77.562195, 41.572414]]
-    p['axis_pt1'] = [381.261627, 39.182289, 82.731766]
-    p['axis_pt2'] = [391.689667, 381.874176, 81.844215]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-417.999359, 222.242569, 31.007950],
+                [-428.224182, 162.031265, 36.896519]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [381.261627, 39.182289, 82.731766],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [391.689667, 381.874176, 81.844215],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_500k_7_1.py b/models/TYLnep/TYLnep_500k_7_1.py
index 634ca3bff1fb8616328c998a4a8fd6602d035dd7..f5060af006344f5826e4cfad0d2a5473ca32476d 100644
--- a/models/TYLnep/TYLnep_500k_7_1.py
+++ b/models/TYLnep/TYLnep_500k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/TYLnep_jaw_500k.stl'
-    p['contact_pts'] = [[-417.999359, 222.242569, 31.007950],
-                [-428.224182, 162.031265, 36.896519]]
-    p['axis_pt1'] = [381.261627, 39.182289, 82.731766]
-    p['axis_pt2'] = [391.689667, 381.874176, 81.844215]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-417.999359, 222.242569, 31.007950],
+                [-428.224182, 162.031265, 36.896519]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [381.261627, 39.182289, 82.731766],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [391.689667, 381.874176, 81.844215],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_500k_7_2.py b/models/TYLnep/TYLnep_500k_7_2.py
index 3cb3d11768fc12a118cc9a4900009879fa0ba1d3..f5060af006344f5826e4cfad0d2a5473ca32476d 100644
--- a/models/TYLnep/TYLnep_500k_7_2.py
+++ b/models/TYLnep/TYLnep_500k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'500k')
     p['bone'] = f'{path}/TYLnep_jaw_500k.stl'
-    p['contact_pts'] = [[-88.511429, 320.280304, 40.494282],
-                [-95.066902, 77.562195, 41.572414]]
-    p['axis_pt1'] = [381.261627, 39.182289, 82.731766]
-    p['axis_pt2'] = [391.689667, 381.874176, 81.844215]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-417.999359, 222.242569, 31.007950],
+                [-428.224182, 162.031265, 36.896519]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [381.261627, 39.182289, 82.731766],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [391.689667, 381.874176, 81.844215],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_750k_15_1.py b/models/TYLnep/TYLnep_750k_15_1.py
index ad6806ccbe3e2af462f1d7937734e199dcb00bcb..26f90bddfa6b3bffbd5211fe1a0eea16568b53a8 100644
--- a/models/TYLnep/TYLnep_750k_15_1.py
+++ b/models/TYLnep/TYLnep_750k_15_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/TYLnep_jaw_750k.stl'
-    p['contact_pts'] = [[-440.282074, 226.035706, 8.676176],
-                [-453.118317, 156.467865, 11.607960]]
-    p['axis_pt1'] = [392.782898, 35.557762, 84.161575]
-    p['axis_pt2'] = [391.689667, 381.874176, 81.844215]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-440.282074, 226.035706, 8.676176],
+                [-453.118317, 156.467865, 11.607960]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [392.782898, 35.557762, 84.161575],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [391.689667, 381.874176, 81.844215],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_750k_15_2.py b/models/TYLnep/TYLnep_750k_15_2.py
index dfe4fa89ad3d3f1839398efcb5dba98658714f6e..26f90bddfa6b3bffbd5211fe1a0eea16568b53a8 100644
--- a/models/TYLnep/TYLnep_750k_15_2.py
+++ b/models/TYLnep/TYLnep_750k_15_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/TYLnep_jaw_750k.stl'
-    p['contact_pts'] = [[-91.923141, 317.501709, 54.304459],
-                [-96.786438, 79.207016, 55.289452]]
-    p['axis_pt1'] = [392.782898, 35.557762, 84.161575]
-    p['axis_pt2'] = [391.689667, 381.874176, 81.844215]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-440.282074, 226.035706, 8.676176],
+                [-453.118317, 156.467865, 11.607960]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [392.782898, 35.557762, 84.161575],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [391.689667, 381.874176, 81.844215],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_750k_7_1.py b/models/TYLnep/TYLnep_750k_7_1.py
index a2da277cc7b6bef7697d20285d43f0312fad4605..4cf091c14ce121caa960e7774537b031fc750def 100644
--- a/models/TYLnep/TYLnep_750k_7_1.py
+++ b/models/TYLnep/TYLnep_750k_7_1.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/TYLnep_jaw_750k.stl'
-    p['contact_pts'] = [[-440.282074, 226.035706, 8.676176],
-                [-453.118317, 156.467865, 11.607960]]
-    p['axis_pt1'] = [392.782898, 35.557762, 84.161575]
-    p['axis_pt2'] = [391.689667, 381.874176, 81.844215]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-440.282074, 226.035706, 8.676176],
+                [-453.118317, 156.467865, 11.607960]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [392.782898, 35.557762, 84.161575],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [391.689667, 381.874176, 81.844215],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/TYLnep/TYLnep_750k_7_2.py b/models/TYLnep/TYLnep_750k_7_2.py
index ce3e36d6c2fafb979ed4f0874b8ab3e944e7a1b0..4cf091c14ce121caa960e7774537b031fc750def 100644
--- a/models/TYLnep/TYLnep_750k_7_2.py
+++ b/models/TYLnep/TYLnep_750k_7_2.py
@@ -8,10 +8,24 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'750k')
     p['bone'] = f'{path}/TYLnep_jaw_750k.stl'
-    p['contact_pts'] = [[-91.923141, 317.501709, 54.304459],
-                [-96.786438, 79.207016, 55.289452]]
-    p['axis_pt1'] = [392.782898, 35.557762, 84.161575]
-    p['axis_pt2'] = [391.689667, 381.874176, 81.844215]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-440.282074, 226.035706, 8.676176],
+                [-453.118317, 156.467865, 11.607960]],
+            'direction': 'z'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [392.782898, 35.557762, 84.161575],
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [391.689667, 381.874176, 81.844215],
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/M_AE_L1.stl',
@@ -86,11 +100,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['z'],
-        'axis_pt1': ['x', 'z','y'],
-        'axis_pt2': ['x', 'z','y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/Tapirus_indicus/T_indicus_shoulder50k.py b/models/Tapirus_indicus/T_indicus_shoulder50k.py
index 0dd5e04a4e07ae99d0bcf6643783e361949300f9..902ae6ea23eef947b61cff0f45405d8556b8f866 100644
--- a/models/Tapirus_indicus/T_indicus_shoulder50k.py
+++ b/models/Tapirus_indicus/T_indicus_shoulder50k.py
@@ -8,10 +8,23 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'50k')
     p['bone'] = f'{path}/TAPind901 humerus.ply'
-    p['contact_pts'] = [40.7833, 86.7345, -207.319] # Distal humerus
-    p['axis_pt1'] = [14.49, -11.3946, -24.7092] #Humeral head
-    p['axis_pt2'] = [-6.88301, 6.4703, -18.073] #Humeral head
-    
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [40.7833, 86.7345, -207.319], # Distal humerus
+            'direction': ['x', 'z']
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': [14.49, -11.3946, -24.7092], # Humeral head
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-6.88301, 6.4703, -18.073], # Humeral head
+            'direction': ['x', 'y', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/TAPind901 deltoideus_insert.ply', 
@@ -44,11 +57,6 @@ def parms(d={}):
             'method': 'T+N'                              # 'U', 'T', 'T+N'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x', 'z'],
-        'axis_pt1': ['x', 'z', 'y'],
-        'axis_pt2': ['x', 'z', 'y']
-    }
 
     # material properties
     p['density'] = 1.662e-9  # [T/mm³]
diff --git a/models/boneload.py b/models/boneload.py
index 103b77324d5cd2cfe839d4c6c89d5cfcf87f733a..35c1387a30d5884fd528d6b275dae0e351e2103a 100644
--- a/models/boneload.py
+++ b/models/boneload.py
@@ -461,24 +461,37 @@ def create_loads(nodes, tris, total_force, target, method='T'):
         "adds the normal traction (i.e., pressure) that
         muscle fibers impose on the skull as they wrap around
         it."
+    method = 'D' (Directional-Traction Model)
+        all the nodal forces are applied along a prescribed direction 
+        given by "target" see as a vector
+    method = 'N' (Normal-Traction Model)
+        all the nodal forces are applied along the normal to each triangle
     """
 
     # options
     if method == 'U':
-        project = False
         methodtxt = 'Ad Hoc Uniform Traction Model'
+        project = False
         normal_comp = None
     elif method == 'T':
+        methodtxt = 'Tangential-Traction Model'
         project = True
         normal_comp = False
-        methodtxt = 'Tangential-Traction Model'
     elif method == 'T+N':
+        methodtxt = 'Tangential-Plus-Normal-Traction Model'
         project = True
         normal_comp = True
-        methodtxt = 'Tangential-Plus-Normal-Traction Model'
+    elif method == 'D':
+        methodtxt = 'Directional-Traction Model'
+        project = False
+        normal_comp = None
+    elif method == 'N':
+        methodtxt = 'Normal-Traction Model'
+        project = False
+        normal_comp = None
     else:
         raise Exception(
-            "unknown method: choose from 'uniform', 'tangential' or 'tangential+normal'")
+            f"unknown method ({method}): choose from 'U', 'T', 'T+N', 'D' or 'N'")    
 
     if normal_comp:
         muscle = SurfMesh(nodes, tris, vertices=False)
@@ -492,11 +505,17 @@ def create_loads(nodes, tris, total_force, target, method='T'):
     for tri in tris:
         p1, p2, p3 = [Pt(nodes[tri[i]]) for i in range(3)]
         centre = (p1+p2+p3)/3       # barycentre
-        e1 = p2-p1                  # edge 1
-        e2 = p3-p1                  # edge 2
-        direct = targetP-centre
-        direct.normalize()          # direction of the traction (normalised)
+        e1 = p2 - p1                # edge 1
+        e2 = p3 - p1                # edge 2
         n = e1.cross(e2)            # normal vector
+        if method == 'D':
+            direct = targetP        # force direction is the same for all triangles
+        elif method == 'N':
+            direct = n              # force direction is normal to the triangle
+        else:
+            direct = targetP-centre # force direction varies from 1 triangle to another
+        direct.normalize()          # direction of the traction (normalised)
+
         area2 = abs(n)              # 2 x area
         area = area2/2              # triangle area
         total_area += area
diff --git a/models/bonemodel.py b/models/bonemodel.py
index d2624db217d9e0ab9ce0345e78de724ac934126c..00d1c7acbeed271bc9f1346e22175ce0b007bf4b 100644
--- a/models/bonemodel.py
+++ b/models/bonemodel.py
@@ -18,23 +18,18 @@ def parms(d={}):
     """
     p = {}
 
-    # Geomagic/MeshLab input files
+    # folder containing meshes
     path = 'dolicorhynchops/10k'
+
     # mandible mesh (.ply/.geo/.msh)
-    p['bone'] = f'{path}/mandible.ply' 
-    # one or several vertices (.ply/.off) (used if p['food']=='fixteeth')
-    p['contact_pts'] = f'{path}/teeth.off'
-    # left temporomandibular joint - 1 vertex (.ply/.off/coordinates)
-    p['axis_pt1'] = [0.1458893, -73.13895, 227.3909]
-    # right temporomandibular joint - 1 vertex (.ply/.off/coordinates) 
-    p['axis_pt2'] = f'{path}/RTMJ.off'
+    p['bone'] = f'{path}/mandible.ply'
     
     p['muscles'] = [
         { 
             'file': f'{path}/Lmuscle.ply', 
             'force': 100., 
             'focalpt': f'{path}/LmuscleF.off', 
-            'method': 'T'                       # loading model: 'U', 'T', 'T+N'
+            'method': 'T' # loading model: 'U', 'T', 'T+N', 'D' or 'N'
         },
         { 
             'file': f'{path}/Rmuscle.off', 
@@ -43,12 +38,35 @@ def parms(d={}):
             'method':'T'
         }
     ]
+
+    # list of fixed nodes
+    #   with "name" a description string used for output purposes,
+    #        "nodes" a list of nodes (coordinates) or a mesh file,
+    #        "direction" a list of constrained degrees of freedom
+
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-10.20362, -17.46838, -229.9061],
+                        [-11.92466, 26.3042, -229.5354]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': f'{path}/LTMJ.off',
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-8.716309, 79.13171, 233.8385],
+            'direction': ['x', 'z']
+        }
+    ]
+
+    p['loads'] = [] # additional loads
+
     p['food'] = 'fixteeth'  # type of food: 'fixteeth' or 'cylinder'
-    p['fixations'] = {  
-        'contact_pts': ['x','y','z'],  # constrained degrees of freedom
-        'axis_pt1': ['x','y','z'],
-        'axis_pt2': ['x','y','z']
-    }
+    
     # rigid cylinder (used if p['food']=='cylinder') 
     R = 20
     p['cylinder'] = {
@@ -90,13 +108,12 @@ def getMetafor(p={}):
     # load main mandible mesh (volume or surface - it will be meshed in 3D)
     import_mesh(domain, p['bone'], p['use_gmshOld'])
 
-    # define groups
+    # -- define groups
 
     # group #1 is the group containing all volume elements
     groupset = geometry.getGroupSet()    
     groups = {}
     groups['all'] = groupset(1)
-
     print("the mandible mesh has %d nodes" % groups['all'].getNumberOfMeshPoints())
 
     # extract external surface of the mesh => groups['surf']
@@ -106,14 +123,10 @@ def getMetafor(p={}):
     groups['surf'].addMeshPointsFromObject(groups['all'], BoundarySelector())
     nods_no, nods_pos = extract_nodes_from_group(groups['surf'])
 
-    # load other surface meshes  => groups['axis_pt1'], ...
-    for meshname in ['axis_pt1', 'axis_pt2']:
-        create_group(p[meshname], nods_no, nods_pos, domain, groups, meshname)
-
     # load muscle groups
     mgroups = {}                    # stores muscle group data and loads
     for muscle in p['muscles']:
-        # load focal point
+        # load focal point / loading direction
         if isinstance(muscle['focalpt'], str):
             fullpath = os.path.join(os.path.dirname(__file__), muscle['focalpt'])
             focalnodes, _ = boneload.load_msh(fullpath)
@@ -128,7 +141,11 @@ def getMetafor(p={}):
             total_force=muscle['force'], target=focalnodes[0], method=muscle['method'])
         # store data in a structure
         mgroups[name] = MuscleGroup(nodes, tris, ntags, loads)
-        
+
+    # create groups of fixed nodes
+    for fix in p['fixations']:
+        create_group(fix['nodes'], nods_no, nods_pos, domain, groups, fix['name'])
+
     # --------------------------------------------------------------------------
 
     # material 
@@ -152,13 +169,13 @@ def getMetafor(p={}):
     fct.setData(0.0, 0.0)
     fct.setData(1.0, 1.0)
 
-    txt2key = { 'x': TX, 'y':TY, 'z':TZ }
-
-    # axis of rotation
-    for gname in ['axis_pt1', 'axis_pt2']:
-        for d in p['fixations'][gname]:
-            domain.getLoadingSet().define(groups[gname], Field1D(txt2key[d],RE), 0.0)
+    # add Dirichlet conditions (fixations)
+    txt2key = { 'x': TX, 'y': TY, 'z': TZ }
+    for fix in p['fixations']:
+        for d in fix['direction']:
+            domain.getLoadingSet().define(groups[fix['name']], Field1D(txt2key[d],RE), 0.0)
 
+    # add Neumann conditions (loads) from muscle loads
     mshpts = geometry.getMesh().getPointSet()
     for name, gr in mgroups.items():
         # print(f'len(gr.ntags)={len(gr.ntags)}')
@@ -169,6 +186,16 @@ def getMetafor(p={}):
             domain.getLoadingSet().define(target, Field1D(TY,GF1), load.x[1], fct)
             domain.getLoadingSet().define(target, Field1D(TZ,GF1), load.x[2], fct)
 
+    # add Neumann conditions (loads) from external loads
+    dirs = [TX,TY,TZ]
+    for load in p['loads']:
+        name, nodes, tris, ntags = \
+            create_group(load['nodes'], nods_no, nods_pos, domain, groups, load['name'])
+        for ntag in ntags:
+            for i in range(3):
+                target = mshpts(ntag)
+                domain.getLoadingSet().define(target, Field1D(dirs[i],GF1), load['values'][i], fct)
+
     # type of food
 
     if p['food']=='cylinder':
@@ -193,10 +220,7 @@ def getMetafor(p={}):
         ci.addProperty(prp2)
         domain.getInteractionSet().add(ci)
     elif p['food']=='fixteeth':
-        # teeth are fixed along X
-        create_group(p['contact_pts'], nods_no, nods_pos, domain, groups, 'contact_pts')
-        for d in p['fixations']['contact_pts']:
-            domain.getLoadingSet().define(groups['contact_pts'], Field1D(txt2key[d],RE), 0.0)
+        pass
     else:
         # p['food'] is a filename
         ply2mtf(domain, p['food'])
diff --git a/models/bonemodel2.py b/models/bonemodel2.py
index bd7cd8f85f4644c9dc91308c9634bca5bb83d9d1..1bc8373ee05dd0d72b6641093eb99c7018c4574d 100644
--- a/models/bonemodel2.py
+++ b/models/bonemodel2.py
@@ -18,23 +18,18 @@ def parms(d={}):
     """
     p = {}
 
-    # Geomagic/MeshLab input files
+    # folder containing meshes
     path = 'dolicorhynchops/10k'
+
     # mandible mesh (.ply/.geo/.msh)
     p['bone'] = f'{path}/mandible.ply'
-    # one or several vertices (.ply/.off) (used if p['food']=='fixteeth')
-    p['contact_pts'] = f'{path}/teeth.off'
-    # left temporomandibular joint - 1 vertex (.ply/.off/coordinates)
-    p['axis_pt1'] = [0.1458893, -73.13895, 227.3909]
-    # right temporomandibular joint - 1 vertex (.ply/.off/coordinates)
-    p['axis_pt2'] = f'{path}/RTMJ.off'
 
     p['muscles'] = [
         {
             'file': f'{path}/Lmuscle.ply',
             'force': 100.,
             'focalpt': f'{path}/LmuscleF.off',
-            'method': 'T'                       # loading model: 'U', 'T', 'T+N'
+            'method': 'T'   # loading model: 'U', 'T', 'T+N', 'D' or 'N'
         },
         {
             'file': f'{path}/Rmuscle.off',
@@ -43,12 +38,32 @@ def parms(d={}):
             'method': 'T'
         }
     ]
-    p['food'] = 'fixteeth'  # type of food: 'fixteeth' or 'cylinder'
-    p['fixations'] = {
-        'contact_pts': ['x', 'y', 'z'],  # constrained degrees of freedom
-        'axis_pt1': ['x', 'y', 'z'],
-        'axis_pt2': ['x', 'y', 'z']
-    }
+
+    # list of fixed nodes
+    #   with "name" a description string used for output purposes,
+    #        "nodes" a list of nodes (coordinates) or a mesh file,
+    #        "direction" a list of constrained degrees of freedom
+
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-10.20362, -17.46838, -229.9061],
+                        [-11.92466, 26.3042, -229.5354]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': f'{path}/LTMJ.off',
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-8.716309, 79.13171, 233.8385],
+            'direction': ['x', 'z']
+        }
+    ]
+
+    p['loads'] = [] # additional loads
 
     # material properties
     p['Young'] = 17000.      # [MPa] elastic modulus - bone: 17-20 GPa
@@ -65,15 +80,15 @@ def solve(p={}):
 
     p = parms(p)
 
-    # import json
-    # print(f'parameters={json.dumps(p, indent=4, sort_keys=True)}')
+    import json
+    print(f'parameters={json.dumps(p, indent=4, sort_keys=True)}')
 
     pbl = fem.Problem()
 
     # load main mandible mesh (volume or surface - it will be meshed in 3D)
     import_mesh(p['bone'])
 
-    # define groups
+    # -- define groups
 
     # group (3,1)='all' is the group containing all volume elements
     groups = {}
@@ -82,23 +97,18 @@ def solve(p={}):
     print(f"the mandible mesh has {len(nodeTags)} nodes")
 
     # extract external surface of the mesh => groups['surf']
-    # #   nods_no: tags of the nodes
-    # #   nods_pos: coordinates of these nodes
+    #   nods_no: tags of the nodes
+    #   nods_pos: coordinates of these nodes
     groups['surf'] = (2, 1)
     nods_no, nods_pos = gmsh.model.mesh.getNodesForPhysicalGroup(
         *groups['surf'])
     print(f"the mandible surface has {len(nods_no)} nodes")
     nods_pos = np.reshape(nods_pos, (len(nods_no), 3))
-    # print(f'nods_pos={nods_pos}')
-
-    # load other surface meshes  => groups['axis_pt1'], ...
-    for meshname in ['axis_pt1', 'axis_pt2']:
-        create_group(p[meshname], nods_no, nods_pos, groups, meshname)
 
     # load muscle groups
     mgroups = {}                    # stores muscle group data and loads
     for muscle in p['muscles']:
-        # load focal point
+        # load focal point / loading direction
         if isinstance(muscle['focalpt'], str):
             fullpath = os.path.join(
                 os.path.dirname(__file__), muscle['focalpt'])
@@ -121,11 +131,9 @@ def solve(p={}):
             for i,load in enumerate(loads):
                 f.write(f"{int(ntags[i])}\t{load.x[0]}\t{load.x[1]}\t{load.x[2]}\n")   
 
-    if p['food'] == 'fixteeth':
-        # teeth are fixed along chosen directions
-        create_group(p['contact_pts'], nods_no,
-                     nods_pos, groups, 'contact_pts')
-
+    # create groups of fixed nodes
+    for fix in p['fixations']:
+        create_group(fix['nodes'], nods_no, nods_pos, groups, fix['name'])
 
     # --------------------------------------------------------------------------
     # print('== ADDING MEDIUM...')
@@ -136,14 +144,14 @@ def solve(p={}):
     # material
     do_not_delete.append( fem.Medium(pbl, "all", E=p['Young'], nu=p['Poisson']) )
 
+    # add Dirichlet conditions (fixations)
     # print('== ADDING DIRICHLETs...')
-    # axis of rotation
-    for gname in ['axis_pt1', 'axis_pt2']:
-        for d in p['fixations'][gname]:
-            do_not_delete.append(fem.Dirichlet(pbl, gname, dof=d.upper(), val=0.0) )
+    for fix in p['fixations']:
+        for d in fix['direction']:
+            do_not_delete.append(fem.Dirichlet(pbl, fix['name'], dof=d.upper(), val=0.0) )
 
+    # add Neumann conditions (loads) from muscle loads
     # print('== ADDING NEUMANNs...')
-    # mshpts = geometry.getMesh().getPointSet()
     for name, gr in mgroups.items():
         # print(f'len(gr.ntags)={len(gr.ntags)}')
         for i,load in enumerate(gr.loads):
@@ -151,20 +159,18 @@ def solve(p={}):
             do_not_delete.append(fem.Neumann(pbl, int(gr.ntags[i]), 'Y', load.x[1]) )  # TODO: regler "dof=" qui marche pas
             do_not_delete.append(fem.Neumann(pbl, int(gr.ntags[i]), 'Z', load.x[2]) )
 
-    # type of food
-
-    if p['food'] == 'fixteeth':
-        # teeth are fixed along chosen directions
-        for d in p['fixations']['contact_pts']:
-            do_not_delete.append(fem.Dirichlet(pbl, 'contact_pts', dof=d.upper(), val=0.0) )
-    else:
-        raise Exception('food = "fixteeth" only supported')
+    # add Neumann conditions (loads) from external loads
+    for load in p['loads']:
+        name, nodes, tris, ntags = \
+            create_group(load['nodes'], nods_no, nods_pos, groups, load['name'])
+        for ntag in ntags:
+            for i in range(3):
+                do_not_delete.append(fem.Neumann(pbl, int(ntag), 'XYZ'[i], load['values'][i]) )
 
 
     # python only!
     # do_not_delete.append(fem.Dirichlet(pbl, "all", dof='T', val=0.0) )
 
-    
     # Time integration scheme    
     # print (pbl)
     # print('SOLVE.......')
diff --git a/models/dolicorhynchops/dolicorhynchops_10k.py b/models/dolicorhynchops/dolicorhynchops_10k.py
index 5a3ef2441d43c6a80a06c027238b0a2cff1bb72e..99e195cd8468bc6c925c8192e455e8ed43f569d5 100644
--- a/models/dolicorhynchops/dolicorhynchops_10k.py
+++ b/models/dolicorhynchops/dolicorhynchops_10k.py
@@ -9,10 +9,6 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'10k')
     p['bone'] = f'{path}/mandible.stl'
-    p['contact_pts'] = [[-10.20362, -17.46838, -229.9061],
-                        [-11.92466, 26.3042, -229.5354]]
-    p['axis_pt1'] = f'{path}/LTMJ.off'
-    p['axis_pt2'] = [-8.716309, 79.13171, 233.8385]
     p['muscles'] = [
         {
             'file': f'{path}/Lmuscle.stl',
@@ -28,11 +24,24 @@ def parms(d={}):
             'method': 'T'
         }
     ]
-    p['fixations'] = {
-        'contact_pts': ['x'],
-        'axis_pt1': ['x', 'y', 'z'],
-        'axis_pt2': ['x', 'z']
-    }
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-10.20362, -17.46838, -229.9061],
+                        [-11.92466, 26.3042, -229.5354]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': f'{path}/LTMJ.off',
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-8.716309, 79.13171, 233.8385],
+            'direction': ['x', 'z']
+        }
+    ]
 
     # material properties
     p['density'] = 1.850e-9  # [T/mm³]
diff --git a/models/dolicorhynchops/dolicorhynchops_10k_contact.py b/models/dolicorhynchops/dolicorhynchops_10k_contact.py
index 1a00508c411d103a5e425cde2189e809bcee3d04..2d0ee9670f4200983036117f8d0903cc97b9a6fc 100644
--- a/models/dolicorhynchops/dolicorhynchops_10k_contact.py
+++ b/models/dolicorhynchops/dolicorhynchops_10k_contact.py
@@ -10,9 +10,6 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'10k')
     p['bone'] = f'{path}/mandible.ply'
-    # p['contact_pts'] = f'{path}/teeth.off'
-    p['axis_pt1'] = [0.1458893, -73.13895, 227.3909]
-    p['axis_pt2'] = f'{path}/RTMJ.off'
     p['muscles'] = [
         {
             'file': f'{path}/Lmuscle.ply',
@@ -27,11 +24,18 @@ def parms(d={}):
             'method': 'T'
         }
     ]
-    p['fixations'] = {  
-        'contact_pts': ['x','y','z'],
-        'axis_pt1': ['x','y','z'],
-        'axis_pt2': ['x','y','z']
-    }
+    p['fixations'] = [
+        {
+            'name': 'axis_pt1',
+            'nodes': f'{path}/LTMJ.off',
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-8.716309, 79.13171, 233.8385],
+            'direction': ['x', 'z']
+        }
+    ]
     p['food'] = 'cylinder'
     R = 10
     p['cylinder'] = {
diff --git a/models/dolicorhynchops/dolicorhynchops_10k_extloads.py b/models/dolicorhynchops/dolicorhynchops_10k_extloads.py
new file mode 100644
index 0000000000000000000000000000000000000000..a68ed679e01e1a7b256f3b7bbafe0c301883c1fd
--- /dev/null
+++ b/models/dolicorhynchops/dolicorhynchops_10k_extloads.py
@@ -0,0 +1,75 @@
+#! /usr/bin/env python3
+# -*- coding: utf-8 -*-
+# Dolicorhynchops osborni FHSM VP404
+#   10k faces on the mandible surface
+
+
+def parms(d={}):
+    p = {}
+    import os
+    path = os.path.join(os.path.dirname(__file__),'10k')
+    p['bone'] = f'{path}/mandible.stl'
+    p['muscles'] = [
+        {
+            'file': f'{path}/Lmuscle.stl',
+            'force': 100.,
+            # f'{path}/LmuscleF.off',
+            'focalpt': [-100.1458893, -173.13895, 227.3909],
+            'method': 'U'
+        },
+        {
+            'file': f'{path}/Rmuscle.off',
+            'force': 100.,
+            'focalpt': f'{path}/RmuscleF.off',
+            'method': 'T'
+        }
+    ]
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': [[-10.20362, -17.46838, -229.9061],
+                        [-11.92466, 26.3042, -229.5354]],
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': f'{path}/LTMJ.off',
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': [-8.716309, 79.13171, 233.8385],
+            'direction': ['x', 'z']
+        }
+    ]
+
+    p['loads'] = [
+        {
+            'name': 'force1',
+            'nodes': [-10.20362, -17.46838, -229.9061],
+            'values': [0., 0., -100.]
+        },
+        {
+            'name': 'force2',
+            'nodes': [-11.92466, 26.3042, -229.5354],
+            'values': [0., 0., 100.]
+        }      
+    ]
+
+    # material properties
+    p['density'] = 1.850e-9  # [T/mm³]
+    p['Young'] = 20000.      # [MPa]
+    p['Poisson'] = 0.3       # [-]
+
+    p.update(d)
+    return p
+
+
+def getMetafor(p={}):
+    import bonemodel as model
+    return model.getMetafor(parms(p))
+
+
+if __name__ == "__main__":
+    import models.bonemodel2 as model
+    model.solve(parms())
diff --git a/models/dolicorhynchops/dolicorhynchops_149k.py b/models/dolicorhynchops/dolicorhynchops_149k.py
index bb4824a5df4c6b0cd4fdeff02e60ddc4fc7a637f..4a1e3cd7a9f0728eb318790dce02e0f7c36fb70e 100644
--- a/models/dolicorhynchops/dolicorhynchops_149k.py
+++ b/models/dolicorhynchops/dolicorhynchops_149k.py
@@ -9,9 +9,23 @@ def parms(d={}):
     import os
     path = os.path.join(os.path.dirname(__file__),'149k')
     p['bone'] = f'{path}/mandible_lfs.ply'
-    p['contact_pts'] = f'{path}/teeth.ply'
-    p['axis_pt1'] = f'{path}/LTMJ.ply'
-    p['axis_pt2'] = f'{path}/RTMJ.ply'
+    p['fixations'] = [
+        {
+            'name': 'contact_pts',
+            'nodes': f'{path}/teeth.ply',
+            'direction': 'x'
+        },
+        {
+            'name': 'axis_pt1',
+            'nodes': f'{path}/LTMJ.ply',
+            'direction': ['x', 'y', 'z']
+        },
+        {
+            'name': 'axis_pt2',
+            'nodes': f'{path}/RTMJ.ply',
+            'direction': ['x', 'z']
+        }
+    ]
     p['muscles'] = [
         {
             'file': f'{path}/Lmuscle_lfs.ply',
@@ -26,11 +40,6 @@ def parms(d={}):
             'method': 'T+N'
         }
     ]
-    p['fixations'] = {  
-        'contact_pts': ['x'],
-        'axis_pt1': ['x','y','z'],
-        'axis_pt2': ['x','z']
-    }
 
     # material properties
     p['density'] = 1.850e-9  # [T/mm³]
diff --git a/models/view_cylinder_T.py b/models/view_cylinder_T.py
index a230385ff2c7da2c1df139ba91cebd09d1245f79..6b73ecb334e904122ad8b870f480573966f52653 100644
--- a/models/view_cylinder_T.py
+++ b/models/view_cylinder_T.py
@@ -3,12 +3,16 @@
 #
 # Test of the "boneload.create_loads" subroutine
 #   with a simple geometry (cylinder)
-# The force vectors are computed according to the 'Tangential-Traction Model'
-#   and displayed with VTK 
+# The force vectors are computed according to a chosen model
+#   and displayed with VTK
+#
+# RUN THIS FILE from the "models" directory:
+#  cd models
+#  python view_cylinder_T.py
 
 from boneload import *
 
-if __name__=="__main__":
+if __name__ == "__main__":
 
     # load meshes (main mesh, selection and focal point)
     surface, _, _ = SurfMesh.load('cylinder/cylinder.ply', vertices=False)
@@ -16,8 +20,11 @@ if __name__=="__main__":
     muscleF, focalnodes, _ = SurfMesh.load('cylinder/muscleF.off')
 
     # calls 'create_loads'
-    loads = create_loads(nodes, tris, \
-        total_force=10., target=focalnodes[0], method='T')
+    loads = create_loads(nodes, tris,
+                         total_force=10., 
+                         target=focalnodes[0], 
+                         method='T')  # <= change loading model here
+    #                                      among 'U', 'T', 'T+N', 'N' or 'D'
 
     # add vector field to the surface for display
     muscle.add_vectors(loads)
@@ -26,21 +33,20 @@ if __name__=="__main__":
     # configure 3D display
     view = View()
 
-    view.addActors(surface.actor) 
-    view.addActors(muscle.actor)  
-    view.addActors(muscleF.actor) 
-    view.addActors(forces.actor) 
+    view.addActors(surface.actor)
+    view.addActors(muscle.actor)
+    view.addActors(muscleF.actor)
+    view.addActors(forces.actor)
 
     surface.actor.GetProperty().SetOpacity(0.3)
-    
+
     muscle.mapper.SetResolveCoincidentTopologyToPolygonOffset()
-    muscle.actor.GetProperty().SetColor( colors.GetColor3d('red') )
+    muscle.actor.GetProperty().SetColor(colors.GetColor3d('red'))
     muscle.actor.GetProperty().SetOpacity(0.5)
     muscle.actor.GetProperty().EdgeVisibilityOn()
     muscle.actor.GetProperty().SetPointSize(1.0)
 
     muscleF.actor.GetProperty().SetPointSize(15.0)
-    muscleF.actor.GetProperty().SetColor( colors.GetColor3d('green') )
+    muscleF.actor.GetProperty().SetColor(colors.GetColor3d('green'))
 
     view.interact()
-