diff --git a/data/modules/armarx_integration/robots/armar6/rt.json b/data/modules/armarx_integration/robots/armar6/rt.json
index ddc87e5af3be0f990b62beb0fd5df47e83d90bcd..bab242c240bc7c4dad42c651a136f021b5c965de 100644
--- a/data/modules/armarx_integration/robots/armar6/rt.json
+++ b/data/modules/armarx_integration/robots/armar6/rt.json
@@ -24,6 +24,16 @@
 
   "build": "cmake",
 
+  "install": {
+    "env": {
+      "ARMAR_6_ABSOLUTE_ENCODER_CALIBRATION_NOTEBOOK_PATH": "$MODULE_PATH/python/abs_enc_calibration"
+    }
+  },
+
+  "features": {
+    "absolute_encoder_calibration": "armarx_integration/robots/armar6/util/absolute_encoder_calibration"
+  },
+
   "required_modules": {
     "armarx/meta/compiler": {},
     "armarx/ArmarXCore": {},
diff --git a/data/modules/armarx_integration/robots/armar6/util/absolute_encoder_calibration.json b/data/modules/armarx_integration/robots/armar6/util/absolute_encoder_calibration.json
new file mode 100644
index 0000000000000000000000000000000000000000..77f178b40650708201a075294c88773089d1ca2f
--- /dev/null
+++ b/data/modules/armarx_integration/robots/armar6/util/absolute_encoder_calibration.json
@@ -0,0 +1,39 @@
+{
+  "general": {
+    "authors": [
+      "Christian Dreher <c.dreher@kit.edu>"
+    ]
+  },
+
+  "prepare": {
+    "python": {
+      "packages": {
+        ".": {
+          "auto_generate_setup_py": true,
+          "install_editable": [
+            "$ABSOLUTE_ENCODER_CALIBRATION_PATH"
+          ],
+          "preinstall": [
+            "jupyter==1.0.0",
+            "-r $ABSOLUTE_ENCODER_CALIBRATION_PATH/requirements.txt"
+          ]
+        }
+      }
+    }
+  },
+
+  "install": {
+    "executables": {
+      "start_armar6_absolute_encoder_calibration_notebook": {
+        "pre_exec_commands": [
+          "export NOTEBOOK_PATH=\"$ARMAR_6_ABSOLUTE_ENCODER_CALIBRATION_NOTEBOOK_PATH\""
+        ],
+        "exec": "$MODULE_PATH/.venv/bin/jupyter notebook --no-browser --notebook-dir=$NOTEBOOK_PATH"
+      }
+    }
+  },
+
+  "required_modules": {
+    "h2t/absolute_encoder_calibration": {}
+  }
+}
diff --git a/data/modules/armarx_integration/robots/armar7/rt.json b/data/modules/armarx_integration/robots/armar7/rt.json
index f3abc38b55c9f6a64becffe11ce6831bd7518715..36199aebf71fd921476bf54084d5335e4b503a3b 100644
--- a/data/modules/armarx_integration/robots/armar7/rt.json
+++ b/data/modules/armarx_integration/robots/armar7/rt.json
@@ -1,6 +1,9 @@
 {
   "general": {
-    "url": "https://git.h2t.iar.kit.edu/sw/armarx-integration/robots/armar7/rt"
+    "url": "https://git.h2t.iar.kit.edu/sw/armarx-integration/robots/armar7/rt",
+    "authors": [
+      "Christian Dreher <c.dreher@kit.edu>"
+    ]
   },
 
   "update": {
@@ -8,6 +11,7 @@
       "h2t_gitlab_slug": "sw/armarx-integration/robots/armar7/rt"
     }
   },
+
   "prepare": {
     "cmake": {
       "project_name": "armar7_rt",
@@ -17,8 +21,19 @@
       }
     }
   },
+
   "build": "cmake",
 
+  "install": {
+    "env": {
+      "ARMAR_7_ABSOLUTE_ENCODER_CALIBRATION_NOTEBOOK_PATH": "$MODULE_PATH/python/abs_enc_calibration"
+    }
+  },
+
+  "features": {
+    "absolute_encoder_calibration": "armarx_integration/robots/armar7/util/absolute_encoder_calibration"
+  },
+
   "required_modules": {
     "armarx/meta/compiler": {},
     "armarx/ArmarXCore": {},
diff --git a/data/modules/armarx_integration/robots/armar7/util/absolute_encoder_calibration.json b/data/modules/armarx_integration/robots/armar7/util/absolute_encoder_calibration.json
new file mode 100644
index 0000000000000000000000000000000000000000..f7b076b52b22ec9779257dc13d919532f126639d
--- /dev/null
+++ b/data/modules/armarx_integration/robots/armar7/util/absolute_encoder_calibration.json
@@ -0,0 +1,39 @@
+{
+  "general": {
+    "authors": [
+      "Christian Dreher <c.dreher@kit.edu>"
+    ]
+  },
+
+  "prepare": {
+    "python": {
+      "packages": {
+        ".": {
+          "auto_generate_setup_py": true,
+          "install_editable": [
+            "$ABSOLUTE_ENCODER_CALIBRATION_PATH"
+          ],
+          "preinstall": [
+            "jupyter==1.0.0",
+            "-r $ABSOLUTE_ENCODER_CALIBRATION_PATH/requirements.txt"
+          ]
+        }
+      }
+    }
+  },
+
+  "install": {
+    "executables": {
+      "start_armar7_absolute_encoder_calibration_notebook": {
+        "pre_exec_commands": [
+          "export NOTEBOOK_PATH=\"$ARMAR_7_ABSOLUTE_ENCODER_CALIBRATION_NOTEBOOK_PATH\""
+        ],
+        "exec": "$MODULE_PATH/.venv/bin/jupyter notebook --no-browser --notebook-dir=$NOTEBOOK_PATH"
+      }
+    }
+  },
+
+  "required_modules": {
+    "h2t/absolute_encoder_calibration": {}
+  }
+}
diff --git a/data/modules/armarx_integration/robots/armarde/rt.json b/data/modules/armarx_integration/robots/armarde/rt.json
index aa9954a490402f14a913ecd6a85af07d51ea0c16..291e65171f287eba60b5596f1a0a207118a09848 100644
--- a/data/modules/armarx_integration/robots/armarde/rt.json
+++ b/data/modules/armarx_integration/robots/armarde/rt.json
@@ -1,6 +1,9 @@
 {
   "general": {
-    "url": "https://git.h2t.iar.kit.edu/sw/armarx-integration/robots/armarde/rt"
+    "url": "https://git.h2t.iar.kit.edu/sw/armarx-integration/robots/armarde/rt",
+    "authors": [
+      "Christian Dreher <c.dreher@kit.edu>"
+    ]
   },
 
   "update": {
@@ -8,6 +11,7 @@
       "h2t_gitlab_slug": "sw/armarx-integration/robots/armarde/rt"
     }
   },
+
   "prepare": {
     "cmake": {
       "project_name": "armarde_rt",
@@ -17,8 +21,19 @@
       }
     }
   },
+
   "build": "cmake",
 
+  "install": {
+    "env": {
+      "ARMAR_DE_ABSOLUTE_ENCODER_CALIBRATION_NOTEBOOK_PATH": "$MODULE_PATH/python/abs_enc_calibration"
+    }
+  },
+
+  "features": {
+    "absolute_encoder_calibration": "armarx_integration/robots/armarde/util/absolute_encoder_calibration"
+  },
+
   "required_modules": {
     "armarx/meta/compiler": {},
     "armarx/ArmarXCore": {},
diff --git a/data/modules/armarx_integration/robots/armarde/util/absolute_encoder_calibration.json b/data/modules/armarx_integration/robots/armarde/util/absolute_encoder_calibration.json
new file mode 100644
index 0000000000000000000000000000000000000000..767f03309064432e6a95627a510c849d2d4cf7a5
--- /dev/null
+++ b/data/modules/armarx_integration/robots/armarde/util/absolute_encoder_calibration.json
@@ -0,0 +1,39 @@
+{
+  "general": {
+    "authors": [
+      "Christian Dreher <c.dreher@kit.edu>"
+    ]
+  },
+
+  "prepare": {
+    "python": {
+      "packages": {
+        ".": {
+          "auto_generate_setup_py": true,
+          "install_editable": [
+            "$ABSOLUTE_ENCODER_CALIBRATION_PATH"
+          ],
+          "preinstall": [
+            "jupyter==1.0.0",
+            "-r $ABSOLUTE_ENCODER_CALIBRATION_PATH/requirements.txt"
+          ]
+        }
+      }
+    }
+  },
+
+  "install": {
+    "executables": {
+      "start_armarde_absolute_encoder_calibration_notebook": {
+        "pre_exec_commands": [
+          "export NOTEBOOK_PATH=\"$ARMAR_DE_ABSOLUTE_ENCODER_CALIBRATION_NOTEBOOK_PATH\""
+        ],
+        "exec": "$MODULE_PATH/.venv/bin/jupyter notebook --no-browser --notebook-dir=$NOTEBOOK_PATH"
+      }
+    }
+  },
+
+  "required_modules": {
+    "h2t/absolute_encoder_calibration": {}
+  }
+}
diff --git a/data/modules/h2t/absolute_encoder_calibration.json b/data/modules/h2t/absolute_encoder_calibration.json
new file mode 100644
index 0000000000000000000000000000000000000000..38e783406b36c3ce2ddc13b27275ec22c40a488a
--- /dev/null
+++ b/data/modules/h2t/absolute_encoder_calibration.json
@@ -0,0 +1,28 @@
+{
+  "general": {
+    "url": "https://git.h2t.iar.kit.edu/sw/absolute-encoder-calibration",
+    "authors": [
+      "Christian Dreher <c.dreher@kit.edu>"
+    ]
+  },
+
+  "update": {
+    "git": {
+      "h2t_gitlab_slug": "sw/absolute-encoder-calibration"
+    }
+  },
+
+  "prepare": {
+    "python": {
+      "packages": {
+        ".": {}
+      }
+    }
+  },
+
+  "install": {
+    "env": {
+      "ABSOLUTE_ENCODER_CALIBRATION_PATH": "$MODULE_PATH"
+    }
+  }
+}