diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c
index 344d2ff2a2e69c4f290fd677dafb8c274e3333d6..8e0782f4b9d54972f8879accbf794ce0e0ed63ae 100644
--- a/src/stream_cdf_i.c
+++ b/src/stream_cdf_i.c
@@ -1078,17 +1078,63 @@ is_valid_coordinate(ncvar_t *ncvar)
 }
 
 static void
-read_aux_vars(int ncid, char *pstring, ncvar_t *ncvar, ncvar_t *ncvars)
+read_coordinates_vars(int ncid, char *attstring, ncvar_t *ncvar, ncvar_t *ncvars, int *nchecked_vars, char *checked_vars[],
+                      int max_check_vars)
 {
   bool lstop = false;
-  for (int i = 0; i < MAX_AUXVARS; i++)
+  for (int i = 0; i < MAX_COORDVARS && !lstop; i++)
     {
-      while (isspace((int) *pstring)) pstring++;
-      if (*pstring == 0) break;
-      char *varname = pstring;
-      while (!isspace((int) *pstring) && *pstring != 0) pstring++;
-      if (*pstring == 0) lstop = true;
-      *pstring++ = 0;
+      while (isspace((int) *attstring)) attstring++;
+      if (*attstring == 0) break;
+      char *varname = attstring;
+      while (!isspace((int) *attstring) && *attstring != 0) attstring++;
+      if (*attstring == 0) lstop = true;
+      if (*(attstring - 1) == ',') *(attstring - 1) = 0;
+      *attstring++ = 0;
+
+      int dimvarid;
+      int status = nc_inq_varid(ncid, varname, &dimvarid);
+      if (status == NC_NOERR)
+        {
+          if (is_valid_coordinate(&ncvars[dimvarid]))
+            {
+              cdf_set_var(&ncvars[dimvarid], CoordVar);
+              if (!CDI_Ignore_Att_Coordinates)
+                {
+                  ncvar->coordvarids[i] = dimvarid;
+                  ncvar->ncoordvars++;
+                }
+            }
+        }
+      else
+        {
+          if (!CDI_Ignore_Att_Coordinates) ncvar->ncoordvars++;
+
+          int k;
+          for (k = 0; k < *nchecked_vars; ++k)
+            if (str_is_equal(checked_vars[k], varname)) break;
+
+          if (k == *nchecked_vars)
+            {
+              if (*nchecked_vars < max_check_vars) checked_vars[*nchecked_vars++] = strdup(varname);
+              Warning("%s - >%s<", nc_strerror(status), varname);
+            }
+        }
+    }
+}
+
+static void
+read_auxiliary_vars(int ncid, char *attstring, ncvar_t *ncvar, ncvar_t *ncvars)
+{
+  bool lstop = false;
+  for (int i = 0; i < MAX_AUXVARS && !lstop; i++)
+    {
+      while (isspace((int) *attstring)) attstring++;
+      if (*attstring == 0) break;
+      char *varname = attstring;
+      while (!isspace((int) *attstring) && *attstring != 0) attstring++;
+      if (*attstring == 0) lstop = true;
+      *attstring++ = 0;
 
       int dimvarid;
       int status = nc_inq_varid(ncid, varname, &dimvarid);
@@ -1103,8 +1149,6 @@ read_aux_vars(int ncid, char *pstring, ncvar_t *ncvar, ncvar_t *ncvars)
         }
       else
         Warning("%s - %s", nc_strerror(status), varname);
-
-      if (lstop) break;
     }
 }
 
@@ -1416,54 +1460,12 @@ cdfScanVarAttr(int nvars, ncvar_t *ncvars, int ndims, ncdim_t *ncdims, int timed
             }
           else if (isText && (str_is_equal(attname, "associate") || str_is_equal(attname, "coordinates")))
             {
-              bool lstop = false;
-              char *pstring = attstring;
-
-              for (int i = 0; i < MAX_COORDVARS && !lstop; i++)
-                {
-                  while (isspace((int) *pstring)) pstring++;
-                  if (*pstring == 0) break;
-                  char *varname = pstring;
-                  while (!isspace((int) *pstring) && *pstring != 0) pstring++;
-                  if (*pstring == 0) lstop = true;
-                  if (*(pstring - 1) == ',') *(pstring - 1) = 0;
-                  *pstring++ = 0;
-
-                  int dimvarid;
-                  int status = nc_inq_varid(ncid, varname, &dimvarid);
-                  if (status == NC_NOERR)
-                    {
-                      if (is_valid_coordinate(&ncvars[dimvarid]))
-                        {
-                          cdf_set_var(&ncvars[dimvarid], CoordVar);
-                          if (!CDI_Ignore_Att_Coordinates)
-                            {
-                              ncvar->coordvarids[i] = dimvarid;
-                              ncvar->ncoordvars++;
-                            }
-                        }
-                    }
-                  else
-                    {
-                      if (!CDI_Ignore_Att_Coordinates) ncvar->ncoordvars++;
-
-                      int k;
-                      for (k = 0; k < nchecked_vars; ++k)
-                        if (str_is_equal(checked_vars[k], varname)) break;
-
-                      if (k == nchecked_vars)
-                        {
-                          if (nchecked_vars < max_check_vars) checked_vars[nchecked_vars++] = strdup(varname);
-                          Warning("%s - >%s<", nc_strerror(status), varname);
-                        }
-                    }
-                }
-
+              read_coordinates_vars(ncid, attstring, ncvar, ncvars, &nchecked_vars, checked_vars, max_check_vars);
               cdf_set_var(ncvar, DataVar);
             }
           else if (isText && str_is_equal(attname, "auxiliary_variable"))
             {
-              read_aux_vars(ncid, attstring, ncvar, ncvars);
+              read_auxiliary_vars(ncid, attstring, ncvar, ncvars);
               cdf_set_var(ncvar, DataVar);
             }
           else if (isText && str_is_equal(attname, "grid_mapping"))