Index: branches/5.2.x/core/install/install_schema.sql
===================================================================
--- branches/5.2.x/core/install/install_schema.sql
+++ branches/5.2.x/core/install/install_schema.sql
@@ -1439,3 +1439,11 @@
   TransitionEffectCustom varchar(255) NOT NULL DEFAULT '',
   PRIMARY KEY (PromoBlockGroupId)
 );
+
+CREATE TABLE ExportUserPresets (
+  PortalUserId int NOT NULL DEFAULT 0,
+  ItemPrefix varchar(100) NOT NULL DEFAULT '',
+  PresetName varchar(100) NOT NULL DEFAULT '',
+  PresetData text NULL DEFAULT NULL,
+  PRIMARY KEY (PortalUserId, ItemPrefix, PresetName)
+);
Index: branches/5.2.x/core/install/remove_schema.sql
===================================================================
--- branches/5.2.x/core/install/remove_schema.sql
+++ branches/5.2.x/core/install/remove_schema.sql
@@ -77,3 +77,4 @@
 DROP TABLE CurlLog;
 DROP TABLE PromoBlocks;
 DROP TABLE PromoBlockGroups;
+DROP TABLE ExportUserPresets;
Index: branches/5.2.x/core/install/upgrades.php
===================================================================
--- branches/5.2.x/core/install/upgrades.php
+++ branches/5.2.x/core/install/upgrades.php
@@ -2367,6 +2367,10 @@
 		 */
 		public function Upgrade_5_2_2_B3($mode)
 		{
+			if ( $mode === 'after' ) {
+				$this->migrateExportUserPresets();
+			}
+
 			if ( $mode != 'before' ) {
 				return;
 			}
@@ -2411,4 +2415,43 @@
 				}
 			}
 		}
+
+		/**
+		 * Transforms "export_settings" persistent session variable into "ExportUserPresets" database table.
+		 *
+		 * @return void
+		 */
+		protected function migrateExportUserPresets()
+		{
+			$sql = 'SELECT VariableValue, PortalUserId
+			 			FROM ' . TABLE_PREFIX . 'UserPersistentSessionData
+			 			WHERE VariableName = "export_settings"';
+			$variable_values = $this->Conn->GetColIterator($sql, 'PortalUserId');
+
+			foreach ( $variable_values as $user_id => $variable_value ) {
+				if ( !kUtil::IsSerialized($variable_value) ) {
+					continue;
+				}
+
+				$variable_value = unserialize($variable_value);
+
+				foreach ( $variable_value as $prefix => $prefix_export_settings ) {
+					foreach ( $prefix_export_settings as $name => $export_settings ) {
+						$fields_hash = array(
+							'PortalUserId' => $user_id,
+							'ItemPrefix' => $prefix,
+							'PresetName' => $name,
+							'PresetData' => json_encode($export_settings),
+						);
+						$this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'ExportUserPresets', 'REPLACE');
+					}
+				}
+			}
+
+			$sql = 'DELETE
+					FROM ' . TABLE_PREFIX . 'UserPersistentSessionData
+					WHERE VariableName = "export_settings"';
+			$this->Conn->Query($sql);
+		}
+
 	}
Index: branches/5.2.x/core/install/upgrades.sql
===================================================================
--- branches/5.2.x/core/install/upgrades.sql
+++ branches/5.2.x/core/install/upgrades.sql
@@ -2972,3 +2972,11 @@
 	ADD COLUMN `RequestURI` varchar(255) NOT NULL DEFAULT '',
 	ADD COLUMN `Backtrace` longtext NULL;
 INSERT INTO SystemSettings VALUES(DEFAULT, 'SemaphoreLifetimeInSeconds', '300', 'In-Portal', 'in-portal:configure_advanced', 'la_section_SettingsSystem', 'la_config_SemaphoreLifetimeInSeconds', 'text', '', 'style=\"width: 50px;\"', 60.1, 0, 1, 'hint:la_config_SemaphoreLifetimeInSeconds');
+
+CREATE TABLE ExportUserPresets (
+  PortalUserId int NOT NULL DEFAULT 0,
+  ItemPrefix varchar(100) NOT NULL DEFAULT '',
+  PresetName varchar(100) NOT NULL DEFAULT '',
+  PresetData text NULL DEFAULT NULL,
+  PRIMARY KEY (PortalUserId, ItemPrefix, PresetName)
+);
Index: branches/5.2.x/core/kernel/db/db_event_handler.php
===================================================================
--- branches/5.2.x/core/kernel/db/db_event_handler.php
+++ branches/5.2.x/core/kernel/db/db_event_handler.php
@@ -131,6 +131,7 @@
 				'OnPreCreate' => Array ('self' => 'add|add.pending', 'subitem' => 'edit|edit.pending'),
 				'OnEdit' => Array ('self' => 'edit|edit.pending', 'subitem' => 'edit|edit.pending'),
 
+				'OnDeleteExportPreset' => array('self' => 'view'),
 				'OnExport' => Array ('self' => 'view|advanced:export'),
 				'OnExportBegin' => Array ('self' => 'view|advanced:export'),
 				'OnExportProgress' => Array ('self' => 'view|advanced:export'),
@@ -3082,38 +3083,22 @@
 		 */
 		protected function OnDeleteExportPreset(kEvent $event)
 		{
-			$field_values = $this->getSubmittedFields($event);
-
-			if ( !$field_values ) {
-				return ;
-			}
-
-			$preset_key = $field_values['ExportPresets'];
-			$export_settings = $this->Application->RecallPersistentVar('export_settings');
+			$delete_preset_name = $this->Application->GetVar('delete_preset_name');
 
-			if ( !$export_settings ) {
-				return ;
-			}
-
-			$export_settings = unserialize($export_settings);
-
-			if ( !isset($export_settings[$event->Prefix]) ) {
-				return ;
+			if ( !$delete_preset_name ) {
+				return;
 			}
 
-			$to_delete = '';
-
-			foreach ($export_settings[$event->Prefix] as $key => $val) {
-				if ( implode('|', $val['ExportColumns']) == $preset_key ) {
-					$to_delete = $key;
-					break;
-				}
-			}
+			$where_clause = array(
+				'ItemPrefix = ' . $this->Conn->qstr($event->Prefix),
+				'PortalUserId = ' . $this->Application->RecallVar('user_id'),
+				'PresetName = ' . $this->Conn->qstr($delete_preset_name),
+			);
 
-			if ( $to_delete ) {
-				unset($export_settings[$event->Prefix][$to_delete]);
-				$this->Application->StorePersistentVar('export_settings', serialize($export_settings));
-			}
+			$sql = 'DELETE
+					FROM ' . TABLE_PREFIX . 'ExportUserPresets
+					WHERE (' . implode(') AND (', $where_clause) . ')';
+			$this->Conn->Query($sql);
 		}
 
 		/**
Index: branches/5.2.x/core/units/helpers/cat_dbitem_export_helper.php
===================================================================
--- branches/5.2.x/core/units/helpers/cat_dbitem_export_helper.php
+++ branches/5.2.x/core/units/helpers/cat_dbitem_export_helper.php
@@ -1350,22 +1350,24 @@
 			$object = $event->getObject(Array ('skip_autoload' => true));
 
 			$options = $object->GetFieldOptions('ExportPresets');
-			$export_settings = $this->Application->RecallPersistentVar('export_settings');
+			$where_clause = array(
+				'ItemPrefix = ' . $this->Conn->qstr($event->Prefix),
+				'PortalUserId = ' . $this->Application->RecallVar('user_id'),
+			);
+			$sql = 'SELECT PresetData, PresetName
+					FROM ' . TABLE_PREFIX . 'ExportUserPresets
+					WHERE (' . implode(') AND (', $where_clause) . ')';
+			$export_settings = $this->Conn->GetCol($sql, 'PresetName');
 
 			if ( !$export_settings ) {
 				return;
 			}
 
-			$export_settings = unserialize($export_settings);
-
-			if ( !isset($export_settings[$event->Prefix]) ) {
-				return;
-			}
-
 			$export_presets = array ('' => '');
 
-			foreach ($export_settings[$event->Prefix] as $key => $val) {
-				$export_presets[implode('|', $val['ExportColumns'])] = $key;
+			foreach ( $export_settings as $name => $data ) {
+				$data = json_decode($data, true);
+				$export_presets[implode('|', $data['ExportColumns'])] = $name;
 			}
 
 			$options['options'] = $export_presets;
@@ -1488,12 +1490,13 @@
 
 			if ( $this->verifyOptions($event) ) {
 				if ( $this->_getExportSavePreset($object) ) {
-					$name = $object->GetDBField('ExportPresetName');
-
-					$export_settings = $this->Application->RecallPersistentVar('export_settings');
-					$export_settings = $export_settings ? unserialize($export_settings) : array ();
-					$export_settings[$event->Prefix][$name] = $field_values;
-					$this->Application->StorePersistentVar('export_settings', serialize($export_settings));
+					$fields_hash = array(
+						'PortalUserId' => $this->Application->RecallVar('user_id'),
+						'ItemPrefix' => $event->Prefix,
+						'PresetName' => $object->GetDBField('ExportPresetName'),
+						'PresetData' => json_encode($field_values),
+					);
+					$this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'ExportUserPresets', 'REPLACE');
 				}
 
 				$progress_t = $this->Application->RecallVar('export_progress_t');