diff --git a/opentech/apply/categories/blocks.py b/opentech/apply/categories/blocks.py
index 35e9a51f1d454fa0cd9f14c8497117849fa8c8e7..ffa193a4e5112d43bbf815ea2c0226d1420fe0a1 100644
--- a/opentech/apply/categories/blocks.py
+++ b/opentech/apply/categories/blocks.py
@@ -6,6 +6,7 @@ from wagtail.core.blocks import BooleanBlock, CharBlock, ChooserBlock, TextBlock
 from wagtail.core.utils import resolve_model_string
 
 from opentech.apply.stream_forms.blocks import OptionalFormFieldBlock
+from django_select2.forms import Select2MultipleWidget
 
 
 class ModelChooserBlock(ChooserBlock):
@@ -63,7 +64,13 @@ class CategoryQuestionBlock(OptionalFormFieldBlock):
 
     def get_widget(self, struct_value):
         if struct_value['multi']:
-            return forms.CheckboxSelectMultiple
+            category = struct_value['category']
+            category_size = category.options.count()
+            # Pick widget according to number of options to maintain good usability.
+            if category_size < 32:
+                return forms.CheckboxSelectMultiple
+            else:
+                return Select2MultipleWidget
         else:
             return forms.RadioSelect