diff --git a/ietf/nomcom/views.py b/ietf/nomcom/views.py
index fbb3d85ff..12e3754ec 100644
--- a/ietf/nomcom/views.py
+++ b/ietf/nomcom/views.py
@@ -10,7 +10,6 @@ from django.urls import reverse
 from django.http import Http404, HttpResponseRedirect, HttpResponseForbidden
 from django.shortcuts import render, get_object_or_404, redirect
 from django.template.loader import render_to_string
-from django.db.models import Count
 from django.forms.models import modelformset_factory, inlineformset_factory
 
 
@@ -173,8 +172,8 @@ def private_index(request, year):
     if selected_state == questionnaire_state:
         nominee_positions = [np for np in nominee_positions if np.questionnaires]
 
-    # TODO- just build this dict using open Positions: see #2254
-    stats = all_nominee_positions.values('position__name', 'position__id').annotate(total=Count('position'))
+    positions = Position.objects.get_by_nomcom(nomcom=nomcom)
+    stats = [{'position__name':p.name,'position__id':p.pk} for p in positions]
     states = list(NomineePositionStateName.objects.values('slug', 'name')) + [{'slug': questionnaire_state, 'name': u'Questionnaire'}]
     positions = set([ n.position for n in all_nominee_positions.order_by('position__name') ])
     for s in stats:
@@ -184,6 +183,7 @@ def private_index(request, year):
             else:
                 s[state['slug']] = all_nominee_positions.filter(position__name=s['position__name'],
                                                                 state=state['slug']).count()
+        s['total'] = all_nominee_positions.filter(position__name=s['position__name']).count()
 
     return render(request, 'nomcom/private_index.html',
                               {'nomcom': nomcom,