diff --git a/polymer/build/include/baselayer.h b/polymer/build/include/baselayer.h
index 171b2bc0e..ca17e9cb6 100644
--- a/polymer/build/include/baselayer.h
+++ b/polymer/build/include/baselayer.h
@@ -131,7 +131,7 @@ void begindrawing(void);
 void enddrawing(void);
 void showframe(int);
 
-int setpalette(int start, int num, char *dapal);
+int setpalette(int start, int num);
 //int getpalette(int start, int num, char *dapal);
 int setgamma(void);
 double vid_gamma, vid_contrast, vid_brightness;
diff --git a/polymer/build/src/engine.c b/polymer/build/src/engine.c
index c1bc58b6b..e6c50a6ab 100644
--- a/polymer/build/src/engine.c
+++ b/polymer/build/src/engine.c
@@ -7819,7 +7819,7 @@ int setgamemode(char davidoption, int daxdim, int daydim, int dabpp)
 
     setview(0L,0L,xdim-1,ydim-1);
     clearallviews(0L);
-    setbrightness(curbrightness,&palette[0],0);
+    setbrightness(curbrightness,palette,0);
 
     if (searchx < 0) { searchx = halfxdimen; searchy = (ydimen>>1); }
 
@@ -9985,7 +9985,7 @@ void setvgapalette(void)
         curpalettefaded[i].g = curpalette[i].g = vgapal16[4*i+1] << 2;
         curpalettefaded[i].r = curpalette[i].r = vgapal16[4*i+2] << 2;
     }
-    setpalette(0,256,vgapal16);
+    setpalette(0,256);
 }
 
 //
@@ -10014,13 +10014,13 @@ void setbrightness(char dabrightness, char *dapal, char noapply)
         curpalette[i].f = 0;
 
         // brightness adjust the palette
-        curpalettefaded[i].b = (tempbuf[k++] = britable[j][ curpalette[i].b ]);
-        curpalettefaded[i].g = (tempbuf[k++] = britable[j][ curpalette[i].g ]);
-        curpalettefaded[i].r = (tempbuf[k++] = britable[j][ curpalette[i].r ]);
-        curpalettefaded[i].f = tempbuf[k++] = 0;
+        curpalettefaded[i].b = britable[j][ curpalette[i].b ];
+        curpalettefaded[i].g = britable[j][ curpalette[i].g ];
+        curpalettefaded[i].r = britable[j][ curpalette[i].r ];
+        curpalettefaded[i].f = 0;
     }
 
-    if ((noapply&1) == 0) setpalette(0,256,(char*)tempbuf);
+    if ((noapply&1) == 0) setpalette(0,256);
 
 #if defined(POLYMOST) && defined(USE_OPENGL)
     if (rendmode >= 3)
@@ -10068,19 +10068,16 @@ void setpalettefade(char r, char g, char b, char offset)
             p.r = britable[curbrightness][ curpalette[i].r ];
         }
 
-        tempbuf[k++] =
-            (curpalettefaded[i].b =
-                 p.b + ((((int)palfadergb.b - (int)p.b) * (int)offset) >> 6)) >> 2;
-        tempbuf[k++] =
-            (curpalettefaded[i].g =
-                 p.g + ((((int)palfadergb.g - (int)p.g) * (int)offset) >> 6)) >> 2;
-        tempbuf[k++] =
-            (curpalettefaded[i].r =
-                 p.r + ((((int)palfadergb.r - (int)p.r) * (int)offset) >> 6)) >> 2;
-        tempbuf[k++] = curpalettefaded[i].f = 0;
+        curpalettefaded[i].b =
+                 p.b + (((palfadergb.b - p.b) * offset) >> 6);
+        curpalettefaded[i].g =
+                 p.g + (((palfadergb.g - p.g) * offset) >> 6);
+        curpalettefaded[i].r =
+                 p.r + (((palfadergb.r - p.r) * offset) >> 6);
+        curpalettefaded[i].f = 0;
     }
 
-    setpalette(0,256,(char*)tempbuf);
+    setpalette(0,256);
 }
 
 
diff --git a/polymer/build/src/sdlayer.c b/polymer/build/src/sdlayer.c
index 986c27c98..42746d5bf 100644
--- a/polymer/build/src/sdlayer.c
+++ b/polymer/build/src/sdlayer.c
@@ -1339,7 +1339,7 @@ void showframe(int w)
 //
 // setpalette() -- set palette values
 //
-int setpalette(int start, int num, char *dapal)
+int setpalette(int start, int num)
 {
     SDL_Color pal[256];
     int i,n;
@@ -1349,15 +1349,7 @@ int setpalette(int start, int num, char *dapal)
     copybuf(curpalettefaded, pal, 256);
 
     for (i=start, n=num; n>0; i++, n--)
-    {
-        /*
-        pal[i].b = dapal[0] << 2;
-        pal[i].g = dapal[1] << 2;
-        pal[i].r = dapal[2] << 2;
-        */
         curpalettefaded[i].f = pal[i].unused = 0;
-        dapal += 4;
-    }
 
     //return SDL_SetPalette(sdl_surface, SDL_LOGPAL|SDL_PHYSPAL, pal, 0, 256);
     return SDL_SetColors(sdl_surface, pal, 0, 256);
diff --git a/polymer/build/src/winlayer.c b/polymer/build/src/winlayer.c
index f56913942..9cf9feaf9 100644
--- a/polymer/build/src/winlayer.c
+++ b/polymer/build/src/winlayer.c
@@ -2503,35 +2503,24 @@ void showframe(int w)
 // New behaviour: curpalettefaded is the live palette, and any changes this function
 // makes are done to it and not the base palette.
 //
-int setpalette(int start, int num, char *dapal)
+int setpalette(int start, int num)
 {
     int i, n;
     HRESULT result;
     RGBQUAD *rgb;
     //HPALETTE hPalPrev;
 
-    struct logpal
+    static struct logpal
     {
         WORD palVersion;
         WORD palNumEntries;
         PALETTEENTRY palPalEntry[256];
     } lpal;
 
-    UNREFERENCED_PARAMETER(dapal);
-
-    copybuf(curpalettefaded, lpal.palPalEntry, 256);
-
-    for (i=start, n=num; n>0; i++, n--)
-    {
-        /*
-        lpal.palPalEntry[i].peBlue = dapal[0] << 2;
-        lpal.palPalEntry[i].peGreen = dapal[1] << 2;
-        lpal.palPalEntry[i].peRed = dapal[2] << 2;
-        */
-        curpalettefaded[i].f = lpal.palPalEntry[i].peFlags = PC_RESERVED | PC_NOCOLLAPSE;
-        //dapal += 4;
-    }
-
+//    copybufbyte(curpalettefaded, lpal.palPalEntry, 256);
+    Bmemcpy(lpal.palPalEntry, curpalettefaded, sizeof(lpal.palPalEntry));
+    for (i=start, n=num-1; n>0; i++, n--)
+        curpalettefaded[i].f = lpal.palPalEntry[i].peFlags = PC_NOCOLLAPSE;
 
     if (bpp > 8) return 0;	// no palette in opengl
 
@@ -2600,12 +2589,11 @@ int setpalette(int start, int num, char *dapal)
         }
 
         SetBWSystemColours();
-
     }
     else
     {
         if (!lpDDPalette) return -1;
-        result = IDirectDrawPalette_SetEntries(lpDDPalette, 0, start, num, (PALETTEENTRY*)&lpal.palPalEntry[start]);
+        result = IDirectDrawPalette_SetEntries(lpDDPalette, 0, 0, 256, (LPPALETTEENTRY)lpal.palPalEntry);
         if (result != DD_OK)
         {
             initprintf("Palette set failed: %s\n", GetDDrawError(result));
@@ -2937,6 +2925,7 @@ static int SetupDirectDraw(int width, int height)
 {
     HRESULT result;
     DDSURFACEDESC ddsd;
+    int i;
 
     // now create the DirectDraw surfaces
     ZeroMemory(&ddsd, sizeof(ddsd));
@@ -2978,7 +2967,9 @@ static int SetupDirectDraw(int width, int height)
 
     // attach a palette to the primary surface
     initprintf("  - Creating palette\n");
-    result = IDirectDraw_CreatePalette(lpDD, DDPCAPS_8BIT | DDPCAPS_ALLOW256, (PALETTEENTRY*)curpalette, &lpDDPalette, NULL);
+    for (i=0; i<256; i++)
+        curpalettefaded[i].f = PC_NOCOLLAPSE;
+    result = IDirectDraw_CreatePalette(lpDD, DDPCAPS_8BIT | DDPCAPS_ALLOW256, (LPPALETTEENTRY)curpalettefaded, &lpDDPalette, NULL);
     if (result != DD_OK)
     {
         ShowDDrawErrorBox("Failure creating palette", result);
@@ -3519,7 +3510,6 @@ static BOOL CreateAppWindow(int modenum)
         }
 
         modesetusing = -1;
-
     }
     else
     {
@@ -4072,7 +4062,7 @@ static LRESULT CALLBACK WndProcCallback(HWND hWnd, UINT uMsg, WPARAM wParam, LPA
         {
             if (appactive)
             {
-                setpalette(0,0,0);
+                setpalette(0,0);
                 SetBWSystemColours();
                 //					initprintf("Resetting palette.\n");
             }
@@ -4094,7 +4084,19 @@ static LRESULT CALLBACK WndProcCallback(HWND hWnd, UINT uMsg, WPARAM wParam, LPA
 
     case WM_PALETTECHANGED:
         // someone stole the palette so try and steal it back
-        if (appactive && (HWND)wParam != hWindow) setpalette(0,0,0);
+        if (appactive && (HWND)wParam != hWindow) setpalette(0,0);
+        if (bDDrawInited && bpp == 8 && fullscreen)
+        {
+                int result = IDirectDrawSurface_SetPalette(lpDDSPrimary, lpDDPalette);
+                OSD_Printf("DirectDraw palette stolen!  Resetting...\n");
+                if (result != DD_OK)
+                {
+                    ShowDDrawErrorBox("Failure setting palette", result);
+                    UninitDirectDraw();
+                    break;
+                }
+                setpalette(0,0);
+        }
         break;
 
     case WM_DISPLAYCHANGE:
diff --git a/polymer/eduke32/source/astub.c b/polymer/eduke32/source/astub.c
index 2fee3e64c..eaaa7bb28 100644
--- a/polymer/eduke32/source/astub.c
+++ b/polymer/eduke32/source/astub.c
@@ -4535,11 +4535,13 @@ static void Keys3d(void)
     */
     if (sector[cursectnum].lotag==2)
     {
-        if (sector[cursectnum].floorpal==8) SetBOSS1Palette();
+        if (sector[cursectnum].ceilingpicnum==FLOORSLIME) SetSLIMEPalette();
         else SetWATERPalette();
     }
     else SetGAMEPalette();
 
+    if (keystatus[buildkeys[BK_MODE2D_3D]])  // Enter
+        SetGAMEPalette();
 
     //Stick this in 3D part of ExtCheckKeys
     //Also choose your own key scan codes
@@ -8166,50 +8168,34 @@ void faketimerhandler(void)
     }
 }
 
-static void SetBOSS1Palette()
+extern short brightness;
+
+static inline void SetBOSS1Palette()
 {
     if (acurpalette==3) return;
     acurpalette=3;
-    kensetpalette(BOSS1palette);
+    setbrightness(brightness,BOSS1palette,0);
 }
 
-/*
-static void SetSLIMEPalette()
+static inline void SetSLIMEPalette()
 {
     if (acurpalette==2) return;
     acurpalette=2;
-    kensetpalette(SLIMEpalette);
+    setbrightness(brightness,SLIMEpalette,0);
 }
-*/
 
-static void SetWATERPalette()
+static inline void SetWATERPalette()
 {
     if (acurpalette==1) return;
     acurpalette=1;
-    kensetpalette(WATERpalette);
+    setbrightness(brightness,WATERpalette,0);
 }
 
-
-static void SetGAMEPalette()
+static inline void SetGAMEPalette()
 {
     if (acurpalette==0) return;
     acurpalette=0;
-    kensetpalette(GAMEpalette);
-}
-
-static void kensetpalette(char *vgapal)
-{
-    int i;
-    char vesapal[1024];
-
-    for (i=0;i<256;i++)
-    {
-        vesapal[i*4+0] = vgapal[i*3+2];
-        vesapal[i*4+1] = vgapal[i*3+1];
-        vesapal[i*4+2] = vgapal[i*3+0];
-        vesapal[i*4+3] = 0;
-    }
-    setpalette(0L,256L,vesapal);
+    setbrightness(brightness,GAMEpalette,0);
 }
 
 static void SearchSectorsForward()
diff --git a/polymer/eduke32/source/funct.h b/polymer/eduke32/source/funct.h
index 2244cd66d..66cdccf86 100644
--- a/polymer/eduke32/source/funct.h
+++ b/polymer/eduke32/source/funct.h
@@ -194,7 +194,6 @@ extern void fadepal(int r, int g, int b, int start, int end, int step);
 extern inline int minitextshade(int x,int y,const char *t,int s,int p,int sb);
 extern inline int gametext_z(int small, int starttile, int x,int y,const char *t,int s,int p,int orientation,int x1, int y1, int x2, int y2,int z);
 extern void txdigitalnumberz(int starttile, int x,int y,int n,int s,int pal,int cs,int x1, int y1, int x2, int y2, int z);
-extern void txdigitalnumber(int starttile, int x,int y,int n,int s,int pal,int cs,int x1, int y1, int x2, int y2);
 extern void myosx(int x,int y,int tilenum,int shade,int orientation);
 extern void myospalx(int x,int y,int tilenum,int shade,int orientation,int p);
 extern void ResetGameVars(void);
diff --git a/polymer/eduke32/source/game.c b/polymer/eduke32/source/game.c
index 1267bc654..b4a14bc1f 100644
--- a/polymer/eduke32/source/game.c
+++ b/polymer/eduke32/source/game.c
@@ -1812,10 +1812,6 @@ void txdigitalnumberz(int starttile, int x,int y,int n,int s,int pal,int cs,int
         j += (tilesizx[p]+1)*z/65536;
     }
 }
-void txdigitalnumber(int starttile, int x,int y,int n,int s,int pal,int cs,int x1, int y1, int x2, int y2)
-{
-    txdigitalnumberz(starttile,x,y,n,s,pal,cs,x1,y1,x2,y2,65536);
-}
 
 static void displayinventory(player_struct *p)
 {
@@ -2695,7 +2691,7 @@ static int strget_(int small,int x,int y,char *t,int dalen,int c)
     {
         if (g_player[myconnectindex].ps->gm&MODE_TYPE)
             x = mpgametext(y,t,c,2+8+16);
-        else x = gametext(x,y,t,c,2+8+16);
+        else x = mgametext(x,y,t,c,2+8+16);
     }
     c = 4-(sintable[(totalclock<<4)&2047]>>11);
 
diff --git a/polymer/eduke32/source/mapster32.h b/polymer/eduke32/source/mapster32.h
index 4321440e5..fddbdabd8 100644
--- a/polymer/eduke32/source/mapster32.h
+++ b/polymer/eduke32/source/mapster32.h
@@ -101,10 +101,10 @@ static void SearchSectorsForward();
 static void SearchSectorsBackward();
 static inline void SpriteName(short spritenum, char *lo2);
 static void PrintStatus(char *string,int num,char x,char y,char color);
-static void SetBOSS1Palette();
-// static void SetSLIMEPalette();
-static void SetWATERPalette();
-static void SetGAMEPalette();
+static inline void SetBOSS1Palette();
+static inline void SetSLIMEPalette();
+static inline void SetWATERPalette();
+static inline void SetGAMEPalette();
 static void kensetpalette(char *vgapal);
 
 extern short grid;