diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3034c5b3effcf5e37a8707c470572890a2e61be4..54348f6be35057c50288957f0511a895483df8f2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,7 +18,7 @@
 # Project setup
 ################################################################################
 cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
-project(petrack LANGUAGES CXX VERSION 0.10.2)
+project(petrack LANGUAGES CXX VERSION 0.10.3)
 set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 set(CMAKE_CXX_EXTENSIONS OFF)
diff --git a/demo/00_files/00_empty.pet b/demo/00_files/00_empty.pet
index 629db10d11002be8e2490c5ef5bf68f3371fcb57..b7b25506c25a8444edc241a36581779ad089fa78 100644
--- a/demo/00_files/00_empty.pet
+++ b/demo/00_files/00_empty.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="" STATUS_HEIGHT="0"/>
     <CONTROL TAB="0">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="511.5" CY="383.5" ENABLED="0" EXT_MODEL_ENABLED="1" FIX_CENTER="0" FX="881" FY="881" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="0" EXT_MODEL_ENABLED="1" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/demo/01_calibration/01_intrinsic.pet b/demo/01_calibration/01_intrinsic.pet
index 78fe55296d1484e0387301421ac8607762ccb0b3..8abea774a1de5a417b104d0225d4d8a13a42ec90 100644
--- a/demo/01_calibration/01_intrinsic.pet
+++ b/demo/01_calibration/01_intrinsic.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="" STATUS_HEIGHT="0"/>
     <CONTROL TAB="0">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="947.47000000000003" CY="698.44000000000005" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" FX="857.12" FY="857.50999999999999" IMMUTABLE="0" K4="1.7398640000000001" K5="0.399007" K6="-0.013342" QUAD_ASPECT_RATIO="0" R2="1.358914" R4="0.123435" R6="-0.0091129999999999996" ReprError="0.52066329210560447" S1="0.001026" S2="-6.6000000000000005e-05" S3="-0.00019000000000000001" S4="-9.7999999999999997e-05" TANG_DIST="1" TAUX="-3.0000000000000001e-05" TAUY="-5.0000000000000002e-05" TX="0.000184" TY="-0.000388"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="0" EXT_MODEL_ENABLED="1" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="952.04445892782496" CY="698.71746765411331" FX="842.57112155626476" FY="842.69028289943685" K4="0" K5="0" K6="0" R2="-0.2766259" R4="0.093288489" R6="-0.014229562" ReprError="1.1930548" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="-0.0002467561" TY="5.5423141e-05"/>
+                <EXT_MODEL CX="947.46961721777984" CY="698.44056337756024" FX="857.12444927931074" FY="857.51289718746045" K4="1.7399007" K5="0.39904982" K6="-0.013336699" R2="1.3589505" R4="0.12346415" R6="-0.0091119213" ReprError="0.52066356" S1="0.001025668" S2="-6.6003791e-05" S3="-0.00018953315" S4="-9.7617914e-05" TAUX="-2.980377e-05" TAUY="-5.050141e-05" TX="0.00018436424" TY="-0.00038751212"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/demo/01_calibration/02_extrinsic.pet b/demo/01_calibration/02_extrinsic.pet
index a73fb2ab44118028058a3a43307a69da9f14b6ea..f3b9b566761fb766ce87ef0fc30d065c7b8e306a 100644
--- a/demo/01_calibration/02_extrinsic.pet
+++ b/demo/01_calibration/02_extrinsic.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="../00_files/calibration/extrinsic/00_all.jpg" STATUS_HEIGHT="0"/>
     <CONTROL TAB="0">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="947.47000000000003" CY="698.44000000000005" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" FX="857.12" FY="857.50999999999999" IMMUTABLE="0" K4="1.7398640000000001" K5="0.399007" K6="-0.013342" QUAD_ASPECT_RATIO="0" R2="1.358914" R4="0.123435" R6="-0.0091129999999999996" ReprError="0.52066329210560447" S1="0.001026" S2="-6.6000000000000005e-05" S3="-0.00019000000000000001" S4="-9.7999999999999997e-05" TANG_DIST="1" TAUX="-3.0000000000000001e-05" TAUY="-5.0000000000000002e-05" TX="0.000184" TY="-0.000388"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="947.47000000000003" CY="698.44000000000005" FX="857.12" FY="857.50999999999999" K4="1.739864" K5="0.39900699" K6="-0.013342" R2="1.358914" R4="0.123435" R6="-0.0091129998" ReprError="0.52066332" S1="0.001026" S2="-6.6000001e-05" S3="-0.00019000001" S4="-9.7999997e-05" TAUX="-2.9999999e-05" TAUY="-4.9999999e-05" TX="0.000184" TY="-0.00038799999"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="before.3dc" EXTR_ROT_1="-2.1949999999999998" EXTR_ROT_2="-2.1869999999999998" EXTR_ROT_3="0.029999999999999999" EXTR_TRANS_1="-1047.981" EXTR_TRANS_2="15.172000000000001" EXTR_TRANS_3="-634.48599999999999" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="1" SHOW_CALIB_POINTS="1" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/demo/01_calibration/03_calibrated_with_video.pet b/demo/01_calibration/03_calibrated_with_video.pet
index 368947e988bce196fbd9e90eaa7ab3faf1350d35..039a4099193ffce843ed20c97ab999dbfb300565 100644
--- a/demo/01_calibration/03_calibrated_with_video.pet
+++ b/demo/01_calibration/03_calibrated_with_video.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="../00_files/video/video.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="0">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="947.47000000000003" CY="698.44000000000005" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" FX="857.12" FY="857.50999999999999" IMMUTABLE="0" K4="1.7398640000000001" K5="0.399007" K6="-0.013342" QUAD_ASPECT_RATIO="0" R2="1.358914" R4="0.123435" R6="-0.0091129999999999996" ReprError="0.52066329210560447" S1="0.001026" S2="-6.6000000000000005e-05" S3="-0.00019000000000000001" S4="-9.7999999999999997e-05" TANG_DIST="1" TAUX="-3.0000000000000001e-05" TAUY="-5.0000000000000002e-05" TX="0.000184" TY="-0.000388"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="947.47000000000003" CY="698.44000000000005" FX="857.12" FY="857.50999999999999" K4="1.739864" K5="0.39900699" K6="-0.013342" R2="1.358914" R4="0.123435" R6="-0.0091129998" ReprError="0.52066332" S1="0.001026" S2="-6.6000001e-05" S3="-0.00019000001" S4="-9.7999997e-05" TAUX="-2.9999999e-05" TAUY="-4.9999999e-05" TX="0.000184" TY="-0.00038799999"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="before.3dc" EXTR_ROT_1="-2.1949999999999998" EXTR_ROT_2="-2.1869999999999998" EXTR_ROT_3="0.029999999999999999" EXTR_TRANS_1="-1047.981" EXTR_TRANS_2="15.172000000000001" EXTR_TRANS_3="-634.48599999999999" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/demo/02_recognition/04_recognition.pet b/demo/02_recognition/04_recognition.pet
index 1f1778342494a07df1d3f36b4926f1b2ee074521..a63bda2b98ef67703b2cf266d3a1d5b44bf8e716 100644
--- a/demo/02_recognition/04_recognition.pet
+++ b/demo/02_recognition/04_recognition.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="../00_files/video/video.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="1">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="947.47000000000003" CY="698.44000000000005" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" FX="857.12" FY="857.50999999999999" IMMUTABLE="0" K4="1.7398640000000001" K5="0.399007" K6="-0.013342" QUAD_ASPECT_RATIO="0" R2="1.358914" R4="0.123435" R6="-0.0091129999999999996" ReprError="0.52066329210560447" S1="0.001026" S2="-6.6000000000000005e-05" S3="-0.00019000000000000001" S4="-9.7999999999999997e-05" TANG_DIST="1" TAUX="-3.0000000000000001e-05" TAUY="-5.0000000000000002e-05" TX="0.000184" TY="-0.000388"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="947.47000000000003" CY="698.44000000000005" FX="857.12" FY="857.50999999999999" K4="1.739864" K5="0.39900699" K6="-0.013342" R2="1.358914" R4="0.123435" R6="-0.0091129998" ReprError="0.52066332" S1="0.001026" S2="-6.6000001e-05" S3="-0.00019000001" S4="-9.7999997e-05" TAUX="-2.9999999e-05" TAUY="-4.9999999e-05" TX="0.000184" TY="-0.00038799999"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="../01_calibration/before.3dc" EXTR_ROT_1="-2.1949999999999998" EXTR_ROT_2="-2.1869999999999998" EXTR_ROT_3="0.029999999999999999" EXTR_TRANS_1="-1047.981" EXTR_TRANS_2="15.172000000000001" EXTR_TRANS_3="-634.48599999999999" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/demo/03_tracking/05_tracking.pet b/demo/03_tracking/05_tracking.pet
index 21357d06142b83f6bb310a3c006a8f4b7dbcb4ca..6413308b24b204d1f63785207264c5924df23f52 100644
--- a/demo/03_tracking/05_tracking.pet
+++ b/demo/03_tracking/05_tracking.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="../00_files/video/video.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="2">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="947.47000000000003" CY="698.44000000000005" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" FX="857.12" FY="857.50999999999999" IMMUTABLE="0" K4="1.7398640000000001" K5="0.399007" K6="-0.013342" QUAD_ASPECT_RATIO="0" R2="1.358914" R4="0.123435" R6="-0.0091129999999999996" ReprError="0.52066329210560447" S1="0.001026" S2="-6.6000000000000005e-05" S3="-0.00019000000000000001" S4="-9.7999999999999997e-05" TANG_DIST="1" TAUX="-3.0000000000000001e-05" TAUY="-5.0000000000000002e-05" TX="0.000184" TY="-0.000388"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="947.47000000000003" CY="698.44000000000005" FX="857.12" FY="857.50999999999999" K4="1.739864" K5="0.39900699" K6="-0.013342" R2="1.358914" R4="0.123435" R6="-0.0091129998" ReprError="0.52066332" S1="0.001026" S2="-6.6000001e-05" S3="-0.00019000001" S4="-9.7999997e-05" TAUX="-2.9999999e-05" TAUY="-4.9999999e-05" TX="0.000184" TY="-0.00038799999"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="../01_calibration/before.3dc" EXTR_ROT_1="-2.1949999999999998" EXTR_ROT_2="-2.1869999999999998" EXTR_ROT_3="0.029999999999999999" EXTR_TRANS_1="-1047.981" EXTR_TRANS_2="15.172000000000001" EXTR_TRANS_3="-634.48599999999999" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/demo/03_tracking/06_tracking_with_trajectories.pet b/demo/03_tracking/06_tracking_with_trajectories.pet
index f37aa9205b7aba3ec0111b2d682a8aebc0554dbc..f9a8886d22066ff96438001196138fa6b0f330db 100644
--- a/demo/03_tracking/06_tracking_with_trajectories.pet
+++ b/demo/03_tracking/06_tracking_with_trajectories.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="../00_files/video/video.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="2">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="947.47000000000003" CY="698.44000000000005" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" FX="857.12" FY="857.50999999999999" IMMUTABLE="0" K4="1.7398640000000001" K5="0.399007" K6="-0.013342" QUAD_ASPECT_RATIO="0" R2="1.358914" R4="0.123435" R6="-0.0091129999999999996" ReprError="0.52066329210560447" S1="0.001026" S2="-6.6000000000000005e-05" S3="-0.00019000000000000001" S4="-9.7999999999999997e-05" TANG_DIST="1" TAUX="-3.0000000000000001e-05" TAUY="-5.0000000000000002e-05" TX="0.000184" TY="-0.000388"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="947.47000000000003" CY="698.44000000000005" FX="857.12" FY="857.50999999999999" K4="1.739864" K5="0.39900699" K6="-0.013342" R2="1.358914" R4="0.123435" R6="-0.0091129998" ReprError="0.52066332" S1="0.001026" S2="-6.6000001e-05" S3="-0.00019000001" S4="-9.7999997e-05" TAUX="-2.9999999e-05" TAUY="-4.9999999e-05" TX="0.000184" TY="-0.00038799999"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="../01_calibration/before.3dc" EXTR_ROT_1="-2.1949999999999998" EXTR_ROT_2="-2.1869999999999998" EXTR_ROT_3="0.029999999999999999" EXTR_TRANS_1="-1047.981" EXTR_TRANS_2="15.172000000000001" EXTR_TRANS_3="-634.48599999999999" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/demo/04_correcting/07_corrected.pet b/demo/04_correcting/07_corrected.pet
index 0b1df104e5b8790413fc0eb8a932935e4572be5e..00dac46391a9ab419c59adf018e49e6e687f5983 100644
--- a/demo/04_correcting/07_corrected.pet
+++ b/demo/04_correcting/07_corrected.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="../00_files/video/video.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="2">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="947.47000000000003" CY="698.44000000000005" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" FX="857.12" FY="857.50999999999999" IMMUTABLE="0" K4="1.7398640000000001" K5="0.399007" K6="-0.013342" QUAD_ASPECT_RATIO="0" R2="1.358914" R4="0.123435" R6="-0.0091129999999999996" ReprError="0.52066329210560447" S1="0.001026" S2="-6.6000000000000005e-05" S3="-0.00019000000000000001" S4="-9.7999999999999997e-05" TANG_DIST="1" TAUX="-3.0000000000000001e-05" TAUY="-5.0000000000000002e-05" TX="0.000184" TY="-0.000388"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="947.47000000000003" CY="698.44000000000005" FX="857.12" FY="857.50999999999999" K4="1.739864" K5="0.39900699" K6="-0.013342" R2="1.358914" R4="0.123435" R6="-0.0091129998" ReprError="0.52066332" S1="0.001026" S2="-6.6000001e-05" S3="-0.00019000001" S4="-9.7999997e-05" TAUX="-2.9999999e-05" TAUY="-4.9999999e-05" TX="0.000184" TY="-0.00038799999"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="../01_calibration/before.3dc" EXTR_ROT_1="-2.1949999999999998" EXTR_ROT_2="-2.1869999999999998" EXTR_ROT_3="0.029999999999999999" EXTR_TRANS_1="-1047.981" EXTR_TRANS_2="15.172000000000001" EXTR_TRANS_3="-634.48599999999999" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/src/calibration/autoCalib.cpp b/src/calibration/autoCalib.cpp
index c215e938a8721bd1aa65f58205ed9b1b76a388bd..08c26331ff294e200790950a133e99d15cb2b2c9 100644
--- a/src/calibration/autoCalib.cpp
+++ b/src/calibration/autoCalib.cpp
@@ -116,12 +116,10 @@ bool AutoCalib::openCalibFiles()
  * @param quadAspectRatio whether to fix the aspect ratio
  * @param fixCenter whether to fix the center/focal point
  * @param tangDist whether to use non-zero tangential distortion
- * @param extModel whether to use "extended" calibration model
  *
  * @return new parameters or std::nullopt, if no calibration could be done
  */
-std::optional<IntrinsicCameraParams>
-AutoCalib::autoCalib(bool quadAspectRatio, bool fixCenter, bool tangDist, bool extModel)
+std::optional<IntrinsicModelsParameters> AutoCalib::autoCalib(bool quadAspectRatio, bool fixCenter, bool tangDist)
 {
     if(mMainWindow)
     {
@@ -139,10 +137,13 @@ AutoCalib::autoCalib(bool quadAspectRatio, bool fixCenter, bool tangDist, bool e
         int   flags        = 0;
         std::vector<cv::Point2f>              corners;
         std::vector<std::vector<cv::Point2f>> image_points;
-        cv::Mat                               camera_matrix = cv::Mat::eye(3, 3, CV_64F);
-        cv::Mat                               dist_coeffs   = cv::Mat::zeros(1, 14, CV_64F);
+        cv::Mat                               camera_matrix         = cv::Mat::eye(3, 3, CV_64F);
+        cv::Mat                               distortion_coeffs     = cv::Mat::zeros(1, 14, CV_64F);
+        cv::Mat                               camera_matrix_ext     = cv::Mat::eye(3, 3, CV_64F);
+        cv::Mat                               distortion_coeffs_ext = cv::Mat::zeros(1, 14, CV_64F);
         cv::Mat                               extr_params;
         double                                reproj_errs;
+        double                                reproj_errs_ext;
         cv::Mat                               view, view_gray;
         bool                                  found = false;
         cv::Mat                               origImg;
@@ -259,10 +260,6 @@ AutoCalib::autoCalib(bool quadAspectRatio, bool fixCenter, bool tangDist, bool e
         {
             flags |= CV_CALIB_ZERO_TANGENT_DIST;
         }
-        if(extModel)
-        {
-            flags |= CV_CALIB_RATIONAL_MODEL + CV_CALIB_THIN_PRISM_MODEL + CV_CALIB_TILTED_MODEL;
-        }
 
         bool ok = runCalibration(
             image_points,
@@ -272,10 +269,10 @@ AutoCalib::autoCalib(bool quadAspectRatio, bool fixCenter, bool tangDist, bool e
             aspect_ratio,
             flags,
             camera_matrix,
-            dist_coeffs,
+            distortion_coeffs,
             &reproj_errs);
 
-
+        SPDLOG_INFO("OLD MODEL CALIBRATION");
         SPDLOG_INFO("{}", ok ? "Calibration succeeded." : "Calibration failed.");
         SPDLOG_INFO("Intrinsic reprojection error is: {:f}", reproj_errs);
 
@@ -286,23 +283,68 @@ AutoCalib::autoCalib(bool quadAspectRatio, bool fixCenter, bool tangDist, bool e
         SPDLOG_INFO("distortion coefficients:");
         SPDLOG_INFO(
             "r2: {} r4: {} r6: {}",
-            dist_coeffs.at<double>(0, 0),
-            dist_coeffs.at<double>(0, 1),
-            dist_coeffs.at<double>(0, 4));
-        SPDLOG_INFO("tx: {} ty: {}", dist_coeffs.at<double>(0, 2), dist_coeffs.at<double>(0, 3));
+            distortion_coeffs.at<double>(0, 0),
+            distortion_coeffs.at<double>(0, 1),
+            distortion_coeffs.at<double>(0, 4));
+        SPDLOG_INFO("tx: {} ty: {}", distortion_coeffs.at<double>(0, 2), distortion_coeffs.at<double>(0, 3));
+        SPDLOG_INFO(
+            "k4: {} k5: {} k6: {}",
+            distortion_coeffs.at<double>(0, 5),
+            distortion_coeffs.at<double>(0, 6),
+            distortion_coeffs.at<double>(0, 7));
+
+        SPDLOG_INFO(
+            "s1: {} s2: {} s3: {} s4: {}",
+            distortion_coeffs.at<double>(0, 8),
+            distortion_coeffs.at<double>(0, 9),
+            distortion_coeffs.at<double>(0, 10),
+            distortion_coeffs.at<double>(0, 11));
+        SPDLOG_INFO("taux: {} tauy: {}", distortion_coeffs.at<double>(0, 12), distortion_coeffs.at<double>(0, 13));
+
+
+        flags |= CV_CALIB_RATIONAL_MODEL + CV_CALIB_THIN_PRISM_MODEL + CV_CALIB_TILTED_MODEL;
+
+        bool ok_ext = runCalibration(
+            image_points,
+            view.size(),
+            board_size,
+            square_size,
+            aspect_ratio,
+            flags,
+            camera_matrix_ext,
+            distortion_coeffs_ext,
+            &reproj_errs_ext);
+
+        SPDLOG_INFO("NEW MODEL CALIBRATION");
+        SPDLOG_INFO("{}", ok_ext ? "Calibration succeeded." : "Calibration failed.");
+        SPDLOG_INFO("Intrinsic reprojection error is: {:f}", reproj_errs_ext);
+
+        progress.setValue(mCalibFiles.size());
+
+        SPDLOG_INFO("camera matrix:\n{}", camera_matrix_ext);
+
+        SPDLOG_INFO("distortion coefficients:");
+        SPDLOG_INFO(
+            "r2: {} r4: {} r6: {}",
+            distortion_coeffs_ext.at<double>(0, 0),
+            distortion_coeffs_ext.at<double>(0, 1),
+            distortion_coeffs_ext.at<double>(0, 4));
+        SPDLOG_INFO("tx: {} ty: {}", distortion_coeffs_ext.at<double>(0, 2), distortion_coeffs_ext.at<double>(0, 3));
         SPDLOG_INFO(
             "k4: {} k5: {} k6: {}",
-            dist_coeffs.at<double>(0, 5),
-            dist_coeffs.at<double>(0, 6),
-            dist_coeffs.at<double>(0, 7));
+            distortion_coeffs_ext.at<double>(0, 5),
+            distortion_coeffs_ext.at<double>(0, 6),
+            distortion_coeffs_ext.at<double>(0, 7));
 
         SPDLOG_INFO(
             "s1: {} s2: {} s3: {} s4: {}",
-            dist_coeffs.at<double>(0, 8),
-            dist_coeffs.at<double>(0, 9),
-            dist_coeffs.at<double>(0, 10),
-            dist_coeffs.at<double>(0, 11));
-        SPDLOG_INFO("taux: {} tauy: {}", dist_coeffs.at<double>(0, 12), dist_coeffs.at<double>(0, 13));
+            distortion_coeffs_ext.at<double>(0, 8),
+            distortion_coeffs_ext.at<double>(0, 9),
+            distortion_coeffs_ext.at<double>(0, 10),
+            distortion_coeffs_ext.at<double>(0, 11));
+        SPDLOG_INFO(
+            "taux: {} tauy: {}", distortion_coeffs_ext.at<double>(0, 12), distortion_coeffs_ext.at<double>(0, 13));
+
 
 #ifdef SHOW_CALIB_MAINWINDOW
         // reset view to animation image
@@ -313,13 +355,22 @@ AutoCalib::autoCalib(bool quadAspectRatio, bool fixCenter, bool tangDist, bool e
 #endif
 
         // set calibration values
-        IntrinsicCameraParams params;
-        params.cameraMatrix = camera_matrix;
-        params.cameraMatrix.at<double>(0, 2) += mMainWindow->getImageBorderSize();
-        params.cameraMatrix.at<double>(1, 2) += mMainWindow->getImageBorderSize();
-        dist_coeffs.convertTo(params.distortionCoeffs, CV_32F);
-        params.reprojectionError = reproj_errs;
-        checkParamPlausibility(params);
+        IntrinsicModelsParameters params;
+
+        params.oldModelParams.cameraMatrix = camera_matrix;
+        params.oldModelParams.cameraMatrix.at<double>(0, 2) += mMainWindow->getImageBorderSize();
+        params.oldModelParams.cameraMatrix.at<double>(1, 2) += mMainWindow->getImageBorderSize();
+        distortion_coeffs.convertTo(params.oldModelParams.distortionCoeffs, CV_32F);
+        params.oldModelParams.reprojectionError = reproj_errs;
+        checkParamPlausibility(params.oldModelParams);
+
+        params.extModelParams.cameraMatrix = camera_matrix_ext;
+        params.extModelParams.cameraMatrix.at<double>(0, 2) += mMainWindow->getImageBorderSize();
+        params.extModelParams.cameraMatrix.at<double>(1, 2) += mMainWindow->getImageBorderSize();
+        distortion_coeffs_ext.convertTo(params.extModelParams.distortionCoeffs, CV_32F);
+        params.extModelParams.reprojectionError = reproj_errs_ext;
+        checkParamPlausibility(params.extModelParams);
+
         return params;
     }
     return std::nullopt;
@@ -337,7 +388,7 @@ AutoCalib::autoCalib(bool quadAspectRatio, bool fixCenter, bool tangDist, bool e
  * @param aspect_ratio
  * @param flags[in] Flags for calibration; user input assembled in autoCalib()
  * @param camera_matrix[out]
- * @param dist_coeffs[out] distortion coefficients
+ * @param distortion_coeffs[out] distortion coefficients
  * @param reproj_errs[out]
  * @return
  */
@@ -349,7 +400,7 @@ int AutoCalib::runCalibration(
     float                                 aspect_ratio,
     int                                   flags,
     cv::Mat                              &camera_matrix,
-    cv::Mat                              &dist_coeffs,
+    cv::Mat                              &distortion_coeffs,
     double                               *reproj_errs)
 {
     int code;
@@ -384,7 +435,7 @@ int AutoCalib::runCalibration(
     // (some methods generate less coefficients than others/ normal vs. extended model)
     for(int i = 0; i < dist_coeffs_out.cols; ++i)
     {
-        dist_coeffs.at<double>(i) = dist_coeffs_out.at<double>(i);
+        distortion_coeffs.at<double>(i) = dist_coeffs_out.at<double>(i);
     }
 
     code = 1;
diff --git a/src/calibration/autoCalib.h b/src/calibration/autoCalib.h
index 4c9dcea4c03997575610b7404ad06c17708de98e..7d0256c3a69de8120dec36fd82c24c934424e569 100644
--- a/src/calibration/autoCalib.h
+++ b/src/calibration/autoCalib.h
@@ -28,6 +28,7 @@
 
 class Petrack;
 
+
 /**
  * @brief Class for intrinsic calibration
  *
@@ -82,8 +83,8 @@ public:
     inline void    setLastDir(QString path) { mLastDir = path; }
     inline QString getLastDir() const { return mLastDir; }
 
-    std::optional<IntrinsicCameraParams> autoCalib(bool quadAspectRatio, bool fixCenter, bool tangDist, bool extModel);
-    void                                 checkParamPlausibility(IntrinsicCameraParams &modelParams);
+    virtual std::optional<IntrinsicModelsParameters> autoCalib(bool quadAspectRatio, bool fixCenter, bool tangDist);
+    void                                             checkParamPlausibility(IntrinsicCameraParams &modelParams);
 
 private:
     int runCalibration(
@@ -94,7 +95,7 @@ private:
         float                                 aspect_ratio,
         int                                   flags,
         cv::Mat                              &camera_matrix,
-        cv::Mat                              &dist_coeffs,
+        cv::Mat                              &distortion_coeffs,
         double                               *reproj_errs);
 
     Petrack    *mMainWindow;
diff --git a/src/calibration/extrinsicParameters.h b/src/calibration/extrinsicParameters.h
index 6d2175cfa3679547385f389f824b8c2095d4fb79..06dfe517515e82745a0658368a8f6bcc9cda6351 100644
--- a/src/calibration/extrinsicParameters.h
+++ b/src/calibration/extrinsicParameters.h
@@ -34,6 +34,7 @@ struct ExtrinsicParameters
         return lhs.rot1 == rhs.rot1 && lhs.rot2 == rhs.rot2 && lhs.rot3 == rhs.rot3 && lhs.trans1 == rhs.trans1 &&
                lhs.trans2 == rhs.trans2 && lhs.trans3 == rhs.trans3;
     }
+    friend bool operator!=(const ExtrinsicParameters &lhs, const ExtrinsicParameters &rhs) { return !(lhs == rhs); }
 };
 
 #endif // EXTRINSICPARAMETERS_H
diff --git a/src/calibration/intrinsicCameraParams.h b/src/calibration/intrinsicCameraParams.h
index 0144cdea24536f1fc86991440781f8d9401c858b..8a16bea1fd78d13af10acf718298663fa61653a9 100644
--- a/src/calibration/intrinsicCameraParams.h
+++ b/src/calibration/intrinsicCameraParams.h
@@ -19,6 +19,7 @@
 #ifndef INTRINSICCAMERAPARAMS_H
 #define INTRINSICCAMERAPARAMS_H
 
+
 #include <QMetaType>
 #include <opencv2/core.hpp>
 
@@ -42,7 +43,18 @@
  */
 struct IntrinsicCameraParams
 {
-    IntrinsicCameraParams() {}
+    IntrinsicCameraParams()
+    {
+        constexpr double defaultFocalLength = 881;
+        constexpr double defaultCx          = 551.5;
+        constexpr double defaultCy          = 383.5;
+        setFx(defaultFocalLength);
+        setFy(defaultFocalLength);
+        setCx(defaultCx);
+        setCy(defaultCy);
+
+        // distortionCoeffs already 0-initalized
+    }
     IntrinsicCameraParams(const IntrinsicCameraParams &other);
     IntrinsicCameraParams(IntrinsicCameraParams &&other) = default;
     IntrinsicCameraParams &operator=(const IntrinsicCameraParams &other);
@@ -65,16 +77,107 @@ struct IntrinsicCameraParams
     double getFy() const { return cameraMatrix.at<double>(1, 1); }
     void   setFy(double val) { cameraMatrix.at<double>(1, 1) = val; }
 
+    float getR2() const { return distortionCoeffs.at<float>(0); }
+    void  setR2(float val) { distortionCoeffs.at<float>(0) = val; }
+
+    float getR4() const { return distortionCoeffs.at<float>(1); }
+    void  setR4(float val) { distortionCoeffs.at<float>(1) = val; }
+
+    float getR6() const { return distortionCoeffs.at<float>(4); }
+    void  setR6(float val) { distortionCoeffs.at<float>(4) = val; }
+
+    float getTx() const { return distortionCoeffs.at<float>(2); }
+    void  setTx(float val) { distortionCoeffs.at<float>(2) = val; }
+
+    float getTy() const { return distortionCoeffs.at<float>(3); }
+    void  setTy(float val) { distortionCoeffs.at<float>(3) = val; }
+
+    float getK4() const { return distortionCoeffs.at<float>(5); }
+    void  setK4(float val) { distortionCoeffs.at<float>(5) = val; }
+
+    float getK5() const { return distortionCoeffs.at<float>(6); }
+    void  setK5(float val) { distortionCoeffs.at<float>(6) = val; }
+
+    float getK6() const { return distortionCoeffs.at<float>(7); }
+    void  setK6(float val) { distortionCoeffs.at<float>(7) = val; }
+
+    float getS1() const { return distortionCoeffs.at<float>(8); }
+    void  setS1(float val) { distortionCoeffs.at<float>(8) = val; }
+
+    float getS2() const { return distortionCoeffs.at<float>(9); }
+    void  setS2(float val) { distortionCoeffs.at<float>(9) = val; }
+
+    float getS3() const { return distortionCoeffs.at<float>(10); }
+    void  setS3(float val) { distortionCoeffs.at<float>(10) = val; }
+
+    float getS4() const { return distortionCoeffs.at<float>(11); }
+    void  setS4(float val) { distortionCoeffs.at<float>(11) = val; }
+
+    float getTaux() const { return distortionCoeffs.at<float>(12); }
+    void  setTaux(float val) { distortionCoeffs.at<float>(12) = val; }
+
+    float getTauy() const { return distortionCoeffs.at<float>(13); }
+    void  setTauy(float val) { distortionCoeffs.at<float>(13) = val; }
+
+    float getReprojectionError() const { return reprojectionError; }
+    void  setReprojectionError(float val) { reprojectionError = val; }
 
     friend bool operator==(const IntrinsicCameraParams &lhs, const IntrinsicCameraParams &rhs)
     {
         const bool eqCamMat = cv::countNonZero(lhs.cameraMatrix != rhs.cameraMatrix) == 0;
         const bool eqDist   = cv::countNonZero(lhs.distortionCoeffs != rhs.distortionCoeffs) == 0;
-
-        return eqCamMat && eqDist && (lhs.reprojectionError == rhs.reprojectionError);
+        bool       eqReprError;
+        if(qIsNaN(lhs.reprojectionError) && qIsNaN(rhs.reprojectionError))
+        {
+            eqReprError = true;
+        }
+        else if(!qIsNaN(lhs.reprojectionError) && !qIsNaN(rhs.reprojectionError))
+        {
+            eqReprError = lhs.reprojectionError == rhs.reprojectionError;
+        }
+        else
+        {
+            return false;
+        }
+        return eqCamMat && eqDist && eqReprError;
     }
 
     friend bool operator!=(const IntrinsicCameraParams &lhs, const IntrinsicCameraParams &rhs) { return !(lhs == rhs); }
+
+    friend std::ostream &operator<<(std::ostream &os, IntrinsicCameraParams params)
+    {
+        os << "Camera params: " << std::endl;
+        os << params.getFx() << " " << params.cameraMatrix.at<double>(0, 1) << " " << params.getCx() << std::endl;
+        os << params.cameraMatrix.at<double>(1, 0) << " " << params.getFy() << " " << params.getCy() << std::endl;
+        os << params.cameraMatrix.at<double>(2, 0) << " " << params.cameraMatrix.at<double>(2, 1) << " "
+           << params.cameraMatrix.at<double>(2, 2) << std::endl;
+
+        os << "Distortion params: " << std::endl;
+        os << params.getR2() << " " << params.getR4() << " " << params.getTx() << " " << params.getTy() << " "
+           << params.getR6() << " " << params.getK4() << " " << params.getK5() << " " << params.getK6() << " "
+           << params.getS1() << " " << params.getS2() << " " << params.getS3() << " " << params.getS4() << " "
+           << params.getTaux() << " " << params.getTauy() << std::endl;
+        os << "Reprojection Error: " << params.reprojectionError << std::endl;
+        return os;
+    }
+};
+
+struct IntrinsicModelsParameters
+{
+    IntrinsicCameraParams oldModelParams;
+    IntrinsicCameraParams extModelParams;
+
+    friend bool operator==(const IntrinsicModelsParameters &lhs, const IntrinsicModelsParameters &rhs)
+    {
+        bool eqOldModel = lhs.oldModelParams == rhs.oldModelParams;
+        bool eqExtModel = lhs.extModelParams == rhs.extModelParams;
+        return eqOldModel && eqExtModel;
+    }
+
+    friend bool operator!=(const IntrinsicModelsParameters &lhs, const IntrinsicModelsParameters &rhs)
+    {
+        return !(lhs == rhs);
+    }
 };
 
 Q_DECLARE_METATYPE(IntrinsicCameraParams)
diff --git a/src/petrack.cpp b/src/petrack.cpp
index e77d2f22e2dd7c07a026622418cee43247de4ac9..447547b4137c2fe0c8f40065f550952dd2f6960a 100644
--- a/src/petrack.cpp
+++ b/src/petrack.cpp
@@ -142,8 +142,8 @@ Petrack::Petrack(QString petrackVersion) :
         *getSwapFilter(),
         updateImageCallback);
 
-    auto *intrinsicBox = new IntrinsicBox(this, *getAutoCalib(), *getCalibFilter(), updateImageCallback);
     auto *extrinsicBox = new ExtrinsicBox(this, *getExtrCalibration());
+    auto *intrinsicBox = new IntrinsicBox(this, *getAutoCalib(), *getCalibFilter(), *extrinsicBox, updateImageCallback);
     mImageItem         = new ImageItem(this, nullptr);
     auto *coordSysBox  = new CoordinateSystemBox(
         this,
@@ -812,7 +812,6 @@ void Petrack::openProject(QString fileName, bool openSeq) // default fileName=""
             return;
         }
         mLastTrackerExport = mTrcFileName;
-
         updateWindowTitle();
     }
 }
diff --git a/src/ui/main-windows/control.cpp b/src/ui/main-windows/control.cpp
index 1b0e059d402cd38b656815ed89083c4294117484..0274dda615d8b8e91648ae5dcadcdecaf344b22d 100644
--- a/src/ui/main-windows/control.cpp
+++ b/src/ui/main-windows/control.cpp
@@ -151,7 +151,6 @@ Control::Control(
     auto *gridPBox = new PGroupBox(this, "alignment grid", mGrid);
     ui->verticalLayout_13->insertWidget(4, gridPBox);
 
-
     // integrate new widgets in tabbing order
     QWidget::setTabOrder(mFilterBefore, mIntr);
     QWidget::setTabOrder(mIntr, mExtr);
diff --git a/src/ui/main-windows/intrinsicBox.cpp b/src/ui/main-windows/intrinsicBox.cpp
index 59ca0de97490014e6bc51b10db6e8422024aeea2..b9c260970e1906988c2db87cc287fc56193b3085 100644
--- a/src/ui/main-windows/intrinsicBox.cpp
+++ b/src/ui/main-windows/intrinsicBox.cpp
@@ -20,6 +20,7 @@
 
 #include "autoCalib.h"
 #include "calibFilter.h"
+#include "extrinsicBox.h"
 #include "helper.h"
 #include "pGroupBox.h"
 #include "pMessageBox.h"
@@ -32,8 +33,9 @@ IntrinsicBox::IntrinsicBox(
     QWidget              *parent,
     AutoCalib            &autoCalib,
     CalibFilter          &calibFilter,
+    ExtrinsicBox         &extrBox,
     std::function<void()> updateImageCallback) :
-    IntrinsicBox(parent, new Ui::IntrinsicBox(), autoCalib, calibFilter, updateImageCallback)
+    IntrinsicBox(parent, new Ui::IntrinsicBox(), autoCalib, calibFilter, extrBox, updateImageCallback)
 {
 }
 
@@ -42,15 +44,16 @@ IntrinsicBox::IntrinsicBox(
     Ui::IntrinsicBox     *ui,
     AutoCalib            &autoCalib,
     CalibFilter          &calibFilter,
+    ExtrinsicBox         &extrBox,
     std::function<void()> updateImageCallback) :
     QWidget(parent),
     mUi(ui),
     mAutoCalib(autoCalib),
     mCalibFilter(calibFilter),
+    mExtrBox(extrBox),
     mUpdateImageCallback(std::move(updateImageCallback))
 {
     mUi->setupUi(this);
-    connect(mUi->extModelCheckBox, &QCheckBox::stateChanged, this, &IntrinsicBox::on_extModelCheckBox_stateChanged);
     connect(mUi->autoCalib, &QPushButton::clicked, this, &IntrinsicBox::runAutoCalib);
     connect(mUi->quadAspectRatio, &QCheckBox::clicked, this, &IntrinsicBox::showRecalibrationDialog);
     connect(mUi->fixCenter, &QCheckBox::clicked, this, &IntrinsicBox::showRecalibrationDialog);
@@ -58,7 +61,9 @@ IntrinsicBox::IntrinsicBox(
     // apply intrinsic
     mUi->apply->setCheckState(mCalibFilter.getEnabled() ? Qt::Checked : Qt::Unchecked);
 
-    setIntrinsicCameraParams(mCalibFilter.getCamParams().getValue());
+    mModelsParams.oldModelParams = IntrinsicCameraParams{};
+    mModelsParams.extModelParams = IntrinsicCameraParams{};
+    applyCurrentModelParamsToUi();
     setCalibSettings();
     // FocusPolicy: TabFocus and first ui-element as proxy are needed for tab order
     setFocusProxy(mUi->apply);
@@ -69,71 +74,54 @@ IntrinsicBox::~IntrinsicBox()
     delete mUi;
 }
 
-void IntrinsicBox::setIntrinsicCameraParams(const IntrinsicCameraParams &params)
+void IntrinsicBox::setIntrinsicCameraParams(const IntrinsicModelsParameters params)
 {
-    if(params == mParams)
+    if(params == mModelsParams)
     {
-        // do not send signal if value hasn't changed
         return;
     }
+    mModelsParams = params;
+    applyCurrentModelParamsToUi();
+}
 
+void IntrinsicBox::setCurrentIntrinsicCameraParameters(const IntrinsicCameraParams params)
+{
+    if(mUi->extModelCheckBox->isChecked())
     {
-        // don't want to send signals for intermediate params
-        const QSignalBlocker blocker(this);
-
-        setValue(mUi->fx, params.getFx());
-        setValue(mUi->fy, params.getFy());
-        setValue(mUi->cx, params.getCx());
-        setValue(mUi->cy, params.getCy());
-        setValue(mUi->r2, static_cast<double>(params.distortionCoeffs.at<float>(0)));
-        setValue(mUi->r4, static_cast<double>(params.distortionCoeffs.at<float>(1)));
-        setValue(mUi->tx, static_cast<double>(params.distortionCoeffs.at<float>(2)));
-        setValue(mUi->ty, static_cast<double>(params.distortionCoeffs.at<float>(3)));
-        setValue(mUi->r6, static_cast<double>(params.distortionCoeffs.at<float>(4)));
-        setValue(mUi->k4, static_cast<double>(params.distortionCoeffs.at<float>(5)));
-        setValue(mUi->k5, static_cast<double>(params.distortionCoeffs.at<float>(6)));
-        setValue(mUi->k6, static_cast<double>(params.distortionCoeffs.at<float>(7)));
-        setValue(mUi->s1, static_cast<double>(params.distortionCoeffs.at<float>(8)));
-        setValue(mUi->s2, static_cast<double>(params.distortionCoeffs.at<float>(9)));
-        setValue(mUi->s3, static_cast<double>(params.distortionCoeffs.at<float>(10)));
-        setValue(mUi->s4, static_cast<double>(params.distortionCoeffs.at<float>(11)));
-        setValue(mUi->taux, static_cast<double>(params.distortionCoeffs.at<float>(12)));
-        setValue(mUi->tauy, static_cast<double>(params.distortionCoeffs.at<float>(13)));
-
-        if(params.reprojectionError == std::numeric_limits<float>::quiet_NaN())
-        {
-            mUi->intrError->setText(QString("invalid"));
-        }
-        else
-        {
-            mUi->intrError->setText(QString("%1").arg(params.reprojectionError));
-        }
-
-        // needed here because I surpress signals
-        mParams = params;
+        mModelsParams.extModelParams = params;
+    }
+    else
+    {
+        mModelsParams.oldModelParams = params;
     }
-    emit paramsChanged(mParams);
+    applyCurrentModelParamsToUi();
 }
 
 void IntrinsicBox::imageSizeChanged(int width, int height, int borderDiff)
 {
-    const double cX = mParams.getCx();
-    const double cY = mParams.getCy();
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
 
     mCxFixed = (width - 1) / 2.;
     mCyFixed = (height - 1) / 2.;
-
     if(mUi->fixCenter->isChecked())
     {
-        mUi->cx->setValue(mCxFixed);
-        mUi->cy->setValue(mCyFixed);
+        mModelsParams.oldModelParams.setCx(mCxFixed);
+        mModelsParams.oldModelParams.setCy(mCyFixed);
+        mModelsParams.extModelParams.setCx(mCxFixed);
+        mModelsParams.extModelParams.setCy(mCyFixed);
+        setValueBlocked(mUi->cx, mCxFixed);
+        setValueBlocked(mUi->cy, mCyFixed);
     }
     else
     {
         try
         {
-            setValue(mUi->cx, cX + borderDiff);
-            setValue(mUi->cy, cY + borderDiff);
+            mModelsParams.oldModelParams.setCx(mModelsParams.oldModelParams.getCx() + borderDiff);
+            mModelsParams.oldModelParams.setCy(mModelsParams.oldModelParams.getCy() + borderDiff);
+            mModelsParams.extModelParams.setCx(mModelsParams.extModelParams.getCx() + borderDiff);
+            mModelsParams.extModelParams.setCy(mModelsParams.extModelParams.getCy() + borderDiff);
+            setValueBlocked(mUi->cx, params.getCx() + borderDiff);
+            setValueBlocked(mUi->cy, params.getCy() + borderDiff);
         }
         catch(std::domain_error &)
         {
@@ -143,6 +131,125 @@ void IntrinsicBox::imageSizeChanged(int width, int height, int borderDiff)
                 "The image has a different size for which the current values for cx and cy are not valid anymore.");
         }
     }
+    emit paramsChanged(getIntrinsicCameraParams());
+}
+
+IntrinsicCameraParams IntrinsicBox::getXmlParams(const QDomElement &elem)
+{
+    IntrinsicCameraParams params;
+    if(elem.hasAttribute("FX"))
+    {
+        params.setFx(elem.attribute("FX").toDouble());
+    }
+    if(elem.hasAttribute("FY"))
+    {
+        params.setFy(elem.attribute("FY").toDouble());
+    }
+    if(elem.hasAttribute("CX"))
+    {
+        params.setCx(elem.attribute("CX").toDouble());
+    }
+    if(elem.hasAttribute("CY"))
+    {
+        params.setCy(elem.attribute("CY").toDouble());
+    }
+    if(elem.hasAttribute("R2"))
+    {
+        params.setR2(elem.attribute("R2").toDouble());
+    }
+    if(elem.hasAttribute("R4"))
+    {
+        params.setR4(elem.attribute("R4").toDouble());
+    }
+    if(elem.hasAttribute("R6"))
+    {
+        params.setR6(elem.attribute("R6").toDouble());
+    }
+    if(elem.hasAttribute("TX"))
+    {
+        params.setTx(elem.attribute("TX").toDouble());
+    }
+    if(elem.hasAttribute("TY"))
+    {
+        params.setTy(elem.attribute("TY").toDouble());
+    }
+    if(elem.hasAttribute("K4"))
+    {
+        params.setK4(elem.attribute("K4").toDouble());
+    }
+    if(elem.hasAttribute("K5"))
+    {
+        params.setK5(elem.attribute("K5").toDouble());
+    }
+    if(elem.hasAttribute("K6"))
+    {
+        params.setK6(elem.attribute("K6").toDouble());
+    }
+    if(elem.hasAttribute("S1"))
+    {
+        params.setS1(elem.attribute("S1").toDouble());
+    }
+    if(elem.hasAttribute("S2"))
+    {
+        params.setS2(elem.attribute("S2").toDouble());
+    }
+    if(elem.hasAttribute("S3"))
+    {
+        params.setS3(elem.attribute("S3").toDouble());
+    }
+    if(elem.hasAttribute("S4"))
+    {
+        params.setS4(elem.attribute("S4").toDouble());
+    }
+    if(elem.hasAttribute("TAUX"))
+    {
+        params.setTaux(elem.attribute("TAUX").toDouble());
+    }
+    if(elem.hasAttribute("TAUY"))
+    {
+        params.setTauy(elem.attribute("TAUY").toDouble());
+    }
+    if(elem.hasAttribute("ReprError"))
+    {
+        bool conversionSuccessful;
+        params.reprojectionError = elem.attribute("ReprError").toDouble(&conversionSuccessful);
+        if(!conversionSuccessful)
+        {
+            // Qt sets to inf instead of nan
+            params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
+        }
+    }
+    return params;
+}
+
+void IntrinsicBox::loadCalibFiles(QDomElement &subSubElem)
+{
+    if(subSubElem.hasAttribute("CALIB_FILES"))
+    {
+        QStringList fl = (subSubElem.attribute("CALIB_FILES")).split(",");
+        QString     tmpStr;
+        for(int i = 0; i < fl.size(); ++i)
+        {
+            if((fl[i] = fl[i].trimmed()) == "")
+            {
+                fl.removeAt(i);
+            }
+            else
+            {
+                tmpStr = getExistingFile(fl[i]);
+                if(tmpStr != "")
+                {
+                    fl[i] = tmpStr;
+                }
+            }
+        }
+        // auch setzen, wenn leer, vielleicht ist das ja gewuenscht
+        mAutoCalib.setCalibFiles(fl);
+        if(!fl.isEmpty())
+        {
+            mUi->autoCalib->setEnabled(true);
+        }
+    }
 }
 
 bool IntrinsicBox::getXml(QDomElement &subSubElem)
@@ -164,135 +271,39 @@ bool IntrinsicBox::getXml(QDomElement &subSubElem)
     }
     else if(subSubElem.tagName() == "INTRINSIC_PARAMETERS")
     {
-        IntrinsicCameraParams params;
-        if(subSubElem.hasAttribute("ENABLED"))
-        {
-            mUi->apply->setChecked(subSubElem.attribute("ENABLED").toInt());
-        }
-        if(subSubElem.hasAttribute("FX"))
-        {
-            params.setFx(subSubElem.attribute("FX").toDouble());
-        }
-        if(subSubElem.hasAttribute("FY"))
-        {
-            params.setFy(subSubElem.attribute("FY").toDouble());
-        }
-        if(subSubElem.hasAttribute("CX"))
-        {
-            params.setCx(subSubElem.attribute("CX").toDouble());
-        }
-        if(subSubElem.hasAttribute("CY"))
-        {
-            params.setCy(subSubElem.attribute("CY").toDouble());
-        }
-        if(subSubElem.hasAttribute("R2"))
-        {
-            params.distortionCoeffs.at<float>(0) = subSubElem.attribute("R2").toDouble();
-        }
-        if(subSubElem.hasAttribute("R4"))
-        {
-            params.distortionCoeffs.at<float>(1) = subSubElem.attribute("R4").toDouble();
-        }
-        if(subSubElem.hasAttribute("R6"))
-        {
-            params.distortionCoeffs.at<float>(4) = subSubElem.attribute("R6").toDouble();
-        }
-        if(subSubElem.hasAttribute("TX"))
-        {
-            params.distortionCoeffs.at<float>(2) = subSubElem.attribute("TX").toDouble();
-        }
-        if(subSubElem.hasAttribute("TY"))
-        {
-            params.distortionCoeffs.at<float>(3) = subSubElem.attribute("TY").toDouble();
-        }
-        if(subSubElem.hasAttribute("K4"))
-        {
-            params.distortionCoeffs.at<float>(5) = subSubElem.attribute("K4").toDouble();
-        }
-        if(subSubElem.hasAttribute("K5"))
-        {
-            params.distortionCoeffs.at<float>(6) = subSubElem.attribute("K5").toDouble();
-        }
-        if(subSubElem.hasAttribute("K6"))
-        {
-            params.distortionCoeffs.at<float>(7) = subSubElem.attribute("K6").toDouble();
-        }
-        if(subSubElem.hasAttribute("S1"))
-        {
-            params.distortionCoeffs.at<float>(8) = subSubElem.attribute("S1").toDouble();
-        }
-        if(subSubElem.hasAttribute("S2"))
-        {
-            params.distortionCoeffs.at<float>(9) = subSubElem.attribute("S2").toDouble();
-        }
-        if(subSubElem.hasAttribute("S3"))
-        {
-            params.distortionCoeffs.at<float>(10) = subSubElem.attribute("S3").toDouble();
-        }
-        if(subSubElem.hasAttribute("S4"))
-        {
-            params.distortionCoeffs.at<float>(11) = subSubElem.attribute("S4").toDouble();
-        }
-        if(subSubElem.hasAttribute("TAUX"))
-        {
-            params.distortionCoeffs.at<float>(12) = subSubElem.attribute("TAUX").toDouble();
-        }
-        if(subSubElem.hasAttribute("TAUY"))
-        {
-            params.distortionCoeffs.at<float>(13) = subSubElem.attribute("TAUY").toDouble();
-        }
-        if(subSubElem.hasAttribute("ReprError"))
-        {
-            bool conversionSuccessful;
-            params.reprojectionError = subSubElem.attribute("ReprError").toDouble(&conversionSuccessful);
-            if(!conversionSuccessful)
-            {
-                // Qt sets to inf instead of nan
-                params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
-            }
-        }
-        if(subSubElem.hasAttribute("QUAD_ASPECT_RATIO"))
-        {
-            mUi->quadAspectRatio->setChecked(subSubElem.attribute("QUAD_ASPECT_RATIO").toInt());
-        }
-        if(subSubElem.hasAttribute("FIX_CENTER"))
-        {
-            mUi->fixCenter->setChecked(subSubElem.attribute("FIX_CENTER").toInt());
-        }
-        if(subSubElem.hasAttribute("TANG_DIST"))
-        {
-            mUi->tangDist->setChecked(subSubElem.attribute("TANG_DIST").toInt());
-        }
-        if(subSubElem.hasAttribute("EXT_MODEL_ENABLED"))
-        {
-            mUi->extModelCheckBox->setChecked(subSubElem.attribute("EXT_MODEL_ENABLED").toInt());
-        }
-        if(subSubElem.hasAttribute("CALIB_FILES"))
+        loadValue(subSubElem, "ENABLED", mUi->apply);
+        // signals are supposed to change model values; but since we read them in
+        // from a valid file, no changes are neccessary -> can safely block signals
+        loadValue(subSubElem, "QUAD_ASPECT_RATIO", mUi->quadAspectRatio);
+        loadValue(subSubElem, "FIX_CENTER", mUi->fixCenter);
+        loadValue(subSubElem, "TANG_DIST", mUi->tangDist);
+
+        if(subSubElem.elementsByTagName("OLD_MODEL").isEmpty())
         {
-            QStringList fl = (subSubElem.attribute("CALIB_FILES")).split(",");
-            QString     tmpStr;
-            for(int i = 0; i < fl.size(); ++i)
+            // old file with only one model
+            if(subSubElem.hasAttribute("EXT_MODEL_ENABLED") && subSubElem.attribute("EXT_MODEL_ENABLED").toInt())
             {
-                if((fl[i] = fl[i].trimmed()) == "")
-                {
-                    fl.removeAt(i);
-                }
-                else
-                {
-                    tmpStr = getExistingFile(fl[i]);
-                    if(tmpStr != "")
-                    {
-                        fl[i] = tmpStr;
-                    }
-                }
+                mModelsParams.extModelParams = getXmlParams(subSubElem);
+                mModelsParams.oldModelParams = IntrinsicCameraParams{};
             }
-            // auch setzen, wenn leer, vielleicht ist das ja gewuenscht
-            mAutoCalib.setCalibFiles(fl);
-            if(!fl.isEmpty())
+            else
             {
-                mUi->autoCalib->setEnabled(true);
+                mModelsParams.oldModelParams = getXmlParams(subSubElem);
+                mModelsParams.extModelParams = IntrinsicCameraParams{};
             }
         }
+        else
+        {
+            // new file with multiple models saved
+            mModelsParams.extModelParams = getXmlParams(subSubElem.firstChildElement("EXT_MODEL"));
+            mModelsParams.oldModelParams = getXmlParams(subSubElem.firstChildElement("OLD_MODEL"));
+        }
+        checkModelParams(mModelsParams.oldModelParams);
+        checkModelParams(mModelsParams.extModelParams);
+
+        loadValue(subSubElem, "EXT_MODEL_ENABLED", mUi->extModelCheckBox);
+
+        loadCalibFiles(subSubElem);
 
         const QDomElement root = subSubElem.ownerDocument().firstChildElement("PETRACK");
 
@@ -317,10 +328,20 @@ bool IntrinsicBox::getXml(QDomElement &subSubElem)
                 mUi->extModelCheckBox->setChecked(true);
             }
         }
-
-        setIntrinsicCameraParams(params);
+        if(newerThanVersion(QString("0.10.3"), root.attribute("VERSION")))
+        {
+            IntrinsicCameraParams standardParams{};
+            if(mModelsParams.oldModelParams == standardParams || mModelsParams.extModelParams == standardParams)
+            {
+                PWarning(
+                    this,
+                    tr("PeTrack"),
+                    tr("You are using a project version that only uses one calibration model. To use both, you need to "
+                       "recalibrate"));
+            }
+        }
+        applyCurrentModelParamsToUi();
         setCalibSettings();
-
         if(subSubElem.hasAttribute("IMMUTABLE"))
         {
             if(this->parent())
@@ -350,26 +371,52 @@ void IntrinsicBox::setXml(QDomElement &subElem) const
 
     subSubElem = (subElem.ownerDocument()).createElement("INTRINSIC_PARAMETERS");
     subSubElem.setAttribute("ENABLED", mUi->apply->isChecked());
-    subSubElem.setAttribute("FX", mUi->fx->value());
-    subSubElem.setAttribute("FY", mUi->fy->value());
-    subSubElem.setAttribute("CX", mUi->cx->value());
-    subSubElem.setAttribute("CY", mUi->cy->value());
-    subSubElem.setAttribute("R2", mUi->r2->value());
-    subSubElem.setAttribute("R4", mUi->r4->value());
-    subSubElem.setAttribute("R6", mUi->r6->value());
-    subSubElem.setAttribute("TX", mUi->tx->value());
-    subSubElem.setAttribute("TY", mUi->ty->value());
-    subSubElem.setAttribute("K4", mUi->k4->value());
-    subSubElem.setAttribute("K5", mUi->k5->value());
-    subSubElem.setAttribute("K6", mUi->k6->value());
-    subSubElem.setAttribute("S1", mUi->s1->value());
-    subSubElem.setAttribute("S2", mUi->s2->value());
-    subSubElem.setAttribute("S3", mUi->s3->value());
-    subSubElem.setAttribute("S4", mUi->s4->value());
-    subSubElem.setAttribute("TAUX", mUi->taux->value());
-    subSubElem.setAttribute("TAUY", mUi->tauy->value());
-    subSubElem.setAttribute("ReprError", mParams.reprojectionError);
 
+    auto subSubSubElem = (subSubElem.ownerDocument()).createElement("OLD_MODEL");
+    subSubSubElem.setAttribute("FX", mModelsParams.oldModelParams.getFx());
+    subSubSubElem.setAttribute("FY", mModelsParams.oldModelParams.getFy());
+    subSubSubElem.setAttribute("CX", mModelsParams.oldModelParams.getCx());
+    subSubSubElem.setAttribute("CY", mModelsParams.oldModelParams.getCy());
+    subSubSubElem.setAttribute("R2", mModelsParams.oldModelParams.getR2());
+    subSubSubElem.setAttribute("R4", mModelsParams.oldModelParams.getR4());
+    subSubSubElem.setAttribute("R6", mModelsParams.oldModelParams.getR6());
+    subSubSubElem.setAttribute("TX", mModelsParams.oldModelParams.getTx());
+    subSubSubElem.setAttribute("TY", mModelsParams.oldModelParams.getTy());
+    subSubSubElem.setAttribute("K4", mModelsParams.oldModelParams.getK4());
+    subSubSubElem.setAttribute("K5", mModelsParams.oldModelParams.getK5());
+    subSubSubElem.setAttribute("K6", mModelsParams.oldModelParams.getK6());
+    subSubSubElem.setAttribute("S1", mModelsParams.oldModelParams.getS1());
+    subSubSubElem.setAttribute("S2", mModelsParams.oldModelParams.getS2());
+    subSubSubElem.setAttribute("S3", mModelsParams.oldModelParams.getS3());
+    subSubSubElem.setAttribute("S4", mModelsParams.oldModelParams.getS4());
+    subSubSubElem.setAttribute("TAUX", mModelsParams.oldModelParams.getTaux());
+    subSubSubElem.setAttribute("TAUY", mModelsParams.oldModelParams.getTauy());
+    subSubSubElem.setAttribute("ReprError", mModelsParams.oldModelParams.getReprojectionError());
+
+    subSubElem.appendChild(subSubSubElem);
+
+    subSubSubElem = (subSubElem.ownerDocument()).createElement("EXT_MODEL");
+    subSubSubElem.setAttribute("FX", mModelsParams.extModelParams.getFx());
+    subSubSubElem.setAttribute("FY", mModelsParams.extModelParams.getFy());
+    subSubSubElem.setAttribute("CX", mModelsParams.extModelParams.getCx());
+    subSubSubElem.setAttribute("CY", mModelsParams.extModelParams.getCy());
+    subSubSubElem.setAttribute("R2", mModelsParams.extModelParams.getR2());
+    subSubSubElem.setAttribute("R4", mModelsParams.extModelParams.getR4());
+    subSubSubElem.setAttribute("R6", mModelsParams.extModelParams.getR6());
+    subSubSubElem.setAttribute("TX", mModelsParams.extModelParams.getTx());
+    subSubSubElem.setAttribute("TY", mModelsParams.extModelParams.getTy());
+    subSubSubElem.setAttribute("K4", mModelsParams.extModelParams.getK4());
+    subSubSubElem.setAttribute("K5", mModelsParams.extModelParams.getK5());
+    subSubSubElem.setAttribute("K6", mModelsParams.extModelParams.getK6());
+    subSubSubElem.setAttribute("S1", mModelsParams.extModelParams.getS1());
+    subSubSubElem.setAttribute("S2", mModelsParams.extModelParams.getS2());
+    subSubSubElem.setAttribute("S3", mModelsParams.extModelParams.getS3());
+    subSubSubElem.setAttribute("S4", mModelsParams.extModelParams.getS4());
+    subSubSubElem.setAttribute("TAUX", mModelsParams.extModelParams.getTaux());
+    subSubSubElem.setAttribute("TAUY", mModelsParams.extModelParams.getTauy());
+    subSubSubElem.setAttribute("ReprError", mModelsParams.extModelParams.getReprojectionError());
+
+    subSubElem.appendChild(subSubSubElem);
     subSubElem.setAttribute("QUAD_ASPECT_RATIO", mCalibSettings.quadAspectRatio);
     subSubElem.setAttribute("FIX_CENTER", mCalibSettings.fixCenter);
     subSubElem.setAttribute("TANG_DIST", mCalibSettings.tangDist);
@@ -415,156 +462,172 @@ void IntrinsicBox::showRecalibrationDialog()
 
 void IntrinsicBox::on_fx_valueChanged(double d)
 {
-    mParams.setFx(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setFx(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 
 void IntrinsicBox::on_fy_valueChanged(double d)
 {
-    mParams.setFy(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setFy(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 
 void IntrinsicBox::on_cx_valueChanged(double d)
 {
-    mParams.setCx(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setCx(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 
 void IntrinsicBox::on_cy_valueChanged(double d)
 {
-    mParams.setCy(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setCy(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 
 void IntrinsicBox::on_r2_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(0) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setR2(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 
 void IntrinsicBox::on_r4_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(1) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setR4(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 
 void IntrinsicBox::on_r6_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(4) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setR6(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 void IntrinsicBox::on_s1_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(8) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setS1(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 void IntrinsicBox::on_s2_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(9) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setS2(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 void IntrinsicBox::on_s3_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(10) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setS3(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 void IntrinsicBox::on_s4_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(11) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setS4(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 void IntrinsicBox::on_taux_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(12) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setTaux(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 void IntrinsicBox::on_tauy_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(13) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setTauy(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
-
-
 void IntrinsicBox::on_tx_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(2) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setTx(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 
 void IntrinsicBox::on_ty_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(3) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setTy(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 void IntrinsicBox::on_k4_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(5) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setK4(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 void IntrinsicBox::on_k5_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(6) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setK5(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 void IntrinsicBox::on_k6_valueChanged(double d)
 {
-    mParams.distortionCoeffs.at<float>(7) = static_cast<float>(d);
+    IntrinsicCameraParams params = getIntrinsicCameraParams();
+    params.setK6(d);
+    params.reprojectionError = std::numeric_limits<double>::quiet_NaN();
     mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
 
-    emit paramsChanged(mParams);
+    setCurrentIntrinsicCameraParameters(params);
 }
 
 void IntrinsicBox::on_boardSizeX_valueChanged(int x)
@@ -592,14 +655,14 @@ void IntrinsicBox::setCalibSettings()
 void IntrinsicBox::runAutoCalib()
 {
     auto params = mAutoCalib.autoCalib(
-        mUi->quadAspectRatio->isChecked(),
-        mUi->fixCenter->isChecked(),
-        mUi->tangDist->isChecked(),
-        mUi->extModelCheckBox->isChecked());
+        mUi->quadAspectRatio->isChecked(), mUi->fixCenter->isChecked(), mUi->tangDist->isChecked());
     if(params)
     {
-        setIntrinsicCameraParams(params.value());
         setCalibSettings();
+        IntrinsicModelsParameters validParams = std::move(*params);
+        mModelsParams.oldModelParams          = validParams.oldModelParams;
+        mModelsParams.extModelParams          = validParams.extModelParams;
+        applyCurrentModelParamsToUi();
     }
 }
 void IntrinsicBox::on_calibFiles_clicked()
@@ -610,34 +673,116 @@ void IntrinsicBox::on_calibFiles_clicked()
     }
 }
 
-void IntrinsicBox::on_extModelCheckBox_stateChanged(int i)
+void IntrinsicBox::on_extModelCheckBox_stateChanged(int)
 {
-    if(i == Qt::Checked)
+    bool checked = mUi->extModelCheckBox->isChecked();
+
+    mUi->k4->setEnabled(checked);
+    mUi->k5->setEnabled(checked);
+    mUi->k6->setEnabled(checked);
+    mUi->s1->setEnabled(checked);
+    mUi->s2->setEnabled(checked);
+    mUi->s3->setEnabled(checked);
+    mUi->s4->setEnabled(checked);
+    mUi->taux->setEnabled(checked);
+    mUi->tauy->setEnabled(checked);
+
+    applyCurrentModelParamsToUi();
+}
+
+void IntrinsicBox::on_extModelCheckBox_clicked(bool checked)
+{
+    // clicked only called in user action
+    const ExtrinsicParameters standardExtParams{};
+    if(standardExtParams != mExtrBox.getExtrinsicParameters())
     {
-        mUi->k4->setEnabled(true);
-        mUi->k5->setEnabled(true);
-        mUi->k6->setEnabled(true);
-        mUi->s1->setEnabled(true);
-        mUi->s2->setEnabled(true);
-        mUi->s3->setEnabled(true);
-        mUi->s4->setEnabled(true);
-        mUi->taux->setEnabled(true);
-        mUi->tauy->setEnabled(true);
+        int ret = PCustom(
+            this,
+            tr("PeTrack"),
+            tr("Using different intrinsic calibration would result in a different extrinsic calibration"),
+            {"Delete extrinsic calibration", "Keep intrinsic calibration", "Keep invalid extrinsic calibration"},
+            "Delete extrinsic calibration");
+        if(ret == 0)
+        {
+            mExtrBox.setExtrinsicParameters(standardExtParams);
+        }
+        else if(ret == 1)
+        {
+            mUi->extModelCheckBox->setCheckState(checked ? Qt::Unchecked : Qt::Checked);
+        }
     }
-    else if(i == Qt::Unchecked)
+}
+
+IntrinsicCameraParams IntrinsicBox::getIntrinsicCameraParams() const
+{
+    if(mUi->extModelCheckBox->isChecked())
     {
-        mUi->k4->setDisabled(true);
-        mUi->k5->setDisabled(true);
-        mUi->k6->setDisabled(true);
-        mUi->s1->setDisabled(true);
-        mUi->s2->setDisabled(true);
-        mUi->s3->setDisabled(true);
-        mUi->s4->setDisabled(true);
-        mUi->taux->setDisabled(true);
-        mUi->tauy->setDisabled(true);
+        return mModelsParams.extModelParams;
     }
-    mUi->intrError->setText(QString("invalid"));
-    mParams.reprojectionError = std::numeric_limits<double>::quiet_NaN();
+    else
+    {
+        return mModelsParams.oldModelParams;
+    }
+}
+IntrinsicModelsParameters IntrinsicBox::getBothIntrinsicCameraParams() const
+{
+    return mModelsParams;
+}
+void IntrinsicBox::applyCurrentModelParamsToUi()
+{
+    IntrinsicCameraParams modelParams = getIntrinsicCameraParams();
+
+    setValueBlocked(mUi->fx, modelParams.getFx());
+    setValueBlocked(mUi->fy, modelParams.getFy());
+    setValueBlocked(mUi->cx, modelParams.getCx());
+    setValueBlocked(mUi->cy, modelParams.getCy());
+    setValueBlocked(mUi->r2, static_cast<double>(modelParams.getR2()));
+    setValueBlocked(mUi->r4, static_cast<double>(modelParams.getR4()));
+    setValueBlocked(mUi->tx, static_cast<double>(modelParams.getTx()));
+    setValueBlocked(mUi->ty, static_cast<double>(modelParams.getTy()));
+    setValueBlocked(mUi->r6, static_cast<double>(modelParams.getR6()));
+    setValueBlocked(mUi->k4, static_cast<double>(modelParams.getK4()));
+    setValueBlocked(mUi->k5, static_cast<double>(modelParams.getK5()));
+    setValueBlocked(mUi->k6, static_cast<double>(modelParams.getK6()));
+    setValueBlocked(mUi->s1, static_cast<double>(modelParams.getS1()));
+    setValueBlocked(mUi->s2, static_cast<double>(modelParams.getS2()));
+    setValueBlocked(mUi->s3, static_cast<double>(modelParams.getS3()));
+    setValueBlocked(mUi->s4, static_cast<double>(modelParams.getS4()));
+    setValueBlocked(mUi->taux, static_cast<double>(modelParams.getTaux()));
+    setValueBlocked(mUi->tauy, static_cast<double>(modelParams.getTauy()));
+
+    if(qIsNaN(modelParams.reprojectionError))
+    {
+        mUi->intrError->setText(QString("invalid"));
+    }
+    else
+    {
+        mUi->intrError->setText(QString("%1").arg(modelParams.reprojectionError));
+    }
+
+    emit paramsChanged(modelParams);
+}
+
+void IntrinsicBox::checkModelParams(const IntrinsicCameraParams &modelParams)
+{
+    checkValueValid(mUi->fx, modelParams.getFx());
+    checkValueValid(mUi->fy, modelParams.getFy());
+    checkValueValid(mUi->cx, modelParams.getCx());
+    checkValueValid(mUi->cy, modelParams.getCy());
+    checkValueValid(mUi->r2, static_cast<double>(modelParams.getR2()));
+    checkValueValid(mUi->r4, static_cast<double>(modelParams.getR4()));
+    checkValueValid(mUi->tx, static_cast<double>(modelParams.getTx()));
+    checkValueValid(mUi->ty, static_cast<double>(modelParams.getTy()));
+    checkValueValid(mUi->r6, static_cast<double>(modelParams.getR6()));
+    checkValueValid(mUi->k4, static_cast<double>(modelParams.getK4()));
+    checkValueValid(mUi->k5, static_cast<double>(modelParams.getK5()));
+    checkValueValid(mUi->k6, static_cast<double>(modelParams.getK6()));
+    checkValueValid(mUi->s1, static_cast<double>(modelParams.getS1()));
+    checkValueValid(mUi->s2, static_cast<double>(modelParams.getS2()));
+    checkValueValid(mUi->s3, static_cast<double>(modelParams.getS3()));
+    checkValueValid(mUi->s4, static_cast<double>(modelParams.getS4()));
+    checkValueValid(mUi->taux, static_cast<double>(modelParams.getTaux()));
+    checkValueValid(mUi->tauy, static_cast<double>(modelParams.getTauy()));
 }
 
 void IntrinsicBox::on_quadAspectRatio_stateChanged(int)
diff --git a/src/ui/main-windows/intrinsicBox.h b/src/ui/main-windows/intrinsicBox.h
index 673fed8e0c8a004b1d2bdd186633f5c2389c12dd..4d9e0a446041773e40b1a95130365c3a6cae6d65 100644
--- a/src/ui/main-windows/intrinsicBox.h
+++ b/src/ui/main-windows/intrinsicBox.h
@@ -32,6 +32,8 @@ class IntrinsicBox;
 class CalibFilter;
 class AutoCalib;
 class QDomElement;
+class ExtrinsicBox;
+
 
 struct CalibSettings
 {
@@ -49,12 +51,14 @@ public:
         QWidget              *parent,
         AutoCalib            &autoCalib,
         CalibFilter          &calibFilter,
+        ExtrinsicBox         &extrBox,
         std::function<void()> updateImageCallback);
     explicit IntrinsicBox(
         QWidget              *parent,
         Ui::IntrinsicBox     *ui,
         AutoCalib            &autoCalib,
         CalibFilter          &calibFilter,
+        ExtrinsicBox         &extrBox,
         std::function<void()> updateImageCallback);
     IntrinsicBox(const IntrinsicBox &)            = delete;
     IntrinsicBox(IntrinsicBox &&)                 = delete;
@@ -62,24 +66,30 @@ public:
     IntrinsicBox &operator=(IntrinsicBox &&)      = delete;
     ~IntrinsicBox() override;
 
-    IntrinsicCameraParams getIntrinsicCameraParams() const { return mParams; }
-    void                  setIntrinsicCameraParams(const IntrinsicCameraParams &params);
-    void                  imageSizeChanged(int width, int height, int borderDiff);
-
+    IntrinsicCameraParams     getIntrinsicCameraParams() const;
+    IntrinsicModelsParameters getBothIntrinsicCameraParams() const;
+    void                      setIntrinsicCameraParams(const IntrinsicModelsParameters params);
+    void                      setCurrentIntrinsicCameraParameters(IntrinsicCameraParams params);
+    void                      applyCurrentModelParamsToUi();
+    void                      checkModelParams(const IntrinsicCameraParams &params);
+    void                      imageSizeChanged(int width, int height, int borderDiff);
 
-    bool getXml(QDomElement &subSubElem);
-    void setXml(QDomElement &subSubElem) const;
-    void setCalibSettings();
+    IntrinsicCameraParams getXmlParams(const QDomElement &elem);
+    bool                  getXml(QDomElement &subSubElem);
+    void                  setXml(QDomElement &subSubElem) const;
+    void                  setCalibSettings();
+    void                  loadCalibFiles(QDomElement &subSubElem);
 
 signals:
     void paramsChanged(IntrinsicCameraParams newParams);
 
 private slots:
     void showRecalibrationDialog();
-    void on_extModelCheckBox_stateChanged(int i);
-    void on_quadAspectRatio_stateChanged(int i);
-    void on_fixCenter_stateChanged(int i);
-    void on_tangDist_stateChanged(int i);
+    void on_extModelCheckBox_stateChanged(int);
+    void on_extModelCheckBox_clicked(bool);
+    void on_quadAspectRatio_stateChanged(int);
+    void on_fixCenter_stateChanged(int);
+    void on_tangDist_stateChanged(int);
     void on_fx_valueChanged(double d);
     void on_fy_valueChanged(double d);
     void on_cx_valueChanged(double d);
@@ -109,12 +119,13 @@ public slots:
 
 
 private:
-    Ui::IntrinsicBox     *mUi;
-    IntrinsicCameraParams mParams;
-    CalibSettings         mCalibSettings;
-    AutoCalib            &mAutoCalib;
-    CalibFilter          &mCalibFilter;
-    std::function<void()> mUpdateImageCallback;
+    Ui::IntrinsicBox         *mUi;
+    CalibSettings             mCalibSettings;
+    AutoCalib                &mAutoCalib;
+    CalibFilter              &mCalibFilter;
+    ExtrinsicBox             &mExtrBox;
+    std::function<void()>     mUpdateImageCallback;
+    IntrinsicModelsParameters mModelsParams;
 
     double mCxFixed = 0;
     double mCyFixed = 0;
diff --git a/src/util/helper.cpp b/src/util/helper.cpp
index 6be9730f2fd02460e2da477fe9de981220473cc4..924e70a9fb203abc7eae5cb0bcc301e7b6e841b4 100644
--- a/src/util/helper.cpp
+++ b/src/util/helper.cpp
@@ -20,6 +20,7 @@
 
 #include "logger.h"
 
+#include <QCheckBox>
 #include <opencv2/opencv.hpp>
 
 QString proFileName; ///< Path to the project (.pet) file; used for saving relative paths via getFileList and
@@ -255,3 +256,32 @@ bool newerThanVersion(const QString &q1, const QString &q2)
     }
     return false;
 }
+
+
+void loadValueBlocked(const QDomElement &elem, const QString &name, QCheckBox *widget)
+{
+    if(elem.hasAttribute(name))
+    {
+        QSignalBlocker blocker(widget);
+        setValue(widget, bool(elem.attribute(name).toInt()));
+    }
+}
+
+void setValue(QCheckBox *widget, bool value)
+{
+    widget->setChecked(value);
+}
+
+void setValueBlocked(QCheckBox *widget, bool value)
+{
+    QSignalBlocker blocker(widget);
+    widget->setChecked(value);
+}
+
+void loadValue(const QDomElement &elem, const QString &name, QCheckBox *widget)
+{
+    if(elem.hasAttribute(name))
+    {
+        setValue(widget, bool(elem.attribute(name).toInt()));
+    }
+}
diff --git a/src/util/helper.h b/src/util/helper.h
index 4ff51f20d908c8100bddc6f8ba9e2379508dba75..5bf460aa4acf945df55da7a99a5674b5f0126e25 100644
--- a/src/util/helper.h
+++ b/src/util/helper.h
@@ -23,6 +23,8 @@
 #include <QString>
 #include <opencv2/opencv.hpp>
 
+class QCheckBox;
+
 extern const QString commandLineOptionsString;
 extern QString       proFileName; ///< Path to the project (.pet) file; defined in helper.cpp
 
@@ -288,6 +290,8 @@ T computeMedian(std::vector<T> data)
     return 0.5 * (data[data.size() / 2] + data[(data.size() - 1) / 2]);
 }
 
+#include <QDomElement>
+
 template <typename T>
 void setValue(T widget, double value)
 {
@@ -300,4 +304,59 @@ void setValue(T widget, double value)
     }
     widget->setValue(value);
 }
+
+void setValue(QCheckBox *widget, bool value);
+
+template <typename T>
+void loadValue(const QDomElement &elem, const QString &name, T widget)
+{
+    if(elem.hasAttribute(name))
+    {
+        setValue(widget, elem.attribute(name).toDouble());
+    }
+}
+
+void loadValue(const QDomElement &elem, const QString &name, QCheckBox *widget);
+
+template <typename T>
+void setValueBlocked(T widget, double value)
+{
+    if(widget->minimum() > value || widget->maximum() < value)
+    {
+        std::stringstream ss;
+        ss << "Value " << value << " for " << widget->objectName().toStdString() << " is out of range from "
+           << widget->minimum() << " to " << widget->maximum();
+        throw std::domain_error(ss.str());
+    }
+    widget->blockSignals(true);
+    widget->setValue(value);
+    widget->blockSignals(false);
+}
+
+void setValueBlocked(QCheckBox *widget, bool value);
+
+
+template <typename T>
+void loadValueBlocked(const QDomElement &elem, const QString &name, T widget)
+{
+    if(elem.hasAttribute(name))
+    {
+        QSignalBlocker blocker(widget);
+        setValue(widget, elem.attribute(name).toDouble());
+    }
+}
+
+void loadValueBlocked(const QDomElement &elem, const QString &name, QCheckBox *widget);
+
+template <typename T>
+void checkValueValid(T widget, double value)
+{
+    if(widget->minimum() > value || widget->maximum() < value)
+    {
+        std::stringstream ss;
+        ss << "Value " << value << " for " << widget->objectName().toStdString() << " is out of range from "
+           << widget->minimum() << " to " << widget->maximum();
+        throw std::domain_error(ss.str());
+    }
+}
 #endif
diff --git a/tests/regression_test/data/00_empty.pet b/tests/regression_test/data/00_empty.pet
index 7403a1e233a9f437faf1723113758fba6f07bb96..74e1a4ff6951a6bc21bcc2c2ec3c666712f882e2 100644
--- a/tests/regression_test/data/00_empty.pet
+++ b/tests/regression_test/data/00_empty.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="" STATUS_HEIGHT="0"/>
     <CONTROL TAB="0">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="511.5" CY="383.5" ENABLED="0" EXT_MODEL_ENABLED="0" FIX_CENTER="0" FX="881" FY="881" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="0" EXT_MODEL_ENABLED="0" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="511.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/tests/regression_test/data/01_old_intrinsic_extModel.pet b/tests/regression_test/data/01_old_intrinsic_extModel.pet
new file mode 100644
index 0000000000000000000000000000000000000000..ba1aeba83e854a71d3af144c59c060ce64e10596
--- /dev/null
+++ b/tests/regression_test/data/01_old_intrinsic_extModel.pet
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE PETRACK>
+<PETRACK VERSION="0.10.3">
+    <MAIN SRC="" STATUS_HEIGHT="0"/>
+    <CONTROL TAB="0">
+        <CALIBRATION>
+            <FILTER_BEFORE IMMUTABLE="0"/>
+            <BRIGHTNESS ENABLED="0" VALUE="0"/>
+            <CONTRAST ENABLED="0" VALUE="0"/>
+            <BORDER COLOR="#000000" ENABLED="0" VALUE="0"/>
+            <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
+            <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
+            <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="0" EXT_MODEL_ENABLED="1" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="947.47000000000003" CY="698.44000000000005" FX="857.12" FY="857.50999999999999" K4="1.7399009" K5="0.39905" K6="-0.013337" R2="1.35895" R4="0.123464" R6="-0.0091120005" ReprError="0.52066356" S1="0.001026" S2="-6.6000001e-05" S3="-0.00019000001" S4="-9.7999997e-05" TAUX="-2.9999999e-05" TAUY="-5.0999999e-05" TX="0.000184" TY="-0.00038799999"/>
+            </INTRINSIC_PARAMETERS>
+            <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
+            <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
+        </CALIBRATION>
+        <RECOGNITION>
+            <PERFORM ENABLED="0" METHOD="5" STEP="1"/>
+            <REGION_OF_INTEREST FIX="0" HEIGHT="0" SHOW="0" WIDTH="0" X="0" Y="0"/>
+            <MARKER BRIGHTNESS="50" IGNORE_WITHOUT="1"/>
+            <SIZE_COLOR AUTO_WB="0" DEFAULT_HEIGHT="180" GREY_LEVEL="50" MAP_NUMBER="0" MODEL="0" SHOW="1" SYMBOL_SIZE="10" X="0" Y="1" Z="255">
+                <MAP COLORED="1" FROM_HUE="0" FROM_SAT="0" FROM_VAL="128" HEIGHT="255" INV_HUE="0" MAP_HEIGHT="180" TO_HUE="359" TO_SAT="255" TO_VAL="255" WIDTH="359" X="0" Y="0"/>
+            </SIZE_COLOR>
+            <READ_HEIGHTS HEIGHT_FILE=""/>
+            <READ_MARKER_IDS MARKER_FILE=""/>
+        </RECOGNITION>
+        <TRACKING>
+            <ONLINE_CALCULATION ENABLED="0"/>
+            <REPEAT_BELOW ENABLED="1" QUALITY="50"/>
+            <EXTRAPOLATION ENABLED="1"/>
+            <MERGE ENABLED="0"/>
+            <ONLY_VISIBLE ENABLED="1"/>
+            <REGION_OF_INTEREST FIX="0" HEIGHT="0" SHOW="0" WIDTH="0" X="0" Y="0"/>
+            <SEARCH_MISSING_FRAMES ENABLED="1"/>
+            <RECALCULATE_MEDIAN_HEIGHT ENABLED="1"/>
+            <ALLOW_ALTERNATE_HEIGHT ENABLED="0"/>
+            <EXPORT_ELIMINATE_TRACKPOINT_WITHOUT_HEIGHT ENABLED="0"/>
+            <EXPORT_ELIMINATE_TRAJECTORY_WITHOUT_HEIGHT ENABLED="0"/>
+            <EXPORT_SMOOTH ENABLED="1"/>
+            <EXPORT_VIEWING_DIRECTION ENABLED="0"/>
+            <EXPORT_ANGLE_OF_VIEW ENABLED="0"/>
+            <EXPORT_USE_METER ENABLED="0"/>
+            <EXPORT_COMMENT ENABLED="0"/>
+            <EXPORT_MARKERID ENABLED="0"/>
+            <TRACK_FILE FILENAME=""/>
+            <SEARCH_REGION ADAPTIVE="0" LEVELS="3" MAX_ERROR="0" SCALE="16" SHOW="0"/>
+            <PATH AFTER="15" BEFORE="15" COLLECTIVE_COLOR_SIZE="11" COLOR_MARKER_LINE_WIDTH="1" COLOR_MARKER_SIZE="14" CURRENT_POINT_LINE_WIDTH="1" CURRENT_POINT_SIZE="60" FIX="0" GROUND_PATH_SIZE="1" GROUND_POSITION_SIZE="1" HEAD_SIZE="1" NUMBER_BOLD="1" NUMBER_SIZE="14" ONLY_PEOPLE="0" ONLY_PEOPLE_LIST="0" ONLY_PEOPLE_NR="1" ONLY_PEOPLE_NR_LIST="" ONLY_VISIBLE="0" PATH_SIZE="2" POINTS_COLORED="1" POINTS_SIZE="7" SHOW="1" SHOW_COLLECTIVE_COLOR="1" SHOW_COLOR_MARKER="1" SHOW_CURRENT_POINT="1" SHOW_GROUND_PATH="0" SHOW_GROUND_POSITION="0" SHOW_NUMBER="1" SHOW_PATH="1" SHOW_POINTS="0" SHOW_POINTS_LINE_WIDTH="1" TRACK_GROUND_PATH_COLOR="#00ff00" TRACK_PATH_COLOR="#ff0000"/>
+        </TRACKING>
+        <ANALYSIS>
+            <SEARCH_MISSING_FRAMES ENABLED="1"/>
+            <MARK_ACTUAL ENABLED="0"/>
+            <CALCULATION ABSOLUTE="0" CONSIDER_X="0" CONSIDER_Y="1" REVERSE="0" SHOW_VORONOI="0" STEP_SIZE="25"/>
+        </ANALYSIS>
+        <CORRECTION>
+            <EQUALITY DISTANCE="0.5" ENABLED="1"/>
+            <VELOCITY ENABLED="1"/>
+            <LENGTH ENABLED="1" MIN_LENGTH="10"/>
+            <INSIDE ENABLED="1" MARGIN="30"/>
+        </CORRECTION>
+    </CONTROL>
+    <EXTR_CALIBRATION>
+        <REPROJECTION_ERROR AVG_DH="0" AVG_PH="0" AVG_PX="0" MAX_DH="0" MAX_PH="0" MAX_PX="0" SD_DH="0" SD_PH="0" SD_PX="0" USED_HEIGHT="0"/>
+    </EXTR_CALIBRATION>
+    <STEREO>
+        <DISPARITY ALGO="0" COLOR="0" HIDE_INVALID="1" OPACITY="100" SHOW="0">
+            <VALUES MAX="100" MIN="0"/>
+            <MASK EDGE_SIZE="5" SIZE="7" USE_EDGE="0"/>
+            <USE CALIB_CENTER="1" EXPORT="0" HEIGHT="0" HEIGHT_EVER="1" RECO="0"/>
+        </DISPARITY>
+    </STEREO>
+    <COLOR_MARKER>
+        <MASK MASK="1" OPACITY="100" SHOW="0"/>
+        <FROM_COLOR HUE="0" SATURATION="0" VALUE="128"/>
+        <TO_COLOR HUE="359" SATURATION="255" VALUE="255"/>
+        <PARAM CLOSE_RADIUS="5" CLOSE_USED="1" INVERS_HUE="0" MAX_AREA="5000" MAX_RATIO="2" MIN_AREA="1000" OPEN_RADIUS="5" OPEN_USED="1"/>
+    </COLOR_MARKER>
+    <CODE_MARKER>
+        <DICTIONARY ID="0"/>
+        <PARAM ADAPTIVE_THRESH_CONSTANT="7" ADAPTIVE_THRESH_WIN_SIZE_MAX="27" ADAPTIVE_THRESH_WIN_SIZE_MIN="3" ADAPTIVE_THRESH_WIN_SIZE_STEP="10" CORNER_REFINEMENT="0" CORNER_REFINEMENT_MAX_ITERATIONS="30" CORNER_REFINEMENT_MIN_ACCURACY="0.10000000000000001" CORNER_REFINEMENT_WIN_SIZE="5" ERROR_CORRECTION_RATE="0.59999999999999998" MARKER_BORDER_BITS="1" MAX_ERRONEOUS_BITS_IN_BORDER_RATE="0.34999999999999998" MAX_MARKER_PERIMETER="15" MAX_RATIO_ERROR="0.029999999999999999" MIN_CORNER_DISTANCE="0.050000000000000003" MIN_DISTANCE_TO_BORDER="3" MIN_MARKER_DISTANCE="0.050000000000000003" MIN_MARKER_PERIMETER="5" MIN_OTSU_STD_DEV="5" PERSPECTIVE_REMOVE_IGNORED_MARGIN_PER_CELL="0.13" PERSPECTIVE_REMOVE_PIXEL_PER_CELL="4" SHOW_DETECTED_CANDIDATES="0"/>
+    </CODE_MARKER>
+    <MULTI_COLOR_MARKER>
+        <BLACK_DOT IGNORE_WITHOUT="1" RESTRICT_POSITION="0" SIZE="5" USE="1" USE_COLOR="0"/>
+        <CODE_MARKER USE="0"/>
+        <AUTO_CORRECT ONLY_EXPORT="0" USE="0"/>
+        <MASK MASK="1" OPACITY="100" SHOW="0"/>
+        <PARAM CLOSE_RADIUS="5" CLOSE_USED="1" MAX_AREA="5000" MAX_RATIO="2" MIN_AREA="1000" OPEN_RADIUS="5" OPEN_USED="1" USE_HEAD_SIZE="0"/>
+    </MULTI_COLOR_MARKER>
+    <MOCAP COLOR="#ffff37" SHOW="0" SIZE="2"/>
+    <PLAYER FRAME="-1" PLAYBACK_FPS="-1" PLAYER_SPEED_FIXED="0" SEQUENCE_FPS="-1" SOURCE_FRAME_IN="-1" SOURCE_FRAME_OUT="-1"/>
+    <VIEW ANTIALIAS="0" CAMERA="2" HIDE_CONTROLS="0" OPENGL="0" SAVE_TRANSFORMED="0" TRANSFORMATION="250 0 0 0"/>
+    <AUTO_TRACK BACK_TRACK="1" OPTIMZE_COLOR="0"/>
+    <MISSING_FRAMES executed="0"/>
+</PETRACK>
diff --git a/tests/regression_test/data/01_old_intrinsic_extModel_truth.pet b/tests/regression_test/data/01_old_intrinsic_extModel_truth.pet
new file mode 100644
index 0000000000000000000000000000000000000000..d178a73d6e32f02b7264ae8837fe091273df9679
--- /dev/null
+++ b/tests/regression_test/data/01_old_intrinsic_extModel_truth.pet
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE PETRACK>
+<PETRACK VERSION="0.10.3">
+    <MAIN SRC="" STATUS_HEIGHT="0"/>
+    <CONTROL TAB="0">
+        <CALIBRATION>
+            <FILTER_BEFORE IMMUTABLE="0"/>
+            <BRIGHTNESS ENABLED="0" VALUE="0"/>
+            <CONTRAST ENABLED="0" VALUE="0"/>
+            <BORDER COLOR="#000000" ENABLED="0" VALUE="0"/>
+            <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
+            <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
+            <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="0" EXT_MODEL_ENABLED="1" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="947.47000000000003" CY="698.44000000000005" FX="857.12" FY="857.50999999999999" K4="1.7399009" K5="0.39905" K6="-0.013337" R2="1.35895" R4="0.123464" R6="-0.0091120005" ReprError="0.52066356" S1="0.001026" S2="-6.6000001e-05" S3="-0.00019000001" S4="-9.7999997e-05" TAUX="-2.9999999e-05" TAUY="-5.0999999e-05" TX="0.000184" TY="-0.00038799999"/>
+            </INTRINSIC_PARAMETERS>
+            <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
+            <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
+        </CALIBRATION>
+        <RECOGNITION>
+            <PERFORM ENABLED="0" METHOD="5" STEP="1"/>
+            <REGION_OF_INTEREST FIX="0" HEIGHT="0" SHOW="0" WIDTH="0" X="0" Y="0"/>
+            <MARKER BRIGHTNESS="50" IGNORE_WITHOUT="1"/>
+            <SIZE_COLOR AUTO_WB="0" DEFAULT_HEIGHT="180" GREY_LEVEL="50" MAP_NUMBER="0" MODEL="0" SHOW="1" SYMBOL_SIZE="10" X="0" Y="1" Z="255">
+                <MAP COLORED="1" FROM_HUE="0" FROM_SAT="0" FROM_VAL="128" HEIGHT="255" INV_HUE="0" MAP_HEIGHT="180" TO_HUE="359" TO_SAT="255" TO_VAL="255" WIDTH="359" X="0" Y="0"/>
+            </SIZE_COLOR>
+            <READ_HEIGHTS HEIGHT_FILE=""/>
+            <READ_MARKER_IDS MARKER_FILE=""/>
+        </RECOGNITION>
+        <TRACKING>
+            <ONLINE_CALCULATION ENABLED="0"/>
+            <REPEAT_BELOW ENABLED="1" QUALITY="50"/>
+            <EXTRAPOLATION ENABLED="1"/>
+            <MERGE ENABLED="0"/>
+            <ONLY_VISIBLE ENABLED="1"/>
+            <REGION_OF_INTEREST FIX="0" HEIGHT="0" SHOW="0" WIDTH="0" X="0" Y="0"/>
+            <SEARCH_MISSING_FRAMES ENABLED="1"/>
+            <RECALCULATE_MEDIAN_HEIGHT ENABLED="1"/>
+            <ALLOW_ALTERNATE_HEIGHT ENABLED="0"/>
+            <EXPORT_ELIMINATE_TRACKPOINT_WITHOUT_HEIGHT ENABLED="0"/>
+            <EXPORT_ELIMINATE_TRAJECTORY_WITHOUT_HEIGHT ENABLED="0"/>
+            <EXPORT_SMOOTH ENABLED="1"/>
+            <EXPORT_VIEWING_DIRECTION ENABLED="0"/>
+            <EXPORT_ANGLE_OF_VIEW ENABLED="0"/>
+            <EXPORT_USE_METER ENABLED="0"/>
+            <EXPORT_COMMENT ENABLED="0"/>
+            <EXPORT_MARKERID ENABLED="0"/>
+            <TRACK_FILE FILENAME=""/>
+            <SEARCH_REGION ADAPTIVE="0" LEVELS="3" MAX_ERROR="0" SCALE="16" SHOW="0"/>
+            <PATH AFTER="15" BEFORE="15" COLLECTIVE_COLOR_SIZE="11" COLOR_MARKER_LINE_WIDTH="1" COLOR_MARKER_SIZE="14" CURRENT_POINT_LINE_WIDTH="1" CURRENT_POINT_SIZE="60" FIX="0" GROUND_PATH_SIZE="1" GROUND_POSITION_SIZE="1" HEAD_SIZE="1" NUMBER_BOLD="1" NUMBER_SIZE="14" ONLY_PEOPLE="0" ONLY_PEOPLE_LIST="0" ONLY_PEOPLE_NR="1" ONLY_PEOPLE_NR_LIST="" ONLY_VISIBLE="0" PATH_SIZE="2" POINTS_COLORED="1" POINTS_SIZE="7" SHOW="1" SHOW_COLLECTIVE_COLOR="1" SHOW_COLOR_MARKER="1" SHOW_CURRENT_POINT="1" SHOW_GROUND_PATH="0" SHOW_GROUND_POSITION="0" SHOW_NUMBER="1" SHOW_PATH="1" SHOW_POINTS="0" SHOW_POINTS_LINE_WIDTH="1" TRACK_GROUND_PATH_COLOR="#00ff00" TRACK_PATH_COLOR="#ff0000"/>
+        </TRACKING>
+        <ANALYSIS>
+            <SEARCH_MISSING_FRAMES ENABLED="1"/>
+            <MARK_ACTUAL ENABLED="0"/>
+            <CALCULATION ABSOLUTE="0" CONSIDER_X="0" CONSIDER_Y="1" REVERSE="0" SHOW_VORONOI="0" STEP_SIZE="25"/>
+        </ANALYSIS>
+        <CORRECTION>
+            <EQUALITY DISTANCE="0.5" ENABLED="1"/>
+            <VELOCITY ENABLED="1"/>
+            <LENGTH ENABLED="1" MIN_LENGTH="10"/>
+            <INSIDE ENABLED="1" MARGIN="30"/>
+        </CORRECTION>
+    </CONTROL>
+    <EXTR_CALIBRATION>
+        <REPROJECTION_ERROR AVG_DH="0" AVG_PH="0" AVG_PX="0" MAX_DH="0" MAX_PH="0" MAX_PX="0" SD_DH="0" SD_PH="0" SD_PX="0" USED_HEIGHT="0"/>
+    </EXTR_CALIBRATION>
+    <STEREO>
+        <DISPARITY ALGO="0" COLOR="0" HIDE_INVALID="1" OPACITY="100" SHOW="0">
+            <VALUES MAX="100" MIN="0"/>
+            <MASK EDGE_SIZE="5" SIZE="7" USE_EDGE="0"/>
+            <USE CALIB_CENTER="1" EXPORT="0" HEIGHT="0" HEIGHT_EVER="1" RECO="0"/>
+        </DISPARITY>
+    </STEREO>
+    <COLOR_MARKER>
+        <MASK MASK="1" OPACITY="100" SHOW="0"/>
+        <FROM_COLOR HUE="0" SATURATION="0" VALUE="128"/>
+        <TO_COLOR HUE="359" SATURATION="255" VALUE="255"/>
+        <PARAM CLOSE_RADIUS="5" CLOSE_USED="1" INVERS_HUE="0" MAX_AREA="5000" MAX_RATIO="2" MIN_AREA="1000" OPEN_RADIUS="5" OPEN_USED="1"/>
+    </COLOR_MARKER>
+    <CODE_MARKER>
+        <DICTIONARY ID="0"/>
+        <PARAM ADAPTIVE_THRESH_CONSTANT="7" ADAPTIVE_THRESH_WIN_SIZE_MAX="27" ADAPTIVE_THRESH_WIN_SIZE_MIN="3" ADAPTIVE_THRESH_WIN_SIZE_STEP="10" CORNER_REFINEMENT="0" CORNER_REFINEMENT_MAX_ITERATIONS="30" CORNER_REFINEMENT_MIN_ACCURACY="0.10000000000000001" CORNER_REFINEMENT_WIN_SIZE="5" ERROR_CORRECTION_RATE="0.59999999999999998" MARKER_BORDER_BITS="1" MAX_ERRONEOUS_BITS_IN_BORDER_RATE="0.34999999999999998" MAX_MARKER_PERIMETER="15" MAX_RATIO_ERROR="0.029999999999999999" MIN_CORNER_DISTANCE="0.050000000000000003" MIN_DISTANCE_TO_BORDER="3" MIN_MARKER_DISTANCE="0.050000000000000003" MIN_MARKER_PERIMETER="5" MIN_OTSU_STD_DEV="5" PERSPECTIVE_REMOVE_IGNORED_MARGIN_PER_CELL="0.13" PERSPECTIVE_REMOVE_PIXEL_PER_CELL="4" SHOW_DETECTED_CANDIDATES="0"/>
+    </CODE_MARKER>
+    <MULTI_COLOR_MARKER>
+        <BLACK_DOT IGNORE_WITHOUT="1" RESTRICT_POSITION="0" SIZE="5" USE="1" USE_COLOR="0"/>
+        <CODE_MARKER USE="0"/>
+        <AUTO_CORRECT ONLY_EXPORT="0" USE="0"/>
+        <MASK MASK="1" OPACITY="100" SHOW="0"/>
+        <PARAM CLOSE_RADIUS="5" CLOSE_USED="1" MAX_AREA="5000" MAX_RATIO="2" MIN_AREA="1000" OPEN_RADIUS="5" OPEN_USED="1" USE_HEAD_SIZE="0"/>
+    </MULTI_COLOR_MARKER>
+    <MOCAP COLOR="#ffff37" SHOW="0" SIZE="2"/>
+    <PLAYER FRAME="-1" PLAYBACK_FPS="-1" PLAYER_SPEED_FIXED="0" SEQUENCE_FPS="-1" SOURCE_FRAME_IN="0" SOURCE_FRAME_OUT="-1"/>
+    <VIEW ANTIALIAS="0" CAMERA="2" HIDE_CONTROLS="0" OPENGL="0" SAVE_TRANSFORMED="0" TRANSFORMATION="250 0 0 0"/>
+    <AUTO_TRACK BACK_TRACK="1" OPTIMZE_COLOR="0"/>
+    <MISSING_FRAMES executed="0"/>
+</PETRACK>
diff --git a/tests/regression_test/data/01_intrinsic.pet b/tests/regression_test/data/01_old_intrinsic_oldModel.pet
similarity index 90%
rename from tests/regression_test/data/01_intrinsic.pet
rename to tests/regression_test/data/01_old_intrinsic_oldModel.pet
index 8d17958321cc836d4cd743ac1ed60fc20b560f13..6c5eabc4fd16dd62cf56752b53123f63d5d787b7 100644
--- a/tests/regression_test/data/01_intrinsic.pet
+++ b/tests/regression_test/data/01_old_intrinsic_oldModel.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="" STATUS_HEIGHT="0"/>
     <CONTROL TAB="0">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="952.03999999999996" CY="698.72000000000003" ENABLED="0" EXT_MODEL_ENABLED="0" FIX_CENTER="0" FX="842.57000000000005" FY="842.69000000000005" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.27662599999999998" R4="0.093287999999999996" R6="-0.01423" ReprError="1.1930544727952612" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="-0.00024699999999999999" TY="5.5000000000000002e-05"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="0" EXT_MODEL_ENABLED="0" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="952.03999999999996" CY="698.72000000000003" FX="842.57000000000005" FY="842.69000000000005" K4="0" K5="0" K6="0" R2="-0.27662599" R4="0.093287997" R6="-0.01423" ReprError="1.1930544" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="-0.00024699999" TY="5.5e-05"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/tests/regression_test/data/01_old_intrinsic_oldModel_truth.pet b/tests/regression_test/data/01_old_intrinsic_oldModel_truth.pet
new file mode 100644
index 0000000000000000000000000000000000000000..6c5eabc4fd16dd62cf56752b53123f63d5d787b7
--- /dev/null
+++ b/tests/regression_test/data/01_old_intrinsic_oldModel_truth.pet
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE PETRACK>
+<PETRACK VERSION="0.10.3">
+    <MAIN SRC="" STATUS_HEIGHT="0"/>
+    <CONTROL TAB="0">
+        <CALIBRATION>
+            <FILTER_BEFORE IMMUTABLE="0"/>
+            <BRIGHTNESS ENABLED="0" VALUE="0"/>
+            <CONTRAST ENABLED="0" VALUE="0"/>
+            <BORDER COLOR="#000000" ENABLED="0" VALUE="0"/>
+            <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
+            <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
+            <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="0" EXT_MODEL_ENABLED="0" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="952.03999999999996" CY="698.72000000000003" FX="842.57000000000005" FY="842.69000000000005" K4="0" K5="0" K6="0" R2="-0.27662599" R4="0.093287997" R6="-0.01423" ReprError="1.1930544" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="-0.00024699999" TY="5.5e-05"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
+            <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
+            <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
+        </CALIBRATION>
+        <RECOGNITION>
+            <PERFORM ENABLED="0" METHOD="5" STEP="1"/>
+            <REGION_OF_INTEREST FIX="0" HEIGHT="0" SHOW="0" WIDTH="0" X="0" Y="0"/>
+            <MARKER BRIGHTNESS="50" IGNORE_WITHOUT="1"/>
+            <SIZE_COLOR AUTO_WB="0" DEFAULT_HEIGHT="180" GREY_LEVEL="50" MAP_NUMBER="0" MODEL="0" SHOW="1" SYMBOL_SIZE="10" X="0" Y="1" Z="255">
+                <MAP COLORED="1" FROM_HUE="0" FROM_SAT="0" FROM_VAL="128" HEIGHT="255" INV_HUE="0" MAP_HEIGHT="180" TO_HUE="359" TO_SAT="255" TO_VAL="255" WIDTH="359" X="0" Y="0"/>
+            </SIZE_COLOR>
+            <READ_HEIGHTS HEIGHT_FILE=""/>
+            <READ_MARKER_IDS MARKER_FILE=""/>
+        </RECOGNITION>
+        <TRACKING>
+            <ONLINE_CALCULATION ENABLED="0"/>
+            <REPEAT_BELOW ENABLED="1" QUALITY="50"/>
+            <EXTRAPOLATION ENABLED="1"/>
+            <MERGE ENABLED="0"/>
+            <ONLY_VISIBLE ENABLED="1"/>
+            <REGION_OF_INTEREST FIX="0" HEIGHT="0" SHOW="0" WIDTH="0" X="0" Y="0"/>
+            <SEARCH_MISSING_FRAMES ENABLED="1"/>
+            <RECALCULATE_MEDIAN_HEIGHT ENABLED="1"/>
+            <ALLOW_ALTERNATE_HEIGHT ENABLED="0"/>
+            <EXPORT_ELIMINATE_TRACKPOINT_WITHOUT_HEIGHT ENABLED="0"/>
+            <EXPORT_ELIMINATE_TRAJECTORY_WITHOUT_HEIGHT ENABLED="0"/>
+            <EXPORT_SMOOTH ENABLED="1"/>
+            <EXPORT_VIEWING_DIRECTION ENABLED="0"/>
+            <EXPORT_ANGLE_OF_VIEW ENABLED="0"/>
+            <EXPORT_USE_METER ENABLED="0"/>
+            <EXPORT_COMMENT ENABLED="0"/>
+            <EXPORT_MARKERID ENABLED="0"/>
+            <TRACK_FILE FILENAME=""/>
+            <SEARCH_REGION ADAPTIVE="0" LEVELS="3" MAX_ERROR="0" SCALE="16" SHOW="0"/>
+            <PATH AFTER="15" BEFORE="15" COLLECTIVE_COLOR_SIZE="11" COLOR_MARKER_LINE_WIDTH="1" COLOR_MARKER_SIZE="14" CURRENT_POINT_LINE_WIDTH="1" CURRENT_POINT_SIZE="60" FIX="0" GROUND_PATH_SIZE="1" GROUND_POSITION_SIZE="1" HEAD_SIZE="1" NUMBER_BOLD="1" NUMBER_SIZE="14" ONLY_PEOPLE="0" ONLY_PEOPLE_LIST="0" ONLY_PEOPLE_NR="1" ONLY_PEOPLE_NR_LIST="" ONLY_VISIBLE="0" PATH_SIZE="2" POINTS_COLORED="1" POINTS_SIZE="7" SHOW="1" SHOW_COLLECTIVE_COLOR="1" SHOW_COLOR_MARKER="1" SHOW_CURRENT_POINT="1" SHOW_GROUND_PATH="0" SHOW_GROUND_POSITION="0" SHOW_NUMBER="1" SHOW_PATH="1" SHOW_POINTS="0" SHOW_POINTS_LINE_WIDTH="1" TRACK_GROUND_PATH_COLOR="#00ff00" TRACK_PATH_COLOR="#ff0000"/>
+        </TRACKING>
+        <ANALYSIS>
+            <SEARCH_MISSING_FRAMES ENABLED="1"/>
+            <MARK_ACTUAL ENABLED="0"/>
+            <CALCULATION ABSOLUTE="0" CONSIDER_X="0" CONSIDER_Y="1" REVERSE="0" SHOW_VORONOI="0" STEP_SIZE="25"/>
+        </ANALYSIS>
+        <CORRECTION>
+            <EQUALITY DISTANCE="0.5" ENABLED="1"/>
+            <VELOCITY ENABLED="1"/>
+            <LENGTH ENABLED="1" MIN_LENGTH="10"/>
+            <INSIDE ENABLED="1" MARGIN="30"/>
+        </CORRECTION>
+    </CONTROL>
+    <EXTR_CALIBRATION>
+        <REPROJECTION_ERROR AVG_DH="0" AVG_PH="0" AVG_PX="0" MAX_DH="4.6632130749188108e-310" MAX_PH="4.6632130749149077e-310" MAX_PX="4.6632132612882775e-310" SD_DH="4.6632137672154514e-310" SD_PH="6.9526421601088563e-310" SD_PX="6.952642160144429e-310" USED_HEIGHT="4.6632137672154514e-310"/>
+    </EXTR_CALIBRATION>
+    <STEREO>
+        <DISPARITY ALGO="0" COLOR="0" HIDE_INVALID="1" OPACITY="100" SHOW="0">
+            <VALUES MAX="100" MIN="0"/>
+            <MASK EDGE_SIZE="5" SIZE="7" USE_EDGE="0"/>
+            <USE CALIB_CENTER="1" EXPORT="0" HEIGHT="0" HEIGHT_EVER="1" RECO="0"/>
+        </DISPARITY>
+    </STEREO>
+    <COLOR_MARKER>
+        <MASK MASK="1" OPACITY="100" SHOW="0"/>
+        <FROM_COLOR HUE="0" SATURATION="0" VALUE="0"/>
+        <TO_COLOR HUE="359" SATURATION="255" VALUE="255"/>
+        <PARAM CLOSE_RADIUS="5" CLOSE_USED="1" INVERS_HUE="0" MAX_AREA="5000" MAX_RATIO="2" MIN_AREA="1000" OPEN_RADIUS="5" OPEN_USED="1"/>
+    </COLOR_MARKER>
+    <CODE_MARKER>
+        <DICTIONARY ID="0"/>
+        <PARAM ADAPTIVE_THRESH_CONSTANT="7" ADAPTIVE_THRESH_WIN_SIZE_MAX="27" ADAPTIVE_THRESH_WIN_SIZE_MIN="3" ADAPTIVE_THRESH_WIN_SIZE_STEP="10" CORNER_REFINEMENT="0" CORNER_REFINEMENT_MAX_ITERATIONS="30" CORNER_REFINEMENT_MIN_ACCURACY="0.10000000000000001" CORNER_REFINEMENT_WIN_SIZE="5" ERROR_CORRECTION_RATE="0.59999999999999998" MARKER_BORDER_BITS="1" MAX_ERRONEOUS_BITS_IN_BORDER_RATE="0.34999999999999998" MAX_MARKER_PERIMETER="15" MAX_RATIO_ERROR="0.029999999999999999" MIN_CORNER_DISTANCE="0.050000000000000003" MIN_DISTANCE_TO_BORDER="3" MIN_MARKER_DISTANCE="0.050000000000000003" MIN_MARKER_PERIMETER="5" MIN_OTSU_STD_DEV="5" PERSPECTIVE_REMOVE_IGNORED_MARGIN_PER_CELL="0.13" PERSPECTIVE_REMOVE_PIXEL_PER_CELL="4" SHOW_DETECTED_CANDIDATES="0"/>
+    </CODE_MARKER>
+    <MULTI_COLOR_MARKER>
+        <BLACK_DOT IGNORE_WITHOUT="1" RESTRICT_POSITION="0" SIZE="5" USE="1" USE_COLOR="0"/>
+        <CODE_MARKER USE="0"/>
+        <AUTO_CORRECT ONLY_EXPORT="0" USE="0"/>
+        <MASK MASK="1" OPACITY="100" SHOW="0"/>
+        <PARAM CLOSE_RADIUS="5" CLOSE_USED="1" MAX_AREA="5000" MAX_RATIO="2" MIN_AREA="1000" OPEN_RADIUS="5" OPEN_USED="1" USE_HEAD_SIZE="0"/>
+    </MULTI_COLOR_MARKER>
+    <MOCAP COLOR="#ffff37" SHOW="0" SIZE="2"/>
+    <PLAYER FRAME="-1" PLAYBACK_FPS="-1" PLAYER_SPEED_FIXED="0" SEQUENCE_FPS="-1" SOURCE_FRAME_IN="0" SOURCE_FRAME_OUT="-1"/>
+    <VIEW ANTIALIAS="0" CAMERA="2" HIDE_CONTROLS="0" OPENGL="0" SAVE_TRANSFORMED="0" TRANSFORMATION="250 0 0 0"/>
+    <AUTO_TRACK BACK_TRACK="1" OPTIMZE_COLOR="0"/>
+    <MISSING_FRAMES executed="0"/>
+</PETRACK>
diff --git a/tests/regression_test/data/02_extrinsic.pet b/tests/regression_test/data/02_extrinsic.pet
index d8b958547deda9c9f8e9255710fb6a9a3979f94b..2b34f9f1afcf81e8ff76255e500c50926cb52880 100644
--- a/tests/regression_test/data/02_extrinsic.pet
+++ b/tests/regression_test/data/02_extrinsic.pet
@@ -1,18 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.0">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="../00_files/calibration/extrinsic/00_all.jpg" STATUS_HEIGHT="0"/>
     <CONTROL TAB="0">
         <CALIBRATION>
+            <FILTER_BEFORE IMMUTABLE="0"/>
             <BRIGHTNESS ENABLED="0" VALUE="0"/>
             <CONTRAST ENABLED="0" VALUE="0"/>
             <BORDER COLOR="#000000" ENABLED="0" VALUE="0"/>
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="947.47000000000003" CY="698.44000000000005" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" FX="857.12" FY="857.50999999999999" K4="1.7398640000000001" K5="0.399007" K6="-0.013342" QUAD_ASPECT_RATIO="0" R2="1.358914" R4="0.123435" R6="-0.0091129999999999996" ReprError="0.52066329210560447" S1="0.001026" S2="-6.6000000000000005e-05" S3="-0.00019000000000000001" S4="-9.7999999999999997e-05" TANG_DIST="1" TAUX="-3.0000000000000001e-05" TAUY="-5.0000000000000002e-05" TX="0.000184" TY="-0.000388"/>
-            <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="../data/before.3dc;C:/Users/Deniz/Documents/petrack/tests/regression_test/data/before.3dc;before.3dc" EXTR_ROT_1="-2.1949999999999998" EXTR_ROT_2="-2.1829999999999998" EXTR_ROT_3="0.017000000000000001" EXTR_TRANS_1="-1044.4970000000001" EXTR_TRANS_2="15.23" EXTR_TRANS_3="-628.18600000000004" FIX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
-            <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="1" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="947.47000000000003" CY="698.44000000000005" FX="857.12" FY="857.50999999999999" K4="1.739864" K5="0.39900699" K6="-0.013342" R2="1.358914" R4="0.123435" R6="-0.0091129998" ReprError="0.52066332" S1="0.001026" S2="-6.6000001e-05" S3="-0.00019000001" S4="-9.7999997e-05" TAUX="-2.9999999e-05" TAUY="-4.9999999e-05" TX="0.000184" TY="-0.00038799999"/>
+            </INTRINSIC_PARAMETERS>
+            <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="before.3dc" EXTR_ROT_1="-2.1949999999999998" EXTR_ROT_2="-2.1829999999999998" EXTR_ROT_3="0.017000000000000001" EXTR_TRANS_1="-1044.4970000000001" EXTR_TRANS_2="15.23" EXTR_TRANS_3="-628.18600000000004" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
+            <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
         <RECOGNITION>
             <PERFORM ENABLED="0" METHOD="5" STEP="1"/>
@@ -86,7 +90,7 @@
         <PARAM CLOSE_RADIUS="5" CLOSE_USED="1" MAX_AREA="5000" MAX_RATIO="2" MIN_AREA="1000" OPEN_RADIUS="5" OPEN_USED="1" USE_HEAD_SIZE="0"/>
     </MULTI_COLOR_MARKER>
     <MOCAP COLOR="#ffff37" SHOW="0" SIZE="2"/>
-    <PLAYER FPS="25" FRAME="0" PLAYER_SPEED_FIXED="0" SOURCE_FRAME_IN="0" SOURCE_FRAME_OUT="0"/>
+    <PLAYER FRAME="-1" PLAYBACK_FPS="-1" PLAYER_SPEED_FIXED="0" SEQUENCE_FPS="-1" SOURCE_FRAME_IN="0" SOURCE_FRAME_OUT="0"/>
     <VIEW ANTIALIAS="0" CAMERA="2" HIDE_CONTROLS="0" OPENGL="0" SAVE_TRANSFORMED="0" TRANSFORMATION="208 0 0 0"/>
     <AUTO_TRACK BACK_TRACK="1" OPTIMZE_COLOR="0"/>
     <MISSING_FRAMES executed="0"/>
diff --git a/tests/regression_test/data/blackdotMarker.pet b/tests/regression_test/data/blackdotMarker.pet
index d7e06ecd1f20c20bfdd533183d1bc1d2d4704f97..1517884f38b1ed14feeda51ec1a5f5f61e76c0fa 100755
--- a/tests/regression_test/data/blackdotMarker.pet
+++ b/tests/regression_test/data/blackdotMarker.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="blackdotMarker.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="2">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="9" SQUARE_SIZE="3"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="1038" CY="798" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" FX="835.65999999999997" FY="835.75999999999999" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.246701" R4="0.072692000000000007" R6="-0.010224" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0.00033700000000000001" TY="6.9999999999999999e-06"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="1038" CY="798" FX="835.65999999999997" FY="835.75999999999999" K4="0" K5="0" K6="0" R2="-0.246701" R4="0.072691999" R6="-0.010224" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0.000337" TY="7.0000001e-06"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="225" COORD3D_TRANS_Y="350" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="-2.2050000000000001" EXTR_ROT_2="-2.177" EXTR_ROT_3="0.104" EXTR_TRANS_1="-224.46700000000001" EXTR_TRANS_2="-629.58500000000004" EXTR_TRANS_3="-408.82499999999999" FIX="1" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="1" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="1" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="75" GRID3D_TRANS_Y="-18" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="1" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/tests/regression_test/data/codeMarker.pet b/tests/regression_test/data/codeMarker.pet
index 23da59c3ea0fe239ebe10d0fda7a474509e7be90..05e72beee75ca097268f03552bbe046f23b7ac63 100644
--- a/tests/regression_test/data/codeMarker.pet
+++ b/tests/regression_test/data/codeMarker.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="codeMarker.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="2">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="1397.98" CY="1138.9300000000001" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" FX="835.65999999999997" FY="835.75999999999999" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.246701" R4="0.072692000000000007" R6="-0.010224" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0.00033700000000000001" TY="6.9999999999999999e-06"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="1397.98" CY="1138.9300000000001" FX="835.65999999999997" FY="835.75999999999999" K4="0" K5="0" K6="0" R2="-0.246701" R4="0.072691999" R6="-0.010224" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0.000337" TY="7.0000001e-06"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0.012" EXTR_ROT_2="-0.014" EXTR_ROT_3="0.22700000000000001" EXTR_TRANS_1="50.128" EXTR_TRANS_2="23.611999999999998" EXTR_TRANS_3="-400.09800000000001" FIX="1" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="1" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/tests/regression_test/data/correct_perspective.pet b/tests/regression_test/data/correct_perspective.pet
index aa9ef0389932b65b7c956563743a13eb3588cc58..525d0e08693e48724ccb6013419853cf0715b025 100644
--- a/tests/regression_test/data/correct_perspective.pet
+++ b/tests/regression_test/data/correct_perspective.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="multicolor.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="2">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="1134.04" CY="880.72000000000003" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" FX="842.57000000000005" FY="842.69000000000005" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.27662599999999998" R4="0.093287999999999996" R6="-0.01423" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="-0.00024699999999999999" TY="5.5000000000000002e-05"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="1134.04" CY="880.72000000000003" FX="842.57000000000005" FY="842.69000000000005" K4="0" K5="0" K6="0" R2="-0.27662599" R4="0.093287997" R6="-0.01423" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="-0.00024699999" TY="5.5e-05"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="1" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="-2.1920000000000002" EXTR_ROT_2="-2.1829999999999998" EXTR_ROT_3="0.016" EXTR_TRANS_1="-1043.473" EXTR_TRANS_2="13.741" EXTR_TRANS_3="-626.84199999999998" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="91" GRID3D_TRANS_Y="34" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/tests/regression_test/data/markerCasern.pet b/tests/regression_test/data/markerCasern.pet
index 224f8a6d82284d725e3da7bb777bc48e64b0c168..61e3c83a96b2eecd273f6ac62737a361379fa580 100644
--- a/tests/regression_test/data/markerCasern.pet
+++ b/tests/regression_test/data/markerCasern.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="markerCasern.avi" STATUS_HEIGHT="180"/>
     <CONTROL TAB="0">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="589.5" CY="461.5" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="1" FX="882.15999999999997" FY="882.15999999999997" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="1" R2="-0.378664" R4="0.15861700000000001" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="-0.000241" TY="0.00031199999999999999"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="1" IMMUTABLE="0" QUAD_ASPECT_RATIO="1" TANG_DIST="1">
+                <OLD_MODEL CX="589.5" CY="461.5" FX="882.15999999999997" FY="882.15999999999997" K4="0" K5="0" K6="0" R2="-0.37866399" R4="0.158617" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="-0.000241" TY="0.00031199999"/>
+                <EXT_MODEL CX="589.5" CY="461.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="537" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="1" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="1" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="27" SCALE="767" SHOW="1" SHOW_CALIB_POINTS="0" TRANS_X="5179" TRANS_Y="2170" UNIT="46" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="1" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="1" IMMUTABLE="0" ROTATE="27" SCALE="768" SHOW="1" TRANS_X="245" TRANS_Y="657"/>
         </CALIBRATION>
diff --git a/tests/regression_test/data/markerJapan.pet b/tests/regression_test/data/markerJapan.pet
index 0d0ef2c0b5b3dcf0773d216c83b494afbaecb079..57c55aef88da4e0ef02e99cf81035039ceae5cec 100644
--- a/tests/regression_test/data/markerJapan.pet
+++ b/tests/regression_test/data/markerJapan.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="markerJapan/000100000.jpg" STATUS_HEIGHT="0"/>
     <CONTROL TAB="0">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="973" CY="620" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" FX="1653.49" FY="1673.5599999999999" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="0.00068099999999999996" R4="-0.22715399999999999" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0.0042729999999999999" TY="0.00044799999999999999"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="973" CY="620" FX="1653.49" FY="1673.5599999999999" K4="0" K5="0" K6="0" R2="0.000681" R4="-0.227154" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0.0042730002" TY="0.00044800001"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="2035" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="1" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="1" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="3594" SCALE="1000" SHOW="1" SHOW_CALIB_POINTS="0" TRANS_X="14450" TRANS_Y="5468" UNIT="120" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="1" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="1" IMMUTABLE="0" ROTATE="895" SCALE="1001" SHOW="0" TRANS_X="392" TRANS_Y="586"/>
         </CALIBRATION>
diff --git a/tests/regression_test/data/multiColorMarkerWithAruco.pet b/tests/regression_test/data/multiColorMarkerWithAruco.pet
index f0de23e3b4f1da50cecd36ab9068664ed761b039..c40a9e5202f8b0893dcc1c5c72d7fc52ab8bdf77 100644
--- a/tests/regression_test/data/multiColorMarkerWithAruco.pet
+++ b/tests/regression_test/data/multiColorMarkerWithAruco.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="multiColorMarkerWithAruco.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="1">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="983.10000000000002" CY="572.13" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" FX="1860.1700000000001" FY="1862.24" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.37733299999999997" R4="0.242947" R6="-0.15323500000000001" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="-0.0040350000000000004" TY="-0.001372"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="983.10000000000002" CY="572.13" FX="1860.1700000000001" FY="1862.24" K4="0" K5="0" K6="0" R2="-0.37733299" R4="0.242947" R6="-0.153235" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="-0.0040350002" TY="-0.001372"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="-2.1299999999999999" EXTR_ROT_2="2.1579999999999999" EXTR_ROT_3="-0.036999999999999998" EXTR_TRANS_1="14.253" EXTR_TRANS_2="14.198" EXTR_TRANS_3="-528.09799999999996" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/tests/regression_test/data/multiColorMarkerWithAruco_dictMip36h12.pet b/tests/regression_test/data/multiColorMarkerWithAruco_dictMip36h12.pet
index 732bcb9b8489b3bb759a70e8a0503c89e051e9c2..702837ff568f4d93143ae5a537f860b4c8f4ffdc 100644
--- a/tests/regression_test/data/multiColorMarkerWithAruco_dictMip36h12.pet
+++ b/tests/regression_test/data/multiColorMarkerWithAruco_dictMip36h12.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="multiColorMarkerWithAruco_dictMip36h12.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="1">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="2380.0599999999999" CY="1911.8699999999999" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" FX="1716.1300000000001" FY="1716.6199999999999" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.23147100000000001" R4="0.060733000000000002" R6="-0.0072639999999999996" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0.000106" TY="0.00046500000000000003"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="2380.0599999999999" CY="1911.8699999999999" FX="1716.1300000000001" FY="1716.6199999999999" K4="0" K5="0" K6="0" R2="-0.231471" R4="0.060733002" R6="-0.0072639999" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0.000106" TY="0.00046499999"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="3.1219999999999999" EXTR_ROT_2="0.041000000000000002" EXTR_ROT_3="0.050999999999999997" EXTR_TRANS_1="-1.2969999999999999" EXTR_TRANS_2="6.5439999999999996" EXTR_TRANS_3="-423.565" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/tests/regression_test/data/multicolor.pet b/tests/regression_test/data/multicolor.pet
index da303259c43629aafa3eae9184b8315c3528890f..8c4b619cf48b51e93969fa8d3ba0ff1befc647c8 100644
--- a/tests/regression_test/data/multicolor.pet
+++ b/tests/regression_test/data/multicolor.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="multicolor.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="2">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="1134.04" CY="880.72000000000003" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" FX="842.57000000000005" FY="842.69000000000005" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.27662599999999998" R4="0.093287999999999996" R6="-0.01423" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="-0.00024699999999999999" TY="5.5000000000000002e-05"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="1" EXT_MODEL_ENABLED="0" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="1134.04" CY="880.72000000000003" FX="842.57000000000005" FY="842.69000000000005" K4="0" K5="0" K6="0" R2="-0.27662599" R4="0.093287997" R6="-0.01423" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="-0.00024699999" TY="5.5e-05"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="1" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="-2.1920000000000002" EXTR_ROT_2="-2.1829999999999998" EXTR_ROT_3="0.016" EXTR_TRANS_1="-1043.473" EXTR_TRANS_2="13.741" EXTR_TRANS_3="-626.84199999999998" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="91" GRID3D_TRANS_Y="34" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/tests/regression_test/data/test_Fps_truth.pet b/tests/regression_test/data/test_Fps_truth.pet
index 7e1935d85233c94faac2487265e32f251b61ff18..d6e3298908ffeff8e32ac5304f8632d56f26c004 100644
--- a/tests/regression_test/data/test_Fps_truth.pet
+++ b/tests/regression_test/data/test_Fps_truth.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="../../../demo/00_files/video/video.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="0">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="/home/luke/Dev/petrack/demo/00_files/calibration/intrinsic/01_still.png" CX="551.5" CY="383.5" ENABLED="0" EXT_MODEL_ENABLED="1" FIX_CENTER="0" FX="881" FY="881" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="/home/luke/Dev/petrack/demo/00_files/calibration/intrinsic/01_still.png" ENABLED="0" EXT_MODEL_ENABLED="1" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/tests/regression_test/data/test_oldFps.pet b/tests/regression_test/data/test_oldFps.pet
index 466eb6d71e32511463cfeae5024abb8288f18f6a..c7a17d46a5b2ae6d30bb05c66140139eadc5ebef 100644
--- a/tests/regression_test/data/test_oldFps.pet
+++ b/tests/regression_test/data/test_oldFps.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="../../../demo/00_files/video/video.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="0">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="511.5" CY="383.5" ENABLED="0" EXT_MODEL_ENABLED="0" FIX_CENTER="0" FX="881" FY="881" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="0" EXT_MODEL_ENABLED="0" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="511.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/tests/regression_test/data/test_oldFps_truth.pet b/tests/regression_test/data/test_oldFps_truth.pet
index f9b2dacd5165d867513d059e35c8ab239c0bda38..29d907e99945cd3ba5cd93cf66d1f994f65e6cbe 100644
--- a/tests/regression_test/data/test_oldFps_truth.pet
+++ b/tests/regression_test/data/test_oldFps_truth.pet
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE PETRACK>
-<PETRACK VERSION="0.10.2">
+<PETRACK VERSION="0.10.3">
     <MAIN SRC="../../../demo/00_files/video/video.mp4" STATUS_HEIGHT="0"/>
     <CONTROL TAB="0">
         <CALIBRATION>
@@ -11,7 +11,10 @@
             <SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
             <BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
             <PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="8" SQUARE_SIZE="4.5999999"/>
-            <INTRINSIC_PARAMETERS CALIB_FILES="" CX="511.5" CY="383.5" ENABLED="0" EXT_MODEL_ENABLED="0" FIX_CENTER="0" FX="881" FY="881" IMMUTABLE="0" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TANG_DIST="1" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            <INTRINSIC_PARAMETERS CALIB_FILES="" ENABLED="0" EXT_MODEL_ENABLED="0" FIX_CENTER="0" IMMUTABLE="0" QUAD_ASPECT_RATIO="0" TANG_DIST="1">
+                <OLD_MODEL CX="511.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+                <EXT_MODEL CX="551.5" CY="383.5" FX="881" FY="881" K4="0" K5="0" K6="0" R2="0" R4="0" R6="0" ReprError="nan" S1="0" S2="0" S3="0" S4="0" TAUX="0" TAUY="0" TX="0" TY="0"/>
+            </INTRINSIC_PARAMETERS>
             <EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="0" COORD3D_TRANS_Y="0" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="0" EXTR_ROT_2="0" EXTR_ROT_3="0" EXTR_TRANS_1="0" EXTR_TRANS_2="0" EXTR_TRANS_3="-500" FIX="0" IMMUTABLE_COORD_BOX="0" IMMUTABLE_EXTRINSIC_BOX="0" ROTATE="0" SCALE="100" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
             <ALIGNMENT_GRID FIX="0" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="0" GRID3D_TRANS_Y="0" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" IMMUTABLE="0" ROTATE="0" SCALE="100" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
         </CALIBRATION>
diff --git a/tests/regression_test/tests/test_calib.py b/tests/regression_test/tests/test_calib.py
index e7d6f0fef17c91abb0a86c15009487cd2c913185..30492fc034a59e06bfd569e47815ef62e512d99d 100644
--- a/tests/regression_test/tests/test_calib.py
+++ b/tests/regression_test/tests/test_calib.py
@@ -20,19 +20,14 @@ from pytest import approx
 import subprocess
 import xml.etree.ElementTree as ET
 import numpy as np
+import math
 from dataclasses import dataclass
 from numpy import r_
 
-# NOTE: Does not test all options; ie. QuadAspectRatio, Fix Center, Ext. Model, ...
-
 
-def read_intrinsics(tree: ET.ElementTree) -> np.ndarray:
-    # NOTE: needs non-nan reprojection error
-
-    node = tree.find("./CONTROL/CALIBRATION/INTRINSIC_PARAMETERS")
-    if node is None:
-        raise RuntimeError("Invalid pet-File! No Calibration node")
+# NOTE: Does not test all options; ie. QuadAspectRatio, Fix Center, Ext. Model, ...
 
+def extract_parameters(node):
     cx = float(node.get("CX", "nan"))
     cy = float(node.get("CY", "nan"))
     fx = float(node.get("FX", "nan"))
@@ -47,14 +42,14 @@ def read_intrinsics(tree: ET.ElementTree) -> np.ndarray:
     s2 = float(node.get("S2", "nan"))
     s3 = float(node.get("S3", "nan"))
     s4 = float(node.get("S4", "nan"))
-    tang_dist = float(node.get("TANG_DIST", "nan"))
     taux = float(node.get("TAUX", "nan"))
     tauy = float(node.get("TAUY", "nan"))
     tx = float(node.get("TX", "nan"))
     ty = float(node.get("TY", "nan"))
-
     # comparison will fail, if this is NaN
     reprojection_error = float(node.get("ReprError", "nan"))
+    if math.isnan(reprojection_error):
+        reprojection_error = float("-inf")
     return np.array(
         [
             cx,
@@ -71,7 +66,6 @@ def read_intrinsics(tree: ET.ElementTree) -> np.ndarray:
             s2,
             s3,
             s4,
-            tang_dist,
             taux,
             tauy,
             tx,
@@ -81,6 +75,27 @@ def read_intrinsics(tree: ET.ElementTree) -> np.ndarray:
     )
 
 
+def read_intrinsics(tree: ET.ElementTree) -> np.ndarray:
+    # NOTE: needs non-nan reprojection error
+
+    oldModelNode = tree.find("./CONTROL/CALIBRATION/INTRINSIC_PARAMETERS/OLD_MODEL")
+
+    extModelNode = tree.find("./CONTROL/CALIBRATION/INTRINSIC_PARAMETERS/EXT_MODEL")
+
+    if oldModelNode is None or extModelNode is None:
+        raise RuntimeError("Invalid pet-File! No Calibration node")
+
+    node = tree.find("./CONTROL/CALIBRATION/INTRINSIC_PARAMETERS")
+    tang_dist = float(node.get("TANG_DIST", "nan"))
+    fix_center = float(node.get("FIX_CENTER", "nan"))
+    quad_aspect = float(node.get("QUAD_ASPECT_RATIO", "nan"))
+
+    oldModelParams = extract_parameters(oldModelNode)
+    extModelParams = extract_parameters(extModelNode)
+    config = np.array([tang_dist, fix_center, quad_aspect])
+    return np.concatenate([oldModelParams, extModelParams, config])
+
+
 @dataclass
 class Extrinsic3DParams:
     rot: np.ndarray
@@ -169,11 +184,36 @@ def test_autoCalib_default_options(pytestconfig):
     compare_intrinsic_calib(test_pet, truth_pet)
 
 
-def test_autoCalib_old_model(pytestconfig):
+def test_load_old_project_old_model(pytestconfig):
     petrack_path = pytestconfig.getoption("path")
-    project = "../data/00_empty.pet"
-    real_intrinsic = "../data/01_intrinsic.pet"
-    intrinsic_dir = "../../../demo/00_files/calibration/intrinsic"
+    project = "../data/01_old_intrinsic_oldModel.pet"
+    real_intrinsic = "../data/01_old_intrinsic_oldModel_truth.pet"
+    output = "../data/calibTest.pet"  # same for other test, cannot be run concurrently
+
+    # run autocalib on demo project
+    subprocess.run(
+        [
+            petrack_path,
+            "-project",
+            project,
+            "-autosave",
+            output,
+            "-platform",
+            "offscreen",
+        ],
+        check=True,
+    )
+
+    test_pet = ET.parse(output)
+    truth_pet = ET.parse(real_intrinsic)
+
+    compare_intrinsic_calib(test_pet, truth_pet)
+
+
+def test_load_old_project_ext_model(pytestconfig):
+    petrack_path = pytestconfig.getoption("path")
+    project = "../data/01_old_intrinsic_extModel.pet"
+    real_intrinsic = "../data/01_old_intrinsic_extModel_truth.pet"
     output = "../data/calibTest.pet"  # same for other test, cannot be run concurrently
 
     # run autocalib on demo project
@@ -182,8 +222,6 @@ def test_autoCalib_old_model(pytestconfig):
             petrack_path,
             "-project",
             project,
-            "-autoIntrinsic",
-            intrinsic_dir,
             "-autosave",
             output,
             "-platform",
@@ -200,9 +238,9 @@ def test_autoCalib_old_model(pytestconfig):
 
 def test_extr_calib(pytestconfig):
     petrack_path = pytestconfig.getoption("path")
-    project = "../data/01_intrinsic.pet"
-    real_extrinsic = "../data/02_extrinsic.pet"
-    extrinsic_file = "../data/before.3dc"
+    project = "../../../demo/01_calibration/01_intrinsic.pet"
+    real_extrinsic = "../../../demo/01_calibration/02_extrinsic.pet"
+    extrinsic_file = "../../../demo/01_calibration/before.3dc"
     output = (
         "../data/extrCalibTest.pet"  # same for other test, cannot be run concurrently
     )
diff --git a/tests/unit_test/ui/main-windows/tst_coordinateSystemBox.cpp b/tests/unit_test/ui/main-windows/tst_coordinateSystemBox.cpp
index a510f5f92ca83a0e82fcd2fba04e2edc6838330c..a2b679b9dabb5f752d6fcf2f9de59cc9df3a24ca 100644
--- a/tests/unit_test/ui/main-windows/tst_coordinateSystemBox.cpp
+++ b/tests/unit_test/ui/main-windows/tst_coordinateSystemBox.cpp
@@ -42,7 +42,7 @@ TEST_CASE("CoordinateSystemBox: display of values in UI")
     ExtrinsicBox        extrBox(nullptr, extrCalib);
     AutoCalib           autoCalib{};
     CalibFilter         calibFilter;
-    IntrinsicBox        intrBox{&petrack, autoCalib, calibFilter, []() {}};
+    IntrinsicBox        intrBox{&petrack, autoCalib, calibFilter, extrBox, []() {}};
     ImageItem           imageItem{&petrack, nullptr};
     auto               *ui = new Ui::CoordinateSystemBox();
     CoordinateSystemBox coordSysBox{
@@ -142,7 +142,7 @@ TEST_CASE("CoordinateSystemBox: UI logic")
     ExtrinsicBox        extrBox(nullptr, extrCalib);
     AutoCalib           autoCalib{};
     CalibFilter         calibFilter;
-    IntrinsicBox        intrBox{&petrack, autoCalib, calibFilter, []() {}};
+    IntrinsicBox        intrBox{&petrack, autoCalib, calibFilter, extrBox, []() {}};
     ImageItem           imageItem{&petrack, nullptr};
     auto               *ui                     = new Ui::CoordinateSystemBox();
     int                 updateStatusPosCounter = 0;
diff --git a/tests/unit_test/ui/main-windows/tst_extrinsicBox.cpp b/tests/unit_test/ui/main-windows/tst_extrinsicBox.cpp
index be13dff71b70520bb193106697337f983957e323..efa392720bd1b9f403a6ee124ed51d797181d6c1 100644
--- a/tests/unit_test/ui/main-windows/tst_extrinsicBox.cpp
+++ b/tests/unit_test/ui/main-windows/tst_extrinsicBox.cpp
@@ -21,6 +21,7 @@
 #include "personStorage.h"
 #include "petrack.h"
 #include "ui_extrinsicBox.h"
+#include "util.h"
 
 #include <QDomElement>
 #include <catch2/catch.hpp>
@@ -92,7 +93,7 @@ TEST_CASE("ExtrinsicBox: reading/writing xml")
         params.trans3 = 699;
 
         extrBox.setExtrinsicParameters(params);
-
+        INFO(extrBox.getExtrinsicParameters().trans1);
         AND_WHEN("We save that state into an xml-document")
         {
             QDomDocument doc;
@@ -108,6 +109,7 @@ TEST_CASE("ExtrinsicBox: reading/writing xml")
                 ExtrinsicBox    extrBox(nullptr, calib);
 
                 extrBox.getXml(elem);
+                INFO(nodeToString(elem));
                 CHECK(extrBox.getExtrinsicParameters() == params);
             }
         }
diff --git a/tests/unit_test/ui/main-windows/tst_intrinsicBox.cpp b/tests/unit_test/ui/main-windows/tst_intrinsicBox.cpp
index 6f59b4a6caad23eb5701093a735b1973ff259cf3..1a5332b2e7614693d9c3f4c3ba0edc5129d36a49 100644
--- a/tests/unit_test/ui/main-windows/tst_intrinsicBox.cpp
+++ b/tests/unit_test/ui/main-windows/tst_intrinsicBox.cpp
@@ -18,14 +18,18 @@
 
 #include "autoCalib.h"
 #include "calibFilter.h"
+#include "extrCalibration.h"
+#include "extrinsicBox.h"
 #include "intrinsicBox.h"
+#include "personStorage.h"
+#include "petrack.h"
 #include "ui_intrinsicBox.h"
 #include "util.h"
 
 #include <QDomElement>
 #include <QSignalSpy>
-#include <QTextStream>
 #include <catch2/catch.hpp>
+#include <catch2/trompeloeil.hpp>
 
 
 bool matEq(const cv::Mat &lhs, const cv::Mat &rhs)
@@ -38,33 +42,37 @@ constexpr double SERIALIZATION_MARGIN = 0.01;
 TEST_CASE("IntrinsicCameraParams have value semantics")
 {
     IntrinsicCameraParams testParams;
+    testParams.setFx(1);
+    testParams.setFy(1);
+    testParams.setCx(0);
+    testParams.setCy(0);
     CHECK(matEq(testParams.cameraMatrix, cv::Mat::eye(cv::Size(3, 3), CV_64F)));
     CHECK(matEq(testParams.distortionCoeffs, cv::Mat::zeros(1, 14, CV_32F)));
-    CHECK(std::isnan(testParams.reprojectionError));
-    testParams.cameraMatrix.at<double>(0, 0) = 1000;
-    testParams.distortionCoeffs.at<float>(0) = 2000;
+    CHECK(qIsNaN(testParams.reprojectionError));
+    testParams.setFx(1000);
+    testParams.setR2(2000);
 
     SECTION("Copy Constructor")
     {
         IntrinsicCameraParams copy{testParams};
-        copy.cameraMatrix.at<double>(1, 1)  = -1;
-        copy.distortionCoeffs.at<double>(1) = -1;
-        CHECK(copy.cameraMatrix.at<double>(0, 0) == 1000);
-        CHECK(copy.distortionCoeffs.at<float>(0) == 2000);
-        CHECK(testParams.cameraMatrix.at<double>(1, 1) == 1);
-        CHECK(testParams.distortionCoeffs.at<float>(1) == 0);
+        copy.setFy(-1);
+        copy.setR4(-1);
+        CHECK(copy.getFx() == 1000);
+        CHECK(copy.getR2() == 2000);
+        CHECK(testParams.getFy() == 1);
+        CHECK(testParams.getR4() == 0);
     }
 
     SECTION("Copy Assignment")
     {
         IntrinsicCameraParams copy;
-        copy                                = testParams;
-        copy.cameraMatrix.at<double>(1, 1)  = -1;
-        copy.distortionCoeffs.at<double>(1) = -1;
-        CHECK(copy.cameraMatrix.at<double>(0, 0) == 1000);
-        CHECK(copy.distortionCoeffs.at<float>(0) == 2000);
-        CHECK(testParams.cameraMatrix.at<double>(1, 1) == 1);
-        CHECK(testParams.distortionCoeffs.at<float>(1) == 0);
+        copy = testParams;
+        copy.setFy(-1);
+        copy.setR4(-1);
+        CHECK(copy.getFx() == 1000);
+        CHECK(copy.getR2() == 2000);
+        CHECK(testParams.getFy() == 1);
+        CHECK(testParams.getR4() == 0);
     }
 }
 
@@ -72,60 +80,68 @@ TEST_CASE("IntrinsicCameraParams values")
 {
     AutoCalib         autoCalib;
     CalibFilter       filterCalib;
+    Petrack           petrack{"Unkown"};
+    Autosave          autosave(petrack);
+    PersonStorage     storage(petrack, autosave);
+    ExtrCalibration   calib(storage);
+    ExtrinsicBox      extrBox(nullptr, calib);
     Ui::IntrinsicBox *ui      = new Ui::IntrinsicBox(); // ownership transferred to IntrinsicBox
-    auto              intrBox = IntrinsicBox(nullptr, ui, autoCalib, filterCalib, []() {});
+    auto              intrBox = IntrinsicBox(nullptr, ui, autoCalib, filterCalib, extrBox, []() {});
 
     QSignalSpy spy{&intrBox, &IntrinsicBox::paramsChanged};
     CHECK(spy.isValid());
-
+    IntrinsicModelsParameters params;
     WHEN("I set the values of the IntrinsicParameters (via the setter)")
     {
-        IntrinsicCameraParams params;
-        params.cameraMatrix = (cv::Mat_<double>(3, 3) << 800, 2, 3, 4, 900, 6, 7, 8, 9);
-        std::iota(params.distortionCoeffs.begin<float>(), params.distortionCoeffs.end<float>(), -5);
+        params.oldModelParams.cameraMatrix = (cv::Mat_<double>(3, 3) << 800, 2, 3, 4, 900, 6, 7, 8, 9);
         // values need to be in valid range -5 to 5
-        params.distortionCoeffs.at<float>(10) = 1;
-        params.distortionCoeffs.at<float>(11) = 2;
-        params.distortionCoeffs.at<float>(12) = 3;
-        params.distortionCoeffs.at<float>(13) = 4;
+        params.oldModelParams.distortionCoeffs =
+            (cv::Mat_<float>(1, 14) << -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, 1, 1.5, 2, 2.5, 3, 3.5);
 
-        params.reprojectionError = 42;
+        params.oldModelParams.reprojectionError = 42;
 
-        intrBox.setIntrinsicCameraParams(params);
+        params.extModelParams.cameraMatrix = (cv::Mat_<double>(3, 3) << 600, 2, 3, 4, 800, 6, 7, 8, 9);
+        // values need to be in valid range -5 to 5
+        params.extModelParams.distortionCoeffs =
+            (cv::Mat_<float>(1, 14) << 4.5, 4, 3.5, 3, 2.5, 2, 1.5, 1, -1, -1.5, -2, -2.5, -3, -3.5);
+        params.extModelParams.reprojectionError = 187;
 
+        intrBox.setIntrinsicCameraParams(params);
         THEN("The params are changed in the params-struct")
         {
-            auto newParams = intrBox.getIntrinsicCameraParams();
-            CHECK(intrBox.getIntrinsicCameraParams() == params);
+            auto newParams = intrBox.getBothIntrinsicCameraParams();
+            CHECK(newParams.oldModelParams == params.oldModelParams);
+            CHECK(newParams.extModelParams == params.extModelParams);
         }
 
-        THEN("The params are changed in the ui")
+        THEN("The extended model params are shown in the ui")
         {
-            CHECK(ui->fx->value() == params.cameraMatrix.at<double>(0, 0));
-            CHECK(ui->fy->value() == params.cameraMatrix.at<double>(1, 1));
-            CHECK(ui->cx->value() == params.cameraMatrix.at<double>(0, 2));
-            CHECK(ui->cy->value() == params.cameraMatrix.at<double>(1, 2));
-
-            CHECK(ui->r2->value() == static_cast<double>(params.distortionCoeffs.at<float>(0)));
-            CHECK(ui->r4->value() == static_cast<double>(params.distortionCoeffs.at<float>(1)));
-            CHECK(ui->tx->value() == static_cast<double>(params.distortionCoeffs.at<float>(2)));
-            CHECK(ui->ty->value() == static_cast<double>(params.distortionCoeffs.at<float>(3)));
-            CHECK(ui->r6->value() == static_cast<double>(params.distortionCoeffs.at<float>(4)));
-            CHECK(ui->k4->value() == static_cast<double>(params.distortionCoeffs.at<float>(5)));
-            CHECK(ui->k5->value() == static_cast<double>(params.distortionCoeffs.at<float>(6)));
-            CHECK(ui->k6->value() == static_cast<double>(params.distortionCoeffs.at<float>(7)));
-            CHECK(ui->s1->value() == static_cast<double>(params.distortionCoeffs.at<float>(8)));
-            CHECK(ui->s2->value() == static_cast<double>(params.distortionCoeffs.at<float>(9)));
-            CHECK(ui->s3->value() == static_cast<double>(params.distortionCoeffs.at<float>(10)));
-            CHECK(ui->s4->value() == static_cast<double>(params.distortionCoeffs.at<float>(11)));
-            CHECK(ui->taux->value() == static_cast<double>(params.distortionCoeffs.at<float>(12)));
-            CHECK(ui->tauy->value() == static_cast<double>(params.distortionCoeffs.at<float>(13)));
+            CHECK(ui->fx->value() == Approx(params.extModelParams.getFx()));
+            CHECK(ui->fy->value() == Approx(params.extModelParams.getFy()));
+            CHECK(ui->cx->value() == Approx(params.extModelParams.getCx()));
+            CHECK(ui->cy->value() == Approx(params.extModelParams.getCy()));
+
+            CHECK(ui->r2->value() == Approx(static_cast<double>(params.extModelParams.getR2())));
+            CHECK(ui->r4->value() == Approx(static_cast<double>(params.extModelParams.getR4())));
+            CHECK(ui->tx->value() == Approx(static_cast<double>(params.extModelParams.getTx())));
+            CHECK(ui->ty->value() == Approx(static_cast<double>(params.extModelParams.getTy())));
+            CHECK(ui->r6->value() == Approx(static_cast<double>(params.extModelParams.getR6())));
+            CHECK(ui->k4->value() == Approx(static_cast<double>(params.extModelParams.getK4())));
+            CHECK(ui->k5->value() == Approx(static_cast<double>(params.extModelParams.getK5())));
+            CHECK(ui->k6->value() == Approx(static_cast<double>(params.extModelParams.getK6())));
+            CHECK(ui->s1->value() == Approx(static_cast<double>(params.extModelParams.getS1())));
+            CHECK(ui->s2->value() == Approx(static_cast<double>(params.extModelParams.getS2())));
+            CHECK(ui->s3->value() == Approx(static_cast<double>(params.extModelParams.getS3())));
+            CHECK(ui->s4->value() == Approx(static_cast<double>(params.extModelParams.getS4())));
+            CHECK(ui->taux->value() == Approx(static_cast<double>(params.extModelParams.getTaux())));
+            CHECK(ui->tauy->value() == Approx(static_cast<double>(params.extModelParams.getTauy())));
+            CHECK(
+                ui->intrError->text().toDouble() ==
+                Approx(static_cast<double>(params.extModelParams.reprojectionError)));
         }
-
         GIVEN("Some parameters are out of range")
         {
-            params.distortionCoeffs.at<float>(12) = 156468;
-            auto oldParams                        = intrBox.getIntrinsicCameraParams();
+            params.extModelParams.setS4(156468);
             THEN("An exception is thrown")
             {
                 CHECK_THROWS_AS(intrBox.setIntrinsicCameraParams(params), std::domain_error);
@@ -136,6 +152,37 @@ TEST_CASE("IntrinsicCameraParams values")
         {
             CHECK(spy.count() == 1);
         }
+
+        AND_WHEN("I press the extended model checkbox")
+        {
+            ui->extModelCheckBox->setChecked(false);
+
+            THEN("The old model parameters are shown in the UI")
+            {
+                CHECK(ui->fx->value() == Approx(params.oldModelParams.getFx()));
+                CHECK(ui->fy->value() == Approx(params.oldModelParams.getFy()));
+                CHECK(ui->cx->value() == Approx(params.oldModelParams.getCx()));
+                CHECK(ui->cy->value() == Approx(params.oldModelParams.getCy()));
+
+                CHECK(ui->r2->value() == Approx(static_cast<double>(params.oldModelParams.getR2())));
+                CHECK(ui->r4->value() == Approx(static_cast<double>(params.oldModelParams.getR4())));
+                CHECK(ui->tx->value() == Approx(static_cast<double>(params.oldModelParams.getTx())));
+                CHECK(ui->ty->value() == Approx(static_cast<double>(params.oldModelParams.getTy())));
+                CHECK(ui->r6->value() == Approx(static_cast<double>(params.oldModelParams.getR6())));
+                CHECK(ui->k4->value() == Approx(static_cast<double>(params.oldModelParams.getK4())));
+                CHECK(ui->k5->value() == Approx(static_cast<double>(params.oldModelParams.getK5())));
+                CHECK(ui->k6->value() == Approx(static_cast<double>(params.oldModelParams.getK6())));
+                CHECK(ui->s1->value() == Approx(static_cast<double>(params.oldModelParams.getS1())));
+                CHECK(ui->s2->value() == Approx(static_cast<double>(params.oldModelParams.getS2())));
+                CHECK(ui->s3->value() == Approx(static_cast<double>(params.oldModelParams.getS3())));
+                CHECK(ui->s4->value() == Approx(static_cast<double>(params.oldModelParams.getS4())));
+                CHECK(ui->taux->value() == Approx(static_cast<double>(params.oldModelParams.getTaux())));
+                CHECK(ui->tauy->value() == Approx(static_cast<double>(params.oldModelParams.getTauy())));
+                CHECK(
+                    ui->intrError->text().toDouble() ==
+                    Approx(static_cast<double>(params.oldModelParams.reprojectionError)));
+            }
+        }
     }
 }
 
@@ -143,8 +190,13 @@ TEST_CASE("IntrinsicBox: reading/writing xml")
 {
     AutoCalib         autoCalib;
     CalibFilter       filterCalib;
+    Petrack           petrack{"Unkown"};
+    Autosave          autosave(petrack);
+    PersonStorage     storage(petrack, autosave);
+    ExtrCalibration   calib(storage);
+    ExtrinsicBox      extrBox(nullptr, calib);
     Ui::IntrinsicBox *ui      = new Ui::IntrinsicBox(); // ownership transferred to IntrinsicBox
-    auto              intrBox = IntrinsicBox(nullptr, ui, autoCalib, filterCalib, []() {});
+    auto              intrBox = IntrinsicBox(nullptr, ui, autoCalib, filterCalib, extrBox, []() {});
 
     // spliting, because changing some of these also changes the intrinsic params
     WHEN("We change non-calculated values")
@@ -173,8 +225,8 @@ TEST_CASE("IntrinsicBox: reading/writing xml")
             {
                 AutoCalib         newAutoCalib;
                 CalibFilter       newFilterCalib;
-                Ui::IntrinsicBox *newUi      = new Ui::IntrinsicBox(); // ownership transferred to IntrinsicBox
-                auto              newIntrBox = IntrinsicBox(nullptr, newUi, newAutoCalib, newFilterCalib, []() {});
+                Ui::IntrinsicBox *newUi = new Ui::IntrinsicBox(); // ownership transferred to IntrinsicBox
+                auto newIntrBox         = IntrinsicBox(nullptr, newUi, newAutoCalib, newFilterCalib, extrBox, []() {});
 
                 for(auto subElem = elem.firstChildElement(); !subElem.isNull(); subElem = subElem.nextSiblingElement())
                 {
@@ -191,6 +243,24 @@ TEST_CASE("IntrinsicBox: reading/writing xml")
                 CHECK(newUi->fixCenter->isChecked() == ui->fixCenter->isChecked());
                 CHECK(newUi->tangDist->isChecked() == ui->tangDist->isChecked());
                 CHECK(newUi->extModelCheckBox->isChecked() == ui->extModelCheckBox->isChecked());
+
+                AND_THEN("parameters are correctly disabled")
+                {
+                    CHECK(!newUi->cx->isEnabled());
+                    CHECK(!newUi->cy->isEnabled());
+                    CHECK(!newUi->fy->isEnabled());
+                    CHECK(!newUi->tx->isEnabled());
+                    CHECK(!newUi->ty->isEnabled());
+                    CHECK(!newUi->k4->isEnabled());
+                    CHECK(!newUi->k5->isEnabled());
+                    CHECK(!newUi->k6->isEnabled());
+                    CHECK(!newUi->s1->isEnabled());
+                    CHECK(!newUi->s2->isEnabled());
+                    CHECK(!newUi->s3->isEnabled());
+                    CHECK(!newUi->s4->isEnabled());
+                    CHECK(!newUi->taux->isEnabled());
+                    CHECK(!newUi->tauy->isEnabled());
+                }
             }
         }
     }
@@ -214,8 +284,8 @@ TEST_CASE("IntrinsicBox: reading/writing xml")
             {
                 AutoCalib         newAutoCalib;
                 CalibFilter       newFilterCalib;
-                Ui::IntrinsicBox *newUi      = new Ui::IntrinsicBox(); // ownership transferred to IntrinsicBox
-                auto              newIntrBox = IntrinsicBox(nullptr, newUi, newAutoCalib, newFilterCalib, []() {});
+                Ui::IntrinsicBox *newUi = new Ui::IntrinsicBox(); // ownership transferred to IntrinsicBox
+                auto newIntrBox         = IntrinsicBox(nullptr, newUi, newAutoCalib, newFilterCalib, extrBox, []() {});
 
                 for(auto subElem = elem.firstChildElement(); !subElem.isNull(); subElem = subElem.nextSiblingElement())
                 {
@@ -231,22 +301,25 @@ TEST_CASE("IntrinsicBox: reading/writing xml")
     WHEN("We change calculated values")
     {
         // set different parameters:
-        IntrinsicCameraParams params;
-        params.cameraMatrix = (cv::Mat_<double>(3, 3) << 800, 0, 5, 0, 900, 7, 0, 0, 1);
-        std::iota(params.distortionCoeffs.begin<float>(), params.distortionCoeffs.end<float>(), -5);
+        IntrinsicModelsParameters params;
+        params.oldModelParams.cameraMatrix = (cv::Mat_<double>(3, 3) << 800, 0, 5, 0, 900, 7, 0, 0, 1);
+        // values need to be in valid range -5 to 5
+        params.oldModelParams.distortionCoeffs =
+            (cv::Mat_<float>(1, 14) << -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, 1, 1.5, 2, 2.5, 3, 3.5);
+        params.oldModelParams.reprojectionError = 0.5;
+
+        params.extModelParams.cameraMatrix = (cv::Mat_<double>(3, 3) << 600, 0, 5, 0, 800, 7, 0, 0, 1);
         // values need to be in valid range -5 to 5
-        params.distortionCoeffs.at<float>(10) = 1;
-        params.distortionCoeffs.at<float>(11) = 2;
-        params.distortionCoeffs.at<float>(12) = 3;
-        params.distortionCoeffs.at<float>(13) = 4;
-        params.reprojectionError              = 0.5;
+        params.extModelParams.distortionCoeffs =
+            (cv::Mat_<float>(1, 14) << 4.5, 4, 3.5, 3, 2.5, 2, 1.5, 1, -1, -1.5, -2, -2.5, -3, -3.5);
+        params.extModelParams.reprojectionError = 78.5;
         intrBox.setIntrinsicCameraParams(params);
 
         AND_WHEN("We save the widget into a pet-file")
         {
             QDomDocument doc;
             auto         root = doc.createElement("PETRACK");
-            root.setAttribute("VERSION", "0.9.2");
+            root.setAttribute("VERSION", "0.10.1");
             doc.appendChild(root);
             QDomElement elem = doc.createElement("CALIBRATION");
             root.appendChild(elem);
@@ -255,8 +328,8 @@ TEST_CASE("IntrinsicBox: reading/writing xml")
             {
                 AutoCalib         newAutoCalib;
                 CalibFilter       newFilterCalib;
-                Ui::IntrinsicBox *newUi      = new Ui::IntrinsicBox(); // ownership transferred to IntrinsicBox
-                auto              newIntrBox = IntrinsicBox(nullptr, newUi, newAutoCalib, newFilterCalib, []() {});
+                Ui::IntrinsicBox *newUi = new Ui::IntrinsicBox(); // ownership transferred to IntrinsicBox
+                auto newIntrBox         = IntrinsicBox(nullptr, newUi, newAutoCalib, newFilterCalib, extrBox, []() {});
 
                 for(auto subElem = elem.firstChildElement(); !subElem.isNull(); subElem = subElem.nextSiblingElement())
                 {
@@ -264,16 +337,41 @@ TEST_CASE("IntrinsicBox: reading/writing xml")
                 }
 
                 INFO(nodeToString(elem).toStdString())
-                auto oldParams = intrBox.getIntrinsicCameraParams();
-                auto newParams = newIntrBox.getIntrinsicCameraParams();
+                auto originalParams   = intrBox.getBothIntrinsicCameraParams();
+                auto serializedParams = newIntrBox.getBothIntrinsicCameraParams();
                 CHECK(
-                    cv::norm(oldParams.cameraMatrix - newParams.cameraMatrix) ==
+                    cv::norm(
+                        originalParams.oldModelParams.cameraMatrix - serializedParams.oldModelParams.cameraMatrix) ==
                     Approx(0).margin(SERIALIZATION_MARGIN));
                 CHECK(
-                    cv::norm(oldParams.distortionCoeffs - newParams.distortionCoeffs) ==
+                    cv::norm(
+                        originalParams.oldModelParams.distortionCoeffs -
+                        serializedParams.oldModelParams.distortionCoeffs) == Approx(0).margin(SERIALIZATION_MARGIN));
+
+                CHECK(
+                    originalParams.oldModelParams.reprojectionError ==
+                    Approx(serializedParams.oldModelParams.reprojectionError));
+
+                // check extended model parameters
+                CHECK(
+                    cv::norm(
+                        originalParams.extModelParams.cameraMatrix - serializedParams.extModelParams.cameraMatrix) ==
                     Approx(0).margin(SERIALIZATION_MARGIN));
+                CHECK(
+                    cv::norm(
+                        originalParams.extModelParams.distortionCoeffs -
+                        serializedParams.extModelParams.distortionCoeffs) == Approx(0).margin(SERIALIZATION_MARGIN));
 
-                CHECK(oldParams.reprojectionError == Approx(newParams.reprojectionError));
+                if(qIsNaN(originalParams.extModelParams.reprojectionError))
+                {
+                    CHECK(qIsNaN(serializedParams.extModelParams.reprojectionError));
+                }
+                else
+                {
+                    CHECK(
+                        originalParams.extModelParams.reprojectionError ==
+                        Approx(serializedParams.extModelParams.reprojectionError));
+                }
             }
         }
     }
@@ -281,12 +379,17 @@ TEST_CASE("IntrinsicBox: reading/writing xml")
 
 TEST_CASE("ImageSizeChanged")
 {
-    AutoCalib     autoCalib;
-    CalibFilter   filterCalib;
-    auto         *ui      = new Ui::IntrinsicBox(); // ownership transferred to IntrinsicBox
-    auto          intrBox = IntrinsicBox(nullptr, ui, autoCalib, filterCalib, []() {});
-    constexpr int width   = 1280;
-    constexpr int height  = 720;
+    AutoCalib       autoCalib;
+    CalibFilter     filterCalib;
+    Petrack         petrack{"Unkown"};
+    Autosave        autosave(petrack);
+    PersonStorage   storage(petrack, autosave);
+    ExtrCalibration calib(storage);
+    ExtrinsicBox    extrBox(nullptr, calib);
+    auto           *ui      = new Ui::IntrinsicBox(); // ownership transferred to IntrinsicBox
+    auto            intrBox = IntrinsicBox(nullptr, ui, autoCalib, filterCalib, extrBox, []() {});
+    constexpr int   width   = 1280;
+    constexpr int   height  = 720;
 
     WHEN("the image size changes")
     {
@@ -294,10 +397,28 @@ TEST_CASE("ImageSizeChanged")
         {
             ui->fixCenter->setChecked(true);
             intrBox.imageSizeChanged(width, height, 0);
+
+            double cxFixed = (width - 1) / 2.;
+            double cyFixed = (height - 1) / 2.;
             THEN("cx and cy are set to the new image center")
             {
-                CHECK(ui->cx->value() == Approx((width - 1) / 2.));
-                CHECK(ui->cy->value() == Approx((height - 1) / 2.));
+                IntrinsicCameraParams params = intrBox.getIntrinsicCameraParams();
+                CHECK(params.getCx() == Approx(cxFixed));
+                CHECK(params.getCy() == Approx(cyFixed));
+                CHECK(ui->cx->value() == Approx(cxFixed));
+                CHECK(ui->cy->value() == Approx(cyFixed));
+            }
+            AND_WHEN("I switch calibration models")
+            {
+                ui->extModelCheckBox->setChecked(false);
+                IntrinsicCameraParams params = intrBox.getIntrinsicCameraParams();
+                THEN("cx and cy are updated in ui and data accordingly")
+                {
+                    CHECK(params.getCx() == Approx(cxFixed));
+                    CHECK(params.getCy() == Approx(cyFixed));
+                    CHECK(ui->cx->value() == Approx(cxFixed));
+                    CHECK(ui->cy->value() == Approx(cyFixed));
+                }
             }
         }