diff --git a/src/thd_json/projection/__init__.py b/src/thd_json/projection/__init__.py
index 903f6594e0575d6b80fc663ad5d9b37d50b9478a..06c9b53ca01ff559bf7c521d87b9c6d2cf12825a 100644
--- a/src/thd_json/projection/__init__.py
+++ b/src/thd_json/projection/__init__.py
@@ -49,6 +49,7 @@ def get_projection_dict(
     image_dimensions_px: np.ndarray,
     pixel_pitch_mm: np.ndarray,
     header: JsonHeader | None = None,
+    focal_spot_orientation_quat: np.ndarray | None = None
 ):
     if header is None:
         header = generate_header()
@@ -59,6 +60,7 @@ def get_projection_dict(
         detector_center_position_mm,
         detector_center_orientation_quat,
         header,
+        focal_spot_orientation_quat
     )
 
     projection['detector'] = get_detector_dict(image_dimensions_px, pixel_pitch_mm)
diff --git a/src/thd_json/projection_geometry/__init__.py b/src/thd_json/projection_geometry/__init__.py
index f2e0f9f93076956f19359bc5a547bb942bb3e46f..de1571f72f7535c1c49d8064fbf4a3b304b1f565 100644
--- a/src/thd_json/projection_geometry/__init__.py
+++ b/src/thd_json/projection_geometry/__init__.py
@@ -45,6 +45,7 @@ def get_projection_geometry_dict(
     detector_center_position_mm: np.ndarray,
     detector_center_orientation_quat: np.ndarray,
     header: JsonHeader | None = None,
+    focal_spot_orientation_quat: np.ndarray | None = None
 ):
     if header is None:
         header = generate_header()
@@ -59,6 +60,10 @@ def get_projection_geometry_dict(
     projection_geometry["detector_center_orientation_quat"] = quaternion_to_dict(
         detector_center_orientation_quat
     )
+    if focal_spot_orientation_quat is not None:
+        projection_geometry["focal_spot_orientation_quat"] = quaternion_to_dict(
+            focal_spot_orientation_quat
+        )
 
     projection_geometry["header"] = {"uuid": header.uuid}