diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/00.under.construction.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/00.under.construction.pd
index 77096f2f822d5635fe22616f02e0bbd3ba86c6cf..bc6d09fc8c8b496fad8ab2d6178f670166916ad8 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/00.under.construction.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/00.under.construction.pd
@@ -1,6 +1,6 @@
 #N struct working-man-scalar float x float y;
-#N canvas 1 25 895 618 10;
-#N canvas 195 124 671 300 template 1;
+#N canvas 1 25 836 618 10;
+#N canvas 195 124 671 300 template 0;
 #X obj 121 -2492 struct working-man-scalar float x float y;
 #N canvas 725 143 450 300 init 0;
 #X obj 88 67 line;
@@ -221,49 +221,28 @@ L 258.192 372.204 L 254.304 371.484 z;
 #X restore 121 -2430 draw group;
 #X connect 1 0 2 0;
 #X restore 443 6 pd template;
-#X scalar working-man-scalar 218 -11 \;;
-#X text 13 0 Still under heavy development!;
-#X text 43 130 * stroke and fill methods;
-#X text 43 40 Stable methods of the new [draw] object are:;
-#X text 43 90 _Close_ to stable (won't change unless some big problem
-is revealed):;
-#X text 43 345 Wish I could figure out a better way to do them:;
-#X text 43 60 * stroke-opacity \, fill-opacity \, transform \, stroke-width
-\, stroke-miterlimit \, rx \, ry \, and stroke-dasharray methods.;
-#X text 43 460 Experimental:;
-#X text 43 365 * fill-rule \, stroke-linejoin \, stroke-linecap. The
+#X scalar working-man-scalar -169 309 \;;
+#X text 103 10 Still under heavy development!;
+#X text 429 450 Wish I could figure out a better way to do them:;
+#X text 429 470 * fill-rule \, stroke-linejoin \, stroke-linecap. The
 problem is that they take symbolic arguments in the svg standard \,
 but with data structures a symbolic argument represents a variable
 field. So I just use a float argument. I could use quotes around a
 symbol to specify a constant string \, but that would be obscure and
 at odds with the rest of Pd.;
-#X text 43 480 * mouse-dragging hotspots. This currently works like
-old-school scalars \, and it even works with transforms. It's original
-design is too limiting \, and with ds arrays the element hotspot may
-even conflict with the coordinate hotspot. A more expressive way is
-needed \, maybe something ported or inspired by Raphael.;
-#X text 480 393 * methods to better control mouse interaction. Something
-like the old "-x" flag but allowing separate control of edit-mode displacement
-and hotspot dragging. (Just because the drawing data contains a variable
-doesn't mean it should be draggable.);
-#X text 480 473 * [draw text] for scalable svg text.;
-#X text 43 250 Stable group handling:;
-#X text 43 155 * [draw [shape-name]] pattern \, [draw sprite] \, and
+#X text 70 413 * [draw text] for scalable svg text.;
+#X text 429 355 Stable group handling:;
+#X text 429 260 * [draw [shape-name]] pattern \, [draw sprite] \, and
 [draw image] names. I don't particularly like the two word naming scheme
 of [draw shape] \, but [drawpolygon] is already taken and has a different
 interface. Additionally \, Gem already has the bare word polygon \,
 so "draw" is as good a qualifier as I can think of.;
-#X text 43 270 * [group] subpatch seems to work fine. It's basically
+#X text 429 375 * [group] subpatch seems to work fine. It's basically
 just a subpatch with an inlet to control svg attributes of the drawing
 commands it conatins. It might also be handy to search abstractions
 for drawing instructions \, but that isn't supported at the moment.
 ;
-#X text 43 570 * scalar bbox caching. Should give more control to the
-user as with mouse-dragging.;
-#X text 480 313 New:;
-#X text 480 333 * messages to set path data \, polygon points \, x
-\, y \, cx \, cy \, r \, height \, width \, etc.;
-#X text 480 373 Needed:;
+#X text 70 393 Needed:;
 #N canvas 290 275 450 300 META 0;
 #X text 16 6 KEYWORDS tutorial data_structure draw;
 #X text 16 26 LICENSE SIBSD;
@@ -271,7 +250,41 @@ user as with mouse-dragging.;
 commands;
 #X text 16 76 AUTHOR Jonathan Wilkes;
 #X text 16 96 HELP_PATCH_AUTHORS Jonathan Wilkes;
-#X restore 771 580 pd META;
-#X text 480 502 * way to reset an svg attribute. Probably by just sending
-a message with no arguments (not sure if tkpath supports this yet)
-;
+#X restore 731 580 pd META;
+#X text 491 31 Unstable methods;
+#X text 491 31 ________________;
+#X text 25 31 Stable methods;
+#X text 25 31 ______________;
+#X text 25 51 cx - circle center x coordinate \; cy
+- circle center y coordinate \; d - path
+data \; fill-opacity - opacity for inner
+color of shape or path \; height - rect height
+\; opacity - shape or group opacity \; points
+- polygon/polylin coordinate data \; r - circle
+radius \; rx - ellipse horizontal radius or
+rect corner horiz smoothing \; ry - ellipse
+vertical radius or rect corner vert smoothing \; stroke-dasharray
+- dash pattern for stroke \; stroke-opacity
+- opacity for stroke \; stroke-dashoffset -
+offset for the beginning of the dash pattern \; stroke-width
+- width of the stroke \; transform - affine transformation
+message for shape or group \; width - width of
+rect \; x - rect x coordinate (user) \; x1
+- line x coordinate for beginning of line \; x2
+- line x coordinate for end of line \; y - rect
+y coordinate (user) \; y1 - line y coordinate
+for beginning of line \; y2 - line y coordinate
+for end of line \; , f 63;
+#X text 454 51 bbox - don't calculate bounding box in Pd \; drag
+- set event for mouse dragging \; fill-rule - rule for
+overlapping shape coords \; mousedown - set event for
+depressing the mouse button \; mousemove - set event for
+mouse motion \; mouseover - set event for mouse moving
+into a shape \; mouseout - set event for mouse moving
+out of a shape \; mouseup - set event for mouse button
+release \; pointer-events - which parts of a shape trigger
+events \; stroke-linecap - style for end of stroke \; stroke-linejoin
+- style stroke corner \; stroke-miterlimit - limit on sharp
+angle extent \; vis - visibility of shape or path \; fill
+- inner color for shape or path \; stroke - shape or path stroke
+color \; ;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/02.draw.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/02.draw.pd
index 56c37e6cbe12c3390a8abd1551939a6bb7951ad7..72eca42ab44058f3e1293baac1852a23a3dde73b 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/02.draw.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/02.draw.pd
@@ -1,45 +1,38 @@
 #N struct drawtut-one float x float y;
-#N canvas 1 25 495 603 10;
+#N canvas 2 25 495 603 10;
 #X text 0 1 New Drawing Commands: draw;
 #X text 0 1 __________________________;
 #X obj 53 47 struct drawtut-one float x float y;
-#X text 53 67 The first argument "drawtut-one" is a name we will associated
-with our shape.;
-#X text 53 98 The other arguments define data to associate with this
-data structure. The fields "x" and "y" are names for data fields \,
-and the word "float" that precedes each one tells Pd that each one
-should hold a floating point number.;
-#X text 53 195 Now let's define a shape to associate with this [struct]:
+#X text 53 185 Now let's define a shape to associate with this [struct]:
 ;
-#X text 53 241 This object starts with the word "draw" followed by
+#X text 53 231 This object starts with the word "draw" followed by
 the name of an svg shape-- "rect" here. Any arguments after that are
 coordinates and other data telling Pd how to draw the shape. For convenience
 \, coordinates are relative to the x/y fields.;
-#X text 53 369 So how do we draw something? We just type the name we
+#X text 53 359 So how do we draw something? We just type the name we
 gave to the [struct] into an object box. This will create an object
 \, referred to in Pd as a "scalar". It will have data for "x" and "y"
 fields and will use the info in our [draw] object to draw itself on
 the canvas.;
-#X text 53 439 Type our [struct] name "drawtut-one" in the box below:
+#X text 53 429 Type our [struct] name "drawtut-one" in the box below:
 ;
-#X text 53 152 The field names "x" and "y" are special in Pd. Their
+#X text 53 142 The field names "x" and "y" are special in Pd. Their
 values will be associated with the base x/y coordinates of what we
 draw to represent an object created from the [struct] above.;
-#X text 53 23 Let's draw something! First \, we need a [struct]:;
-#X text 53 509 That's it! To sum up: once you have a [struct] and some
+#X text 53 499 That's it! To sum up: once you have a [struct] and some
 [draw] objects \, you can create a scalar like the one above on any
 canvas in the running Pd instance. For convenience we created everything
 in the main patch \, but since there's only one [struct] per canvas
 you typically will want to keep your [struct] and any [draw] objects
 in their own subpatch.;
-#X obj 56 463;
-#X obj 53 219 draw rect 40 40 0 0;
-#X text 53 298 Any [draw] object on the same canvas as our [struct]
+#X obj 56 453;
+#X obj 53 209 draw rect 40 40 0 0;
+#X text 53 288 Any [draw] object on the same canvas as our [struct]
 will be used to draw a shape to represent the data structure we've
 defined here. To keep things organized Pd expects there to be only
 one [struct] object per canvas. That way it's simple to know which
 [draw] commands go with which data structure.;
-#X text 178 218 <- rectangle \, 40x40 pixels at offset (0 \, 0);
+#X text 178 208 <- rectangle \, 40x40 pixels at offset (0 \, 0);
 #N canvas 291 300 450 300 META 0;
 #X text 16 26 LICENSE SIBSD;
 #X text 16 66 AUTHOR Jonathan Wilkes;
@@ -47,3 +40,10 @@ one [struct] object per canvas. That way it's simple to know which
 #X text 16 6 KEYWORDS tutorial data_structure draw gui;
 #X text 16 46 DESCRIPTION introducing the [draw] command;
 #X restore 435 575 pd META;
+#X text 53 23 Let's draw something! First we need a [struct]:;
+#X text 53 67 The first argument "drawtut-one" is a name for our data.
+;
+#X text 53 88 The other arguments define our data fields. The fields
+"x" and "y" are names for data fields \, and the word "float" that
+precedes each one tells Pd that each one should hold a floating point
+number.;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/03.rect.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/03.rect.pd
index ef09c07bb10a5e666307c9973f54e361807db7f2..d7708c527dac7d8ec5c5c778af8f42086fc54389 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/03.rect.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/03.rect.pd
@@ -4,33 +4,33 @@
 #X text 0 1 New Drawing Commands: rect;
 #X obj 53 87 struct drawtut-rect float x float y;
 #X text 53 63 Let's start with another [struct]:;
-#X scalar drawtut-rect 56 369 \;;
+#X scalar drawtut-rect 56 374 \;;
 #X text 53 115 As stated in the previous tutorial \, all [draw] objects
 have the same interface. The first word (called the selector) is always
 "draw". The first argument is the name of the svg shape to draw. Finally
 \, any arguments after that are coordinate and other data that define
 how to draw the shape.;
-#X text 53 475 You can select the scalar like any other Pd object \,
+#X text 53 480 You can select the scalar like any other Pd object \,
 move it \, cut/paste it \, and undo/redo any actions you take.;
 #X text 53 23 So what can we draw with [draw]? All shapes from the
 svg specification. These are "rect" \, "polygon" \, "polyline" \, "ellipse"
 \, "circle" \, "line" \, and "path".;
-#X text 53 505 Also note that you can define a [struct] without any
+#X text 53 510 Also note that you can define a [struct] without any
 "x" or "y" fields. This is because data structures may be used for
 purposes other than visualizing data. But if you do draw objects with
 x/y fields \, it will draw the scalar at 0/0 and you won't be able
 to move it with the mouse in "edit mode".;
-#X text 53 336 Below is a scalar defined by the [struct] above. As
+#X text 53 341 Below is a scalar defined by the [struct] above. As
 you can tell it's just two rectangles. Pretty boring stuff so far...
 ;
-#X obj 53 239 draw rect 100 40 0 0;
-#X obj 193 239 draw rect 40 100 120 0;
-#X text 53 265 You can use positive and negative numbers for the first
+#X obj 53 244 draw rect 100 40 0 0;
+#X obj 193 244 draw rect 40 100 120 0;
+#X text 53 270 You can use positive and negative numbers for the first
 two arguments \, but only positive numbers for the width and height.
 Coordinates and dimensions can be integers or floats. (One exception
 are "flag" values in path arcs but these will just be converted automatically
 to integers.);
-#X text 53 179 In the case of "rect" \, there are only four coordinates.
+#X text 53 184 In the case of "rect" \, there are only four coordinates.
 The first two are the width and height of the rectangle. The third
 and fourth arguments are the x/y coordinates of the top-left corner
 of the rectangle. That's it!;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/04.attributes.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/04.attributes.pd
index b6c45f34078c27634411de8d5f3f4a803eec7078..361db49d98c910170e3d5551b61e00298d44225d 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/04.attributes.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/04.attributes.pd
@@ -1,5 +1,5 @@
 #N struct drawtut-attr float x float y;
-#N canvas 1 25 517 671 10;
+#N canvas 2 25 517 671 10;
 #X text 0 1 New Drawing Commands: attributes;
 #X text 0 1 ________________________________;
 #X text 53 23 Our shapes are pretty boring so far. Black lines around
@@ -30,11 +30,9 @@ by hexadecimal values like "#ccddcc" or "#68ef68". (You can also use
 the 3-digit shorthands if you wish.);
 #X text 53 526 * rgb color values using 3 float arguments. Each float
 should be in the range 0-255.;
-#X text 53 556 * rgba \, with 4 float arguments. Same as above with
-the fourth argument specifying opacity.;
 #X floatatom 244 253 5 0 0 0 - - -, f 5;
 #X msg 244 274 fill 0 \$1 0;
-#X text 54 597 You can set attributes like "fill" automatically by
+#X text 54 596 You can set attributes like "fill" automatically by
 using a [loadbang] message. Notice that attributes will be the same
 for all scalars created from this [struct]. Later you will see how
 to set attributes to be different for each scalar.;
@@ -47,7 +45,9 @@ to set attributes to be different for each scalar.;
 #X text 16 6 KEYWORDS tutorial data_structure draw gui;
 #X text 16 46 DESCRIPTION basic attributes for the [draw] command;
 #X restore 450 639 pd META;
-#X connect 8 0 19 0;
-#X connect 15 0 16 0;
-#X connect 16 0 19 0;
-#X connect 18 0 19 0;
+#X text 53 560 Note: there are also hsl \, hcl \, and lab colors but
+the interface isn't stable yet.;
+#X connect 8 0 18 0;
+#X connect 14 0 15 0;
+#X connect 15 0 18 0;
+#X connect 17 0 18 0;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/05.more.attributes.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/05.more.attributes.pd
index 8fa4be4d3869d5c7663cb67d06b870d04e88413b..2467691eb18b514e5c78e8ee7f1d66bff766ac2b 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/05.more.attributes.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/05.more.attributes.pd
@@ -1,5 +1,5 @@
 #N struct drawtut-attr-cont float x float y;
-#N canvas 1 25 638 671 10;
+#N canvas 2 25 638 671 10;
 #X msg 93 112 fill red;
 #X text 0 1 New Drawing Commands: attributes (continued);
 #X text 0 1 ____________________________________________;
@@ -21,30 +21,30 @@ the appearance of a shape:;
 #X text 164 291 y value for rounded rectangle corner;
 #X text 214 317 stroke color. 1 symbol \, 3 floats (rgb) \, or 4 floats
 (rgba);
-#X text 274 344 list of numbers to specify dash lengths;
-#X msg 140 371 stroke-linecap 0;
-#X text 254 371 for ends of open subpaths. 0 = butt \, 1 = round \,
+#X text 278 374 list of numbers to specify dash lengths;
+#X msg 144 401 stroke-linecap 0;
+#X text 258 401 for ends of open subpaths. 0 = butt \, 1 = round \,
 2 = square;
-#X text 264 399 shape of path corners. 0 = miter \, 1 = round \, 2
+#X text 268 429 shape of path corners. 0 = miter \, 1 = round \, 2
 = bevel;
-#X text 286 425 limit miter length;
-#X text 286 452 opacity for the stroke. float in range 0-1;
-#X text 286 478 width of the stroke.;
-#X msg 146 398 stroke-linejoin 0;
-#X msg 151 425 stroke-miterlimit 0;
-#X msg 155 452 stroke-opacity 0.4;
+#X text 290 455 limit miter length;
+#X text 290 482 opacity for the stroke. float in range 0-1;
+#X text 261 343 width of the stroke.;
+#X msg 150 428 stroke-linejoin 0;
+#X msg 155 455 stroke-miterlimit 0;
+#X msg 159 482 stroke-opacity 0.4;
 #X text 286 556 affine transformation on the object.;
-#X msg 158 479 stroke-width 10;
+#X msg 133 344 stroke-width 10;
 #X floatatom 161 511 5 0 0 0 - - -, f 5;
 #X msg 161 556 transform skewx \$1;
 #X text 275 600 Read more about svg attributes here:;
 #X obj 275 621 pddp/pddplink http://www.w3.org/TR/SVG11/painting.html
 ;
 #X msg 107 196 fill-rule 0;
-#X msg 134 344 stroke-dasharray 5 10;
+#X msg 138 374 stroke-dasharray 5 10;
 #X msg 127 317 stroke purple;
 #X obj 127 141 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 0 1;
+-1 -1 6600 1;
 #X text 107 141 0;
 #X text 268 141 1;
 #X text 25 348 (scalar);
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/06.saving.attributes.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/06.saving.attributes.pd
index a1b075cdf4ebdf1faae18c543b390f4b4d6f6f5c..22fee73cafe9e3fd8d16435357e16888bfdc7c8b 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/06.saving.attributes.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/06.saving.attributes.pd
@@ -15,10 +15,6 @@ boxes with commas separating each attribute:;
 saved as the "x" and "y" fields for each scalar. Each scalar has its
 own values for "x" and "y"-- that's we can put the two scalars above
 at separate locations in the patch.;
-#X text 52 434 We can define more data fields than just "x" and "y".
-Later we will use new fields to associate a scalar's data with the
-svg attributes \, which will let use change the visual appearance of
-each scalar.;
 #X text 228 280 <- Create another scalar in the empty object box by
 typing the struct name "drawtut-attr-saving" into it.;
 #X obj 53 153 draw rect 50 50 0 0;
@@ -30,5 +26,9 @@ typing the struct name "drawtut-attr-saving" into it.;
 #X text 16 46 DESCRIPTION specifying display attributes with the [draw]
 command;
 #X restore 573 520 pd META;
+#X text 52 434 We can define more data fields than just "x" and "y".
+Later we will use new fields to associate a scalar's data with the
+svg attributes. That allows us to change the visual appearance of each
+scalar.;
 #X connect 3 0 6 0;
-#X connect 6 0 11 0;
+#X connect 6 0 10 0;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/07.line.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/07.line.pd
index e58fd2fe6afc661b3c78ed1ac61781dac61b9041..3567532afec9f2d7ca5a1c710ce69f97e39b3162 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/07.line.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/07.line.pd
@@ -29,7 +29,6 @@ past the end point.;
 #X text 105 138 butt;
 #X text 173 138 rounded;
 #X text 258 138 square;
-#X msg 53 107 stroke blue \, stroke-width 15;
 #N canvas 290 275 450 300 META 0;
 #X text 16 26 LICENSE SIBSD;
 #X text 16 66 AUTHOR Jonathan Wilkes;
@@ -37,9 +36,10 @@ past the end point.;
 #X text 16 6 KEYWORDS tutorial data_structure draw gui;
 #X text 16 46 DESCRIPTION drawing a line with the [draw] command;
 #X restore 567 601 pd META;
-#X connect 0 0 21 0;
+#X msg 53 107 stroke blue \, stroke-width 25;
+#X connect 0 0 22 0;
 #X connect 10 0 5 0;
 #X connect 15 0 10 0;
 #X connect 16 0 10 0;
 #X connect 17 0 10 0;
-#X connect 21 0 5 0;
+#X connect 22 0 5 0;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/08.circle.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/08.circle.pd
index 7ffc2387190c3334f9b3a3420c5043afe12c50aa..486a55b8141db2becd0be621ba19e9b267bf7d4f 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/08.circle.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/08.circle.pd
@@ -9,7 +9,7 @@ have any effect.;
 #X text 53 23 Circles are another simple shape.;
 #X obj 53 57 struct drawtut-circle float x float y;
 #X scalar drawtut-circle 157 283 \;;
-#X text 248 270 <- a circle;
+#X text 268 273 <- a circle;
 #X msg 53 117 fill yellow;
 #X msg 228 117 stroke-width \$1;
 #X floatatom 228 93 5 0 0 0 - - -, f 5;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/09.ellipse.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/09.ellipse.pd
index d795335e37a2f9225bc588781958f90060f69774..02f061a7da74e30700005c08d37e01fbc3a0e67b 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/09.ellipse.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/09.ellipse.pd
@@ -1,5 +1,5 @@
 #N struct drawtut-ellipse float x float y;
-#N canvas 3 25 509 498 10;
+#N canvas 1 25 509 498 10;
 #X msg 141 117 stroke blue;
 #X msg 54 117 fill yellow;
 #X msg 228 117 stroke-width \$1;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/12.path.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/12.path.pd
index ec0c25e87afbe142e952d4a19642f4b1e4e240b3..c00ee334dee3a53e14df058c91594452a909926f 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/12.path.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/12.path.pd
@@ -1,5 +1,5 @@
 #N struct drawtut-path float x float y;
-#N canvas 1 25 850 556 10;
+#N canvas 2 25 850 556 10;
 #X text 0 1 New Drawing Commands: path;
 #X text 1 1 __________________________;
 #X text 53 23 Paths are complex drawings.;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/13.transform.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/13.transform.pd
index 051135921d5903ac88a4151c64fbdd720c82c246..390b2870868c434799b049c8cd727022a113d264 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/13.transform.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/13.transform.pd
@@ -1,5 +1,5 @@
 #N struct drawtut-transform float x float y;
-#N canvas 22 32 867 625 10;
+#N canvas 1 25 867 625 10;
 #X text 0 1 New Drawing Commands: transform;
 #X text 1 1 _______________________________;
 #X text 53 23 All [draw] objects understand the "transform" message.
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/14.group.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/14.group.pd
index 4b6ebd4c00ad8cd82a3ea0a7d1f8c14ef84167ea..cc21eb7a19619541f0f68c1ab6ef7dda2c8dce55 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/14.group.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/14.group.pd
@@ -1,5 +1,5 @@
 #N struct drawtut-group float x float y;
-#N canvas 2 51 648 468 10;
+#N canvas 2 25 648 468 10;
 #X scalar drawtut-group 54 159 \;;
 #X text 1 1 ___________________________;
 #X text 0 1 New Drawing Commands: group;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/15.events.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/15.events.pd
index 2637b9d57275afa6bacc762f83916656230025bc..1e1303ae19885d548d60e3449700df136d267463 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/15.events.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/15.events.pd
@@ -37,6 +37,7 @@ gets sent to the outlet of the corresponding [draw] object.;
 #X text 16 46 DESCRIPTION mouse events for the [draw] command;
 #X text 16 6 KEYWORDS tutorial data_structure draw gui;
 #X restore 506 578 pd META;
+#X text 53 525 drag - convenience function for click-dragging;
 #X connect 3 0 10 0;
 #X connect 7 0 24 0;
 #X connect 8 0 22 0;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/16.animation.pd b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/16.animation.pd
index 8fe242bf684386f463b1f4b08c71eadbe32b0807..cb35b9f01ef37fd3943eb39beb1cdb0788fe59c8 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/16.animation.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-tutorials/16.animation.pd
@@ -1,5 +1,5 @@
 #N struct drawtut-animation float x float y;
-#N canvas 14 48 537 571 10;
+#N canvas 1 25 537 571 10;
 #X scalar drawtut-animation 47 309 \;;
 #X obj 47 131 struct drawtut-animation float x float y;
 #X text 0 1 New Drawing Commands: animation;