diff --git a/handlers/borg.helper.in b/handlers/borg.helper.in
index c995310c57057c2bdf2023128abe2f954e1a653e..6cc4d6bd026f181b1192c9c1f862c5bee104271f 100644
--- a/handlers/borg.helper.in
+++ b/handlers/borg.helper.in
@@ -272,13 +272,21 @@ do_borg_prune() {
       declare -a tmp_array
       set -o noglob
       REPLY=
-      formBegin "$borg_title - keep all backups made within this number of days"
-         formItem "keep" "$borg_keep"
+      formBegin "$borg_title - what backups to keep:"
+         formItem "hourly" "$borg_keep_hourly"
+         # for backwards compatibility daily is still named borg_keep
+         formItem "daily" "$borg_keep"
+         formItem "weekly" "$borg_keep_weekly"
+         formItem "monthly" "$borg_keep_monthly"
+         formItem "yearly" "$borg_keep_yearly"
          formDisplay
-
       [ $? = 0 ] || return
       tmp_array=($REPLY)
-      borg_keep=${tmp_array[0]}
+      borg_keep_hourly=${tmp_array[0]}
+      borg_keep=${tmp_array[1]}
+      borg_keep_weekly=${tmp_array[2]}
+      borg_keep_monthly=${tmp_array[3]}
+      borg_keep_yearly=${tmp_array[4]}
 
       set +o noglob
    fi
@@ -312,8 +320,13 @@ EOF
    cat >> $next_filename <<EOF
 
 ## for more info see : borg prune -h
+[prune]
 prune = $borg_prune
-keep = "${borg_keep}d"
+keep_hourly = $borg_keep_hourly
+keep = $borg_keep
+keep_weekly = $borg_keep_weekly
+keep_monthly = $borg_keep_monthly
+keep_yearly = $borg_keep_yearly
 
 [dest]
 directory = $borg_directory
@@ -381,7 +394,14 @@ borg_wizard() {
    borg_compression=lz4
    borg_encryption=none
    borg_passphrase=
+
+   # pruning
+   borg_keep_hourly=
+   # for backwards compatibility daily is still named keep
    borg_keep=30
+   borg_keep_weekly=
+   borg_keep_monthly=
+   borg_keep_yearly=
 
    # Global variables whose '*' shall not be expanded
    set -o noglob
diff --git a/handlers/borg.in b/handlers/borg.in
index 6d9128cb928bf37a7942be2828bc2d9d832a3021..e6bb7902016d991b31bf7dc6e7d034da696563db 100644
--- a/handlers/borg.in
+++ b/handlers/borg.in
@@ -28,11 +28,18 @@ getconf init yes
 getconf include
 getconf exclude
 getconf create_options
-getconf prune yes
-getconf keep 30d
-getconf prune_options
 getconf cache_directory
 
+setsection prune
+getconf prune
+getconf keep_hourly
+# daily is still named keep for backwards compatibility
+getconf keep
+getconf keep_weekly
+getconf keep_monthly
+getconf keep_yearly
+getconf prune_options
+
 setsection dest
 getconf user
 getconf host
@@ -163,9 +170,24 @@ fi
 
 # borg prune
 if [ "$prune" == "yes" ]; then
-   if [ ! "$keep" == "0" ]; then
-      prune_options="${prune_options} --keep-within=${keep}"
+
+   # add the different pruning configurations to the cmd string if set
+   if [ ! -z "$keep_hourly" ]; then
+       prune_options="${prune_options} --keep-hourly=$keep_hourly"
+   fi
+   if [ ! -z "$keep" ]; then
+       prune_options="${prune_options} --keep-daily=$keep"
    fi
+   if [ ! -z "$keep_weekly" ]; then
+       prune_options="${prune_options} --keep-weekly=$keep_weekly"
+   fi
+   if [ ! -z "$keep_monthly" ]; then
+       prune_options="${prune_options} --keep-monthly=$keep_monthly"
+   fi
+   if [ ! -z "$keep_yearly" ]; then
+       prune_options="${prune_options} --keep-yearly=$keep_yearly"
+   fi
+
    prunestr="borg prune $prune_options $execstr_repository"
    debug "$prunestr"
    if [ $test = 0 ]; then