diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index da386f584415d1b5bdf9e23c17618b036317e576..0efc7f3d6b58a08b8137dd51b96a6b12ebdc4a44 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -469,7 +469,7 @@ if ($backup_available) {
 				'datatype'      => 'INTEGER',
 				'formtype'      => 'SELECT',
 				'default'       => '',
-				'value'         => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10')
+				'value'			=> array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10', '15' => '15', '20' => '20', '30' => '30')
 			),
 		##################################
 		# END Datatable fields
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 8b5a36441aedc45ab5b4ccb19577d873d89e3c6b..5c3057f6851e7605d83e95a90e3b6886a70bf487 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -668,7 +668,7 @@ if ($backup_available) {
 				'datatype' => 'INTEGER',
 				'formtype' => 'SELECT',
 				'default' => '',
-				'value'  => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10')
+				'value'  => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10', '15' => '15', '20' => '20', '30' => '30')
 			),
 			'backup_excludes' => array (
 				'datatype' => 'VARCHAR',
diff --git a/server/lib/classes/cron.d/500-backup.inc.php b/server/lib/classes/cron.d/500-backup.inc.php
index f261daf468b726200e925474a8fc7aed3713ca85..b68dd3b8e1f71a051cf631b35eb1adff6f9a5c2c 100644
--- a/server/lib/classes/cron.d/500-backup.inc.php
+++ b/server/lib/classes/cron.d/500-backup.inc.php
@@ -33,6 +33,11 @@ class cronjob_backup extends cronjob {
 	// job schedule
 	protected $_schedule = '0 0 * * *';
 
+	/**
+	 * The maximum number of backups that ISPConfig can store.
+	 */
+	const max_backups = 30;
+
 	/* this function is optional if it contains no custom code */
 	public function onPrepare() {
 		global $app;
@@ -177,7 +182,7 @@ class cronjob_backup extends cronjob {
 
 							rsort($files);
 
-							for ($n = $backup_copies; $n <= 10; $n++) {
+							for ($n = $backup_copies; $n <= self::max_backups; $n++) {
 								if(isset($files[$n]) && is_file($web_backup_dir.'/'.$files[$n])) {
 									$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
 									$app->db->query($sql, $conf['server_id'], $web_id, $files[$n]);
@@ -306,7 +311,7 @@ class cronjob_backup extends cronjob {
 							reset($files);
 							foreach($files as $db_name => $filelist) {
 								rsort($filelist);
-								for ($n = $backup_copies; $n <= 10; $n++) {
+								for ($n = $backup_copies; $n <= self::max_backups; $n++) {
 									if(isset($filelist[$n]) && is_file($db_backup_dir.'/'.$filelist[$n])) {
 										$sql = "DELETE FROM web_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";
 										$app->db->query($sql, $conf['server_id'], $web_id, $filelist[$n]);
diff --git a/server/lib/classes/cron.d/500-backup_mail.inc.php b/server/lib/classes/cron.d/500-backup_mail.inc.php
index 234f02771db841d194e38f3e5050b4e6004e5868..2b1fd58177fe5de45801b5db6f365fc456deb4f7 100644
--- a/server/lib/classes/cron.d/500-backup_mail.inc.php
+++ b/server/lib/classes/cron.d/500-backup_mail.inc.php
@@ -33,6 +33,11 @@ class cronjob_backup_mail extends cronjob {
 	protected $_schedule = '0 0 * * *';
 	private $tmp_backup_dir = '';
 
+	/**
+	 * The maximum number of backups that ISPConfig can store.
+	 */
+	const max_backups = 30;
+
 	/* this function is optional if it contains no custom code */
 	public function onPrepare() {
 		global $app;
@@ -204,7 +209,7 @@ class cronjob_backup_mail extends cronjob {
 						}
 						$dir_handle->close();
 						rsort($files);
-						for ($n = $backup_copies; $n <= 10; $n++) {
+						for ($n = $backup_copies; $n <= self::max_backups; $n++) {
 							if(isset($files[$n]) && is_file($mail_backup_dir.'/'.$files[$n])) {
 								unlink($mail_backup_dir.'/'.$files[$n]);
 								$sql = "DELETE FROM mail_backup WHERE server_id = ? AND parent_domain_id = ? AND filename = ?";