Index: trunk/psModules/src/concepts/pmConceptsStandard.c
===================================================================
--- trunk/psModules/src/concepts/pmConceptsStandard.c	(revision 15229)
+++ trunk/psModules/src/concepts/pmConceptsStandard.c	(revision 15299)
@@ -329,4 +329,36 @@
 }
 
+
+psList *p_pmConceptParseRegions(const char *region)
+{
+    assert(region && strlen(region) > 0);
+
+    psList *list = psListAlloc(NULL);   // List of regions
+
+    // a single BIASSEC is of the form [AAAA]
+    // we may have multiple BIASSEC entries separated by space, commas, or semicolons
+    int xParity = 0, yParity = 0;       // Parity of region
+    char *p = strchr (region, '[');
+    while (p) {
+        char *q = strchr (p, ']');
+        if (!q) {
+            break;
+        }
+        char *regionString = psStringAlloc(q - p + 2);
+        strncpy (regionString, p, q - p + 1);
+        regionString[q - p + 1] = 0;
+
+        psRegion *region = psAlloc(sizeof(psRegion)); // The region
+        *region = psRegionAndParityFromString(&xParity, &yParity, regionString);
+        psListAdd(list, PS_LIST_TAIL, region);
+        psFree(region);           // Drop reference
+        psFree(regionString);     // Drop reference
+
+        p = strchr (q, '[');
+    }
+
+    return list;
+}
+
 psMetadataItem *p_pmConceptParse_CELL_BIASSEC(const psMetadataItem *concept,
                                               const psMetadataItem *pattern,
@@ -341,31 +373,13 @@
     assert(pattern);
 
-    psList *biassecs = psListAlloc(NULL); // List of bias sections
+    psList *biassecs; // List of bias sections
 
     switch (concept->type) {
       case PS_DATA_STRING: {
-          // a single BIASSEC is of the form [AAAA]
-          // we may have multiple BIASSEC entries separated by space, commas, or semicolons
-          int xParity = 0;
-          int yParity = 0;
-          char *p = strchr (concept->data.V, '[');
-          while (p != NULL) {
-              char *q = strchr (p, ']');
-              if (q == NULL) break;
-              char *regionString = psAlloc (q - p + 2);
-              strncpy (regionString, p, q - p + 1);
-              regionString[q - p + 1] = 0;
-
-              psRegion *region = psAlloc(sizeof(psRegion)); // The region
-              *region = psRegionAndParityFromString(&xParity, &yParity, regionString);
-              psListAdd(biassecs, PS_LIST_TAIL, region);
-              psFree(region);           // Drop reference
-              psFree(regionString);     // Drop reference
-
-              p = strchr (q, '[');
-          }
+          biassecs = p_pmConceptParseRegions(concept->data.V);
           break;
       }
       case PS_DATA_LIST: {
+          biassecs = psListAlloc(NULL);
           psList *regions = concept->data.V; // The list of regions
           psListIterator *regionsIter = psListIteratorAlloc(regions, PS_LIST_HEAD, false); // Iterator
