diff --git a/pd/src/dialog_gui.tcl b/pd/src/dialog_gui.tcl
index 7164430b07fc62910cd8ab9981154b277af0e9a5..6f61626db08ef8986e276dfedd32bf0256eafa3e 100644
--- a/pd/src/dialog_gui.tcl
+++ b/pd/src/dialog_gui.tcl
@@ -1,5 +1,8 @@
 package provide dialog_gui 0.1
 package require dialog_prefs
+package require pd_guiprefs
+
+namespace import ::pd_guiprefs::write_guipreset
 
 namespace eval ::dialog_gui:: {
     namespace export create_gui_dialog
@@ -28,6 +31,7 @@ proc ::dialog_gui::setswatch {b swatch} {
 # variable is written to
 proc ::dialog_gui::set_gui_preset {args} {
     set choice $::gui_preset
+    ::pd_guiprefs::write_guipreset
     switch $choice {
         Vanilla {
             set ::pd_colors(atom_box)        white
@@ -35,6 +39,7 @@ proc ::dialog_gui::set_gui_preset {args} {
             set ::pd_colors(canvas_color)    white
             set ::pd_colors(canvas_cursor)   black
             set ::pd_colors(text)            black
+            set ::pd_colors(text_in_console) black
             set ::pd_colors(box)             white
             set ::pd_colors(box_border)      black
             set ::pd_colors(msg)             white
@@ -67,6 +72,7 @@ proc ::dialog_gui::set_gui_preset {args} {
             set ::pd_colors(canvas_color)    black
             set ::pd_colors(canvas_cursor)   white
             set ::pd_colors(text)            white
+            set ::pd_colors(text_in_console) white
             set ::pd_colors(box)             black
             set ::pd_colors(box_border)      white
             set ::pd_colors(msg)             black
@@ -99,6 +105,7 @@ proc ::dialog_gui::set_gui_preset {args} {
             set ::pd_colors(canvas_color)     white
             set ::pd_colors(canvas_cursor)    black
             set ::pd_colors(text)             black
+            set ::pd_colors(text_in_console)  grey40
             set ::pd_colors(box)              "#f6f8f8"
             set ::pd_colors(box_border)       "#ccc"
             set ::pd_colors(msg)              #f8f8f6
@@ -130,6 +137,7 @@ proc ::dialog_gui::set_gui_preset {args} {
             set ::pd_colors(canvas_color)     black
             set ::pd_colors(canvas_cursor) white
             set ::pd_colors(text)          white
+            set ::pd_colors(text_in_console) #999999
             set ::pd_colors(box)           #090707
             set ::pd_colors(box_border)    #3e3e3e
             set ::pd_colors(msg)       #090707
@@ -161,6 +169,7 @@ proc ::dialog_gui::set_gui_preset {args} {
             set ::pd_colors(canvas_color)     white
             set ::pd_colors(canvas_cursor) black
             set ::pd_colors(text)          black
+            set ::pd_colors(text_in_console) black
             set ::pd_colors(box)           #f6f8f8
             set ::pd_colors(box_border)    #c1c1c1
             set ::pd_colors(msg)       #f6f8f8
@@ -193,6 +202,7 @@ proc ::dialog_gui::set_gui_preset {args} {
             set ::pd_colors(canvas_color)     #3e32a2
             set ::pd_colors(canvas_cursor) white
             set ::pd_colors(text)          #a49aea
+            set ::pd_colors(text_in_console) #a49aea
             set ::pd_colors(box)           #3e32a2
             set ::pd_colors(box_border)    #7569d7
             set ::pd_colors(msg)       #3e32a2
@@ -225,6 +235,7 @@ proc ::dialog_gui::set_gui_preset {args} {
             set ::pd_colors(canvas_color)     black
             set ::pd_colors(canvas_cursor) white
             set ::pd_colors(text)          #4bd046
+            set ::pd_colors(text_in_console) #4bd046
             set ::pd_colors(box)           black
             set ::pd_colors(box_border)    #0b560b
             set ::pd_colors(msg)       black
@@ -256,6 +267,7 @@ proc ::dialog_gui::set_gui_preset {args} {
             set ::pd_colors(canvas_color)     #c0dcc0
             set ::pd_colors(canvas_cursor) black
             set ::pd_colors(text)          black
+            set ::pd_colors(text_in_console) black
             set ::pd_colors(box)           #c0dcc0
             set ::pd_colors(box_border)    #666666
             set ::pd_colors(msg)       #c0dcc0
diff --git a/pd/src/dialog_prefs.tcl b/pd/src/dialog_prefs.tcl
index f2ce4c0006d8ef7329024e5bb2ecc2de3b892677..e0e10dac4c4f6b00b00c4472438a67c2cac5ff73 100644
--- a/pd/src/dialog_prefs.tcl
+++ b/pd/src/dialog_prefs.tcl
@@ -152,9 +152,11 @@ proc ::dialog_prefs::set_color {array key op} {
                  .search.resultstext configure -foreground $c
                  .search.navtext configure -foreground $c
              }
-             if {[winfo exists .printout.frame.text]} {
-                 .printout.frame.text configure -foreground $c
-             }
+        }
+        text_in_console { 
+            if {[winfo exists .printout.frame.text]} {
+                .printout.frame.text configure -foureground $c
+            }
         }
         canvas_color {set commands [list "configure -bg $c"]
             if {[winfo exists .search.resultstext]} {
diff --git a/pd/src/pd.tk b/pd/src/pd.tk
index dcc2a26f6899895eeab342dcad86bc3b6a8d5eb4..ebbbe2bf01b244e835c8ea4853789595f9493685 100644
--- a/pd/src/pd.tk
+++ b/pd/src/pd.tk
@@ -574,59 +574,6 @@ set pd_array_listview_entry(0) 0
 set pd_array_listview_page(0) 0
 # end jsarlo
 
-# Prefences Dialog
-# dialog_prefs.tcl must come first because dialog_gui.tcl depends on it
-# This is an ugly hack-- it should just be loaded as tcl packages like
-# in 0.43...
-source [file join [file dirname [info script]] dialog_prefs.tcl]
-source [file join [file dirname [info script]] dialog_gui.tcl]
-source [file join [file dirname [info script]] dialog_midi.tcl]
-source [file join [file dirname [info script]] dialog_audio.tcl]
-
-# Add a trace for the color array. This way any gui-plugin can make
-# color changes simply by changing one of the elements of the pd_colors
-# array, and all the preference dialog stuff and open patches will
-# magically update
-trace add variable pd_colors write ::dialog_prefs::set_color
-
-# ... and a trace for the ::gui_preset variable.  There's probably
-# a way to do this inside the dropdown code, which would be better...
-trace add variable gui_preset write "::dialog_gui::set_gui_preset"
-
-# Now that we've got a trace for the colors, we can set a
-# color scheme (defined in dialog_gui.tcl)
-set gui_preset L2Ork
-
-# todo: find a home for these:
-set ::pd_colors(signal_cord_width) 3
-set ::pd_colors(control_cord_width) 1
-
-# color scheme
-# set canvas_fill "white"
-# set text_color "#000"
-# set select_color "#e87216"
-# set dash_outline "#f00"
-# set dash_fill "#f7f7f7"
-# set box_outline "#ccc"
-# set graph_outline "#777"
-# set atom_box_fill "#eee"
-# set msg_box_fill "#f8f8f6"
-# set obj_box_fill "#f6f8f8"
-# Doesn't look like signal_cord_highlight is used
-# set signal_cord_highlight "#58a"
-# set signal_cord "#808095"
-# set signal_nlet $signal_cord
-# Todo: make sure these work in k12 mode
-# set signal_cord_width 3
-# set msg_cord_highlight "#474"
-# set msg_cord "#565"
-# set msg_nlet "white"
-# set mixed_nlet "#88aaff"
-# set msg_cord_width 1
-
-#nlet highlighting stuff
-set select_nlet_color $pd_colors(selection)
-set highlight_width 5
 
 if {$pd_nt == 1} {
     global pd_guidir
@@ -714,6 +661,65 @@ namespace import ::pd_guiprefs::write_recentfiles
 set total_recentfiles 5
 ::pd_guiprefs::init
 
+# Prefences Dialog
+# dialog_prefs.tcl must come first because dialog_gui.tcl depends on it
+# This is an ugly hack-- it should just be loaded as tcl packages like
+# in 0.43...
+source [file join [file dirname [info script]] dialog_prefs.tcl]
+source [file join [file dirname [info script]] dialog_gui.tcl]
+source [file join [file dirname [info script]] dialog_midi.tcl]
+source [file join [file dirname [info script]] dialog_audio.tcl]
+
+# Add a trace for the color array. This way any gui-plugin can make
+# color changes simply by changing one of the elements of the pd_colors
+# array, and all the preference dialog stuff and open patches will
+# magically update
+trace add variable pd_colors write ::dialog_prefs::set_color
+
+# ... and a trace for the ::gui_preset variable.  There's probably
+# a way to do this inside the dropdown code, which would be better...
+trace add variable gui_preset write "::dialog_gui::set_gui_preset"
+
+# Now that we've got a trace for the colors, we can set a
+# color scheme if there isn't one in the preferences
+# (defined in dialog_gui.tcl)
+if {$::gui_preset eq ""} {
+    set ::gui_preset L2Ork
+} else {
+    ::dialog_gui::set_gui_preset
+}
+
+# todo: find a home for these:
+set ::pd_colors(signal_cord_width) 3
+set ::pd_colors(control_cord_width) 1
+
+# color scheme
+# set canvas_fill "white"
+# set text_color "#000"
+# set select_color "#e87216"
+# set dash_outline "#f00"
+# set dash_fill "#f7f7f7"
+# set box_outline "#ccc"
+# set graph_outline "#777"
+# set atom_box_fill "#eee"
+# set msg_box_fill "#f8f8f6"
+# set obj_box_fill "#f6f8f8"
+# Doesn't look like signal_cord_highlight is used
+# set signal_cord_highlight "#58a"
+# set signal_cord "#808095"
+# set signal_nlet $signal_cord
+# Todo: make sure these work in k12 mode
+# set signal_cord_width 3
+# set msg_cord_highlight "#474"
+# set msg_cord "#565"
+# set msg_nlet "white"
+# set mixed_nlet "#88aaff"
+# set msg_cord_width 1
+
+#nlet highlighting stuff
+set select_nlet_color $pd_colors(selection)
+set highlight_width 5
+
 # official GNU gettext msgcat shortcut
 proc _ {s} {return [::msgcat::mc $s]}
 
@@ -895,7 +901,8 @@ wm protocol .printout WM_DELETE_WINDOW { .controls.switches.console invoke }
 match_linux_wm [list frame .printout.frame]
 text .printout.frame.text -relief sunken -bd 1 -font console_font \
     -yscrollcommand ".printout.frame.scroll set"  -width 70 -height 24 \
-	-highlightthickness 0 -takefocus 0 -fg gray20 -state disabled
+	-highlightthickness 0 -takefocus 0 -fg $pd_colors(text_in_console) \
+    -state disabled -bg $pd_colors(canvas_color)
 #.printout.frame.text tag configure sel -background $linux_wm_hlcolor
 
 # .printout.frame.text insert end "\n\n\n\n\n\n\n\n\n\n"
diff --git a/pd/src/pd_guiprefs.tcl b/pd/src/pd_guiprefs.tcl
index 801330c2f011c9c4a1a268ac19ee0f2d8c7359f5..6337878351f9d259bb44eb3ac89661ce19e85815 100644
--- a/pd/src/pd_guiprefs.tcl
+++ b/pd/src/pd_guiprefs.tcl
@@ -15,7 +15,8 @@ namespace eval ::pd_guiprefs:: {
 # FIXME should these be globals ?
 set ::recentfiles_key ""
 set ::recentfiles_domain ""
-
+set ::guipreset_key ""
+set ::guipreset_domain ""
 
 #################################################################
 # global procedures
@@ -35,6 +36,9 @@ proc ::pd_guiprefs::init {} {
     set ::recentfiles_list ""
     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]}
 }
 
 proc ::pd_guiprefs::init_aqua {} {
@@ -42,18 +46,25 @@ proc ::pd_guiprefs::init_aqua {} {
     set ::recentfiles_domain org.puredata
     set ::recentfiles_key "NSRecentDocuments"
     set ::total_recentfiles 10
+    set ::guipreset_domain org.puredata
+    set ::guipreset_key "GuiPreset"
 }
 
 proc ::pd_guiprefs::init_win {} {
     # windows uses registry
     set ::recentfiles_domain "HKEY_CURRENT_USER\\Software\\Pd-L2Ork"
     set ::recentfiles_key "RecentDocs"
+    set ::guipreset_domain "HKEY_CURRENT_USER\\Software\\Pd-L2Ork"
+    set ::guipreset_key "GuiPreset"
+
 }
 
 proc ::pd_guiprefs::init_x11 {} {
     # linux uses ~/.config/pure-data dir
     set ::recentfiles_domain "~/.config/pd-l2ork"
     set ::recentfiles_key "recentfiles.conf"
+    set ::guipreset_domain "~/.config/pd-l2ork"
+    set ::guipreset_key "guipreset.conf"
     prepare_configdir
 }
 
@@ -64,6 +75,10 @@ proc ::pd_guiprefs::write_recentfiles {} {
     write_config $::recentfiles_list $::recentfiles_domain $::recentfiles_key true
 }
 
+proc ::pd_guiprefs::write_guipreset {} {
+    write_config $::gui_preset $::guipreset_domain $::guipreset_key true
+}
+
 # ------------------------------------------------------------------------------
 # this is called when opening a document (wheredoesthisshouldgo.tcl)
 #
@@ -79,6 +94,11 @@ proc ::pd_guiprefs::update_recentfiles {afile save} {
     ::pd_guiprefs::write_recentfiles
 }
 
+proc ::pd_guiprefs::update_guipreset {preset} {
+    set ::gui_preset $preset
+    ::pd_guiprefs::write_guipreset
+}
+
 #################################################################
 # main read/write procedures
 #################################################################