diff --git a/pd/doc/3.audio.examples/B03.tabread4.pd b/pd/doc/3.audio.examples/B03.tabread4.pd
index 3d7ba64860ac31f644b2b8ad1db44fd995fd3931..691f60e860d6167e1fdd7be8379a1cef03f0a437 100644
--- a/pd/doc/3.audio.examples/B03.tabread4.pd
+++ b/pd/doc/3.audio.examples/B03.tabread4.pd
@@ -1,6 +1,6 @@
-#N canvas 374 90 626 581 10;
+#N canvas 374 90 452 581 10;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array waveform12 131 float 1;
+#X array waveform12 131 float 1 black black;
 #A 0 -0.172615 -0.172615 -0.172615 -0.172615 -0.172615 -0.141231 -0.109846
 -0.0941538 -0.0627692 -0.0470769 0.0156923 0.0784615 0.125538 0.188308
 0.235385 0.298154 0.360923 0.392308 0.470769 0.533538 0.596308 0.643385
@@ -18,8 +18,8 @@
 0.219692 0.109846 -0.0156923 -0.0941538 -0.109846 -0.141231 -0.156923
 -0.172615 -0.188308 -0.204 -0.204 -0.219692 -0.204 -0.204 -0.219692
 -0.219692 -0.204 -0.204 -0.204 -0.204 -0.204 -0.188308;
-#X coords 0 1.02 130 -1.02 258 130 1;
-#X restore 311 42 graph;
+#X coords 0 1.02 131 -1.02 150 80 1;
+#X restore 274 39 graph;
 #X floatatom 131 292 0 0 100 0 - - -;
 #N canvas 159 26 532 285 output 0;
 #X obj 338 160 t b;
@@ -91,9 +91,9 @@
 #X text 164 38 squeeze;
 #X text 92 38 frequency;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array wave-out12 441 float 0;
-#X coords 0 1 440 -1 300 140 1;
-#X restore 311 202 graph;
+#X array wave-out12 441 float 0 black black;
+#X coords 0 1 441 -1 150 80 1;
+#X restore 274 124 graph;
 #X obj 127 260 tabwrite~ wave-out12;
 #X msg 127 234 bang;
 #X obj 170 128 +~ 128;
@@ -122,7 +122,7 @@ Wilkes revised the patch to conform to the PDDP template for Pd version
 #X text 7 2 wavetable oscillators- Related Help Documents;
 #X text 19 37 list the other tab-objects here;
 #X restore 103 561 pd References;
-#X text 18 352 The [tabread4~] module is available for situations requiring
+#X text 18 343 The [tabread4~] module is available for situations requiring
 more control than [tabosc4~] offers. The relationship between the two
 is the same as between [cos~] and [osc~] \, although the units are
 different between [cos~] and [tabread4~]. [cos~] assumes input is normalized
diff --git a/pd/doc/3.audio.examples/B07.sampler.pd b/pd/doc/3.audio.examples/B07.sampler.pd
index 813bd6ae0578c517eb6d3a11626551a0b4e0ee11..4623e1ebd2382c641ca3e4a9ff1b1c0b8a4feee4 100644
--- a/pd/doc/3.audio.examples/B07.sampler.pd
+++ b/pd/doc/3.audio.examples/B07.sampler.pd
@@ -2,8 +2,8 @@
 #X obj 22 199 hip~ 5;
 #X text 81 199 high pass filter to cut DC;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array sample-table 44104 float 0;
-#X coords 0 1.02 44103 -1.02 200 130 1;
+#X array sample-table 44104 float 0 black black;
+#X coords 0 1.02 44104 -1.02 200 130 1;
 #X restore 99 243 graph;
 #X obj 22 172 tabread4~ sample-table;
 #X obj 22 142 line~;
@@ -14,10 +14,10 @@
 #X text 64 93 convert to SAMPLES (441 samples in 0.01 sec);
 #X text 168 164 read from the table;
 #X text 169 178 (the input is the index in samples);
-#X text 17 488 For more on reading and writing soundfiles to tables
+#X text 17 493 For more on reading and writing soundfiles to tables
 \, setting their lengths \, etc \, see "arrays" in the "control examples"
 series.;
-#X text 17 526 Fanatics take note: if you want really high-fidelity
+#X text 17 533 Fanatics take note: if you want really high-fidelity
 sampling \, use a high-quality resampling program to up-sample your
 soundfile to 88200 to drastically reduce interpolation error.;
 #X text 65 142 convert smoothly to audio signal;
@@ -61,7 +61,7 @@ Wilkes revised the patch to conform to the PDDP template for Pd version
 #X text 7 2 sampler- Related Help Documents;
 #X text 19 37 links:;
 #X restore 103 589 pd References;
-#X text 17 394 This patch introduces the [tabread4~] object \, which
+#X text 17 388 This patch introduces the [tabread4~] object \, which
 reads audio samples out of a floating-point array \, often called a
 "sample table." The input is the index of the sample to read \, counting
 from zero. The output is calculated using 4-point cubic interpolation
diff --git a/pd/doc/5.reference/tabread4~-help.pd b/pd/doc/5.reference/tabread4~-help.pd
index 897fc64b1014e398df9cdbd3fdebb46d40455a9f..59986b38c31bd82f065b28010737620733a7ff8d 100644
--- a/pd/doc/5.reference/tabread4~-help.pd
+++ b/pd/doc/5.reference/tabread4~-help.pd
@@ -1,48 +1,141 @@
-#N canvas 323 179 845 474 12;
-#X obj 11 249 tabread4~ array99;
+#N canvas 429 34 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header tabread4~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 305 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 487 283 494 344 META 0;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 205 HELP_PATCH_AUTHORS Updated for Pd version 0.29. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 KEYWORDS signal array;
+#X text 12 45 DESCRIPTION 4-point-interpolating table lookup;
+#X text 12 65 INLET_0 signal set;
+#X text 12 85 INLET_1 float;
+#X text 12 105 OUTLET_0 signal;
+#X text 12 185 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 417 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 449 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 510 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 218 331 428 294 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 21 38 Native Pd Objects;
+#X obj 24 61 tabread~;
+#X obj 98 61 tabread4;
+#X obj 173 61 tabwrite;
+#X obj 248 61 tabwrite~;
+#X obj 24 89 tabsend~;
+#X obj 100 89 tabreceive~;
+#X obj 200 89 tabplay~;
+#X obj 277 89 table;
+#X text 21 140 [array];
+#X obj 24 116 soundfiler;
+#X text 84 140 and fft objects.;
+#X obj 120 116 tabread4~;
+#X obj 211 116 getsize;
+#X obj 282 116 setsize;
+#X text 8 2 [tabread4~] Related Objects;
+#X text 21 170 Externals and other object libraries;
+#X obj 21 190 pddp/helplink zexy/tabdump;
+#X obj 21 210 pddp/helplink linear_path;
+#X text 102 210 <-- which library is this in?;
+#X text 102 230 <-- which library is this in?;
+#X obj 21 230 pddp/helplink score;
+#X text 102 250 <-- which library is this in?;
+#X obj 21 250 pddp/helplink tabenv;
+#X obj 21 270 pddp/helplink arraysize;
+#X restore 102 597 pd Related_objects;
+#X obj 78 314 cnv 17 3 75 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 426 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 479 12 tabread4~;
+#X text 11 23 4-point-interpolating table lookup;
+#X text 68 174 signal input x(n);
+#X obj 21 261 snapshot~;
+#X obj 40 239 metro 200;
+#X obj 21 115 sig~;
+#X floatatom 21 89 0 0 0 0 - - -;
+#X floatatom 21 284 0 0 0 0 - - -;
+#X text 98 313 signal;
+#X text 168 313 - the incoming signal is the index. Indices should
+range from 1 to the size of the array minus two \, so that the 4-point
+interpolation is meaningful.;
+#X text 53 83 Shift-drag the number box to see the effect of interpolation.
+;
+#X text 98 353 set;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array array99 10 float 3;
-#A 0 -0.5 -0.5 -0.5 0.5 0.5 0.5 0 0 0 0;
-#X coords 0 1 10 -1 250 200 1;
-#X restore 561 167 graph;
-#X text 127 21 4-point-interpolating table lookup;
-#X obj 11 337 snapshot~;
-#X obj 30 311 metro 200;
-#X obj 11 124 sig~;
-#X floatatom 11 98 6 0 10 0 - - -;
-#X obj 30 285 r readout;
-#X floatatom 11 363 0 0 0 0 - - -;
-#X text 59 92 incoming signal is index. Indices should range from 1
-to (size-2) so that the 4-point interpolation is meaningful. You can
-shift-drag the number box to see the effect of interpolation.;
-#X msg 23 161 set array99;
-#X text 113 160 "set" message permits you to switch between arrays
+#X array \$0-array 10 float 0 black black;
+#X coords 0 1 10 -1 160 100 1;
+#X restore 289 141 graph;
+#X text 98 425 signal;
+#X obj 40 217 loadbang;
+#X obj 100 515 pddp/pddplink all_about_arrays.pd -text all_about_arrays
+;
+#X text 168 467 - the name of the array or table from which [tabread4~]
+will read data. The array or table must exist in an open Pd patch/canvas
+or an error message will appear in the console.;
+#N canvas 117 345 428 159 init 0;
+#X msg 23 103 0 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 23 81 loadbang;
+#X text 8 2 [tabread4~] [table] initialization;
+#X text 20 38 This subpatch just initializes a [table] to some values.
+(Values in a [table] are not saved in the patch.);
+#X obj 23 125 s \$0-array;
+#X connect 0 0 5 0;
+#X connect 2 0 0 0;
+#X restore 289 269 pd init;
+#X text 168 353 - the "set" message \, followed by the name of an array
+\, permits you to switch between arrays (e.g. \, "set another_array").
+;
+#X text 80 467 1) symbol;
+#X text 18 44 [tabread4~] is used to build samplers and other table
+lookup algorithms. The interpolation scheme is 4-point polynomial.
+;
+#X obj 4 597 pddp/pddplink all_about_help_patches.pd -text Usage Guide
 ;
-#X text 139 249 creation argument initializes array name;
-#X text 11 403 see also the "array" tutorial in section 2 of the Pd
-documentation \, and these objects:;
-#X obj 47 21 tabread4~;
-#X text 563 16 click here to test;
-#X obj 12 442 tabwrite~;
-#X obj 157 442 tabread;
-#X obj 216 442 tabwrite;
-#X obj 281 442 tabsend~;
-#X obj 346 442 tabreceive~;
-#X text 7 58 Tabread4~ is used to build samplers and other table lookup
-algorithms. The interpolation scheme is 4-point polynomial.;
-#X obj 83 442 tabplay~;
-#X text 626 451 updated for Pd version 0.42;
-#X msg 582 40 \; readout 1 \; pd dsp 1 \;;
-#X floatatom 111 190 3 0 10 0 - - -;
-#X text 19 205 signal input;
-#X text 138 183 inlet sets onset into table. You can use this to improve
-the accuracy of indexing into the array. See B15.tabread4~-onset.pd
-for details.;
-#X connect 0 0 3 0;
-#X connect 3 0 8 0;
-#X connect 4 0 3 0;
-#X connect 5 0 0 0;
-#X connect 6 0 5 0;
-#X connect 7 0 4 0;
-#X connect 10 0 0 0;
-#X connect 25 0 0 1;
+#X obj 475 53 pddp/dsp;
+#X obj 100 530 pddp/pddplink ../3.audio.examples/B03.tabread4.pd -text
+doc/3.audio.examples/B03.tabread4.pd;
+#X obj 100 545 pddp/pddplink ../3.audio.examples/B04.tabread4.interpolation.pd
+-text doc/3.audio.examples/B04.tabread4.interpolation.pd;
+#X obj 78 396 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 395 float;
+#X obj 247 395 pddp/pddplink ../3.audio.examples/B15.tabread4~-onset.pd
+-text doc/3.audio.examples/B15.tabread4~-onset.pd;
+#X text 168 395 - onset. See:;
+#X obj 100 560 pddp/pddplink ../3.audio.examples/B06.table.switching.pd
+-text doc/3.audio.examples/B06.table.switching.pd;
+#X obj 100 575 pddp/pddplink ../3.audio.examples/B07.sampler.pd -text
+doc/3.audio.examples/B07.sampler.pd;
+#X obj 21 194 tabread4~ \$0-array;
+#X obj 289 247 table \$0-array2;
+#X obj 66 113 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1
+-1;
+#X obj 66 133 f \$0;
+#X msg 66 155 set \$1-array2;
+#X obj 170 280 s \$0-array2;
+#X msg 170 253 sinesum 256 1;
+#X connect 13 0 17 0;
+#X connect 14 0 13 0;
+#X connect 15 0 41 0;
+#X connect 16 0 15 0;
+#X connect 24 0 14 0;
+#X connect 41 0 13 0;
+#X connect 43 0 44 0;
+#X connect 44 0 45 0;
+#X connect 45 0 41 0;
+#X connect 47 0 46 0;