diff --git a/lib/modules/Colors.pmod b/lib/modules/Colors.pmod
index fc50c7f0d255aa046223b62424aaa8573846d8fa..08e0d1541f8d735a275703cd45f2d929c453b213 100644
--- a/lib/modules/Colors.pmod
+++ b/lib/modules/Colors.pmod
@@ -455,12 +455,6 @@ COLOR(yellow4,139,139,0);
 COLOR(yellowgreen,154,205,50);
 
 
-#ifdef ROXEN
-mapping (string:string) html_32_colors =
-  ([ "green":"#008000", "maroon":"#800000", "purple":"#800080" ]);
-#endif
-
-
 array(int) rgb_to_hsv(array(int)|int ri, int|void gi, int|void bi)
 {
   if(arrayp(ri)) return Image.Color(@ri)->hsv();
@@ -473,24 +467,27 @@ array(int) hsv_to_rgb(array(int)|int hv, int|void sv, int|void vv)
   return Image.Color(sprintf("@%d,%d,%d", hv,sv,vv))->rgb();
 }
 
+array(int) rgb_to_cmyk(array(int)|int ri, int|void gi, int|void bi)
+{
+  if(arrayp(ri)) return Image.Color(@ri)->cmyk();
+  return Image.Color(ri,gi,bi)->cmyk();
+}
+
+array(int) cmyk_to_rgb(array(int)|int c, int|void m, int|void y, int|void k)
+{
+  if(arrayp(c)) return Image.Color(sprintf("%%%d,%d,%d,%d", @c))->rgb();
+  return Image.Color(sprintf("%%%d,%d,%d,%d", c,m,y,k))->rgb();
+}
+
 array(int) parse_color(string from)
 {
   object color;
   if(!from || !strlen(from)) return ({ 0,0,0 }); // Odd color...
 
-  from = lower_case(from-" ");
-
-#ifdef ROXEN  
-  if(html_32_colors[from])  from = html_32_colors[from];
-#endif
-
-  if(color=Image.Color(from)) return color->rgb();
-
-  from = replace(from, "gray", "grey");
-  if(color=Image.Color(from)) return color->rgb();
+  if(color=Image.Color.guess(from)) return color->rgb();
 
-  from = "#" + from;
-  if(color=Image.Color(from)) return color->rgb();
+  from = replace(lower_case(from), "gray", "grey");
+  if(color=Image.Color.guess(from)) return color->rgb();
 
   // Lets call it black and be happy..... :-)
   return ({ 0,0,0 });