diff --git a/opentech/apply/categories/admin_helpers.py b/opentech/apply/categories/admin_helpers.py
index 9f786fced1de4030624668a1e96c39297d414ba2..69f77a6cb0e527221e98e7d67279ba90afeb0710 100644
--- a/opentech/apply/categories/admin_helpers.py
+++ b/opentech/apply/categories/admin_helpers.py
@@ -19,6 +19,10 @@ class MetaCategoryButtonHelper(ButtonHelper):
 
     def add_child_button(self, pk, child_verbose_name, **kwargs):
         """Build a add child button, to easily add a child under category."""
+        instance = self.model.objects.get(pk=pk)
+        if instance.is_archived or instance.get_parent() and instance.get_parent().is_archived:
+            return
+
         classnames = self.prepare_classnames(
             start=self.edit_button_classnames + ['icon', 'icon-plus'],
             add=kwargs.get('classnames_add'),
diff --git a/opentech/apply/categories/migrations/0003_archive_and_other_fields_meta_categories.py b/opentech/apply/categories/migrations/0003_archive_and_other_fields_meta_categories.py
new file mode 100644
index 0000000000000000000000000000000000000000..c8bda155c1af8d7d9eb30d00d67a0488970386a5
--- /dev/null
+++ b/opentech/apply/categories/migrations/0003_archive_and_other_fields_meta_categories.py
@@ -0,0 +1,34 @@
+# Generated by Django 2.0.13 on 2019-07-09 11:14
+
+from django.db import migrations, models
+import wagtail.core.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('categories', '0002_metacategory'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='metacategory',
+            name='available_to_applications',
+            field=models.BooleanField(default=True, help_text='Make available for applications'),
+        ),
+        migrations.AddField(
+            model_name='metacategory',
+            name='filter_on_dashboard',
+            field=models.BooleanField(default=True, help_text='Make available to filter on dashboard'),
+        ),
+        migrations.AddField(
+            model_name='metacategory',
+            name='help_text',
+            field=wagtail.core.fields.RichTextField(blank=True),
+        ),
+        migrations.AddField(
+            model_name='metacategory',
+            name='is_archived',
+            field=models.BooleanField(default=False, verbose_name='Archived'),
+        ),
+    ]
diff --git a/opentech/apply/categories/models.py b/opentech/apply/categories/models.py
index 09ad45ddc21d2b9b2b864c34bbe606f1ec64068a..e9f32927493e43e8dd78e8e77fe85b827e45f833 100644
--- a/opentech/apply/categories/models.py
+++ b/opentech/apply/categories/models.py
@@ -2,14 +2,17 @@ from django import forms
 from django.core.exceptions import PermissionDenied
 from django.db import models
 from django.template.loader import render_to_string
+from django.utils.translation import ugettext_lazy as _
 
 from modelcluster.fields import ParentalKey
 from modelcluster.models import ClusterableModel
 from wagtail.admin.edit_handlers import (
     FieldPanel,
     InlinePanel,
+    MultiFieldPanel,
 )
 from wagtail.admin.forms import WagtailAdminModelForm
+from wagtail.core.fields import RichTextField
 from wagtail.core.models import Orderable
 from wagtail.search import index
 
@@ -48,6 +51,15 @@ class MetaCategory(index.Indexed, MP_Node):
     name = models.CharField(
         max_length=50, unique=True, help_text='Keep the name short, ideally one word.'
     )
+    is_archived = models.BooleanField(default=False, verbose_name=_("Archived"))
+    help_text = RichTextField(features=[
+        'h2', 'h3', 'bold', 'italic', 'link', 'hr', 'ol', 'ul'], blank=True)
+    filter_on_dashboard = models.BooleanField(
+        default=True, help_text='Make available to filter on dashboard'
+    )
+    available_to_applications = models.BooleanField(
+        default=True, help_text='Make available for applications'
+    )
 
     # node tree specific fields and attributes
     node_order_index = models.IntegerField(blank=True, default=0, editable=False)
@@ -59,6 +71,15 @@ class MetaCategory(index.Indexed, MP_Node):
     panels = [
         FieldPanel('parent'),
         FieldPanel('name'),
+        FieldPanel('is_archived'),
+        MultiFieldPanel(
+            [
+                FieldPanel('help_text'),
+                FieldPanel('filter_on_dashboard'),
+                FieldPanel('available_to_applications'),
+            ],
+            heading="Options",
+        ),
     ]
 
     def get_as_listing_header(self):
@@ -70,6 +91,7 @@ class MetaCategory(index.Indexed, MP_Node):
                 'depth_minus_1': depth - 1,
                 'is_root': self.is_root(),
                 'name': self.name,
+                'is_archived': self.is_archived,
             }
         )
         return rendered
diff --git a/opentech/apply/categories/templates/categories/admin/includes/meta_category_list_header.html b/opentech/apply/categories/templates/categories/admin/includes/meta_category_list_header.html
index b6a816694bcffbec1fc4fb524ce0931a9e111fcb..1c5c2867237c3c2b5462517322c345908639ce9d 100644
--- a/opentech/apply/categories/templates/categories/admin/includes/meta_category_list_header.html
+++ b/opentech/apply/categories/templates/categories/admin/includes/meta_category_list_header.html
@@ -4,6 +4,10 @@
   <span>
     <span class="inline-block" style="margin-left:{{ depth }}em; font-size:{% if depth is 1 %}90{% elif depth is 2 %}80{% else %}100{% endif %}%;"></span>
     <i class="icon icon-fa-level-up icon-fa-rotate-90" style="display: inline-block;"></i>
-    {{ name }}
+    {% if is_archived %}
+        <span style="color: LightGray">{{ name }} (archived)</span>
+    {% else %}
+        {{ name }}
+    {% endif %}
   </span>
 {% endif %}