diff --git a/config/install/user.role.uw_role_content_author.yml b/config/install/user.role.uw_role_content_author.yml
index 980e028dc15c4434aad9c26b9a270db182377a41..68f877a17ae0765379d3c7590505a3136d8f3a52 100644
--- a/config/install/user.role.uw_role_content_author.yml
+++ b/config/install/user.role.uw_role_content_author.yml
@@ -47,6 +47,7 @@ permissions:
   - 'create terms in uw_vocab_news_tags'
   - 'create url aliases'
   - 'create uw_ct_blog content'
+  - 'create uw_ct_catalog_item content'
   - 'create uw_ct_event content'
   - 'create uw_ct_news_item content'
   - 'create uw_ct_sidebar content'
@@ -63,12 +64,14 @@ permissions:
   - 'delete paragraph content uw_para_facts_and_figures'
   - 'delete paragraph content uw_para_ff'
   - 'edit any uw_ct_blog content'
+  - 'edit any uw_ct_catalog_item content'
   - 'edit any uw_ct_event content'
   - 'edit any uw_ct_news_item content'
   - 'edit any uw_ct_sidebar content'
   - 'edit any uw_ct_site_footer content'
   - 'edit any uw_ct_web_page content'
   - 'edit own uw_ct_blog content'
+  - 'edit own uw_ct_catalog_item content'
   - 'edit own uw_ct_event content'
   - 'edit own uw_ct_news_item content'
   - 'edit own uw_ct_sidebar content'
@@ -85,6 +88,7 @@ permissions:
   - 'make smart dates recur'
   - 'reschedule smart date recur instances'
   - 'revert uw_ct_blog revisions'
+  - 'revert uw_ct_catalog_item revisions'
   - 'revert uw_ct_event revisions'
   - 'revert uw_ct_news_item revisions'
   - 'revert uw_ct_sidebar revisions'
@@ -109,6 +113,7 @@ permissions:
   - 'view own unpublished media'
   - 'view unpublished paragraphs'
   - 'view uw_ct_blog revisions'
+  - 'view uw_ct_catalog_item revisions'
   - 'view uw_ct_event revisions'
   - 'view uw_ct_news_item revisions'
   - 'view uw_ct_sidebar revisions'
diff --git a/config/install/user.role.uw_role_content_editor.yml b/config/install/user.role.uw_role_content_editor.yml
index 269b69361e42eb29232df67531afb284db7925f4..4ba9b65671738ae78729540f4880c40f6a631664 100644
--- a/config/install/user.role.uw_role_content_editor.yml
+++ b/config/install/user.role.uw_role_content_editor.yml
@@ -48,6 +48,7 @@ permissions:
   - 'create terms in uw_vocab_news_tags'
   - 'create url aliases'
   - 'create uw_ct_blog content'
+  - 'create uw_ct_catalog_item content'
   - 'create uw_ct_event content'
   - 'create uw_ct_news_item content'
   - 'create uw_ct_sidebar content'
@@ -64,12 +65,14 @@ permissions:
   - 'delete paragraph content uw_para_facts_and_figures'
   - 'delete paragraph content uw_para_ff'
   - 'edit any uw_ct_blog content'
+  - 'edit any uw_ct_catalog_item content'
   - 'edit any uw_ct_event content'
   - 'edit any uw_ct_news_item content'
   - 'edit any uw_ct_sidebar content'
   - 'edit any uw_ct_site_footer content'
   - 'edit any uw_ct_web_page content'
   - 'edit own uw_ct_blog content'
+  - 'edit own uw_ct_catalog_item content'
   - 'edit own uw_ct_event content'
   - 'edit own uw_ct_news_item content'
   - 'edit own uw_ct_sidebar content'
@@ -86,6 +89,7 @@ permissions:
   - 'make smart dates recur'
   - 'reschedule smart date recur instances'
   - 'revert uw_ct_blog revisions'
+  - 'revert uw_ct_catalog_item revisions'
   - 'revert uw_ct_event revisions'
   - 'revert uw_ct_news_item revisions'
   - 'revert uw_ct_sidebar revisions'
@@ -113,6 +117,7 @@ permissions:
   - 'view own unpublished media'
   - 'view unpublished paragraphs'
   - 'view uw_ct_blog revisions'
+  - 'view uw_ct_catalog_item revisions'
   - 'view uw_ct_event revisions'
   - 'view uw_ct_news_item revisions'
   - 'view uw_ct_sidebar revisions'
diff --git a/config/install/user.role.uw_role_site_manager.yml b/config/install/user.role.uw_role_site_manager.yml
index c99b9fcb043fcb2c59e960e76b6c2b30f663eb1b..1b852bf79087f1de2b92942abd15c379bdb1a08b 100644
--- a/config/install/user.role.uw_role_site_manager.yml
+++ b/config/install/user.role.uw_role_site_manager.yml
@@ -49,6 +49,7 @@ permissions:
   - 'create terms in uw_vocab_news_tags'
   - 'create url aliases'
   - 'create uw_ct_blog content'
+  - 'create uw_ct_catalog_item content'
   - 'create uw_ct_event content'
   - 'create uw_ct_news_item content'
   - 'create uw_ct_sidebar content'
@@ -58,6 +59,7 @@ permissions:
   - 'delete all revisions'
   - 'delete any media'
   - 'delete any uw_ct_blog content'
+  - 'delete any uw_ct_catalog_item content'
   - 'delete any uw_ct_event content'
   - 'delete any uw_ct_news_item content'
   - 'delete any uw_ct_sidebar content'
@@ -66,6 +68,7 @@ permissions:
   - 'delete any uw_news_item content'
   - 'delete orphan revisions'
   - 'delete own uw_ct_blog content'
+  - 'delete own uw_ct_catalog_item content'
   - 'delete own uw_ct_event content'
   - 'delete own uw_ct_news_item content'
   - 'delete own uw_ct_sidebar content'
@@ -89,6 +92,7 @@ permissions:
   - 'delete terms in uw_vocab_news_tags'
   - 'delete uw_news_item revisions'
   - 'edit any uw_ct_blog content'
+  - 'edit any uw_ct_catalog_item content'
   - 'edit any uw_ct_event content'
   - 'edit any uw_ct_news_item content'
   - 'edit any uw_ct_sidebar content'
@@ -96,6 +100,7 @@ permissions:
   - 'edit any uw_ct_web_page content'
   - 'edit any uw_news_item content'
   - 'edit own uw_ct_blog content'
+  - 'edit own uw_ct_catalog_item content'
   - 'edit own uw_ct_event content'
   - 'edit own uw_ct_news_item content'
   - 'edit own uw_ct_sidebar content'
@@ -113,6 +118,7 @@ permissions:
   - 'reschedule smart date recur instances'
   - 'revert all revisions'
   - 'revert uw_ct_blog revisions'
+  - 'revert uw_ct_catalog_item revisions'
   - 'revert uw_ct_event revisions'
   - 'revert uw_ct_news_item revisions'
   - 'revert uw_ct_sidebar revisions'
@@ -141,6 +147,7 @@ permissions:
   - 'view own unpublished media'
   - 'view unpublished paragraphs'
   - 'view uw_ct_blog revisions'
+  - 'view uw_ct_catalog_item revisions'
   - 'view uw_ct_event revisions'
   - 'view uw_ct_news_item revisions'
   - 'view uw_ct_sidebar revisions'
diff --git a/src/UwPermissions/UwPermissions.php b/src/UwPermissions/UwPermissions.php
index 7c229a783fa9ca98d18a98095a8b346294912f28..0f84c2d44936065a74034eb0d20aaf3a65fa73d2 100644
--- a/src/UwPermissions/UwPermissions.php
+++ b/src/UwPermissions/UwPermissions.php
@@ -61,6 +61,17 @@ class UwPermissions {
         UwPermissions::buildRolePermissionsListTaxonomyTerm('uw_vocab_blog_tags', ['delete']),
       ],
 
+      // Catalog permissions.
+      'Catalog' => [
+        'Use content type' => UwPermissions::buildRolePermissionsListContentType('uw_ct_catalog_item'),
+        'Create/edit audience' => UwPermissions::buildRolePermissionsListTaxonomyTerm('uw_vocab_audience', ['create', 'edit']),
+        'Delete audience' => UwPermissions::buildRolePermissionsListTaxonomyTerm('uw_vocab_audience', ['delete']),
+        'Create/edit categories' => UwPermissions::buildRolePermissionsListTaxonomyTerm('uw_vocab_catalog_categories', ['create', 'edit']),
+        'Delete categories' => UwPermissions::buildRolePermissionsListTaxonomyTerm('uw_vocab_catalog_categories', ['delete']),
+        'Create/edit catalogs' => UwPermissions::buildRolePermissionsListTaxonomyTerm('uw_vocab_catalogs', ['create', 'edit']),
+        'Delete catalogs' => UwPermissions::buildRolePermissionsListTaxonomyTerm('uw_vocab_catalogs', ['delete']),
+      ],
+
       // Event permissions.
       'Event' => [
         'Use content type' => UwPermissions::buildRolePermissionsListContentType('uw_ct_event'),
diff --git a/uw_cfg_common.install b/uw_cfg_common.install
index 22a8f5e07651db13044d3237b5716b2913986253..56f436d81a8942ba3575ec53a3b8c0e9560decd6 100644
--- a/uw_cfg_common.install
+++ b/uw_cfg_common.install
@@ -27,6 +27,37 @@ function uw_cfg_common_install() {
         'Site manager',
       ],
     ],
+    'Catalog' => [
+      'Use content type' => [
+        'Site manager',
+        'Content author',
+        'Content editor',
+      ],
+      'Create/edit audience' => [
+        'Site manager',
+        'Content author',
+        'Content editor',
+      ],
+      'Delete audience' => [
+        'Site manager',
+      ],
+      'Create/edit categories' => [
+        'Site manager',
+        'Content author',
+        'Content editor',
+      ],
+      'Delete categories' => [
+        'Site manager',
+      ],
+      'Create/edit catalogs'    => [
+        'Site manager',
+        'Content author',
+        'Content editor',
+        ],
+      'Delete catalogs' => [
+        'Site manager',
+      ],
+    ],
     'Event' => [
       'Use content type' => [
         'Site manager',