diff -ur putty-src.orig/PUTTY.H putty-src/PUTTY.H
--- putty-src.orig/PUTTY.H	2003-08-25 14:53:42.000000000 +1000
+++ putty-src/PUTTY.H	2003-08-30 14:47:13.000000000 +1000
@@ -429,6 +429,7 @@
     char answerback[256];
     char printer[128];
     /* Colour options */
+    int system_colour;
     int try_palette;
     int bold_colour;
     unsigned char colours[22][3];
diff -ur putty-src.orig/SETTINGS.C putty-src/SETTINGS.C
--- putty-src.orig/SETTINGS.C	2003-08-25 14:53:42.000000000 +1000
+++ putty-src/SETTINGS.C	2003-08-30 14:45:36.000000000 +1000
@@ -280,6 +280,7 @@
     write_setting_i(sesskey, "TermHeight", cfg->height);
     write_setting_fontspec(sesskey, "Font", cfg->font);
     write_setting_i(sesskey, "FontVTMode", cfg->vtmode);
+    write_setting_i(sesskey, "SystemColour", cfg->system_colour);
     write_setting_i(sesskey, "TryPalette", cfg->try_palette);
     write_setting_i(sesskey, "BoldAsColour", cfg->bold_colour);
     for (i = 0; i < 22; i++) {
@@ -534,6 +535,7 @@
     gppi(sesskey, "TermHeight", 24, &cfg->height);
     gppfont(sesskey, "Font", &cfg->font);
     gppi(sesskey, "FontVTMode", VT_UNICODE, (int *) &cfg->vtmode);
+    gppi(sesskey, "SystemColour", 0, &cfg->system_colour);
     gppi(sesskey, "TryPalette", 0, &cfg->try_palette);
     gppi(sesskey, "BoldAsColour", 1, &cfg->bold_colour);
     for (i = 0; i < 22; i++) {
diff -ur putty-src.orig/WINCFG.C putty-src/WINCFG.C
--- putty-src.orig/WINCFG.C	2003-05-24 13:31:32.000000000 +1000
+++ putty-src/WINCFG.C	2003-08-30 15:09:08.000000000 +1000
@@ -271,6 +271,10 @@
     ctrl_checkbox(s, "Attempt to use logical palettes", 'l',
 		  HELPCTX(colours_logpal),
 		  dlg_stdcheckbox_handler, I(offsetof(Config,try_palette)));
+    ctrl_checkbox(s, "Use system colours", 's',
+                  HELPCTX(colours_system),
+                  dlg_stdcheckbox_handler, I(offsetof(Config,system_colour)));
+
 
     /*
      * Resize-by-changing-font is a Windows insanity.
diff -ur putty-src.orig/WINDOW.C putty-src/WINDOW.C
--- putty-src.orig/WINDOW.C	2003-08-21 20:48:46.000000000 +1000
+++ putty-src/WINDOW.C	2003-08-30 15:16:55.000000000 +1000
@@ -75,6 +75,7 @@
 static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
 			unsigned char *output);
 static void cfgtopalette(void);
+static void systopalette(void);
 static void init_palette(void);
 static void init_fonts(int, int);
 static void another_font(int);
@@ -530,7 +531,7 @@
     logctx = log_init(NULL, &cfg);
     term_provide_logctx(term, logctx);
 
-    cfgtopalette();
+    init_palette();
 
     /*
      * Guess some defaults for the window size. This all gets
@@ -1018,12 +1019,74 @@
 }
 
 /*
+ * Copy the colour palette from the system into defpal.
+ */
+static void systopalette(void)
+{
+    HKEY colourkey;
+    DWORD type, bufsize;
+    BYTE *buffer;
+    int i, r, g, b;
+
+    /* Open user colour registry key. */
+    if ((RegOpenKey(HKEY_CURRENT_USER, "Control Panel\\Colors", &colourkey))
+        != ERROR_SUCCESS)
+        return;
+
+    /* Get user foreground colour. */
+    buffer = (BYTE *)malloc(BUFSIZ);
+    bufsize = BUFSIZ;
+    if ((RegQueryValueEx(colourkey, "WindowText", NULL, &type, buffer, &bufsize))
+        != ERROR_SUCCESS)
+        return;
+
+    /* Tokenise registry value "r g b" into (r,g,b). */
+    r = atoi(strtok((char *)buffer, " "));
+    g = atoi(strtok(NULL, " "));
+    b = atoi(strtok(NULL, " "));
+    /* free(buffer); */
+
+    /* Set user foreground colours (16 and 17) to (r,g,b). */
+    for (i = 16; i < 18; i++) {
+        defpal[i].rgbtRed = r;
+        defpal[i].rgbtGreen = g;
+        defpal[i].rgbtBlue = b;
+    }
+
+    /* Get user background colour. */
+    buffer = (BYTE *)malloc(BUFSIZ);
+    bufsize = BUFSIZ;
+    if ((RegQueryValueEx(colourkey, "Window", NULL, &type, buffer, &bufsize))
+        != ERROR_SUCCESS)
+        return;
+
+    /* Tokenise registry value "r g b" into (r,g,b). */
+    r = atoi(strtok((char *)buffer, " "));
+    g = atoi(strtok(NULL, " "));
+    b = atoi(strtok(NULL, " "));
+    /* free(buffer); */
+
+    /* Set user background colours (18 and 19) to (r,g,b). */
+    for (i = 18; i < 20; i++) {
+        defpal[i].rgbtRed = r;
+        defpal[i].rgbtGreen = g;
+        defpal[i].rgbtBlue = b;
+    }
+}
+
+/*
  * Set up the colour palette.
  */
 static void init_palette(void)
 {
     int i;
-    HDC hdc = GetDC(hwnd);
+    HDC hdc;
+
+    cfgtopalette();
+    if (cfg.system_colour)
+        systopalette();
+
+    hdc = GetDC(hwnd);
     if (hdc) {
 	if (cfg.try_palette && GetDeviceCaps(hdc, RASTERCAPS) & RC_PALETTE) {
 	    /*
@@ -1826,7 +1889,6 @@
 		    DeleteObject(pal);
 		logpal = NULL;
 		pal = NULL;
-		cfgtopalette();
 		init_palette();
 
 		/* Pass new config data to the terminal */
diff -ur putty-src.orig/WINHELP.H putty-src/WINHELP.H
--- putty-src.orig/WINHELP.H	2003-04-12 09:59:06.000000000 +1000
+++ putty-src/WINHELP.H	2003-08-30 15:11:11.000000000 +1000
@@ -92,6 +92,7 @@
 #define WINHELP_CTX_selection_linedraw "selection.linedraw"
 #define WINHELP_CTX_selection_rtf "selection.rtf"
 #define WINHELP_CTX_colours_bold "colours.bold"
+#define WINHELP_CTX_colours_system "colours.system"
 #define WINHELP_CTX_colours_logpal "colours.logpal"
 #define WINHELP_CTX_colours_config "colours.config"
 #define WINHELP_CTX_translation_codepage "translation.codepage"
