diff --git a/pd/src/dialog_gui.tcl b/pd/src/dialog_gui.tcl
index 6f61626db08ef8986e276dfedd32bf0256eafa3e..e55180b941035a42a018f9c2e36bb8a078f7b2f4 100644
--- a/pd/src/dialog_gui.tcl
+++ b/pd/src/dialog_gui.tcl
@@ -293,6 +293,9 @@ proc ::dialog_gui::set_gui_preset {args} {
             set ::pd_colors(magic_glass_text) white
             set ::pd_colors(magic_glass_flash) "#e87216"
         }
+        Custom {
+            # empty one if we have any custom settings
+        }
     }
 }
 
@@ -303,7 +306,7 @@ proc ::dialog_gui::create_gui_dialog {mytoplevel} {
     ttk::label $p.presetlabel -text "Color Preset"
 #    ttk::combobox $fr.presets -state readonly -values {Inverted L2Ork Foo}
 # todo: set presets in _one_ place
-    ::dialog_prefs::dropdown $p.presets ::gui_preset {Vanilla Inverted L2Ork L2Ork_Inverted Extended C64 Strongbad Subdued}
+    ::dialog_prefs::dropdown $p.presets ::gui_preset {Vanilla Inverted L2Ork L2Ork_Inverted Extended C64 Strongbad Subdued Custom}
     pack $fr -side top
     grid $p -column 0 -columnspan 3 -row 0 -sticky w -pady 21
     pack $p.presetlabel -side left -padx 7
diff --git a/pd/src/dialog_prefs.tcl b/pd/src/dialog_prefs.tcl
index e0e10dac4c4f6b00b00c4472438a67c2cac5ff73..57a04454b46e6904d0e42db9cb55cdf1caf49cc5 100644
--- a/pd/src/dialog_prefs.tcl
+++ b/pd/src/dialog_prefs.tcl
@@ -155,7 +155,7 @@ proc ::dialog_prefs::set_color {array key op} {
         }
         text_in_console { 
             if {[winfo exists .printout.frame.text]} {
-                .printout.frame.text configure -foureground $c
+                .printout.frame.text configure -foreground $c
             }
         }
         canvas_color {set commands [list "configure -bg $c"]
@@ -292,9 +292,14 @@ proc ::dialog_prefs::swatchmenu_nav {w dir} {
 }
 
 proc ::dialog_prefs::swatchbutton_colorchooser {name variable} {
-    set col [tk_chooseColor -parent $name]
+    set col [tk_chooseColor -parent $name -initialcolor [set $variable]]
     if {$col ne ""} {
         set $variable $col
+        # kludge since the dialog has static name for colors, we refer to it here
+        # with partially modular approach that should hopefully prove universal
+        set combobox [string trimright $name .link] 
+        ::dialog_prefs::dropdown_set $combobox.presets.presets Custom
+        ::pd_guiprefs::write_guipreset
     }
 }
 
diff --git a/pd/src/pd.tk b/pd/src/pd.tk
index ebbbe2bf01b244e835c8ea4853789595f9493685..3f187bb58e12f65f1d3886f3c55473be3c7b0e5e 100644
--- a/pd/src/pd.tk
+++ b/pd/src/pd.tk
@@ -294,10 +294,10 @@ if { $tcl_platform(platform) == "windows" }  {
 	set externalsdir "$::env(HOME)/pd-l2ork-externals"
 }   
 
-#proc bgerror {message} {
-#	pdtk_post "\ntcl error: $message"
+proc bgerror {message} {
+	pdtk_post "\ntcl error: $message"
 	#puts "\033\[0;1;33mtcl error: $::errorInfo\033\[0m"
-#}     
+}     
 
 # make sure the user folder for installing externals exists
 #catch {
diff --git a/pd/src/pd_guiprefs.tcl b/pd/src/pd_guiprefs.tcl
index 92b6feea9d49b0b835bc596ad75bfdf3ed73c5c6..96c7ed8f5ac49068debba049887be6344e12f212 100644
--- a/pd/src/pd_guiprefs.tcl
+++ b/pd/src/pd_guiprefs.tcl
@@ -37,8 +37,43 @@ proc ::pd_guiprefs::init {} {
     catch {set ::recentfiles_list [get_config $::recentfiles_domain \
         $::recentfiles_key $arr]}
     set ::gui_preset ""
-    catch {set ::gui_preset [get_config $::guipreset_domain \
-        $::guipreset_key $arr]}
+    catch {
+        set ::gui_preset [get_config $::guipreset_domain $::guipreset_key $arr]
+        if { [lindex $::gui_preset 0] == "Custom" } {
+            set ::pd_colors(atom_box) [lindex $::gui_preset 1]
+            set ::pd_colors(atom_box_border) [lindex $::gui_preset 2]
+            set ::pd_colors(canvas_color) [lindex $::gui_preset 3]
+            set ::pd_colors(canvas_cursor) [lindex $::gui_preset 4]
+            set ::pd_colors(text) [lindex $::gui_preset 5]
+            set ::pd_colors(text_in_console) [lindex $::gui_preset 6]
+            set ::pd_colors(box) [lindex $::gui_preset 7]
+            set ::pd_colors(box_border) [lindex $::gui_preset 8]
+            set ::pd_colors(msg) [lindex $::gui_preset 9]
+            set ::pd_colors(msg_border) [lindex $::gui_preset 10]
+            set ::pd_colors(iemgui_border) [lindex $::gui_preset 11]
+            set ::pd_colors(iemgui_nlet) [lindex $::gui_preset 12]
+            set ::pd_colors(control_cord) [lindex $::gui_preset 13]
+            set ::pd_colors(control_nlet) [lindex $::gui_preset 14]
+            set ::pd_colors(signal_cord) [lindex $::gui_preset 15]
+            set ::pd_colors(signal_nlet) [lindex $::gui_preset 16]
+            set ::pd_colors(xlet_hover) [lindex $::gui_preset 17]
+            set ::pd_colors(link) [lindex $::gui_preset 18]
+            set ::pd_colors(selection) [lindex $::gui_preset 19]
+            set ::pd_colors(selection_rectangle) [lindex $::gui_preset 20]
+            set ::pd_colors(highlighted_text) [lindex $::gui_preset 21]
+            set ::pd_colors(highlighted_text_bg) [lindex $::gui_preset 22]
+            set ::pd_colors(dash_outline) [lindex $::gui_preset 23]
+            set ::pd_colors(dash_fill) [lindex $::gui_preset 24]
+            set ::pd_colors(graph_border) [lindex $::gui_preset 25]
+            set ::pd_colors(graph) [lindex $::gui_preset 26]
+            set ::pd_colors(magic_glass_bg) [lindex $::gui_preset 27]
+            set ::pd_colors(magic_glass_bd) [lindex $::gui_preset 28]
+            set ::pd_colors(magic_glass_text) [lindex $::gui_preset 29]
+            set ::pd_colors(magic_glass_flash) [lindex $::gui_preset 30]
+            set ::gui_preset [lindex $::gui_preset 0]
+        }
+
+    }
 }
 
 proc ::pd_guiprefs::init_aqua {} {
@@ -76,7 +111,40 @@ proc ::pd_guiprefs::write_recentfiles {} {
 }
 
 proc ::pd_guiprefs::write_guipreset {} {
-    write_config $::gui_preset $::guipreset_domain $::guipreset_key true
+    set output $::gui_preset
+    if { $::gui_preset == "Custom" } {
+        lappend output $::pd_colors(atom_box)
+        lappend output $::pd_colors(atom_box_border)
+        lappend output $::pd_colors(canvas_color)
+        lappend output $::pd_colors(canvas_cursor)
+        lappend output $::pd_colors(text)
+        lappend output $::pd_colors(text_in_console)
+        lappend output $::pd_colors(box)
+        lappend output $::pd_colors(box_border)
+        lappend output $::pd_colors(msg)
+        lappend output $::pd_colors(msg_border)
+        lappend output $::pd_colors(iemgui_border)
+        lappend output $::pd_colors(iemgui_nlet)
+        lappend output $::pd_colors(control_cord)
+        lappend output $::pd_colors(control_nlet)
+        lappend output $::pd_colors(signal_cord)
+        lappend output $::pd_colors(signal_nlet)
+        lappend output $::pd_colors(xlet_hover)
+        lappend output $::pd_colors(link)
+        lappend output $::pd_colors(selection)
+        lappend output $::pd_colors(selection_rectangle)
+        lappend output $::pd_colors(highlighted_text)
+        lappend output $::pd_colors(highlighted_text_bg)
+        lappend output $::pd_colors(dash_outline)
+        lappend output $::pd_colors(dash_fill)
+        lappend output $::pd_colors(graph_border)
+        lappend output $::pd_colors(graph)
+        lappend output $::pd_colors(magic_glass_bg)
+        lappend output $::pd_colors(magic_glass_bd)
+        lappend output $::pd_colors(magic_glass_text)
+        lappend output $::pd_colors(magic_glass_flash)
+    }
+    write_config $output $::guipreset_domain $::guipreset_key true
 }
 
 # ------------------------------------------------------------------------------