diff --git a/opentech/apply/funds/api_views.py b/opentech/apply/funds/api_views.py
index 61c74580bf75f5d12a36bbea1902cd1fd54d652a..ece53fb38815dfe6cac8a8578e7adc86c99cba00 100644
--- a/opentech/apply/funds/api_views.py
+++ b/opentech/apply/funds/api_views.py
@@ -13,6 +13,7 @@ from .models import ApplicationSubmission, RoundsAndLabs
 from .serializers import (
     CommentSerializer,
     CommentCreateSerializer,
+    RoundLabDetailSerializer,
     RoundLabSerializer,
     SubmissionActionSerializer,
     SubmissionListSerializer,
@@ -89,7 +90,7 @@ class SubmissionAction(generics.RetrieveAPIView):
 
 class RoundLabDetail(generics.RetrieveAPIView):
     queryset = RoundsAndLabs.objects.all()
-    serializer_class = RoundLabSerializer
+    serializer_class = RoundLabDetailSerializer
     permission_classes = (
         permissions.IsAuthenticated, IsApplyStaffUser,
     )
@@ -97,12 +98,6 @@ class RoundLabDetail(generics.RetrieveAPIView):
     def get_object(self):
         return super().get_object().specific
 
-    def get_serializer(self, *args, **kwargs):
-        serializer_class = self.get_serializer_class()
-        kwargs['context'] = self.get_serializer_context()
-        kwargs['show_workflow'] = True
-        return serializer_class(*args, **kwargs)
-
 
 class RoundLabList(generics.ListAPIView):
     queryset = RoundsAndLabs.objects.specific()
diff --git a/opentech/apply/funds/serializers.py b/opentech/apply/funds/serializers.py
index 5d577e4bcf87962c4ff97c313c99345d3321659f..e323fc5b0431b25ed128d752c0b4e6dada5b8fab 100644
--- a/opentech/apply/funds/serializers.py
+++ b/opentech/apply/funds/serializers.py
@@ -1,8 +1,7 @@
 from rest_framework import serializers
-from wagtail.core.models import Page
 
 from opentech.apply.activity.models import Activity
-from .models import ApplicationSubmission
+from .models import ApplicationSubmission, RoundsAndLabs
 
 
 class ActionSerializer(serializers.Field):
@@ -84,19 +83,13 @@ class SubmissionActionSerializer(serializers.ModelSerializer):
         fields = ('id', 'actions',)
 
 
-class RoundLabSerializer(serializers.ModelSerializer):
+class RoundLabDetailSerializer(serializers.ModelSerializer):
     workflow = serializers.SerializerMethodField()
 
     class Meta:
-        model = Page
+        model = RoundsAndLabs
         fields = ('id', 'title', 'workflow')
 
-    def __init__(self, *args, **kwargs):
-        show_workflow = kwargs.pop('show_workflow', False)
-        if not show_workflow:
-            del self.fields['workflow']
-        super().__init__(*args, **kwargs)
-
     def get_workflow(self, obj):
         return [
             {
@@ -107,6 +100,12 @@ class RoundLabSerializer(serializers.ModelSerializer):
         ]
 
 
+class RoundLabSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = RoundsAndLabs
+        fields = ('id', 'title')
+
+
 class CommentSerializer(serializers.ModelSerializer):
     user = serializers.StringRelatedField()
 
diff --git a/opentech/static_src/src/app/src/containers/ByRoundListing.js b/opentech/static_src/src/app/src/containers/ByRoundListing.js
index 0e3977a60d6be5615423a9f82c366a4096e17b25..8cb617de8b8d1785d9066d9d0bbe1ef907f03d3f 100644
--- a/opentech/static_src/src/app/src/containers/ByRoundListing.js
+++ b/opentech/static_src/src/app/src/containers/ByRoundListing.js
@@ -48,7 +48,6 @@ class ByRoundListing extends React.Component {
 
     componentDidUpdate(prevProps) {
         const { submissionStatuses } = this.props;
-        // Update entries if round ID is changed or is not null.
         if (!submissionStatuses.every(v => prevProps.submissionStatuses.includes(v))) {
             loadData(this.props)
         }
@@ -58,13 +57,13 @@ class ByRoundListing extends React.Component {
         const { isLoading, rounds, submissions } = this.props;
         if (isLoading)
             return []
-        return submissions.map(v => v.round)
-                          .filter((value, index, arr) => arr.indexOf(value) === index)
-                          .map((v, i) => ({
-                              display: rounds[parseInt(v)].title,
-                              key: `round-${v}`,
+        return submissions.map(submission => submission.round)
+                          .filter((round, index, arr) => arr.indexOf(round) === index)
+                          .map((round, i) => ({
+                              display: rounds[parseInt(round)].title,
+                              key: `round-${round}`,
                               position: i,
-                              values: [v],
+                              values: [round],
                           }));
     }
 
diff --git a/opentech/static_src/src/app/src/redux/reducers/submissions.js b/opentech/static_src/src/app/src/redux/reducers/submissions.js
index 95595562efd9887841ca3133ed69d5f9bc381774..946039d231a22cffcd039e6b96c4c212fd94df09 100644
--- a/opentech/static_src/src/app/src/redux/reducers/submissions.js
+++ b/opentech/static_src/src/app/src/redux/reducers/submissions.js
@@ -100,46 +100,51 @@ function currentSubmission(state = null, action) {
 
 
 function submissionsByStatuses(state = {}, action) {
-    const key = () => action.statuses.join(',');
     switch (action.type) {
         case UPDATE_SUBMISSIONS_BY_STATUSES:
             return {
-                ...state || null,
-                [key()]: {
-                    ...state[key()],
-                    ids: action.data.results.map(v => v.id),
-                    isFetching: false,
-                    isErrored: false,
-                }
+                ...state,
+                ...action.data.results.reduce((accumulator, submission) => {
+                    const submissions = accumulator[submission.status] || []
+                    if ( !submissions.includes(submission.id) ) {
+                        accumulator[submission.status] = [...submissions, submission.id]
+                    }
+                    return state
+                }, state)
+            };
+        default:
+            return state
+    }
+}
+
+
+function submissionsFetchingState(state = {isFetching: true, isError: false}, action) {
+    switch (action.type) {
+        case FAIL_LOADING_SUBMISSIONS_BY_STATUSES:
+            return {
+                isFetching: false,
+                isErrored: true,
             };
         case START_LOADING_SUBMISSIONS_BY_STATUSES:
             return {
-                ...state || null,
-                [key()]: {
-                    ...state[key()],
-                    isFetching: true,
-                    isErrored: false,
-                }
+                isFetching: true,
+                isErrored: false,
             };
-        case FAIL_LOADING_SUBMISSIONS_BY_STATUSES:
+        case UPDATE_SUBMISSIONS_BY_STATUSES:
             return {
-                ...state || null,
-                [key()]: {
-                    ...state[key()],
-                    isFetching: false,
-                    isErrored: true,
-                }
+                isFetching: true,
+                isErrored: false,
             };
         default:
             return state
     }
 }
 
-
 const submissions = combineReducers({
     byID: submissionsByID,
     current: currentSubmission,
     byStatuses: submissionsByStatuses,
+    fetchingState: submissionsFetchingState,
 });
 
 export default submissions;
diff --git a/opentech/static_src/src/app/src/redux/selectors/submissions.js b/opentech/static_src/src/app/src/redux/selectors/submissions.js
index f97708fa95899a1000c7fb4276c4d7142b2aeda4..643684d2e8d4648477eb560e69e25be39dde5f11 100644
--- a/opentech/static_src/src/app/src/redux/selectors/submissions.js
+++ b/opentech/static_src/src/app/src/redux/selectors/submissions.js
@@ -11,32 +11,29 @@ const getSubmissions = state => state.submissions.byID;
 
 const getSubmissionsByStatuses = state => state.submissions.byStatuses;
 
+const getSubmissionsFetchingState = state => state.submissions.fetchingState;
+
 const getCurrentSubmissionID = state => state.submissions.current;
 
 const getByGivenStatusesObject = statuses => createSelector(
     [getSubmissionsByStatuses], (byStatuses) => {
-        for (const [key, value] of Object.entries(byStatuses)) {
-            if (key.split(',').every(v => statuses.includes(v))) {
-                return value;
-            }
-        }
-        return {};
+        return statuses.reduce((acc, status) => acc.concat(byStatuses[status] || []), [])
     }
 );
 
 const getSubmissionsByGivenStatuses = statuses => createSelector(
     [getSubmissions, getByGivenStatusesObject(statuses)],
-    (submissions, byStatus) => (byStatus.ids || []).map(id => submissions[id])
+    (submissions, byStatus) => byStatus.map(id => submissions[id])
 );
 
 const getByGivenStatusesError = statuses => createSelector(
-    [getByGivenStatusesObject(statuses)],
-    byStatus => byStatus.isErrored === true
+    [getSubmissionsFetchingState],
+    state => state.isErrored === true
 );
 
 const getByGivenStatusesLoading = statuses => createSelector(
-    [getByGivenStatusesObject(statuses)],
-    byStatus => byStatus.isFetching === true
+    [getByGivenStatusesObject],
+    state => state.isFetching === true
 );
 
 const getCurrentRoundSubmissions = createSelector(