diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/curver.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/curver.pd
index 3814dfbff7b22d28bb5c54187b85b722ce3948fb..04c4a99a199053d9a5d1536a62b1c3edf74829d9 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-demos/curver.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/curver.pd
@@ -1,36 +1,34 @@
 #N struct rcurver float x float y float x1 float y1 float ax float
 ay float bx float by float zx float zy float r float g float b;
-#N canvas 0 19 813 591 10;
-#X obj 92 363 cnv 15 461 213 empty empty empty 20 12 0 14 -33289 -66577
+#N canvas -9 19 813 626 10;
+#X obj 92 401 cnv 15 461 213 empty empty empty 20 12 0 14 -33289 -66577
 0;
-#X scalar rcurver 150 401 30 123 -31 135 21 -12 -28 -5 255 40 100 \;
+#X scalar rcurver 150 439 42 137 -18 141 29 -3 -29 -2 255 40 100 \;
 ;
 #X obj 95 69 loadbang;
 #X obj 95 114 draw path M x1 y1 C ax ay bx by zx zy;
 #X obj 95 177 draw path M x1 y1 L ax ay M bx by L zx zy;
 #X msg 95 156 stroke #ccc \, stroke-dasharray 1 1;
 #X obj 95 135 loadbang;
-#X scalar rcurver 250 404 30 123 -31 135 20 -13 -28 -5 80 2 150 \;
+#X scalar rcurver 250 442 23 125 -31 135 23 -9 -28 -5 80 2 150 \;;
+#X scalar rcurver 365 445 18 131 -31 135 18 -10 -39 -5 150 6 50 \;
 ;
-#X scalar rcurver 365 407 42 128 -31 135 18 -10 -39 -5 150 6 50 \;
-;
-#X scalar rcurver 480 403 34 136 -32 143 17 -9 -37 -5 70 255 60 \;
+#X scalar rcurver 480 441 34 136 -32 143 17 -9 -37 -5 70 255 60 \;
 ;
 #X obj 95 17 struct rcurver float x float y float x1 float y1 float
 ax float ay float bx float by float zx float zy float r float g float
 b;
-#X obj 95 198 draw circle x1 y1 5;
-#X obj 95 219 draw circle ax ay 5;
-#X obj 95 240 draw circle bx by 5;
-#X obj 95 261 draw circle zx zy 5;
-#X obj 16 152 loadbang;
-#X msg 16 173 fill white;
+#X obj 95 228 draw circle x1 y1 5;
+#X obj 95 269 draw circle ax ay 5;
+#X obj 95 310 draw circle bx by 5;
+#X obj 95 351 draw circle zx zy 5;
+#X obj 16 182 loadbang;
 #X text 424 112 Raphael Curver;
 #X text 424 112 ______________;
 #X text 424 322 So \, though it makes this patch easier to write \,
 a more powerful method of defining interactive behavior is needed.
 ;
-#X text 575 392 <- Click and drag the white circles;
+#X text 575 430 <- Click and drag the white circles;
 #X text 424 132 This is an interesting demo for two reasons. First
 \, aside from the loadbangs it is completely declarative. We just define
 some variables and put them in the drawing instructions. Second \,
@@ -46,12 +44,23 @@ At present you can't define any other behavior-- only turn off mouse
 interaction altogether.;
 #X msg 95 90 stroke-width 4 \, stroke-linecap 1 \, stroke r g b \,
 fill "";
-#X connect 2 0 23 0;
+#X msg 16 203 fill white \, mousedown 1 \, drag 1;
+#X obj 95 249 drag-event rcurver x1 y1;
+#X text 465 24 Note: this can be improved with a set method for [set]:the
+[drag-event] abstraction can be removed;
+#X obj 95 289 drag-event rcurver ax ay;
+#X obj 95 329 drag-event rcurver bx by;
+#X obj 95 373 drag-event rcurver zx zy;
+#X connect 2 0 22 0;
 #X connect 5 0 4 0;
 #X connect 6 0 5 0;
-#X connect 15 0 16 0;
-#X connect 16 0 11 0;
-#X connect 16 0 12 0;
-#X connect 16 0 13 0;
-#X connect 16 0 14 0;
-#X connect 23 0 3 0;
+#X connect 11 0 24 0;
+#X connect 12 0 26 0;
+#X connect 13 0 27 0;
+#X connect 14 0 28 0;
+#X connect 15 0 23 0;
+#X connect 22 0 3 0;
+#X connect 23 0 11 0;
+#X connect 23 0 12 0;
+#X connect 23 0 13 0;
+#X connect 23 0 14 0;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/drag-event-y.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/drag-event-y.pd
new file mode 100644
index 0000000000000000000000000000000000000000..40794c0d8e1f89c83899fcec2e0253e4d082af80
--- /dev/null
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/drag-event-y.pd
@@ -0,0 +1,18 @@
+#N canvas 433 184 450 300 10;
+#X obj 81 25 inlet;
+#X obj 81 46 route drag;
+#X obj 228 89 unpack p;
+#X obj 81 67 trigger anything anything;
+#X obj 81 157 +;
+#X obj 134 110 get \$1 \$2;
+#X obj 81 196 set \$1 \$2;
+#X msg 81 109 \$3;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 1;
+#X connect 3 0 7 0;
+#X connect 3 1 2 0;
+#X connect 4 0 6 0;
+#X connect 5 0 4 1;
+#X connect 7 0 4 0;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/drag-event.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/drag-event.pd
new file mode 100644
index 0000000000000000000000000000000000000000..0ebc7dae1c0e224a163e337a484f26cbcd0ce4df
--- /dev/null
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/drag-event.pd
@@ -0,0 +1,24 @@
+#N canvas 433 184 450 300 10;
+#X obj 81 25 inlet;
+#X obj 81 46 route drag;
+#X obj 81 196 set \$1 \$2 \$3;
+#X obj 134 110 get \$1 \$2 \$3;
+#X obj 228 89 unpack p;
+#X obj 81 67 trigger anything anything;
+#X msg 81 89 \$2 \$3;
+#X obj 81 110 unpack;
+#X obj 81 157 +;
+#X obj 125 156 +;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 3 0 8 1;
+#X connect 3 1 9 1;
+#X connect 4 0 3 0;
+#X connect 4 0 2 2;
+#X connect 5 0 6 0;
+#X connect 5 1 4 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 7 1 9 0;
+#X connect 8 0 2 0;
+#X connect 9 0 2 1;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/easing.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/easing.pd
index b57346fb7a85ff84aa60ede9f4a7fa4705f99896..f246fa080f8baef261438d532ade136e511a6936 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-demos/easing.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/easing.pd
@@ -31,14 +31,14 @@ opacity float r float g float b float sw;
 #X connect 13 0 10 0;
 #X restore 33 19 pd targets;
 #X scalar targets 33 9 \;;
-#N canvas 197 100 645 479 movers 0;
+#N canvas 710 109 645 479 movers 0;
 #X obj 119 250 loadbang;
 #X obj 119 312 draw circle x1 y1 20;
 #X obj 119 52 route click;
 #X obj 119 73 trigger anything anything;
 #X obj 298 151 print junk;
 #X obj 238 117 unpack p f;
-#N canvas 262 48 644 608 animate 0;
+#N canvas 465 39 644 608 animate 0;
 #X obj 40 13 inlet;
 #X obj 168 60 inlet;
 #X obj 40 124 line;
@@ -194,15 +194,13 @@ opacity float r float g float b float sw;
 #X connect 7 0 8 0;
 #X connect 8 0 1 0;
 #X restore 116 235 pd backout;
-#N canvas 801 333 450 366 elastic 0;
+#N canvas 297 236 450 366 elastic 0;
 #X obj 112 20 inlet;
 #X obj 111 320 outlet;
 #X obj 112 59 sel 0 1;
 #X obj 112 89 f 0;
 #X obj 139 89 f 1;
-#X msg 313 121 pi;
-#X obj 313 142 pdinfo;
-#X obj 313 163 * 2;
+#X obj 313 142 * 2;
 #X obj 212 121 * -10;
 #X obj 180 122 f 2;
 #X obj 182 162 pow;
@@ -213,28 +211,28 @@ opacity float r float g float b float sw;
 #X obj 184 259 *;
 #X obj 184 280 + 1;
 #X obj 180 88 t b a a b;
+#X obj 313 121 float 3.14159;
 #X connect 0 0 2 0;
 #X connect 2 0 3 0;
 #X connect 2 1 4 0;
-#X connect 2 2 17 0;
+#X connect 2 2 15 0;
 #X connect 3 0 1 0;
 #X connect 4 0 1 0;
-#X connect 5 0 6 0;
-#X connect 6 0 7 0;
-#X connect 7 0 12 1;
-#X connect 8 0 10 1;
+#X connect 5 0 10 1;
+#X connect 6 0 8 1;
+#X connect 7 0 8 0;
+#X connect 8 0 13 0;
 #X connect 9 0 10 0;
-#X connect 10 0 15 0;
+#X connect 10 0 11 0;
 #X connect 11 0 12 0;
-#X connect 12 0 13 0;
+#X connect 12 0 13 1;
 #X connect 13 0 14 0;
-#X connect 14 0 15 1;
-#X connect 15 0 16 0;
-#X connect 16 0 1 0;
-#X connect 17 0 9 0;
-#X connect 17 1 8 0;
-#X connect 17 2 11 0;
-#X connect 17 3 5 0;
+#X connect 14 0 1 0;
+#X connect 15 0 7 0;
+#X connect 15 1 6 0;
+#X connect 15 2 9 0;
+#X connect 15 3 16 0;
+#X connect 16 0 5 0;
 #X restore 132 212 pd elastic;
 #N canvas 700 60 570 618 bounce 0;
 #X obj 60 10 inlet;
@@ -415,16 +413,16 @@ opacity \, stroke-width sw;
 #X connect 8 0 2 0;
 #X connect 9 0 1 0;
 #X restore 113 19 pd movers;
-#X scalar movers 133 109 0 0 0 0 255 0 0 1 \;;
-#X scalar movers 133 159 0 0 1 0 100 100 0 1 \;;
-#X scalar movers 133 209 0 0 2 0 0 100 100 1 \;;
-#X scalar movers 133 310 0 -1 4 0 50 210 0 1 \;;
-#X scalar movers 133 359 0 0 5 0 210 0 80 1 \;;
+#X scalar movers 133 109 200 0 0 1 255 0 0 3 \;;
+#X scalar movers 133 159 200 0 1 1 100 100 0 3 \;;
+#X scalar movers 133 209 200 0 2 1 0 100 100 3 \;;
+#X scalar movers 133 310 200 -1 4 1 50 210 0 3 \;;
+#X scalar movers 133 359 200 0 5 1 210 0 80 3 \;;
 #X scalar movers 133 409 0 0 6 0 42 84 126 1 \;;
-#X scalar movers 133 459 0 0 7 0 80 80 0 1 \;;
+#X scalar movers 133 459 200 0 7 1 80 80 0 3 \;;
 #X text 181 22 CRASHER!... select all scalars \, deselct the backdrop
 \, then move what's left;
-#X scalar movers 133 259 0.000244141 0 3 1.2207e-06 100 0 0 1 \;;
+#X scalar movers 133 259 200 0 3 0.999999 100 0 0 3 \;;
 #X text 450 99 linear;
 #X text 450 149 easein;
 #X text 450 199 easeout;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/hexshifter.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/hexshifter.pd
new file mode 100644
index 0000000000000000000000000000000000000000..51a82d26ead5b155dacebc37af3327d171268175
--- /dev/null
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/hexshifter.pd
@@ -0,0 +1,200 @@
+#N struct http://prescottfoland.co/hexshifter/ float x float y;
+#N canvas 122 24 947 656 10;
+#X scalar http://prescottfoland.co/hexshifter/ 57 53 \;;
+#X obj 708 611 draw rect -20 -20 863 615;
+#X obj 274 3 struct http://prescottfoland.co/hexshifter/ float x float
+y;
+#X msg 68 67 1;
+#X obj 68 254 +;
+#X msg 108 67 -1;
+#X obj 68 275 min 15;
+#X obj 68 296 max 0;
+#X msg 198 67 1;
+#X obj 198 224 +;
+#X msg 238 67 -1;
+#X obj 198 245 min 15;
+#X obj 198 266 max 0;
+#X msg 328 67 1;
+#X obj 328 194 +;
+#X msg 368 67 -1;
+#X obj 328 215 min 15;
+#X obj 328 236 max 0;
+#X msg 458 67 1;
+#X obj 458 164 +;
+#X msg 498 67 -1;
+#X obj 458 185 min 15;
+#X obj 458 206 max 0;
+#X msg 588 67 1;
+#X obj 588 129 +;
+#X msg 628 67 -1;
+#X obj 588 150 min 15;
+#X obj 588 171 max 0;
+#X msg 718 67 1;
+#X obj 718 104 +;
+#X msg 758 67 -1;
+#X obj 718 125 min 15;
+#X obj 718 146 max 0;
+#X symbolatom 778 585 10 0 0 0 - - -, f 10;
+#X obj 68 438 << 20;
+#X obj 778 541 +;
+#X obj 198 408 << 16;
+#X obj 328 378 << 12;
+#X obj 778 468 t b a;
+#X obj 778 489 +;
+#X obj 778 510 t b a;
+#X obj 458 348 << 8;
+#X obj 778 445 +;
+#X obj 778 397 +;
+#X obj 588 313 << 4;
+#X obj 778 352 +;
+#X obj 778 420 t b a;
+#X obj 778 374 t b a;
+#X obj 778 328 t b a;
+#X msg 112 418 fill \$1 0 0;
+#X obj 112 358 + 1;
+#X obj 112 378 << 4;
+#X obj 112 398 - 1;
+#X msg 245 388 fill \$1 0 0;
+#X obj 245 328 + 1;
+#X obj 245 348 << 4;
+#X obj 245 368 - 1;
+#X obj 375 298 + 1;
+#X obj 375 318 << 4;
+#X obj 375 338 - 1;
+#X msg 375 358 fill 0 \$1 0;
+#X obj 495 268 + 1;
+#X obj 495 288 << 4;
+#X obj 495 308 - 1;
+#X msg 495 328 fill 0 \$1 0;
+#X obj 626 233 + 1;
+#X obj 626 253 << 4;
+#X obj 626 273 - 1;
+#X obj 718 208 + 1;
+#X obj 718 228 << 4;
+#X obj 718 248 - 1;
+#X msg 718 268 fill 0 0 \$1;
+#X msg 626 293 fill 0 0 \$1;
+#X obj 68 327 t a a;
+#X obj 198 297 t a a;
+#X obj 328 267 t a a;
+#X obj 458 237 t a a;
+#X obj 588 202 t a a;
+#X obj 718 177 trigger anything anything;
+#X obj 68 98 t a;
+#X obj 198 98 t a;
+#X obj 328 98 t a;
+#X obj 458 98 t a;
+#X obj 588 98 t a;
+#X obj 112 438 draw rect 0 0 133 420;
+#X obj 245 408 draw rect 133 0 133 380;
+#X obj 375 378 draw rect 266 0 129 350;
+#X obj 495 348 draw rect 395 0 129 320;
+#X obj 626 313 draw rect 524 0 133 290;
+#X obj 718 288 draw rect 655 0 168 258;
+#X msg 708 585 fill #\$1;
+#X obj 330 564 loadbang;
+#X msg 330 585 stroke-width 2 \, stroke gray \, stroke-dasharray \,
+rx 30 \, ry 30;
+#X obj 778 563 makefilename %.6x;
+#X connect 3 0 79 0;
+#X connect 4 0 6 0;
+#X connect 5 0 79 0;
+#X connect 6 0 7 0;
+#X connect 7 0 73 0;
+#X connect 8 0 80 0;
+#X connect 9 0 11 0;
+#X connect 10 0 80 0;
+#X connect 11 0 12 0;
+#X connect 12 0 74 0;
+#X connect 13 0 81 0;
+#X connect 14 0 16 0;
+#X connect 15 0 81 0;
+#X connect 16 0 17 0;
+#X connect 17 0 75 0;
+#X connect 18 0 82 0;
+#X connect 19 0 21 0;
+#X connect 20 0 82 0;
+#X connect 21 0 22 0;
+#X connect 22 0 76 0;
+#X connect 23 0 83 0;
+#X connect 24 0 26 0;
+#X connect 25 0 83 0;
+#X connect 26 0 27 0;
+#X connect 27 0 77 0;
+#X connect 28 0 29 0;
+#X connect 29 0 31 0;
+#X connect 30 0 29 0;
+#X connect 31 0 32 0;
+#X connect 32 0 78 0;
+#X connect 34 0 35 0;
+#X connect 35 0 93 0;
+#X connect 36 0 39 0;
+#X connect 37 0 42 0;
+#X connect 38 0 39 0;
+#X connect 38 1 39 1;
+#X connect 39 0 40 0;
+#X connect 40 0 35 0;
+#X connect 40 1 35 1;
+#X connect 41 0 43 0;
+#X connect 42 0 38 0;
+#X connect 43 0 46 0;
+#X connect 44 0 45 0;
+#X connect 45 0 47 0;
+#X connect 46 0 42 0;
+#X connect 46 1 42 1;
+#X connect 47 0 43 0;
+#X connect 47 1 43 1;
+#X connect 48 0 45 0;
+#X connect 48 1 45 1;
+#X connect 49 0 84 0;
+#X connect 50 0 51 0;
+#X connect 51 0 52 0;
+#X connect 52 0 49 0;
+#X connect 53 0 85 0;
+#X connect 54 0 55 0;
+#X connect 55 0 56 0;
+#X connect 56 0 53 0;
+#X connect 57 0 58 0;
+#X connect 58 0 59 0;
+#X connect 59 0 60 0;
+#X connect 60 0 86 0;
+#X connect 61 0 62 0;
+#X connect 62 0 63 0;
+#X connect 63 0 64 0;
+#X connect 64 0 87 0;
+#X connect 65 0 66 0;
+#X connect 66 0 67 0;
+#X connect 67 0 72 0;
+#X connect 68 0 69 0;
+#X connect 69 0 70 0;
+#X connect 70 0 71 0;
+#X connect 71 0 89 0;
+#X connect 72 0 88 0;
+#X connect 73 0 34 0;
+#X connect 73 0 4 1;
+#X connect 73 1 50 0;
+#X connect 74 0 9 1;
+#X connect 74 0 36 0;
+#X connect 74 1 54 0;
+#X connect 75 0 14 1;
+#X connect 75 0 37 0;
+#X connect 75 1 57 0;
+#X connect 76 0 19 1;
+#X connect 76 0 41 0;
+#X connect 76 1 61 0;
+#X connect 77 0 24 1;
+#X connect 77 0 44 0;
+#X connect 77 1 65 0;
+#X connect 78 0 29 1;
+#X connect 78 0 68 0;
+#X connect 78 1 48 0;
+#X connect 79 0 4 0;
+#X connect 80 0 9 0;
+#X connect 81 0 14 0;
+#X connect 82 0 19 0;
+#X connect 83 0 24 0;
+#X connect 90 0 1 0;
+#X connect 91 0 92 0;
+#X connect 92 0 1 0;
+#X connect 93 0 90 0;
+#X connect 93 0 33 0;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/megaman.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/megaman.pd
index a3400257d8110710378c4c6a198171b4db2fff7f..08c5c4cd977ab8002deb6988d31af49706865971 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-demos/megaman.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/megaman.pd
@@ -1,79 +1,68 @@
 #N struct mm float x float y float a;
-#N canvas 0 19 844 666 10;
-#X obj -11 119 cnv 15 317 17 empty empty empty 20 12 0 14 -204786 -66577
+#N canvas -9 19 766 666 10;
+#X obj -1 334 cnv 15 317 17 empty empty empty 20 12 0 14 -204786 -66577
 0;
-#X scalar mm 301 434.322 3 \;;
-#X obj 333 -2 key;
-#X obj 510 348 pointer;
-#X obj 333 21 select 115;
-#X obj 412 153 f;
-#X obj 454 153 + 1;
-#X obj 454 178 % 4;
-#X obj 454 212 sel 0 1 2 3;
-#X msg 454 243 6;
-#X msg 484 243 7;
-#X msg 514 243 8;
-#X msg 544 243 7;
-#X obj 258 0 keyup;
-#X obj 258 21 select 115;
-#X msg 258 42 0;
-#X obj 453 300 t a b;
-#X obj 333 62 metro 90;
-#X obj 481 417 + 5;
-#X obj 525 270 t a b;
-#X obj 569 269 t a b;
-#X msg 561 378 4;
-#X msg 617 373 6;
-#X text -10 119 Click the "s" key to make megaman run to the right!
-;
-#X msg 510 327 traverse pd-megaman.pd \, next;
-#X obj 0 0 struct mm float x float y float a;
-#X obj 481 378 get mm x;
-#X obj 453 446 set mm a x;
-#X obj 226 295 canvasinfo;
-#X msg 226 152 traverse pd-megaman.pd \, next;
-#X obj 226 173 pointer;
-#X obj 226 194 get mm x y;
-#X obj 292 221 + 20;
-#X obj 98 192 cnv 15 40 60 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X obj 226 253 pack;
-#X msg 226 274 hitbox \$1 \$2;
-#X obj 226 316 route bang;
-#X msg 263 466 traverse pd-megaman.pd \, next;
-#X obj 263 487 pointer;
-#X obj 224 380 t b b b;
-#X obj 52 318 t b b;
-#X obj 52 360 line;
-#X obj 138 192 cnv 15 40 60 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X obj 178 172 cnv 15 40 60 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X obj 28 212 cnv 15 40 60 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X obj 68 212 cnv 15 40 60 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X obj 385 93 spigot 1;
-#X msg 430 46 0;
-#X msg 460 67 1;
-#X obj 283 341 t a b;
-#X obj 461 17 b;
-#X obj 52 381 t a a;
-#X obj 147 488 * 6.28319;
-#X obj 117 508 sin;
-#X obj 177 466 * 0.437;
-#X obj 52 595 +;
-#X obj 263 513 get mm x y;
-#X msg 228 466 9;
-#X obj 385 114 t b b;
-#X msg 52 339 0 \, 1 750;
-#X obj 461 46 del 751;
-#X obj 310 364 s stop;
-#X obj 226 215 + 40;
-#X obj 52 411 * 30;
-#X obj 77 528 * -52;
-#X obj 77 595 +;
-#X obj 52 624 set mm x y a;
+#X scalar mm 44 505.367 3 \;;
+#X obj 383 -2 key;
+#X obj 560 348 pointer;
+#X obj 383 21 select 115;
+#X obj 462 153 f;
+#X obj 504 153 + 1;
+#X obj 504 178 % 4;
+#X obj 504 212 sel 0 1 2 3;
+#X msg 504 243 6;
+#X msg 534 243 7;
+#X msg 564 243 8;
+#X msg 594 243 7;
+#X obj 308 0 keyup;
+#X obj 308 21 select 115;
+#X msg 308 42 0;
+#X obj 503 300 t a b;
+#X obj 383 62 metro 90;
+#X obj 531 417 + 5;
+#X obj 575 270 t a b;
+#X obj 619 269 t a b;
+#X msg 611 378 4;
+#X msg 667 373 6;
+#X text 0 334 Click the "s" key to make megaman run to the right!;
+#X msg 560 327 traverse pd-megaman.pd \, next;
+#X obj 16 160 struct mm float x float y float a;
+#X obj 531 378 get mm x;
+#X obj 503 446 set mm a x;
+#X obj 276 288 canvasinfo;
+#X msg 276 152 traverse pd-megaman.pd \, next;
+#X obj 276 173 pointer;
+#X obj 276 194 get mm x y;
+#X obj 333 215 + 20;
+#X obj 276 246 pack;
+#X msg 276 267 hitbox \$1 \$2;
+#X obj 276 309 route bang;
+#X msg 263 455 traverse pd-megaman.pd \, next;
+#X obj 263 476 pointer;
+#X obj 224 360 t b b b;
+#X obj 22 388 t b b;
+#X obj 22 430 line;
+#X obj 435 103 spigot 1;
+#X msg 480 49 0;
+#X msg 510 70 1;
+#X obj 333 334 t a b;
+#X obj 511 20 b;
+#X obj 22 451 t a a;
+#X obj 127 498 * 6.28319;
+#X obj 97 518 sin;
+#X obj 177 476 * 0.437;
+#X obj 22 595 +;
+#X obj 263 519 get mm x y;
+#X msg 228 476 9;
+#X obj 435 124 t b b;
+#X msg 22 409 0 \, 1 750;
+#X obj 511 49 del 751;
+#X obj 360 364 s stop;
+#X obj 276 215 + 40;
+#X obj 22 481 * 30;
+#X obj 47 538 * -52;
+#X obj 47 595 +;
+#X obj 22 624 set mm x y a;
 #N canvas 416 58 460 233 stand-and-blink 0;
 #X msg 391 114 traverse pd-megaman.pd \, next;
 #X obj 391 135 pointer;
@@ -104,13 +93,13 @@
 #X connect 11 0 12 0;
 #X connect 12 0 3 0;
 #X connect 12 0 10 0;
-#X restore 260 94 pd stand-and-blink;
-#X obj -12 232 cnv 15 40 60 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 487 147 ---------- 2014 Jonathan Wilkes ----------;
-#X obj 26 73 draw sprite ./megaman 0 0 a;
-#X msg 26 51 index a;
-#X obj 26 29 loadbang;
+#X restore 310 103 pd stand-and-blink;
+#X text 16 0 ---------- 2014 Jonathan Wilkes ----------;
+#X obj 16 243 draw sprite ./megaman 0 0 a;
+#X msg 16 221 index a;
+#X obj 16 199 loadbang;
+#X obj 511 -2 r stop;
+#X obj 263 497 trigger anything anything;
 #X connect 2 0 4 0;
 #X connect 3 0 26 0;
 #X connect 3 0 27 2;
@@ -132,8 +121,8 @@
 #X connect 15 0 17 0;
 #X connect 16 0 27 0;
 #X connect 16 1 24 0;
-#X connect 17 0 46 0;
-#X connect 17 0 67 0;
+#X connect 17 0 41 0;
+#X connect 17 0 62 0;
 #X connect 18 0 27 1;
 #X connect 19 0 16 0;
 #X connect 19 1 21 0;
@@ -143,47 +132,48 @@
 #X connect 22 0 18 1;
 #X connect 24 0 3 0;
 #X connect 26 0 18 0;
-#X connect 28 0 36 0;
+#X connect 28 0 35 0;
 #X connect 29 0 30 0;
 #X connect 30 0 31 0;
-#X connect 31 0 62 0;
+#X connect 31 0 57 0;
 #X connect 31 1 32 0;
-#X connect 32 0 34 1;
-#X connect 34 0 35 0;
-#X connect 35 0 28 0;
-#X connect 36 1 49 0;
-#X connect 37 0 38 0;
-#X connect 38 0 56 0;
-#X connect 38 0 66 3;
-#X connect 39 0 40 0;
-#X connect 39 1 57 0;
-#X connect 39 2 37 0;
-#X connect 40 0 59 0;
-#X connect 41 0 51 0;
+#X connect 32 0 33 1;
+#X connect 33 0 34 0;
+#X connect 34 0 28 0;
+#X connect 35 1 44 0;
+#X connect 36 0 37 0;
+#X connect 37 0 68 0;
+#X connect 38 0 39 0;
+#X connect 38 1 52 0;
+#X connect 38 2 36 0;
+#X connect 39 0 54 0;
+#X connect 40 0 46 0;
+#X connect 41 0 53 0;
+#X connect 42 0 41 1;
+#X connect 43 0 41 1;
+#X connect 44 0 38 0;
+#X connect 44 1 56 0;
+#X connect 45 0 42 0;
+#X connect 45 0 55 0;
 #X connect 46 0 58 0;
-#X connect 47 0 46 1;
-#X connect 48 0 46 1;
-#X connect 49 0 39 0;
-#X connect 49 1 50 0;
-#X connect 49 1 61 0;
-#X connect 50 0 47 0;
-#X connect 50 0 60 0;
-#X connect 51 0 63 0;
-#X connect 51 1 54 0;
-#X connect 52 0 53 0;
-#X connect 53 0 64 0;
-#X connect 54 0 52 0;
-#X connect 55 0 66 0;
-#X connect 56 0 55 1;
-#X connect 56 1 65 1;
-#X connect 57 0 66 2;
-#X connect 58 0 29 0;
-#X connect 58 1 5 0;
-#X connect 59 0 41 0;
-#X connect 60 0 48 0;
-#X connect 62 0 34 0;
-#X connect 63 0 55 0;
-#X connect 64 0 65 0;
-#X connect 65 0 66 1;
-#X connect 71 0 70 0;
-#X connect 72 0 71 0;
+#X connect 46 1 49 0;
+#X connect 47 0 48 0;
+#X connect 48 0 59 0;
+#X connect 49 0 47 0;
+#X connect 50 0 61 0;
+#X connect 51 0 50 1;
+#X connect 51 1 60 1;
+#X connect 52 0 61 2;
+#X connect 53 0 29 0;
+#X connect 53 1 5 0;
+#X connect 54 0 40 0;
+#X connect 55 0 43 0;
+#X connect 57 0 33 0;
+#X connect 58 0 50 0;
+#X connect 59 0 60 0;
+#X connect 60 0 61 1;
+#X connect 65 0 64 0;
+#X connect 66 0 65 0;
+#X connect 67 0 45 0;
+#X connect 68 0 51 0;
+#X connect 68 1 61 3;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/omgponies.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/omgponies.pd
index 2a92e36e188859766ce731a5a097653f2c09bdea..c4df28385016cecaf733f92efb14820663217ace 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-demos/omgponies.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/omgponies.pd
@@ -1,29 +1,40 @@
 #N struct pony float x float y float a float pizzazz;
-#N canvas 0 19 839 500 10;
-#N canvas 15 188 450 482 animate 0;
+#N canvas -9 19 839 500 10;
+#N canvas 13 153 450 482 animate 0;
 #X obj 22 30 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1
 ;
 #X obj 22 171 pointer;
-#X obj 22 202 trigger anything anything;
-#X obj 115 279 + 1;
-#X obj 115 258 % 8;
+#X obj 22 232 trigger anything anything;
+#X obj 115 309 + 1;
+#X obj 115 288 % 8;
 #X obj 22 105 until;
 #X msg 22 130 next;
 #X obj 22 72 t b b;
-#X obj 22 404 + 4;
+#X obj 22 434 + 4;
 #X obj 22 50 metro 40;
-#X obj 22 223 get pony x pizzazz a;
-#X obj 22 425 set pony x pizzazz a;
-#X obj 52 251 moses 1;
-#X obj 33 335 + 1;
-#X obj 33 314 random 3;
-#X obj 46 364 t a;
-#X obj 52 272 b;
+#X obj 22 253 get pony x pizzazz a;
+#X obj 22 455 set pony x pizzazz a;
+#X obj 52 281 moses 1;
+#X obj 33 365 + 1;
+#X obj 33 344 random 3;
+#X obj 46 394 t a;
+#X obj 52 302 b;
 #X obj 22 8 loadbang;
 #X msg 95 117 traverse pd-omgponies.pd;
+#X obj 227 233 b;
+#X obj 227 254 f;
+#X obj 267 254 + 1;
+#X obj 289 188 t b b;
+#X msg 316 213 0;
+#X obj 242 301 f;
+#X obj 267 346 bang;
+#X obj 267 367 s new-pony;
+#X obj 267 325 change -1;
 #X connect 0 0 9 0;
 #X connect 1 0 2 0;
+#X connect 1 0 19 0;
 #X connect 1 1 5 1;
+#X connect 1 1 22 0;
 #X connect 2 0 10 0;
 #X connect 2 1 11 3;
 #X connect 3 0 11 2;
@@ -46,6 +57,16 @@
 #X connect 16 0 14 0;
 #X connect 17 0 0 0;
 #X connect 18 0 1 0;
+#X connect 19 0 20 0;
+#X connect 20 0 21 0;
+#X connect 21 0 20 1;
+#X connect 21 0 24 1;
+#X connect 22 0 24 0;
+#X connect 22 1 23 0;
+#X connect 23 0 20 1;
+#X connect 24 0 27 0;
+#X connect 25 0 26 0;
+#X connect 27 0 25 0;
 #X restore 425 148 pd animate;
 #X obj 365 14 struct pony float x float y float a float pizzazz;
 #X text 33 77 Demo for drawing scalars in object boxes;
@@ -57,5 +78,79 @@
 #X obj 365 44 loadbang;
 #X msg 365 65 index a;
 #X obj 365 87 draw sprite ./omgponies;
+#N canvas 433 184 482 474 sfx~ 0;
+#X obj 175 16 inlet;
+#X msg 236 264 1;
+#X msg 173 274 0;
+#X obj 173 211 b;
+#X obj 173 252 del 10;
+#X obj 175 95 t b b b;
+#X obj 175 44 spigot 1;
+#X obj 175 66 t b b;
+#X msg 268 53 0;
+#X msg 83 116 1;
+#X obj 173 325 lop~ 400;
+#X obj 173 347 lop~ 440;
+#X obj 194 160 del 70;
+#X obj 175 184 del 140;
+#X obj 83 97 del 140;
+#X obj 341 19 r new-pony;
+#X obj 223 429 delwrite~ trot-buffer 1000;
+#X obj 173 458 outlet~;
+#X obj 173 390 +~;
+#X obj 236 285 t a b;
+#X obj 263 306 random 15;
+#X obj 263 327 + 385;
+#X obj 265 377 *~ 0.97;
+#X obj 194 139 + 67;
+#X obj 194 118 random 4;
+#X obj 127 133 random 8;
+#X obj 127 154 + 132;
+#X obj 282 171 t a;
+#X obj 357 295 loadbang;
+#X msg 357 316 320;
+#X obj 265 356 vd~ trot-buffer;
+#X connect 0 0 6 0;
+#X connect 1 0 19 0;
+#X connect 2 0 10 0;
+#X connect 3 0 1 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 5 0 25 0;
+#X connect 5 1 24 0;
+#X connect 5 2 27 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 7 1 8 0;
+#X connect 8 0 6 1;
+#X connect 9 0 6 1;
+#X connect 10 0 11 0;
+#X connect 11 0 18 0;
+#X connect 12 0 3 0;
+#X connect 13 0 3 0;
+#X connect 13 0 14 0;
+#X connect 14 0 9 0;
+#X connect 15 0 6 0;
+#X connect 18 0 17 0;
+#X connect 18 0 16 0;
+#X connect 19 0 10 0;
+#X connect 19 1 20 0;
+#X connect 20 0 21 0;
+#X connect 21 0 10 1;
+#X connect 22 0 18 1;
+#X connect 23 0 12 0;
+#X connect 24 0 23 0;
+#X connect 25 0 26 0;
+#X connect 26 0 13 0;
+#X connect 27 0 3 0;
+#X connect 28 0 29 0;
+#X connect 29 0 30 0;
+#X connect 30 0 22 0;
+#X restore 629 141 pd sfx~;
+#X obj 582 97 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 629 162 output~;
 #X connect 7 0 8 0;
 #X connect 8 0 9 0;
+#X connect 10 0 12 0;
+#X connect 11 0 10 0;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/pieslice.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/pieslice.pd
index d2e799f3ab03dc6f9e20799c8ea5b473f6ed142d..df3c044b656a13587e5e46df3ee307f4b0964384 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-demos/pieslice.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/pieslice.pd
@@ -41,58 +41,56 @@ s float tx float ty;
 #X obj 406 94 v endangle;
 #X obj 60 56 t b a;
 #X obj 567 50 loadbang;
-#X msg 567 71 pi;
-#X obj 567 92 pdinfo;
-#X obj 567 113 / 180;
+#X obj 567 93 / 180;
 #X obj 470 279 loadbang;
 #X obj 470 321 pointer;
 #X obj 60 270 t b b b a;
 #X obj 96 313 v r;
 #X obj 66 313 v cy;
 #X obj 26 313 v cx;
-#X obj 567 134 v rad;
+#X obj 567 114 v rad;
 #X obj 51 378 append pieslicer cx cy r x1 x2 y1 y2 flag;
 #X floatatom 321 313 5 0 0 0 - - -, f 5;
 #X floatatom 251 313 5 0 0 0 - - -, f 5;
 #X floatatom 201 313 5 0 0 0 - - -, f 5;
-#X floatatom 525 137 5 0 0 0 - - -, f 5;
+#X floatatom 525 117 5 0 0 0 - - -, f 5;
 #X floatatom 161 313 5 0 0 0 - - -, f 5;
 #X obj 60 197 expr cx + r * cos(-1 * startangle * rad) \; cx + r *
 cos(-1 * endangle * rad) \; cy + r * sin(-1 * startangle * rad) \;
 cy + r * sin(-1 * endangle * rad) \; (endangle - startangle) > 180
 ;
 #X msg 470 300 traverse pieslice-canvas \, bang;
+#X msg 567 71 3.14159;
 #X connect 0 0 15 0;
 #X connect 2 0 11 0;
 #X connect 4 0 12 0;
 #X connect 6 0 13 0;
 #X connect 8 0 14 0;
-#X connect 15 0 33 0;
+#X connect 15 0 31 0;
 #X connect 15 1 10 0;
-#X connect 16 0 17 0;
-#X connect 17 0 18 0;
-#X connect 18 0 19 0;
-#X connect 19 0 26 0;
-#X connect 19 0 31 0;
-#X connect 20 0 34 0;
-#X connect 21 0 27 8;
-#X connect 22 0 25 0;
-#X connect 22 1 24 0;
-#X connect 22 2 23 0;
-#X connect 22 3 27 3;
-#X connect 23 0 27 2;
-#X connect 24 0 27 1;
-#X connect 25 0 27 0;
-#X connect 33 0 22 0;
-#X connect 33 1 27 4;
-#X connect 33 1 32 0;
-#X connect 33 2 27 5;
-#X connect 33 2 30 0;
-#X connect 33 3 27 6;
-#X connect 33 3 29 0;
-#X connect 33 4 27 7;
-#X connect 33 4 28 0;
-#X connect 34 0 21 0;
+#X connect 16 0 33 0;
+#X connect 17 0 24 0;
+#X connect 17 0 29 0;
+#X connect 18 0 32 0;
+#X connect 19 0 25 8;
+#X connect 20 0 23 0;
+#X connect 20 1 22 0;
+#X connect 20 2 21 0;
+#X connect 20 3 25 3;
+#X connect 21 0 25 2;
+#X connect 22 0 25 1;
+#X connect 23 0 25 0;
+#X connect 31 0 20 0;
+#X connect 31 1 25 4;
+#X connect 31 1 30 0;
+#X connect 31 2 25 5;
+#X connect 31 2 28 0;
+#X connect 31 3 25 6;
+#X connect 31 3 27 0;
+#X connect 31 4 25 7;
+#X connect 31 4 26 0;
+#X connect 32 0 19 0;
+#X connect 33 0 17 0;
 #X restore 183 541 pd sector;
 #X floatatom 89 474 0 0 0 0 cx - -;
 #X floatatom 139 474 0 0 0 0 cy - -;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/quick-graph.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/quick-graph.pd
index c3bd1bd2b7692b9af855bc59f022f9c31611bd36..4be76b26238e31490a1a079543f73a4e26a1790c 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-demos/quick-graph.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/quick-graph.pd
@@ -1,87 +1,83 @@
 #N struct quick-graph float x float y float y0 float y1 float y2 float
 y3 float y4 float y5 float y6;
-#N struct hotspot float x float y float y1 float idx float r float
-g float b float radius;
-#N canvas 1 88 611 390 10;
-#X scalar quick-graph 30 105 52 79 57 70 43 79 86 \;;
+#N struct hotspot float x float y float radius;
+#N canvas -9 19 619 390 10;
+#X scalar quick-graph 30 105 99 89 83 41 80 69 23 \;;
 #X msg 243 97 fill blue \, stroke blue \, stroke-width 2 \, fill-opacity
 0.6;
 #X obj 24 33 struct quick-graph float x float y float y0 float y1 float
 y2 float y3 float y4 float y5 float y6;
 #X obj 243 76 loadbang;
-#N canvas 667 50 641 427 hotspot 0;
-#X obj 189 402 set quick-graph y0 y1 y2 y3 y4 y5 y6;
-#X obj 186 328 get quick-graph y0 y1 y2 y3 y4 y5 y6;
-#X msg 186 252 traverse pd-quick-graph.pd \, next;
-#X obj 186 273 pointer quick-graph;
-#X msg 241 295 next;
-#X obj 171 373 f;
-#X obj 171 135 get hotspot idx y1;
-#X obj 171 162 pack;
-#X obj 431 252 t a;
-#X obj 171 183 t b a b;
-#X obj 432 327 route 0 1 2 3 4 5 6;
-#X obj 563 328 t a;
-#X obj 171 29 struct hotspot float x float y float y1 float idx float
-r float g float b float radius;
-#X obj 469 121 draw circle 0 y1 radius;
-#X obj 18 135 set hotspot r g b radius;
-#X obj 171 70 route enter change leave;
-#X obj 264 112 set hotspot r g b radius;
-#X msg 264 91 0 0 255 4 \$1;
-#X msg 19 114 50 50 255 8 \$1;
-#X msg 469 96 fill r g b \, stroke black;
-#X obj 469 71 loadbang;
-#X obj 458 187 draw circle 0 y1 8;
-#X obj 458 147 loadbang;
-#X msg 458 168 fill "";
-#X connect 1 0 5 1;
-#X connect 1 1 0 1;
-#X connect 1 2 0 2;
-#X connect 1 3 0 3;
-#X connect 1 4 0 4;
-#X connect 1 5 0 5;
-#X connect 1 6 0 6;
+#N canvas 448 46 693 600 hotspot 0;
+#X obj 131 53 route enter change leave;
+#X obj 131 159 loadbang;
+#X obj 268 118 loadbang;
+#X msg 268 139 fill "";
+#X obj 131 29 struct hotspot float x float y float radius;
+#X msg 131 184 fill blue \, stroke blue \, fill-opacity 0.6 \, mousedown
+1 \, drag 1;
+#X obj 268 158 draw circle 0 0 8;
+#X obj 131 219 draw circle 0 0 radius;
+#X msg 224 74 4 \$1;
+#X obj 224 95 set hotspot radius;
+#X obj 131 118 set hotspot radius;
+#X msg 131 97 8 \$1;
+#X obj 131 240 route drag;
+#X obj 131 261 t a a;
+#X obj 229 286 unpack p;
+#X obj 131 427 set hotspot y;
+#X obj 131 394 +;
+#X msg 131 306 \$3;
+#X obj 240 315 get hotspot x y;
+#X obj 241 400 - 30;
+#X obj 241 421 div 20;
+#X obj 241 366 t a b;
+#X msg 454 413 traverse pd-quick-graph.pd \, next;
+#X obj 454 434 pointer quick-graph;
+#X msg 509 457 next;
+#X obj 241 443 list append;
+#X obj 327 341 - 95;
+#X obj 241 541 set;
+#X msg 241 482 set quick-graph y\$1 \, \$2;
+#X connect 0 0 11 0;
+#X connect 0 2 8 0;
+#X connect 1 0 5 0;
 #X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 3 0 11 0;
-#X connect 3 1 4 0;
-#X connect 4 0 3 0;
-#X connect 5 0 0 0;
-#X connect 6 0 7 0;
-#X connect 6 1 7 1;
-#X connect 7 0 9 0;
-#X connect 8 0 10 0;
-#X connect 9 0 5 0;
-#X connect 9 1 8 0;
-#X connect 9 2 2 0;
-#X connect 10 0 5 1;
-#X connect 10 1 0 1;
-#X connect 10 2 0 2;
-#X connect 10 3 0 3;
-#X connect 10 4 0 4;
-#X connect 10 5 0 5;
-#X connect 10 6 0 6;
-#X connect 11 0 0 7;
-#X connect 12 0 15 0;
-#X connect 15 0 6 0;
-#X connect 15 0 18 0;
-#X connect 15 1 6 0;
-#X connect 15 2 17 0;
+#X connect 3 0 6 0;
+#X connect 4 0 0 0;
+#X connect 5 0 7 0;
+#X connect 7 0 12 0;
+#X connect 8 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 17 0;
+#X connect 13 1 14 0;
+#X connect 14 0 15 1;
+#X connect 14 0 18 0;
+#X connect 16 0 15 0;
 #X connect 17 0 16 0;
-#X connect 18 0 14 0;
-#X connect 19 0 13 0;
-#X connect 20 0 19 0;
+#X connect 18 0 21 0;
+#X connect 18 1 16 1;
+#X connect 18 1 26 0;
+#X connect 19 0 20 0;
+#X connect 20 0 25 0;
+#X connect 21 0 19 0;
+#X connect 21 1 22 0;
 #X connect 22 0 23 0;
-#X connect 23 0 21 0;
+#X connect 23 0 27 1;
+#X connect 23 1 24 0;
+#X connect 24 0 23 0;
+#X connect 25 0 28 0;
+#X connect 26 0 25 1;
+#X connect 28 0 27 0;
 #X restore 243 174 pd hotspot;
-#X scalar hotspot 30 98 52 0 0 0 255 4 \;;
-#X scalar hotspot 50 99 79 1 0 0 255 4 \;;
-#X scalar hotspot 70 99 57 2 0 0 255 4 \;;
-#X scalar hotspot 90 99 70 3 0 0 255 4 \;;
-#X scalar hotspot 110 99 43 4 0 0 255 4 \;;
-#X scalar hotspot 130 99 79 5 0 0 255 4 \;;
-#X scalar hotspot 150 99 86 6 0 0 255 4 \;;
+#X scalar hotspot 30 194 4 \;;
+#X scalar hotspot 50 185 4 \;;
+#X scalar hotspot 70 178 4 \;;
+#X scalar hotspot 90 136 4 \;;
+#X scalar hotspot 110 175 4 \;;
+#X scalar hotspot 130 164 4 \;;
+#X scalar hotspot 150 117 4 \;;
 #X text 241 217 Quick graph demo showing some mouseover animation.
 ;
 #X text 241 237 When you mouse over a scalar \, Pd will give you two
@@ -96,5 +92,7 @@ only happened with the mouse enters a shape \, rather than the bbox.
 #X obj 243 120 draw path M 0 y0 C 10 y0 10 y1 20 y1 C 30 y1 30 y2 40
 y2 C 50 y2 50 y3 60 y3 C 70 y3 70 y4 80 y4 C 90 y4 90 y5 100 y5 110
 y5 110 y6 120 y6 L 120 150 0 150 z;
+#X text 402 21 bug: quick-graph fields;
+#X text 402 42 aren't saved in the [set] object;
 #X connect 1 0 17 0;
 #X connect 3 0 1 0;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/quick-graph2.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/quick-graph2.pd
new file mode 100644
index 0000000000000000000000000000000000000000..fd33ff566e8019b6962164b04aa7268487dd9dc4
--- /dev/null
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/quick-graph2.pd
@@ -0,0 +1,64 @@
+#N struct quick-graph2 float x float y float y0 float y1 float y2 float
+y3 float y4 float y5 float y6;
+#N canvas 0 19 619 638 10;
+#X scalar quick-graph2 35 123 110 84 69 92 103 99 76 \;;
+#X msg 243 97 fill blue \, stroke blue \, stroke-width 2 \, fill-opacity
+0.6;
+#X obj 24 33 struct quick-graph2 float x float y float y0 float y1
+float y2 float y3 float y4 float y5 float y6;
+#X obj 243 76 loadbang;
+#X text 11 618 Quick graph demo showing some mouseover animation.;
+#X text 11 638 When you mouse over a scalar \, Pd will give you two
+new notifications to the struct outlet:;
+#X text 11 668 * "enter" when the mouse first enters the bbox of the
+scalar;
+#X text 11 688 * "leave" when the mouse leaves the bbox of the scalar
+;
+#X text 11 710 Of course \, this would be more robust if the notifications
+only happened with the mouse enters a shape \, rather than the bbox.
+;
+#X obj 243 120 draw path M 0 y0 C 10 y0 10 y1 20 y1 C 30 y1 30 y2 40
+y2 C 50 y2 50 y3 60 y3 C 70 y3 70 y4 80 y4 C 90 y4 90 y5 100 y5 110
+y5 110 y6 120 y6 L 120 150 0 150 z;
+#X obj 233 224 draw circle 0 y0(-150:150)(-160:140) 5;
+#X obj 233 247 drag-event-y quick-graph2 y0;
+#X obj 233 307 drag-event-y quick-graph2 y1;
+#X obj 233 357 drag-event-y quick-graph2 y2;
+#X obj 233 417 drag-event-y quick-graph2 y3;
+#X obj 233 467 drag-event-y quick-graph2 y4;
+#X obj 233 517 drag-event-y quick-graph2 y5;
+#X obj 233 567 drag-event-y quick-graph2 y6;
+#X obj 233 284 draw circle 20 y1(-150:150)(-160:140) 5;
+#X obj 233 334 draw circle 40 y2(-150:150)(-160:140) 5;
+#X obj 233 394 draw circle 60 y3(-150:150)(-160:140) 5;
+#X obj 233 444 draw circle 80 y4(-150:150)(-160:140) 5;
+#X obj 233 494 draw circle 100 y5(-150:150)(-160:140) 5;
+#X obj 233 544 draw circle 120 y6(-150:150)(-160:140) 5;
+#X obj 194 168 loadbang;
+#X msg 194 188 mousedown 1 \, drag 1 \, fill blue \, fill-opacity 0.6
+;
+#X text 19 343 using the quanta fields (i.e. \,;
+#X text 19 363 the (0:1)(2:3) syntax). The;
+#X text 19 383 interaction is simpler because;
+#X text 19 403 all the draw commands belong to;
+#X text 19 423 a single template. But the;
+#X text 19 443 patch is a bit more clunky and;
+#X text 19 463 harder to read.;
+#X text 19 323 Here's another quick graph \,;
+#X connect 1 0 9 0;
+#X connect 3 0 1 0;
+#X connect 10 0 11 0;
+#X connect 18 0 12 0;
+#X connect 19 0 13 0;
+#X connect 20 0 14 0;
+#X connect 21 0 15 0;
+#X connect 22 0 16 0;
+#X connect 23 0 17 0;
+#X connect 24 0 25 0;
+#X connect 25 0 10 0;
+#X connect 25 0 18 0;
+#X connect 25 0 19 0;
+#X connect 25 0 20 0;
+#X connect 25 0 21 0;
+#X connect 25 0 22 0;
+#X connect 25 0 23 0;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/rocket-demo.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/rocket-demo.pd
new file mode 100644
index 0000000000000000000000000000000000000000..dbf4f0e3773d9d17b4a22f7fd6e1e074863cee80
--- /dev/null
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/rocket-demo.pd
@@ -0,0 +1,449 @@
+#N struct rocket float x float y;
+#N canvas 79 33 700 559 10;
+#N canvas 815 65 450 486 guts 0;
+#X obj 113 10 struct rocket float x float y;
+#N canvas 502 148 709 504 (subpatch) 0;
+#N canvas 220 31 825 654 rocket 0;
+#N canvas 433 184 450 300 thrust 0;
+#X obj 169 -37 draw path M 271.335 362.637 C 271.335 362.637 284.054
+399.945 298.468 431.318 C 312.883 462.692 338.321 477.954 341.713 477.954
+C 345.104 477.954 348.496 460.148 347.648 449.973 C 346.8 439.798 323.058
+419.447 363.759 451.668 C 404.459 483.889 433.288 497.456 430.744 486.433
+C 434.984 459.299 387.5 402.489 418.026 412.664 C 448.551 422.839 500.274
+446.581 468.053 409.272 C 435.832 371.964 402.763 355.005 430.745 355.853
+C 458.726 356.701 485.859 369.42 472.293 344.83 C 458.726 320.24 393.456
+281.998 365.475 265.887 C 343.429 276.91 300.165 305.826 271.335 362.637
+z;
+#X obj 169 -105 loadbang;
+#X obj 169 176 draw path M 284.054 339.743 C 284.054 339.743 293.381
+384.683 303.556 398.249 C 313.731 411.816 316.275 410.12 318.819 391.466
+C 321.363 372.812 303.556 354.157 334.081 374.508 C 364.607 394.858
+390.892 420.295 375.63 388.922 C 360.367 357.549 356.127 349.918 377.325
+360.941 C 398.523 371.964 418.874 380.443 393.435 349.918 C 373.934
+327.872 412.937 321.936 419.721 319.393 C 435.832 321.937 351.04 274.452
+342.561 274.452 C 333.233 276.148 287.445 332.959 284.054 339.743 z
+;
+#X obj 169 121 loadbang;
+#X msg 169 -84 fill #ff4000 \, fill-rule 0 \, stroke-width 3.75 \,
+transform matrix 1.0041 0 0 1.01474 -1.11186 -7.22347 \, stroke ""
+;
+#X msg 169 142 fill #ffff33 \, fill-opacity 0.696296 \, fill-rule 0
+\, stroke-width 12.5 \, stroke-linejoin 0 \, stroke "";
+#X obj 99 -82 inlet;
+#X connect 1 0 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 0 0;
+#X connect 5 0 2 0;
+#X connect 6 0 0 0;
+#X connect 6 0 2 0;
+#X restore 27 66 group thrust;
+#X obj 27 504 loadbang;
+#X obj 27 566 draw path M 43.244 60.7763 C 122.101 62.472 321.362 94.6929
+397.675 290.563 C 371.389 295.651 306.948 358.397 296.773 393.161 C
+102.599 293.955 47.4836 137.089 43.244 60.7763 z;
+#X msg 27 525 fill #d9d9d9 \, fill-rule 0 \, stroke #000000 \, stroke-width
+10 \, stroke-linejoin 0 \, transform translate -25.4377 -29.6773;
+#X obj 27 96 loadbang;
+#X obj 27 164 draw path M 189.087 321.936 C 189.087 321.936 192.478
+408.424 192.478 409.272 C 192.478 410.12 296.773 457.604 302.708 460.148
+L 297.621 392.314 C 288.294 393.162 205.197 339.743 189.087 321.936
+z;
+#X msg 27 117 fill #bfbfbf \, fill-rule 0 \, stroke #000000 \, stroke-width
+10 \, stroke-linejoin 0 \, transform translate -25.4377 -29.6773;
+#X obj 27 365 loadbang;
+#X obj 27 433 draw path M 190.761 322.825 C 190.761 322.825 192.478
+408.424 192.478 409.272 C 192.478 410.12 296.773 457.604 302.708 460.148
+L 297.621 392.314 C 264.809 382.406 210.2 343.258 190.761 322.825 z
+;
+#X msg 27 386 fill #bfbfbf \, fill-rule 0 \, stroke #000000 \, stroke-width
+10 \, stroke-linejoin 0 \, transform matrix -0.0245746 0.999698 0.999698
+0.0245746 -13.3061 -47.2839;
+#X obj 434 96 loadbang;
+#X msg 434 117 fill #bfbfbf \, fill-rule 0 \, stroke #000000 \, stroke-width
+10 \, stroke-linejoin 0;
+#X obj 434 218 loadbang;
+#X obj 434 273 draw path M 124.645 131.154 C 95.8152 170.158 155.169
+218.49 183.151 183.725 C 217.068 141.329 158.562 100.629 124.645 131.154
+z;
+#X msg 434 239 fill #bfbfbf \, fill-rule 0 \, stroke #000000 \, stroke-width
+12.5 \, stroke-linejoin 0;
+#X obj 434 342 loadbang;
+#X obj 434 397 draw path M 132.276 135.393 C 153.474 115.043 202.653
+139.633 180.608 176.094 C 156.018 207.466 105.991 167.615 132.276 135.393
+z;
+#X msg 434 363 fill #aeffff \, fill-rule 0 \, stroke #000000 \, stroke-width
+10 \, stroke-linejoin 0;
+#X obj 434 465 loadbang;
+#X obj 434 151 draw path M 232.637 209.399 L 215.868 233.68 L 236.513
+269.414 L 322.267 337.158 L 334.654 318.613 L 252.663 249.373 L 232.637
+209.399 z;
+#X obj 434 535 draw path M 148.386 134.502 C 141.525 139.24 123.485
+154.126 138.211 171.854 C 150.93 175.246 168.736 136.198 148.386 134.502
+z;
+#X obj 27 234 loadbang;
+#X obj 27 296 draw path M 235.317 210.169 C 235.317 210.169 249.577
+244.292 251.984 249.855 C 254.938 253.603 329.573 314.511 335.052 317.929
+L 331.873 296.248 C 323.878 288.55 255.069 228.232 235.317 210.169
+z;
+#X msg 27 255 fill #bfbfbf \, fill-rule 0 \, stroke #000000 \, stroke-width
+10 \, stroke-linejoin 1;
+#X obj 27 16 inlet;
+#N canvas 433 184 540 376 animate 0;
+#X obj 41 16 inlet;
+#X obj 41 295 outlet;
+#X obj 114 295 outlet;
+#X msg 318 254 transform translate 0 0;
+#X msg 114 254 transform scale -1 1 rotate 92;
+#X obj 114 127 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 114 169 f;
+#X obj 154 169 + 1;
+#X obj 114 193 % 2;
+#X obj 114 214 sel 0 1;
+#X obj 114 148 metro 120;
+#X obj 41 134 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X msg 41 154 vis \$1;
+#X obj 41 46 b;
+#X msg 114 92 0;
+#X msg 41 77 1;
+#X obj 114 71 del 2700;
+#X connect 0 0 13 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 0;
+#X connect 5 0 10 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 1;
+#X connect 8 0 9 0;
+#X connect 9 0 4 0;
+#X connect 9 1 3 0;
+#X connect 10 0 6 0;
+#X connect 11 0 12 0;
+#X connect 12 0 1 0;
+#X connect 13 0 15 0;
+#X connect 13 0 16 0;
+#X connect 14 0 5 0;
+#X connect 14 0 11 0;
+#X connect 15 0 5 0;
+#X connect 15 0 11 0;
+#X connect 16 0 14 0;
+#X restore 27 40 pd animate;
+#X msg 434 486 fill #ffffff \, fill-opacity 0.75 \, fill-rule 1 \,
+stroke-width 12.5 \, stroke-linejoin 1;
+#X connect 1 0 3 0;
+#X connect 3 0 2 0;
+#X connect 4 0 6 0;
+#X connect 6 0 5 0;
+#X connect 7 0 9 0;
+#X connect 9 0 8 0;
+#X connect 10 0 11 0;
+#X connect 11 0 19 0;
+#X connect 12 0 14 0;
+#X connect 14 0 13 0;
+#X connect 15 0 17 0;
+#X connect 17 0 16 0;
+#X connect 18 0 26 0;
+#X connect 21 0 23 0;
+#X connect 23 0 22 0;
+#X connect 24 0 25 0;
+#X connect 25 0 0 0;
+#X connect 25 1 0 1;
+#X connect 26 0 20 0;
+#X restore 264 287 group rocket;
+#N canvas 547 87 754 501 moon 0;
+#X obj 40 17 loadbang;
+#X obj 40 79 draw path m 10.671 231.42 c 89.543 56.086 188.11 -10.029
+193.33 -94.559 -1.7286 -101.53 -92.171 -150.4 -160.16 -128.01 35.129
+15.844 73.4 62.729 73.871 88.013 -3.4428 7.5157 -5.8714 16.373 1.5286
+18.844 -2 12.857 -18.486 33.571 -21.043 40.643 -2.5571 7.0714 2.2143
+9.8443 5.4429 10.357 0.2 6.0586 -4.4429 8.3572 -5.3572 12.156 -7.9
+3.13 -8.4714 9.9872 -7.3286 14.844 -19.714 18.571 -20.571 27.143 -80.286
+37.714 z;
+#X obj 40 202 loadbang;
+#X obj 40 244 draw path m 98.193 180.83 c 2.5851 -3.421 7.4852 2.5632
+7.1642 5.1572 -0.32201 2.594 -0.67928 4.0227 -3.7143 5.2857;
+#X msg 40 223 stroke #000 \, stroke-width 5;
+#X obj 42 285 loadbang;
+#X obj 42 327 draw path m 104.11 166.92 c 5.5357 -0.49998 14.643 3.8472
+17.75 2.37 3.1072 -1.4771 3.3929 -4.6686 2.3572 -6.5129;
+#X msg 42 306 stroke #000 \, stroke-width 5;
+#X obj 47 371 loadbang;
+#X obj 47 413 draw path m 125.64 171.49 c -3.9286 8.2143 -3.8572 18.987
+4.2143 33.286;
+#X msg 47 392 stroke #000 \, stroke-width 2;
+#X obj 468 26 loadbang;
+#X obj 468 78 draw path m 117.91 97.816 c 9.572 1.8 16.143 -9.0571
+20.8 -10.101 3.057 -1.0986 14.057 27.473 21.057 35.616;
+#X obj 467 147 loadbang;
+#X obj 467 189 draw path m 129.49 105.78 c 7.6428 -3.6429 11.179 6.5357
+12.607 10.929 1.4286 4.3928 7.1428 5.1071 10.857 5.5;
+#X obj 471 255 loadbang;
+#X obj 471 297 draw path m 133.91 114.75 c 0.87856 -0.13215 1.6214
+4.3107 2.5143 6.8236 1.2857 -0.90571 0.82143 -1.5129 1.3928 -1.9771
+0.96429 -0.82143 1.6071 3.6657 2.3572 5.1429 4.8572 -1e-05 5.4643 0.89286
+5.4286 1.9286 -3.25 0.21429 -5.1786 0.67857 -7.5 1.6071 -3.7857 2.3214
+-6.0357 6.6072 -7 5.4286 -0.32143 -1.5 3.3571 -4.5357 4 -5.4286 -3.0714
+-5.1428 -2.0714 -13.393 -1.1929 -13.525 z;
+#X msg 471 276 stroke #000 \, fill #000;
+#X msg 468 47 stroke #000 \, stroke-width 5;
+#X msg 467 168 stroke #000 \, stroke-width 2;
+#X msg 40 38 stroke #000 \, stroke-width 5 \, fill #f6c700;
+#X connect 0 0 20 0;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 5 0 7 0;
+#X connect 7 0 6 0;
+#X connect 8 0 10 0;
+#X connect 10 0 9 0;
+#X connect 11 0 18 0;
+#X connect 13 0 19 0;
+#X connect 15 0 17 0;
+#X connect 17 0 16 0;
+#X connect 18 0 12 0;
+#X connect 19 0 14 0;
+#X connect 20 0 1 0;
+#X restore 95 362 group moon;
+#X floatatom 45 167 5 0 0 0 - - -, f 5;
+#X obj 45 238 pack;
+#X floatatom 95 167 5 0 0 0 - - -, f 5;
+#X obj 95 188 t b a;
+#X floatatom 450 173 5 0 0 0 - - -, f 5;
+#X obj 333 234 pack;
+#X floatatom 500 123 5 0 0 0 - - -, f 5;
+#X obj 500 194 t b a;
+#X msg 333 256 transform translate \$1 \$2 scale 0.3;
+#X obj 333 61 line;
+#X obj 333 172 + 255;
+#X obj 383 172 + 224;
+#X obj 333 143 * -368;
+#X obj 333 114 t a a;
+#N canvas 678 96 655 603 easeinout 0;
+#X obj 130 30 inlet;
+#X obj 130 513 outlet;
+#X obj 130 51 / 1.04;
+#X msg 130 72 0.48 \$1;
+#X obj 130 93 -;
+#X obj 130 144 pow 2;
+#X obj 130 165 + 0.1734;
+#X obj 130 186 sqrt;
+#X obj 130 241 -;
+#X obj 130 262 trigger anything anything;
+#X obj 157 306 f 1;
+#X obj 157 327 / 3;
+#X obj 130 355 pow;
+#X obj 130 376 *;
+#X obj 130 306 abs;
+#X obj 244 304 < 0;
+#X obj 244 325 sel 0 1;
+#X obj 244 349 f 1;
+#X obj 277 349 f -1;
+#X obj 130 114 trigger anything anything;
+#X obj 130 210 trigger anything anything;
+#X obj 277 231 * -1;
+#X obj 321 262 -;
+#X obj 348 335 f 1;
+#X obj 348 356 / 3;
+#X obj 321 384 pow;
+#X obj 321 405 *;
+#X obj 321 335 abs;
+#X obj 434 334 < 0;
+#X obj 434 355 sel 0 1;
+#X obj 434 379 f 1;
+#X obj 467 379 f -1;
+#X obj 321 283 trigger anything anything;
+#X obj 130 441 +;
+#X obj 130 462 + 0.5;
+#X obj 130 483 expr (1 - $f1) * 3 * $f1 * $f1 + $f1 * $f1 * $f1;
+#X obj 130 283 t a b;
+#X obj 321 312 t a b;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 20 0;
+#X connect 8 0 9 0;
+#X connect 9 0 36 0;
+#X connect 9 1 15 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 1;
+#X connect 12 0 13 0;
+#X connect 13 0 33 0;
+#X connect 14 0 12 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X connect 16 1 18 0;
+#X connect 17 0 13 1;
+#X connect 18 0 13 1;
+#X connect 19 0 5 0;
+#X connect 19 1 8 1;
+#X connect 19 1 22 1;
+#X connect 20 0 8 0;
+#X connect 20 1 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 32 0;
+#X connect 23 0 24 0;
+#X connect 24 0 25 1;
+#X connect 25 0 26 0;
+#X connect 26 0 33 1;
+#X connect 27 0 25 0;
+#X connect 28 0 29 0;
+#X connect 29 0 30 0;
+#X connect 29 1 31 0;
+#X connect 30 0 26 1;
+#X connect 31 0 26 1;
+#X connect 32 0 37 0;
+#X connect 32 1 28 0;
+#X connect 33 0 34 0;
+#X connect 34 0 35 0;
+#X connect 35 0 1 0;
+#X connect 36 0 14 0;
+#X connect 36 1 10 0;
+#X connect 37 0 27 0;
+#X connect 37 1 23 0;
+#X restore 333 85 pd easeinout;
+#X msg 333 40 0 \, 1 4000;
+#X obj 159 218 b;
+#X obj 264 -25 inlet;
+#X obj 264 -4 b;
+#X msg 95 293 -110 -1;
+#X msg 159 293 -190 1;
+#X obj 500 144 * -1;
+#X obj 185 251 loadbang;
+#X obj 278 39 loadbang;
+#X obj 278 60 f 0;
+#X obj 383 143 * -248;
+#X msg 95 334 transform translate \$1 -93.5 scale 0.5 scale \$2 1;
+#X obj 95 266 del 3600;
+#X connect 2 0 3 0;
+#X connect 3 0 28 0;
+#X connect 4 0 5 0;
+#X connect 5 0 3 0;
+#X connect 5 1 3 1;
+#X connect 6 0 7 0;
+#X connect 7 0 10 0;
+#X connect 8 0 23 0;
+#X connect 9 0 7 0;
+#X connect 9 1 7 1;
+#X connect 10 0 0 1;
+#X connect 11 0 16 0;
+#X connect 12 0 7 0;
+#X connect 13 0 7 1;
+#X connect 14 0 12 0;
+#X connect 15 0 14 0;
+#X connect 15 1 27 0;
+#X connect 16 0 15 0;
+#X connect 17 0 11 0;
+#X connect 18 0 22 0;
+#X connect 18 0 29 0;
+#X connect 19 0 20 0;
+#X connect 20 0 17 0;
+#X connect 20 0 18 0;
+#X connect 20 0 0 0;
+#X connect 21 0 28 0;
+#X connect 22 0 28 0;
+#X connect 23 0 9 0;
+#X connect 24 0 22 0;
+#X connect 25 0 26 0;
+#X connect 26 0 15 0;
+#X connect 27 0 13 0;
+#X connect 28 0 1 0;
+#X connect 29 0 21 0;
+#X restore 137 320 group;
+#X floatatom 164 138 5 0 0 0 - - -, f 5;
+#X floatatom 203 138 5 0 0 0 - - -, f 5;
+#X obj 203 189 t b a;
+#X obj 137 49 inlet;
+#X obj 195 264 loadbang;
+#X msg 195 285 transform scale 0.7;
+#X obj 113 347 route click;
+#X obj 113 383 b;
+#X obj 113 404 s rocket-bng;
+#X obj 61 404 outlet;
+#X msg 164 237 transform rotate \$2 -105 -20 scale \$1;
+#X obj 303 9 inlet;
+#X obj 303 160 line;
+#X obj 303 54 random 2;
+#X obj 303 75 * 2;
+#X obj 303 96 - 1;
+#X obj 303 117 * 360;
+#X msg 303 139 0 \, \$1 4000;
+#X obj 402 352 bang;
+#X obj 164 219 pack 0.7 0;
+#X obj 303 30 trigger bang bang;
+#X connect 0 0 8 0;
+#X connect 2 0 21 0;
+#X connect 3 0 4 0;
+#X connect 4 0 21 0;
+#X connect 4 1 21 1;
+#X connect 5 0 1 0;
+#X connect 6 0 7 0;
+#X connect 7 0 1 1;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 9 0 11 0;
+#X connect 12 0 1 1;
+#X connect 13 0 22 0;
+#X connect 14 0 4 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 19 0 14 0;
+#X connect 20 0 9 0;
+#X connect 21 0 12 0;
+#X connect 22 0 15 0;
+#X connect 22 1 20 0;
+#X restore 96 299 pd guts;
+#X obj 96 40 bng 90 250 50 0 empty rocket-bng empty 17 7 0 10 -262144
+-1 -1;
+#X obj 96 346 output~;
+#X scalar rocket 247 106 \;;
+#N canvas 433 184 450 351 dsp~ 0;
+#X obj 56 55 inlet;
+#X obj 201 51 noise~;
+#X obj 201 136 samphold~;
+#X obj 202 191 osc~;
+#X floatatom 252 84 5 0 0 0 - - -, f 5;
+#X obj 201 72 +~ 1;
+#X floatatom 254 46 5 0 0 0 - - -, f 5;
+#X obj 201 93 *~ 256;
+#X obj 252 109 phasor~ 477;
+#X obj 143 249 *~;
+#X obj 56 90 b;
+#X msg 56 111 1;
+#X msg 56 132 \$1 100;
+#X obj 56 153 line~;
+#X msg 90 111 0;
+#X obj 90 90 delay 2700;
+#X obj 143 300 outlet~;
+#X obj 143 279 *~ 0.2;
+#X connect 0 0 10 0;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 3 0 9 1;
+#X connect 4 0 8 0;
+#X connect 5 0 7 0;
+#X connect 6 0 7 1;
+#X connect 7 0 2 0;
+#X connect 8 0 2 1;
+#X connect 9 0 17 0;
+#X connect 10 0 11 0;
+#X connect 10 0 15 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X connect 14 0 12 0;
+#X connect 15 0 14 0;
+#X connect 17 0 16 0;
+#X restore 96 320 pd dsp~;
+#X msg 138 233 zazzmatazz;
+#X obj 138 254 t b b;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 1 0 1;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/simon-game.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/simon-game.pd
new file mode 100644
index 0000000000000000000000000000000000000000..dc140cb0b321da3d488a90c162a7fe2f29f6cdcb
--- /dev/null
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/simon-game.pd
@@ -0,0 +1,85 @@
+#N struct simon float x float y float nc float ec float sc float wc
+;
+#N canvas -9 19 678 546 10;
+#X obj 341 212 r simon-click;
+#X obj 116 18 struct simon float x float y float nc float ec float
+sc float wc;
+#X scalar simon 53 128 0 0 0 0 \;;
+#N canvas 433 184 583 300 (subpatch) 0;
+#X obj 124 42 loadbang;
+#X obj 218 102 draw rect 50 0 100 50;
+#X obj 218 303 draw rect 0 50 50 100;
+#X obj 218 169 draw rect 150 50 50 100;
+#X obj 218 236 draw rect 50 150 100 50;
+#X obj 218 123 list prepend n;
+#X obj 218 190 list prepend e;
+#X obj 218 257 list prepend s;
+#X obj 218 324 list prepend w;
+#X obj 218 211 s simon-click;
+#X obj 218 278 s simon-click;
+#X obj 218 345 s simon-click;
+#X obj 218 144 s simon-click;
+#X msg 124 67 transform scale 0.4 \, rx 10 \, ry 10 \, mousedown 1
+\, stroke gray \, stroke-width 4;
+#X msg 422 110 fill nc 20 170;
+#X msg 422 150 fill ec 20 170;
+#X msg 422 190 fill sc 20 170;
+#X msg 422 240 fill wc 20 170;
+#X obj 505 60 loadbang;
+#X connect 0 0 13 0;
+#X connect 1 0 5 0;
+#X connect 2 0 8 0;
+#X connect 3 0 6 0;
+#X connect 4 0 7 0;
+#X connect 5 0 12 0;
+#X connect 6 0 9 0;
+#X connect 7 0 10 0;
+#X connect 8 0 11 0;
+#X connect 13 0 1 0;
+#X connect 13 0 3 0;
+#X connect 13 0 4 0;
+#X connect 13 0 2 0;
+#X connect 14 0 1 0;
+#X connect 15 0 3 0;
+#X connect 16 0 4 0;
+#X connect 17 0 2 0;
+#X connect 18 0 14 0;
+#X connect 18 0 17 0;
+#X connect 18 0 16 0;
+#X connect 18 0 15 0;
+#X restore 375 166 group;
+#X obj 341 233 t b a;
+#X obj 375 461 set simon nc;
+#X obj 341 425 * 255;
+#N canvas 864 127 450 300 pipe-message 0;
+#X msg 110 46 1 0 \, 0.9 50 \, 0.8 100 \, 0.7 150 \, 0.6 200 \, 0.5
+250 \, 0.4 300 \, 0.3 350 \, 0.2 400 \, 0.1 450 \, 0 500;
+#X obj 110 11 inlet;
+#X obj 110 80 outlet;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X restore 341 268 pd pipe-message;
+#X obj 341 289 unpack;
+#X msg 375 403 set simon \$1c;
+#X obj 448 268 unpack s s p;
+#X obj 417 347 * 3;
+#X obj 341 374 pipe f s p 0;
+#X obj 341 347 pack f s p;
+#X scalar simon 162 119 0 0 0 0 \;;
+#X scalar simon 109 223 0 0 0 0 \;;
+#X scalar simon 218 214 0 0 0 0 \;;
+#X connect 0 0 4 0;
+#X connect 4 0 7 0;
+#X connect 4 1 10 0;
+#X connect 6 0 5 0;
+#X connect 7 0 8 0;
+#X connect 8 0 13 0;
+#X connect 8 1 11 0;
+#X connect 9 0 5 0;
+#X connect 10 0 13 1;
+#X connect 10 2 13 2;
+#X connect 11 0 12 3;
+#X connect 12 0 6 0;
+#X connect 12 1 9 0;
+#X connect 12 2 5 1;
+#X connect 13 0 12 0;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/splines.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/splines.pd
index c4bdbaf2a32551a86d1cf546b9448bfd07a15faf..5f7893bbefe022485032a76e4d216a0c9a443a10 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-demos/splines.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/splines.pd
@@ -1,71 +1,77 @@
 #N struct splines float x float y float qmid float c1 float c2;
-#N canvas 7 25 700 527 10;
-#X scalar splines 92 86 0.541397 165.533 330.641 \;;
-#X floatatom 311 221 5 0 0 0 - - -, f 5;
-#N canvas 493 185 798 446 (subpatch) 0;
-#X obj 319 -462 loadbang;
-#X obj 319 -392 loadbang;
-#X obj 319 -322 loadbang;
-#X obj 319 -279 draw path M 15 100 h 10 m -5 -5 v 10;
-#X msg 319 -301 stroke red;
-#X obj 319 -252 loadbang;
-#X msg 319 -231 stroke red;
-#X obj 319 -172 loadbang;
-#X msg 319 -151 stroke red;
-#X obj 319 -129 draw path M 135 100 h 10 m -5 -5 v 10;
-#X obj 639 -462 loadbang;
-#X obj 639 -392 loadbang;
-#X obj 639 -322 loadbang;
-#X obj 639 -276 draw path M 15 250 h 10 m -5 -5 v 10;
-#X msg 639 -301 stroke red;
-#X obj 639 -252 loadbang;
-#X msg 639 -231 stroke red;
-#X obj 639 -182 loadbang;
-#X msg 639 -161 stroke red;
-#X obj 639 -112 loadbang;
-#X msg 639 -91 stroke red;
-#X obj 639 -69 draw path M 135 250 h 10 m -5 -5 v 10;
-#X text 187 -464 Quadratic spline;
-#X text 190 -270 Cubic spline;
-#X obj 319 -419 draw path M 20 100 L 80 qmid 140 100;
-#X obj 319 -349 draw path M 20 100 Q 80 qmid 140 100;
-#X obj 318 -207 draw path M 75 qmid h 10 m -5 -5 v 10;
-#X obj 639 -209 draw path M 55 c1 h 10 m -5 -5 v 10;
-#X obj 638 -135 draw path M 95 c2 h 10 m -5 -5 v 10;
-#X obj 639 -418 draw path M 20 250 L 60 c1 100 c2 140 250;
-#X obj 639 -351 draw path M 20 250 C 60 c1 100 c2 140 250;
-#X msg 319 -441 stroke blue \, stroke-width 1 \, fill "";
-#X msg 319 -371 stroke black \, stroke-width 3 \, fill "";
-#X msg 639 -441 stroke blue \, stroke-width 1 \, fill "";
-#X msg 639 -371 stroke black \, stroke-width 3 \, fill "";
-#X connect 0 0 31 0;
-#X connect 1 0 32 0;
-#X connect 2 0 4 0;
-#X connect 4 0 3 0;
-#X connect 5 0 6 0;
-#X connect 6 0 26 0;
+#N canvas 480 58 700 527 10;
+#X scalar splines 92 86 -6.2043 184.445 329.234 \;;
+#X floatatom 311 161 5 0 0 0 - - -, f 5;
+#N canvas 253 138 810 446 (subpatch) 0;
+#X obj 129 -207 draw path M 75 qmid h 10 m -5 -5 v 10;
+#X obj 129 -462 loadbang;
+#X obj 129 -392 loadbang;
+#X obj 129 -322 loadbang;
+#X obj 129 -279 draw path M 15 100 h 10 m -5 -5 v 10;
+#X msg 129 -301 stroke red;
+#X obj 129 -252 loadbang;
+#X obj 129 -152 loadbang;
+#X msg 129 -131 stroke red;
+#X obj 129 -109 draw path M 135 100 h 10 m -5 -5 v 10;
+#X obj 449 -462 loadbang;
+#X obj 449 -392 loadbang;
+#X obj 449 -322 loadbang;
+#X obj 449 -276 draw path M 15 250 h 10 m -5 -5 v 10;
+#X msg 449 -301 stroke red;
+#X obj 449 -252 loadbang;
+#X obj 679 -252 loadbang;
+#X obj 449 -152 loadbang;
+#X msg 449 -131 stroke red;
+#X obj 449 -109 draw path M 135 250 h 10 m -5 -5 v 10;
+#X text 167 -490 Quadratic spline;
+#X text 530 -490 Cubic spline;
+#X obj 129 -419 draw path M 20 100 L 80 qmid 140 100;
+#X obj 129 -349 draw path M 20 100 Q 80 qmid 140 100;
+#X obj 449 -209 draw path M 55 c1 h 10 m -5 -5 v 10;
+#X obj 679 -210 draw path M 95 c2 h 10 m -5 -5 v 10;
+#X obj 449 -418 draw path M 20 250 L 60 c1 100 c2 140 250;
+#X obj 449 -351 draw path M 20 250 C 60 c1 100 c2 140 250;
+#X msg 129 -441 stroke blue \, stroke-width 1 \, fill "";
+#X msg 129 -371 stroke black \, stroke-width 3 \, fill "";
+#X msg 449 -441 stroke blue \, stroke-width 1 \, fill "";
+#X msg 449 -371 stroke black \, stroke-width 3 \, fill "";
+#X obj 129 -186 outlet;
+#X obj 449 -188 outlet;
+#X obj 679 -189 outlet;
+#X msg 129 -231 stroke red \, mousedown 1 \, drag 1;
+#X msg 449 -231 stroke red \, mousedown 1 \, drag 1;
+#X msg 679 -231 stroke red \, mousedown 1 \, drag 1;
+#X connect 0 0 32 0;
+#X connect 1 0 28 0;
+#X connect 2 0 29 0;
+#X connect 3 0 5 0;
+#X connect 5 0 4 0;
+#X connect 6 0 35 0;
 #X connect 7 0 8 0;
 #X connect 8 0 9 0;
-#X connect 10 0 33 0;
-#X connect 11 0 34 0;
+#X connect 10 0 30 0;
+#X connect 11 0 31 0;
 #X connect 12 0 14 0;
 #X connect 14 0 13 0;
-#X connect 15 0 16 0;
-#X connect 16 0 27 0;
+#X connect 15 0 36 0;
+#X connect 16 0 37 0;
 #X connect 17 0 18 0;
-#X connect 18 0 28 0;
-#X connect 19 0 20 0;
-#X connect 20 0 21 0;
-#X connect 31 0 24 0;
-#X connect 32 0 25 0;
-#X connect 33 0 29 0;
-#X connect 34 0 30 0;
-#X restore 311 265 group;
+#X connect 18 0 19 0;
+#X connect 24 0 33 0;
+#X connect 25 0 34 0;
+#X connect 28 0 22 0;
+#X connect 29 0 23 0;
+#X connect 30 0 26 0;
+#X connect 31 0 27 0;
+#X connect 35 0 0 0;
+#X connect 36 0 24 0;
+#X connect 37 0 25 0;
+#X restore 311 205 group;
 #X obj 309 93 struct splines float x float y float qmid float c1 float
 c2;
-#X text 272 334 <- Click-drag the inner red crosses to change the y-value
+#X text 272 394 <- Click-drag the inner red crosses to change the y-value
 of the lines and curves.;
-#X text 363 221 <- works when transformed \, too;
+#X text 363 161 <- works when transformed \, too;
 #N canvas 890 193 450 300 sfx~ 0;
 #X obj 109 51 inlet;
 #X obj 109 71 b;
@@ -98,12 +104,74 @@ of the lines and curves.;
 #X connect 12 0 9 1;
 #X connect 12 0 7 0;
 #X connect 13 0 11 0;
-#X restore 309 135 pd sfx~;
-#X obj 309 114 route change;
-#X obj 309 156 output~;
-#X msg 311 242 transform rotate \$1 80 150;
-#X connect 1 0 9 0;
+#X restore 449 265 pd sfx~;
+#X obj 449 286 output~;
+#X msg 311 182 transform rotate \$1 80 150;
+#N canvas 433 184 450 300 quadratic 0;
+#X obj 86 64 route drag;
+#X obj 233 109 unpack p;
+#X obj 116 135 get splines qmid;
+#X obj 86 160 +;
+#X obj 86 181 set splines qmid;
+#X obj 86 85 trigger anything anything;
+#X obj 86 42 inlet;
+#X msg 86 135 \$5;
+#X connect 0 0 5 0;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 2 0 3 1;
+#X connect 3 0 4 0;
+#X connect 5 0 7 0;
+#X connect 5 1 1 0;
+#X connect 6 0 0 0;
+#X connect 7 0 3 0;
+#X restore 311 277 pd quadratic;
+#N canvas 433 184 450 300 cubic-c1 0;
+#X obj 86 64 route drag;
+#X obj 233 109 unpack p;
+#X obj 86 160 +;
+#X obj 86 85 trigger anything anything;
+#X obj 86 42 inlet;
+#X obj 116 135 get splines c1;
+#X obj 86 181 set splines c1;
+#X msg 86 135 \$5;
+#X connect 0 0 3 0;
+#X connect 1 0 5 0;
+#X connect 1 0 6 1;
+#X connect 2 0 6 0;
+#X connect 3 0 7 0;
+#X connect 3 1 1 0;
+#X connect 4 0 0 0;
+#X connect 5 0 2 1;
+#X connect 7 0 2 0;
+#X restore 325 257 pd cubic-c1;
+#N canvas 433 184 450 300 cubic-c2 0;
+#X obj 86 64 route drag;
+#X obj 233 109 unpack p;
+#X obj 86 160 +;
+#X obj 86 85 trigger anything anything;
+#X obj 86 42 inlet;
+#X obj 116 135 get splines c2;
+#X obj 86 181 set splines c2;
+#X msg 86 135 \$5;
+#X connect 0 0 3 0;
+#X connect 1 0 5 0;
+#X connect 1 0 6 1;
+#X connect 2 0 6 0;
 #X connect 3 0 7 0;
-#X connect 6 0 8 0;
-#X connect 7 0 6 0;
-#X connect 9 0 2 0;
+#X connect 3 1 1 0;
+#X connect 4 0 0 0;
+#X connect 5 0 2 1;
+#X connect 7 0 2 0;
+#X restore 339 237 pd cubic-c2;
+#X obj 449 242 route drag;
+#X connect 1 0 8 0;
+#X connect 2 0 9 0;
+#X connect 2 0 12 0;
+#X connect 2 1 10 0;
+#X connect 2 1 12 0;
+#X connect 2 2 11 0;
+#X connect 2 2 12 0;
+#X connect 6 0 7 0;
+#X connect 8 0 2 0;
+#X connect 12 0 6 0;
diff --git a/pd/doc/4.data.structures/pd-l2ork/ds-demos/unit-circle.pd b/pd/doc/4.data.structures/pd-l2ork/ds-demos/unit-circle.pd
index 7c011a78d5e1d5f7142f8a6e7766e1d311aa3a11..eecafe746112dff28f23e9f1efc3effcac930f81 100644
--- a/pd/doc/4.data.structures/pd-l2ork/ds-demos/unit-circle.pd
+++ b/pd/doc/4.data.structures/pd-l2ork/ds-demos/unit-circle.pd
@@ -1,5 +1,5 @@
 #N struct unit_circle float x float y;
-#N canvas -9 19 683 520 10;
+#N canvas 0 19 683 520 10;
 #X scalar unit_circle 103 387 \;;
 #X obj 310 166 * 6.28;
 #X obj 310 212 sin;
@@ -119,7 +119,7 @@ l 150 0 m -150 100 l 150 0 m 0 20 l 0 -240 0 20 20 0 m -20 100 l 20
 #X obj 140 183 pack 0.42 0;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array csm 62079 float 2 black black;
-#X coords 0 1 62078 -1 114 59 1;
+#X coords 0 1 62079 -1 114 59 1;
 #X restore 509 6 graph;
 #X obj 422 238 output~;
 #X msg 310 73 0 \, 1 4200;