diff --git a/pd/nw/todo.txt b/pd/nw/todo.txt
index c53597694b5c046833ffb611c39368ad4569b89f..ace3b1b8d6b32eacd05382579b05ae69d64947a8 100644
--- a/pd/nw/todo.txt
+++ b/pd/nw/todo.txt
@@ -18,130 +18,130 @@ Node-webkit stuff:
 4) (probably) present working directory
 5) command line argv
 
-Everything else:
-* packaging as app, setting correct appname, etc
-* get -unique to work (relied on tcl [send] command)
-* check if patch windows with screenposition (0,0) get stuck underneath Ubuntu/OSX menu.  If so,
-  Node-webkit has a "screen" interface to retrieve the "workable" area of the screen
-* choosing the same directory multiple times (see dialog API page)
-* figure out why there is a "pd_opendir" global var
-* pass k12 mode arg
-* implement recent files (using Pd's prefs loading mechanism instead of reimplementing gui prefs)
-* implement verifyquit
-* save and saveas dialogs aren't defaulting to the present working directory
-* create a loop (maybe every second) to check bbox of patchsvg, and set the height/width to that
-  bbox for the svg.  That should trigger the correct scrollbar behavior.
-* change canvas string to a single int (and investigate any side-effects)
-* destroy (or, more likely, hide) selection rectangle when not needed
-* change gui_text_select to gui_gobj_select
-* make it possible to have the inner cells of hradio change color with the selection, as the border currently does.  Tk just uses the non-hierarchical tags and appends the word "BASE".  (Maybe use an inner <g> to do this.)
-* make mycnv use its own selection logic
-* abstract away appendChild
-* font-size should be set as css property for a class of text, rather than per each gobj in svg
-* remove the "fudge_factor" kludge in g_rtext.c, and handle fonts in a sane manner.  In doing so
-  we must decide whether or not we want to be able to fetch the bounding box of objects from
-  within a Pd patch.  (Currently [canvasinfo] and [objectinfo] are the only objects that can
-  do this, though there might also be)
-* replace things like gui_select_color with css
-* find a better approach to escaping characters for the gui than escape_double_quotes kludge (and handle any other problematic chars)
-* look into using <def> and <use> for scalars.
-* use Atom's selectors for standard OSX behavior (cut, paste, about, etc.)
-* in draw_vis, make circle and ellipse radii attr floats instead of ints
-* should stroke-dasharray values be floats?
-* once garrays are drawn inside a <g> we won't have to individually erase each child of a scalar
-* clean up svg_sendupdate -- put a single gui_vmess at the end
-* svg_sendupdate -- make sure there aren't arbitrary %d's that should actually be %g's
-* svg_sendupdate -- need a gui interface for stuff like stroke-dasharray (and garrays)
-* ibid., for path data, points
-* make pdgui function names more consistent
-* in draw_vis, move tags to front of function call so they don't have to be an ugly array
-* in draw_vis, remove all the coords logic and let svg_togui do that work.  In svg_new,
-  leverage the "d", "points", etc. methods to do the same.
-* remove the draw_vis warning/code about needing 2 points to draw
-* might want to clean up dead windows inside patchwin object (on close)
-* make gui_menu_close filename less hacky (currently includes patch args in the middle) 
-* figure out why -nrt flag causes Pd to bail on the GUI (it wasn't doing this
-  on the amd_64 virtual Jessie machine)
-* make dialogs with [yes/no] instead of [cancel/ok]
-* make a gui_mess interface for the edge cases that don't require args (similar to sys_gui)
-* make sure we're breaking down the socket properly from the GUI side on quit
-* nwworkingdir isn't working with the saveas dialog in pdcanvas.html
-* nwworkingdir only works on the second file open
-* implement the stuff at the end of saveas_callback (recentfiles et al);
-* make an "export" menu command for max patch saving.  That way we can accept a single extension
-  for saving (.pd), and the native save dialog will warn us on potential file overwrites (even when
-  the user neglects to type an extension).
-* draw graph inside gobj group
-* merge gui_text_select and gui_text_deselect
-* in function gui_cord_inspector_update, use parameter "moved" to flash text
-* cord_inspector_flash doesn't seem to be deterministic-- if you move among several cords very fast
-  it will try to flash a non-existent svg item.  (Probably want to either make a permanent item in
-  the pdcanvas.html for it, or hard-code a separate div.)
-* for data structures, change "" to 'none'
-* fix "Reselect" <ctrl-Enter> Keybinding.  It doesn't work atm because nw.js
-  cannot bind to Enter.
-* looks like nwworkingdir isn't working for open/save dialogs atm
-* keyup doesn't register autokeypresses, but keyname and key do
-* text_set doesn't work when a numbox is first created (but works otherwise)
-* clean up nw_create_window (doesn't need so many parameters)
-* make a nice window API in C.  Window "foo-bar" type maps to "foo-bar.html"
-* implement the crappy iemgui color dialog presets
-* find a simple translation API
-* use underscores for iemgui dialog element names
-* revisit the x_thick logic in g_slider.c.  It thickens the indicator when it's
-  in the middle of the slider, but it's pretty obscure in the current impl.
-* for as many items as possible, hide them instead of removing from DOM (stuff
-  like xlets, etc.)
-* fix iemgui_font so it doesn't use tcl list syntax
-* change all the gui color char[MAXPDSTRING] junk to simple int, and do the conversion to
-  hex html string in the gui
-* implement iemgui labels and its ascetic font chooser
-* think about scaling the svg instead of the page, and making the selection
-  rectangle a div above that
-* change 'visible-width' to 'cnv-width'
-* in pdproperties.html, use an object to store all the prop/value pairs that
-  got sent.  That way we don't have to use all those awful tricks to
-  conditionally fill the slots
-* fix font shits (can't use 'hanging' base-line dominant because it doesn't
-  scale correctly)
-* iemgui font configuration -- de-tcl-ize the {fontface fontsize} tcl list,
-  then make it work
-* do msg box click animation in css
-* tgl 'X' doesn't show up
-* gui_graph_fill_border: use css class selectors instead of configuration
-* standardize javascript function names
-* in gui_plot_vis, we have to check for gobj existence.  For some reason, at
-  very fast drawing rates we end up with two svg elements if we don't check
-  for this.  Not sure why
-* add garray_update for changing the path coords without having to recreate
-  the entire scalar edifice
-* add "p" type to gui_vmess for pointers
-* when duplicating a large number of iemguis, the label or border will eventually try to append to null.
-  It looks like it's receiving the correct gui calls from Pd, in the correct order.  But for some reason the
-  calls from Pd are getting split in the middle of a string.  Not sure why, probably something to do
-  with the hacky parser I wrote to split on newlines.  Anyway, when we can just split on semis this problem
-  should hopefully go away.  Make sure to test for it once that happens.
-
-  Some gui_posts that show the problem-- the string is split between lines 2 and 3:
+Everything else: (A [*] means we've fixed it)
+[ ] packaging as app, setting correct appname, etc
+[ ] get -unique to work (relied on tcl [send] command)
+[ ] check if patch windows with screenposition (0,0) get stuck underneath Ubuntu/OSX menu.  If so,
+[ ] Node-webkit has a "screen" interface to retrieve the "workable" area of the screen
+[*] choosing the same directory multiple times doesn't work (see dialog API page)
+[ ] "Save As" on an overwrite doesn't seem to clear the dirty flag
+[ ] figure out why there is a "pd_opendir" global var
+[ ] pass k12 mode arg
+[ ] implement recent files (using Pd's prefs loading mechanism instead of reimplementing gui prefs)
+[ ] implement verifyquit
+[ ] save and saveas dialogs aren't defaulting to the present working directory
+[ ] implement automatic scrollbars and svg canvas resizing
+[ ] add 'x' type to gui_vmess for saving canvas names, etc., as hex values
+[x] destroy (or, more likely, hide) selection rectangle when not needed
+[ ] change gui_text_select to gui_gobj_select
+[ ] make it possible to have the inner cells of hradio change color with the selection,
+    as the border currently does.  Tk just uses the non-hierarchical tags and appends the word
+    "BASE".  (Maybe use an inner <g> to do this.)
+[x] make mycnv use its own selection logic
+[ ] abstract away appendChild
+[ ] font-size should be set as css property for a class of text, rather than per each gobj in svg
+[ ] remove the "fudge_factor" kludge in g_rtext.c, and handle fonts in a sane manner.  In doing so
+    we must decide whether or not we want to be able to fetch the bounding box of objects from
+    within a Pd patch.  (Currently [canvasinfo] and [objectinfo] are the only objects that can
+    do this, though there might also be)
+[x] replace things like gui_select_color with css
+[ ] find a better approach to escaping characters for the gui than escape_double_quotes kludge
+    (and handle any other problematic chars)
+[ ] look into using <def> and <use> for scalars.
+[ ] in draw_vis, make circle and ellipse radii attr floats instead of ints
+[ ] should stroke-dasharray values be floats?
+[ ] once garrays are drawn inside a <g> we won't have to individually erase each child of a scalar
+[ ] clean up svg_sendupdate -- put a single gui_vmess at the end
+[ ] svg_sendupdate -- make sure there aren't arbitrary %d's that should actually be %g's
+[ ] svg_sendupdate -- need a gui interface for stuff like stroke-dasharray (and garrays)
+[ ] ibid., for path data, points
+[ ] make pdgui function names more consistent
+[ ] in draw_vis, move tags to front of function call so they don't have to be in an array
+[ ] in draw_vis, remove all the coords logic and let svg_togui do that work.  In svg_new,
+    leverage the "d", "points", etc. methods to do the same.
+[ ] remove the draw_vis warning/code about needing 2 points to draw
+[ ] need to clean up dead windows inside patchwin object (on close)
+[ ] make gui_menu_close filename less hacky (currently includes patch args in the middle) 
+[ ] figure out why -nrt flag causes Pd to bail on the GUI (it wasn't doing this
+    on the amd_64 virtual Jessie machine, nor on my 32-bit machine).
+[ ] make dialogs with [yes/no] instead of [cancel/ok]
+[ ] make a gui_mess interface for the edge cases that don't require args (similar to sys_gui)
+[ ] make sure we're breaking down the socket properly from the GUI side on quit
+[ ] looks like nwworkingdir isn't working for open/save dialogs atm
+[ ] nwworkingdir only works on the second file open
+[ ] implement the stuff at the end of saveas_callback (recentfiles et al)
+[ ] make an "export" menu command for max patch saving.  That way we can accept a single extension
+    for saving (.pd), and the native save dialog will warn us on potential file overwrites (even when
+    the user neglects to type an extension).
+[ ] draw graph inside gobj group
+[ ] merge gui_text_select and gui_text_deselect
+[ ] in function gui_cord_inspector_update, use parameter "moved" to flash text
+[ ] cord_inspector_flash doesn't seem to be deterministic-- if you move among several cords very fast
+    it will try to flash a non-existent svg item.  (Probably want to either make a permanent item in
+    the pdcanvas.html for it, or hard-code a separate div.)
+[ ] for data structure demos, change "" to 'none'
+[ ] fix "Reselect" <ctrl-Enter> Keybinding.  It doesn't work atm because nw.js
+    cannot bind to Enter.
+[ ] keyup doesn't register autokeypresses, but keyname and key do
+[ ] text_set doesn't work when a numbox is first created (but works otherwise)
+[ ] clean up nw_create_window (doesn't need so many parameters)
+[x] make a nice window API in C.  Window "foo-bar" type maps to "foo-bar.html"
+[ ] implement the crappy iemgui color dialog presets
+[x] find a simple translation API
+[ ] use underscores for iemgui dialog element names
+[ ] revisit the x_thick logic in g_slider.c.  It thickens the indicator when it's
+    in the middle of the slider, but it's pretty obscure in the current impl.
+[ ] for as many items as possible, hide them instead of removing from DOM
+[ ] fix iemgui_font so it doesn't use tcl list syntax
+[ ] change all the gui color char[MAXPDSTRING] junk to simple int, and do the conversion to
+    hex html string in the gui
+[ ] implement iemgui labels and its ascetic font chooser
+[ ] think about scaling the svg instead of the page, and making the selection
+    rectangle a div above that
+[ ] change 'visible-width' to 'cnv-width'
+[ ] in dialog_iemgui.html, use an object to store all the prop/value pairs that
+    got sent.  That way we don't have to use all those awful tricks to
+    conditionally fill the slots
+[ ] look into the font metrics, see if we can use floating point fonts to simplify things
+[ ] iemgui font configuration -- de-tcl-ize the {fontface fontsize} tcl list,
+    then make it work
+[x] do msg box click animation in css
+[x] tgl 'X' doesn't show up
+[ ] gui_graph_fill_border: use css class selectors instead of configuration
+[ ] standardize javascript function names
+[x] in gui_plot_vis, we have to check for gobj existence.  For some reason, at
+    very fast drawing rates we end up with two svg elements if we don't check
+    for this.  This would be simplified if gop stuff was just children of parent <group>
+[x] add garray_update for changing the path coords without having to recreate
+    the entire scalar edifice
+[x] when duplicating a large number of iemguis, the label or border will eventually try to append
+    to null.  It looks like it's receiving the correct gui calls from Pd, in the correct order.
+    But for some reason the calls from Pd are getting split in the middle of a string.
+    Not sure why, probably something to do with the hacky parser I wrote to split on newlines.
+    Anyway, when we can just split on semis this problem should hopefully go away.  Make sure to
+    test for it once that happens.
+    Some gui_posts that show the problem-- the string is split between lines 2 and 3:
     nextCmd is gui_create_toggle ".x98be5e8","x99c0740","#000000",1,0,181,67,192,78,181,78,192,67,179,65;
     nextCmd is gui_iemgui_label_new ".x98be5e
     8","x99c0740",17,7,"#000000","","{{DejaVu Sans Mono} -10 normal}";
     nextCmd is gui_canvas_drawio ".x98be5e8","x99c0740",".x98be5e8.t99c0de0o0",179,79,186,80,179,65,"o",0,0,1;
     the tag for this XLET is .x98be5e8.t99c0de0o0
 
-remove gui_text_select_color (css takes care of this)
-add a canvas message to set a transform on the patchsvg.  Good for:
-  * obscure display needs (zooming past the browser limits)
-  * rotating for a display
-  * transforming or scaling all scalars on a patch at once
-change 'array_element_fill' to 'element_fill', array_outline to 'array_element_outline' 
-either nw_create_window should take fewer parameters or it should take an
+    Note: this was a simple problem of partial msgs not being prepended to the next buffer.
+
+[ ] remove gui_text_select_color (css takes care of this)
+[ ] add a canvas message to set a transform on the patchsvg.  Good for:
+    * obscure display needs (zooming past the browser limits)
+    * rotating for a display
+    * transforming or scaling all scalars on a patch at once
+    However: This will require more math on the mousemotion.  So this should probably wait until
+    moving a lot of the editing code out of C and into the GUI
+[ ] change 'array_element_fill' to 'element_fill', array_outline to 'array_element_outline' 
+[ ] either nw_create_window should take fewer parameters or it should take an
     object with name: value pairs
-getting the sense that glist_isselected should _always_ have
+[ ] getting the sense that glist_isselected should _always_ have
     glist_getcanvas(x) as its first parameter
-get rid of the old tcl specific sys_get_audio_apis
+[x] get rid of the old tcl specific sys_get_audio_apis
 
 Crashers
 --------
-
-copy/paste from menu gives ECONN