Index: /trunk/psLib/src/types/psMetadataItemCompare.c
===================================================================
--- /trunk/psLib/src/types/psMetadataItemCompare.c	(revision 16634)
+++ /trunk/psLib/src/types/psMetadataItemCompare.c	(revision 16635)
@@ -68,4 +68,31 @@
         TEMPLATE_CASE(F64,  F64, psF64);
     case PS_DATA_STRING:
+
+        // for MULTI, try each one & succeed if any match (valid = true is default state)
+        if (compare->type == PS_DATA_METADATA_MULTI) {
+            for (int j = 0; j < compare->data.list->n; j++) {
+                psMetadataItem *entry = psListGet (compare->data.list, j);
+		if (!entry) continue;
+		if (entry->type != PS_DATA_STRING) {
+		  continue;
+		}
+		if (template->data.V && !entry->data.V) { // expecting valid data, found NULL
+		  continue;
+		}
+		if (!template->data.V && entry->data.V) { // expecting NULL, found valid data
+		  continue;
+		}
+		// XXX should we return true for both NULL?
+		if (!template->data.V && !entry->data.V) { // expecting NULL, found NULL
+		  return true;
+		}
+		if (!strcasecmp(compare->data.V, template->data.V)) {
+		  return true;
+		}
+            }
+	    return false;
+        }
+
+	// any other (non-MULTI) is a mis-match
         if (compare->type != PS_DATA_STRING) {
             return false;
@@ -76,4 +103,5 @@
         }
         return (strcasecmp(compare->data.V, template->data.V) == 0) ? true : false;
+
     default:
         // Simply don't know how to compare more complex types.
