diff --git a/civicrm.php b/civicrm.php
index 3118adbae173d23ffca84d5134586b95812dfa0b..fd9c8d3dae0e73aa49a11d2dd8481b574fd73cca 100644
--- a/civicrm.php
+++ b/civicrm.php
@@ -2,7 +2,7 @@
 /*
 Plugin Name: CiviCRM
 Description: CiviCRM - Growing and Sustaining Relationships
-Version: 5.28.3
+Version: 5.28.4
 Requires at least: 4.9
 Requires PHP:      7.1
 Author: CiviCRM LLC
@@ -56,7 +56,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
 
 
 // Set version here: when it changes, will force JS to reload
-define( 'CIVICRM_PLUGIN_VERSION', '5.28.3' );
+define( 'CIVICRM_PLUGIN_VERSION', '5.28.4' );
 
 // Store reference to this file
 if (!defined('CIVICRM_PLUGIN_FILE')) {
diff --git a/civicrm/CRM/Case/XMLProcessor/Process.php b/civicrm/CRM/Case/XMLProcessor/Process.php
index 6bffb852dd88434b1218146bb3f405b7c8d3a932..3ee34f9987cef70d336fefed4a4248d3dfddb675 100644
--- a/civicrm/CRM/Case/XMLProcessor/Process.php
+++ b/civicrm/CRM/Case/XMLProcessor/Process.php
@@ -85,7 +85,13 @@ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor {
       // create relationships for the ones that are required
       foreach ($xml->CaseRoles as $caseRoleXML) {
         foreach ($caseRoleXML->RelationshipType as $relationshipTypeXML) {
-          if ($relationshipTypeXML->creator) {
+          // simplexml treats node values differently than you'd expect,
+          // e.g. as an array
+          // Just using `if ($relationshipTypeXML->creator)` ends up always
+          // being true, so you have to cast to int or somehow force evaluation
+          // of the actual value. And casting to (bool) seems to behave
+          // differently on these objects than casting to (int).
+          if (!empty($relationshipTypeXML->creator)) {
             if (!$this->createRelationships($relationshipTypeXML,
               $params
             )
@@ -105,7 +111,7 @@ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor {
     foreach ($xml->ActivitySets as $activitySetsXML) {
       foreach ($activitySetsXML->ActivitySet as $activitySetXML) {
         if ($standardTimeline) {
-          if ($activitySetXML->timeline) {
+          if (!empty($activitySetXML->timeline)) {
             return $this->processStandardTimeline($activitySetXML, $params);
           }
         }
diff --git a/civicrm/CRM/Custom/Form/ChangeFieldType.php b/civicrm/CRM/Custom/Form/ChangeFieldType.php
index 90d87917edaaf6f9ab1673d000f398b5d3a31e0d..e5436ce95d0855df1e8a3a4accb23254b3badc38 100644
--- a/civicrm/CRM/Custom/Form/ChangeFieldType.php
+++ b/civicrm/CRM/Custom/Form/ChangeFieldType.php
@@ -56,6 +56,9 @@ class CRM_Custom_Form_ChangeFieldType extends CRM_Core_Form {
     $params = ['id' => $this->_id];
     CRM_Core_BAO_CustomField::retrieve($params, $this->_values);
 
+    if ($this->_values['html_type'] == 'Select' && $this->_values['serialize']) {
+      $this->_values['html_type'] = 'Multi-Select';
+    }
     $this->_htmlTypeTransitions = self::fieldTypeTransitions(CRM_Utils_Array::value('data_type', $this->_values),
       CRM_Utils_Array::value('html_type', $this->_values)
     );
@@ -148,13 +151,14 @@ class CRM_Custom_Form_ChangeFieldType extends CRM_Core_Form {
     $customField = new CRM_Core_DAO_CustomField();
     $customField->id = $this->_id;
     $customField->find(TRUE);
+    $customField->serialize = in_array($dstHtmlType, $mutliValueOps, TRUE);
 
     if ($dstHtmlType == 'Text' && in_array($srcHtmlType, [
       'Select',
       'Radio',
       'Autocomplete-Select',
     ])) {
-      $customField->option_group_id = "NULL";
+      $customField->option_group_id = 'NULL';
       CRM_Core_BAO_CustomField::checkOptionGroup($this->_values['option_group_id']);
     }
 
@@ -167,7 +171,7 @@ class CRM_Custom_Form_ChangeFieldType extends CRM_Core_Form {
       $this->firstValueToFlatten($tableName, $this->_values['column_name']);
     }
 
-    $customField->html_type = $dstHtmlType;
+    $customField->html_type = ($dstHtmlType === 'Multi-Select') ? 'Select' : $dstHtmlType;
     $customField->save();
 
     // Reset cache for custom fields
diff --git a/civicrm/CRM/Financial/BAO/Order.php b/civicrm/CRM/Financial/BAO/Order.php
index cb4385163fee459c4c9c905be48091ddef8b8c7d..b7f9b834e00cc73052e628fde70a97c7562b9526 100644
--- a/civicrm/CRM/Financial/BAO/Order.php
+++ b/civicrm/CRM/Financial/BAO/Order.php
@@ -237,18 +237,17 @@ class CRM_Financial_BAO_Order {
       $lineItems[$valueID] = CRM_Price_BAO_PriceSet::getLine($params, $throwAwayArray, $this->getPriceSetID(), $this->getPriceFieldSpec($fieldID), $fieldID, 0)[1][$valueID];
     }
 
-    $taxRates = CRM_Core_PseudoConstant::getTaxRates();
     foreach ($lineItems as &$lineItem) {
       // Set any pre-calculation to zero as we will calculate.
       $lineItem['tax_amount'] = 0;
       if ($this->getOverrideFinancialTypeID() !== FALSE) {
         $lineItem['financial_type_id'] = $this->getOverrideFinancialTypeID();
       }
-      $taxRate = $taxRates[$lineItem['financial_type_id']] ?? 0;
+      $taxRate = $this->getTaxRate((int) $lineItem['financial_type_id']);
       if ($this->getOverrideTotalAmount() !== FALSE) {
         if ($taxRate) {
           // Total is tax inclusive.
-          $lineItem['tax_amount'] = ($taxRate / 100) * $this->getOverrideTotalAmount();
+          $lineItem['tax_amount'] = ($taxRate / 100) * $this->getOverrideTotalAmount() / (1 + ($taxRate / 100));
           $lineItem['line_total'] = $lineItem['unit_price'] = $this->getOverrideTotalAmount() - $lineItem['tax_amount'];
         }
         else {
@@ -277,4 +276,19 @@ class CRM_Financial_BAO_Order {
     return $amount;
   }
 
+  /**
+   * Get the tax rate for the given financial type.
+   *
+   * @param int $financialTypeID
+   *
+   * @return float
+   */
+  public function getTaxRate(int $financialTypeID) {
+    $taxRates = CRM_Core_PseudoConstant::getTaxRates();
+    if (!isset($taxRates[$financialTypeID])) {
+      return 0;
+    }
+    return $taxRates[$financialTypeID];
+  }
+
 }
diff --git a/civicrm/CRM/Price/BAO/LineItem.php b/civicrm/CRM/Price/BAO/LineItem.php
index c974eeb48f3c1a9d105114246181b808c898391d..c26c39e2d836bcc3beb0614b70c22c1d85a28f9d 100644
--- a/civicrm/CRM/Price/BAO/LineItem.php
+++ b/civicrm/CRM/Price/BAO/LineItem.php
@@ -654,8 +654,9 @@ WHERE li.contribution_id = %1";
     $lineItems
   ) {
     $entityTable = "civicrm_" . $entity;
+    $newLineItems = [];
     CRM_Price_BAO_PriceSet::processAmount($feeBlock,
-      $params, $lineItems
+      $params, $newLineItems
     );
     // initialize empty Lineitem instance to call protected helper functions
     $lineItemObj = new CRM_Price_BAO_LineItem();
diff --git a/civicrm/CRM/Price/BAO/PriceSet.php b/civicrm/CRM/Price/BAO/PriceSet.php
index 2ed80ff8ebe8c62285c5729f15f6055ec85ccf02..a6e2167d582426b335ea2b750c3ec3338253134b 100644
--- a/civicrm/CRM/Price/BAO/PriceSet.php
+++ b/civicrm/CRM/Price/BAO/PriceSet.php
@@ -673,13 +673,15 @@ WHERE  id = %1";
         continue;
       }
 
-      list($params, $lineItem, $totalTax, $totalPrice) = self::getLine($params, $lineItem, $priceSetID, $field, $id, $totalPrice);
+      list($params, $lineItem) = self::getLine($params, $lineItem, $priceSetID, $field, $id, $totalPrice);
     }
 
     $amount_level = [];
     $totalParticipant = 0;
     if (is_array($lineItem)) {
       foreach ($lineItem as $values) {
+        $totalPrice += $values['line_total'] + $values['tax_amount'];
+        $totalTax += $values['tax_amount'];
         $totalParticipant += $values['participant_count'];
         // This is a bit nasty. The logic of 'quick config' was because price set configuration was
         // (and still is) too difficult to replace the 'quick config' price set configuration on the contribution
@@ -1766,7 +1768,7 @@ WHERE     ct.id = cp.financial_type_id AND
         }
         break;
     }
-    return [$params, $lineItem, $totalTax, $totalPrice];
+    return [$params, $lineItem];
   }
 
 }
diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php
index 473356912470882735db7964352d705c8fe713e1..2bd8d4d5069bbc8019b1c12d65f0594864c9ea5e 100644
--- a/civicrm/CRM/Report/Form.php
+++ b/civicrm/CRM/Report/Form.php
@@ -139,11 +139,6 @@ class CRM_Report_Form extends CRM_Core_Form {
    */
   protected $_groupFilter = FALSE;
 
-  /**
-   * Required for civiexportexcel.
-   */
-  public $supportsExportExcel = TRUE;
-
   /**
    * Has the report been optimised for group filtering.
    *
@@ -1440,7 +1435,7 @@ class CRM_Report_Form extends CRM_Core_Form {
     if (!CRM_Core_Permission::check('view report sql')) {
       return;
     }
-    $ignored_output_modes = ['pdf', 'csv', 'print', 'excel2007'];
+    $ignored_output_modes = ['pdf', 'csv', 'print'];
     if (in_array($this->_outputMode, $ignored_output_modes)) {
       return;
     }
@@ -2866,11 +2861,6 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND
       $this->_absoluteUrl = TRUE;
       $this->addPaging = FALSE;
     }
-    elseif ($this->_outputMode == 'excel2007') {
-      $printOnly = TRUE;
-      $this->_absoluteUrl = TRUE;
-      $this->addPaging = FALSE;
-    }
     elseif ($this->_outputMode == 'copy' && $this->_criteriaForm) {
       $this->_createNew = TRUE;
     }
@@ -3508,9 +3498,6 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND
     elseif ($this->_outputMode == 'csv') {
       CRM_Report_Utils_Report::export2csv($this, $rows);
     }
-    elseif ($this->_outputMode == 'excel2007') {
-      CRM_CiviExportExcel_Utils_Report::export2excel2007($this, $rows);
-    }
     elseif ($this->_outputMode == 'group') {
       $group = $this->_params['groups'];
       $this->add2group($group);
diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.28.4.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.28.4.mysql.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..09316482f8d9dcd2c581a425915c030c33c52a4c
--- /dev/null
+++ b/civicrm/CRM/Upgrade/Incremental/sql/5.28.4.mysql.tpl
@@ -0,0 +1 @@
+{* file to handle db changes in 5.28.4 during upgrade *}
diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php
index 05717e5a1c7f16312e195461e9a13de2c87deebf..89a15791e10772a309703c9be39af839e6fc5499 100644
--- a/civicrm/civicrm-version.php
+++ b/civicrm/civicrm-version.php
@@ -1,7 +1,7 @@
 <?php
 /** @deprecated */
 function civicrmVersion( ) {
-  return array( 'version'  => '5.28.3',
+  return array( 'version'  => '5.28.4',
                 'cms'      => 'Wordpress',
                 'revision' => '' );
 }
diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md
index 4baa73d92bd1b12e00033f039820bff34794b992..83524742a31e025e2b8b2f7b38e3e35953124ab4 100644
--- a/civicrm/release-notes.md
+++ b/civicrm/release-notes.md
@@ -15,6 +15,15 @@ Other resources for identifying changes are:
     * https://github.com/civicrm/civicrm-joomla
     * https://github.com/civicrm/civicrm-wordpress
 
+## CiviCRM 5.28.4
+
+Released September 1, 2020
+
+- **[Synopsis](release-notes/5.28.4.md#synopsis)**
+- **[Bugs resolved](release-notes/5.28.4.md#bugs)**
+- **[Credits](release-notes/5.28.4.md#credits)**
+- **[Feedback](release-notes/5.28.4.md#feedback)**
+
 ## CiviCRM 5.28.3
 
 Released August 22, 2020
diff --git a/civicrm/release-notes/5.28.3.md b/civicrm/release-notes/5.28.3.md
index 3d89063f2dc7091c3b05c51331ed67d0001cf100..ceac9f06d6742207df42d2938532b3b2dba6d878 100644
--- a/civicrm/release-notes/5.28.3.md
+++ b/civicrm/release-notes/5.28.3.md
@@ -7,7 +7,7 @@ Released August 22, 2020
 - **[Credits](#credits)**
 - **[Feedback](#feedback)**
 
-## <a href="synopsis"></a>Synopsis
+## <a name="synopsis"></a>Synopsis
 
 | *Does this version...?*                                         |          |
 | --------------------------------------------------------------- | -------- |
@@ -18,17 +18,23 @@ Released August 22, 2020
 | Introduce features?                                             | no       |
 | **Fix bugs?**                                                   | **yes**  |
 
-## <a href="bugs"></a>Bugs resolved
+## <a name="bugs"></a>Bugs resolved
 
 * **_CiviContribute_: Re-enable "Cancel" button in backend UI for recurring contributions ([dev/core#1961](https://lab.civicrm.org/dev/core/-/issues/1961): [#18204](https://github.com/civicrm/civicrm-core/pull/18204))**
+
+  Only affects some payment-processors
+
 * **_CiviContribute_: Contributions sometimes display "RoundingNecessaryException" ([dev/core#1959](https://lab.civicrm.org/dev/core/-/issues/1959): [#18206](https://github.com/civicrm/civicrm-core/pull/18206))**
 * **_Dedupe_: Merging certain contacts raises DB error ([dev/core#1964](https://lab.civicrm.org/dev/core/-/issues/1964): [#18223](https://github.com/civicrm/civicrm-core/pull/18223))**
+
+  Only affects contacts with dedupe exception records
+
 * **_Dedupe_: Deleted contacts are incorrectly displayed ([#18214](https://github.com/civicrm/civicrm-core/pull/18214))**
 * **_Drupal Views_: Filtering on multi-select custom fields ([dev/core#1966](https://lab.civicrm.org/dev/core/-/issues/1966): [drupal#615](https://github.com/civicrm/civicrm-drupal/pull/615), [drupal#618](https://github.com/civicrm/civicrm-drupal/pull/618))**
 * **_Quick Search_: Deleted contacts are incorrectly displayed ([#18213](https://github.com/civicrm/civicrm-core/pull/18213))**
 * **_Styling_: Collapse icon is incorrect ([dev/core#1963](https://lab.civicrm.org/dev/core/-/issues/1963): [#18205](https://github.com/civicrm/civicrm-core/pull/18205))**
 
-## <a href="credits"></a>Credits
+## <a name="credits"></a>Credits
 
 This release was developed by the following authors and reviewers:
 
@@ -36,7 +42,7 @@ Wikimedia Foundation - Eileen McNaughton; MillerTech - Chamil Wijesooriya; MJW C
 Wire; JMA Consulting - Seamus Lee; Dave D; CiviCoop - Jaap Jansma; CiviCRM - Tim Otten; Circle
 Interactive - Pradeep Nayak; Australian Greens - Andrew Cormick-Dockery
 
-## <a href="feedback"></a>Feedback
+## <a name="feedback"></a>Feedback
 
 These release notes are edited by Tim Otten and Andrew Hunt.  If you'd like to
 provide feedback on them, please login to https://chat.civicrm.org/civicrm and
diff --git a/civicrm/release-notes/5.28.4.md b/civicrm/release-notes/5.28.4.md
new file mode 100644
index 0000000000000000000000000000000000000000..6851eba8aed5ddaec6572adc7dea129f07b4572a
--- /dev/null
+++ b/civicrm/release-notes/5.28.4.md
@@ -0,0 +1,40 @@
+# CiviCRM 5.28.4
+
+Released September 1, 2020
+
+- **[Synopsis](#synopsis)**
+- **[Bugs resolved](#bugs)**
+- **[Credits](#credits)**
+- **[Feedback](#feedback)**
+
+## <a name="synopsis"></a>Synopsis
+
+| *Does this version...?*                                         |          |
+| --------------------------------------------------------------- | -------- |
+| Change the database schema?                                     | no       |
+| Alter the API?                                                  | no       |
+| Require attention to configuration options?                     | no       |
+| Fix problems installing or upgrading to a previous version?     | no       |
+| Introduce features?                                             | no       |
+| **Fix bugs?**                                                   | **yes**  |
+
+## <a name="bugs"></a>Bugs resolved
+
+* **_CiviCase_: Fix interpretation of "Assign to Creator" option (when disabled) ([dev/core#1982](https://lab.civicrm.org/dev/core/-/issues/1982): [#18301](https://github.com/civicrm/civicrm-core/pull/18301))**
+* **_CiviContribute_: Fix tax calculation for multiline transactions ([dev/core#1983](https://lab.civicrm.org/dev/core/-/issues/1983): [#18290](https://github.com/civicrm/civicrm-core/pull/18290))**
+* **_CiviContribute_: Fix tax calculation for offline membership renewals ([dev/core#1972](https://lab.civicrm.org/dev/core/-/issues/1972): [#18271](https://github.com/civicrm/civicrm-core/pull/18271))**
+* **_Custom Fields_: Fix conversion from "Multi-Select" to "Select" ([dev/core#1974](https://lab.civicrm.org/dev/core/-/issues/1974): [#18304](https://github.com/civicrm/civicrm-core/pull/18304), [#18272](https://github.com/civicrm/civicrm-core/pull/18272))**
+
+## <a name="credits"></a>Credits
+
+This release was developed by the following authors and reviewers:
+
+Wikimedia Foundation - Eileen McNaughton; Semper IT - Karin Gerritsen; Lighthouse Consulting and
+Design - Brian Shaughnessy; Lemniscus - Noah Miller; JMA Consulting - Seamus Lee; Dave D; CiviCRM -
+Tim Otten; Circle Interactive - Pradeep Nayak
+
+## <a name="feedback"></a>Feedback
+
+These release notes are edited by Tim Otten and Andrew Hunt.  If you'd like to
+provide feedback on them, please login to https://chat.civicrm.org/civicrm and
+contact `@agh1`.
diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql
index cd4ce765c14886dd96e5f0a0cca64831ecce72a8..1d59ea7c90f06b21881e349abb0820e140ccfda5 100644
--- a/civicrm/sql/civicrm_data.mysql
+++ b/civicrm/sql/civicrm_data.mysql
@@ -23897,4 +23897,4 @@ INSERT INTO `civicrm_report_instance`
     ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`)
 VALUES
     (  @domainID, 'Survey Details', 'survey/detail', 'Detailed report for canvassing, phone-banking, walk lists or other surveys.', 'access CiviReport', 'a:39:{s:6:"fields";a:2:{s:9:"sort_name";s:1:"1";s:6:"result";s:1:"1";}s:22:"assignee_contact_id_op";s:2:"eq";s:25:"assignee_contact_id_value";s:0:"";s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:12:"survey_id_op";s:2:"in";s:15:"survey_id_value";a:0:{}s:12:"status_id_op";s:2:"eq";s:15:"status_id_value";s:1:"1";s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:75:"Detailed report for canvassing, phone-banking, walk lists or other surveys.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviReport";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}');
-UPDATE civicrm_domain SET version = '5.28.3';
+UPDATE civicrm_domain SET version = '5.28.4';
diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql
index dfa649ae07069fff59396805c12c4b68277fdf41..563d1c55835f08a7cdf0bc406bc60e9500f06001 100644
--- a/civicrm/sql/civicrm_generated.mysql
+++ b/civicrm/sql/civicrm_generated.mysql
@@ -399,7 +399,7 @@ UNLOCK TABLES;
 
 LOCK TABLES `civicrm_domain` WRITE;
 /*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */;
-INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,'5.28.3',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}');
+INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,'5.28.4',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}');
 /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */;
 UNLOCK TABLES;
 
diff --git a/civicrm/templates/CRM/Custom/Form/Field.tpl b/civicrm/templates/CRM/Custom/Form/Field.tpl
index f6be9fb9c330d7b0ee6847192dad9fc197d54a81..41700a80d683b2538a066c2308a4657681a3471b 100644
--- a/civicrm/templates/CRM/Custom/Form/Field.tpl
+++ b/civicrm/templates/CRM/Custom/Form/Field.tpl
@@ -21,6 +21,9 @@
     <tr class="crm-custom-field-form-block-data_type">
       <td class="label">{$form.data_type.label}</td>
       <td class="html-adjust">{$form.data_type.html}
+        {if $action neq 1 && $form.data_type.value[1][0] eq "Select" && $form.serialize.value}
+          <span>({ts}Multi-Select{/ts})</span>
+        {/if}
         {if $action neq 4 and $action neq 2}
           <br /><span class="description">{ts}Select the type of data you want to collect and store for this contact. Then select from the available HTML input field types (choices are based on the type of data being collected).{/ts}</span>
         {/if}
@@ -34,10 +37,12 @@
         {/if}
       </td>
     </tr>
-    <tr class="crm-custom-field-form-block-serialize">
-      <td class="label">{$form.serialize.label}</td>
-      <td class="html-adjust">{$form.serialize.html}</td>
-    </tr>
+    {if $action eq 1}
+      <tr class="crm-custom-field-form-block-serialize">
+        <td class="label">{$form.serialize.label}</td>
+        <td class="html-adjust">{$form.serialize.html}</td>
+      </tr>
+    {/if}
     {if $form.in_selector}
       <tr class='crm-custom-field-form-block-in_selector'>
         <td class='label'>{$form.in_selector.label}</td>
diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php
index f43d758759b3910e897389d4a8d08e3d6a9587e1..f415eb7639643cbd06445ce3661aa462c1b50a7c 100644
--- a/civicrm/vendor/autoload.php
+++ b/civicrm/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer/autoload_real.php';
 
-return ComposerAutoloaderInitc69fc457976bd588df70c17890ca67e1::getLoader();
+return ComposerAutoloaderInit5d1590a84317c7221c13a6c8764590a7::getLoader();
diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php
index 3b30c798493e7971a908dbbe217e94cef38f6a1c..f5102f8df3891b53c643927161cff172c6ab9ad2 100644
--- a/civicrm/vendor/composer/autoload_real.php
+++ b/civicrm/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
 
 // autoload_real.php @generated by Composer
 
-class ComposerAutoloaderInitc69fc457976bd588df70c17890ca67e1
+class ComposerAutoloaderInit5d1590a84317c7221c13a6c8764590a7
 {
     private static $loader;
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInitc69fc457976bd588df70c17890ca67e1
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInitc69fc457976bd588df70c17890ca67e1', 'loadClassLoader'), true, true);
+        spl_autoload_register(array('ComposerAutoloaderInit5d1590a84317c7221c13a6c8764590a7', 'loadClassLoader'), true, true);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInitc69fc457976bd588df70c17890ca67e1', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInit5d1590a84317c7221c13a6c8764590a7', 'loadClassLoader'));
 
         $includePaths = require __DIR__ . '/include_paths.php';
         $includePaths[] = get_include_path();
@@ -31,7 +31,7 @@ class ComposerAutoloaderInitc69fc457976bd588df70c17890ca67e1
         if ($useStaticLoader) {
             require_once __DIR__ . '/autoload_static.php';
 
-            call_user_func(\Composer\Autoload\ComposerStaticInitc69fc457976bd588df70c17890ca67e1::getInitializer($loader));
+            call_user_func(\Composer\Autoload\ComposerStaticInit5d1590a84317c7221c13a6c8764590a7::getInitializer($loader));
         } else {
             $map = require __DIR__ . '/autoload_namespaces.php';
             foreach ($map as $namespace => $path) {
@@ -52,19 +52,19 @@ class ComposerAutoloaderInitc69fc457976bd588df70c17890ca67e1
         $loader->register(true);
 
         if ($useStaticLoader) {
-            $includeFiles = Composer\Autoload\ComposerStaticInitc69fc457976bd588df70c17890ca67e1::$files;
+            $includeFiles = Composer\Autoload\ComposerStaticInit5d1590a84317c7221c13a6c8764590a7::$files;
         } else {
             $includeFiles = require __DIR__ . '/autoload_files.php';
         }
         foreach ($includeFiles as $fileIdentifier => $file) {
-            composerRequirec69fc457976bd588df70c17890ca67e1($fileIdentifier, $file);
+            composerRequire5d1590a84317c7221c13a6c8764590a7($fileIdentifier, $file);
         }
 
         return $loader;
     }
 }
 
-function composerRequirec69fc457976bd588df70c17890ca67e1($fileIdentifier, $file)
+function composerRequire5d1590a84317c7221c13a6c8764590a7($fileIdentifier, $file)
 {
     if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
         require $file;
diff --git a/civicrm/vendor/composer/autoload_static.php b/civicrm/vendor/composer/autoload_static.php
index 4e97d464b184c04b743737e50643897b50858cac..4c1f88db3c0f47610758696cff1627700a2b62da 100644
--- a/civicrm/vendor/composer/autoload_static.php
+++ b/civicrm/vendor/composer/autoload_static.php
@@ -4,7 +4,7 @@
 
 namespace Composer\Autoload;
 
-class ComposerStaticInitc69fc457976bd588df70c17890ca67e1
+class ComposerStaticInit5d1590a84317c7221c13a6c8764590a7
 {
     public static $files = array (
         '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
@@ -530,11 +530,11 @@ class ComposerStaticInitc69fc457976bd588df70c17890ca67e1
     public static function getInitializer(ClassLoader $loader)
     {
         return \Closure::bind(function () use ($loader) {
-            $loader->prefixLengthsPsr4 = ComposerStaticInitc69fc457976bd588df70c17890ca67e1::$prefixLengthsPsr4;
-            $loader->prefixDirsPsr4 = ComposerStaticInitc69fc457976bd588df70c17890ca67e1::$prefixDirsPsr4;
-            $loader->prefixesPsr0 = ComposerStaticInitc69fc457976bd588df70c17890ca67e1::$prefixesPsr0;
-            $loader->fallbackDirsPsr0 = ComposerStaticInitc69fc457976bd588df70c17890ca67e1::$fallbackDirsPsr0;
-            $loader->classMap = ComposerStaticInitc69fc457976bd588df70c17890ca67e1::$classMap;
+            $loader->prefixLengthsPsr4 = ComposerStaticInit5d1590a84317c7221c13a6c8764590a7::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInit5d1590a84317c7221c13a6c8764590a7::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = ComposerStaticInit5d1590a84317c7221c13a6c8764590a7::$prefixesPsr0;
+            $loader->fallbackDirsPsr0 = ComposerStaticInit5d1590a84317c7221c13a6c8764590a7::$fallbackDirsPsr0;
+            $loader->classMap = ComposerStaticInit5d1590a84317c7221c13a6c8764590a7::$classMap;
 
         }, null, ClassLoader::class);
     }
diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml
index 031493b9dc89672c449ed5815aba85b2d28f5db2..90be6845ed21a6f6bf274266fc43a9107e6a610b 100644
--- a/civicrm/xml/version.xml
+++ b/civicrm/xml/version.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="iso-8859-1" ?>
 <version>
-  <version_no>5.28.3</version_no>
+  <version_no>5.28.4</version_no>
 </version>