diff --git a/cygclass/git.cygclass b/cygclass/git.cygclass
index 3cb2c0d..56ca69e 100644
--- a/cygclass/git.cygclass
+++ b/cygclass/git.cygclass
@@ -42,6 +42,15 @@
 #  git
 #****
 
+#****v* git.cygclass/GIT_COMPRESSION_EXT
+#  SYNOPSIS
+#  GIT_COMPRESSION_EXT="xz"
+#  DESCRIPTION
+#  The compression to be used for package tar archives, default xz.
+#  DEFINITION
+GIT_COMPRESSION_EXT="${GIT_COMPRESSION_EXT:-xz}"
+#****
+
 #****v* git.cygclass/GIT_URI
 #  DESCRIPTION
 #  Address of Git repository from which to clone.  Must be defined before
@@ -60,7 +69,7 @@ then
 	GIT_MODULE=${GIT_MODULE%.git}
 fi
 
-git_tarball="${GIT_MODULE}-${PV}.tar.bz2"
+git_tarball="${GIT_MODULE}-${PV}.tar.${GIT_COMPRESSION_EXT}"
 
 SRC_URI="${git_tarball} "
 SRC_DIR="${GIT_MODULE}${GIT_SUBDIR+/}${GIT_SUBDIR}"
@@ -144,7 +153,7 @@ git_fetch() {
 	fi
 
 	cd ${T}/
-	tar ${_tar_bz2_flag}cf ${top}/${git_tarball} --exclude-vcs ${GIT_MODULE}/${GIT_SUBDIR}
+	tar $(__tar_compress_opt ${GIT_COMPRESSION_EXT})cf ${top}/${git_tarball} --exclude-vcs ${GIT_MODULE}/${GIT_SUBDIR}
 }
 
 readonly -f git_fetch
diff --git a/lib/pkg_pkg.cygpart b/lib/pkg_pkg.cygpart
index fb0805e..bf1a8cf 100644
--- a/lib/pkg_pkg.cygpart
+++ b/lib/pkg_pkg.cygpart
@@ -41,31 +41,46 @@
 TAR_COMPRESSION_EXT="${TAR_COMPRESSION_EXT:-xz}"
 #****
 
-__tar() {
-	local TAR_COMPRESSION_OPT TAR_SOURCE_DATE_OPTS;
+__tar_compress_opt() {
+	local _COMPRESSION_OPT COMPRESSION_EXT;
+
+	if [ $# -eq 0 ]; then
+		# Assume .xz as default compression engine
+		_COMPRESSION_EXT="xz"
+	else
+		_COMPRESSION_EXT="$1"
+	fi
 
 	# We could use --auto-compress, but this also constrains the extension
 	# to the currently valid set. We could probe if tar supports the
 	# compression and/or use an external compressor.
-	case ${TAR_COMPRESSION_EXT} in
-		bz2)
-			TAR_COMPRESSION_OPT="-j"
-			;;
-		gz)
-			TAR_COMPRESSION_OPT="-z"
-			warning "gzip compression for packages is considered obsolete"
-			;;
-		xz)
-			TAR_COMPRESSION_OPT="-J"
-			;;
-		zst)
-			TAR_COMPRESSION_OPT="--zstd"
-			;;
-		*)
-			error "tar option for TAR_COMPRESSION_EXT='${TAR_COMPRESSION_EXT}' unknown"
-			;;
+	case ${_COMPRESSION_EXT} in
+	bz2)
+		_COMPRESSION_OPT="${_tar_bz2_flag}"
+		;;
+	gz)
+		_COMPRESSION_OPT="-z"
+		warning "gzip compression for packages is considered obsolete"
+		;;
+	xz)
+		_COMPRESSION_OPT="-J"
+		;;
+	zst)
+		_COMPRESSION_OPT="--zstd -"
+		;;
+	*)
+		error "tar compressor '${_COMPRESSION_EXT}' is unknown"
+	;;
 	esac
 
+	echo -n ${_COMPRESSION_OPT}
+}
+
+__tar() {
+	local TAR_COMPRESSION_OPT TAR_SOURCE_DATE_OPTS;
+
+	TAR_COMPRESSION_OPT=$(__tar_compress_opt ${TAR_COMPRESSION_EXT})
+
 	if [ -n "${SOURCE_DATE_EPOCH}" ]
 	then
 		# Ensure reproducible sort order and last modification times <= SOURCE_DATE_EPOCH
