diff --git a/u4py/analysis/classify.py b/u4py/analysis/classify.py
index 6ac75bf0c003b86785349ed7a3167613d179b479..d32242a44c64aa8246644b7ea3b6166e36a7c48e 100644
--- a/u4py/analysis/classify.py
+++ b/u4py/analysis/classify.py
@@ -157,6 +157,10 @@ def classify_shape(
         else:
             res.update(buildings(res, sub_set_hull, shp_cfg, osm_path))
 
+        # District
+        if use_online:
+            res.update(district(res, sub_set_hull, out_folder=cache_path))
+
         # Water
         res.update(rivers_water(res, sub_set_hull, osm_path, shp_cfg))
 
@@ -244,14 +248,15 @@ def preallocate_results() -> U4ResDict:
         "aspect_polygons_std_19": [],
         "aspect_polygons_std_21": [],
         "buildings_area": np.nan,
-        "buildings": gp.GeoDataFrame(),
-        "buildings_num": 0,
         "buildings_close": False,
+        "buildings_num": 0,
+        "buildings": gp.GeoDataFrame(),
+        "district": [],
         "geology_area": [],
+        "geology_mapname": [],
+        "geology_mapnum": [],
         "geology_percent": [],
         "geology_units": [],
-        "geology_mapnum": [],
-        "geology_mapname": [],
         "geometry": gp.GeoDataFrame(),
         "group": np.nan,
         "hydro_area": [],
@@ -284,40 +289,40 @@ def preallocate_results() -> U4ResDict:
         "manual_unclear_1": False,
         "manual_unclear_2": False,
         "manual_unclear_3": False,
+        "railways_close": False,
         "railways_has": False,
         "railways_length": np.nan,
-        "railways_close": False,
-        "roads_has": False,
         "roads_close": False,
         "roads_has_motorway": False,
         "roads_has_primary": False,
         "roads_has_secondary": False,
-        "roads_motorway_names": [],
-        "roads_primary_names": [],
-        "roads_secondary_names": [],
-        "roads_motorway_length": [],
-        "roads_primary_length": [],
-        "roads_secondary_length": [],
-        "roads_nearest_motorway_name": "",
-        "roads_nearest_primary_name": "",
-        "roads_nearest_secondary_name": "",
-        "roads_nearest_motorway_dist": np.nan,
-        "roads_nearest_primary_dist": np.nan,
-        "roads_nearest_secondary_dist": np.nan,
+        "roads_has": False,
         "roads_main_area": np.nan,
         "roads_main": gp.GeoDataFrame(),
         "roads_minor_area": np.nan,
         "roads_minor": gp.GeoDataFrame(),
+        "roads_motorway_length": [],
+        "roads_motorway_names": [],
+        "roads_nearest_motorway_dist": np.nan,
+        "roads_nearest_motorway_name": "",
+        "roads_nearest_primary_dist": np.nan,
+        "roads_nearest_primary_name": "",
+        "roads_nearest_secondary_dist": np.nan,
+        "roads_nearest_secondary_name": "",
+        "roads_primary_length": [],
+        "roads_primary_names": [],
+        "roads_secondary_length": [],
+        "roads_secondary_names": [],
         "rockfall_num_1km": np.nan,
         "rockfall_num_inside": np.nan,
+        "shape_aspect": [],
+        "shape_breadth": [],
         "shape_ellipse_a": [],
         "shape_ellipse_b": [],
         "shape_ellipse_theta": [],
         "shape_flattening": [],
         "shape_roundness": [],
         "shape_width": [],
-        "shape_breadth": [],
-        "shape_aspect": [],
         "slope_hull_mean_14": [],
         "slope_hull_mean_19": [],
         "slope_hull_mean_21": [],
@@ -336,11 +341,11 @@ def preallocate_results() -> U4ResDict:
         "slope_polygons_std_14": [],
         "slope_polygons_std_19": [],
         "slope_polygons_std_21": [],
+        "structural_region": [],
         "subsidence_area": [],
         "subsidence_percent": [],
         "subsidence_total": np.nan,
         "subsidence_units": [],
-        "structural_region": [],
         "timeseries_annual_cosine": np.nan,
         "timeseries_annual_max_amplitude": np.nan,
         "timeseries_annual_max_time": np.nan,
@@ -356,14 +361,14 @@ def preallocate_results() -> U4ResDict:
         "topsoil_percent": np.nan,
         "topsoil_units": np.nan,
         "volumes_added": np.nan,
-        "volumes_moved": np.nan,
-        "volumes_removed": np.nan,
-        "volumes_total": np.nan,
         "volumes_error": np.nan,
+        "volumes_moved": np.nan,
         "volumes_polygons_added": np.nan,
         "volumes_polygons_moved": np.nan,
         "volumes_polygons_removed": np.nan,
         "volumes_polygons_total": np.nan,
+        "volumes_removed": np.nan,
+        "volumes_total": np.nan,
         "water_area": np.nan,
     }
     return res
@@ -600,6 +605,31 @@ def buildings(
     return res
 
 
+def district(
+    res: U4ResDict,
+    sub_set_hull: gp.GeoDataFrame,
+    out_folder: os.PathLike = "",
+) -> U4ResDict:
+    district_data = u4web.query_hlnug(
+        "geobasis/alkis_grenzen/MapServer",
+        "GEMARKUNG",
+        region=sub_set_hull,
+        out_folder=out_folder,
+        suffix=f"{res['group']:05}",
+    )
+    if district_data.empty:
+        logging.debug("Retrying to get building data.")
+        district_data = u4web.query_hlnug(
+            "geobasis/alkis_grenzen/MapServer",
+            "GEMARKUNG",
+            region=sub_set_hull,
+            out_folder=out_folder,
+            suffix=f"{res['group']:05}",
+        )
+    res["district"] = district_data["GM_NA"].unique().tolist()
+    return res
+
+
 def rivers_water(
     res: U4ResDict,
     sub_set_hull: gp.GeoDataFrame,
diff --git a/u4py/io/docx_report.py b/u4py/io/docx_report.py
index b995041134d3a22e7ca4ac56488b77624a107425..2dcf8d6439f94d7ca0ef9538959555df33d4dac0 100644
--- a/u4py/io/docx_report.py
+++ b/u4py/io/docx_report.py
@@ -226,6 +226,19 @@ def hlnug_description(
     else:
         prgph.add_run(". ")
 
+    # Add district name(s)
+    try:
+        district = eval(row["district"])
+    except NameError:
+        district = row["district"]
+    if district:
+        prgph.add_run("Sie befindet sich innerhalb ")
+        if isinstance(district, list):
+            district_string = u4human.listed_strings(district)
+            prgph.add_run(f"der Gemarkungen {district_string}. ")
+        else:
+            prgph.add_run(f"der Germarkung {district}. ")
+
     # Add dimensions
     prgph.add_run(
         f"Sie hat eine Länge von ca. {hld['LAENGE_M'].values[0]}\u00a0m, eine Breite von ca. {hld['BREITE_M'].values[0]}\u00a0m und verläuft nach {u4human.direction_to_text(hld['EXPOSITION'].values[0], in_lang='de')}. "
diff --git a/u4py/utils/types.py b/u4py/utils/types.py
index 44337e4b579a4499fa281cbe04e681257bd7f525..80d7356b249bdff955ac4d59e0ed009d9cd82baa 100644
--- a/u4py/utils/types.py
+++ b/u4py/utils/types.py
@@ -86,14 +86,15 @@ class U4ResDict(TypedDict):
     aspect_polygons_std_19: list
     aspect_polygons_std_21: list
     buildings_area: float
-    buildings: gp.GeoDataFrame
-    buildings_num: int
     buildings_close: bool
+    buildings_num: int
+    buildings: gp.GeoDataFrame
+    district: list
     geology_area: list
+    geology_mapname: list
+    geology_mapnum: list
     geology_percent: list
     geology_units: list
-    geology_mapnum: list
-    geology_mapname: list
     geometry: gp.GeoDataFrame
     group: float
     hydro_area: list
@@ -126,40 +127,40 @@ class U4ResDict(TypedDict):
     manual_unclear_1: bool
     manual_unclear_2: bool
     manual_unclear_3: bool
+    railways_close: bool
     railways_has: bool
     railways_length: float
-    railways_close: bool
-    roads_has: bool
+    roads_close: bool
     roads_has_motorway: bool
     roads_has_primary: bool
     roads_has_secondary: bool
-    roads_motorway_names: list
-    roads_primary_names: list
-    roads_secondary_names: list
-    roads_motorway_length: list
-    roads_primary_length: list
-    roads_secondary_length: list
-    roads_close: bool
-    roads_nearest_motorway_name: str
-    roads_nearest_primary_name: str
-    roads_nearest_secondary_name: str
-    roads_nearest_motorway_dist: float
-    roads_nearest_primary_dist: float
-    roads_nearest_secondary_dist: float
+    roads_has: bool
     roads_main_area: float
     roads_main: gp.GeoDataFrame
     roads_minor_area: float
     roads_minor: gp.GeoDataFrame
+    roads_motorway_length: list
+    roads_motorway_names: list
+    roads_nearest_motorway_dist: float
+    roads_nearest_motorway_name: str
+    roads_nearest_primary_dist: float
+    roads_nearest_primary_name: str
+    roads_nearest_secondary_dist: float
+    roads_nearest_secondary_name: str
+    roads_primary_length: list
+    roads_primary_names: list
+    roads_secondary_length: list
+    roads_secondary_names: list
     rockfall_num_1km: float
     rockfall_num_inside: float
+    shape_aspect: list
+    shape_breadth: list
     shape_ellipse_a: list
     shape_ellipse_b: list
     shape_ellipse_theta: list
     shape_flattening: list
     shape_roundness: list
     shape_width: list
-    shape_breadth: list
-    shape_aspect: list
     slope_hull_mean_14: list
     slope_hull_mean_19: list
     slope_hull_mean_21: list
@@ -178,11 +179,11 @@ class U4ResDict(TypedDict):
     slope_polygons_std_14: list
     slope_polygons_std_19: list
     slope_polygons_std_21: list
+    structural_region: list
     subsidence_area: list
     subsidence_percent: list
     subsidence_total: float
     subsidence_units: list
-    structural_region: list
     timeseries_annual_cosine: float
     timeseries_annual_max_amplitude: float
     timeseries_annual_max_time: float
@@ -198,14 +199,14 @@ class U4ResDict(TypedDict):
     topsoil_percent: float
     topsoil_units: float
     volumes_added: float
-    volumes_moved: float
-    volumes_removed: float
-    volumes_total: float
     volumes_error: float
+    volumes_moved: float
     volumes_polygons_added: float
     volumes_polygons_moved: float
     volumes_polygons_removed: float
     volumes_polygons_total: float
+    volumes_removed: float
+    volumes_total: float
     water_area: float
     well_number: int