diff --git a/opentech/public/projects/widgets.py b/opentech/public/projects/widgets.py
index a17bdac7f5c9ead7f8cd1d678c943e8f72906c04..8a60b8bd6d1d1268b25ef1386e90d8e588c08cbd 100644
--- a/opentech/public/projects/widgets.py
+++ b/opentech/public/projects/widgets.py
@@ -1,27 +1,52 @@
 import json
 
 from django import forms
+from django.utils.functional import LazyObject
 
 from opentech.apply.categories.models import Category
 
 
+class LazyChoices:
+    def __init__(self, queryset, display):
+        self.queryset = queryset
+        self.display = display
+
+    def __iter__(self):
+        for choice in self.queryset.values_list(*self.display):
+            yield choice
+
+
+class LazyWidgets:
+    def __init__(self, widget, model):
+        self.model = model
+        self.widget = widget
+
+    def __iter__(self):
+        for obj in self.model.objects.all():
+            yield self.widget(
+                attrs={'id': obj.id, 'label_tag': obj.name},
+                choices=LazyChoices(obj.options, ['id', 'value']),
+            )
+
+
 class OptionsWidget(forms.CheckboxSelectMultiple):
     template_name = 'projects/widgets/options_widget.html'
     option_template_name = 'projects/widgets/options_option.html'
 
+    def __init__(self, *args, **kwargs):
+        choices = kwargs['choices']
+        super().__init__(*args, **kwargs)
+        self.choices = choices
+
+
 class CategoriesWidget(forms.MultiWidget):
     template_name = 'projects/widgets/categories_widget.html'
 
     def __init__(self, *args, **kwargs):
-        widgets = [
-            OptionsWidget(
-                attrs={'id': cat.id, 'label_tag': cat.name},
-                choices=cat.options.all().values_list('id', 'value'),
-            )
-            for cat in Category.objects.all()
-        ]
-        kwargs['widgets'] = widgets
+        kwargs['widgets'] = list()
         super().__init__(*args, **kwargs)
+        self.widgets = LazyWidgets(OptionsWidget, Category)
+
 
     def decompress(self, value):
         data = json.loads(value)