diff --git a/compendium_v2/routes/survey.py b/compendium_v2/routes/survey.py
index c96fd31ab14e6fd2545325a66205360a1553cfe7..73cc56b21c532f63b4c1c91566c55da085d0e9a5 100644
--- a/compendium_v2/routes/survey.py
+++ b/compendium_v2/routes/survey.py
@@ -116,16 +116,11 @@ def list_surveys() -> Any:
         ).order_by(Survey.year.desc())
     ).unique()
 
-    def response_key(response):
-        return response.status.value + response.nren.name.lower()
-
     class SurveyDict(TypedDict):
         year: int
         status: str
         responses: List[Dict[str, Any]]
 
-    entries: List[SurveyDict] = []
-
     def _get_response(response: SurveyResponse) -> Dict[str, Any]:
         res = {
             "nren": {
@@ -136,42 +131,43 @@ def list_surveys() -> Any:
             "lock_description": response.lock_description,
             "notes": response.notes.notes if response.notes else ""
         }
-        if current_user.is_observer:
-            res["lock_description"] = response.lock_description
         return res
 
-    for entry in surveys:
-        # only include lock description if the user is an admin
-        entries.append(
-            {
-                "year": entry.year,
-                "status": entry.status.value,
-                "responses": [_get_response(r) for r in sorted(entry.responses, key=response_key)]
-            })
+    def sort_key(response: SurveyResponse):
+        return response.status.value + response.nren.name.lower()
+
     all_nrens = db.session.scalars(select(NREN)).all()
     nrens = {nren.name: nren.id for nren in all_nrens}
     nren_names = set(nrens.keys())
-    for survey_dict in entries:
-        # add in nrens without a response if the survey is open
-        if survey_dict["status"] == SurveyStatus.open.value:
-            nrens_with_responses = set([r["nren"]['name'] for r in survey_dict["responses"]])
-            for nren_name in sorted(nren_names.difference(nrens_with_responses), key=str.lower):
-                survey_dict["responses"].append(
-                    {"nren": {
-                        'name': nren_name,
-                        'id': nrens[nren_name]
-                    }, "status": RESPONSE_NOT_STARTED, "lock_description": ""})
-        # add in nrens without a response if the survey is closed
-        if survey_dict["status"] in [SurveyStatus.closed.value, SurveyStatus.published.value]:
-            nrens_with_responses = set([r["nren"]['name'] for r in survey_dict["responses"]])
-            for nren_name in sorted(nren_names.difference(nrens_with_responses), key=str.lower):
-                survey_dict["responses"].append(
-                    {"nren": {
+
+    all_surveys: List[SurveyDict] = []
+
+    for survey in surveys:
+        status = survey.status
+        responses = [_get_response(r) for r in sorted(survey.responses, key=sort_key)]
+        survey_dict: SurveyDict = {
+            "year": survey.year,
+            "status": status.value,
+            "responses": responses
+        }
+
+        if status in [SurveyStatus.open, SurveyStatus.closed, SurveyStatus.published]:
+            # add in nrens without a response and set a custom response status depending on the survey status
+            nrens_with_responses = set([r["nren"]["name"] for r in survey_dict["responses"]])
+            missing_responses = nren_names.difference(nrens_with_responses)
+            for nren_name in sorted(missing_responses, key=str.lower):
+                responses.append({
+                    "status": RESPONSE_NOT_STARTED if status == SurveyStatus.open else RESPONSE_NOT_COMPLETED,
+                    "lock_description": "",
+                    "nren": {
                         'name': nren_name,
                         'id': nrens[nren_name]
-                    }, "status": RESPONSE_NOT_COMPLETED, "lock_description": ""})
+                    },
+                })
+
+        all_surveys.append(survey_dict)
 
-    return entries
+    return all_surveys
 
 
 @routes.route('/new', methods=['POST'])