diff --git a/windows/cursoricon.c b/windows/cursoricon.c
index 75a7667..0a33e82 100644
--- a/windows/cursoricon.c
+++ b/windows/cursoricon.c
@@ -2008,6 +2008,73 @@
     return result;
 }
 
+/***********************************************************************
+ *           DIB_FixColorsToLoadflags
+ *
+ * Change color table entries when LR_LOADTRANSPARENT or LR_LOADMAP3DCOLORS
+ * are in loadflags
+ */
+static void DIB_FixColorsToLoadflags(BITMAPINFO * bmi, UINT loadflags, BYTE pix)
+{
+  int colors;
+  COLORREF c_W, c_S, c_F, c_L, c_C;
+  int incr,i;
+  RGBQUAD *ptr;
+
+  if (bmi->bmiHeader.biBitCount > 8) return;
+  if (bmi->bmiHeader.biSize == sizeof(BITMAPINFOHEADER)) incr = 4;
+  else if (bmi->bmiHeader.biSize == sizeof(BITMAPCOREHEADER)) incr = 3;
+  else {
+    WARN_(resource)("Wrong bitmap header size!\n");
+    return;
+  }
+  colors = bmi->bmiHeader.biClrUsed;
+  if (!colors && (bmi->bmiHeader.biBitCount <= 8))
+    colors = 1 << bmi->bmiHeader.biBitCount;
+  c_W = GetSysColor(COLOR_WINDOW);
+  c_S = GetSysColor(COLOR_3DSHADOW);
+  c_F = GetSysColor(COLOR_3DFACE);
+  c_L = GetSysColor(COLOR_3DLIGHT);
+  if (loadflags & LR_LOADTRANSPARENT) {
+    switch (bmi->bmiHeader.biBitCount) {
+      case 1: pix = pix >> 7; break;
+      case 4: pix = pix >> 4; break;
+      case 8: break;
+      default: 
+        WARN_(resource)("(%d): Unsupported depth\n", bmi->bmiHeader.biBitCount); 
+	return;
+    }
+    if (pix >= colors) {
+      WARN_(resource)("pixel has color index greater than biClrUsed!\n");
+      return;
+    }
+    if (loadflags & LR_LOADMAP3DCOLORS) c_W = c_F;
+    ptr = (RGBQUAD*)((char*)bmi->bmiColors+pix*incr);
+    ptr->rgbBlue = GetBValue(c_W);
+    ptr->rgbGreen = GetGValue(c_W);
+    ptr->rgbRed = GetRValue(c_W);
+  }
+  if (loadflags & LR_LOADMAP3DCOLORS)
+    for (i=0; i<colors; i++) {
+      ptr = (RGBQUAD*)((char*)bmi->bmiColors+i*incr);
+      c_C = RGB(ptr->rgbRed, ptr->rgbGreen, ptr->rgbBlue);
+      if (c_C == RGB(128, 128, 128)) { 
+	ptr->rgbRed = GetRValue(c_S);
+	ptr->rgbGreen = GetGValue(c_S);
+	ptr->rgbBlue = GetBValue(c_S);
+      } else if (c_C == RGB(192, 192, 192)) { 
+	ptr->rgbRed = GetRValue(c_F);
+	ptr->rgbGreen = GetGValue(c_F);
+	ptr->rgbBlue = GetBValue(c_F);
+      } else if (c_C == RGB(223, 223, 223)) { 
+	ptr->rgbRed = GetRValue(c_L);
+	ptr->rgbGreen = GetGValue(c_L);
+	ptr->rgbBlue = GetBValue(c_L);
+      } 
+    }
+}
+
+
 /**********************************************************************
  *       BITMAP_Load
  */
