diff --git a/lib/modules/_Image_XPM.pmod b/lib/modules/_Image_XPM.pmod
index 4c47c764cb6057d1a0c121a7a2308ec5d081d4f1..b800de8880261a491aeaa2430b630f7c60398e27 100644
--- a/lib/modules/_Image_XPM.pmod
+++ b/lib/modules/_Image_XPM.pmod
@@ -4,13 +4,31 @@ static mapping parse_color( array color )
   for(int i=0; i<sizeof(color); i+=2 )
     if(lower_case(color[i+1]) != "none")
       res[color[i]] = Colors.parse_color( color[i+1] );
-  return res;
+  return sizeof(res)?res:0;
 }
 
 static array find_color( mapping in, string space )
 {
-  return in && (in[space||"s"] || in->c || in->g || in->g4 || in->m);
-} 
+  if(!in) return 0;
+  switch(space)
+  {
+   default:
+   case "s":
+     if(in->s) return in->s;
+   case "c":
+     if(in->c) return in->c;
+   case "g":
+     if(in->g) return in->g;
+   case "g4":
+     if(in->g4) return in->g4;
+   case "m":
+     if(in->m) return in->m;
+     if(in->s) return in->s;
+  }
+  if(sizeof(in))
+    return values(in)[0];
+  return 0;
+}
 
 mapping _decode( string what, void|mapping opts )
 {