diff --git a/u4py/io/tiff.py b/u4py/io/tiff.py
index 6de7b3f4fa158e99e8ae042dac5f93bcfa4ce384..70012e65b0a85d8ea861450bc4a6bdebae5e4819 100644
--- a/u4py/io/tiff.py
+++ b/u4py/io/tiff.py
@@ -10,6 +10,7 @@ import geopandas as gp
 import numpy as np
 import rasterio as rio
 import rasterio.mask as riomask
+import scipy.stats as spstats
 import shapely
 from osgeo import gdal
 from tqdm import tqdm
@@ -545,12 +546,22 @@ def calculate_terrain_in_shapes(
                 terrain = u4spatial.compute_for_raster_in_geom(
                     fp_terrain, shape, u4spatial.get_values, shapes.crs
                 )
-                if not terrain is None:
+                if terrain is not None:
                     data.extend(terrain)
             if len(data) > 0:
-                terrain_data["mean"].append(np.mean(data))
-                terrain_data["median"].append(np.median(data))
-                terrain_data["std"].append(np.std(data))
+                data = np.array(data)
+                if terrain_feature == "aspect":
+                    terrain_data["mean"].append(
+                        np.rad2deg(spstats.circmean(np.deg2rad(data)))
+                    )
+                    terrain_data["std"].append(
+                        np.rad2deg(spstats.circstd(np.deg2rad(data)))
+                    )
+
+                else:
+                    terrain_data["mean"].append(np.mean(data))
+                    terrain_data["median"].append(np.median(data))
+                    terrain_data["std"].append(np.std(data))
     return terrain_data