diff --git a/CRM/Contribute/DAO/Product.php b/CRM/Contribute/DAO/Product.php
index ac5483122b06..7d4f30d54e53 100644
--- a/CRM/Contribute/DAO/Product.php
+++ b/CRM/Contribute/DAO/Product.php
@@ -47,6 +47,7 @@ class CRM_Contribute_DAO_Product extends CRM_Core_DAO {
'add' => 'civicrm/admin/contribute/managePremiums/edit?action=add&reset=1',
'update' => 'civicrm/admin/contribute/managePremiums/edit?action=update&id=[id]&reset=1',
'delete' => 'civicrm/admin/contribute/managePremiums/edit?action=delete&id=[id]&reset=1',
+ 'preview' => 'civicrm/admin/contribute/managePremiums/edit?action=preview&reset=1&id=[id]',
'browse' => 'civicrm/admin/contribute/managePremiums/',
];
diff --git a/ext/civicrm_admin_ui/ang/afsearchPremiumProducts.aff.html b/ext/civicrm_admin_ui/ang/afsearchPremiumProducts.aff.html
new file mode 100644
index 000000000000..d98af53af0c0
--- /dev/null
+++ b/ext/civicrm_admin_ui/ang/afsearchPremiumProducts.aff.html
@@ -0,0 +1,13 @@
+
+
+
+
{{:: ts('CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Premiums may be tangible items (i.e. a coffee mug or t-shirt), or they may be a membership or subscription with a pre-determined duration.') }}
+
+
{{:: ts('Use this section to enter and update all premiums that you want to offer on any of your Online Contribution pages. Then you can assign one or more premiums to a specific Contribution page from Contributions » Manage Contribution Pages » Configure » Premiums.') }}
+
+
+
+
+
+
+
diff --git a/ext/civicrm_admin_ui/ang/afsearchPremiumProducts.aff.php b/ext/civicrm_admin_ui/ang/afsearchPremiumProducts.aff.php
new file mode 100644
index 000000000000..dc9aa138fc71
--- /dev/null
+++ b/ext/civicrm_admin_ui/ang/afsearchPremiumProducts.aff.php
@@ -0,0 +1,18 @@
+ 'search',
+ 'title' => E::ts('Premium Products'),
+ 'placement' => [],
+ 'icon' => 'fa-list-alt',
+ 'server_route' => 'civicrm/admin/contribute/managePremiums',
+ 'is_public' => FALSE,
+ 'permission' => [
+ 'access CiviCRM',
+ ],
+ 'permission_operator' => 'AND',
+ 'submit_enabled' => TRUE,
+ 'create_submission' => FALSE,
+];
diff --git a/ext/civicrm_admin_ui/managed/SavedSearch_Manage_Premiums.mgd.php b/ext/civicrm_admin_ui/managed/SavedSearch_Manage_Premiums.mgd.php
new file mode 100644
index 000000000000..0a79a613954e
--- /dev/null
+++ b/ext/civicrm_admin_ui/managed/SavedSearch_Manage_Premiums.mgd.php
@@ -0,0 +1,237 @@
+ 'SavedSearch_Manage_Premiums',
+ 'entity' => 'SavedSearch',
+ 'cleanup' => 'unused',
+ 'update' => 'unmodified',
+ 'params' => [
+ 'version' => 4,
+ 'values' => [
+ 'name' => 'Manage_Premiums',
+ 'label' => E::ts('Manage Premiums'),
+ 'api_entity' => 'Product',
+ 'api_params' => [
+ 'version' => 4,
+ 'select' => [
+ 'name',
+ 'sku',
+ 'price',
+ 'min_contribution',
+ 'cost',
+ 'financial_type_id:label',
+ 'is_active',
+ ],
+ 'orderBy' => [],
+ 'where' => [],
+ 'groupBy' => [],
+ 'join' => [],
+ 'having' => [],
+ ],
+ ],
+ 'match' => [
+ 'name',
+ ],
+ ],
+ ],
+ [
+ 'name' => 'SavedSearch_Manage_Premiums_SearchDisplay_Manage_Premiums_Table_1',
+ 'entity' => 'SearchDisplay',
+ 'cleanup' => 'unused',
+ 'update' => 'unmodified',
+ 'params' => [
+ 'version' => 4,
+ 'values' => [
+ 'name' => 'Manage_Premiums_Table_1',
+ 'label' => E::ts('Manage Premium Products'),
+ 'saved_search_id.name' => 'Manage_Premiums',
+ 'type' => 'table',
+ 'settings' => [
+ 'description' => '',
+ 'sort' => [
+ [
+ 'name',
+ 'ASC',
+ ],
+ ],
+ 'limit' => 50,
+ 'pager' => [
+ 'expose_limit' => TRUE,
+ 'show_count' => TRUE,
+ 'hide_single' => TRUE,
+ ],
+ 'placeholder' => 5,
+ 'columns' => [
+ [
+ 'type' => 'field',
+ 'key' => 'name',
+ 'dataType' => 'String',
+ 'label' => E::ts('Product Name'),
+ 'sortable' => TRUE,
+ 'editable' => TRUE,
+ ],
+ [
+ 'type' => 'field',
+ 'key' => 'sku',
+ 'dataType' => 'String',
+ 'label' => E::ts('SKU'),
+ 'sortable' => TRUE,
+ 'editable' => TRUE,
+ ],
+ [
+ 'type' => 'field',
+ 'key' => 'price',
+ 'dataType' => 'Money',
+ 'label' => E::ts('Price'),
+ 'sortable' => TRUE,
+ 'editable' => TRUE,
+ ],
+ [
+ 'type' => 'field',
+ 'key' => 'min_contribution',
+ 'dataType' => 'Money',
+ 'label' => E::ts('Minimum Contribution'),
+ 'sortable' => TRUE,
+ 'editable' => TRUE,
+ ],
+ [
+ 'type' => 'field',
+ 'key' => 'cost',
+ 'dataType' => 'Money',
+ 'label' => E::ts('Cost'),
+ 'sortable' => TRUE,
+ 'editable' => TRUE,
+ ],
+ [
+ 'type' => 'field',
+ 'key' => 'financial_type_id:label',
+ 'dataType' => 'Integer',
+ 'label' => E::ts('Financial Type'),
+ 'sortable' => TRUE,
+ 'editable' => TRUE,
+ ],
+ [
+ 'type' => 'field',
+ 'key' => 'is_active',
+ 'dataType' => 'Boolean',
+ 'label' => E::ts('Enabled'),
+ 'sortable' => TRUE,
+ 'editable' => TRUE,
+ ],
+ [
+ 'text' => '',
+ 'style' => 'default',
+ 'size' => 'btn-xs',
+ 'icon' => 'fa-bars',
+ 'links' => [
+ [
+ 'entity' => 'Product',
+ 'action' => 'preview',
+ 'join' => '',
+ 'target' => 'crm-popup',
+ 'icon' => 'fa-eye',
+ 'text' => E::ts('Preview'),
+ 'style' => 'default',
+ 'path' => '',
+ 'task' => '',
+ 'condition' => [],
+ ],
+ [
+ 'entity' => 'Product',
+ 'action' => 'update',
+ 'join' => '',
+ 'target' => 'crm-popup',
+ 'icon' => 'fa-pencil',
+ 'text' => E::ts('Edit'),
+ 'style' => 'default',
+ 'path' => '',
+ 'task' => '',
+ 'condition' => [],
+ ],
+ [
+ 'task' => 'enable',
+ 'entity' => 'Product',
+ 'join' => '',
+ 'target' => 'crm-popup',
+ 'icon' => 'fa-toggle-on',
+ 'text' => E::ts('Enable'),
+ 'style' => 'default',
+ 'path' => '',
+ 'action' => '',
+ 'condition' => [
+ 'is_active',
+ '=',
+ FALSE,
+ ],
+ ],
+ [
+ 'task' => 'disable',
+ 'entity' => 'Product',
+ 'join' => '',
+ 'target' => 'crm-popup',
+ 'icon' => 'fa-toggle-off',
+ 'text' => E::ts('Disable'),
+ 'style' => 'default',
+ 'path' => '',
+ 'action' => '',
+ 'condition' => [
+ 'is_active',
+ '=',
+ TRUE,
+ ],
+ ],
+ [
+ 'entity' => 'Product',
+ 'action' => 'delete',
+ 'join' => '',
+ 'target' => 'crm-popup',
+ 'icon' => 'fa-trash',
+ 'text' => E::ts('Delete'),
+ 'style' => 'danger',
+ 'path' => '',
+ 'task' => '',
+ 'condition' => [],
+ ],
+ ],
+ 'type' => 'menu',
+ 'alignment' => 'text-right',
+ ],
+ ],
+ 'actions' => TRUE,
+ 'classes' => [
+ 'table',
+ 'table-striped',
+ ],
+ 'cssRules' => [
+ [
+ 'disabled',
+ 'is_active',
+ '=',
+ FALSE,
+ ],
+ ],
+ 'toolbar' => [
+ [
+ 'path' => '',
+ 'icon' => 'fa-plus',
+ 'text' => E::ts('Add Product'),
+ 'style' => 'primary',
+ 'condition' => [],
+ 'task' => '',
+ 'entity' => 'Product',
+ 'action' => 'add',
+ 'join' => '',
+ 'target' => 'crm-popup',
+ ],
+ ],
+ ],
+ ],
+ 'match' => [
+ 'saved_search_id',
+ 'name',
+ ],
+ ],
+ ],
+];
diff --git a/xml/schema/Contribute/Product.xml b/xml/schema/Contribute/Product.xml
index 237453035ba1..ab7287b2ac1e 100644
--- a/xml/schema/Contribute/Product.xml
+++ b/xml/schema/Contribute/Product.xml
@@ -6,6 +6,9 @@
able - stores "product info" for premiums and can be used for non-incentive products
civicrm_product
1.4
+
+ civicrm/admin/contribute/managePremiums/edit?action=preview&reset=1&id=[id]
+
true
CiviContribute
name