Index: pgadmin/ctl/ctlSQLBox.cpp
===================================================================
--- pgadmin/ctl/ctlSQLBox.cpp	(revision 8173)
+++ pgadmin/ctl/ctlSQLBox.cpp	(working copy)
@@ -80,37 +80,35 @@
     extern sysSettings *settings;
     wxFont fntSQLBox = settings->GetSQLFont();
 
+	wxColour bgColor = settings->GetSQLBoxColourBackground();
+	if (settings->GetSQLBoxUseSystemBackground())
+	{
+		bgColor = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
+	}
+
+	wxColour frColor = settings->GetSQLBoxColourForeground();
+	if (settings->GetSQLBoxUseSystemForeground())
+	{
+		frColor = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
+	}
+	StyleSetBackground(wxSTC_STYLE_DEFAULT, bgColor);
+	StyleSetForeground(wxSTC_STYLE_DEFAULT, frColor);
     StyleSetFont(wxSTC_STYLE_DEFAULT, fntSQLBox);
-    StyleSetFont(0, fntSQLBox);
-    StyleSetFont(1, fntSQLBox);
-    StyleSetFont(2, fntSQLBox);
-    StyleSetFont(3, fntSQLBox);
-    StyleSetFont(4, fntSQLBox);
-    StyleSetFont(5, fntSQLBox);
-    StyleSetFont(6, fntSQLBox);
-    StyleSetFont(7, fntSQLBox);
-    StyleSetFont(8, fntSQLBox);
-    StyleSetFont(9, fntSQLBox);
-    StyleSetFont(10, fntSQLBox);
-    StyleSetFont(11, fntSQLBox);
 
     SetMarginWidth(1, 0);
     SetTabWidth(settings->GetIndentSpaces());
     SetUseTabs(!settings->GetSpacesForTabs());
     
     // Setup the different highlight colurs
-    StyleSetForeground(0,  wxColour(0x80, 0x80, 0x80));
-    StyleSetForeground(1,  wxColour(0x00, 0x7f, 0x00));
-    StyleSetForeground(2,  wxColour(0x00, 0x7f, 0x00));
-    StyleSetForeground(3,  wxColour(0x7f, 0x7f, 0x7f));
-    StyleSetForeground(4,  wxColour(0x00, 0x7f, 0x7f));
-    StyleSetForeground(5,  wxColour(0x00, 0x00, 0x7f));
-    StyleSetForeground(6,  wxColour(0x7f, 0x00, 0x7f));
-    StyleSetForeground(7,  wxColour(0x7f, 0x00, 0x7f));
-    StyleSetForeground(8,  wxColour(0x00, 0x7f, 0x7f));
-    StyleSetForeground(9,  wxColour(0x7f, 0x7f, 0x7f));
-    StyleSetForeground(10, wxColour(0x00, 0x00, 0x00));
-    StyleSetForeground(11, wxColour(0x00, 0x00, 0x00));
+	for (int i = 0; i < 34; ++ i )
+	{
+		if (i > 0 && i < 12)
+			StyleSetForeground(i, settings->GetSQLBoxColour(i));
+		else
+			StyleSetForeground(i, frColor);
+		StyleSetBackground(i, bgColor);
+		StyleSetFont(i, fntSQLBox);
+	}
 
     // Brace maching styles
     StyleSetBackground(34, wxColour(0x99, 0xF9, 0xFF));
Index: pgadmin/frm/frmOptions.cpp
===================================================================
--- pgadmin/frm/frmOptions.cpp	(revision 8173)
+++ pgadmin/frm/frmOptions.cpp	(working copy)
@@ -73,6 +73,12 @@
 #define pickerActiveProcessColour   CTRL_COLOURPICKER("pickerActiveProcessColour")
 #define pickerSlowProcessColour     CTRL_COLOURPICKER("pickerSlowProcessColour")
 #define pickerBlockedProcessColour  CTRL_COLOURPICKER("pickerBlockedProcessColour")
+#define chkSQLUseSystemBackgroundColour  CTRL_CHECKBOX("chkSQLUseSystemBackgroundColour")
+#define chkSQLUseSystemForegroundColour  CTRL_CHECKBOX("chkSQLUseSystemForegroundColour")
+#define pickerSQLBackgroundColour     CTRL_COLOURPICKER("pickerSQLBackgroundColour")
+#define pickerSQLForegroundColour     CTRL_COLOURPICKER("pickerSQLForegroundColour")
+#define stSQLCustomBackgroundColour CTRL_STATIC("stSQLCustomBackgroundColour") 
+#define stSQLCustomForegroundColour CTRL_STATIC("stSQLCustomForegroundColour") 
 
 BEGIN_EVENT_TABLE(frmOptions, pgDialog)
     EVT_MENU(MNU_HELP,                                            frmOptions::OnHelp)
@@ -86,6 +92,8 @@
     EVT_BUTTON (XRCID("btnDefault"),                              frmOptions::OnDefault)
     EVT_CHECKBOX(XRCID("chkSuppressHints"),                       frmOptions::OnSuppressHints)
     EVT_CHECKBOX(XRCID("chkResetHints"),                          frmOptions::OnResetHints)
+	EVT_CHECKBOX(XRCID("chkSQLUseSystemBackgroundColour"),        frmOptions::OnChangeSQLUseCustomColour)
+	EVT_CHECKBOX(XRCID("chkSQLUseSystemForegroundColour"),        frmOptions::OnChangeSQLUseCustomColour)
     EVT_BUTTON (wxID_OK,                                          frmOptions::OnOK)
     EVT_BUTTON (wxID_HELP,                                        frmOptions::OnHelp)
     EVT_BUTTON (wxID_CANCEL,                                      frmOptions::OnCancel)
@@ -227,6 +235,18 @@
     pickerSlowProcessColour->SetColour(settings->GetSlowProcessColour());
     pickerBlockedProcessColour->SetColour(settings->GetBlockedProcessColour());
 
+	chkSQLUseSystemBackgroundColour->SetValue(settings->GetSQLBoxUseSystemBackground());
+	chkSQLUseSystemForegroundColour->SetValue(settings->GetSQLBoxUseSystemForeground());
+	UpdateColourControls();
+
+	for (int i = 0; i <= 11; ++i)
+	{
+		wxString pickerId = wxString::Format(wxT("pickerSQLColour%i"), i);
+		wxColourPickerCtrl* picker = wxStaticCast(FindWindow(pickerId), wxColourPickerCtrl);
+		if (picker != NULL)
+			picker->SetColour(settings->GetSQLBoxColour(i));
+	}
+
     cbLanguage->Append(_("Default"));
     int sel=0;
     wxLanguage langId=settings->GetCanonicalLanguage();
@@ -355,7 +375,40 @@
         chkSuppressHints->SetValue(false);
 }
 
+void frmOptions::UpdateColourControls()
+{
+	if (chkSQLUseSystemBackgroundColour->GetValue())
+	{
+		pickerSQLBackgroundColour->Enable(false);
+		pickerSQLBackgroundColour->SetColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
+		stSQLCustomBackgroundColour->Enable(false);
+	}
+	else
+	{
+		pickerSQLBackgroundColour->Enable(true);
+		pickerSQLBackgroundColour->SetColour(settings->GetSQLBoxColourBackground());
+		stSQLCustomBackgroundColour->Enable(true);
+	}
 
+	if (chkSQLUseSystemForegroundColour->GetValue())
+	{
+		pickerSQLForegroundColour->Enable(false);
+		pickerSQLForegroundColour->SetColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT));
+		stSQLCustomForegroundColour->Enable(false);
+	}
+	else
+	{
+		pickerSQLForegroundColour->Enable(true);
+		pickerSQLForegroundColour->SetColour(settings->GetSQLBoxColourForeground());
+		stSQLCustomForegroundColour->Enable(true);
+	}
+}
+
+void frmOptions::OnChangeSQLUseCustomColour(wxCommandEvent &ev)
+{
+    UpdateColourControls();
+}
+
 void frmOptions::OnOK(wxCommandEvent &ev)
 {
     // Check the PostgreSQL and EnterpriseDB paths
@@ -594,6 +647,51 @@
         changed = true;
     settings->SetBlockedProcessColour(sColour);
 
+	// Change SQL Syntax colours
+	if (settings->GetSQLBoxUseSystemBackground() != chkSQLUseSystemBackgroundColour->GetValue())
+	{
+		changed = true;
+		settings->SetSQLBoxUseSystemBackground(chkSQLUseSystemBackgroundColour->GetValue());
+	}
+	
+	if (settings->GetSQLBoxUseSystemForeground() != chkSQLUseSystemForegroundColour->GetValue())
+	{
+		changed = true;
+		settings->SetSQLBoxUseSystemForeground(chkSQLUseSystemForegroundColour->GetValue());
+	}
+	
+	if (!settings->GetSQLBoxUseSystemBackground())
+	{
+		colour = pickerSQLBackgroundColour->GetColour();
+		sColour = colour.GetAsString(wxC2S_HTML_SYNTAX);
+		if (sColour != settings->GetSQLBoxColourBackground())
+			changed = true;
+		settings->SetSQLBoxColourBackground(sColour);
+	}
+
+	if (!settings->GetSQLBoxUseSystemForeground())
+	{
+		colour = pickerSQLForegroundColour->GetColour();
+		sColour = colour.GetAsString(wxC2S_HTML_SYNTAX);
+		if (sColour != settings->GetSQLBoxColourForeground())
+			changed = true;
+		settings->SetSQLBoxColourForeground(sColour);
+	}
+
+	for (int i = 0; i <= 11; ++i)
+	{
+		wxString pickerId = wxString::Format(wxT("pickerSQLColour%i"), i);
+		wxColourPickerCtrl* picker = wxStaticCast(FindWindow(pickerId), wxColourPickerCtrl);
+		if (picker != NULL)
+		{
+			colour = picker->GetColour();
+			sColour = colour.GetAsString(wxC2S_HTML_SYNTAX);
+			if (sColour != settings->GetSQLBoxColour(i))
+				changed = true;
+			settings->SetSQLBoxColour(i, sColour);
+		}
+	}
+
     // Change the language last, as it will affect our tests for changes
     // in the display object types.
     int langNo=cbLanguage->GetCurrentSelection();
Index: pgadmin/include/frm/frmOptions.h
===================================================================
--- pgadmin/include/frm/frmOptions.h	(revision 8173)
+++ pgadmin/include/frm/frmOptions.h	(working copy)
@@ -48,7 +48,9 @@
     void OnSuppressHints(wxCommandEvent &ev);
     void OnResetHints(wxCommandEvent &ev);
 	void OnChangeCopyQuote(wxCommandEvent &ev);
+	void OnChangeSQLUseCustomColour(wxCommandEvent &ev);
     wxString CheckColour(wxString colour);
+	void UpdateColourControls();
     DECLARE_EVENT_TABLE()
 };
 
Index: pgadmin/include/utils/sysSettings.h
===================================================================
--- pgadmin/include/utils/sysSettings.h	(revision 8173)
+++ pgadmin/include/utils/sysSettings.h	(working copy)
@@ -133,6 +133,20 @@
     wxString GetBlockedProcessColour() const { wxString s; Read(wxT("BlockedProcessColour"), &s, wxT("#d96e5f")); return s; }
 	void SetBlockedProcessColour(const wxString &newval) { Write(wxT("BlockedProcessColour"), newval); }
 
+	// SQL Editor Colours options
+	bool GetSQLBoxUseSystemBackground() const { bool b; Read(wxT("ctlSQLBox/UseSystemBackground"), &b, true); return b; }
+	void SetSQLBoxUseSystemBackground(const bool newval) { Write(wxT("ctlSQLBox/UseSystemBackground"), newval); }
+	bool GetSQLBoxUseSystemForeground() const { bool b; Read(wxT("ctlSQLBox/UseSystemForeground"), &b, true); return b; }
+	void SetSQLBoxUseSystemForeground(const bool newval) { Write(wxT("ctlSQLBox/UseSystemForeground"), newval); }
+
+    wxString GetSQLBoxColourBackground() const { wxString s; Read(wxT("ctlSQLBox/ColourBackground"), &s, wxT("#ffffff")); return s; }
+	void SetSQLBoxColourBackground(const wxString &newval) { Write(wxT("ctlSQLBox/ColourBackground"), newval); }
+    wxString GetSQLBoxColourForeground() const { wxString s; Read(wxT("ctlSQLBox/ColourForeground"), &s, wxT("#000000")); return s; }
+	void SetSQLBoxColourForeground(const wxString &newval) { Write(wxT("ctlSQLBox/ColourForeground"), newval); }
+
+    wxString GetSQLBoxColour(int index) const { wxString s; Read(wxString::Format(wxT("ctlSQLBox/Colour%i"), index), &s, getDefaultElementColor(index)); return s; }
+	void SetSQLBoxColour(int index, const wxString &newval) { Write(wxString::Format(wxT("ctlSQLBox/Colour%i"), index), newval); }
+
     // Misc options
     long GetAutoRowCountThreshold() const { long l; Read(wxT("AutoRowCount"), &l, 2000L); return l; }
 	void SetAutoRowCountThreshold(const long newval) { Write(wxT("AutoRowCount"), newval); }
@@ -187,6 +201,17 @@
 
 private:
 
+	static const wxString& getDefaultElementColor(int index)
+	{
+		static const wxString colors[] =
+		{
+			wxT("#808080"), wxT("#007f00"), wxT("#007f00"), wxT("#7f7f7f"), 
+			wxT("#007f7f"), wxT("#00007f"), wxT("#7f007f"), wxT("#7f007f"), 
+			wxT("#007f7f"), wxT("#7f7f7f"), wxT("#000000"), wxT("#000000")
+		};
+		return colors[index];
+	}
+
     bool moveStringValue(const wxChar *oldKey, const wxChar *newKey, int index=-1);
     bool moveLongValue(const wxChar *oldKey, const wxChar *newKey, int index=-1);
 
Index: pgadmin/ui/frmOptions.xrc
===================================================================
--- pgadmin/ui/frmOptions.xrc	(revision 8173)
+++ pgadmin/ui/frmOptions.xrc	(working copy)
@@ -419,6 +419,124 @@
           </object>
         </object>
       </object>
+      <object class="notebookpage">
+        <label>SQL Syntax Highlight</label>
+        <object class="wxPanel" name="pnlSQLSyntaxHighlight">
+          <object class="wxCheckBox" name="chkSQLUseSystemBackgroundColour">
+            <label>Use system background color</label>
+            <pos>5,5d</pos>
+            <size>226,12d</size>
+            <style></style>
+          </object>
+          
+          <object class="wxCheckBox" name="chkSQLUseSystemForegroundColour">
+            <label>Use system foreground color</label>
+            <pos>5,20d</pos>
+            <size>226,12d</size>
+            <style></style>
+          </object>
+          
+          <object class="wxStaticText" name="stSQLCustomBackgroundColour">
+            <label>Custom background</label>
+            <pos>5,35d</pos>
+          </object>
+          <object class="wxColourPickerCtrl" name="pickerSQLBackgroundColour">
+            <pos>80,35d</pos>
+            <size>50,12d</size>
+          </object>
+
+          <object class="wxStaticText" name="stSQLCustomForegroundColour">
+            <label>Custom foreground</label>
+            <pos>5,50d</pos>
+          </object>
+          <object class="wxColourPickerCtrl" name="pickerSQLForegroundColour">
+            <pos>80,50d</pos>
+            <size>50,12d</size>
+          </object>
+
+          <object class="wxStaticText" name="stSQLColour1">
+            <label>Multiline comment</label>
+            <pos>5,75d</pos>
+          </object>
+          <object class="wxColourPickerCtrl" name="pickerSQLColour1">
+            <pos>80,75d</pos>
+            <size>50,12d</size>
+          </object>
+
+          <object class="wxStaticText" name="stSQLColour2">
+            <label>Single line comment</label>
+            <pos>5,90d</pos>
+          </object>
+          <object class="wxColourPickerCtrl" name="pickerSQLColour2">
+            <pos>80,90d</pos>
+            <size>50,12d</size>
+          </object>
+
+          <object class="wxStaticText" name="stSQLColour3">
+            <label>SQL doc</label>
+            <pos>5,105d</pos>
+          </object>
+          <object class="wxColourPickerCtrl" name="pickerSQLColour3">
+            <pos>80,105d</pos>
+            <size>50,12d</size>
+          </object>
+
+          <object class="wxStaticText" name="stSQLColour4">
+            <label>Number</label>
+            <pos>5,120d</pos>
+          </object>
+          <object class="wxColourPickerCtrl" name="pickerSQLColour4">
+            <pos>80,120d</pos>
+            <size>50,12d</size>
+          </object>
+
+          <object class="wxStaticText" name="stSQLColour5">
+            <label>Keyword</label>
+            <pos>5,135d</pos>
+          </object>
+          <object class="wxColourPickerCtrl" name="pickerSQLColour5">
+            <pos>80,135d</pos>
+            <size>50,12d</size>
+          </object>
+
+          <object class="wxStaticText" name="stSQLColour6">
+            <label>Double quoted string</label>
+            <pos>5,150d</pos>
+          </object>
+          <object class="wxColourPickerCtrl" name="pickerSQLColour6">
+            <pos>80,150d</pos>
+            <size>50,12d</size>
+          </object>
+
+          <object class="wxStaticText" name="stSQLColour7">
+            <label>Single quoted string</label>
+            <pos>125,75d</pos>
+          </object>
+          <object class="wxColourPickerCtrl" name="pickerSQLColour7">
+            <pos>195,75d</pos>
+            <size>50,12d</size>
+          </object>
+
+          <object class="wxStaticText" name="stSQLColour10">
+            <label>Operator</label>
+            <pos>125,90d</pos>
+          </object>
+          <object class="wxColourPickerCtrl" name="pickerSQLColour10">
+            <pos>195,90d</pos>
+            <size>50,12d</size>
+          </object>
+
+          <object class="wxStaticText" name="stSQLColour11">
+            <label>Identifier</label>
+            <pos>125,105d</pos>
+          </object>
+          <object class="wxColourPickerCtrl" name="pickerSQLColour11">
+            <pos>195,105d</pos>
+            <size>50,12d</size>
+          </object>
+          
+        </object>
+      </object>
     </object>
     <object class="wxButton" name="wxID_HELP">
       <label>&amp;Help</label>
