From 64f706be292185f27083b944bb61addc966bdc92 Mon Sep 17 00:00:00 2001
From: Ivica Ico Bukvic <ico@vt.edu>
Date: Thu, 21 Nov 2013 20:08:12 -0500
Subject: [PATCH] added Jonathan Wilkes' search plugin with some
 cosmetic/usability changes to the search window.

---
 packages/linux_make/debian/control.desktop    |    2 +-
 packages/linux_make/debian/control.raspbian   |    2 +-
 pd/doc/2.control.examples/01.PART1.hello.pd   |   81 +-
 pd/doc/2.control.examples/02.editing.pd       |   77 +-
 pd/doc/2.control.examples/03.connections.pd   |  135 +-
 pd/doc/2.control.examples/04.messages.pd      |   87 +-
 pd/doc/2.control.examples/05.counter.pd       |  110 +-
 pd/doc/2.control.examples/06.more.counters.pd |   98 +-
 pd/doc/2.control.examples/07.time.pd          |   91 +-
 pd/doc/2.control.examples/08.depthfirst.pd    |   94 +-
 pd/doc/2.control.examples/09.send_receive.pd  |   82 +-
 pd/doc/2.control.examples/10.more.messages.pd |  118 +-
 pd/doc/2.control.examples/11.review.pd        |  103 +-
 .../2.control.examples/12.PART2.subpatch.pd   |  140 +-
 pd/doc/2.control.examples/13.locality.pd      |   84 +-
 pd/doc/2.control.examples/14.dollarsigns.pd   |   35 +-
 pd/doc/2.control.examples/15.array.pd         |  134 +-
 pd/doc/2.control.examples/16.more.arrays.pd   |   83 +-
 pd/doc/2.control.examples/17.PART3.midi.pd    |   74 +-
 pd/doc/2.control.examples/18.conditional.pd   |  137 +-
 pd/doc/2.control.examples/19.random.pd        |  105 +-
 .../2.control.examples/20.weighted-random.pd  |   87 +-
 pd/doc/2.control.examples/21.markov.chain.pd  |  114 +-
 pd/doc/2.control.examples/22.random-walk.pd   |   93 +-
 pd/doc/2.control.examples/23.sequencing.pd    |   68 +-
 pd/doc/2.control.examples/24.loops.pd         |   89 +-
 pd/doc/2.control.examples/dollarsign.pd       |   70 +-
 pd/doc/2.control.examples/dollarsign2.pd      |  100 +-
 pd/doc/2.control.examples/sendnumber.pd       |   40 +-
 pd/doc/3.audio.examples/A00.intro.pd          |   39 +-
 pd/doc/3.audio.examples/A01.sinewave.pd       |   61 +-
 pd/doc/3.audio.examples/A02.amplitude.pd      |   78 +-
 pd/doc/3.audio.examples/A03.line.pd           |  113 +-
 pd/doc/3.audio.examples/A04.line2.pd          |  128 +-
 .../3.audio.examples/A05.output.subpatch.pd   |   61 +-
 pd/doc/3.audio.examples/A06.frequency.pd      |  115 +-
 pd/doc/3.audio.examples/A07.fusion.pd         |  125 +-
 pd/doc/3.audio.examples/A08.beating.pd        |   83 +-
 pd/doc/3.audio.examples/A09.frequency.mod.pd  |  101 +-
 pd/doc/3.audio.examples/A10.review.pd         |   92 +-
 pd/doc/3.audio.examples/B01.wavetables.pd     |   73 +-
 pd/doc/3.audio.examples/B02.two-wavetables.pd |   75 +-
 pd/doc/3.audio.examples/B03.tabread4.pd       |  121 +-
 .../B04.tabread4.interpolation.pd             |   89 +-
 pd/doc/3.audio.examples/B05.tabread.FM.pd     |   67 +-
 .../3.audio.examples/B06.table.switching.pd   |   71 +-
 pd/doc/3.audio.examples/B07.sampler.pd        |  102 +-
 pd/doc/3.audio.examples/B08.sampler.loop.pd   |  123 +-
 .../B09.sampler.loop.smooth.pd                |  143 +-
 .../3.audio.examples/B10.sampler.scratch.pd   |  147 +-
 .../3.audio.examples/B11.sampler.nodoppler.pd |  194 +-
 .../3.audio.examples/B12.sampler.transpose.pd |  189 +-
 .../3.audio.examples/B13.sampler.overlap.pd   |  239 +-
 .../B14.sampler.rockafella.pd                 |  272 ++-
 .../3.audio.examples/B15.tabread4~-onset.pd   |  136 +-
 pd/doc/3.audio.examples/B16.long-varispeed.pd |  330 +--
 pd/doc/3.audio.examples/C01.nyquist.pd        |  126 +-
 .../3.audio.examples/C02.sawtooth-foldover.pd |   77 +-
 pd/doc/3.audio.examples/C03.zipper.noise.pd   |   87 +-
 .../3.audio.examples/C04.control.to.signal.pd |   81 +-
 .../3.audio.examples/C05.sampler.oneshot.pd   |  173 +-
 .../3.audio.examples/C06.signal.to.control.pd |   47 +-
 .../3.audio.examples/C07.envelope.follower.pd |  229 +-
 .../3.audio.examples/C08.analog.sequencer.pd  |  129 +-
 pd/doc/3.audio.examples/C09.sample.hold.pd    |  158 +-
 .../3.audio.examples/C10.monophonic.synth.pd  |  203 +-
 pd/doc/3.audio.examples/D01.envelope.gen.pd   |   97 +-
 pd/doc/3.audio.examples/D02.adsr.pd           |   85 +-
 pd/doc/3.audio.examples/D03.envelope.dB.pd    |  118 +-
 .../3.audio.examples/D04.envelope.quartic.pd  |  125 +-
 pd/doc/3.audio.examples/D05.envelope.pitch.pd |  128 +-
 .../D06.envelope.portamento.pd                |  146 +-
 pd/doc/3.audio.examples/D07.additive.pd       |  103 +-
 pd/doc/3.audio.examples/D08.table.spectrum.pd |   71 +-
 pd/doc/3.audio.examples/D09.shepard.tone.pd   |  139 +-
 pd/doc/3.audio.examples/D10.sampler.notes.pd  |  275 ++-
 pd/doc/3.audio.examples/D11.sampler.poly.pd   |  193 +-
 pd/doc/3.audio.examples/D12.sampler.bis.pd    |  221 +-
 pd/doc/3.audio.examples/D13.additive.qlist.pd |   82 +-
 pd/doc/3.audio.examples/D14.vibrato.pd        |  154 +-
 pd/doc/3.audio.examples/E01.spectrum.pd       |  225 +-
 .../3.audio.examples/E02.ring.modulation.pd   |  247 +-
 pd/doc/3.audio.examples/E03.octave.divider.pd |  162 +-
 .../3.audio.examples/E04.difference.tone.pd   |   92 +-
 pd/doc/3.audio.examples/E05.chebychev.pd      |  127 +-
 pd/doc/3.audio.examples/E06.exponential.pd    |  190 +-
 pd/doc/3.audio.examples/E07.evenodd.pd        |  170 +-
 pd/doc/3.audio.examples/E08.phase.mod.pd      |  137 +-
 pd/doc/3.audio.examples/E09.FM.spectrum.pd    |  134 +-
 pd/doc/3.audio.examples/E10.complex.FM.pd     |  181 +-
 pd/doc/3.audio.examples/F01.pulse.pd          |  149 +-
 pd/doc/3.audio.examples/F02.just.say.pd       |  103 +-
 pd/doc/3.audio.examples/F03.pulse.spectrum.pd |  125 +-
 .../3.audio.examples/F04.waveshaping.pulse.pd |  130 +-
 .../3.audio.examples/F05.ring.modulation.pd   |  133 +-
 pd/doc/3.audio.examples/F06.packets.pd        |  155 +-
 .../3.audio.examples/F07.packet.spectrum.pd   |  102 +-
 pd/doc/3.audio.examples/F08.two.cosines.pd    |  118 +-
 pd/doc/3.audio.examples/F09.declickit.pd      |  105 +-
 pd/doc/3.audio.examples/F10.sweepable.FM.pd   |  175 +-
 pd/doc/3.audio.examples/F11.anharmonic.FM.pd  |  124 +-
 pd/doc/3.audio.examples/F12.paf.pd            |  193 +-
 pd/doc/3.audio.examples/F13.paf.control.pd    |  194 +-
 pd/doc/3.audio.examples/F14.wave.packet.pd    |  207 +-
 pd/doc/3.audio.examples/G01.delay.pd          |   95 +-
 pd/doc/3.audio.examples/G02.delay.loop.pd     |  107 +-
 pd/doc/3.audio.examples/G03.delay.variable.pd |  104 +-
 .../3.audio.examples/G04.control.blocksize.pd |   87 +-
 .../3.audio.examples/G05.execution.order.pd   |  111 +-
 pd/doc/3.audio.examples/G06.octave.doubler.pd |  161 +-
 pd/doc/3.audio.examples/G07.shaker.pd         |  144 +-
 pd/doc/3.audio.examples/G08.reverb.pd         |   96 +-
 pd/doc/3.audio.examples/G09.pitchshift.pd     |  247 +-
 pd/doc/3.audio.examples/H01.low-pass.pd       |   95 +-
 pd/doc/3.audio.examples/H02.high-pass.pd      |   99 +-
 pd/doc/3.audio.examples/H03.band-pass.pd      |   89 +-
 pd/doc/3.audio.examples/H04.filter.sweep.pd   |  135 +-
 pd/doc/3.audio.examples/H05.filter.floyd.pd   |  157 +-
 .../3.audio.examples/H06.envelope.follower.pd |  147 +-
 .../3.audio.examples/H07.measure.spectrum.pd  |  108 +-
 pd/doc/3.audio.examples/H08.heterodyning.pd   |  143 +-
 pd/doc/3.audio.examples/H09.ssb.modulation.pd |  105 +-
 pd/doc/3.audio.examples/H10.measurement.pd    |  106 +-
 pd/doc/3.audio.examples/H11.shelving.pd       |  107 +-
 pd/doc/3.audio.examples/H12.peaking.pd        |  172 +-
 pd/doc/3.audio.examples/H13.butterworth.pd    |  108 +-
 pd/doc/3.audio.examples/H14.all.pass.pd       |  105 +-
 pd/doc/3.audio.examples/H15.phaser.pd         |  104 +-
 .../3.audio.examples/H16.adsr.filter.qlist.pd |  173 +-
 .../3.audio.examples/I01.Fourier.analysis.pd  |  146 +-
 pd/doc/3.audio.examples/I02.Hann.window.pd    |  126 +-
 pd/doc/3.audio.examples/I03.resynthesis.pd    |   69 +-
 pd/doc/3.audio.examples/I04.noisegate.pd      |   99 +-
 pd/doc/3.audio.examples/I05.compressor.pd     |   79 +-
 pd/doc/3.audio.examples/I06.timbre.stamp.pd   |  121 +-
 pd/doc/3.audio.examples/I07.phase.vocoder.pd  |  228 +-
 pd/doc/3.audio.examples/I08.pvoc.reverb.pd    |   93 +-
 .../3.audio.examples/I09.sheep.from.goats.pd  |  150 +-
 pd/doc/3.audio.examples/I10.phase.bash.pd     |  177 +-
 pd/doc/3.audio.examples/J01.even.odd.pd       |  125 +-
 pd/doc/3.audio.examples/J02.trapezoids.pd     |  178 +-
 .../3.audio.examples/J03.pulse.width.mod.pd   |   99 +-
 pd/doc/3.audio.examples/J04.corners.pd        |  219 +-
 pd/doc/3.audio.examples/J05.triangle.pd       |  109 +-
 pd/doc/3.audio.examples/J06.enveloping.pd     |  167 +-
 pd/doc/3.audio.examples/J07.oversampling.pd   |   73 +-
 pd/doc/3.audio.examples/J08.classicsynth.pd   |  147 +-
 pd/doc/3.audio.examples/J09.bandlimited.pd    |  171 +-
 pd/doc/3.audio.examples/adsr.pd               |  192 +-
 pd/doc/3.audio.examples/buttercoef3.pd        |  160 +-
 pd/doc/3.audio.examples/butterworth3~.pd      |  208 +-
 pd/doc/3.audio.examples/osc-voice.pd          |    9 +-
 pd/doc/4.data.structures/01.scalars.pd        |  132 +-
 pd/doc/4.data.structures/02.getting.data.pd   |  147 +-
 pd/doc/4.data.structures/03.setting.data.pd   |  219 +-
 pd/doc/4.data.structures/04.append.pd         |   87 +-
 pd/doc/4.data.structures/05.array.pd          |  233 +-
 pd/doc/4.data.structures/06.file.pd           |  119 +-
 pd/doc/4.data.structures/07.sequencer.pd      |  142 +-
 pd/doc/4.data.structures/08.selection.pd      |  121 +-
 pd/doc/4.data.structures/09.scaling.pd        |  119 +-
 pd/doc/4.data.structures/10.onoff.pd          |  119 +-
 pd/doc/4.data.structures/11.array.controls.pd |   77 +-
 pd/doc/4.data.structures/12.beat-patterns.pd  |   63 +-
 pd/doc/4.data.structures/13.sliderule.pd      |   77 +-
 pd/doc/4.data.structures/14.partialtracer.pd  | 2071 +----------------
 pd/doc/4.data.structures/add-trace.pd         |    2 +-
 pd/doc/4.data.structures/beat-maker.pd        |    4 +-
 pd/doc/4.data.structures/data-array.pd        |   11 +-
 pd/doc/4.data.structures/data-start.pd        |    2 +-
 pd/src/pd.tk                                  |   13 +-
 pd/src/search-plugin.tcl                      | 1600 +++++++++++++
 172 files changed, 14068 insertions(+), 10365 deletions(-)
 create mode 100644 pd/src/search-plugin.tcl

diff --git a/packages/linux_make/debian/control.desktop b/packages/linux_make/debian/control.desktop
index 875e6286f..c6878e51c 100644
--- a/packages/linux_make/debian/control.desktop
+++ b/packages/linux_make/debian/control.desktop
@@ -6,7 +6,7 @@ Maintainer: Ivica Ico Bukvic <ico@vt.edu>
 Homepage: http://l2ork.music.vt.edu
 Package: pd-l2ork
 Architecture: i386
-Depends: xterm | x-terminal-emulator, ttf-dejavu-core, tcl, tk, libasound2, libjack-jackd2-0, libbluetooth3, libgl1-mesa-glx, libgl1-mesa-dri, libglu1-mesa, libglew-dev, libmagick++-dev, libftgl2, libgmerlin0, libgmerlin-avdec1, libavifile-0.7c2, libmpeg3-1, libquicktime2, libv4l-0, libraw1394-11, libdc1394-22, libfftw3-3, libvorbis0a, libmp3lame0, libspeex1, libgsl0ldbl, python, libsmpeg0, libjpeg62, tkpng, libflite1, libgsm1, libxv1, libstk0-dev, libsndobj-dev, libfluidsynth-dev
+Depends: xterm | x-terminal-emulator, ttf-dejavu-core, tcl, tk, libasound2, libjack-jackd2-0, libbluetooth3, libgl1-mesa-glx, libgl1-mesa-dri, libglu1-mesa, libglew-dev, libmagick++-dev, libftgl2, libgmerlin0, libgmerlin-avdec1, libavifile-0.7c2, libmpeg3-1, libquicktime2, libv4l-0, libraw1394-11, libdc1394-22, libfftw3-3, libvorbis0a, libmp3lame0, libspeex1, libgsl0ldbl, python, libsmpeg0, libjpeg62, tkpng, libflite1, libgsm1, libxv1, libstk0-dev, libsndobj-dev, libfluidsynth-dev, tclxapian
 Provides: pd-l2ork
 Installed-Size: 90624
 Recommends: xdg-utils, pulseaudio-utils, tap-plugins, ladspa-foo-plugins, invada-studio-plugins-ladspa, blepvco, swh-plugins, mcp-plugins, cmt, blop, slv2-jack, omins, ubuntustudio-audio-plugins, rev-plugins, libslv2-dev, dssi-utils, vco-plugins, wah-plugins, fil-plugins, mda-lv2
diff --git a/packages/linux_make/debian/control.raspbian b/packages/linux_make/debian/control.raspbian
index 33ffaae2b..454a450d2 100644
--- a/packages/linux_make/debian/control.raspbian
+++ b/packages/linux_make/debian/control.raspbian
@@ -6,7 +6,7 @@ Maintainer: Ivica Ico Bukvic <ico@vt.edu>
 Homepage: http://l2ork.music.vt.edu
 Package: pd-l2ork
 Architecture: i386
-Depends: xterm | x-terminal-emulator, ttf-dejavu-core, tcl, tk, libasound2, libjack-jackd2-0, libbluetooth3, libgl1-mesa-glx, libglu1-mesa, libftgl2, libgmerlin0, libgmerlin-avdec1, libavifile-0.7c2, libmpeg3-1, libquicktime2, libv4l-0, libraw1394-11, libdc1394-22, libfftw3-3, libvorbis0a, libmp3lame0, libspeex1, libgsl0ldbl, python, libsmpeg0, libjpeg62, tkpng, libflite1, libgsm1, libxv1, libstk0-dev, libsndobj-dev, libfluidsynth-dev
+Depends: xterm | x-terminal-emulator, ttf-dejavu-core, tcl, tk, libasound2, libjack-jackd2-0, libbluetooth3, libgl1-mesa-glx, libglu1-mesa, libftgl2, libgmerlin0, libgmerlin-avdec1, libavifile-0.7c2, libmpeg3-1, libquicktime2, libv4l-0, libraw1394-11, libdc1394-22, libfftw3-3, libvorbis0a, libmp3lame0, libspeex1, libgsl0ldbl, python, libsmpeg0, libjpeg62, tkpng, libflite1, libgsm1, libxv1, libstk0-dev, libsndobj-dev, libfluidsynth-dev, tclxapian
 Provides: pd-l2ork
 Installed-Size: 90624
 Recommends: xdg-utils, pulseaudio-utils, tap-plugins, ladspa-foo-plugins, invada-studio-plugins-ladspa, blepvco, swh-plugins, mcp-plugins, cmt, blop, slv2-jack, omins, ubuntustudio-audio-plugins, rev-plugins, libslv2-dev, dssi-utils, vco-plugins, wah-plugins, fil-plugins, mda-lv2
diff --git a/pd/doc/2.control.examples/01.PART1.hello.pd b/pd/doc/2.control.examples/01.PART1.hello.pd
index e0a4daf12..8023b351a 100644
--- a/pd/doc/2.control.examples/01.PART1.hello.pd
+++ b/pd/doc/2.control.examples/01.PART1.hello.pd
@@ -1,16 +1,69 @@
-#N canvas 9 21 600 496 12;
-#X msg 204 32 hello world;
-#X obj 204 105 print;
-#X floatatom 321 32 0 0 0;
-#X text 215 48 message;
-#X text 319 49 atom;
-#X text 201 123 object;
-#X text 53 150 There are four types of text objects in Pd: message \, atom \, object \, and comment.;
-#X text 54 187 Messages respond to mouse clicks by sending their contents to one or more destinations. The usual destination is the "outlet" at the lower left corner of the box.;
-#X text 55 239 Click the message box and watch the terminal window Pd was started in. You should see the "hello world" message appear.;
-#X text 55 278 Atoms respond to "Dragging" up and down with the mouse \, by changing their contents and sending the result out their outlets. You can also type at an atom after clicking on it \; hit "enter" to output the number or click anywhere else to cancel.;
-#X text 52 359 Objects \, like "print" above \, may have all sorts of functions depending on what's typed into them. The "print" object simply prints out every message it receives.;
-#X text 53 415 To get help on an object \, right-click it. You should see a "help window" for the object.;
-#X text 354 470 updated for release 0.33;
+#N canvas 0 0 448 496 10;
+#X msg 144 42 hello world;
+#X obj 144 116 print;
+#X floatatom 257 42 0 0 0 0 - - -;
+#X text 141 134 object;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header hello_world 20 10
+1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 474 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 94 237 494 284 META 0;
+#X text 12 115 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 95 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 135 HELP_PATCH_AUTHORS Miller Puckette. Updated for release
+0.33. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 65 DESCRIPTION the obligatory first program as in any programming
+language to print out "Hello World";
+#X text 12 25 KEYWORDS control GUI user_input;
+#X restore 382 476 pd META;
+#N canvas 20 281 428 279 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Hello World- Related Help Documents;
+#X text 19 37 Help patches and tutorials in Pure Data are themselves
+little programs called "patches". You can interact with the objects
+in them and even produce sound and edit the contents. The help patches
+and tutorials that come with Pd are read-only by default \, so you
+don't have to worry about changing them.;
+#X obj 18 247 pddp/pddplink http://lists.puredata.info/listinfo/pd-list
+;
+#X text 18 190 Netiquette guide:;
+#X obj 18 207 pddp/pddplink http://puredata.info/community/lists/Netiquette
+;
+#X text 18 110 Another "hello world" moment comes when you discover
+the Pd community that corresponds over the Pure Data user mailing list.
+You can search for answers to questions on there \, and if you're having
+a hard time finding info you can always ask questions \, too. See the
+netiquette page before posting \, though.;
+#X text 18 230 Pd user mailing list:;
+#X restore 103 476 pd References;
+#X obj 6 476 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 23 175 There are four types of text objects in Pd: message
+box \, atom box \, object \, and comment.;
+#X text 255 59 atom box;
+#X text 155 58 message box;
+#X text 23 210 Message boxes respond to mouse clicks by sending their
+contents to one or more destinations. The usual destination is the
+"outlet" at the lower left corner of the box.;
+#X text 74 50 outlet -->;
+#X text 23 258 Click the message box above and watch the terminal window
+Pd was started in. You should see the "hello world" message appear.
+;
+#X text 23 305 Atom boxes respond to clicking and dragging up and down
+with the mouse \, by changing their contents and sending the result
+out their outlets. You can also click an atom box and then type an
+atom. Hit "Enter" to output the number or click anywhere else to cancel.
+;
+#X text 23 376 Objects \, like [print] above \, may have all sorts
+of functions depending on what's typed into them. The [print] object
+simply prints out every message it receives.;
+#X text 23 425 To get help on an object \, right-click it then choose
+"Help" in the popup menu. You should see a "help window" for the object.
+;
 #X connect 0 0 1 0;
 #X connect 2 0 1 0;
diff --git a/pd/doc/2.control.examples/02.editing.pd b/pd/doc/2.control.examples/02.editing.pd
index a2442ee88..79dbd7d38 100644
--- a/pd/doc/2.control.examples/02.editing.pd
+++ b/pd/doc/2.control.examples/02.editing.pd
@@ -1,17 +1,64 @@
-#N canvas 1 0 581 630 12;
-#X msg 195 36 hello world;
-#X obj 195 72 print;
-#X floatatom 304 36 0 0 0;
-#X text 194 15 message;
-#X text 304 14 atom;
-#X text 255 73 object;
-#X text 34 102 When you first open a Pd document like this one \, your cursor will be an arrow. Select "edit mode" in the Edit menu and the cursor will change to the image of a hand. The patch is now in edit mode. You can move any object by dragging it.;
-#X text 33 185 Select "Edit mode" again in the Edit menu and you're back to the arrow cursor which acts on objects without moving them.;
-#X text 32 373 You can create new objects by duplicating existing ones using the "duplicate" menu item. You can also "cut" and "paste" them. If you duplicate several connected objects the connections will be replicated too.;
-#X text 33 237 In Edit mode \, if you click on a message \, object \, or comment \, you can then retype the text. For objects this will create a new object and delete the old one. Pd will try to reconnect the newly created object in the same way as the old one.;
-#X text 34 442 Edit mode also lets you make and break connections between objects. Put the "hand" cursor over a line connecting two objects: it turns into an X. Clicking will delete the connection. Hold the cursor over an outlet and it becomes a circle (a patch point). Drag to any box and release \; you will be connected to the nearest inlet.;
-#X text 32 320 When you're done changing the contents of the box \, click outside the box to deselect it. This tells Pd to incorporate the new text.;
-#X text 328 604 updated for Pd version 0.33;
-#X text 35 544 The "put" menu creates new text items of any of the four types. You can also put a "symbol" box \, analogous to a number box but for showing and entering text strings.;
+#N canvas 0 0 448 559 10;
+#X msg 145 43 hello world;
+#X obj 145 84 print;
+#X floatatom 254 43 0 0 0 0 - - -;
+#X text 32 281 When you're done changing the contents of the box \,
+click outside the box to deselect it. This tells Pd to incorporate
+the new text.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header editing 20 10 1
+18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 537 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 42 254 494 284 META 0;
+#X text 12 105 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 25 KEYWORDS control GUI;
+#X text 12 65 DESCRIPTION the basics of how to edit objects in Pd;
+#X text 12 125 HELP_PATCH_AUTHORS Miller Puckette. Updated for release
+0.33. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X restore 382 539 pd META;
+#X text 32 323 Edit mode also lets you make and break connections between
+objects. Put the "hand" cursor over a line connecting two objects:
+it turns into an X. Clicking will delete the connection. Hold the cursor
+over an outlet and it becomes a circle (a patch point). Drag to any
+box and release-- you will be connected to the nearest inlet.;
+#X text 32 401 There are several handy tools in the "Edit" menu. You
+can use the "Duplicate" menu item to create new objects by duplicating
+existing ones. You can also "Cut" and "Paste" them. If you duplicate
+several connected objects the connections will be replicated too.;
+#X text 32 468 Also have a look in the "Put" menu-- use it to create
+new text items of any of the four types. You can also put a "symbol"
+box \, analogous to a number box but for showing and entering text
+strings \, as well as other objects with more sophisticated graphical
+user interfaces.;
+#N canvas 19 470 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Editing- Related Help Documents;
+#X text 17 28 Notice that some of the menu items have shortcut keys
+listed beside them. Check out the one for Edit mode for a quick way
+to switch back and forth between Edit mode and Run mode.;
+#X restore 103 539 pd References;
+#X obj 6 539 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 144 24 message box;
+#X text 252 24 atom box;
+#X text 33 107 When you first open a Pd document like this one \, your
+cursor will be an arrow. Select "Edit Mode" in the "Edit" menu and
+the cursor will change to the image of a hand. The patch is now in
+Edit mode. You can move any object by dragging it.;
+#X text 33 173 Select "Edit Mode" again in the "Edit" menu and you're
+back to the arrow cursor which acts on objects without moving them.
+;
+#X text 33 215 In Edit Mode \, if you click on a message \, object
+\, or comment \, you can then retype the text. For objects this will
+create a new object and delete the old one. Pd will try to reconnect
+the newly created object in the same way as the old one.;
+#X text 77 51 outlet -->;
+#X text 188 84 <-- object;
 #X connect 0 0 1 0;
 #X connect 2 0 1 0;
diff --git a/pd/doc/2.control.examples/03.connections.pd b/pd/doc/2.control.examples/03.connections.pd
index 97d32f822..e3dc2fea7 100644
--- a/pd/doc/2.control.examples/03.connections.pd
+++ b/pd/doc/2.control.examples/03.connections.pd
@@ -1,46 +1,85 @@
-#N canvas 185 28 660 552 12;
-#X floatatom 76 400 0 0 0 0 - - -;
-#X floatatom 189 401 0 0 0 0 - - -;
-#X floatatom 76 307 0 0 0 0 - - -;
-#X floatatom 553 161 0 0 0 0 - - -;
-#X floatatom 599 162 0 0 0 0 - - -;
-#X obj 553 135 +;
-#X floatatom 553 105 0 0 0 0 - - -;
-#X obj 599 136 +;
-#X floatatom 26 109 0 0 0 0 - - -;
-#X floatatom 26 17 0 0 0 0 - - -;
-#X floatatom 48 41 0 0 0 0 - - -;
-#X obj 26 85 +;
-#X text 3 64 hot;
-#X text 53 66 cold;
-#X text 232 105 Here's the downside: drag this--->;
-#X text 551 180 good;
-#X text 600 181 bad;
-#X obj 76 376 *;
-#X obj 189 377 -;
-#X text 15 400 square;
-#X text 229 402 first difference;
-#X obj 76 330 trigger float float;
-#X text 412 526 updated for Pd version 0.33;
-#X text 19 433 Trigger takes any number of "bang" and "float" arguments
-(among others) and copies its input to its outlets \, in the requested
-forms \, in right-to-left order. Hook it to two inputs without crossing
-the wires and you get the expected result. Cross the wires and you
-get a memory effect.;
-#X text 9 136 In Pd you must sometimes think about what order an object
-is going to get its messages in. If an outlet is connected to more
-than one inlet it's undefined which inlet will get the cookie first.
-I've rigged this example so that the left-hand side box gets its inputs
-in the good \, right-to-left order \, so that the hot inlet gets hit
-when all the data are good. The "bad adder" happens to receive its
-inputs in the wrong order and is perpetually doing its addition before
-all the data are in. There's an object that exists solely to allow
+#N canvas 433 96 448 562 10;
+#X floatatom 28 518 0 0 0 0 - - -;
+#X floatatom 139 519 0 0 0 0 - - -;
+#X floatatom 28 417 0 0 0 0 - - -;
+#X floatatom 70 359 0 0 0 0 - - -;
+#X floatatom 106 359 0 0 0 0 - - -;
+#X obj 70 328 +;
+#X floatatom 70 278 0 0 0 0 - - -;
+#X obj 106 328 +;
+#X floatatom 180 164 0 0 0 0 - - -;
+#X floatatom 180 112 0 0 0 0 - - -;
+#X floatatom 215 112 0 0 0 0 - - -;
+#X obj 180 140 +;
+#X text 37 328 good;
+#X text 135 328 bad;
+#X obj 28 481 *;
+#X obj 139 482 -;
+#X obj 28 440 trigger float float;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header connections 20 10
+1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 540 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 42 254 494 284 META 0;
+#X text 12 115 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 95 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 25 KEYWORDS control;
+#X text 12 135 HELP_PATCH_AUTHORS Miller Puckette. Updated for release
+0.33. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 65 DESCRIPTION connections between objects \, and hot and
+cold inlets;
+#X restore 382 541 pd META;
+#N canvas 13 202 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Connections- Related Help Documents;
+#X text 19 67 There's a little glossary at (link) where you can see
+the synonyms for terms like connection and others.;
+#X text 19 37 Connections are also called "wires" \, "cords" \, "patch
+cords" \, and sometimes just "lines".;
+#X restore 103 541 pd References;
+#X obj 6 541 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 82 133 hot inlet --->;
+#X text 215 133 <--- cold inlet;
+#X text 176 315 received its input. The "bad" adder;
+#X text 176 328 happens to receive its inputs in the;
+#X text 176 341 wrong order and is perpetually doing;
+#X text 176 354 its addition before the right inlet;
+#X text 176 367 receives its data.;
+#X text 108 275 <--- Connection order ambiguity;
+#X text 38 384 Luckily \, there's an object that exists solely to allow
 you to control message order explicitly:;
-#X text 114 16 In Pd \, most objects carry out their functions when
-they get messages in their leftmost inlets \, and their other inlets
-are for storing values that can modify the next action. Here \, the
-"+" object does its thing only when the left-hand input changes.;
-#X connect 2 0 21 0;
+#X text 176 439 others) and copies its input to its;
+#X text 175 452 outlets \, in the requested forms \, in;
+#X text 37 183 In Pd you must often consider the order in which an
+object is going to get its messages. If an outlet is connected to more
+than one inlet it's not possible to look at a patch and tell which
+inlet will receive data first. Pd happens to choose based on the order
+in which the connections were made. I've rigged the example below so
+the [+] on the left gets its inputs in the "good" right-to-left order.
+;
+#X text 175 465 right-to-left order. Hook it to two;
+#X text 175 478 inputs without crossing the wires and;
+#X text 176 491 you get the expected result. Cross the;
+#X text 171 504 wires and you get a memory effect.;
+#X text 176 426 of "bang" and "float" arguments (among;
+#X text 176 413 The [trigger] object takes any number;
+#X text 177 289 The "hot" inlet of the "good" adder;
+#X text 177 302 gets hit after the "cold" one has;
+#X text 54 520 <-- square;
+#X text 167 520 <-- first difference;
+#X text 37 24 In Pd \, most objects carry out their functions when
+they get messages in their leftmost inlets. Other inlets are for storing
+values that can modify the next action. The [+] object below sends
+output only when the left-hand input changes. For this reason the leftmost
+inlet is called the "hot" \, or active \, inlet \, while the storage
+inlets are called "cold" inlets.;
+#X connect 2 0 16 0;
 #X connect 5 0 3 0;
 #X connect 6 0 7 0;
 #X connect 6 0 7 1;
@@ -50,9 +89,9 @@ are for storing values that can modify the next action. Here \, the
 #X connect 9 0 11 0;
 #X connect 10 0 11 1;
 #X connect 11 0 8 0;
-#X connect 17 0 0 0;
-#X connect 18 0 1 0;
-#X connect 21 0 17 0;
-#X connect 21 0 18 1;
-#X connect 21 1 17 1;
-#X connect 21 1 18 0;
+#X connect 14 0 0 0;
+#X connect 15 0 1 0;
+#X connect 16 0 14 0;
+#X connect 16 0 15 1;
+#X connect 16 1 14 1;
+#X connect 16 1 15 0;
diff --git a/pd/doc/2.control.examples/04.messages.pd b/pd/doc/2.control.examples/04.messages.pd
index a56dd92bb..108dae9a9 100644
--- a/pd/doc/2.control.examples/04.messages.pd
+++ b/pd/doc/2.control.examples/04.messages.pd
@@ -1,26 +1,67 @@
-#N canvas 0 0 591 442 12;
-#X floatatom 225 110 0 0 0;
-#X floatatom 184 109 0 0 0;
-#X msg 184 56 5 6;
-#X floatatom 132 108 0 0 0;
-#X floatatom 64 105 0 0 0;
-#X text 30 21 Most Pd messages are just numbers or short lists of numbers:;
-#X msg 64 55 5;
-#X obj 64 80 + 9;
-#X obj 132 83 +;
-#X obj 184 84 unpack;
-#X msg 288 55 5;
-#X obj 288 107 print;
-#X obj 288 81 pack 34 78;
-#X msg 132 55 5 6;
-#X floatatom 195 328 0 0 0;
-#X obj 195 303 +;
-#X msg 195 254 1.2 3.4;
-#X msg 205 277 5 6;
-#X text 36 206 Unlike Max \, in Pd all numbers are floating point. Numbers whose values happen to be integers are displayed without decimal points.;
-#X text 31 363 For more on messages \, get help on any message box by right-clicking.;
-#X text 329 409 updated for Pd release 0.33;
-#X text 34 149 If you send a list to an object with more than one inlet \, the items in the list are spread out over the inlets \, as seen in the 5+6 example above.;
+#N canvas 0 0 448 451 10;
+#X floatatom 210 123 0 0 0 0 - - -;
+#X floatatom 177 123 0 0 0 0 - - -;
+#X msg 177 71 5 6;
+#X floatatom 115 123 0 0 0 0 - - -;
+#X floatatom 47 123 0 0 0 0 - - -;
+#X text 19 37 Most Pd messages are just numbers or short lists of numbers:
+;
+#X msg 47 70 5;
+#X obj 47 98 + 9;
+#X obj 115 98 +;
+#X obj 177 98 unpack;
+#X msg 271 70 5;
+#X obj 271 122 print;
+#X obj 271 96 pack 34 78;
+#X msg 115 70 5 6;
+#X floatatom 165 345 0 0 0 0 - - -;
+#X obj 165 320 +;
+#X msg 165 271 1.2 3.4;
+#X msg 174 294 5 6;
+#X text 19 217 Unlike Max \, in Pd all numbers are floating point.
+Numbers whose values happen to be integers are displayed without decimal
+points.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header messages 20 10 1
+18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 428 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 79 230 494 284 META 0;
+#X text 12 105 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 25 KEYWORDS control GUI;
+#X text 12 125 HELP_PATCH_AUTHORS Miller Puckette. Updated for release
+0.33. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 65 DESCRIPTION messages and message passing in Pd;
+#X restore 382 430 pd META;
+#N canvas 7 226 428 287 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Messages- Related Help Documents;
+#X obj 26 91 pddp/pddplink ../5.reference/all_about_messages.pd -text
+doc/5.reference/all_about_messages.pd;
+#X obj 26 193 pddp/pddplink ../5.reference/all_about_atoms.pd -text
+doc/5.reference/all_about_atoms.pd;
+#X text 26 38 There are a bunch of patches in doc/5.reference/ that
+go into more detail about many of the objects and concepts mentioned
+here. Follow the link below to see a more detailed patch about message
+syntax in Pd:;
+#X obj 24 141 pddp/pddplink ../1.manual/index.htm;
+#X text 26 113 Also \, make sure to have a look at the Pd manual to
+learn the nuts and bolts of messages in Pd:;
+#X text 26 165 To find out more about atoms \, or discrete pieces of
+data that make up messages \, see:;
+#X restore 103 430 pd References;
+#X obj 6 430 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 167 If you send a list to the leftmost inlet of an object
+with more than one inlet \, the items in the list are spread out over
+the inlets \, as seen in the 5+6 example above.;
+#X text 19 378 For more on messages \, bring up the message box help
+patch by right-clicking any message box and choosing "Help".;
 #X connect 2 0 9 0;
 #X connect 6 0 7 0;
 #X connect 7 0 4 0;
diff --git a/pd/doc/2.control.examples/05.counter.pd b/pd/doc/2.control.examples/05.counter.pd
index 14c48dead..7c0a55a62 100644
--- a/pd/doc/2.control.examples/05.counter.pd
+++ b/pd/doc/2.control.examples/05.counter.pd
@@ -1,45 +1,73 @@
-#N canvas 0 0 685 496 12;
-#X floatatom 107 424 0 0 0;
-#X msg 53 344 bang;
-#X obj 107 399 + 1;
-#X obj 376 262 + 1;
-#X floatatom 152 197 0 0 0;
-#X floatatom 108 245 0 0 0;
-#X msg 108 196 bang;
-#X floatatom 169 107 0 0 0;
-#X msg 112 58 bang;
-#X obj 169 82 + 1;
-#X text 31 21 Here's a simple counter. Click repeatedly on the "bang
-message to see it:;
-#X text 422 263 to its cold inlet.;
-#X text 25 284 The incremented value is stored for the next "bang"
+#N canvas 0 0 448 525 10;
+#X floatatom 72 473 0 0 0 0 - - -;
+#X msg 28 393 bang;
+#X obj 72 448 + 1;
+#X floatatom 231 216 0 0 0 0 - - -;
+#X floatatom 187 264 0 0 0 0 - - -;
+#X msg 187 215 bang;
+#X floatatom 179 124 0 0 0 0 - - -;
+#X msg 132 74 bang;
+#X obj 179 99 + 1;
+#X text 56 308 to its cold inlet.;
+#X text 25 328 The incremented value is stored for the next "bang"
 to spit out.;
-#X text 28 322 Here's a timed counter. Hit the "bang" to start it...
+#X text 25 369 Here's a timed counter. Hit the "bang" to start it...
 ;
-#X obj 53 373 metro 500;
-#X msg 99 344 stop;
-#X obj 112 83 float;
-#X text 28 132 The "float" box is a storage element holding one floating-point
-number. The cold inlet (i.e. \, the one on the right) stores numbers.
-Sending the message "bang" to the hot inlet gets the number back out:
+#X obj 28 422 metro 500;
+#X msg 74 393 stop;
+#X obj 132 99 float;
+#X obj 187 240 float;
+#X obj 28 448 float;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header counter 20 10 1
+18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
 ;
-#X obj 108 221 float;
-#X obj 53 399 float;
-#X text 25 263 Float's outlet above is connected via;
-#X text 384 462 updated for Pd version 0.34;
-#X text 142 373 <-- new object: metronome. The "500" means every 500
-milliseconds--i.e. \, twice a second.;
-#X connect 1 0 14 0;
+#X obj 1 503 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 42 254 494 284 META 0;
+#X text 12 105 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 25 KEYWORDS control;
+#X text 12 65 DESCRIPTION how to build a simple counter;
+#X text 12 125 HELP_PATCH_AUTHORS Miller Puckette. Updated for release
+0.34. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X restore 382 505 pd META;
+#X text 25 148 The [float] object is a storage element holding one
+floating-point number. The cold inlet (i.e. \, the one on the right)
+stores numbers. Sending the message "bang" to the hot inlet gets the
+number back out:;
+#X obj 28 308 + 1;
+#X text 25 288 The outlet of the [float] object at the top is connected
+via;
+#X text 104 422 <-- new object: [metro] \, which is a metronome. The
+"500" means it outputs a bang every 500 milliseconds-- i.e. \, twice
+a second.;
+#N canvas 19 408 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Counter- Related Help Documents;
+#X obj 53 74 mod;
+#X obj 95 74 %;
+#X text 50 37 To build a counter that resets after it reaches a specified
+value \, check out the [mod] object and the [%] object.;
+#X restore 103 505 pd References;
+#X obj 6 505 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 26 37 Here's a simple counter. Click repeatedly on the "bang"
+message to see it work:;
+#X connect 1 0 12 0;
 #X connect 2 0 0 0;
-#X connect 2 0 19 1;
-#X connect 4 0 18 1;
-#X connect 6 0 18 0;
-#X connect 8 0 16 0;
-#X connect 9 0 7 0;
-#X connect 9 0 16 1;
-#X connect 14 0 19 0;
-#X connect 15 0 14 0;
-#X connect 15 0 14 0;
-#X connect 16 0 9 0;
-#X connect 18 0 5 0;
-#X connect 19 0 2 0;
+#X connect 2 0 16 1;
+#X connect 3 0 15 1;
+#X connect 5 0 15 0;
+#X connect 7 0 14 0;
+#X connect 8 0 6 0;
+#X connect 8 0 14 1;
+#X connect 12 0 16 0;
+#X connect 13 0 12 0;
+#X connect 13 0 12 0;
+#X connect 14 0 8 0;
+#X connect 15 0 4 0;
+#X connect 16 0 2 0;
diff --git a/pd/doc/2.control.examples/06.more.counters.pd b/pd/doc/2.control.examples/06.more.counters.pd
index e0ef3c409..e18cc4747 100644
--- a/pd/doc/2.control.examples/06.more.counters.pd
+++ b/pd/doc/2.control.examples/06.more.counters.pd
@@ -1,35 +1,57 @@
-#N canvas 8 0 659 487 12;
-#X floatatom 147 177 0 0 0;
-#X obj 147 151 + 1;
-#X msg 147 47 bang;
-#X obj 147 99 metro 500;
-#X msg 56 105 stop;
-#X obj 147 125 float;
-#X obj 147 73 trigger bang bang;
-#X msg 261 105 0;
-#X obj 56 79 select 10;
-#X text 305 102 first set value to zero;
-#X text 304 73 initialization is in two steps;
-#X text 305 121 (before starting the metronome);
-#X text 9 128 conditionally;
-#X text 9 145 stop the;
-#X text 10 159 metronome;
-#X text 184 46 <--- click here to start;
-#X floatatom 85 289 0 0 0;
-#X obj 85 315 >= 0;
-#X obj 85 341 select 0 1;
-#X obj 85 393 float;
-#X floatatom 139 420 0 0 0;
-#X msg 119 367 bang;
-#X obj 139 394 + 1;
-#X msg 85 367 -1;
-#X text 131 313 <-- are we nonnegative? (1 if true \, 0 if false);
-#X text 180 340 <-- selectively bang the first or second outlet;
-#X text 167 363 <-- as a result either clear or increment the counter
+#N canvas 0 0 448 509 10;
+#X floatatom 127 209 0 0 0 0 - - -;
+#X obj 127 183 + 1;
+#X msg 127 79 bang;
+#X obj 127 131 metro 500;
+#X msg 38 137 stop;
+#X obj 127 157 float;
+#X obj 127 105 trigger bang bang;
+#X msg 226 131 0;
+#X obj 38 111 select 10;
+#X text 255 131 first set value to zero;
+#X text 244 105 initialization is in two steps;
+#X text 225 150 (before starting the metronome);
+#X text 15 162 conditionally;
+#X text 15 179 stop the;
+#X text 16 193 metronome;
+#X floatatom 25 321 0 0 0 0 - - -;
+#X obj 25 347 >= 0;
+#X obj 25 373 select 0 1;
+#X obj 25 425 float;
+#X floatatom 72 451 0 0 0 0 - - -;
+#X msg 59 399 bang;
+#X obj 72 425 + 1;
+#X msg 25 399 -1;
+#X text 71 347 <-- are we nonnegative? (1 if true \, 0 if false);
+#X text 100 373 <-- selectively bang the first or second outlet;
+#X text 100 400 <-- as a result either clear or increment the counter
 ;
-#X text 32 11 Here's a counter that counts from 1 to 10:;
-#X text 392 452 updated for Pd version 0.34;
-#X text 33 200 We're using one new object \, "select \, " which outputs
+#X text 19 37 Here's a counter that counts from 1 to 10:;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header more_counters 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 487 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 76 223 494 284 META 0;
+#X text 12 105 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 25 KEYWORDS control;
+#X text 12 65 DESCRIPTION examples of simple counters;
+#X text 12 125 HELP_PATCH_AUTHORS Miller Puckette. Updated for release
+0.34. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X restore 382 489 pd META;
+#X text 164 79 <-- click here to start;
+#N canvas 12 434 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Counter- Related Help Documents;
+#X restore 103 489 pd References;
+#X obj 6 489 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 33 232 We're using one new object \, [select] \, which outputs
 a bang when it gets a matching value (10). This is useful for doing
 conditional computations \, such as this one which counts while its
 input is 0 or positive but clears when negative:;
@@ -44,12 +66,12 @@ input is 0 or positive but clears when negative:;
 #X connect 6 1 7 0;
 #X connect 7 0 5 1;
 #X connect 8 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 23 0;
-#X connect 18 1 21 0;
-#X connect 19 0 22 0;
+#X connect 17 0 22 0;
+#X connect 17 1 20 0;
+#X connect 18 0 21 0;
+#X connect 20 0 18 0;
+#X connect 21 0 18 1;
 #X connect 21 0 19 0;
-#X connect 22 0 19 1;
-#X connect 22 0 20 0;
-#X connect 23 0 19 0;
+#X connect 22 0 18 0;
diff --git a/pd/doc/2.control.examples/07.time.pd b/pd/doc/2.control.examples/07.time.pd
index 69398bd9c..b27fd1bd8 100644
--- a/pd/doc/2.control.examples/07.time.pd
+++ b/pd/doc/2.control.examples/07.time.pd
@@ -1,39 +1,70 @@
-#N canvas 0 0 724 474 12;
-#X text 34 13 Besides the metronome \, there are three objects for
+#N canvas 0 0 448 540 10;
+#X text 19 37 Besides the metronome \, there are three objects for
 dealing with time:;
-#X obj 64 117 print;
-#X msg 64 59 bang;
-#X msg 110 61 stop;
-#X obj 64 89 delay 2000;
-#X text 161 44 The delay objects sechedules an event for a future time
+#X obj 22 130 print;
+#X msg 22 72 bang;
+#X msg 68 74 stop;
+#X obj 22 102 delay 2000;
+#X msg 156 230 bang;
+#X obj 156 277 timer;
+#X text 89 163 The right inlet can be used to set the time value without
+scheduling any output.;
+#X obj 183 255 delay 123.45;
+#X floatatom 156 302 0 0 0 0 - - -;
+#X obj 22 458 pipe 2000;
+#X floatatom 22 431 0 0 0 0 - - -;
+#X floatatom 22 484 0 0 0 0 - - -;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header time 20 10 1 18
+-261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 518 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 42 254 494 284 META 0;
+#X text 12 105 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 25 KEYWORDS control time;
+#X text 12 65 DESCRIPTION dealing with time in Pd;
+#X text 12 125 HELP_PATCH_AUTHORS Miller Puckette. Updated for release
+0.34. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X restore 382 520 pd META;
+#X text 90 100 The [delay] object schedules an event for a future time
 expressed in milliseconds. Unlike in Max \, time values need not be
 integers. If a delay has been scheduled and you "bang" it again \,
-it is rescheduled (the previously scheduled output is cancelled.);
-#X msg 76 190 bang;
-#X obj 76 237 timer;
-#X text 160 117 The right inlet can be used to set the time value without
-scheduling any output.;
-#X text 35 156 The timer \, shown below \, measures the time elapsed
-between its left and right inlets:;
-#X obj 106 212 delay 123.45;
-#X floatatom 76 262 0 0 0;
-#X text 29 287 Note that all time calculations are idealized \; they
-do not show the effects of computation time or OS latency. This way
-you can write deterministic algorithms dealing with time passage.;
-#X obj 74 385 pipe 2000;
-#X floatatom 74 358 0 0 0;
-#X floatatom 74 411 0 0 0;
-#X text 165 359 The pipe object allocates memory dynamically in order
+it is rescheduled (the previously scheduled output is cancelled).;
+#X text 19 196 The [timer] object \, shown below \, measures the time
+elapsed between its left and right inlets:;
+#X text 85 440 The [pipe] object allocates memory dynamically in order
 to schedule any number of delayed events. The events may hold any collection
 of data (as usual \, for more details you can consult the help window.)
 ;
-#X text 442 440 updated for Pd version 0.34;
+#N canvas 7 429 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Time- Related Help Documents;
+#X obj 22 84 realtime;
+#X obj 22 111 cputime;
+#X text 19 37 There are several other Pd objects for keeping track
+of time. Check out their help patches for more info (right-click and
+choose "Help").;
+#X restore 103 520 pd References;
+#X text 60 380 (Important note: unlike most Pd objects \, [timer] has
+a "hot" right inlet and a cold left one. It only triggers output when
+it receives a bang to the right-inlet.);
+#X text 19 323 Note that all time calculations are idealized with [timer]--
+they do not show the effects of computation time or OS latency. This
+way you can write deterministic algorithms dealing with time passage.
+;
+#X obj 6 520 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 2 0 4 0;
 #X connect 3 0 4 0;
 #X connect 4 0 1 0;
-#X connect 6 0 7 0;
-#X connect 6 0 10 0;
-#X connect 7 0 11 0;
-#X connect 10 0 7 1;
-#X connect 13 0 15 0;
-#X connect 14 0 13 0;
+#X connect 5 0 6 0;
+#X connect 5 0 8 0;
+#X connect 6 0 9 0;
+#X connect 8 0 6 1;
+#X connect 10 0 12 0;
+#X connect 11 0 10 0;
diff --git a/pd/doc/2.control.examples/08.depthfirst.pd b/pd/doc/2.control.examples/08.depthfirst.pd
index 8820d2267..f80250d30 100644
--- a/pd/doc/2.control.examples/08.depthfirst.pd
+++ b/pd/doc/2.control.examples/08.depthfirst.pd
@@ -1,34 +1,58 @@
-#N canvas 144 162 632 551 12;
-#X msg 64 51 1;
-#X obj 89 150 + 1;
-#X obj 209 187 print x1;
-#X obj 64 209 print x3;
-#X obj 114 122 print x2;
-#X obj 209 100 + 1;
-#X obj 209 129 + 1;
-#X obj 209 158 + 1;
-#X obj 64 80 t f f f f;
-#X obj 89 179 print x2;
-#X text 34 13 In Pd \, message passing is depth first \, so that in
+#N canvas 0 0 448 563 10;
+#X msg 64 81 1;
+#X obj 81 176 + 1;
+#X obj 163 217 print x1;
+#X obj 64 229 print x3;
+#X obj 98 152 print x2;
+#X obj 163 145 + 1;
+#X obj 163 169 + 1;
+#X obj 163 193 + 1;
+#X obj 64 110 t f f f f;
+#X obj 81 200 print x2;
+#X text 19 37 In Pd \, message passing is depth first \, so that in
 this patch:;
-#X text 104 51 <-- click here;
-#X text 17 243 ... you get "x1" first \, notwidthstanding the fact
-that "x2" and "x3" appear to be closer to the source. This means that
-you shouldn't do this:;
-#X msg 76 304 1;
-#X text 116 304 <-- maybe you shouldn't click here;
-#X obj 115 334 + 1;
-#X obj 76 333 f;
-#X floatatom 76 365 0 0 0;
-#X text 377 520 updated for Pd version 0.34;
-#X text 35 393 ... because the "depth" is infinite. The counters you've
+#X text 104 81 <-- click here;
+#X msg 102 304 1;
+#X text 142 304 <-- maybe you shouldn't click here;
+#X obj 141 334 + 1;
+#X obj 102 333 f;
+#X floatatom 102 365 0 0 0 0 - - -;
+#X text 19 395 ... because the "depth" is infinite. The counters you've
 seen always have the message chain terminated somewhere in a cold inlet:
 ;
-#X msg 75 453 1;
-#X obj 114 483 + 1;
-#X obj 75 482 f;
-#X floatatom 75 514 0 0 0;
-#X text 115 453 <-- better;
+#X msg 105 448 1;
+#X obj 144 476 + 1;
+#X obj 105 475 f;
+#X floatatom 105 503 0 0 0 0 - - -;
+#X text 145 448 <-- better;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header depth_first 20 10
+1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 541 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 25 KEYWORDS control;
+#X text 12 65 DESCRIPTION depth first message passing explained;
+#X text 12 145 HELP_PATCH_AUTHORS Miller Puckette. Updated for release
+0.34. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X restore 382 543 pd META;
+#X text 19 257 ... you get "x1" first \, notwithstanding the fact that
+"x2" and "x3" appear to be closer to the source. This means that you
+shouldn't do this:;
+#N canvas 13 202 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Depth First- Related Help Documents;
+#X text 19 38 See pd manual for more info;
+#X restore 103 543 pd References;
+#X obj 6 543 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 8 0;
 #X connect 1 0 9 0;
 #X connect 5 0 6 0;
@@ -38,11 +62,11 @@ seen always have the message chain terminated somewhere in a cold inlet:
 #X connect 8 1 1 0;
 #X connect 8 2 4 0;
 #X connect 8 3 5 0;
-#X connect 13 0 16 0;
+#X connect 12 0 15 0;
+#X connect 14 0 15 0;
 #X connect 15 0 16 0;
-#X connect 16 0 17 0;
-#X connect 16 0 15 0;
-#X connect 20 0 22 0;
-#X connect 21 0 22 1;
-#X connect 22 0 23 0;
-#X connect 22 0 21 0;
+#X connect 15 0 14 0;
+#X connect 18 0 20 0;
+#X connect 19 0 20 1;
+#X connect 20 0 21 0;
+#X connect 20 0 19 0;
diff --git a/pd/doc/2.control.examples/09.send_receive.pd b/pd/doc/2.control.examples/09.send_receive.pd
index 374a74b5e..c67934946 100644
--- a/pd/doc/2.control.examples/09.send_receive.pd
+++ b/pd/doc/2.control.examples/09.send_receive.pd
@@ -1,32 +1,62 @@
-#N canvas 136 31 738 479 12;
-#X floatatom 88 199 0 0 0;
-#X obj 88 172 receive crackers;
-#X floatatom 248 204 0 0 0;
-#X obj 248 177 receive pickles;
-#X obj 88 145 send crackers;
-#X obj 250 139 send pickles;
-#X obj 389 138 send pickles;
-#X floatatom 392 203 0 0 0;
-#X obj 392 176 receive pickles;
-#X msg 51 306 \; pickles 99 \; crackers 56;
-#X floatatom 88 118 0 0 0;
-#X floatatom 250 112 0 0 0;
-#X floatatom 389 111 0 0 0;
-#X obj 371 404 r crackers;
-#X obj 371 377 s crackers;
-#X text 39 392 send and receive can be abbreviated:;
-#X text 48 245 You can use the semicolon feature of message boxes to
+#N canvas 0 0 448 494 10;
+#X floatatom 22 219 0 0 0 0 - - -;
+#X obj 22 192 receive crackers;
+#X floatatom 164 219 0 0 0 0 - - -;
+#X obj 164 192 receive pickles;
+#X obj 22 159 send crackers;
+#X obj 164 159 send pickles;
+#X obj 293 159 send pickles;
+#X floatatom 293 219 0 0 0 0 - - -;
+#X obj 293 192 receive pickles;
+#X msg 142 308 \; pickles 99 \; crackers 56;
+#X floatatom 22 132 0 0 0 0 - - -;
+#X floatatom 164 132 0 0 0 0 - - -;
+#X floatatom 293 132 0 0 0 0 - - -;
+#X obj 348 434 r crackers;
+#X obj 348 407 s crackers;
+#X text 19 261 You can use the semicolon feature of message boxes to
 address receives \, too. This is useful if you want to do a whole list
 of things:;
-#X text 166 305 The transaction takes place in zero time---i.e. \,
-if you tried to use "timer" to measure the time delay between the two
+#X text 19 357 The transaction takes place in zero time---i.e. \, if
+you tried to use "timer" to measure the time delay between the two
 \, you would get zero.;
-#X text 459 447 updated for Pd version 0.34;
-#X text 51 6 The send and receive objects allow you to make non-local
-connections. These work globally--you can use them to make two different
-patches intercommunicate if you wish. Any message a "send" gets appears
-at the output of every receive of the same name. There can be any number
-of sends and receives sharing the same name:;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header send_receive 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 472 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 105 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 125 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control nonlocal;
+#X text 12 65 DESCRIPTION introducing the send and receive objects
+;
+#X restore 382 474 pd META;
+#X text 19 419 [send] and [receive] can be abbreviated [s] and [r]:
+;
+#X text 19 38 The [send] and [receive] objects allow you to make non-local
+connections. These work globally-- you can use them to make two different
+patches intercommunicate if you wish. Any message a [send] gets appears
+at the output of every [receive] of the same name. There can be any
+number of [send] and [receive] objects sharing the same name:;
+#N canvas 11 287 428 174 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 [send] and [receive]- Related Help Documents;
+#X obj 20 71 pddp/pddplink ../5.reference/all_about_send_n_receive.pd
+-text all_about_send_n_receive;
+#X text 20 40 See the help patches for these objects \, as well as
+the one for message box. For more detailed info see:;
+#X text 20 102 Also have a look at the following object:;
+#X obj 23 127 value;
+#X restore 103 474 pd References;
+#X obj 6 474 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 0 0;
 #X connect 3 0 2 0;
 #X connect 8 0 7 0;
diff --git a/pd/doc/2.control.examples/10.more.messages.pd b/pd/doc/2.control.examples/10.more.messages.pd
index 7f0c85396..ab7efcc45 100644
--- a/pd/doc/2.control.examples/10.more.messages.pd
+++ b/pd/doc/2.control.examples/10.more.messages.pd
@@ -1,56 +1,84 @@
-#N canvas 91 95 675 539 12;
-#X obj 211 341 print;
-#X msg 52 89 3 \, 4 \, 5;
-#X msg 44 62 3 4 5;
-#X msg 57 313 3 \$1 5;
-#X floatatom 57 286 4 0 0;
-#X msg 211 315 \$2 \$1 5;
-#X msg 211 290 45 67;
-#X msg 289 290 45 67;
-#X floatatom 28 425 4 0 0;
-#X floatatom 76 425 4 0 0;
-#X floatatom 332 179 4 0 0;
-#X floatatom 186 182 4 0 0;
-#X obj 186 155 receive number9;
-#X obj 332 155 receive 9bis;
-#X obj 44 178 print;
-#X text 27 5 In addition to using semicolons to separate messages \,
-you can use commas \, which continue a stream of messages to the same
-destination. Thus:;
-#X msg 65 116 3 \; number9 5 \; 9bis 45;
-#X text 126 89 <-- three separate messages;
-#X text 109 58 <-- one message: the list \, "3 4 5".;
-#X text 167 114 <-- three separate messages \, with three destinations.
+#N canvas 0 0 448 573 10;
+#X obj 161 348 print;
+#X msg 30 111 3 \, 4 \, 5;
+#X msg 22 84 3 4 5;
+#X msg 25 322 3 \$1 5;
+#X floatatom 25 295 4 0 0 0 - - -;
+#X msg 161 320 \$2 \$1 5;
+#X msg 161 295 45 67;
+#X msg 239 295 45 67;
+#X floatatom 28 427 4 0 0 0 - - -;
+#X floatatom 63 427 4 0 0 0 - - -;
+#X floatatom 270 201 4 0 0 0 - - -;
+#X floatatom 164 204 4 0 0 0 - - -;
+#X obj 164 177 receive number9;
+#X obj 270 177 receive 9bis;
+#X obj 22 200 print;
+#X text 19 37 In addition to using semicolons to separate messages
+\, you can use commas \, which continue a stream of messages to the
+same destination. Thus:;
+#X msg 43 138 3 \; number9 5 \; 9bis 45;
+#X text 86 111 <-- three separate messages;
+#X text 67 84 <-- one message: the list \, "3 4 5".;
+#X text 113 151 <-- three separate messages \, with three destinations.
 ;
-#X text 406 511 updated for Pd version 0.34;
-#X msg 289 315 \; number9 \$1 \; 9bis \$2;
-#X text 9 209 You can use "$1" \, etc. \, as variables in messages.
-Send the message box a list whose elements supply the values. A number
-is just a list with one element.;
-#X obj 57 339 print;
-#X text 51 265 one variable:;
-#X text 216 263 two variables:;
-#X text 1 367 But to really exploit the possibilities using multiple
+#X msg 239 322 \; number9 \$1 \; 9bis \$2;
+#X obj 25 348 print;
+#X text 19 274 one variable:;
+#X text 166 274 two variables:;
+#X text 22 379 But to really exploit the possibilities using multiple
 variables \, you will need the "pack" object to get two or more values
 into the same message:;
-#X obj 28 507 print;
-#X obj 28 455 pack 0 0 0;
-#X floatatom 124 425 4 0 0;
-#X msg 28 481 cis \$1 \, boom \$2 \, bah \$3;
-#X text 124 455 <-- creation arguments to "pack" set the number of
-inlets.;
+#X obj 28 509 print;
+#X obj 28 457 pack 0 0 0;
+#X floatatom 99 427 4 0 0 0 - - -;
+#X msg 28 483 cis \$1 \, boom \$2 \, bah \$3;
+#X text 94 457 <-- creation arguments to "pack" set the number of inlets.
+;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header more_messages 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 551 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 54 300 494 284 META 0;
+#X text 12 115 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 95 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 25 KEYWORDS control nonlocal;
+#X text 12 135 HELP_PATCH_AUTHORS Miller Puckette. Updated for release
+0.34. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 65 DESCRIPTION how to send multiple messages and messages
+without wires;
+#X restore 382 553 pd META;
+#X text 19 227 You can use "\$1" \, "\$2" \, etc. \, as variables in
+messages. Send the message box a list whose elements supply the values.
+A number is just a list with one element.;
+#N canvas 7 488 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Messages- Related Help Documents;
+#X obj 37 51 pddp/pddplink ../5.reference/all_about_messages.pd -text
+doc/5.reference/all_about_messages.pd;
+#X obj 35 104 pddp/pddplink ../1.manual/index.htm;
+#X text 37 76 Also \, make sure to have a look at the Pd manual to
+learn the nuts and bolts of messages in Pd:;
+#X restore 103 553 pd References;
+#X obj 6 553 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 14 0;
 #X connect 2 0 14 0;
-#X connect 3 0 23 0;
+#X connect 3 0 21 0;
 #X connect 4 0 3 0;
 #X connect 5 0 0 0;
 #X connect 6 0 5 0;
-#X connect 7 0 21 0;
-#X connect 8 0 28 0;
-#X connect 9 0 28 1;
+#X connect 7 0 20 0;
+#X connect 8 0 26 0;
+#X connect 9 0 26 1;
 #X connect 12 0 11 0;
 #X connect 13 0 10 0;
 #X connect 16 0 14 0;
-#X connect 28 0 30 0;
-#X connect 29 0 28 2;
-#X connect 30 0 27 0;
+#X connect 26 0 28 0;
+#X connect 27 0 26 2;
+#X connect 28 0 25 0;
diff --git a/pd/doc/2.control.examples/11.review.pd b/pd/doc/2.control.examples/11.review.pd
index 9e5b6c953..79c581405 100644
--- a/pd/doc/2.control.examples/11.review.pd
+++ b/pd/doc/2.control.examples/11.review.pd
@@ -1,42 +1,65 @@
-#N canvas 255 248 675 539 12;
-#X text 406 511 updated for Pd version 0.34;
-#X obj 39 232 receive;
-#X obj 39 203 send;
-#X obj 39 289 pack;
-#X obj 111 233 r;
-#X obj 82 203 s;
-#X obj 40 348 timer;
-#X obj 40 60 float;
-#X obj 39 175 select;
-#X obj 40 89 +;
-#X obj 40 117 >=;
-#X obj 39 146 print;
-#X obj 39 260 trigger;
-#X obj 95 61 f;
-#X obj 100 176 sel;
-#X obj 111 259 t;
-#X obj 39 318 unpack;
-#X obj 40 435 pipe;
-#X obj 40 377 delay;
-#X obj 40 406 metro;
-#X text 20 8 So far we've seen the following objects \, some of which
+#N canvas 433 104 448 540 10;
+#X obj 60 254 receive;
+#X obj 60 227 send;
+#X obj 60 308 pack;
+#X obj 116 254 r;
+#X obj 98 227 s;
+#X obj 60 362 timer;
+#X obj 60 92 float;
+#X obj 60 200 select;
+#X obj 60 119 +;
+#X obj 60 146 >=;
+#X obj 60 173 print;
+#X obj 60 281 trigger;
+#X obj 115 93 f;
+#X obj 110 200 sel;
+#X obj 116 281 t;
+#X obj 60 335 unpack;
+#X obj 60 443 pipe;
+#X obj 60 389 delay;
+#X obj 60 416 metro;
+#X text 19 37 So far we've seen the following objects \, some of which
 have abbreviations. Right click on any one to get reference documentation:
 ;
-#X text 150 205 wireless message send;
-#X text 151 229 wireless message receive;
-#X text 145 175 test for two equal numbers;
-#X text 151 258 control message order and format;
-#X text 148 293 combine atoms (e.g. \, numbers) into a list;
-#X text 146 319 take a list apart into atoms;
-#X text 146 146 printout;
-#X text 147 90 arithmetic;
-#X text 75 89 (etc.);
-#X text 74 117 (etc.);
-#X text 145 117 comparison;
-#X text 145 60 store a number;
-#X text 145 348 measure elapsed time;
-#X text 145 379 pass a message after delay;
-#X text 145 437 multiple delay;
-#X text 143 409 repeated message;
-#X text 38 473 There are many others... you can see a complete list
-in INTRO.txt in the reference patches (../5.reference).;
+#X text 156 227 wireless message send;
+#X text 156 254 wireless message receive;
+#X text 155 200 test for two equal numbers;
+#X text 156 281 control message order and format;
+#X text 156 308 combine atoms (e.g. \, numbers) into a list;
+#X text 156 335 take a list apart into atoms;
+#X text 155 173 printout;
+#X text 155 119 arithmetic;
+#X text 95 119 (etc.);
+#X text 95 145 (etc.);
+#X text 155 145 comparison;
+#X text 155 92 store a number;
+#X text 156 362 measure elapsed time;
+#X text 156 389 pass a message after delay;
+#X text 156 443 multiple delay;
+#X text 155 416 repeated message;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header review 20 10 1 18
+-261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 518 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 105 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 25 KEYWORDS control;
+#X text 12 65 DESCRIPTION review of basic pd objects;
+#X text 12 125 HELP_PATCH_AUTHORS Miller Puckette. Updated for release
+0.34. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X restore 382 520 pd META;
+#N canvas 7 226 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Review- Related Help Documents;
+#X restore 103 520 pd References;
+#X obj 6 520 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 469 There are many others. You can see a complete list of
+internal Pd objects by right-clicking on an empty part of the patch
+and choosing "Help".;
diff --git a/pd/doc/2.control.examples/12.PART2.subpatch.pd b/pd/doc/2.control.examples/12.PART2.subpatch.pd
index 5bd403066..95878e878 100644
--- a/pd/doc/2.control.examples/12.PART2.subpatch.pd
+++ b/pd/doc/2.control.examples/12.PART2.subpatch.pd
@@ -1,72 +1,104 @@
-#N canvas 84 47 648 623 12;
-#X msg 29 318 bang;
-#X floatatom 432 341 0 0 0;
-#X text 32 14 You can nest entire windows inside Pd boxes (and so on
+#N canvas 433 87 448 590 10;
+#X msg 22 319 bang;
+#X floatatom 307 343 0 0 0 0 - - -;
+#X text 19 37 You can nest entire windows inside Pd boxes (and so on
 \, as deep as you wish.) There are two different ways to do it. First
 \, if you just want to add a room to the house \, so to speak \, type
 ;
-#N canvas 344 151 422 119 sample-subpatch 1;
+#N canvas 17 300 422 119 sample-subpatch 0;
 #X text 39 43 this is a subpatch of the main patch.;
-#X restore 29 85 pd sample-subpatch;
-#X text 201 85 <-- you can give the window a name as an argument;
-#N canvas 0 0 654 340 eager-adder 0;
-#X obj 62 73 inlet;
-#X obj 118 73 inlet;
-#X obj 62 188 outlet;
-#X obj 118 101 t b f;
-#X obj 62 156 +;
-#X text 197 23 this is a sample subpatch which maintains the sum of
-two inputs \, doing the computation when either input changes. IF it's
-the left input \, the "+" object takes care if it \; if the right \,
-the "trigger" object first gives the "+" the new value \, then "bangs"
-the right inlet to make "+" do the computation.;
-#X text 55 232 Aside: this shows why \, in Pd and Max \, objects such
+#X restore 22 95 pd sample-subpatch;
+#N canvas 0 22 512 237 eager-adder 0;
+#X obj 22 17 inlet;
+#X obj 78 17 inlet;
+#X obj 22 121 outlet;
+#X obj 78 44 t b f;
+#X obj 22 89 +;
+#X text 15 165 Aside: this shows why \, in Pd and Max \, objects such
 as "+" only trigger on their left inlets: it's easy to build up from
 there \, but if more than one inlet were "hot" \, you wouldn't be able
 to change both of them without firing the calculation twice.;
-#X text 197 112 Because of the two inlets and the one outlet \, the
+#X text 137 100 Because of the two inlets and the one outlet \, the
 containing box (int eh parent patch) has two inlets and one outlet.
 They respect the left-to-right order of the inlet and outlet objects
 in the subpatch.;
+#X text 137 11 This is a sample subpatch which maintains the sum of
+two inputs \, doing the computation when either input changes. IF it's
+the left input \, the "+" object takes care if it \; if the right \,
+the "trigger" object first gives the "+" the new value \, then "bangs"
+the right inlet to make "+" do the computation.;
 #X connect 0 0 4 0;
 #X connect 1 0 3 0;
 #X connect 3 0 4 0;
 #X connect 3 1 4 1;
 #X connect 4 0 2 0;
-#X restore 135 185 pd eager-adder;
-#X floatatom 135 158 0 0 0;
-#X floatatom 256 158 0 0 0;
-#X floatatom 135 213 0 0 0;
-#X text 26 235 There is also a facility for making many copies of a
+#X restore 125 194 pd eager-adder;
+#X floatatom 125 167 0 0 0 0 - - -;
+#X floatatom 206 167 0 0 0 0 - - -;
+#X floatatom 125 222 0 0 0 0 - - -;
+#X obj 22 343 sendnumber 45 cookies;
+#X msg 161 319 bang;
+#X floatatom 374 343 0 0 0 0 - - -;
+#X obj 307 316 r cookies;
+#X obj 374 316 r pretzels;
+#X text 19 120 If you click on the box (in run mode) the subwindow
+appears. Click on the one below to see how you give a subpatch inlets
+and outlets.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header subpatch 20 10 1
+18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 568 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control abstraction;
+#X text 12 65 DESCRIPTION subpatches in Pd;
+#X restore 382 570 pd META;
+#X text 141 95 <-- you can give the window a name as an argument;
+#X text 19 247 There is also a facility for making many copies of a
 patch which track any changes you make in the original. The subpatches
 are called abstractions. For example \, here's a simple abstraction
-that sends a number to a "receive" on command:;
-#X obj 29 342 sendnumber 45 cookies;
-#X msg 226 314 bang;
-#X obj 226 341 sendnumber 67 pretzels;
-#X floatatom 519 341 0 0 0;
-#X text 27 553 note that "$1" \, etc \, has a different meaning in
-object boxes (open one of the "sendnumber" abstractions for comments.)
+that sends a number to a [receive] on command:;
+#X text 19 374 There is a separate file in this directory named "sendnumber.pd"
+which is loaded every time you type "sendnumber" in an object box.
+Click on a "sendnumber" box above to see it. You can make changes in
+the subpatch and save them. The changes will be saved back to sendnumber.pd
+and not as part of this (containing) patch.;
+#X text 19 454 If you change one copy of an abstraction the change
+isn't made on any other copies until you choose to save your changes.
+Keep in mind \, however \, that if you have many copies or if your
+abstraction is fairly large \, it may take awhile for Pd to update
+all the abstractions.;
+#X text 19 520 Also \, note that "\$1" \, etc \, has a different meaning
+in object boxes (open one of the "sendnumber" abstractions for comments.)
 ;
-#X text 26 470 If you change one copy of an abstraction the change
-isn't automatically made on any other copies. You must keep track \,
-save the changes \, and cause Pd to reload the other copies (for example
-\, by closing and reopening the containing patch.);
-#X obj 432 314 r cookies;
-#X obj 519 314 r pretzels;
-#X text 31 107 If you click on the box (in run mode) the subwindow
-appears. Click on the one below to see how you give a subpatch inlets
-and outlets.;
-#X text 332 594 updated for Pd version 0.34;
-#X text 27 372 There is a separate file in this directory named "sendnumber.pd"
-which is loaded every time you type "sendnumber" in a box. Click on
-a "sendnumber" box above to see it. You can make changes in the subpatch
-and save them. The changes will be saved back to sendnumber.pd and
-not as part of this (containing) patch.;
-#X connect 0 0 10 0;
-#X connect 5 0 8 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 1;
-#X connect 11 0 12 0;
-#X connect 16 0 1 0;
-#X connect 17 0 13 0;
+#X obj 161 343 sendnumber 67 pretzels;
+#N canvas 4 464 428 187 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Subpatch- Related Help Documents;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X restore 22 62 pd;
+#X text 19 38 Check out the help patch for:;
+#X text 20 82 For more on the graphical capabilities of subpatches
+\, see:;
+#X text 20 101 manual wherever;
+#X obj 20 121 pddp/pddplink ../5.reference/all_about_canvas_properties.pd
+-text all_about_canvas_properties;
+#X restore 103 570 pd References;
+#X obj 6 570 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 8 0;
+#X connect 4 0 7 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 1;
+#X connect 9 0 23 0;
+#X connect 11 0 1 0;
+#X connect 12 0 10 0;
diff --git a/pd/doc/2.control.examples/13.locality.pd b/pd/doc/2.control.examples/13.locality.pd
index 6203ad98a..4b749b2cf 100644
--- a/pd/doc/2.control.examples/13.locality.pd
+++ b/pd/doc/2.control.examples/13.locality.pd
@@ -1,27 +1,59 @@
-#N canvas 24 192 606 297 12;
-#X floatatom 38 223 0 0 0;
-#X floatatom 191 221 0 0 0;
-#X text 356 264 updated for Pd version 0.34;
-#X text 32 14 You can use dollarsigns in abstractions to get local
+#N canvas 433 199 448 254 10;
+#X floatatom 22 194 0 0 0 0 - - -;
+#X floatatom 145 194 0 0 0 0 - - -;
+#X text 19 37 You can use dollarsigns in abstractions to get local
 sends and receives as shown here.;
-#X obj 29 85 dollarsign one;
-#X obj 167 86 dollarsign two;
-#X obj 38 196 r one-a;
-#X obj 191 194 r two-a;
-#X floatatom 110 225 0 0 0;
-#X floatatom 264 220 0 0 0;
-#X obj 110 197 r one-b;
-#X obj 264 191 r two-b;
-#X text 26 112 Open both copies to see what's happening...;
-#X floatatom 29 59 0 0 0;
-#X floatatom 124 58 0 0 0;
-#X floatatom 167 60 0 0 0;
-#X floatatom 264 58 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 1 0;
-#X connect 10 0 8 0;
-#X connect 11 0 9 0;
-#X connect 13 0 4 0;
-#X connect 14 0 4 1;
-#X connect 15 0 5 0;
-#X connect 16 0 5 1;
+#X obj 160 101 dollarsign two;
+#X obj 22 166 r one-a;
+#X obj 145 167 r two-a;
+#X floatatom 84 194 0 0 0 0 - - -;
+#X floatatom 208 194 0 0 0 0 - - -;
+#X obj 84 166 r one-b;
+#X obj 208 167 r two-b;
+#X text 19 132 Open both copies to see what's happening...;
+#X floatatom 22 74 0 0 0 0 - - -;
+#X floatatom 103 74 0 0 0 0 - - -;
+#X floatatom 160 75 0 0 0 0 - - -;
+#X floatatom 241 75 0 0 0 0 - - -;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header locality 20 10 1
+18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 232 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 21 325 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control nonlocal;
+#X text 12 65 DESCRIPTION dollarsign variables and locality in Pd;
+#X restore 382 234 pd META;
+#X obj 22 100 dollarsign one;
+#N canvas 13 202 428 196 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Locality- Related Help Documents;
+#X text 26 39 For more on dollarsigns \, see:;
+#X text 38 80 manual;
+#X text 27 58 help for message box;
+#X obj 26 99 pddp/pddplink ../5.reference/all_about_atoms.pd -text
+doc/5.reference/all_about_atoms.pd;
+#X obj 26 119 pddp/pddplink ../5.reference/all_about_dollarsign_zero.pd
+-text doc/5.reference/all_about_dollarsign_zero.pd;
+#X obj 26 139 pddp/pddplink ../5.reference/all_about_scope_and_locality.pd
+-text doc/5.reference/all_about_scope_and_locality.pd;
+#X restore 103 234 pd References;
+#X obj 6 234 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 4 0 0 0;
+#X connect 5 0 1 0;
+#X connect 8 0 6 0;
+#X connect 9 0 7 0;
+#X connect 11 0 19 0;
+#X connect 12 0 19 1;
+#X connect 13 0 3 0;
+#X connect 14 0 3 1;
diff --git a/pd/doc/2.control.examples/14.dollarsigns.pd b/pd/doc/2.control.examples/14.dollarsigns.pd
index c4b6eee3e..21fdaf61e 100644
--- a/pd/doc/2.control.examples/14.dollarsigns.pd
+++ b/pd/doc/2.control.examples/14.dollarsigns.pd
@@ -1,5 +1,32 @@
-#N canvas 12 363 561 155 12;
-#X text 303 114 updated for Pd version 0.34;
-#X obj 34 68 dollarsign2 three 4;
-#X text 32 14 An abstraction's creation arguments may be either numbers
+#N canvas 433 237 448 139 10;
+#X obj 103 79 dollarsign2 three 4;
+#X text 19 37 An abstraction's creation arguments may be either numbers
 or symbols. Gory details are inside:;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header dollarsigns 20 10
+1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 117 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 29 301 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control abstraction;
+#X text 12 65 DESCRIPTION example patch for dollarsign variables;
+#X restore 382 119 pd META;
+#N canvas 13 202 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Dollar Signs- Related Help Documents;
+#X obj 63 53 pddp/pddplink ../5.reference/all_about_dollarsign_zero.pd
+-text doc/5.reference/all_about_dollarsign_zero.pd;
+#X obj 63 73 pddp/pddplink ../5.reference/all_about_atoms.pd -text
+doc/5.reference/all_about_atoms.pd;
+#X restore 103 119 pd References;
+#X obj 6 119 pddp/pddplink ../5.reference/pddp/help.pd -text help;
diff --git a/pd/doc/2.control.examples/15.array.pd b/pd/doc/2.control.examples/15.array.pd
index da054b1e5..ad8c470a5 100644
--- a/pd/doc/2.control.examples/15.array.pd
+++ b/pd/doc/2.control.examples/15.array.pd
@@ -1,70 +1,88 @@
-#N canvas 268 28 1030 744 12;
-#X text 204 19 ARRAYS;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 433 81 448 607 10;
+#N canvas 0 22 450 300 (subpatch) 0;
 #X array array99 100 float 0;
-#X coords 0 1 99 -1 400 300 1;
-#X restore 614 49 graph;
-#X msg 179 325 \; array99 resize \$1;
-#X floatatom 179 292 0 0 0;
-#X floatatom 21 260 0 0 0;
-#X obj 21 294 / 100;
-#X msg 21 324 \; array99 const \$1;
-#X text 22 233 You can send messages to an array object:;
-#X msg 341 325 \; array99 print;
-#X text 64 262 <-- set to a constant value;
-#X text 221 291 resize;
-#X text 342 286 print size;
-#X text 22 487 read a text file;
-#X text 23 558 write a text file;
-#X text 271 559 write a WAV format soundfile;
-#X obj 104 714 tabread;
-#X obj 255 714 tabwrite;
-#X text 20 665 Objects are provided for reading and writing the contents
-of arrays via control messages:;
-#X obj 602 654 tabread4~;
-#X obj 602 679 tabwrite~;
-#X obj 695 654 tabreceive~;
-#X text 593 601 ...and audio signals:;
-#X obj 695 630 tabsend~;
-#X msg 381 400 \; array99 normalize;
-#X msg 382 442 \; array99 normalize 0.5;
-#X text 375 378 normalize to 1 or otherwise;
-#X obj 266 537 soundfiler;
-#X obj 812 631 tabosc4~;
-#X msg 19 402 \; array99 sinesum 64 0.2 0.2 0.2 0.2;
-#X msg 19 444 \; array99 cosinesum 64 0.2 0.2 0.2 0.2;
-#X text 23 378 Fourier synthesis (resizes table);
-#X text 257 484 read a soundfile;
-#X text 735 698 last updated for release 0.34;
-#X obj 175 715 tabread4;
-#X obj 602 628 tabread~;
-#X msg 267 511 read ../sound/voice2.wav array99;
-#X text 19 47 Arrays in Pd provide a unified way to deal with lists
+#X coords 0 1 99 -1 150 100 1;
+#X restore 277 479 graph;
+#X msg 149 237 \; array99 resize \$1;
+#X floatatom 149 214 0 0 0 0 - - -;
+#X floatatom 21 190 0 0 0 0 - - -;
+#X obj 21 214 / 100;
+#X msg 21 237 \; array99 const \$1;
+#X text 18 167 You can send messages to an array object:;
+#X msg 286 237 \; array99 print;
+#X text 64 192 <-- set to a constant value;
+#X text 191 213 resize;
+#X text 295 213 print size;
+#X text 22 378 read a text file;
+#X text 18 446 write a text file;
+#X text 143 446 write a WAV format soundfile;
+#X msg 261 300 \; array99 normalize;
+#X msg 262 337 \; array99 normalize 0.5;
+#X text 259 275 normalize to 1 or otherwise;
+#X obj 216 425 soundfiler;
+#X msg 21 299 \; array99 sinesum 64 0.2 0.2 0.2 0.2;
+#X msg 21 336 \; array99 cosinesum 64 0.2 0.2 0.2 0.2;
+#X text 25 275 Fourier synthesis (resizes table);
+#X text 214 378 read a soundfile;
+#X msg 216 402 read ../sound/voice2.wav array99;
+#X text 19 37 Arrays in Pd provide a unified way to deal with lists
 of numbers \, treating them as either audio samples or for "control"
 uses. To make one \, select "array" on the "new" menu. Dialogs appear
 to help you choose the name \, number of elements \, and various flags.
 ;
-#X text 17 134 You can also change the array size using the "resize"
+#X text 18 101 You can also change the array size using the "resize"
 message shown below. Arrays live in graphs and graphs may hold more
 than one array--however \, graphs containing more than one array won't
 know how to readjust themselves automatically when the arrays are resized.
 ;
-#X msg 15 507 \; array99 read 15.file.txt;
-#X obj 26 581 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X msg 21 398 \; array99 read 15.file.txt;
+#X obj 21 469 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 26 600 savepanel;
-#X msg 26 623 \; array99 write \$1;
-#X obj 270 577 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 21 487 savepanel;
+#X msg 21 520 \; array99 write \$1;
+#X obj 145 468 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 270 596 savepanel;
-#X obj 270 642 soundfiler;
-#X msg 270 619 write \$1 array99;
-#X connect 3 0 2 0;
+#X obj 145 487 savepanel;
+#X obj 145 533 soundfiler;
+#X msg 145 510 write \$1 array99;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header arrays 20 10 1 18
+-261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 585 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 105 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 85 AUTHOR Miller Puckette;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 125 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control array;
+#X text 12 65 DESCRIPTION basic array methods;
+#X restore 382 587 pd META;
+#N canvas 13 366 428 212 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Arrays- Related Help Documents;
+#X obj 39 111 table;
+#X text 36 79 If you want to use arrays without needing to view them
+\, check out:;
+#X text 36 139 Arrays can also be part of data structures:;
+#X text 45 163 link to data-structures tutorial;
+#X obj 35 39 pddp/pddplink ../5.reference/all_about_arrays.pd -text
+doc/5.reference/all_about_arrays.pd;
+#X obj 35 59 pddp/pddplink ../5.reference/array-help.pd -text doc/5.reference/array-help.pd
+;
+#X restore 103 587 pd References;
+#X obj 6 587 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
 #X connect 4 0 5 0;
-#X connect 5 0 6 0;
-#X connect 35 0 26 0;
-#X connect 39 0 40 0;
-#X connect 40 0 41 0;
-#X connect 42 0 43 0;
-#X connect 43 0 45 0;
-#X connect 45 0 44 0;
+#X connect 22 0 17 0;
+#X connect 26 0 27 0;
+#X connect 27 0 28 0;
+#X connect 29 0 30 0;
+#X connect 30 0 32 0;
+#X connect 32 0 31 0;
diff --git a/pd/doc/2.control.examples/16.more.arrays.pd b/pd/doc/2.control.examples/16.more.arrays.pd
index cf9eacc18..f0b5fe3ef 100644
--- a/pd/doc/2.control.examples/16.more.arrays.pd
+++ b/pd/doc/2.control.examples/16.more.arrays.pd
@@ -1,23 +1,60 @@
-#N canvas 19 83 830 601 12;
-#X graph graph1 0 -1 5 1 569 304 769 154;
-#X array array99 5 float;
-#X array array98 7 float;
-#X pop;
-#X text 135 18 MORE ON ARRAYS;
-#X msg 17 229 \; array99 rename george;
-#X msg 221 229 \; george rename array99;
-#X msg 317 166 \; array99 3 -0.5 0.5;
-#X text 17 207 renaming an array:;
-#X text 16 276 setting the bounds rectangle:;
-#X msg 18 296 \; array99 bounds 0 -2 10 2;
-#X msg 245 294 \; array99 bounds 0 -1 5 1;
-#X msg 19 395 \; array99 xticks 0 1 1;
-#X msg 212 394 \; array99 yticks 0 0.1 5;
-#X text 15 342 adding x and y labels: give a point to put a tick \, the interval between ticks \, and the number of ticks overall per large tick.;
-#X msg 15 472 \; array99 xlabel -1.1 0 1 2 3 4 5;
-#X text 12 436 adding labels. Give a y value and a bunch of x values or vice versa:;
-#X msg 17 166 \; array98 0 -1 1 -1 1 -1 1 -1 1 -1;
-#X msg 305 472 \; array99 ylabel 5.15 -1 0 1;
-#X text 556 575 last updated for release 0.33;
-#X text 10 39 Arrays have methods to set their values explicitly \; to set their "bounds" rectangles \, to rename them (but if you have two with the same name this won't necessarily do what you want) and to add markings. To set values by message \, send a list whise first element gives the index to start at. The second example sets two values starting at index three. Indices count up from zero.;
-#X text 11 522 You can also change x and y range and size in the "properties" dialog. Note that information about size and ranges is saved \, but ticks \, labels \, and the actual data are lost between Pd sessions.;
+#N canvas 433 83 448 601 10;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X array array99 5 float 0;
+#X array array98 7 float 0;
+#X coords 0 1 5 -1 150 90 1;
+#X restore 211 484 graph;
+#X msg 22 182 \; array99 rename george;
+#X msg 196 182 \; george rename array99;
+#X msg 247 128 \; array99 3 -0.5 0.5;
+#X text 22 162 renaming an array:;
+#X text 21 219 setting the bounds rectangle:;
+#X msg 23 239 \; array99 bounds 0 -2 10 2;
+#X msg 210 239 \; array99 bounds 0 -1 5 1;
+#X msg 23 315 \; array99 xticks 0 1 1;
+#X msg 176 314 \; array99 yticks 0 0.1 5;
+#X text 20 273 adding x and y labels: give a point to put a tick \,
+the interval between ticks \, and the number of ticks overall per large
+tick.;
+#X msg 19 382 \; array99 xlabel -1.1 0 1 2 3 4 5;
+#X text 16 351 adding labels. Give a y value and a bunch of x values
+or vice versa:;
+#X msg 22 128 \; array98 0 -1 1 -1 1 -1 1 -1 1 -1;
+#X msg 239 382 \; array99 ylabel 5.15 -1 0 1;
+#X text 19 31 Arrays have methods to set their values explicitly \;
+to set their "bounds" rectangles \, to rename them (but if you have
+two with the same name this won't necessarily do what you want) and
+to add markings. To set values by message \, send a list whise first
+element gives the index to start at. The second example sets two values
+starting at index three. Indices count up from zero.;
+#X text 17 417 You can also change x and y range and size in the "properties"
+dialog. Note that information about size and ranges is saved \, but
+ticks \, labels \, and the actual data are lost between Pd sessions.
+;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header more_arrays 20 10
+1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 579 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 115 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 155 RELEASE_VERSION 0.41.4;
+#X text 12 135 RELEASE_DATE 2009-06-12;
+#X text 12 95 AUTHOR Miller Puckette;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 175 HELP_PATCH_AUTHORS Updated for release 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control array GUI;
+#X text 12 65 DESCRIPTION array methods for manipulating array data
+and appearance;
+#X restore 382 581 pd META;
+#N canvas 5 431 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Arrays- Related Help Documents;
+#X text 98 45 same links as other array tutorial;
+#X restore 103 581 pd References;
+#X obj 6 581 pddp/pddplink ../5.reference/pddp/help.pd -text help;
diff --git a/pd/doc/2.control.examples/17.PART3.midi.pd b/pd/doc/2.control.examples/17.PART3.midi.pd
index b2467cd94..ba5d8e5a7 100644
--- a/pd/doc/2.control.examples/17.PART3.midi.pd
+++ b/pd/doc/2.control.examples/17.PART3.midi.pd
@@ -1,27 +1,53 @@
-#N canvas 47 52 517 445 12;
-#X floatatom 108 89 0 0 0;
-#X floatatom 72 89 0 0 0;
-#X obj 36 62 notein;
-#X floatatom 36 88 0 0 0;
-#X floatatom 228 91 0 0 0;
-#X floatatom 192 91 0 0 0;
-#X floatatom 156 90 0 0 0;
-#X obj 156 64 ctlin;
-#X floatatom 319 90 0 0 0;
-#X floatatom 283 89 0 0 0;
-#X obj 283 63 bendin;
-#X floatatom 329 128 0 0 0;
-#X floatatom 285 127 0 0 0;
-#X obj 285 157 bendout;
-#X text 23 18 Pd offers input and output objects for MIDI:;
-#X text 358 154 ... ad nauseam.;
-#X text 254 417 updated for Pd version 0.34;
-#X obj 39 321 midiout;
-#X obj 244 368 sysexin;
-#X msg 39 291 240 \, 45 \, 93 \, 3 \, 65 \, 1 \, 2 \, 3 \, 4 \, 247
+#N canvas 424 82 448 355 10;
+#X floatatom 93 94 0 0 0 0 - - -;
+#X floatatom 57 94 0 0 0 0 - - -;
+#X obj 21 67 notein;
+#X floatatom 21 93 0 0 0 0 - - -;
+#X floatatom 213 96 0 0 0 0 - - -;
+#X floatatom 177 96 0 0 0 0 - - -;
+#X floatatom 141 95 0 0 0 0 - - -;
+#X obj 141 69 ctlin;
+#X floatatom 304 95 0 0 0 0 - - -;
+#X floatatom 268 94 0 0 0 0 - - -;
+#X obj 268 68 bendin;
+#X floatatom 314 133 0 0 0 0 - - -;
+#X floatatom 270 132 0 0 0 0 - - -;
+#X obj 270 162 bendout;
+#X text 19 38 Pd offers input and output objects for MIDI:;
+#X text 329 162 ... ad nauseam.;
+#X obj 21 260 midiout;
+#X obj 174 295 sysexin;
+#X msg 21 230 240 \, 45 \, 93 \, 3 \, 65 \, 1 \, 2 \, 3 \, 4 \, 247
 ;
-#X text 32 252 You can format your own SYSEX messages as shown:;
-#X text 28 366 and receive SYSEX via:;
+#X text 18 202 You can format your own SYSEX messages as shown:;
+#X text 18 293 and receive SYSEX via:;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header MIDI 20 10 1 18
+-261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 333 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control MIDI;
+#X text 12 65 DESCRIPTION simple MIDI input and output;
+#X restore 382 335 pd META;
+#N canvas 13 202 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 MIDI- Related Help Documents;
+#X text 59 79 list all the midi objects here too;
+#X obj 57 52 pddp/pddplink ../5.reference/all_about_midi_flags.pd -text
+doc/5.reference/all_about_midi_flags.pd;
+#X restore 103 335 pd References;
+#X obj 6 335 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 2 0 3 0;
 #X connect 2 1 1 0;
 #X connect 2 2 0 0;
@@ -32,4 +58,4 @@
 #X connect 10 1 8 0;
 #X connect 11 0 13 1;
 #X connect 12 0 13 0;
-#X connect 19 0 17 0;
+#X connect 18 0 16 0;
diff --git a/pd/doc/2.control.examples/18.conditional.pd b/pd/doc/2.control.examples/18.conditional.pd
index 6bde3747b..09187a393 100644
--- a/pd/doc/2.control.examples/18.conditional.pd
+++ b/pd/doc/2.control.examples/18.conditional.pd
@@ -1,59 +1,88 @@
-#N canvas 538 239 665 516 12;
-#X text 395 489 updated for Pd version 0.26;
-#X obj 87 148 select 1 2;
-#X floatatom 87 120 0 0 0;
-#X obj 87 214 print select-1;
-#X obj 119 194 print select-2;
-#X obj 152 171 print select-3;
-#X floatatom 313 122 0 0 0;
-#X obj 313 155 pack;
-#X obj 313 182 route 1 2;
-#X obj 353 131 t b f;
-#X floatatom 353 107 0 0 0;
-#X obj 371 210 unpack;
-#X floatatom 313 210 0 0 0;
-#X floatatom 342 210 0 0 0;
-#X floatatom 371 233 0 0 0;
-#X floatatom 409 234 0 0 0;
-#X text 30 20 Pd provides at least four objects for doing conditioonal
-computations. The "select" object tests its input against its argumt(s)
-\, and outputs "bang" when they match. The "route" object works similarly
-but also copies data. In other wors \, "route" takes a list \, tests
-its first element \, and conditionally passes on the rest of the list.
+#N canvas 433 105 448 537 10;
+#X obj 23 158 select 1 2;
+#X floatatom 23 130 0 0 0 0 - - -;
+#X obj 23 235 print select-1;
+#X obj 51 208 print select-2;
+#X obj 80 181 print select-3;
+#X floatatom 243 150 0 0 0 0 - - -;
+#X obj 243 183 pack;
+#X obj 243 207 route 1 2;
+#X obj 273 151 t b f;
+#X floatatom 273 127 0 0 0 0 - - -;
+#X obj 294 235 unpack;
+#X floatatom 243 235 0 0 0 0 - - -;
+#X floatatom 268 235 0 0 0 0 - - -;
+#X floatatom 294 258 0 0 0 0 - - -;
+#X floatatom 327 256 0 0 0 0 - - -;
+#X floatatom 24 330 0 0 0 0 - - -;
+#X obj 24 355 spigot;
+#X floatatom 57 330 0 0 0 0 - - -;
+#X floatatom 24 379 0 0 0 0 - - -;
+#X text 87 331 <-- nonzero to open;
+#X text 56 379 if open \, messages coming in at left are sent to output.
 ;
-#X text 56 262 You also get "spigot" which turns a flow of messages
-on and off (like the Gate object in Max \, but with the inputs reversed):
+#X floatatom 171 440 0 0 0 0 - - -;
+#X floatatom 171 489 0 0 0 0 - - -;
+#X obj 171 465 moses 5;
+#X floatatom 210 489 0 0 0 0 - - -;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header conditional 20 10
+1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
 ;
-#X floatatom 125 316 0 0 0;
-#X obj 125 341 spigot;
-#X floatatom 162 316 0 0 0;
-#X floatatom 125 365 0 0 0;
-#X text 192 317 <-- nonzero to open;
-#X text 157 365 if open \, messages coming in at left are sent to output.
+#X obj 1 515 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 135 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 115 AUTHOR Miller Puckette;
+#X text 12 95 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 155 HELP_PATCH_AUTHORS Updated for release 0.26. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control;
+#X text 12 65 DESCRIPTION creating conditional branches with control
+object;
+#X restore 382 517 pd META;
+#X text 20 283 You also get [spigot] which turns a flow of messages
+on and off (like the [gate] object in Max \, but with the inputs reversed):
 ;
-#X text 55 396 And finally \, "moses" sends numbers to the left if
+#X text 21 405 And finally \, [moses] sends numbers to the left if
 they're less than the argument \, right otherwise:;
-#X floatatom 125 427 0 0 0;
-#X floatatom 125 476 0 0 0;
-#X obj 125 452 moses 5;
-#X floatatom 169 476 0 0 0;
-#X connect 1 0 3 0;
-#X connect 1 1 4 0;
-#X connect 1 2 5 0;
-#X connect 2 0 1 0;
+#N canvas 21 442 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Conditional- Related Help Documents;
+#X text 25 42 For very powerful conditionals \, see the [expr] object.
+;
+#X obj 33 66 expr;
+#X obj 31 96 pddp/pddplink ../5.reference/all_about_expr_if.pd -text
+doc/5.reference/all_about_expr_if.pd;
+#X restore 103 517 pd References;
+#X obj 6 517 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 20 38 Pd provides at least four objects for doing conditional
+computations. The [select] object tests its input against its argument(s)
+\, and outputs a "bang" when they match. The [route] object works similarly
+but also copies data. In other words \, [route] takes a list \, tests
+its first element \, and conditionally passes on the rest of the list.
+;
+#X connect 0 0 2 0;
+#X connect 0 1 3 0;
+#X connect 0 2 4 0;
+#X connect 1 0 0 0;
+#X connect 5 0 6 0;
 #X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 8 0 12 0;
-#X connect 8 1 13 0;
-#X connect 8 2 11 0;
-#X connect 9 0 7 0;
-#X connect 9 1 7 1;
-#X connect 10 0 9 0;
-#X connect 11 0 14 0;
-#X connect 11 1 15 0;
-#X connect 18 0 19 0;
-#X connect 19 0 21 0;
-#X connect 20 0 19 1;
-#X connect 25 0 27 0;
-#X connect 27 0 26 0;
-#X connect 27 1 28 0;
+#X connect 7 0 11 0;
+#X connect 7 1 12 0;
+#X connect 7 2 10 0;
+#X connect 8 0 6 0;
+#X connect 8 1 6 1;
+#X connect 9 0 8 0;
+#X connect 10 0 13 0;
+#X connect 10 1 14 0;
+#X connect 15 0 16 0;
+#X connect 16 0 18 0;
+#X connect 17 0 16 1;
+#X connect 21 0 23 0;
+#X connect 23 0 22 0;
+#X connect 23 1 24 0;
diff --git a/pd/doc/2.control.examples/19.random.pd b/pd/doc/2.control.examples/19.random.pd
index 928be29f2..88750ed19 100644
--- a/pd/doc/2.control.examples/19.random.pd
+++ b/pd/doc/2.control.examples/19.random.pd
@@ -1,39 +1,70 @@
-#N canvas 47 52 722 449 12;
-#X text 460 422 updated for Pd version 0.26;
-#X text 35 28 Use the "random" object to make pseudo-random integers.
+#N canvas 433 135 448 447 10;
+#X obj 22 112 random 5;
+#X msg 22 86 bang;
+#X floatatom 22 138 0 0 0 0 - - -;
+#X text 56 138 outputs from 0 to 4;
+#X msg 207 86 bang;
+#X floatatom 207 164 0 0 0 0 - - -;
+#X obj 207 112 random 1000;
+#X obj 207 140 / 1000;
+#X text 235 165 from 0 to 0.999;
+#X obj 21 319 random 5;
+#X msg 92 232 bang;
+#X floatatom 21 345 0 0 0 0 - - -;
+#X obj 21 232 loadbang;
+#X obj 21 262 timer;
+#X text 134 232 <-- click to seed;
+#X msg 21 287 seed \$1;
+#X msg 83 287 bang;
+#X text 124 288 <-- click to get random numbers;
+#X text 18 191 If you don't want the same behavior every time you run
+the patch \, use the time from load to first click as a seed:;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header random 20 10 1 18
+-261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 425 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 95 PLATFORM windows macosx gnulinux;
+#X text 12 175 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 155 AUTHOR Miller Puckette;
+#X text 12 135 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 115 DATATYPE float;
+#X text 12 195 HELP_PATCH_AUTHORS Updated for release 0.26. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control random;
+#X text 12 65 DESCRIPTION generating pseudo-random integers with the
+[random] object;
+#X restore 382 427 pd META;
+#X text 19 37 Use the [random] object to make pseudo-random integers.
 To get continuously variable random numbers \, make a random number
 in a large range and divide:;
-#X obj 103 121 random 5;
-#X msg 103 95 bang;
-#X floatatom 103 147 0 0 0;
-#X text 137 147 outputs from 0 to 4;
-#X msg 337 87 bang;
-#X floatatom 336 165 0 0 0;
-#X obj 337 113 random 1000;
-#X obj 336 141 / 1000;
-#X text 402 166 from 0 to 0.999;
-#X obj 71 324 random 5;
-#X msg 162 255 bang;
-#X floatatom 71 350 0 0 0;
-#X obj 71 244 loadbang;
-#X obj 71 274 timer;
-#X text 204 255 <-- click to seed;
-#X msg 71 299 seed \$1;
-#X msg 163 299 bang;
-#X text 204 300 <-- click to get random numbers;
-#X text 24 382 If you give two randoms the same seed they give the
-same sequence. If you never seed them \, you'll get different sequences
-out of each one.;
-#X text 34 197 If you don't want the same behavior every time you run
-the patch \, use the time from load to first click as a seed:;
-#X connect 2 0 4 0;
-#X connect 3 0 2 0;
-#X connect 6 0 8 0;
-#X connect 8 0 9 0;
-#X connect 9 0 7 0;
-#X connect 11 0 13 0;
-#X connect 12 0 15 1;
-#X connect 14 0 15 0;
-#X connect 15 0 17 0;
-#X connect 17 0 11 0;
-#X connect 18 0 11 0;
+#X text 18 374 If you give two [random] objects the same seed they
+give the same sequence. If you never seed them \, you'll get different
+sequences out of each one.;
+#N canvas 8 315 428 179 References 0;
+#X obj 1 -2 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 -261139 -33289 0;
+#X text 7 -1 Randomness- Related Help Documents;
+#X obj 23 63 noise~;
+#X text 20 34 For randomness in an audio object \, see:;
+#X obj 26 130 expr random(0 \, 10);
+#X text 23 93 Also check out the [expr] object \, which includes a
+random function.;
+#X restore 103 427 pd References;
+#X obj 6 427 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 4 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 9 0 11 0;
+#X connect 10 0 13 1;
+#X connect 12 0 13 0;
+#X connect 13 0 15 0;
+#X connect 15 0 9 0;
+#X connect 16 0 9 0;
diff --git a/pd/doc/2.control.examples/20.weighted-random.pd b/pd/doc/2.control.examples/20.weighted-random.pd
index ed964a063..53a9352b7 100644
--- a/pd/doc/2.control.examples/20.weighted-random.pd
+++ b/pd/doc/2.control.examples/20.weighted-random.pd
@@ -1,44 +1,67 @@
-#N canvas 161 46 660 441 12;
-#X msg 103 95 bang;
-#X text 389 414 updated for Pd version 0.35;
-#X text 44 19 You can generate weighted random numbers from uniformly
+#N canvas 433 129 448 465 10;
+#X msg 123 95 bang;
+#X text 19 37 You can generate weighted random numbers from uniformly
 distributed ones. If you just want two possible outcomes with a varying
 probability for each one \, you can do as shown:;
-#X obj 103 121 random 100;
-#X obj 102 174 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 123 121 random 100;
+#X obj 123 194 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 169 174 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 168 194 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X floatatom 205 148 3 0 100;
-#X text 250 148 <-- change probablilty;
-#X obj 103 149 moses 80;
-#X text 152 93 <-- click to test;
-#X text 61 219 This outputs a number at left 80% of the time \, otherwise
+#X floatatom 168 143 3 0 100 0 - - -, f 3;
+#X text 193 143 <-- change probablilty;
+#X obj 123 169 moses 80;
+#X text 172 95 <-- click to test;
+#X text 19 224 This outputs a number at left 80% of the time \, otherwise
 at right \, unless you override the "80" using the number box. You
 may extend this to more than two possible outcomes \, for instance
 like this:;
-#X msg 106 305 bang;
-#X obj 106 331 random 100;
-#X obj 105 384 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X msg 106 282 bang;
+#X obj 106 308 random 100;
+#X obj 106 387 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 195 387 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 151 387 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 155 303 <-- click to test;
-#X obj 106 359 moses 10;
-#X obj 196 360 moses 30;
-#X obj 263 387 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X text 155 280 <-- click to test;
+#X obj 106 336 moses 10;
+#X obj 151 360 moses 30;
+#X obj 196 387 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 103 409 10%;
-#X text 193 410 20%;
-#X text 265 409 70%;
-#X connect 0 0 3 0;
-#X connect 3 0 8 0;
-#X connect 6 0 8 1;
-#X connect 8 0 4 0;
-#X connect 8 1 5 0;
-#X connect 11 0 12 0;
-#X connect 12 0 16 0;
+#X text 104 410 10%;
+#X text 149 410 20%;
+#X text 198 409 70%;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header weighted-random
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 443 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION weighted-random numbers;
+#X text 12 25 KEYWORDS control random;
+#X restore 382 445 pd META;
+#N canvas 21 377 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Weighted-random- Related Help Documents;
+#X restore 103 445 pd References;
+#X obj 6 445 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 2 0;
+#X connect 2 0 7 0;
+#X connect 5 0 7 1;
+#X connect 7 0 3 0;
+#X connect 7 1 4 0;
+#X connect 10 0 11 0;
+#X connect 11 0 15 0;
+#X connect 15 0 12 0;
+#X connect 15 1 16 0;
 #X connect 16 0 13 0;
 #X connect 16 1 17 0;
-#X connect 17 0 14 0;
-#X connect 17 1 18 0;
diff --git a/pd/doc/2.control.examples/21.markov.chain.pd b/pd/doc/2.control.examples/21.markov.chain.pd
index 36ca0db8d..272047adb 100644
--- a/pd/doc/2.control.examples/21.markov.chain.pd
+++ b/pd/doc/2.control.examples/21.markov.chain.pd
@@ -1,65 +1,89 @@
-#N canvas 296 90 662 442 12;
-#X obj 84 251 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#N canvas 433 121 448 488 10;
+#X obj 22 262 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X obj 81 336 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#X obj 22 368 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X obj 162 335 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#X obj 67 368 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X obj 199 337 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#X obj 112 368 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X msg 81 358 1;
-#X msg 162 360 2;
-#X msg 199 361 3;
-#X obj 81 386 s state;
-#X obj 66 173 bng 20 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#X msg 22 388 1;
+#X msg 67 388 2;
+#X msg 112 388 3;
+#X obj 22 428 s state;
+#X obj 22 153 bng 20 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X obj 105 164 r state;
-#X obj 83 225 sel 1 2 3;
-#X obj 255 253 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#X obj 56 153 r state;
+#X obj 22 215 sel 1 2 3;
+#X obj 164 262 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X obj 252 338 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#X obj 164 368 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X obj 334 340 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#X obj 209 368 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X obj 373 343 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#X obj 254 368 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X msg 252 361 1;
-#X msg 329 366 2;
-#X msg 373 367 3;
-#X obj 252 394 s state;
-#X obj 419 254 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#X msg 164 388 1;
+#X msg 209 388 2;
+#X msg 254 388 3;
+#X obj 164 428 s state;
+#X obj 311 262 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X obj 419 339 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#X obj 311 368 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X obj 499 338 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#X obj 356 368 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X obj 538 341 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+#X obj 401 368 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
 -1;
-#X msg 419 362 1;
-#X msg 499 363 2;
-#X msg 538 364 3;
-#X obj 418 395 s state;
-#X msg 236 186 \; state 1;
-#X obj 83 199 f 1;
-#X obj 84 279 random 100;
-#X obj 83 308 moses 30;
-#X obj 162 309 moses 60;
-#X obj 255 280 random 100;
-#X obj 255 310 moses 10;
-#X obj 334 311 moses 60;
-#X obj 419 281 random 100;
-#X obj 419 310 moses 70;
-#X obj 499 310 moses 80;
-#X floatatom 134 188 3 0 0;
-#X text 236 166 reset;
-#X text 49 152 STEP;
-#X text 34 20 Here is how to construct a simple \, three-valued Markov
-chain using "random." Each time you click on "step" the previous output
+#X msg 311 388 1;
+#X msg 356 388 2;
+#X msg 401 388 3;
+#X obj 311 428 s state;
+#X msg 145 153 \; state 1;
+#X obj 22 189 f 1;
+#X obj 22 287 random 100;
+#X obj 22 314 moses 30;
+#X obj 67 341 moses 60;
+#X obj 164 286 random 100;
+#X obj 164 314 moses 10;
+#X obj 209 341 moses 60;
+#X obj 311 286 random 100;
+#X obj 311 314 moses 70;
+#X obj 356 341 moses 80;
+#X floatatom 56 178 3 0 0 0 - - -, f 3;
+#X text 150 135 reset;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header markov_chain 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 466 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 190 254 494 284 META 0;
+#X text 12 135 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 115 AUTHOR Miller Puckette;
+#X text 12 95 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 155 HELP_PATCH_AUTHORS Updated for release 0.35. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control;
+#X text 12 65 DESCRIPTION how to construct a simple three-valued Markov
+chain;
+#X restore 382 468 pd META;
+#X text 19 135 STEP;
+#N canvas 13 392 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Markov_chain- Related Help Documents;
+#X restore 103 468 pd References;
+#X obj 6 468 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 37 Here is how to construct a simple \, three-valued Markov
+chain using [random]. Each time you click on "step" the previous output
 ("state") determines which of three random networks to invoke \, each
 having a different probability distribution for the next value of "state."
 For instance if the state was 3 \, the next state will be 1 70% of
 the time \, state 2 10% \, and state 3 20%.;
-#X text 408 422 updated for Pd version 0.35;
 #X connect 0 0 29 0;
 #X connect 1 0 4 0;
 #X connect 2 0 5 0;
diff --git a/pd/doc/2.control.examples/22.random-walk.pd b/pd/doc/2.control.examples/22.random-walk.pd
index 21483bdb6..6452965d4 100644
--- a/pd/doc/2.control.examples/22.random-walk.pd
+++ b/pd/doc/2.control.examples/22.random-walk.pd
@@ -1,42 +1,69 @@
-#N canvas 0 0 604 511 12;
-#X floatatom 113 218 5 0 0 0 - - -;
-#X obj 123 113 f;
-#X obj 104 198 random 4;
-#X obj 26 197 random 2;
-#X floatatom 35 219 5 0 0 0 - - -;
-#X obj 123 138 t b b f;
-#X obj 26 253 sel 0 1;
-#X obj 159 328 +;
-#X obj 123 87 metro 100;
-#X obj 123 65 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 104 252 + 1;
-#X floatatom 242 153 5 0 0 0 - - -;
-#X obj 82 309 *;
-#X msg 26 282 -1;
-#X obj 242 83 moses 0;
-#X obj 316 83 moses 100;
-#X obj 242 107 * -1;
-#X obj 407 86 * -1;
-#X obj 407 111 + 200;
-#X msg 60 282 1;
-#X text 39 9 Random walk generator;
-#X text 143 64 on/off;
-#X text 298 152 output;
-#X text 22 375 A random walk is a special case of a Markov chain \,
+#N canvas 433 99 448 555 10;
+#X floatatom 97 297 5 0 0 0 - - -, f 5;
+#X obj 118 217 f;
+#X obj 87 275 random 4;
+#X obj 25 275 random 2;
+#X floatatom 34 297 5 0 0 0 - - -, f 5;
+#X obj 118 242 t b b f;
+#X obj 25 329 sel 0 1;
+#X obj 142 409 +;
+#X obj 118 163 metro 100;
+#X obj 118 141 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 87 329 + 1;
+#X floatatom 224 191 5 0 0 0 - - -, f 5;
+#X obj 72 387 *;
+#X msg 25 354 -1;
+#X obj 224 94 moses 0;
+#X obj 263 118 moses 100;
+#X obj 224 118 * -1;
+#X obj 314 141 * -1;
+#X obj 314 163 + 200;
+#X msg 55 354 1;
+#X text 19 37 Random walk generator;
+#X text 138 140 on/off;
+#X text 260 190 output;
+#X text 22 434 A random walk is a special case of a Markov chain \,
 in which the states are integers and the transitions add or subtract
 a small amount from the previous state to get a new one. Here the "f"
 holds the state. When it gets a bang \, the previous state is added
 to a random number (from 1 to 4) multiplied by a random sign (-1 or
 1). The new value is then coerced into the range from 0 to 100;
-#X text 35 235 sign;
-#X text 113 234 magnitude;
-#X text 203 313 add prev value;
-#X text 200 330 to random increment;
-#X text 256 30 coercion to range 0-100 \; if out of range \, reflect
+#X text 34 312 sign;
+#X text 96 312 magnitude;
+#X text 174 401 add prev value;
+#X text 174 414 to random increment;
+#X text 222 51 coercion to range 0-100 \; if out of range \, reflect
+;
+#X text 222 74 us back in.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header random-walk 20 10
+1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
 ;
-#X text 255 60 us back in.;
-#X text 323 492 updated for Pd version 0.37-1;
+#X obj 1 533 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37-1. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control;
+#X text 12 65 DESCRIPTION random walk generator;
+#X restore 382 535 pd META;
+#N canvas 11 381 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Random-walk- Related Help Documents;
+#X text 50 42 mention the thing about Max object \, and that there
+are libraries of objects in pd-extended where you can access Pd versions
+of such objects.;
+#X text 73 92 cyclone and maxlib;
+#X restore 103 535 pd References;
+#X obj 6 535 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 5 0;
 #X connect 2 0 0 0;
 #X connect 2 0 10 0;
diff --git a/pd/doc/2.control.examples/23.sequencing.pd b/pd/doc/2.control.examples/23.sequencing.pd
index 1aa199427..f827ee30a 100644
--- a/pd/doc/2.control.examples/23.sequencing.pd
+++ b/pd/doc/2.control.examples/23.sequencing.pd
@@ -1,28 +1,54 @@
-#N canvas 47 52 758 482 12;
-#X text 465 442 updated for Pd version 0.26;
-#X text 35 28 You can use "qlist" or "textfile" objects for sequencing.
-Qlist is simpler to use than the (more versatile) textfile.;
-#X obj 345 144 r receive1;
-#X obj 441 146 r receive2;
-#X msg 205 88 clear \, add receive1 1 \, add 1000 receive1 0 \, add
+#N canvas 433 132 448 454 10;
+#X obj 115 131 r receive1;
+#X obj 201 131 r receive2;
+#X msg 22 85 clear \, add receive1 1 \, add 1000 receive1 0 \, add
 receive2 2 \, add 1000 receive2 0 \, add receive1 3 \, bang;
-#X obj 205 129 qlist;
-#X floatatom 345 170 0 0 0 0 - - -;
-#X floatatom 441 171 0 0 0 0 - - -;
-#X text 48 202 The "add" messages add lines to the qlist \, so that
+#X obj 22 125 qlist;
+#X floatatom 115 156 0 0 0 0 - - -;
+#X floatatom 201 156 0 0 0 0 - - -;
+#X text 19 184 The "add" messages add lines to the qlist \, so that
 it contains:;
-#X text 155 238 receive1 1;
-#X text 154 259 1000 receive1 0;
-#X text 155 279 receive2 2;
-#X text 153 299 1000 receive2 0;
-#X text 155 317 receive1 3;
-#X text 16 391 If you have more than 5 lines or so wou will probably
+#X text 55 219 receive1 1;
+#X text 55 239 1000 receive1 0;
+#X text 55 259 receive2 2;
+#X text 55 279 1000 receive2 0;
+#X text 55 299 receive1 3;
+#X text 18 366 If you have more than 5 lines or so wou will probably
 want to store them as a separate file and have qlist read it. You can
 also write files \, set tempo \, and single step... see the help patch
 for details.;
-#X text 22 341 and the "bang" instructs qlist to play the sequence
+#X text 19 322 and the "bang" instructs qlist to play the sequence
 by sending messages to "receive" objects. Messages starting with numbers
 request that amount of delay.;
-#X connect 2 0 6 0;
-#X connect 3 0 7 0;
-#X connect 4 0 5 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header sequencing 20 10
+1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 432 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 33 353 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.26. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control;
+#X text 12 65 DESCRIPTION sequencing with [qlist] and [textfile];
+#X restore 382 434 pd META;
+#X text 19 37 You can use [qlist] or [textfile] objects for sequencing.
+[qlist] is simpler to use than the (more versatile) [textfile].;
+#N canvas 15 364 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Sequencing- Related Help Documents;
+#X text 19 37 The [list] objects are also very good objects for sequencing.
+;
+#X obj 22 73 list;
+#X restore 103 434 pd References;
+#X obj 6 434 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 4 0;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
diff --git a/pd/doc/2.control.examples/24.loops.pd b/pd/doc/2.control.examples/24.loops.pd
index a0f78bb51..9d89de66e 100644
--- a/pd/doc/2.control.examples/24.loops.pd
+++ b/pd/doc/2.control.examples/24.loops.pd
@@ -1,39 +1,64 @@
-#N canvas 258 107 701 742 12;
-#X obj 195 318 until;
-#X obj 221 284 max 0;
-#X floatatom 221 263 5 0 0 1 times - -;
-#X text 229 234 times;
-#X obj 195 342 print repetition;
-#X msg 195 234 5;
-#X obj 175 571 + 1;
-#X obj 118 572 float;
-#X obj 118 546 until;
-#X obj 118 606 moses 10;
-#X obj 233 558 bang;
-#X obj 118 639 print number;
-#X msg 118 524 bang;
-#X msg 196 529 0;
-#X text 241 529 reset;
-#X text 277 560 stop "until" when counter reaches 10;
-#X text 479 711 updated for Pd 0.41;
-#X text 31 16 Looping with the "until" object;
-#X text 52 47 It is sometimes desirable to make a loop without an embedded
-delay (as in 06.more.counters.pd") but rather to make the entire loop
-take place in the context of a single incoming message. The "until"
-object is provided to make this possible.;
-#X text 273 285 make nonnegative;
-#X text 56 445 Conditional loops get started with a "bang" to until's
+#N canvas 433 82 448 605 10;
+#X obj 140 261 until;
+#X obj 166 234 max 0;
+#X floatatom 166 213 5 0 0 1 times - -, f 5;
+#X text 174 189 times;
+#X obj 140 285 print repetition;
+#X msg 140 189 5;
+#X obj 82 464 + 1;
+#X obj 38 464 float;
+#X obj 38 438 until;
+#X obj 38 491 moses 10;
+#X obj 131 460 bang;
+#X obj 38 518 print number;
+#X msg 38 416 bang;
+#X msg 106 416 0;
+#X text 136 415 reset;
+#X text 218 235 make nonnegative;
+#X text 16 355 Conditional loops get started with a "bang" to until's
 left inlet. Make sure you stop the loop with a "bang" to until's right
 inlet \, otherwise it will try to run forever and Pd will freeze!;
-#X text 48 131 "until" has two modes: It can either run automatically
-for a certain number of times (a "counting" loop) or it can run forever
-until stopped through its right inlet (a "conditional" loop).;
-#X text 47 196 You can perform a counting loop by sending a positive
+#X text 17 167 You can perform a counting loop by sending a positive
 number to until:;
-#X text 55 398 (As of version 0.41 \, "until" silently interprets negative
+#X text 16 328 (As of version 0.41 \, "until" silently interprets negative
 numbers to be equivalent to zero.);
-#X text 62 667 In pseudo-code: "x=0 \; do print x++ until x>=10";
-#X text 57 368 In pseudo-code: "for i = 1 to 5 do print end";
+#X text 16 539 In pseudo-code: "x=0 \; do print x++ until x>=10";
+#X text 17 308 In pseudo-code: "for i = 1 to 5 do print end";
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header loops 20 10 1 18
+-261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 583 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 65 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.41. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS control;
+#X text 12 45 DESCRIPTION looping with the [until] object;
+#X restore 382 585 pd META;
+#X text 19 32 Looping with the [until] object;
+#X text 19 51 It is sometimes desirable to make a loop without an embedded
+delay (as in 06.more.counters.pd") but rather to make the entire loop
+take place in the context of a single incoming message. The [until]
+object is provided to make this possible.;
+#X text 18 114 [until] has two modes: It can either run automatically
+for a certain number of times (a "counting" loop) or it can run forever
+until stopped through its right inlet (a "conditional" loop).;
+#X text 167 460 stop [until] when counter reaches 10;
+#N canvas 16 515 428 143 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Loops- Related Help Documents;
+#X obj 42 44 pddp/pddplink ../5.reference/all_about_looping.pd -text
+doc/5.reference/all_about_looping.pd;
+#X restore 103 585 pd References;
+#X obj 6 585 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 4 0;
 #X connect 1 0 0 0;
 #X connect 2 0 1 0;
diff --git a/pd/doc/2.control.examples/dollarsign.pd b/pd/doc/2.control.examples/dollarsign.pd
index 0697a570e..c79a77821 100644
--- a/pd/doc/2.control.examples/dollarsign.pd
+++ b/pd/doc/2.control.examples/dollarsign.pd
@@ -1,35 +1,35 @@
-#N canvas 62 73 586 361 12;
-#X obj 207 44 inlet;
-#X obj 207 71 s \$1-a;
-#X obj 302 72 s \$1-b;
-#X text 331 337 updated for Pd version 0.34;
-#X text 63 7 This is an abstraction used in example 12 \, "locality".
-;
-#X obj 302 47 inlet;
-#X obj 62 249 s \$1-c;
-#X obj 62 279 r \$1-c;
-#X floatatom 62 218 5 0 0;
-#X floatatom 62 307 5 0 0;
-#X obj 164 250 s here's-what-happens-if-you-dont;
-#X obj 163 280 r here's-what-happens-if-you-dont;
-#X floatatom 163 308 5 0 0;
-#X floatatom 164 220 5 0 0;
-#X floatatom 487 224 5 0 0;
-#X floatatom 488 307 5 0 0;
-#X obj 487 251 s \$0-d;
-#X obj 488 281 r \$0-d;
-#X text 47 94 The sends above get named "one-a" \, etc. The window
-title bar tells you the creation arguments for this particular instance.
-You can use this to make internal local connections as shown below.
-The "$1-c" boxes act locally whereas the middle boxes get crosstalk
-between the windows. The boxes at right also get unique names but in
-this case you don't have to secify "$0" \, it's just something unique.
-;
-#X connect 0 0 1 0;
-#X connect 5 0 2 0;
-#X connect 7 0 9 0;
-#X connect 8 0 6 0;
-#X connect 11 0 12 0;
-#X connect 13 0 10 0;
-#X connect 14 0 16 0;
-#X connect 17 0 15 0;
+#N canvas 0 0 398 330 10;
+#X obj 177 37 inlet;
+#X obj 177 64 s \$1-a;
+#X obj 272 65 s \$1-b;
+#X text 169 303 updated for Pd version 0.34;
+#X text 17 7 This is an abstraction used in example 12 \, "locality".
+;
+#X obj 272 40 inlet;
+#X obj 20 215 s \$1-c;
+#X obj 20 245 r \$1-c;
+#X floatatom 20 184 5 0 0 0 - - -;
+#X floatatom 20 273 5 0 0 0 - - -;
+#X obj 92 216 s here's-what-happens-if-you-dont;
+#X obj 91 246 r here's-what-happens-if-you-dont;
+#X floatatom 91 274 5 0 0 0 - - -;
+#X floatatom 92 186 5 0 0 0 - - -;
+#X floatatom 325 190 5 0 0 0 - - -;
+#X floatatom 326 273 5 0 0 0 - - -;
+#X obj 325 217 s \$0-d;
+#X obj 326 247 r \$0-d;
+#X text 17 87 The sends above get named "one-a" \, etc. The window
+title bar tells you the creation arguments for this particular instance.
+You can use this to make internal local connections as shown below.
+The "\$1-c" boxes act locally whereas the middle boxes get crosstalk
+between the windows. The boxes at right also get unique names but in
+this case you don't have to secify "1033" \, it's just something unique.
+;
+#X connect 0 0 1 0;
+#X connect 5 0 2 0;
+#X connect 7 0 9 0;
+#X connect 8 0 6 0;
+#X connect 11 0 12 0;
+#X connect 13 0 10 0;
+#X connect 14 0 16 0;
+#X connect 17 0 15 0;
diff --git a/pd/doc/2.control.examples/dollarsign2.pd b/pd/doc/2.control.examples/dollarsign2.pd
index c3d149f61..6df7eb86a 100644
--- a/pd/doc/2.control.examples/dollarsign2.pd
+++ b/pd/doc/2.control.examples/dollarsign2.pd
@@ -1,54 +1,46 @@
-#N canvas 22 54 588 671 12;
-#X text 324 642 updated for Pd version 0.34;
-#X text 34 6 This is an abstraction used in example 13 \, "dollarsigns".
-;
-#X obj 88 107 send \$1;
-#X obj 199 106 + \$2;
-#X floatatom 303 88 0 0 0;
-#X obj 303 139 print;
-#X msg 303 113 blah \$1;
-#X text 36 163 This may sound inconsistant \, but it's not--object
-and message boxes are both actually messages \, but in the case of
-the Object box the message is passed at creation time \, and for the
-Message box \, at message time.;
-#X msg 188 272 bang;
-#X obj 188 300 symbol \$1;
-#X msg 98 272 bang;
-#X obj 98 300 float \$2;
-#X floatatom 98 327 5 0 0;
-#X symbolatom 188 329 10 0 0;
-#X text 36 233 So how do you put creation arguments in messages? Use
-"float" and "symbol" as shown:;
-#X msg 97 383 bang;
-#X obj 97 407 float \$2;
-#X msg 97 434 five \$1;
-#X text 41 357 Then if you wish \, connect to a message box as in:
-;
-#X obj 97 459 print;
-#X msg 143 512 bang;
-#X obj 143 564 symbol \$1;
-#X obj 237 560 f \$2;
-#X obj 143 540 t b b;
-#X obj 142 587 pack symbol float;
-#X msg 142 613 six \$1 \$2;
-#X obj 142 640 print;
-#X text 31 485 For messages combining more than one creation argument
-try:;
-#X text 37 50 In Object boxes \, dollar signs refer to the abstraction's
-creation arguments. In Messages \, they change dynamically:;
-#X connect 4 0 6 0;
-#X connect 6 0 5 0;
-#X connect 8 0 9 0;
-#X connect 9 0 13 0;
-#X connect 10 0 11 0;
-#X connect 11 0 12 0;
-#X connect 15 0 16 0;
-#X connect 16 0 17 0;
-#X connect 17 0 19 0;
-#X connect 20 0 23 0;
-#X connect 21 0 24 0;
-#X connect 22 0 24 1;
-#X connect 23 0 21 0;
-#X connect 23 1 22 0;
-#X connect 24 0 25 0;
-#X connect 25 0 26 0;
+#N canvas 0 0 394 575 10;
+#X text 14 6 This is an abstraction used in example 13 \, "dollarsigns".
+;
+#X obj 64 83 send \$1;
+#X obj 175 82 + \$2;
+#X floatatom 279 64 0 0 0 0 - - -;
+#X obj 279 115 print;
+#X msg 279 89 blah \$1;
+#X msg 164 233 bang;
+#X obj 164 261 symbol \$1;
+#X msg 74 233 bang;
+#X obj 74 261 float \$2;
+#X floatatom 74 288 5 0 0 0 - - -;
+#X symbolatom 164 290 10 0 0 0 - - -;
+#X msg 128 339 bang;
+#X obj 128 364 float \$2;
+#X msg 128 389 five \$1;
+#X text 13 313 Then if you wish \, connect to a message box as in:
+;
+#X obj 128 414 print;
+#X msg 128 465 bang;
+#X msg 128 516 six \$1 \$2;
+#X obj 128 543 print;
+#X text 13 26 In object boxes \, dollar signs refer to the abstraction's
+creation arguments. In message boxes \, they change dynamically:;
+#X text 12 139 This may sound inconsistant \, but it's not-- object
+and message boxes are both actually messages \, but in the case of
+the object box the message is passed at creation time \, and for the
+message box \, at message time.;
+#X text 12 194 So how do you put creation arguments in messages? Use
+[float] and [symbol] as shown:;
+#X obj 128 490 list append \$1 \$2;
+#X text 11 435 For messages combining more than one creation argument
+\, use [list append]:;
+#X connect 3 0 5 0;
+#X connect 5 0 4 0;
+#X connect 6 0 7 0;
+#X connect 7 0 11 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 16 0;
+#X connect 17 0 23 0;
+#X connect 18 0 19 0;
+#X connect 23 0 18 0;
diff --git a/pd/doc/2.control.examples/sendnumber.pd b/pd/doc/2.control.examples/sendnumber.pd
index 00f2eb042..c0c91d352 100644
--- a/pd/doc/2.control.examples/sendnumber.pd
+++ b/pd/doc/2.control.examples/sendnumber.pd
@@ -1,20 +1,20 @@
-#N canvas 171 73 718 283 12;
-#X obj 34 60 inlet;
-#X obj 34 88 float \$1;
-#X obj 34 116 send \$2;
-#X text 26 225 For obvious reasons you might not want to call a patch
-as an abstraction from itself.;
-#X text 151 183 In this case \$1 is a number you can specify and \$2
-is a "send" destination.;
-#X text 461 260 updated for Pd version 0.26;
-#X text 154 103 When you call an abstraction by typing \, say \, "sendnumber
-1 x" in an object box. the subpatch can access the values of the creation
-arguments (1 and x) as "$1" and "$2" innside object boxes. Typing \$1
-inside a message box has a different meaning (see the message box help
-window.);
-#X text 155 31 This window is used by 11.subpatch.pd to demonstrate
-the abstraction mechanism in Pd. If you've opened this window directly
-\, you might also want to open the other one to see how it's used.
-;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
+#N canvas 0 0 469 256 10;
+#X obj 15 50 inlet;
+#X obj 15 78 float \$1;
+#X obj 15 106 send \$2;
+#X text 12 185 For obvious reasons you might not want to call a patch
+as an abstraction from itself.;
+#X text 92 148 In this case \$1 is a number you can specify and \$2
+is a "send" destination.;
+#X text 272 225 updated for Pd version 0.26;
+#X text 95 78 When you call an abstraction by typing \, say \, "sendnumber
+1 x" in an object box. the subpatch can access the values of the creation
+arguments (1 and x) as "\$1" and "\$2" innside object boxes. Typing
+\$1 inside a message box has a different meaning (see the message box
+help window.);
+#X text 96 21 This window is used by 11.subpatch.pd to demonstrate
+the abstraction mechanism in Pd. If you've opened this window directly
+\, you might also want to open the other one to see how it's used.
+;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
diff --git a/pd/doc/3.audio.examples/A00.intro.pd b/pd/doc/3.audio.examples/A00.intro.pd
index 69087781a..f2eccfd12 100644
--- a/pd/doc/3.audio.examples/A00.intro.pd
+++ b/pd/doc/3.audio.examples/A00.intro.pd
@@ -1,10 +1,35 @@
-#N canvas 440 252 579 286 12;
-#X text 87 6 INTRODUCTION TO THE PD AUDIO EXAMPLE PATCHES;
-#X text 328 257 updated for Pd version 0.37;
-#X text 34 45 This is the second of three tutorial series on Pd. This
+#N canvas 433 205 448 236 10;
+#X text 19 56 This is the second of three tutorial series on Pd. This
 one shows the time-domain audio processing features. (The first one
 showed how to use Pd to do "control" computations \, and the third
 is about frequency-domain techniques.);
-#X text 33 125 These patches are accompanied by an ONLINE BOOK:;
-#X text 100 158 http://www.crca.ucsd.edu/~msp/techniques.htm;
-#X text 37 189 which develops the underlying theory.;
+#X text 19 124 These patches are accompanied by an ONLINE BOOK:;
+#X text 20 174 which develops the underlying theory.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header introduction 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 214 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS;
+#X text 12 65 DESCRIPTION introduction to audio tutorials;
+#X restore 392 216 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Introduction- Related Help Documents;
+#X text 19 37 Link to the manual here;
+#X restore 103 216 pd References;
+#X obj 66 149 pddp/pddplink http://www.crca.ucsd.edu/~msp/techniques.htm
+;
+#X text 19 36 An Introduction to the Pd Audio Example Patches;
+#X obj 6 216 pddp/pddplink ../5.reference/pddp/help.pd -text help;
diff --git a/pd/doc/3.audio.examples/A01.sinewave.pd b/pd/doc/3.audio.examples/A01.sinewave.pd
index 42b8aed04..311bf9195 100644
--- a/pd/doc/3.audio.examples/A01.sinewave.pd
+++ b/pd/doc/3.audio.examples/A01.sinewave.pd
@@ -1,32 +1,55 @@
-#N canvas 6 2 588 513 12;
-#X obj 108 109 osc~ 440;
-#X obj 108 168 dac~;
-#X text 187 111 <-- 440 Hz. sine wave at full blast;
-#X obj 108 138 *~ 0.05;
-#X text 202 3 MAKING A SINE WAVE;
-#X text 32 195 Audio computation can be turned on and off by sending
+#N canvas 433 125 448 475 10;
+#X obj 95 99 osc~ 440;
+#X obj 95 158 dac~;
+#X text 162 99 <-- 440 Hz. sine wave at full blast;
+#X obj 95 128 *~ 0.05;
+#X text 19 181 Audio computation can be turned on and off by sending
 messages to the global "pd" object as follows:;
-#X msg 98 239 \; pd dsp 1;
-#X msg 202 239 \; pd dsp 0;
-#X text 113 276 ON;
-#X text 222 276 OFF;
-#X text 29 297 You should see the Pd window change to reflect whether
+#X msg 85 217 \; pd dsp 1;
+#X msg 189 217 \; pd dsp 0;
+#X text 100 254 ON;
+#X text 209 254 OFF;
+#X text 16 275 You should see the Pd window change to reflect whether
 audio is on or off. You can also turn audio on and off using the "audio"
 menu \, but the buttons are provided as a shortcut.;
-#X text 30 368 When DSP is on \, you should hear a tone whose pitch
+#X text 17 336 When DSP is on \, you should hear a tone whose pitch
 is A 440 and whose amplitude is 0.05. If instead you are greeted with
 silence \, you might want to read the HTML documentation on setting
 up audio.;
-#X text 28 434 In general when you start a work session with Pd \,
+#X text 16 393 In general when you start a work session with Pd \,
 you will want to choose "test audio and MIDI" from the help window
 \, which opens a more comprehensive test patch than this one.;
-#X text 296 247 <-- click these;
-#X text 187 139 <-- reduce amplitude to 0.05;
-#X text 160 168 <----- send to the audio output device;
-#X text 32 23 Audio computation in Pd is done using "tilde objects"
+#X text 263 224 <-- click these;
+#X text 162 128 <-- reduce amplitude to 0.05;
+#X text 19 37 Audio computation in Pd is done using "tilde objects"
 such as the three below. They use continuous audio streams to intercommunicate
 \, as well as communicating with other ("control") Pd objects using
 messages.;
-#X text 342 490 updated for Pd version 0.36;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header making_a_sinewave
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 162 158 <-- send to the audio output device;
+#X obj 1 453 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 25 KEYWORDS signal;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.36. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION making a sinewave;
+#X restore 392 455 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 making a sinewave- Related Help Documents;
+#X text 19 37 Refer to the manual \, as well as Miller's book.;
+#X restore 103 455 pd References;
+#X obj 6 455 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 3 0;
 #X connect 3 0 1 0;
diff --git a/pd/doc/3.audio.examples/A02.amplitude.pd b/pd/doc/3.audio.examples/A02.amplitude.pd
index d24be18d2..06febcd9c 100644
--- a/pd/doc/3.audio.examples/A02.amplitude.pd
+++ b/pd/doc/3.audio.examples/A02.amplitude.pd
@@ -1,37 +1,57 @@
-#N canvas 73 190 702 512 12;
-#X obj 64 65 osc~ 440;
-#X obj 64 283 dac~;
-#X text 145 66 <-- 440 Hz. sine wave at full blast;
-#X msg 431 7 \; pd dsp 1;
-#X msg 514 7 \; pd dsp 0;
-#X text 456 45 ON;
-#X text 534 43 OFF;
-#X text 164 18 CONTROLLING AMPLITUDE;
-#X text 35 327 Amplitudes of audio signals can have any reasonable
+#N canvas 433 136 448 442 10;
+#X obj 22 42 osc~ 440;
+#X obj 22 225 dac~;
+#X text 103 43 <-- 440 Hz. sine wave at full blast;
+#X text 19 271 Amplitudes of audio signals can have any reasonable
 range \, but when you output a signal via the dac~ object \, the samples
 should range between -1 and +1. Values out of that range will be "clipped."
 ;
-#X obj 64 202 *~ 0;
-#X floatatom 107 165 0 0 0 0 - - -;
-#X obj 95 132 dbtorms;
-#X floatatom 95 100 0 0 80 0 - - -;
-#X text 141 100 <-- set amplitude here in dB;
-#X text 211 133 <-- this converts dB to linear units;
-#X text 210 164 <-- this shows the linear gain;
-#X text 116 204 <-- multiply the sine wave by the gain \, reducing
-its amplitude. You can also use the "*~" object to multiply two signals.
+#X obj 22 166 *~ 0;
+#X floatatom 65 136 0 0 0 0 - - -;
+#X obj 53 103 dbtorms;
+#X floatatom 53 71 0 0 80 0 - - -;
+#X text 99 71 <-- set amplitude here in dB;
+#X text 109 104 <-- this converts dB to linear units;
+#X text 108 135 <-- this shows the linear gain;
+#X text 74 167 <-- multiply the sine wave by the gain \, reducing its
+amplitude. You can also use the "*~" object to multiply two signals.
 The "0" argument here instructs it that we'll just send it messages
 to set the multiplier.;
-#X text 35 396 Here we calculate a gain for the multiplier (*~) using
+#X text 19 330 Here we calculate a gain for the multiplier (*~) using
 a "dbtorms" object (acronym for "dB to RMS"). 100 dB is normalized
 to one \, and zero dB artificially outputs a true 0;
-#X text 34 452 Pd assumes you have a two channel audio system unless
+#X text 19 376 Pd assumes you have a two channel audio system unless
 you tell it otherwise.;
-#X text 440 486 updated for Pd version 0.33;
-#X text 114 282 <-- and out. We're sending to both channels now.;
-#X connect 0 0 9 0;
-#X connect 9 0 1 0;
-#X connect 9 0 1 1;
-#X connect 11 0 9 1;
-#X connect 11 0 10 0;
-#X connect 12 0 11 0;
+#X text 72 225 <-- and out. We're sending to both channels now.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header controlling_amplitude
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 352 32 ../5.reference/pddp/dsp-reminder;
+#X obj 1 420 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 25 KEYWORDS signal conversion;
+#X text 12 65 DESCRIPTION controlling amplitude;
+#X restore 392 422 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 controlling amplitude- Related Help Documents;
+#X text 19 37 fill in later;
+#X restore 103 422 pd References;
+#X obj 6 422 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 4 0;
+#X connect 4 0 1 0;
+#X connect 4 0 1 1;
+#X connect 6 0 4 1;
+#X connect 6 0 5 0;
+#X connect 7 0 6 0;
diff --git a/pd/doc/3.audio.examples/A03.line.pd b/pd/doc/3.audio.examples/A03.line.pd
index 392df5331..5c1dd98fa 100644
--- a/pd/doc/3.audio.examples/A03.line.pd
+++ b/pd/doc/3.audio.examples/A03.line.pd
@@ -1,48 +1,75 @@
-#N canvas 369 106 647 598 12;
-#X obj 56 79 osc~ 440;
-#X obj 56 309 dac~;
-#X msg 446 79 \; pd dsp 1;
-#X msg 538 79 \; pd dsp 0;
-#X text 467 112 ON;
-#X text 555 112 OFF;
-#X obj 56 269 *~;
-#X obj 72 243 line~;
-#X text 129 243 <--- ramp generator;
-#X text 132 78 <-- sine wave;
-#X msg 72 103 0.1 2000;
-#X msg 72 177 0 2000;
-#X msg 72 125 0.1 50;
-#X msg 72 199 0 50;
-#X msg 72 147 0.1;
-#X msg 72 221 0;
-#X text 274 124 ON;
-#X text 154 105 <-- slow;
-#X text 144 126 <-- fast;
-#X text 111 146 <-- instantly;
-#X text 271 197 OFF;
-#X text 136 178 <-- slow;
-#X text 129 199 <-- fast;
-#X text 109 219 <-- instantly;
-#X text 112 161 ----------------------;
-#X text 97 308 <-- out;
-#X text 103 7 CONTROLLING AMPLITUDE USING LINE~;
-#X text 38 342 Line~'s left inlet is a target value \; it reaches that
-target in the time specified (in milliseconds) to its right inlet.
+#N canvas 433 100 448 550 10;
+#X obj 33 89 osc~ 440;
+#X obj 33 317 dac~;
+#X msg 316 79 \; pd dsp 1;
+#X msg 385 79 \; pd dsp 0;
+#X text 337 115 ON;
+#X text 402 115 OFF;
+#X obj 33 279 *~;
+#X obj 49 253 line~;
+#X text 106 253 <--- ramp generator;
+#X text 109 88 <-- sine wave;
+#X msg 49 113 0.1 2000;
+#X msg 49 187 0 2000;
+#X msg 49 135 0.1 50;
+#X msg 49 209 0 50;
+#X msg 49 157 0.1;
+#X msg 49 231 0;
+#X text 209 134 ON;
+#X text 131 115 <-- slow;
+#X text 121 136 <-- fast;
+#X text 88 156 <-- instantly;
+#X text 206 207 OFF;
+#X text 113 188 <-- slow;
+#X text 106 209 <-- fast;
+#X text 86 229 <-- instantly;
+#X text 89 171 ----------------------;
+#X text 74 316 <-- out;
+#X text 70 278 <-- multiply the sine wave by the ramp. There's no longer
+a "0" argument-- this tells Pd to expect a signal here.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header controlling_amplitude_using_[line~]
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
 ;
-#X text 34 495 The line~ object (and its control brother \, line) treat
-their right inlet specially. The inlets don't retain values the way
-other inlets do but revert to zero whenever a target is received.;
-#X text 14 27 In this patch \, the multiplier is configured to multiply
-two signals. The amplitude is now a signal computed by the line~ object.
+#X text 19 37 In this patch \, the multiplier is configured to multiply
+two signals. The amplitude is now a signal computed by the [line~]
+object.;
+#X text 19 343 [line~]'s left inlet is a target value \; it reaches
+that target in the time specified (in milliseconds) to its right inlet.
 ;
-#X text 37 395 (In this example \, message boxes with two numbers each
-are connected to line~'s left inlet. Except in some special cases \,
-Pd objects with more than one inlet will automatically distribute lists
-of numbers across their inlets. In this case \, "0 50" becomes \, "50
-at right and 0 at left.");
-#X text 386 557 updated for Pd version 0.36;
-#X text 93 268 <-- multiply the sine wave by the ramp. There's no longer
-a "0" argument-- this tells Pd to expect a signal here.;
+#X text 19 462 The [line~] object (and its control brother \, [line])
+treat their right inlet specially. The inlets don't retain values the
+way other inlets do but revert to zero whenever a target is received.
+;
+#X text 19 387 (In this example \, message boxes with two numbers each
+are connected to [line~]'s left inlet. Except in some special cases
+\, Pd objects with more than one inlet will automatically distribute
+lists of numbers across their inlets. In this case \, "0 50" becomes
+\, "50 at right and 0 at left.");
+#X obj 1 528 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 65 DESCRIPTION controlling amplitude using line~;
+#X text 12 25 KEYWORDS signal ramp;
+#X restore 392 530 pd META;
+#N canvas 12 325 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 using [line~]- Related Help Documents;
+#X text 19 37 Also see the control object for creating lines:;
+#X obj 22 58 line;
+#X text 19 87 For finer control than [line~] \, see:;
+#X obj 22 108 vline~;
+#X restore 103 530 pd References;
+#X obj 6 530 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 6 0;
 #X connect 6 0 1 0;
 #X connect 6 0 1 1;
diff --git a/pd/doc/3.audio.examples/A04.line2.pd b/pd/doc/3.audio.examples/A04.line2.pd
index c6dd16792..443c2789f 100644
--- a/pd/doc/3.audio.examples/A04.line2.pd
+++ b/pd/doc/3.audio.examples/A04.line2.pd
@@ -1,44 +1,36 @@
-#N canvas 30 68 949 754 12;
-#X obj 67 77 osc~ 440;
-#X obj 67 329 dac~;
-#X obj 67 242 *~;
-#X obj 86 180 line~;
-#X text 116 330 <-- out;
-#X text 124 9 LINES GRAPHED;
-#X text 24 33 Here again is a line~ controlling the amplitude of an
-osc~ \, but with the outputs graphed:;
-#X obj 149 89 r graphit;
-#X obj 151 179 r graphit;
-#X obj 151 246 r graphit;
-#X obj 86 149 r to-line;
-#X graph graph1 0 -1.02 44100 1.02 631 480 831 350;
+#N canvas 433 73 448 632 10;
+#X obj 62 77 osc~ 440;
+#X obj 62 288 dac~;
+#X obj 62 220 *~;
+#X obj 78 161 line~;
+#X text 101 288 <-- out;
+#X obj 144 92 r graphit;
+#X obj 146 160 r graphit;
+#X obj 146 224 r graphit;
+#X obj 78 139 r to-line;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array product 44100 float 0;
-#X pop;
-#X graph graph1 0 -1.02 44100 1.02 631 150 831 20;
+#X coords 0 1.02 44100 -1.02 100 65 1;
+#X restore 313 239 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array osc-output 44100 float 0;
-#X pop;
-#X graph graph1 0 -1.02 44100 1.02 631 315 831 185;
+#X coords 0 1.02 44100 -1.02 100 65 1;
+#X restore 313 73 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array line-output 44100 float 0;
-#X pop;
-#X obj 149 119 tabwrite~ osc-output;
-#X obj 67 299 *~ 0.1;
-#X msg 38 401 \; pd dsp 1 \; to-line 0 \, 1 500 \; graphit bang;
-#X msg 210 401 \; pd dsp 1 \; to-line 1 \, 0 500 \; graphit bang;
-#X obj 151 209 tabwrite~ line-output;
-#X obj 151 276 tabwrite~ product;
-#X text 70 379 ramp up;
-#X text 235 378 ramp down;
-#X text 406 376 to 1/2;
-#X msg 375 400 \; pd dsp 1 \; to-line 0.5 1000 \; graphit bang;
-#X text 634 491 ------ 1 second ------;
-#X text 38 485 Click the message boxes above to try it. Note that in
-the first two boxes \, the line~ objects get two messages. The first
-one \, with no time value \, causes the line~ to jump immediately to
-the value. The third box takes line~'s previous value as a point of
-departure. What you see will depend on which box you last clicked and
-how long you waited between the two.;
-#X text 662 727 updated for Pd version 0.33;
-#X text 41 600 On most machines \, you will hear an interruption in
+#X coords 0 1.02 44100 -1.02 100 65 1;
+#X restore 313 157 graph;
+#X obj 144 119 tabwrite~ osc-output;
+#X obj 62 263 *~ 0.1;
+#X msg 22 351 \; pd dsp 1 \; to-line 0 \, 1 500 \; graphit bang;
+#X msg 164 351 \; pd dsp 1 \; to-line 1 \, 0 500 \; graphit bang;
+#X obj 146 187 tabwrite~ line-output;
+#X obj 146 251 tabwrite~ product;
+#X text 54 331 ramp up;
+#X text 189 331 ramp down;
+#X text 336 331 to 1/2;
+#X msg 299 350 \; pd dsp 1 \; to-line 0.5 1000 \; graphit bang;
+#X text 18 496 On most machines \, you will hear an interruption in
 the sound one second after you click on the first or third box. This
 is because the graphical updates are likely to eat more CPU time than
 your audio buffer has pre-buffered for. You can avoid this if you keep
@@ -46,14 +38,56 @@ your graphs in sub-windows and open them only when you need them. In
 some future version of Pd this behavior will be improved. Until then
 \, you'll have to avoid having arrays getting re-drawn during music
 performances.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header lines_graphed 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 37 Here again is a [line~] controlling the amplitude of
+an [osc~] \, but with the outputs graphed:;
+#X obj 1 610 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION lines graphed;
+#X text 12 25 KEYWORDS signal ramp;
+#X restore 392 612 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Hello World- Related Help Documents;
+#X text 19 37 Mention the help link \, and the fact that you can basically
+click on anything to get a help patch on it. Also be sure to see the
+FAQ at puredata.info as you start out with Pd. A link can be found
+in the "Help" menu above.;
+#X text 18 90 Another hello world can be found in the mailing lists.
+You can search for answers to questions on there \, and if you're having
+a hard time finding info you can always ask questions \, too. (See
+the netiquette page before posting \, though.);
+#X text 69 159 rethink calling that an "atom";
+#X restore 103 612 pd References;
+#X text 314 304 --- 1 second ---;
+#X obj 6 612 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 412 Click the message boxes above to try it. Note that in
+the first two boxes \, the [line~] objects get two messages. The first
+one \, with no time value \, causes the [line~] to jump immediately
+to the value. The third box takes [line~]'s previous value as a point
+of departure. What you see will depend on which box you last clicked
+and how long you waited between the two.;
 #X connect 0 0 2 0;
-#X connect 0 0 14 0;
-#X connect 2 0 15 0;
-#X connect 2 0 19 0;
+#X connect 0 0 12 0;
+#X connect 2 0 13 0;
+#X connect 2 0 17 0;
 #X connect 3 0 2 1;
-#X connect 3 0 18 0;
-#X connect 7 0 14 0;
-#X connect 8 0 18 0;
-#X connect 9 0 19 0;
-#X connect 10 0 3 0;
-#X connect 15 0 1 0;
+#X connect 3 0 16 0;
+#X connect 5 0 12 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 3 0;
+#X connect 13 0 1 0;
diff --git a/pd/doc/3.audio.examples/A05.output.subpatch.pd b/pd/doc/3.audio.examples/A05.output.subpatch.pd
index d24fdba28..d06e6fcf6 100644
--- a/pd/doc/3.audio.examples/A05.output.subpatch.pd
+++ b/pd/doc/3.audio.examples/A05.output.subpatch.pd
@@ -1,20 +1,18 @@
-#N canvas 300 159 635 486 12;
-#X text 261 20 CONTROLLING OUTPUT AMPLITUDE;
-#X obj 32 27 osc~ 440;
-#X obj 54 55 osc~ 550;
-#X obj 54 116 osc~ 660;
-#X obj 32 88 +~;
-#X obj 32 142 +~;
-#X text 108 177 <-- this is a subwindow--right click on it;
-#X text 149 197 and select "open" to see inside.;
-#X text 30 401 The output control automatically starts DSP whenever
+#N canvas 433 138 448 436 10;
+#X obj 22 42 osc~ 440;
+#X obj 37 70 osc~ 550;
+#X obj 38 131 osc~ 660;
+#X obj 22 103 +~;
+#X obj 22 157 +~;
+#X text 103 188 <-- this is a subwindow--right click on it;
+#X text 144 203 and select "open" to see inside.;
+#X text 18 359 The output control automatically starts DSP whenever
 you touch the level control. Hitting "mute" toggles between the current
 level and zero.;
-#X obj 32 173 output~;
-#X text 383 463 updated for Pd version 0.36;
-#X text 143 115 <-- Here we make an A major triad as a test signal.
+#X obj 22 188 output~;
+#X text 97 131 <-- Here we make an A major triad as a test signal.
 ;
-#X text 31 250 In this and subsequent patches \, we'll use a subwindow
+#X text 19 248 In this and subsequent patches \, we'll use a subwindow
 \, "output" \, to control overall amplitude. The amplitudes are in
 decibels \, with 100 being full blast. In this example \, you can't
 actually push the output amplitude past 90 or so without clipping.
@@ -22,9 +20,34 @@ You'll know you're clipping if \, instead of an A major chord \, you
 hear a single \, distorted tone two octaves down. The clipping happens
 at Pd's last stage of audio output. Audio signals internal to Pd have
 essentially no level limit.;
-#X connect 1 0 4 0;
+#X obj 1 414 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.36. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal GUI;
+#X text 12 65 DESCRIPTION controlling output amplitude;
+#X restore 392 416 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 controlling output amplitude- Related Help Documents;
+#X text 19 37 List other amplitude GUIs here;
+#X restore 103 416 pd References;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header controlling_output_amplitude
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 6 416 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 3 0;
+#X connect 1 0 3 1;
 #X connect 2 0 4 1;
-#X connect 3 0 5 1;
-#X connect 4 0 5 0;
-#X connect 5 0 9 0;
-#X connect 5 0 9 1;
+#X connect 3 0 4 0;
+#X connect 4 0 8 0;
+#X connect 4 0 8 1;
diff --git a/pd/doc/3.audio.examples/A06.frequency.pd b/pd/doc/3.audio.examples/A06.frequency.pd
index b0601b0e9..3a4096ad5 100644
--- a/pd/doc/3.audio.examples/A06.frequency.pd
+++ b/pd/doc/3.audio.examples/A06.frequency.pd
@@ -1,53 +1,80 @@
-#N canvas 8 17 693 642 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 433 94 448 570 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array osc-output 4410 float 0;
-#X coords 0 1.02 4410 -1.02 200 130 1;
-#X restore 473 167 graph;
-#X obj 98 261 tabwrite~ osc-output;
-#X msg 98 232 bang;
-#X floatatom 280 66 0 0 0 0 - - -;
-#X text 147 231 <-- click to graph;
-#X obj 15 206 r frequency;
-#X msg 280 37 set \$1;
-#X floatatom 6 66 0 0 0 0 - - -;
-#X obj 6 8 r frequency;
-#X msg 6 37 set \$1;
-#X obj 19 90 s frequency;
-#X obj 280 8 r pitch;
-#X obj 289 90 s pitch;
-#X obj 280 116 mtof;
-#X obj 280 145 s frequency;
-#X obj 6 145 s pitch;
-#X obj 6 116 ftom;
-#X text 105 66 <-- set frequency;
-#X text 372 65 <-- set MIDI pitch;
-#X text 15 429 Frequency and pitch are converted using the "ftom" and
-"mtof" objects. Frequency refers to the number of cycles per second.
-Pitch is "60" for Middle C \, 61 for C sharp \, 72 for the next C up
-\, and so on.;
-#X text 476 308 ---- 0.1 seconds ----;
-#X text 447 6 FREQUENCY AND PITCH;
-#X text 16 363 The osc~ object \, if you give it an argument \, expects
+#X coords 0 1.02 4410 -1.02 180 117 1;
+#X restore 259 210 graph;
+#X obj 105 255 tabwrite~ osc-output;
+#X msg 105 226 bang;
+#X floatatom 246 90 0 0 0 0 - - -;
+#X text 141 226 <-- click to graph;
+#X obj 22 200 r frequency;
+#X msg 246 66 set \$1;
+#X floatatom 22 90 0 0 0 0 - - -;
+#X obj 22 42 r frequency;
+#X msg 22 66 set \$1;
+#X obj 35 114 s frequency;
+#X obj 246 42 r pitch;
+#X obj 255 114 s pitch;
+#X obj 246 140 mtof;
+#X obj 246 164 s frequency;
+#X obj 22 164 s pitch;
+#X obj 22 140 ftom;
+#X text 69 90 <-- set frequency;
+#X text 288 89 <-- set MIDI pitch;
+#X text 19 498 Note also the "set" messages going to the number boxes
+so that they can each update the other without bringing on an infinite
+loop. (get help on number boxes for details.);
+#X text 94 285 <-- output level;
+#X text 67 140 <-- convert frequency;
+#X text 122 158 to "MIDI" pitch;
+#X obj 22 267 output~;
+#X obj 22 226 osc~;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header frequency_and_pitch
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 293 141 <-- convert "MIDI" pitch;
+#X text 359 157 to frequency;
+#X text 255 327 --------- 0.1 seconds ---------;
+#X text 19 349 The [osc~] object \, if you give it an argument \, expects
 floating-point messages to set its frequency. Without arguments \,
 its frequency is controlled by connecting an audio signal to its input.
 ;
-#X text 14 496 Mtof and ftom work fine for microtones (non-integral
+#X text 19 402 Frequency and pitch are converted using the [ftom] and
+[mtof] objects. Frequency refers to the number of cycles per second.
+Pitch is "60" for Middle C \, 61 for C sharp \, 72 for the next C up
+\, and so on.;
+#X text 19 456 [mtof] and [ftom] work fine for microtones (non-integral
 "MIDI pitch" ) and don't have MIDI's range restriction-- for example
 \, MIDI -36 is about 1 Hz.;
-#X text 15 553 Note also the "set" messages going to the number boxes
-so that they can each update the other without bringing on an infinite
-loop. (get help on number boxes for details.);
-#X text 87 291 <-- output level;
-#X text 51 116 <-- convert frequency;
-#X text 106 134 to "MIDI" pitch;
-#X text 327 117 <-- convert "MIDI" pitch to frequency;
-#X obj 15 273 output~;
-#X text 437 619 updated for Pd version 0.36;
-#X obj 15 232 osc~;
+#X obj 1 548 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.36. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS MIDI conversion;
+#X text 12 65 DESCRIPTION frequency and pitch;
+#X restore 392 550 pd META;
+#N canvas 12 348 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 frequency and pitch- Related Help Documents;
+#X text 19 37 There are many other objects used to convert acoustic
+units. See:;
+#X obj 19 64 pddp/pddplink ../5.reference/all_about_acoustic_conversions.pd
+-text doc/5.reference/all_about_acoustic_conversions.pd;
+#X restore 103 550 pd References;
+#X obj 6 550 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 2 0 1 0;
 #X connect 3 0 12 0;
 #X connect 3 0 13 0;
-#X connect 5 0 31 0;
+#X connect 5 0 24 0;
 #X connect 6 0 3 0;
 #X connect 7 0 10 0;
 #X connect 7 0 16 0;
@@ -56,6 +83,6 @@ loop. (get help on number boxes for details.);
 #X connect 11 0 6 0;
 #X connect 13 0 14 0;
 #X connect 16 0 15 0;
-#X connect 31 0 1 0;
-#X connect 31 0 29 0;
-#X connect 31 0 29 1;
+#X connect 24 0 1 0;
+#X connect 24 0 23 0;
+#X connect 24 0 23 1;
diff --git a/pd/doc/3.audio.examples/A07.fusion.pd b/pd/doc/3.audio.examples/A07.fusion.pd
index e391099cb..9e85dc063 100644
--- a/pd/doc/3.audio.examples/A07.fusion.pd
+++ b/pd/doc/3.audio.examples/A07.fusion.pd
@@ -1,55 +1,78 @@
-#N canvas 18 14 650 653 12;
-#X floatatom 32 60 0 0 0 0 - - -;
-#X obj 32 86 mtof;
-#X obj 32 323 output~;
-#X msg 32 34 60;
-#X text 67 63 <-- choose a pitch;
-#X text 68 34 <-- reset to middle C;
-#X obj 32 154 osc~;
-#X obj 73 130 * 2;
-#X obj 73 154 osc~;
-#X obj 137 154 osc~;
-#X obj 137 130 * 3;
-#X obj 201 155 osc~;
-#X obj 201 131 * 4;
-#X obj 137 179 *~ 0.2;
-#X obj 33 289 +~;
-#X obj 74 259 *~;
-#X obj 109 260 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 74 210 +~;
-#X obj 74 234 +~;
-#X text 133 7 Adding sinusoids to make a complex tone;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 433 76 448 623 10;
+#X floatatom 22 82 0 0 0 0 - - -;
+#X obj 22 108 mtof;
+#X obj 22 350 output~;
+#X msg 22 56 60;
+#X text 57 85 <-- choose a pitch;
+#X text 58 56 <-- reset to middle C;
+#X obj 22 189 osc~;
+#X obj 63 165 * 2;
+#X obj 63 189 osc~;
+#X obj 127 189 osc~;
+#X obj 127 165 * 3;
+#X obj 191 190 osc~;
+#X obj 191 166 * 4;
+#X obj 127 214 *~ 0.2;
+#X obj 23 316 +~;
+#X obj 64 291 *~;
+#X obj 99 292 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 64 242 +~;
+#X obj 64 266 +~;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array tab.01.07 882 float 0;
-#X coords 0 1.02 881 -1.02 200 130 1;
-#X restore 426 222 graph;
-#X msg 116 295 bang;
-#X text 165 294 <-- click to graph;
-#X text 260 129 frequencies of harmonics;
-#X text 260 155 four oscillators;
-#X text 264 181 adjust amplitudes;
-#X text 109 233 add the three overtones together;
-#X obj 116 324 tabwrite~ tab.01.07;
-#X text 381 632 updated for Pd version 0.40.;
-#X text 429 360 ---- 0.02 seconds ----;
-#X obj 73 179 *~ 0.1;
-#X obj 201 179 *~ 0.5;
-#X text 129 259 <-- overtones ON/OFF;
-#X text 29 580 To hear the output \, choose a pitch (at top) \, optionally
+#X coords 0 1.02 881 -1.02 160 104 1;
+#X restore 267 42 graph;
+#X msg 106 322 bang;
+#X text 155 321 <-- click to graph;
+#X text 222 165 frequencies of harmonics;
+#X text 233 190 four oscillators;
+#X text 237 215 adjust amplitudes;
+#X text 99 265 add the three overtones together;
+#X obj 106 351 tabwrite~ tab.01.07;
+#X obj 63 214 *~ 0.1;
+#X obj 191 214 *~ 0.5;
+#X text 119 291 <-- overtones ON/OFF;
+#X text 19 545 To hear the output \, choose a pitch (at top) \, optionally
 click the "overtones" control \, and mouse up the output volume. Click
 the "bang" message to graph it.;
-#X text 31 392 A simple way to build non-sinusoidal \, periodic musical
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header adding_sinusoids_to_make_a_complex_tone
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 601 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.40. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION adding sinusoids to make a complex tone;
+#X restore 392 603 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 additive synthesis- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 603 pd References;
+#X text 268 145 ------ 0.02 seconds ------;
+#X text 19 404 A simple way to build non-sinusoidal \, periodic musical
 tones is to sum a series of harmonically tuned sinusoids. Here the
-four oscillators have frequencies in a 1:2:3:4 ratio (the three "*"
+four oscillators have frequencies in a 1:2:3:4 ratio (the three [*]
 objects compute the second \, third \, and fourth one). The amplitudes
-are adjusted by the "*~ 0.1" \, etc. \, objects. Note that \, since
-the frequency (from the "mtof") is a message \, a "*" box suffices
+are adjusted by the [*~ 0.1] \, etc. \, objects. Note that \, since
+the frequency (from the [mtof]) is a message \, a [*] box suffices
 to operate on it \, but the oscillator's output \, being an audio signal
-\, needs "*~" instead. The control marked "overtones ON/OFF" is a toggle
-switch. Click to turn it on and off. Of the overtones are "off" you
-hear only a sinusoid from the forst oscillator. If on \, you hear all
+\, needs [*~] instead. The control marked "overtones ON/OFF" is a toggle
+switch. Click to turn it on and off. If the overtones are "off" you
+hear only a sinusoid from the first oscillator. If on \, you hear all
 four.;
+#X obj 6 603 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 1 0;
 #X connect 1 0 6 0;
 #X connect 1 0 7 0;
@@ -58,19 +81,19 @@ four.;
 #X connect 3 0 0 0;
 #X connect 6 0 14 0;
 #X connect 7 0 8 0;
-#X connect 8 0 30 0;
+#X connect 8 0 27 0;
 #X connect 9 0 13 0;
 #X connect 10 0 9 0;
-#X connect 11 0 31 0;
+#X connect 11 0 28 0;
 #X connect 12 0 11 0;
 #X connect 13 0 17 1;
 #X connect 14 0 2 0;
 #X connect 14 0 2 1;
-#X connect 14 0 27 0;
+#X connect 14 0 26 0;
 #X connect 15 0 14 1;
 #X connect 16 0 15 1;
 #X connect 17 0 18 0;
 #X connect 18 0 15 0;
-#X connect 21 0 27 0;
-#X connect 30 0 17 0;
-#X connect 31 0 18 1;
+#X connect 20 0 26 0;
+#X connect 27 0 17 0;
+#X connect 28 0 18 1;
diff --git a/pd/doc/3.audio.examples/A08.beating.pd b/pd/doc/3.audio.examples/A08.beating.pd
index e76574504..c5be63076 100644
--- a/pd/doc/3.audio.examples/A08.beating.pd
+++ b/pd/doc/3.audio.examples/A08.beating.pd
@@ -1,41 +1,64 @@
-#N canvas 53 63 581 571 12;
-#X obj 31 212 output~;
-#X obj 32 178 +~;
-#X text 320 537 updated for Pd version 0.40.;
-#X obj 32 110 +~;
-#X obj 187 105 +~;
-#X obj 187 52 osc~ 440;
-#X obj 32 57 osc~ 330;
-#X obj 53 81 osc~ 330.2;
-#X obj 208 75 osc~ 440.33;
-#X obj 342 102 +~;
-#X obj 343 52 osc~ 587;
-#X obj 364 75 osc~ 587.25;
-#X obj 33 147 +~;
-#X text 133 7 Beating between closely tuned sinusoids;
-#X text 33 280 In each of the three pairs of oscillators above \, the
+#N canvas 433 117 448 500 10;
+#X obj 21 197 output~;
+#X obj 22 163 +~;
+#X obj 22 95 +~;
+#X obj 155 95 +~;
+#X obj 155 42 osc~ 440;
+#X obj 22 42 osc~ 330;
+#X obj 38 69 osc~ 330.2;
+#X obj 171 69 osc~ 440.33;
+#X obj 302 92 +~;
+#X obj 303 42 osc~ 587;
+#X obj 318 68 osc~ 587.25;
+#X obj 23 132 +~;
+#X text 18 258 In each of the three pairs of oscillators above \, the
 two frequencies are within 1/3 Hz or closer (for example \, the leftmost
 ones are close to 330 Hz but separated by 1/5 Hz.) The result is a
 gradual change in amplitude as the phases of the two slip against each
 other. This is called beating. More complex beating pattenrs may be
 made by using three or more oscillators. Also their amplitudes need
 not be equal (as they are here).;
-#X text 31 407 They are all summed using "+~" boxes. They could have
-been summed in any order ("+~" is commutative for practical purposes)
-but here they are added in pairs to emphasize the relationships between
-them.;
-#X text 30 474 In contrast to the previous example \, the oscillators
+#X text 18 423 In contrast to the previous example \, the oscillators
 are not tuned to the overtone series (ratios 1:2:3:4...) and so the
 frequencies 330 \, 440 \, and 587 are heard separately.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header beating_between_closely_tuned_sinusoids
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 478 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.40. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION beating between closely tuned sinusoids;
+#X restore 392 480 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 Links:;
+#X text 7 2 beating- Related Help Documents;
+#X restore 103 480 pd References;
+#X text 19 361 They are all summed using [+~] boxes. They could have
+been summed in any order ([+~] is commutative for practical purposes)
+but here they are added in pairs to emphasize the relationships between
+them.;
+#X obj 6 480 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 0 0;
 #X connect 1 0 0 1;
-#X connect 3 0 12 0;
-#X connect 4 0 12 1;
-#X connect 5 0 4 0;
-#X connect 6 0 3 0;
+#X connect 2 0 11 0;
+#X connect 3 0 11 1;
+#X connect 4 0 3 0;
+#X connect 5 0 2 0;
+#X connect 6 0 2 1;
 #X connect 7 0 3 1;
-#X connect 8 0 4 1;
-#X connect 9 0 1 1;
-#X connect 10 0 9 0;
-#X connect 11 0 9 1;
-#X connect 12 0 1 0;
+#X connect 8 0 1 1;
+#X connect 9 0 8 0;
+#X connect 10 0 8 1;
+#X connect 11 0 1 0;
diff --git a/pd/doc/3.audio.examples/A09.frequency.mod.pd b/pd/doc/3.audio.examples/A09.frequency.mod.pd
index aedb1cc14..cb7af277f 100644
--- a/pd/doc/3.audio.examples/A09.frequency.mod.pd
+++ b/pd/doc/3.audio.examples/A09.frequency.mod.pd
@@ -1,54 +1,79 @@
-#N canvas 92 96 760 640 12;
-#X obj 259 168 *~;
-#X floatatom 259 83 0 0 0 0 - - -;
-#X floatatom 169 118 0 0 0 0 - - -;
-#X obj 169 188 +~;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 433 90 448 581 10;
+#X obj 178 161 *~;
+#X floatatom 178 76 0 0 0 0 - - -;
+#X floatatom 106 111 0 0 0 0 - - -;
+#X obj 106 191 +~;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array fm-output 441 float 0;
-#X coords 0 1.02 440 -1.02 200 130 1;
-#X restore 527 40 graph;
-#X msg 244 228 bang;
-#X text 286 228 <-- click to graph;
-#X obj 244 252 tabwrite~ fm-output;
-#X floatatom 281 138 0 0 0 0 - - -;
-#X text 166 75 carrier;
-#X text 165 93 frequency;
-#X text 244 59 frequency;
-#X text 245 42 modulation;
-#X text 33 8 FREQUENCY MODULATION ("FM") USING TWO OSCILLATORS;
-#X obj 168 232 osc~;
-#X text 52 214 "carrier";
-#X text 34 232 oscillator -->;
-#X text 47 149 add modulator;
-#X text 46 167 to carrier;
-#X text 44 186 frequency -->;
-#X text 320 150 index;
-#X text 322 131 modulation;
-#X obj 259 108 osc~;
-#X text 531 172 --- 0.01 seconds ----;
-#X text 53 443 To get the FM sound \, set all three of carrier frequency
+#X coords 0 1.02 440 -1.02 150 97 1;
+#X restore 289 57 graph;
+#X msg 181 241 bang;
+#X text 217 241 <-- click to graph;
+#X obj 181 265 tabwrite~ fm-output;
+#X floatatom 193 131 0 0 0 0 - - -;
+#X text 102 72 carrier;
+#X text 102 86 frequency;
+#X text 163 52 frequency;
+#X text 163 38 modulation;
+#X obj 105 235 osc~;
+#X text 14 220 "carrier";
+#X text 15 235 oscillator -->;
+#X text 14 160 add modulator;
+#X text 13 175 to carrier;
+#X text 11 190 frequency -->;
+#X text 220 138 index;
+#X text 219 124 modulation;
+#X obj 178 101 osc~;
+#X text 19 426 To get the FM sound \, set all three of carrier frequency
 \, modulation frequency \, and modulation index in the hundreds. Note
 that you get a timbral change as you sweep modulation index \, because
 this changes the amplitudes of the components of the output sound but
 not their frequencies.;
-#X obj 167 270 output~;
-#X text 489 613 updated for Pd version 0.37;
-#X text 54 332 This patch shows the classical FM synthesis technique
+#X obj 104 273 output~;
+#X text 19 332 This patch shows the classical FM synthesis technique
 developed by John Chowning. It's nothing but an oscillator with vibrato
 controlled by another "modulation" oscillator. First \, to understand
 the patch \, set carrier frequency to 400 or so \, modulation frequency
 between 5 and 10 \, and try modulation index values between 0 and 400
 \, say. You'll hear a sine wave with vibrato.;
-#X text 55 526 The component frequencies are equal to the carrier frequency
+#X text 19 493 The component frequencies are equal to the carrier frequency
 \, plus or minus multiples of the modulator frequency. A more complete
 discussion of FM occurs in part 5 of this series.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header frequency_modulation_using_two_oscillators
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 559 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION frequency modulation using two oscillators
+;
+#X text 12 25 KEYWORDS signal;
+#X restore 392 561 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 frequency modulation- Related Help Documents;
+#X text 19 37 Refer to the other audio examples that deal with frequency
+modulation.;
+#X restore 103 561 pd References;
+#X text 289 154 ----- 0.01 seconds -----;
+#X obj 6 561 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 3 1;
-#X connect 1 0 22 0;
+#X connect 1 0 21 0;
 #X connect 2 0 3 0;
-#X connect 3 0 14 0;
+#X connect 3 0 13 0;
 #X connect 5 0 7 0;
 #X connect 8 0 0 1;
-#X connect 14 0 7 0;
-#X connect 14 0 25 0;
-#X connect 14 0 25 1;
-#X connect 22 0 0 0;
+#X connect 13 0 7 0;
+#X connect 13 0 23 0;
+#X connect 13 0 23 1;
+#X connect 21 0 0 0;
diff --git a/pd/doc/3.audio.examples/A10.review.pd b/pd/doc/3.audio.examples/A10.review.pd
index fbaaee431..94193a417 100644
--- a/pd/doc/3.audio.examples/A10.review.pd
+++ b/pd/doc/3.audio.examples/A10.review.pd
@@ -1,37 +1,61 @@
-#N canvas 36 68 652 461 12;
-#X text 157 10 PART 1 REVIEW;
-#X obj 67 113 tabwrite~;
-#X obj 67 87 line~;
-#X obj 71 220 +;
-#X obj 67 61 +~;
-#X obj 67 139 osc~;
-#X obj 72 319 r;
-#X obj 72 295 s;
-#X obj 71 269 inlet;
-#X obj 114 245 mtof;
-#X obj 71 244 ftom;
-#X obj 122 269 outlet;
-#X obj 67 164 dac~;
-#X text 27 34 So far we've seen these audio ("tilde") objects:;
-#X text 124 86 -- ramp generator;
-#X text 158 113 -- sampler (which we've only used for graphing so far)
+#N canvas 433 124 448 479 10;
+#X obj 49 116 tabwrite~;
+#X obj 49 90 line~;
+#X obj 49 222 +;
+#X obj 49 64 +~;
+#X obj 49 142 osc~;
+#X obj 50 321 r;
+#X obj 50 297 s;
+#X obj 49 271 inlet;
+#X obj 92 247 mtof;
+#X obj 49 246 ftom;
+#X obj 100 271 outlet;
+#X obj 49 167 dac~;
+#X text 19 37 So far we've seen these audio ("tilde") objects:;
+#X text 106 89 -- ramp generator;
+#X text 111 116 -- sampler (which we've only used for graphing so far)
 ;
-#X text 113 165 -- audio output ("digital/analog converter" -- a misnomer)
+#X text 95 168 -- audio output ("digital/analog converter" -- a misnomer)
 ;
-#X text 34 193 ... and these "control" objects:;
-#X text 162 243 -- frequency to pitch conversion;
-#X text 184 270 -- input and output to a subpatch;
-#X text 108 296 ("send") -- wireless message sending;
-#X text 109 321 ("receive") ... and receiving;
-#X text 107 60 (etc.) -- arithmetic on audio signals;
-#X text 109 218 (etc.) -- arithmetic;
-#X text 385 426 updated for Pd version 0.40.;
-#X text 112 139 -- sinusoidal oscillator;
-#X obj 74 418 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+#X text 17 194 ... and these "control" objects:;
+#X text 140 245 -- frequency to pitch conversion;
+#X text 162 272 -- input and output to a subpatch;
+#X text 86 298 ("send") -- wireless message sending;
+#X text 87 323 ("receive") ... and receiving;
+#X text 89 63 (etc.) -- arithmetic on audio signals;
+#X text 87 220 (etc.) -- arithmetic;
+#X text 94 142 -- sinusoidal oscillator;
+#X obj 50 421 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
-#X text 97 416 -- toggle switch;
-#X floatatom 74 395 0 0 0 0 - - -;
-#X text 109 394 -- number box;
-#X msg 74 372;
-#X text 111 372 -- message box;
-#X text 43 346 ... and these other (non-object) boxes:;
+#X text 73 419 -- toggle switch;
+#X floatatom 50 398 0 0 0 0 - - -;
+#X text 85 397 -- number box;
+#X msg 50 375;
+#X text 87 375 -- message box;
+#X text 17 348 ... and these other (non-object) boxes:;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header Part_1_Review 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 457 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION review of part 1 of the audio tutorials;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.40. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.43.;
+#X restore 392 459 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 review of objects- Related Help Documents;
+#X text 19 37 For a complete list of internal Pd objects \, right-click
+on an empty part of this canvas and choose "Help".;
+#X restore 103 459 pd References;
+#X obj 6 459 pddp/pddplink ../5.reference/pddp/help.pd -text help;
diff --git a/pd/doc/3.audio.examples/B01.wavetables.pd b/pd/doc/3.audio.examples/B01.wavetables.pd
index 66549d3ed..e6d916f72 100644
--- a/pd/doc/3.audio.examples/B01.wavetables.pd
+++ b/pd/doc/3.audio.examples/B01.wavetables.pd
@@ -1,6 +1,6 @@
-#N canvas 19 22 722 608 12;
-#X floatatom 164 43 0 0 0 0 - - -;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 433 90 448 580 10;
+#X floatatom 87 109 0 0 0 0 - - -;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array table10 259 float 1;
 #A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0.612 0.612 0.612 0.612 0.612 0.627692 0 0 0 0 0 0 0 0 0 0 0 0
@@ -14,37 +14,60 @@
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
 #X coords 0 1.02 258 -1.02 258 130 1;
-#X restore 445 47 graph;
-#X text 30 123 oscillator -->;
-#X text 456 587 updated for Pd version 0.34;
-#X text 33 8 WAVETABLE OSCILLATORS;
-#X text 36 106 wavetable;
-#X obj 164 70 mtof;
-#X floatatom 164 97 0 0 0 0 - - -;
-#X obj 164 123 tabosc4~ table10;
-#X text 94 42 pitch->;
-#X text 35 309 Note that I selected "save contents" in the properties
+#X restore 176 47 graph;
+#X obj 87 136 mtof;
+#X floatatom 87 163 0 0 0 0 - - -;
+#X obj 87 189 tabosc4~ table10;
+#X text 17 323 Note that I selected "save contents" in the properties
 dialog for table10 (right click on the table to see.) If this isn't
 set \, the waveform won't be remembered as part of the patch but will
 be reinitialized to zero when the patch is reopened.;
-#X msg 35 549 \; table10 cosinesum 256 0.2 -0.2 0.2 -0.2 0.2 -0.2 0.2
+#X msg 21 507 \; table10 cosinesum 256 0.2 -0.2 0.2 -0.2 0.2 -0.2 0.2
 ;
-#X msg 578 240 \; table10 const 0;
-#X text 597 217 CLEAR TABLE;
-#X text 35 395 For efficiency's sake tabosc4~ requires that the table
+#X msg 328 222 \; table10 const 0;
+#X text 341 201 CLEAR TABLE;
+#X text 17 386 For efficiency's sake tabosc4~ requires that the table
 have a power of two plus three points (64+3=67 \, 128+3=131 \, 256+3=259
 \, etc.) If you want wraparound to work smoothly \, you should make
 the last three points copies of the first three. This is done because
 tabread4~ does 4-point interpolation.;
-#X text 38 494 If you want a specific sinusoidal composition \, you
+#X text 18 460 If you want a specific sinusoidal composition \, you
 can send table10 a message \, as below (see 11.arrays in the control
 examples):;
-#X text 36 240 Here \, in place of the "osc~" cosine wave oscillator
+#X text 18 270 Here \, in place of the "osc~" cosine wave oscillator
 \, we introduce the tabosc4~ oscillator which produces an arbitrary
 waveform. You can draw in the waveform with the mouse.;
-#X obj 164 151 output~;
-#X connect 0 0 6 0;
-#X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 8 0 17 0;
-#X connect 8 0 17 1;
+#X obj 87 217 output~;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header wavetable_oscillators
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 18 109 pitch -->;
+#X text 193 189 <-- wavetable;
+#X text 211 203 oscillator;
+#X obj 1 558 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.40. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal array;
+#X text 12 65 DESCRIPTION wavetable oscillators;
+#X restore 392 560 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 wavetable oscillators- Related Help Documents;
+#X text 19 37 List all the other tab-objects here;
+#X restore 103 560 pd References;
+#X obj 6 560 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 12 0;
+#X connect 4 0 12 1;
diff --git a/pd/doc/3.audio.examples/B02.two-wavetables.pd b/pd/doc/3.audio.examples/B02.two-wavetables.pd
index c4cc6d600..e76470081 100644
--- a/pd/doc/3.audio.examples/B02.two-wavetables.pd
+++ b/pd/doc/3.audio.examples/B02.two-wavetables.pd
@@ -1,5 +1,5 @@
-#N canvas 74 98 749 466 12;
-#X graph graph1 0 -1.02 258 1.02 475 298 733 168;
+#N canvas 433 131 448 459 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array waveform11 259 float 1;
 #A 0 -0.0896033 0 0.0896033 0.178356 0.265425 0.350007 0.431348 0.508756
 0.58161 0.649372 0.711597 0.767935 0.818137 0.862053 0.89963 0.930912
@@ -37,8 +37,9 @@
 -0.956033 -0.930918 -0.899638 -0.862061 -0.818147 -0.767947 -0.71161
 -0.649386 -0.581625 -0.508772 -0.431366 -0.350025 -0.265443 -0.178375
 -0.0896226 -1.94061e-05 0.089584;
-#X pop;
-#X floatatom 202 171 0 0 100;
+#X coords 0 1.02 258 -1.02 258 130 1;
+#X restore 175 208 graph;
+#X floatatom 46 203 0 0 100 0 - - -;
 #N canvas 159 26 532 285 output 0;
 #X obj 338 160 t b;
 #X obj 338 110 f;
@@ -92,14 +93,10 @@
 #X connect 23 0 20 0;
 #X connect 26 0 5 0;
 #X connect 27 0 21 0;
-#X restore 164 199 pd output;
-#X msg 240 172 MUTE;
-#X text 30 123 oscillator -->;
-#X text 485 445 updated for Pd version 0.34;
-#X text 33 8 WAVETABLE OSCILLATORS;
-#X text 36 106 wavetable;
-#X text 88 54 pitch->;
-#X graph graph2 0 0 258 1000 475 155 734 15;
+#X restore 21 228 pd output;
+#X msg 72 204 MUTE;
+#X text 43 144 wavetable;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array pitch11 259 float 1;
 #A 0 757.143 757.143 735.714 700 671.429 650 621.429 600 571.429 550
 521.429 507.143 485.714 464.286 442.857 428.571 414.286 400 378.571
@@ -129,19 +126,55 @@
 207.143 921.429 921.429 921.429 921.429 207.143 207.143 200 200 957.143
 957.143 950 214.286 214.286 207.143 207.143 957.143 957.143 950 200
 207.143 207.143 942.857 942.857 942.857 950 950;
-#X pop;
-#X obj 164 87 tabosc4~ pitch11;
-#X obj 164 123 tabosc4~ waveform11;
-#X obj 164 55 sig~ 0.5;
-#X text 13 319 Here's a tabosc4~ controlling the frequency of another
+#X coords 0 1000 258 0 259 140 1;
+#X restore 175 46 graph;
+#X obj 21 112 tabosc4~ pitch11;
+#X obj 21 175 tabosc4~ waveform11;
+#X obj 21 85 sig~ 0.5;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header wavetable_oscillators
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 25 64 pitch;
+#X text 41 157 oscillator;
+#X text 18 349 Here's a [tabosc4~] controlling the frequency of another
 one. If you get properties on the two arrays \, you'll see that the
 top graph has a vertical scale from 0 to 1000 \; we're looping through
 that at a frequency of 0.5 Hz. and the output is used as the frequency
-input of the second tabosc4~. I've detected Klingons \, Captain Kirk...
+input of the second [tabosc4~]. I've detected Klingons \, Captain Kirk...
 ;
+#X obj 1 437 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal array GUI;
+#X text 12 65 DESCRIPTION wavetable oscillators;
+#X restore 392 439 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Hello World- Related Help Documents;
+#X text 19 37 Mention the help link \, and the fact that you can basically
+click on anything to get a help patch on it. Also be sure to see the
+FAQ at puredata.info as you start out with Pd. A link can be found
+in the "Help" menu above.;
+#X text 18 90 Another hello world can be found in the mailing lists.
+You can search for answers to questions on there \, and if you're having
+a hard time finding info you can always ask questions \, too. (See
+the netiquette page before posting \, though.);
+#X text 69 159 rethink calling that an "atom";
+#X restore 103 439 pd References;
+#X obj 6 439 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 2 1;
 #X connect 2 0 1 0;
 #X connect 3 0 2 2;
-#X connect 10 0 11 0;
-#X connect 11 0 2 0;
-#X connect 12 0 10 0;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 0 6 0;
diff --git a/pd/doc/3.audio.examples/B03.tabread4.pd b/pd/doc/3.audio.examples/B03.tabread4.pd
index 15fa66529..3d7ba6486 100644
--- a/pd/doc/3.audio.examples/B03.tabread4.pd
+++ b/pd/doc/3.audio.examples/B03.tabread4.pd
@@ -1,5 +1,5 @@
-#N canvas 55 137 820 651 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 374 90 626 581 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array waveform12 131 float 1;
 #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
@@ -19,8 +19,8 @@
 -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 462 30 graph;
-#X floatatom 194 299 0 0 100 0 - - -;
+#X restore 311 42 graph;
+#X floatatom 131 292 0 0 100 0 - - -;
 #N canvas 159 26 532 285 output 0;
 #X obj 338 160 t b;
 #X obj 338 110 f;
@@ -74,57 +74,80 @@
 #X connect 23 0 20 0;
 #X connect 26 0 5 0;
 #X connect 27 0 21 0;
-#X restore 156 327 pd output;
-#X msg 232 300 MUTE;
-#X text 33 8 WAVETABLE OSCILLATORS;
-#X obj 156 95 phasor~;
-#X obj 156 184 tabread4~ waveform12;
-#X obj 156 157 +~ 1;
-#X floatatom 156 66 4 0 0 0 - - -;
-#X floatatom 250 59 4 0 1000 0 - - -;
-#X obj 250 80 pack 0 50;
-#X obj 250 104 line~;
-#X obj 156 131 *~;
-#X text 21 81 phase;
-#X text 20 96 generation -->;
-#X text 25 117 range;
-#X text 24 132 adjustment -->;
-#X text 250 38 squeeze;
-#X text 133 40 frequency;
-#N canvas 0 0 450 300 graph3 0;
+#X restore 106 317 pd output;
+#X msg 157 293 MUTE;
+#X obj 106 88 phasor~;
+#X obj 106 207 tabread4~ waveform12;
+#X obj 106 180 +~ 1;
+#X floatatom 106 59 4 0 0 0 - - -, f 4;
+#X floatatom 170 59 4 0 1000 0 - - -, f 4;
+#X obj 170 80 pack 0 50;
+#X obj 170 104 line~;
+#X obj 106 154 *~;
+#X text 14 73 phase;
+#X text 13 88 generation -->;
+#X text 15 140 range;
+#X text 14 155 adjustment -->;
+#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 481 190 graph;
-#X obj 177 247 tabwrite~ wave-out12;
-#X msg 177 216 bang;
-#X text 223 217 <--click to graph;
-#X text 25 360 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 from 0
-to 1 (and will wrap around as needed.) Tabread4~ takes values from
-1 to n-2 where n is the number of points in the table-- for a 259-point
-table such as we have here \, it's 1 to 129 (so the "good" segment
-is 128 samples long.);
-#X text 30 508 You would use tabread4~ (as opposed to tabosc4~) if
-you need direct control of the phase \, for instance if you to advance
+#X restore 311 202 graph;
+#X obj 127 260 tabwrite~ wave-out12;
+#X msg 127 234 bang;
+#X obj 170 128 +~ 128;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header wavetable_oscillators
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 183 234 <-- click to graph;
+#X obj 1 559 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal array;
+#X text 12 65 DESCRIPTION wavetable oscillators;
+#X restore 392 561 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#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
+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
+from 0 to 1 (and will wrap around as needed.) [tabread4~] takes values
+from 1 to n-2 where n is the number of points in the table-- for a
+259-point table such as we have here \, it's 1 to 129 (so the "good"
+segment is 128 samples long.);
+#X obj 6 561 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 18 461 You would use [tabread4~] (as opposed to [tabosc4~])
+if you need direct control of the phase \, for instance if you to advance
 nonlinearly through the table. In the case shown here \, the "squeeze"
 factor makes the phase grow to a value at least \, and possibly much
-graeater than \, 129 (to which tabread4~ then limits it). So the resulting
+greater than \, 129 (to which [tabread4~] then limits it). So the resulting
 waveform is compressed in time.;
-#X obj 250 128 +~ 128;
-#X text 554 624 updated for Pd version 0.37;
 #X connect 1 0 2 1;
 #X connect 2 0 1 0;
 #X connect 3 0 2 2;
-#X connect 5 0 12 0;
-#X connect 6 0 2 0;
-#X connect 6 0 20 0;
-#X connect 7 0 6 0;
-#X connect 8 0 5 0;
+#X connect 4 0 11 0;
+#X connect 5 0 2 0;
+#X connect 5 0 19 0;
+#X connect 6 0 5 0;
+#X connect 7 0 4 0;
+#X connect 8 0 9 0;
 #X connect 9 0 10 0;
-#X connect 10 0 11 0;
-#X connect 11 0 25 0;
-#X connect 12 0 7 0;
-#X connect 21 0 20 0;
-#X connect 25 0 12 1;
+#X connect 10 0 21 0;
+#X connect 11 0 6 0;
+#X connect 20 0 19 0;
+#X connect 21 0 11 1;
diff --git a/pd/doc/3.audio.examples/B04.tabread4.interpolation.pd b/pd/doc/3.audio.examples/B04.tabread4.interpolation.pd
index 18aef0896..40118a06b 100644
--- a/pd/doc/3.audio.examples/B04.tabread4.interpolation.pd
+++ b/pd/doc/3.audio.examples/B04.tabread4.interpolation.pd
@@ -1,44 +1,69 @@
-#N canvas 137 102 781 520 12;
-#X graph graph1 0 -1.02 10 1.02 468 159 648 29;
+#N canvas 433 106 448 534 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array waveform13 11 float 1;
 #A 0 1 1 1 1 1 1 1 -1 -1 -1 -1;
-#X pop;
-#X text 533 502 updated for Pd version 0.34;
-#X obj 156 157 +~ 1;
-#X text 21 81 phase;
-#X text 20 96 generation -->;
-#X text 25 117 range;
-#X text 24 132 adjustment -->;
-#X graph graph3 0 -1.02 440 1.02 469 362 769 222;
+#X coords 0 1.02 10 -1.02 180 130 1;
+#X restore 254 43 graph;
+#X obj 115 138 +~ 1;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array wave-out13 441 float 0;
-#X pop;
-#X msg 177 216 bang;
-#X text 223 217 <--click to graph;
+#X coords 0 1.02 440 -1.02 270 105 1;
+#X restore 165 274 graph;
+#X msg 136 197 bang;
+#X text 182 198 <--click to graph;
 #N canvas 11 418 523 216 other-stuff 0;
 #X obj 41 49 loadbang;
 #X msg 39 81 \; waveform13 0 1 1 1 1 1 1 1 -1 -1 -1 -1 \; waveform13
 xlabel -1.2 0 1 2 3 4 5 6 7 8 9 10 \; pd dsp 1;
 #X connect 0 0 1 0;
-#X restore 626 426 pd other-stuff;
-#X obj 156 247 tabwrite~ wave-out13;
-#X obj 156 184 tabread4~ waveform13;
-#X obj 156 131 *~ 8;
-#X obj 156 95 phasor~ 220;
-#X text 36 22 4-POINT INTERPOLATION IN DETAIL;
-#X obj 216 316 sig~ 220;
-#X obj 216 346 tabosc4~ waveform13;
-#X text 35 293 (this would be;
-#X text 36 313 equivalent to the;
-#X text 110 333 above) -->;
-#X text 18 409 This patch demonstrates 4-point interpolation in tabread4~.
+#X restore 316 408 pd other-stuff;
+#X obj 115 228 tabwrite~ wave-out13;
+#X obj 115 165 tabread4~ waveform13;
+#X obj 115 112 *~ 8;
+#X obj 115 76 phasor~ 220;
+#X obj 21 332 sig~ 220;
+#X obj 21 362 tabosc4~ waveform13;
+#X text 35 296 (this would be;
+#X text 37 314 equivalent to the;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header 4-point_interpolation_in_detail
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 18 61 phase;
+#X text 17 76 generation -->;
+#X text 19 97 range;
+#X text 18 112 adjustment -->;
+#X text 84 331 <-- above);
+#X text 18 423 This patch demonstrates 4-point interpolation in [tabread4~].
 The 11-point table \, waveform13 \, contains a transition from from
 1 to -1 \, which is "smoothed" as seen in wave-out13. There's no such
-transition at the wraparoind point--the interpolation always happens
+transition at the wraparound point-- the interpolation always happens
 between 4 consccutive samples of the table \, disregarding wraparound.
 ;
-#X connect 2 0 12 0;
-#X connect 8 0 11 0;
-#X connect 12 0 11 0;
-#X connect 13 0 2 0;
-#X connect 14 0 13 0;
-#X connect 16 0 17 0;
+#X obj 1 512 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal array;
+#X text 12 65 DESCRIPTION 4-point interpolation in detail;
+#X restore 392 514 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 interpolation- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 514 pd References;
+#X obj 6 514 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 1 0 7 0;
+#X connect 3 0 6 0;
+#X connect 7 0 6 0;
+#X connect 8 0 1 0;
+#X connect 9 0 8 0;
+#X connect 10 0 11 0;
diff --git a/pd/doc/3.audio.examples/B05.tabread.FM.pd b/pd/doc/3.audio.examples/B05.tabread.FM.pd
index 0dff773e7..450f16d68 100644
--- a/pd/doc/3.audio.examples/B05.tabread.FM.pd
+++ b/pd/doc/3.audio.examples/B05.tabread.FM.pd
@@ -1,5 +1,5 @@
-#N canvas 55 137 777 467 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 433 153 448 392 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array pitchmod14 131 float 1;
 #A 0 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385
 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.863077
@@ -20,8 +20,8 @@
 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.800308 -0.800308
 -0.800308 -0.800308 -0.800308 -0.800308 -0.800308;
 #X coords 0 1.02 130 -1.02 258 130 1;
-#X restore 462 30 graph;
-#X floatatom 191 277 0 0 100 0 - - -;
+#X restore 177 154 graph;
+#X floatatom 47 262 0 0 100 0 - - -;
 #N canvas 159 26 532 285 output 0;
 #X obj 338 160 t b;
 #X obj 338 110 f;
@@ -75,26 +75,49 @@
 #X connect 23 0 20 0;
 #X connect 26 0 5 0;
 #X connect 27 0 21 0;
-#X restore 153 305 pd output;
-#X msg 229 278 MUTE;
-#X floatatom 153 95 4 0 0 0 - - -;
-#X text 153 69 frequency;
-#X floatatom 195 206 4 0 0 0 - - -;
-#X text 155 50 modulation;
-#X obj 152 157 *~;
-#X text 255 150 modulation;
-#X text 253 169 depth;
-#X floatatom 201 157 4 0 0 0 - - -;
-#X obj 152 205 +~;
-#X text 250 212 frequency;
-#X obj 152 237 osc~;
-#X obj 153 122 tabosc4~ pitchmod14;
-#X text 254 194 carrier;
-#X text 33 8 FREQUENCY MODULATION BY WAVETABLE;
-#X text 47 356 This tabosc4~ controls the pitch of a sinusoidal oscillator
+#X restore 22 285 pd output;
+#X msg 73 262 MUTE;
+#X floatatom 22 77 4 0 0 0 - - -, f 4;
+#X text 18 52 frequency;
+#X floatatom 36 186 4 0 0 0 - - -, f 4;
+#X text 19 37 modulation;
+#X obj 21 157 *~;
+#X text 71 129 modulation;
+#X text 71 143 depth;
+#X floatatom 36 136 4 0 0 0 - - -, f 4;
+#X obj 21 208 +~;
+#X text 69 191 frequency;
+#X obj 21 235 osc~;
+#X obj 22 102 tabosc4~ pitchmod14;
+#X text 69 177 carrier;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header frequency_modulation_by_wavetable
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 20 316 This [tabosc4~] controls the pitch of a sinusoidal oscillator
 (osc~). Try changing the waveform as well as the three familiar parameters.
 ;
-#X text 520 438 updated for Pd version 0.37;
+#X obj 1 370 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal array;
+#X text 12 65 DESCRIPTION frequency modulation by wavetable;
+#X restore 392 372 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 frequency modulation- Related Help Documents;
+#X text 19 37 List other frequency modulation examples:;
+#X restore 103 372 pd References;
+#X obj 6 372 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 2 1;
 #X connect 2 0 1 0;
 #X connect 3 0 2 2;
diff --git a/pd/doc/3.audio.examples/B06.table.switching.pd b/pd/doc/3.audio.examples/B06.table.switching.pd
index 558f91c49..2abb6eb05 100644
--- a/pd/doc/3.audio.examples/B06.table.switching.pd
+++ b/pd/doc/3.audio.examples/B06.table.switching.pd
@@ -1,5 +1,5 @@
-#N canvas 55 137 835 504 12;
-#X graph graph1 0 -1.02 130 1.02 565 153 823 23;
+#N canvas 355 127 684 470 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array waveshape15a 131 float 1;
 #A 0 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385
 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.863077
@@ -19,8 +19,9 @@
 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.800308 -0.800308
 -0.800308 -0.800308 -0.800308 -0.800308 -0.800308;
-#X pop;
-#X floatatom 194 299 0 0 100;
+#X coords 0 1.02 130 -1.02 258 130 1;
+#X restore 405 74 graph;
+#X floatatom 91 266 0 0 100 0 - - -;
 #N canvas 159 26 532 285 output 0;
 #X obj 338 160 t b;
 #X obj 338 110 f;
@@ -74,11 +75,9 @@
 #X connect 23 0 20 0;
 #X connect 26 0 5 0;
 #X connect 27 0 21 0;
-#X restore 156 327 pd output;
-#X msg 232 300 MUTE;
-#X text 581 481 updated for Pd version 0.34;
-#X text 33 8 SWITCHING BETWEEN TABLES;
-#X graph graph1 0 -1.02 130 1.02 565 308 823 178;
+#X restore 66 288 pd output;
+#X msg 117 267 MUTE;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array waveshape15b 131 float 1;
 #A 0 -0.659077 -0.643385 -0.643385 -0.627692 -0.612 -0.612 -0.596308
 -0.596308 -0.580615 -0.580615 -0.580615 -0.580615 -0.580615 -0.580615
@@ -99,29 +98,55 @@
 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
 -0.784615 -0.784615 -0.784615 -0.800308 -0.800308 -0.800308 -0.800308
 -0.800308 -0.800308 -0.800308;
-#X pop;
-#X obj 156 274 tabosc4~ waveshape15a;
-#X obj 156 186 sig~ 110;
-#X msg 181 215 set waveshape15a;
-#X msg 182 244 set waveshape15b;
-#X text 20 51 During a performance you're unlikely to want to draw
+#X coords 0 1.02 130 -1.02 258 130 1;
+#X restore 405 229 graph;
+#X obj 66 235 tabosc4~ waveshape15a;
+#X obj 66 147 sig~ 110;
+#X msg 91 176 set waveshape15a;
+#X msg 92 205 set waveshape15b;
+#X text 19 37 During a performance you're unlikely to want to draw
 or recalculate wavetables on the fly \, because you don't want to give
 Pd computationally intensive atomic tasks that could make Pd miss a
 DAC deadline. Instead \, use "set" mesages to switch tabosc~ or tabread4~
 between pre-prepared tables. Indeed \, you will eventually want to
 save screen space by throwing all your wavetables in a subpatch somewhere.
 ;
-#X obj 161 401 table waveshape15c 131;
-#X text 41 362 There's also a "text object" hook so that you can have
-arrays with parametrizable names and sizes:;
-#X text 31 431 You would use this if you want to include one or more
+#X obj 102 356 table waveshape15c 131;
+#X text 20 382 You would use this if you want to include one or more
 arrays in an abstraction. In this invocation you can't save the state
 of the array--instead \, juts read it in from a file or calculate it
 at startup.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header switching_between_tables
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 323 There's also a [text] object hook so that you can have
+arrays with parametrizable names and sizes:;
+#X obj 1 448 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal array;
+#X text 12 65 DESCRIPTION switching between tables;
+#X restore 392 450 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 switching tables- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 450 pd References;
+#X obj 6 450 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 2 1;
 #X connect 2 0 1 0;
 #X connect 3 0 2 2;
-#X connect 7 0 2 0;
-#X connect 8 0 7 0;
-#X connect 9 0 7 0;
-#X connect 10 0 7 0;
+#X connect 5 0 2 0;
+#X connect 6 0 5 0;
+#X connect 7 0 5 0;
+#X connect 8 0 5 0;
diff --git a/pd/doc/3.audio.examples/B07.sampler.pd b/pd/doc/3.audio.examples/B07.sampler.pd
index 632c1d031..813bd6ae0 100644
--- a/pd/doc/3.audio.examples/B07.sampler.pd
+++ b/pd/doc/3.audio.examples/B07.sampler.pd
@@ -1,52 +1,78 @@
-#N canvas 11 3 915 618 12;
-#X obj 37 217 hip~ 5;
-#X text 96 219 high pass filter to cut DC;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 433 80 448 610 10;
+#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 restore 585 20 graph;
-#X obj 37 185 tabread4~ sample-table;
-#X obj 37 150 line~;
-#X obj 37 101 * 441;
-#X floatatom 37 47 0 0 100 0 - - -;
-#X obj 37 125 pack 0 100;
-#X text 102 13 SCRATCH MACHINE;
-#X text 72 48 <-- read point in 100ths of a second;
-#X text 94 101 convert to SAMPLES (441 samples in 0.01 sec);
-#X obj 405 235 loadbang;
-#X text 246 174 read from the table;
-#X text 237 192 (the input is the index in samples);
-#X text 16 482 For more on reading and writing soundfiles to tables
+#X restore 99 243 graph;
+#X obj 22 172 tabread4~ sample-table;
+#X obj 22 142 line~;
+#X obj 22 93 * 441;
+#X floatatom 22 42 0 0 100 0 - - -;
+#X obj 22 117 pack 0 100;
+#X text 51 42 <-- read point in 100ths of a second;
+#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
 \, setting their lengths \, etc \, see "arrays" in the "control examples"
 series.;
-#X text 14 355 This patch introduces the "tabread4~" object \, which
+#X text 17 526 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;
+#X text 63 56 (range is 0-100.) YOU ONLY HEAR OUTPUT;
+#X text 64 72 WHEN THIS IS 0-100 AND ACTIVELY CHANGING.;
+#X obj 21 231 output~;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header scratch_machine
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#N canvas 0 0 450 300 init 0;
+#X obj 35 30 loadbang;
+#X text 33 99 message to read a soundfile into the table (automatically
+sent when you load this patch by the "loadbang" object.);
+#X msg 35 54 read ../sound/voice.wav sample-table;
+#X obj 35 78 soundfiler;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X restore 313 355 pd init;
+#X text 101 373 -------- 44103 samples --------;
+#X text 310 307 three extra for;
+#X text 305 289 (one second plus;
+#X text 308 322 4-point interpolation);
+#X obj 1 587 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal array;
+#X text 12 65 DESCRIPTION scratch machine;
+#X restore 392 589 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#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
 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
 \, which is adequate for most purposes. Because of the interpolation
-scheme \, tabread4~'s input cannot be less than one or greater than
+scheme \, [tabread4~]'s input cannot be less than one or greater than
 the table length minus two.;
-#X text 17 539 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 591 173 (one second plus three extra;
-#X text 593 192 for 4-point interpolation);
-#X text 385 304 message to read a soundfile into the table (automatically
-sent when you load this patch by the "loadbang" object.);
-#X text 84 150 convert smoothly to audio signal;
-#X text 84 62 (range is 0-100.) YOU ONLY HEAR OUTPUT;
-#X text 85 78 WHEN THIS IS 0-100 AND ACTIVELY CHANGING.;
-#X text 596 589 updated for Pd version 0.33;
-#X text 584 151 --- 44103 samples ---;
-#X msg 405 259 read ../sound/voice.wav sample-table;
-#X obj 405 284 soundfiler;
-#X obj 36 249 output~;
-#X connect 0 0 27 0;
-#X connect 0 0 27 1;
+#X obj 6 589 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 17 0;
+#X connect 0 0 17 1;
 #X connect 3 0 0 0;
 #X connect 4 0 3 0;
 #X connect 5 0 7 0;
 #X connect 6 0 5 0;
 #X connect 7 0 4 0;
-#X connect 11 0 25 0;
-#X connect 25 0 26 0;
diff --git a/pd/doc/3.audio.examples/B08.sampler.loop.pd b/pd/doc/3.audio.examples/B08.sampler.loop.pd
index db2362e82..7c0bd6a0b 100644
--- a/pd/doc/3.audio.examples/B08.sampler.loop.pd
+++ b/pd/doc/3.audio.examples/B08.sampler.loop.pd
@@ -1,64 +1,87 @@
-#N canvas 143 17 992 621 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 344 96 716 564 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array tabread4-out 44100 float 0;
 #X coords 0 1.02 44100 -1.02 200 130 1;
-#X restore 632 200 graph;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 362 220 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array table17 44103 float 0;
 #X coords 0 1.02 44103 -1.02 200 130 1;
-#X restore 631 14 graph;
-#X obj 568 496 loadbang;
-#X obj 65 277 tabwrite~ tabread4-out;
-#X obj 34 308 hip~ 5;
-#X floatatom 34 54 0 0 0 0 - - -;
-#X text 241 215 read from the table;
-#X text 49 11 LOOPING SAMPLER;
-#X text 83 54 <-- frequency (Hz.);
-#X floatatom 65 107 0 0 0 0 - - -;
-#X obj 65 133 * 441;
-#X obj 34 160 *~ 0;
-#X obj 34 187 +~ 1;
-#X text 110 248 <-- click to display output;
-#X obj 34 80 phasor~ 0;
-#X msg 65 245 bang;
-#X text 110 108 <-- chunk size (100ths of a second);
-#X obj 561 395 adc~ 1;
-#X msg 575 422 bang;
-#X text 615 423 <-- click here to record your own sample;
-#X text 678 501 v-- re-read the original sample;
-#X text 14 540 In this patch you will frequently hear discontinuities
+#X restore 361 44 graph;
+#X obj 412 469 loadbang;
+#X obj 53 255 tabwrite~ tabread4-out;
+#X obj 22 281 hip~ 5;
+#X floatatom 22 49 0 0 0 0 - - -;
+#X text 51 50 <-- frequency (Hz.);
+#X floatatom 43 98 0 0 0 0 - - -;
+#X obj 43 120 * 441;
+#X obj 22 147 *~ 0;
+#X obj 22 172 +~ 1;
+#X obj 22 71 phasor~ 0;
+#X msg 53 228 bang;
+#X text 73 98 <-- chunk size (100ths of a second);
+#X obj 411 385 adc~ 1;
+#X msg 423 408 bang;
+#X text 463 409 <-- click here to record your own sample;
+#X text 492 469 v-- re-read the original sample;
+#X text 19 465 In this patch you will frequently hear discontinuities
 at the looping point. If you're working in a studio \, you can sometimes
 find "good" loop points for samples. Another approach \, better for
 live situations \, is shown in the next patch.;
-#X text 80 159 <-- readjust phase for range 0 - (chunk size);
-#X text 79 187 <-- add one to avoid beginning of table;
-#X obj 568 549 soundfiler;
-#X text 629 153 ---- 44103 samples ----;
-#X text 643 336 ---- 1 second ------;
-#X obj 34 335 output~;
-#X text 742 591 updated for Pd version 0.37;
-#X obj 34 216 tabread4~ table17;
-#X obj 562 455 tabwrite~ table17;
-#X msg 568 524 read ../sound/voice.wav table17;
-#X text 16 409 This is a looping sampler in which you specify the number
+#X text 58 147 <-- readjust phase for range 0 - (chunk size);
+#X text 57 172 <-- add one to avoid beginning of table;
+#X obj 412 513 soundfiler;
+#X text 359 183 ---- 44103 samples ----;
+#X text 373 356 ---- 1 second ------;
+#X obj 22 308 output~;
+#X obj 22 199 tabread4~ table17;
+#X obj 412 434 tabwrite~ table17;
+#X msg 412 491 read ../sound/voice.wav table17;
+#X text 19 364 This is a looping sampler in which you specify the number
 of loops per second (the frequency) and the size of the chunk to loop.
 If the frequency is less than about 20 \, you will hear repetition
 and the chunk size will sound like transposition. For frequencies above
 50 or so \, you hear a tone whose timbre is controlled by the chunk
 size (best kept below 10 or so.) Remember you can use the "shift" key
 on number boxes to make fine adjustments.;
-#X connect 2 0 31 0;
-#X connect 4 0 27 0;
-#X connect 4 0 27 1;
-#X connect 5 0 14 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header looping_sampler
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 139 199 read from the table;
+#X text 88 229 <-- click to display output;
+#X obj 1 542 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION looping sampler;
+#X restore 392 544 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 looping sampler- Related Help Documents;
+#X text 19 37 links to looping objects:;
+#X restore 103 544 pd References;
+#X obj 6 544 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 2 0 27 0;
+#X connect 4 0 24 0;
+#X connect 4 0 24 1;
+#X connect 5 0 11 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 1;
 #X connect 9 0 10 0;
-#X connect 10 0 11 1;
-#X connect 11 0 12 0;
-#X connect 12 0 29 0;
-#X connect 14 0 11 0;
-#X connect 15 0 3 0;
-#X connect 17 0 30 0;
-#X connect 18 0 30 0;
-#X connect 29 0 4 0;
-#X connect 29 0 3 0;
-#X connect 31 0 24 0;
+#X connect 10 0 25 0;
+#X connect 11 0 9 0;
+#X connect 12 0 3 0;
+#X connect 14 0 26 0;
+#X connect 15 0 26 0;
+#X connect 25 0 4 0;
+#X connect 25 0 3 0;
+#X connect 27 0 21 0;
diff --git a/pd/doc/3.audio.examples/B09.sampler.loop.smooth.pd b/pd/doc/3.audio.examples/B09.sampler.loop.smooth.pd
index 818d92064..99f1ba5fd 100644
--- a/pd/doc/3.audio.examples/B09.sampler.loop.smooth.pd
+++ b/pd/doc/3.audio.examples/B09.sampler.loop.smooth.pd
@@ -1,72 +1,103 @@
-#N canvas 75 15 973 599 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 353 101 689 547 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array cos-output 44100 float 0;
 #X coords 0 1.02 44100 -1.02 200 130 1;
-#X restore 724 191 graph;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 361 217 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array table18 44103 float 0;
 #X coords 0 1.02 44103 -1.02 200 130 1;
-#X restore 721 16 graph;
-#X obj 584 491 loadbang;
-#X obj 45 249 hip~ 5;
-#X floatatom 46 50 0 0 0 0 - - -;
-#X text 85 49 <-- frequency (Hz.);
-#X floatatom 132 87 0 0 0 0 - - -;
-#X obj 132 114 * 441;
-#X obj 110 163 +~ 1;
-#X text 171 86 <-- chunk size (100ths of a second);
-#X obj 584 404 adc~ 1;
-#X msg 599 429 bang;
-#X text 40 9 ENVELOPING YOUR LOOPING SAMPLER;
-#X obj 45 139 -~ 0.5;
-#X obj 45 189 cos~;
-#X obj 45 222 *~;
-#X obj 584 545 soundfiler;
-#X text 736 148 -- 44103 samples ---;
-#X text 727 322 ----- 1 second ------;
-#X obj 46 77 phasor~;
-#X obj 45 164 *~ 0.5;
-#X obj 44 281 output~;
-#X obj 110 138 *~;
-#X text 28 362 Here we apply an amplitude envelope to protect against
+#X restore 361 42 graph;
+#X obj 395 452 loadbang;
+#X obj 21 251 hip~ 5;
+#X floatatom 22 54 0 0 0 0 - - -;
+#X text 50 53 <-- frequency (Hz.);
+#X floatatom 101 91 0 0 0 0 - - -;
+#X obj 101 118 * 441;
+#X obj 86 167 +~ 1;
+#X text 129 90 <-- chunk size (100ths of a second);
+#X obj 395 375 adc~ 1;
+#X msg 410 397 bang;
+#X obj 21 143 -~ 0.5;
+#X obj 21 193 cos~;
+#X obj 21 226 *~;
+#X obj 395 496 soundfiler;
+#X text 376 174 -- 44103 samples ---;
+#X text 364 348 ----- 1 second ------;
+#X obj 22 81 phasor~;
+#X obj 21 168 *~ 0.5;
+#X obj 20 283 output~;
+#X obj 86 142 *~;
+#X text 17 345 Here we apply an amplitude envelope to protect against
 discontinuities at the loop point. The envelope is just a cosine wave
 from -90 degrees to +90 degrees \, (-pi/2 to pi/2 radians) \, i.e.
 \, the part that is zero or positive in sign. The "cos~" object's input
 is in cycles (units of 2pi radians) so -1/4 to +1/4 addresses the desired
 part of the waveform.;
-#X obj 167 247 tabwrite~ cos-output;
-#X obj 167 223 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 143 251 tabwrite~ cos-output;
+#X obj 143 227 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 188 220 <-- click to graph envelope;
-#X text 28 476 To see the envelope \, put the phasor on 2 Hz or so
+#X text 164 224 <-- click to graph envelope;
+#X text 17 432 To see the envelope \, put the phasor on 2 Hz or so
 \, click the "graph" button \, and look at "cos-output." This is multiplied
 by the tabread4~ output so that it doesn't click when the phase wraps
 around.;
-#X text 26 545 It is possible to get much more control over the shape
+#X text 17 486 It is possible to get much more control over the shape
 of the envelope \, but this will be taken up later.;
-#X obj 110 189 tabread4~ table18;
-#X obj 584 456 tabwrite~ table18;
-#X msg 584 520 read ../sound/voice.wav table18;
-#X text 641 430 <-- click here to record to table;
-#X text 675 499 v-- re-read the original sound;
-#X text 708 565 updated for Pd version 0.37;
-#X connect 2 0 31 0;
-#X connect 3 0 21 0;
-#X connect 3 0 21 1;
-#X connect 4 0 19 0;
+#X obj 86 193 tabread4~ table18;
+#X obj 395 419 tabwrite~ table18;
+#X msg 395 474 read ../sound/voice.wav table18;
+#X text 442 397 <-- click here to record to table;
+#X text 486 453 v-- re-read the original sound;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header enveloping_your_looping_sampler
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 525 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION enveloping your looping sampler;
+#X restore 392 527 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Hello World- Related Help Documents;
+#X text 19 37 Mention the help link \, and the fact that you can basically
+click on anything to get a help patch on it. Also be sure to see the
+FAQ at puredata.info as you start out with Pd. A link can be found
+in the "Help" menu above.;
+#X text 18 90 Another hello world can be found in the mailing lists.
+You can search for answers to questions on there \, and if you're having
+a hard time finding info you can always ask questions \, too. (See
+the netiquette page before posting \, though.);
+#X text 69 159 rethink calling that an "atom";
+#X restore 103 527 pd References;
+#X obj 6 527 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 2 0 30 0;
+#X connect 3 0 20 0;
+#X connect 3 0 20 1;
+#X connect 4 0 18 0;
 #X connect 6 0 7 0;
-#X connect 7 0 22 1;
-#X connect 8 0 29 0;
-#X connect 10 0 30 0;
-#X connect 11 0 30 0;
-#X connect 13 0 20 0;
-#X connect 14 0 15 0;
-#X connect 14 0 24 0;
-#X connect 15 0 3 0;
+#X connect 7 0 21 1;
+#X connect 8 0 28 0;
+#X connect 10 0 29 0;
+#X connect 11 0 29 0;
+#X connect 12 0 19 0;
+#X connect 13 0 14 0;
+#X connect 13 0 23 0;
+#X connect 14 0 3 0;
+#X connect 18 0 12 0;
+#X connect 18 0 21 0;
 #X connect 19 0 13 0;
-#X connect 19 0 22 0;
-#X connect 20 0 14 0;
-#X connect 22 0 8 0;
-#X connect 25 0 24 0;
-#X connect 29 0 15 1;
-#X connect 31 0 16 0;
+#X connect 21 0 8 0;
+#X connect 24 0 23 0;
+#X connect 28 0 14 1;
+#X connect 30 0 15 0;
diff --git a/pd/doc/3.audio.examples/B10.sampler.scratch.pd b/pd/doc/3.audio.examples/B10.sampler.scratch.pd
index 38c67b76b..32461e229 100644
--- a/pd/doc/3.audio.examples/B10.sampler.scratch.pd
+++ b/pd/doc/3.audio.examples/B10.sampler.scratch.pd
@@ -1,67 +1,100 @@
-#N canvas 53 232 936 654 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 365 74 653 628 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array table19 44103 float 0;
 #X coords 0 1.02 44100 -1.02 200 130 1;
-#X restore 680 8 graph;
-#X obj 40 382 hip~ 5;
-#X floatatom 99 51 0 0 0 0 - - -;
-#X text 146 50 <-- frequency (Hz.);
-#X floatatom 129 106 0 0 0 0 - - -;
-#X obj 129 135 * 441;
-#X obj 100 158 *~ 0;
-#X obj 100 181 +~ 1;
-#X msg 194 281 bang;
-#X text 164 106 <-- chunk size (100ths of a second);
-#X obj 591 369 adc~ 1;
-#X obj 591 395 hip~ 5;
-#X msg 609 423 bang;
-#N canvas 0 0 450 300 graph2 0;
+#X restore 400 48 graph;
+#X obj 23 376 hip~ 5;
+#X floatatom 82 45 0 0 0 0 - - -;
+#X text 129 44 <-- frequency (Hz.);
+#X floatatom 112 100 0 0 0 0 - - -;
+#X obj 112 129 * 441;
+#X obj 83 152 *~ 0;
+#X obj 83 175 +~ 1;
+#X msg 177 275 bang;
+#X text 147 100 <-- chunk size (100ths of a second);
+#X obj 311 349 adc~ 1;
+#X obj 311 375 hip~ 5;
+#X msg 329 400 bang;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array graph19 44100 float 0;
 #X coords 0 44100 44100 0 200 130 1;
-#X restore 681 196 graph;
-#X obj 40 356 *~;
-#X obj 123 276 line~;
-#X obj 123 228 * 441;
-#X floatatom 123 205 0 0 0 0 - - -;
-#X obj 123 252 pack 0 100;
-#X obj 101 310 +~;
-#X text 34 474 In this patch we can loop in any "window" of the input
+#X restore 400 236 graph;
+#X obj 23 350 *~;
+#X obj 106 270 line~;
+#X obj 106 222 * 441;
+#X floatatom 106 199 0 0 0 0 - - -;
+#X obj 106 246 pack 0 100;
+#X obj 84 304 +~;
+#X text 21 454 In this patch we can loop in any "window" of the input
 sample. The "read point" (0-100) gives the starting point of the window
 and "chunk" is its size (both in 100ths of a second.) Try \, for example
 \, frequency 4 \, sharpness 10 \, chunk size 25 \, and vary the read
 point from -25 to 100 \, listening to the result.;
-#X text 242 281 <-- graph table index;
-#X text 684 337 ----- 1 second ------;
-#X obj 595 490 loadbang;
-#X text 631 514 v-- re-read the original sample;
-#X obj 605 559 soundfiler;
-#X text 678 147 ---- 44103 samples ---;
-#X obj 591 455 tabwrite~ table19;
-#X msg 605 535 read ../sound/voice.wav table19;
-#X text 688 628 updated for Pd version 0.37;
-#X msg 595 585 \; graph19 ylabel 48000 0 44100;
-#X obj 39 103 -~ 0.5;
-#X obj 99 76 phasor~;
-#X obj 39 127 *~ 0.5;
-#X obj 39 150 cos~;
-#X text 157 206 <-- read point (100ths of a second);
-#X obj 41 406 output~;
-#X text 651 422 <-- record;
-#X text 36 13 ENVELOPING THE LOOPING SAMPLER;
-#X text 37 574 You should hear some doppler shift as you change the
+#X text 225 275 <-- graph table index;
+#X text 429 367 ----- 1 second ------;
+#X obj 398 465 loadbang;
+#X text 434 489 v-- re-read the original sample;
+#X obj 408 534 soundfiler;
+#X text 434 181 ---- 44103 samples ---;
+#X obj 311 425 tabwrite~ table19;
+#X msg 408 510 read ../sound/voice.wav table19;
+#X msg 398 560 \; graph19 ylabel 48000 0 44100;
+#X obj 22 97 -~ 0.5;
+#X obj 82 70 phasor~;
+#X obj 22 121 *~ 0.5;
+#X obj 22 144 cos~;
+#X text 140 200 <-- read point (100ths of a second);
+#X obj 24 400 output~;
+#X text 371 399 <-- record;
+#X text 22 529 You should hear some doppler shift as you change the
 read point. To see why \, click on "graph table index" and quickly
 start changing the read point--- you should see entertaining pictures
 in "table-index". The next patch shows how to prevent this if you wish
 to.;
-#X obj 100 336 tabread4~ table19;
-#X obj 194 307 tabwrite~ graph19;
-#X connect 1 0 36 0;
-#X connect 2 0 32 0;
+#X obj 83 330 tabread4~ table19;
+#X obj 177 301 tabwrite~ graph19;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header enveloping_the_looping_sampler
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 606 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 85 PLATFORM windows macosx gnulinux;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 125 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 105 DATATYPE float;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION enveloping the looping sampler;
+#X restore 392 608 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Hello World- Related Help Documents;
+#X text 19 37 Mention the help link \, and the fact that you can basically
+click on anything to get a help patch on it. Also be sure to see the
+FAQ at puredata.info as you start out with Pd. A link can be found
+in the "Help" menu above.;
+#X text 18 90 Another hello world can be found in the mailing lists.
+You can search for answers to questions on there \, and if you're having
+a hard time finding info you can always ask questions \, too. (See
+the netiquette page before posting \, though.);
+#X text 69 159 rethink calling that an "atom";
+#X restore 103 608 pd References;
+#X obj 6 608 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 1 0 35 0;
+#X connect 2 0 31 0;
 #X connect 4 0 5 0;
 #X connect 5 0 6 1;
 #X connect 6 0 7 0;
 #X connect 7 0 19 0;
-#X connect 8 0 41 0;
+#X connect 8 0 39 0;
 #X connect 10 0 11 0;
 #X connect 11 0 27 0;
 #X connect 12 0 27 0;
@@ -70,14 +103,14 @@ to.;
 #X connect 16 0 18 0;
 #X connect 17 0 16 0;
 #X connect 18 0 15 0;
-#X connect 19 0 40 0;
-#X connect 19 0 41 0;
-#X connect 23 0 30 0;
+#X connect 19 0 38 0;
+#X connect 19 0 39 0;
+#X connect 23 0 29 0;
 #X connect 23 0 28 0;
 #X connect 28 0 25 0;
-#X connect 31 0 33 0;
-#X connect 32 0 6 0;
-#X connect 32 0 31 0;
-#X connect 33 0 34 0;
-#X connect 34 0 14 0;
-#X connect 40 0 14 1;
+#X connect 30 0 32 0;
+#X connect 31 0 6 0;
+#X connect 31 0 30 0;
+#X connect 32 0 33 0;
+#X connect 33 0 14 0;
+#X connect 38 0 14 1;
diff --git a/pd/doc/3.audio.examples/B11.sampler.nodoppler.pd b/pd/doc/3.audio.examples/B11.sampler.nodoppler.pd
index 1ec362acb..02576a4a8 100644
--- a/pd/doc/3.audio.examples/B11.sampler.nodoppler.pd
+++ b/pd/doc/3.audio.examples/B11.sampler.nodoppler.pd
@@ -1,85 +1,121 @@
-#N canvas 177 116 924 622 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 433 97 448 561 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array table20 44103 float 0;
-#X coords 0 1.02 44100 -1.02 200 130 1;
-#X restore 631 10 graph;
-#X obj 582 447 loadbang;
-#X obj 13 425 hip~ 5;
-#X floatatom 87 49 0 0 0 0 - - -;
-#X text 126 48 <-- frequency (Hz.);
-#X floatatom 150 108 0 0 0 0 - - -;
-#X obj 150 133 * 441;
-#X obj 50 220 +~ 1;
-#X obj 87 73 phasor~ 0;
-#X msg 175 273 bang;
-#X text 189 107 <-- chunk size (100ths of a second);
-#X obj 576 343 adc~ 1;
-#X obj 576 367 hip~ 5;
-#X msg 591 390 bang;
-#X text 630 464 v-- re-read the original sample;
-#N canvas 0 0 450 300 graph2 0;
+#X coords 0 1.02 44100 -1.02 130 84 1;
+#X restore 281 213 graph;
+#X obj 14 370 hip~ 5;
+#X floatatom 63 42 0 0 0 0 - - -;
+#X text 92 42 <-- frequency (Hz.);
+#X floatatom 145 66 0 0 0 0 - - -;
+#X obj 145 88 * 441;
+#X obj 61 175 +~ 1;
+#X obj 63 66 phasor~ 0;
+#X msg 106 277 bang;
+#X obj 152 356 adc~ 1;
+#X obj 152 378 hip~ 5;
+#X msg 167 401 bang;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array graph20 44100 float 0;
-#X coords 0 44100 44100 0 200 130 1;
-#X restore 633 179 graph;
-#X obj 13 401 *~;
-#X obj 72 308 line~;
-#X obj 149 242 * 441;
-#X floatatom 149 218 0 0 0 0 - - -;
-#X obj 72 284 pack 0 100;
-#X text 184 217 <-- read point in 100ths of a second;
-#X obj 51 356 +~;
-#X text 218 272 <-- graph table index;
-#X obj 72 332 samphold~;
-#X obj 74 170 samphold~;
-#X obj 51 196 *~;
-#X text 643 315 ----- 1 second ------;
-#X text 631 144 ---- 44103 samples ---;
-#X obj 591 508 soundfiler;
-#X text 21 8 SLIDING STABLE LOOPS WITHOUT DOPPLER SHIFT;
-#X msg 582 534 \; graph20 ylabel 48000 0 44100;
-#X text 631 390 <-- record;
-#X obj 13 451 output~;
-#X obj 12 103 -~ 0.5;
-#X obj 12 127 *~ 0.5;
-#X obj 12 150 cos~;
-#X obj 175 353 tabwrite~ graph20;
-#X obj 51 381 tabread4~ table20;
-#X obj 576 417 tabwrite~ table20;
-#X msg 591 484 read ../sound/voice.wav table20;
-#X text 11 518 This example differs from the previous one in having
-samphold~ objects which allow the chunk size and especially the read
+#X coords 0 44100 44100 0 130 84 1;
+#X restore 283 330 graph;
+#X obj 14 346 *~;
+#X obj 78 225 line~;
+#X obj 145 170 * 441;
+#X floatatom 145 146 0 0 0 0 - - -;
+#X obj 78 203 pack 0 100;
+#X obj 62 271 +~;
+#X text 140 277 <-- graph table index;
+#X obj 78 247 samphold~;
+#X obj 77 125 samphold~;
+#X obj 62 151 *~;
+#X text 202 401 <-- record;
+#X obj 14 396 output~;
+#X obj 13 96 -~ 0.5;
+#X obj 13 120 *~ 0.5;
+#X obj 13 143 cos~;
+#X obj 106 304 tabwrite~ graph20;
+#X obj 62 326 tabread4~ table20;
+#X obj 152 425 tabwrite~ table20;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header sliding_stable_loops_without_doppler_shift
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 21 451 This example differs from the previous one in having
+[samphold~] objects which allow the chunk size and especially the read
 point to change only at points where the phase wraps around. This removes
 signal discontinuities (when the chunk size changes) and doppler shift
 when the read point is changing.;
-#X text 652 592 updated for Pd version 0.37;
-#X connect 1 0 31 0;
-#X connect 1 0 40 0;
-#X connect 2 0 33 0;
-#X connect 2 0 33 1;
-#X connect 3 0 8 0;
-#X connect 5 0 6 0;
-#X connect 6 0 25 0;
+#X text 192 81 (100ths of a second);
+#X text 192 163 (100ths of a second);
+#X text 175 66 <-- chunk size;
+#X text 175 147 <-- read point;
+#N canvas 0 0 392 214 init 0;
+#X obj 42 27 loadbang;
+#X text 90 44 v-- re-read the original sample;
+#X obj 51 88 soundfiler;
+#X msg 42 114 \; graph20 ylabel 48000 0 44100;
+#X msg 51 64 read ../sound/voice.wav table20;
+#X connect 0 0 3 0;
+#X connect 0 0 4 0;
+#X connect 4 0 2 0;
+#X restore 376 444 pd init;
+#X text 283 297 --- 44103 samples ---;
+#X text 279 417 ------ 1 second ------;
+#X obj 1 539 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION sliding stable loops without doppler shift
+;
+#X text 12 25 KEYWORDS signal;
+#X restore 392 541 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Hello World- Related Help Documents;
+#X text 19 37 Mention the help link \, and the fact that you can basically
+click on anything to get a help patch on it. Also be sure to see the
+FAQ at puredata.info as you start out with Pd. A link can be found
+in the "Help" menu above.;
+#X text 18 90 Another hello world can be found in the mailing lists.
+You can search for answers to questions on there \, and if you're having
+a hard time finding info you can always ask questions \, too. (See
+the netiquette page before posting \, though.);
+#X text 69 159 rethink calling that an "atom";
+#X restore 103 541 pd References;
+#X obj 6 541 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 1 0 24 0;
+#X connect 1 0 24 1;
+#X connect 2 0 7 0;
+#X connect 4 0 5 0;
+#X connect 5 0 21 0;
+#X connect 6 0 18 0;
+#X connect 7 0 20 1;
+#X connect 7 0 21 1;
 #X connect 7 0 22 0;
-#X connect 8 0 24 1;
-#X connect 8 0 25 1;
-#X connect 8 0 26 0;
-#X connect 8 0 34 0;
-#X connect 9 0 37 0;
-#X connect 11 0 12 0;
-#X connect 12 0 39 0;
-#X connect 13 0 39 0;
-#X connect 16 0 2 0;
-#X connect 17 0 24 0;
-#X connect 18 0 20 0;
-#X connect 19 0 18 0;
-#X connect 20 0 17 0;
-#X connect 22 0 37 0;
-#X connect 22 0 38 0;
-#X connect 24 0 22 1;
-#X connect 25 0 26 1;
-#X connect 26 0 7 0;
-#X connect 34 0 35 0;
-#X connect 35 0 36 0;
-#X connect 36 0 16 0;
-#X connect 38 0 16 1;
-#X connect 40 0 29 0;
+#X connect 7 0 25 0;
+#X connect 8 0 28 0;
+#X connect 9 0 10 0;
+#X connect 10 0 30 0;
+#X connect 11 0 30 0;
+#X connect 13 0 1 0;
+#X connect 14 0 20 0;
+#X connect 15 0 17 0;
+#X connect 16 0 15 0;
+#X connect 17 0 14 0;
+#X connect 18 0 28 0;
+#X connect 18 0 29 0;
+#X connect 20 0 18 1;
+#X connect 21 0 22 1;
+#X connect 22 0 6 0;
+#X connect 25 0 26 0;
+#X connect 26 0 27 0;
+#X connect 27 0 13 0;
+#X connect 29 0 13 1;
diff --git a/pd/doc/3.audio.examples/B12.sampler.transpose.pd b/pd/doc/3.audio.examples/B12.sampler.transpose.pd
index fc7a7d14c..7cebb3c49 100644
--- a/pd/doc/3.audio.examples/B12.sampler.transpose.pd
+++ b/pd/doc/3.audio.examples/B12.sampler.transpose.pd
@@ -1,109 +1,132 @@
-#N canvas 107 88 930 596 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 346 32 679 621 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array table21 44103 float 0;
 #X coords 0 1.02 44100 -1.02 200 130 1;
-#X restore 645 291 graph;
-#X obj 467 506 loadbang;
-#X obj 19 508 hip~ 5;
-#X floatatom 10 254 0 0 0 0 - - -;
-#X obj 10 279 * 441;
-#X obj 10 401 +~ 1;
-#X text 47 253 <-- chunk size (100ths of a second);
-#X obj 471 402 adc~ 1;
-#X obj 471 427 hip~ 5;
-#X msg 486 449 bang;
-#X obj 44 482 *~;
-#X obj 106 404 line~;
-#X obj 106 354 * 441;
-#X floatatom 106 329 0 0 0 0 - - -;
-#X obj 106 379 pack 0 100;
-#X text 152 331 <-- read point in 100ths of a second;
-#X obj 44 433 +~;
-#X obj 106 429 samphold~;
-#X obj 10 329 samphold~;
-#X obj 10 304 sig~;
-#X obj 10 376 *~;
-#X text 18 5 CALCULATING LOOP FREQUENCY AS FUNCTION OF TRANSPOSITION
-;
-#X obj 124 485 r~ phase;
-#X obj 10 204 s~ phase;
-#X obj 68 304 r~ phase;
-#X obj 26 351 r~ phase;
-#X obj 164 405 r~ phase;
-#X obj 151 299 s chunk-size;
-#X floatatom 10 50 0 0 0 0 - - -;
-#X text 48 51 <-- transposition (10ths of a halftone);
-#X obj 151 274 * 0.01;
-#X text 264 287 chunk size;
-#X text 264 309 in seconds;
-#X obj 21 105 r chunk-size;
-#X obj 21 130 t b f;
-#X obj 10 154 /;
-#X text 80 131 divide speed change by chunk;
-#X text 78 152 size to get loop frequency;
-#X text 382 75 The transposition is frequency in Hz. divided by chunk
+#X restore 406 240 graph;
+#X obj 337 477 loadbang;
+#X obj 31 509 hip~ 5;
+#X floatatom 22 255 0 0 0 0 - - -;
+#X obj 22 280 * 441;
+#X obj 22 402 +~ 1;
+#X text 59 254 <-- chunk size (100ths of a second);
+#X obj 337 373 adc~ 1;
+#X obj 337 398 hip~ 5;
+#X msg 352 420 bang;
+#X obj 56 483 *~;
+#X obj 118 405 line~;
+#X obj 118 355 * 441;
+#X floatatom 118 330 0 0 0 0 - - -;
+#X obj 118 380 pack 0 100;
+#X text 144 330 <-- read point in 100ths of a second;
+#X obj 56 434 +~;
+#X obj 118 430 samphold~;
+#X obj 22 330 samphold~;
+#X obj 22 305 sig~;
+#X obj 22 377 *~;
+#X obj 136 486 r~ phase;
+#X obj 22 217 s~ phase;
+#X obj 73 305 r~ phase;
+#X obj 38 352 r~ phase;
+#X obj 169 405 r~ phase;
+#X obj 163 305 s chunk-size;
+#X floatatom 22 66 0 0 0 0 - - -;
+#X text 51 67 <-- transposition (10ths of a halftone);
+#X obj 163 280 * 0.01;
+#X text 246 290 chunk size;
+#X text 246 305 in seconds;
+#X obj 33 118 r chunk-size;
+#X obj 33 143 t b f;
+#X obj 22 167 /;
+#X text 73 144 divide speed change by chunk;
+#X text 71 165 size to get loop frequency;
+#X text 302 57 The transposition is frequency in Hz. divided by chunk
 size in seconds. This patch calculates the loop frequency as a function
 of desired transposition;
-#X text 384 126 Notice now that we get Doppler effects when the chunk
+#X text 302 99 Notice now that we get Doppler effects when the chunk
 size changes. You can suppress that if you don't want it \, by converting
 the chunk size to an audio signal \, sampling and holding it. But then
 there would be more work to deal with very low frequencies never triggering
 the sample and hold...;
-#X obj 467 560 soundfiler;
-#X obj 10 27 loadbang;
-#X obj 124 509 -~ 0.5;
-#X obj 124 533 *~ 0.5;
-#X obj 124 556 cos~;
-#X obj 19 533 output~;
-#X obj 44 458 tabread4~ table21;
-#X text 527 449 <-- record;
-#X text 560 513 v-- re-read original table;
-#X text 682 572 updated for Pd version 0.37;
-#X text 647 425 --- 44103 samples ---;
-#X obj 10 75 expr pow(2 \, $f1/120);
-#X text 199 75 speed change;
-#X text 387 208 You might also want to have a way to retrigger the
+#X obj 337 523 soundfiler;
+#X obj 22 43 loadbang;
+#X obj 136 508 -~ 0.5;
+#X obj 136 530 *~ 0.5;
+#X obj 136 552 cos~;
+#X obj 31 534 output~;
+#X obj 56 459 tabread4~ table21;
+#X text 393 420 <-- record;
+#X text 400 478 v-- re-read original table;
+#X text 438 374 --- 44103 samples ---;
+#X obj 22 91 expr pow(2 \, $f1/120);
+#X text 158 91 speed change;
+#X text 302 163 You might also want to have a way to retrigger the
 loop to sync it with some other process. By the time we had all this
 built the patch would be fairly involved. For now \, we'll move on
 to the next topic...;
-#X obj 10 178 phasor~;
-#X obj 471 476 tabwrite~ table21;
-#X msg 467 533 read ../sound/voice.wav table21;
-#X connect 1 0 56 0;
-#X connect 2 0 45 0;
-#X connect 2 0 45 1;
+#X obj 22 191 phasor~;
+#X obj 337 447 tabwrite~ table21;
+#X msg 337 501 read ../sound/voice.wav table21;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header calculating_loop_frequency...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 108 27 ...as function of transposition;
+#X obj 1 599 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION calculating loop frequency;
+#X restore 392 601 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 loop frequency- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 601 pd References;
+#X obj 6 601 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 1 0 54 0;
+#X connect 2 0 44 0;
+#X connect 2 0 44 1;
 #X connect 3 0 4 0;
-#X connect 3 0 30 0;
+#X connect 3 0 29 0;
 #X connect 4 0 19 0;
 #X connect 5 0 16 0;
 #X connect 7 0 8 0;
-#X connect 8 0 55 0;
-#X connect 9 0 55 0;
+#X connect 8 0 53 0;
+#X connect 9 0 53 0;
 #X connect 10 0 2 0;
 #X connect 11 0 17 0;
 #X connect 12 0 14 0;
 #X connect 13 0 12 0;
 #X connect 14 0 11 0;
-#X connect 16 0 46 0;
+#X connect 16 0 45 0;
 #X connect 17 0 16 1;
 #X connect 18 0 20 0;
 #X connect 19 0 18 0;
 #X connect 20 0 5 0;
-#X connect 22 0 42 0;
-#X connect 24 0 18 1;
-#X connect 25 0 20 1;
-#X connect 26 0 17 1;
-#X connect 28 0 51 0;
-#X connect 30 0 27 0;
+#X connect 21 0 41 0;
+#X connect 23 0 18 1;
+#X connect 24 0 20 1;
+#X connect 25 0 17 1;
+#X connect 27 0 49 0;
+#X connect 29 0 26 0;
+#X connect 32 0 33 0;
 #X connect 33 0 34 0;
-#X connect 34 0 35 0;
-#X connect 34 1 35 1;
-#X connect 35 0 54 0;
-#X connect 41 0 28 0;
+#X connect 33 1 34 1;
+#X connect 34 0 52 0;
+#X connect 40 0 27 0;
+#X connect 41 0 42 0;
 #X connect 42 0 43 0;
-#X connect 43 0 44 0;
-#X connect 44 0 10 1;
-#X connect 46 0 10 0;
-#X connect 51 0 35 0;
-#X connect 54 0 23 0;
-#X connect 56 0 40 0;
+#X connect 43 0 10 1;
+#X connect 45 0 10 0;
+#X connect 49 0 34 0;
+#X connect 52 0 22 0;
+#X connect 54 0 39 0;
diff --git a/pd/doc/3.audio.examples/B13.sampler.overlap.pd b/pd/doc/3.audio.examples/B13.sampler.overlap.pd
index 35acc48b3..719355e09 100644
--- a/pd/doc/3.audio.examples/B13.sampler.overlap.pd
+++ b/pd/doc/3.audio.examples/B13.sampler.overlap.pd
@@ -1,44 +1,42 @@
-#N canvas 28 47 748 713 12;
-#X obj 19 511 hip~ 5;
-#X floatatom 25 38 0 0 100 0 - - -;
-#X obj 25 63 * 441;
-#X obj 20 380 +~ 1;
-#X text 69 35 <-- chunk size (100ths of a second);
-#X obj 20 458 *~;
-#X obj 26 211 line~;
-#X obj 26 161 * 441;
-#X floatatom 26 136 0 0 100 0 - - -;
-#X obj 26 186 pack 0 100;
-#X text 60 137 <-- read point in 100ths of a second;
-#X obj 20 409 +~;
-#X obj 76 408 samphold~;
-#X obj 20 308 samphold~;
-#X obj 20 355 *~;
-#X obj 185 369 r~ phase;
-#X obj 418 210 s~ phase;
-#X obj 108 308 r~ phase;
-#X obj 42 332 r~ phase;
-#X obj 96 383 r~ phase;
-#X obj 77 82 s chunk-size;
-#X floatatom 418 56 0 0 0 0 - - -;
-#X obj 77 57 * 0.01;
-#X text 189 58 chunk size;
-#X text 189 80 in seconds;
-#X obj 429 111 r chunk-size;
-#X obj 429 136 t b f;
-#X obj 418 160 /;
-#X obj 418 33 loadbang;
-#X obj 185 393 -~ 0.5;
-#X obj 185 417 *~ 0.5;
-#X obj 185 440 cos~;
-#X obj 19 536 output~;
-#X text 486 684 updated for Pd version 0.37;
-#X obj 418 81 expr pow(2 \, $f1/120);
-#X text 607 81 speed change;
-#X obj 418 184 phasor~;
-#X text 18 5 TWO OVERLAPPING SAMPLE READ ELEMENTS;
-#N canvas 30 567 660 275 table 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 388 59 583 675 10;
+#X obj 22 506 hip~ 5;
+#X floatatom 22 42 0 0 100 0 - - -;
+#X obj 22 70 * 441;
+#X obj 23 377 +~ 1;
+#X text 54 41 <-- chunk size (100ths of a second);
+#X obj 23 455 *~;
+#X obj 23 211 line~;
+#X obj 23 167 * 441;
+#X floatatom 23 145 0 0 100 0 - - -;
+#X obj 23 189 pack 0 100;
+#X text 54 145 <-- read point in 100ths of a second;
+#X obj 23 406 +~;
+#X obj 69 405 samphold~;
+#X obj 23 305 samphold~;
+#X obj 23 352 *~;
+#X obj 158 366 r~ phase;
+#X obj 298 216 s~ phase;
+#X obj 101 305 r~ phase;
+#X obj 38 329 r~ phase;
+#X obj 89 380 r~ phase;
+#X obj 74 92 s chunk-size;
+#X floatatom 298 65 0 0 0 0 - - -;
+#X obj 74 70 * 0.01;
+#X text 156 71 chunk size;
+#X text 156 87 in seconds;
+#X obj 309 117 r chunk-size;
+#X obj 309 142 t b f;
+#X obj 298 166 /;
+#X obj 298 42 loadbang;
+#X obj 158 390 -~ 0.5;
+#X obj 158 414 *~ 0.5;
+#X obj 158 437 cos~;
+#X obj 22 531 output~;
+#X obj 298 90 expr pow(2 \, $f1/120);
+#X text 429 90 speed change;
+#X obj 298 190 phasor~;
+#N canvas 56 366 660 275 table 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array table22 44103 float 0;
 #X coords 0 1.02 44100 -1.02 200 130 1;
 #X restore 442 61 graph;
@@ -57,63 +55,88 @@
 #X connect 4 0 9 0;
 #X connect 5 0 9 0;
 #X connect 10 0 6 0;
-#X restore 567 327 pd table;
-#X obj 25 110 s chunk-size-samples;
-#X text 211 112 ... and in samples;
-#X obj 26 234 s~ read-pt;
-#X obj 77 360 r~ read-pt;
-#X obj 505 203 +~ 0.5;
-#X obj 506 229 wrap~;
-#X obj 506 254 s~ phase2;
-#X obj 20 283 r chunk-size-samples;
-#X obj 274 391 +~ 1;
-#X obj 274 469 *~;
-#X obj 274 420 +~;
-#X obj 329 419 samphold~;
-#X obj 274 319 samphold~;
-#X obj 274 366 *~;
-#X obj 439 404 -~ 0.5;
-#X obj 439 428 *~ 0.5;
-#X obj 439 451 cos~;
-#X obj 330 371 r~ read-pt;
-#X obj 274 294 r chunk-size-samples;
-#X obj 363 320 r~ phase2;
-#X obj 296 343 r~ phase2;
-#X obj 439 380 r~ phase2;
-#X obj 339 394 r~ phase2;
-#X obj 19 487 +~;
-#X text 453 56 <-- transposition \, halftones/10;
-#X text 456 159 loop frequency;
-#X text 566 190 second phase signal;
-#X text 566 210 out of phase from;
-#X text 565 231 first one;
-#X text 70 265 copy 1;
-#X text 327 274 copy 2;
-#X text 118 503 Here is the previous patch modified to use two copies
+#X restore 177 234 pd table;
+#X obj 22 114 s chunk-size-samples;
+#X text 158 114 ... and in samples;
+#X obj 23 234 s~ read-pt;
+#X obj 70 357 r~ read-pt;
+#X obj 385 219 +~ 0.5;
+#X obj 385 241 wrap~;
+#X obj 385 263 s~ phase2;
+#X obj 23 283 r chunk-size-samples;
+#X obj 247 388 +~ 1;
+#X obj 247 466 *~;
+#X obj 247 417 +~;
+#X obj 292 416 samphold~;
+#X obj 247 316 samphold~;
+#X obj 247 363 *~;
+#X obj 382 401 -~ 0.5;
+#X obj 382 425 *~ 0.5;
+#X obj 382 448 cos~;
+#X obj 293 368 r~ read-pt;
+#X obj 247 294 r chunk-size-samples;
+#X obj 326 317 r~ phase2;
+#X obj 262 340 r~ phase2;
+#X obj 382 377 r~ phase2;
+#X obj 302 391 r~ phase2;
+#X obj 22 484 +~;
+#X text 333 65 <-- transposition \, halftones/10;
+#X text 336 166 loop frequency;
+#X text 448 216 second phase signal;
+#X text 448 234 out of phase from;
+#X text 448 253 first one;
+#X text 64 263 copy 1;
+#X text 290 274 copy 2;
+#X text 111 492 Here is the previous patch modified to use two copies
 of the sample reader \, 180 degrees out of phase. The second sawtooth
 signal is derived from the first one by adding a constant (0.5) and
 wrapping the result to fit again between zero and one. The result is
 the "phase2" signal.;
-#X text 119 584 The computation of "chunk-size-samples" (as a message)
+#X text 110 556 The computation of "chunk-size-samples" (as a message)
 and "read-pt" (an audio signal) is the same for both copies and is
 separated out at top left. At top right is the same loop frequency
 calculation as before.;
-#X text 120 654 Finally \, the two copies' outputs are added and the
+#X text 110 609 Finally \, the two copies' outputs are added and the
 result sent to the audio output.;
-#X obj 20 434 tabread4~ table22;
-#X obj 274 445 tabread4~ table22;
+#X obj 23 431 tabread4~ table22;
+#X obj 247 442 tabread4~ table22;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header two_overlapping_sample_read_elements
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 653 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION two overlapping sample read elements;
+#X text 12 25 KEYWORDS signal array;
+#X restore 392 655 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 overlapping samples- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 655 pd References;
+#X obj 6 655 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 32 0;
 #X connect 0 0 32 1;
 #X connect 1 0 2 0;
 #X connect 1 0 22 0;
-#X connect 2 0 39 0;
+#X connect 2 0 37 0;
 #X connect 3 0 11 0;
-#X connect 5 0 62 0;
-#X connect 6 0 41 0;
+#X connect 5 0 60 0;
+#X connect 6 0 39 0;
 #X connect 7 0 9 0;
 #X connect 8 0 7 0;
 #X connect 9 0 6 0;
-#X connect 11 0 73 0;
+#X connect 11 0 71 0;
 #X connect 12 0 11 1;
 #X connect 13 0 14 0;
 #X connect 14 0 3 0;
@@ -121,38 +144,38 @@ result sent to the audio output.;
 #X connect 17 0 13 1;
 #X connect 18 0 14 1;
 #X connect 19 0 12 1;
-#X connect 21 0 34 0;
+#X connect 21 0 33 0;
 #X connect 22 0 20 0;
 #X connect 25 0 26 0;
 #X connect 26 0 27 0;
 #X connect 26 1 27 1;
-#X connect 27 0 36 0;
+#X connect 27 0 35 0;
 #X connect 28 0 21 0;
 #X connect 29 0 30 0;
 #X connect 30 0 31 0;
 #X connect 31 0 5 1;
-#X connect 34 0 27 0;
-#X connect 36 0 16 0;
-#X connect 36 0 43 0;
-#X connect 42 0 12 0;
-#X connect 43 0 44 0;
-#X connect 44 0 45 0;
-#X connect 46 0 13 0;
-#X connect 47 0 49 0;
-#X connect 48 0 62 1;
-#X connect 49 0 74 0;
-#X connect 50 0 49 1;
+#X connect 33 0 27 0;
+#X connect 35 0 16 0;
+#X connect 35 0 41 0;
+#X connect 40 0 12 0;
+#X connect 41 0 42 0;
+#X connect 42 0 43 0;
+#X connect 44 0 13 0;
+#X connect 45 0 47 0;
+#X connect 46 0 60 1;
+#X connect 47 0 72 0;
+#X connect 48 0 47 1;
+#X connect 49 0 50 0;
+#X connect 50 0 45 0;
 #X connect 51 0 52 0;
-#X connect 52 0 47 0;
-#X connect 53 0 54 0;
-#X connect 54 0 55 0;
-#X connect 55 0 48 1;
-#X connect 56 0 50 0;
-#X connect 57 0 51 0;
-#X connect 58 0 51 1;
-#X connect 59 0 52 1;
-#X connect 60 0 53 0;
-#X connect 61 0 50 1;
-#X connect 62 0 0 0;
-#X connect 73 0 5 0;
-#X connect 74 0 48 0;
+#X connect 52 0 53 0;
+#X connect 53 0 46 1;
+#X connect 54 0 48 0;
+#X connect 55 0 49 0;
+#X connect 56 0 49 1;
+#X connect 57 0 50 1;
+#X connect 58 0 51 0;
+#X connect 59 0 48 1;
+#X connect 60 0 0 0;
+#X connect 71 0 5 0;
+#X connect 72 0 46 0;
diff --git a/pd/doc/3.audio.examples/B14.sampler.rockafella.pd b/pd/doc/3.audio.examples/B14.sampler.rockafella.pd
index 20416b6b4..166a9bb69 100644
--- a/pd/doc/3.audio.examples/B14.sampler.rockafella.pd
+++ b/pd/doc/3.audio.examples/B14.sampler.rockafella.pd
@@ -1,29 +1,28 @@
-#N canvas 123 36 683 718 12;
-#X obj 6 529 hip~ 5;
-#X floatatom 8 47 4 0 100 0 - - -;
-#X obj 7 476 *~;
-#X floatatom 7 123 0 0 200 0 - - -;
-#X obj 7 378 +~;
-#X obj 6 330 samphold~;
-#X obj 7 354 *~;
-#X obj 172 385 r~ phase;
-#X obj 357 210 s~ phase;
-#X obj 94 331 r~ phase;
-#X obj 42 355 r~ phase;
-#X obj 8 90 s chunk-size;
-#X floatatom 357 42 0 0 0 0 - - -;
-#X text 124 82 chunk size;
-#X text 121 96 in seconds;
-#X obj 369 79 r chunk-size;
-#X obj 369 104 t b f;
-#X obj 172 409 -~ 0.5;
-#X obj 172 433 *~ 0.5;
-#X obj 172 456 cos~;
-#X obj 7 560 output~;
-#X text 417 698 updated for Pd version 0.37;
-#X obj 357 184 phasor~;
+#N canvas 406 56 531 683 10;
+#X obj 21 538 hip~ 5;
+#X floatatom 22 86 4 0 100 0 - - -, f 4;
+#X obj 22 485 *~;
+#X floatatom 22 155 0 0 200 0 - - -;
+#X obj 22 395 +~;
+#X obj 22 351 samphold~;
+#X obj 22 373 *~;
+#X obj 157 399 r~ phase;
+#X obj 297 218 s~ phase;
+#X obj 99 351 r~ phase;
+#X obj 54 373 r~ phase;
+#X obj 22 128 s chunk-size;
+#X floatatom 297 62 0 0 0 0 - - -;
+#X text 108 120 chunk size;
+#X text 108 133 in seconds;
+#X obj 309 90 r chunk-size;
+#X obj 309 112 t b f;
+#X obj 157 421 -~ 0.5;
+#X obj 157 443 *~ 0.5;
+#X obj 157 465 cos~;
+#X obj 22 569 output~;
+#X obj 297 192 phasor~;
 #N canvas 30 567 660 275 table 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array table23 44103 float 0;
 #X coords 0 1.02 44100 -1.02 200 130 1;
 #X restore 442 61 graph;
@@ -42,125 +41,150 @@
 #X connect 4 0 9 0;
 #X connect 5 0 9 0;
 #X connect 10 0 6 0;
-#X restore 558 460 pd table;
-#X obj 7 263 s~ read-pt;
-#X obj 45 378 r~ read-pt;
-#X obj 444 203 +~ 0.5;
-#X obj 445 229 wrap~;
-#X obj 445 254 s~ phase2;
-#X obj 6 505 +~;
-#X text 391 43 <-- transposition \, halftones/10;
-#X obj 8 67 * 0.001;
-#X obj 7 215 phasor~;
-#X obj 7 402 *~ 44100;
-#X obj 7 452 tabread4~ table23;
-#X obj 6 305 r chunk-size;
-#X obj 6 428 +~ 1;
-#X floatatom 365 161 5 0 0 0 - - -;
-#X obj 15 169 s precession;
-#X obj 482 103 t b f;
-#X obj 482 78 r precession;
-#X obj 7 146 * 0.01;
-#X obj 258 485 *~;
-#X obj 258 387 +~;
-#X obj 257 339 samphold~;
-#X obj 258 363 *~;
-#X obj 423 418 -~ 0.5;
-#X obj 423 442 *~ 0.5;
-#X obj 423 465 cos~;
-#X obj 296 387 r~ read-pt;
-#X obj 258 411 *~ 44100;
-#X obj 258 461 tabread4~ table23;
-#X obj 257 314 r chunk-size;
-#X obj 257 437 +~ 1;
-#X obj 345 340 r~ phase2;
-#X obj 293 364 r~ phase2;
-#X obj 423 394 r~ phase2;
-#X text 37 123 <-- precession \, percent;
-#X obj 8 3 loadbang;
-#X text 158 3 TIME COMPRESSION/EXPANSION BY LOOPED SAMPLING;
-#X text 111 529 Here \, rather than ask you to push the read pointer
+#X restore 253 288 pd table;
+#X obj 22 293 s~ read-pt;
+#X obj 54 395 r~ read-pt;
+#X obj 384 216 +~ 0.5;
+#X obj 385 237 wrap~;
+#X obj 385 259 s~ phase2;
+#X obj 21 514 +~;
+#X text 331 63 <-- transposition \, halftones/10;
+#X obj 22 106 * 0.001;
+#X obj 22 247 phasor~;
+#X obj 22 417 *~ 44100;
+#X obj 22 461 tabread4~ table23;
+#X obj 22 329 r chunk-size;
+#X obj 22 439 +~ 1;
+#X floatatom 305 169 5 0 0 0 - - -, f 5;
+#X obj 30 201 s precession;
+#X obj 422 111 t b f;
+#X obj 422 89 r precession;
+#X obj 22 178 * 0.01;
+#X obj 253 485 *~;
+#X obj 253 395 +~;
+#X obj 253 351 samphold~;
+#X obj 253 373 *~;
+#X obj 388 421 -~ 0.5;
+#X obj 388 443 *~ 0.5;
+#X obj 388 465 cos~;
+#X obj 285 395 r~ read-pt;
+#X obj 253 417 *~ 44100;
+#X obj 253 461 tabread4~ table23;
+#X obj 253 329 r chunk-size;
+#X obj 253 439 +~ 1;
+#X obj 331 351 r~ phase2;
+#X obj 285 373 r~ phase2;
+#X obj 388 399 r~ phase2;
+#X text 52 155 <-- precession \, percent;
+#X obj 22 42 loadbang;
+#X text 116 514 Here \, rather than ask you to push the read pointer
 back and forth in the sample \, we use a phasor~. This makes it possible
 to avoid the samphold~ on the read pointer (r~ read-pt) \, since \,
 knowing the precession \, we can correct for it in computing the frequency
 of the original phasor~ at right.;
-#X text 111 626 We've changed the control for "chunk size" to milliseconds
+#X text 117 590 We've changed the control for "chunk size" to milliseconds
 for added convenience \, and delayed multiplying sample location by
 the sample rate (44100) until the last moment \, so that calculations
 using "read-pt" and "chunk size" can be in the same units (seconds.)
 ;
-#X msg 8 25 25;
-#X floatatom 139 192 4 0 900 0 - - -;
-#X obj 139 212 * 0.001;
-#X msg 139 170 900;
-#X text 48 47 <-- chunk size (msec);
-#X obj 357 136 expr (pow(2 \, $f1/120)-$f3)/$f2;
-#X obj 139 237 t b f;
-#X obj 139 146 loadbang;
-#X text 182 188 <-- loop length;
-#X text 223 203 (msec);
-#X obj 7 239 *~;
-#X obj 7 191 /;
+#X msg 22 64 25;
+#X floatatom 154 222 4 0 900 0 - - -, f 4;
+#X obj 154 242 * 0.001;
+#X msg 154 200 900;
+#X text 54 86 <-- chunk size (msec);
+#X obj 297 144 expr (pow(2 \, $f1/120)-$f3)/$f2;
+#X obj 154 267 t b f;
+#X obj 154 178 loadbang;
+#X text 187 222 <-- loop length;
+#X text 228 237 (msec);
+#X obj 22 271 *~;
+#X obj 22 223 /;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header time_compression/expansion...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 158 23 ...by looped sampling;
+#X obj 1 662 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal array;
+#X text 12 65 DESCRIPTION time compression and expansion;
+#X restore 392 664 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 time compression/expansion- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 664 pd References;
+#X obj 6 664 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 20 0;
 #X connect 0 0 20 1;
-#X connect 1 0 31 0;
-#X connect 2 0 29 0;
-#X connect 3 0 41 0;
-#X connect 4 0 33 0;
+#X connect 1 0 30 0;
+#X connect 2 0 28 0;
+#X connect 3 0 40 0;
+#X connect 4 0 32 0;
 #X connect 5 0 6 0;
 #X connect 6 0 4 0;
 #X connect 7 0 17 0;
 #X connect 9 0 5 1;
 #X connect 10 0 6 1;
-#X connect 12 0 67 0;
+#X connect 12 0 65 0;
 #X connect 15 0 16 0;
-#X connect 16 0 67 0;
-#X connect 16 1 67 1;
+#X connect 16 0 65 0;
+#X connect 16 1 65 1;
 #X connect 17 0 18 0;
 #X connect 18 0 19 0;
 #X connect 19 0 2 1;
-#X connect 22 0 8 0;
-#X connect 22 0 26 0;
-#X connect 25 0 4 1;
+#X connect 21 0 8 0;
+#X connect 21 0 25 0;
+#X connect 24 0 4 1;
+#X connect 25 0 26 0;
 #X connect 26 0 27 0;
-#X connect 27 0 28 0;
-#X connect 29 0 0 0;
-#X connect 31 0 11 0;
-#X connect 32 0 72 0;
-#X connect 33 0 36 0;
-#X connect 34 0 2 0;
-#X connect 35 0 5 0;
-#X connect 36 0 34 0;
-#X connect 39 0 67 0;
-#X connect 39 1 67 2;
-#X connect 40 0 39 0;
-#X connect 41 0 38 0;
-#X connect 41 0 73 0;
-#X connect 42 0 29 1;
-#X connect 43 0 50 0;
-#X connect 44 0 45 0;
-#X connect 45 0 43 0;
+#X connect 28 0 0 0;
+#X connect 30 0 11 0;
+#X connect 31 0 70 0;
+#X connect 32 0 35 0;
+#X connect 33 0 2 0;
+#X connect 34 0 5 0;
+#X connect 35 0 33 0;
+#X connect 38 0 65 0;
+#X connect 38 1 65 2;
+#X connect 39 0 38 0;
+#X connect 40 0 37 0;
+#X connect 40 0 71 0;
+#X connect 41 0 28 1;
+#X connect 42 0 49 0;
+#X connect 43 0 44 0;
+#X connect 44 0 42 0;
+#X connect 45 0 46 0;
 #X connect 46 0 47 0;
-#X connect 47 0 48 0;
+#X connect 47 0 41 1;
 #X connect 48 0 42 1;
-#X connect 49 0 43 1;
-#X connect 50 0 53 0;
-#X connect 51 0 42 0;
-#X connect 52 0 44 0;
-#X connect 53 0 51 0;
+#X connect 49 0 52 0;
+#X connect 50 0 41 0;
+#X connect 51 0 43 0;
+#X connect 52 0 50 0;
+#X connect 53 0 43 1;
 #X connect 54 0 44 1;
-#X connect 55 0 45 1;
-#X connect 56 0 46 0;
-#X connect 58 0 62 0;
-#X connect 62 0 1 0;
-#X connect 63 0 64 0;
-#X connect 64 0 68 0;
-#X connect 64 0 72 1;
-#X connect 65 0 63 0;
-#X connect 67 0 22 0;
-#X connect 67 0 37 0;
-#X connect 68 0 73 0;
-#X connect 68 1 73 1;
-#X connect 69 0 65 0;
-#X connect 72 0 24 0;
-#X connect 73 0 32 0;
+#X connect 55 0 45 0;
+#X connect 57 0 60 0;
+#X connect 60 0 1 0;
+#X connect 61 0 62 0;
+#X connect 62 0 66 0;
+#X connect 62 0 70 1;
+#X connect 63 0 61 0;
+#X connect 65 0 21 0;
+#X connect 65 0 36 0;
+#X connect 66 0 71 0;
+#X connect 66 1 71 1;
+#X connect 67 0 63 0;
+#X connect 70 0 23 0;
+#X connect 71 0 31 0;
diff --git a/pd/doc/3.audio.examples/B15.tabread4~-onset.pd b/pd/doc/3.audio.examples/B15.tabread4~-onset.pd
index 08eabd5ca..5d12ecb05 100644
--- a/pd/doc/3.audio.examples/B15.tabread4~-onset.pd
+++ b/pd/doc/3.audio.examples/B15.tabread4~-onset.pd
@@ -1,6 +1,5 @@
-#N canvas 88 58 563 680 12;
-#X text 355 655 updated for Pd version 0.42;
-#X text 28 36 Pd is usually compiled to work on 32-bit audio samples.
+#N canvas 433 87 448 590 10;
+#X text 19 37 Pd is usually compiled to work on 32-bit audio samples.
 These do not \, in general \, have enough precision for use as indices
 into an array of more than about 32K samples. This is because the mantissa
 of a 23-bit floating point number has only 24 bits \, out of which
@@ -9,58 +8,91 @@ into the array \, so there would remain 8 or fewer bits to supply the
 fraction. In the most extreme situation possible \, the sample could
 contain a Nyquist frequency sinusoid and the output would then have
 only about 8 bits of accuracy!;
-#X text 29 196 You can use the "onset" inlet to tabread4~ to get good
-accuracy reading longer arrays. The tabread4~ object adds the index
-and the "main" (signal) inlet in 64-bit precision. So if \, for example
-\, the onset inlet could specify an integer exactly up to about 8 million
-(190 seconds at 44100 Hz) \, and the signal inlet could act as a displacement.
-;
-#X text 116 13 USING ONSETS INTO TABREAD4~ TO IMPROVE ACCURACY;
-#X obj 41 587 output~;
-#X obj 395 507 samplerate~;
-#X obj 395 531 / 2;
-#X obj 384 445 loadbang;
-#X obj 384 582 tabwrite~ \$0-tab;
-#X obj 40 557 tabread4~ \$0-tab;
-#X obj 395 555 osc~;
-#X obj 172 557 tabread4~ \$0-tab;
-#X obj 173 589 output~;
-#X obj 384 486 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+#X obj 21 492 output~;
+#X obj 285 411 samplerate~;
+#X obj 285 435 / 2;
+#X obj 274 349 loadbang;
+#X obj 274 486 tabwrite~ \$0-tab;
+#X obj 20 460 tabread4~ \$0-tab;
+#X obj 285 459 osc~;
+#X obj 140 460 tabread4~ \$0-tab;
+#X obj 141 492 output~;
+#X obj 274 390 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
 -1 -1;
-#X msg 408 468 \; pd dsp 1;
-#X obj 41 474 *~ 10000;
-#X obj 41 527 +~;
-#X floatatom 192 476 6 0 0 0 - - -;
-#X msg 247 446 1;
-#X obj 383 610 table \$0-tab 200000;
-#X obj 42 446 phasor~ 0.02;
-#X msg 192 446 150001;
-#X text 28 310 At left below an onset (1 or 150000 samples) is added
+#X msg 298 372 \; pd dsp 1;
+#X obj 21 377 *~ 10000;
+#X obj 21 430 +~;
+#X floatatom 140 379 6 0 0 0 - - -, f 6;
+#X msg 195 349 1;
+#X obj 273 514 table \$0-tab 200000;
+#X obj 22 349 phasor~ 0.02;
+#X msg 140 349 150001;
+#X text 19 242 At left below an onset (1 or 150000 samples) is added
 to the index of a table lookup. If you select the onset of 150001 \,
 you should hear the truncation error. (The table contains a Nyquist
 signal and the "correct" output should be a 100 Hz. tone.) At right
 \, the onset is presented in the separate onset inlet. The worst-case
 truncation error drops by about 30 dB.;
-#X text 57 647 BAD;
-#X text 190 646 GOOD;
-#X text 193 425 ONSET INTO TABLE;
-#X text 384 426 This loads the table:;
-#X connect 5 0 6 0;
-#X connect 6 0 10 0;
-#X connect 7 0 13 0;
-#X connect 7 0 14 0;
-#X connect 9 0 4 0;
-#X connect 9 0 4 1;
-#X connect 10 0 8 0;
-#X connect 11 0 12 0;
-#X connect 11 0 12 1;
-#X connect 13 0 5 0;
-#X connect 13 0 8 0;
-#X connect 15 0 16 0;
-#X connect 15 0 11 0;
-#X connect 16 0 9 0;
-#X connect 17 0 11 1;
-#X connect 17 0 16 1;
-#X connect 18 0 17 0;
-#X connect 20 0 15 0;
-#X connect 21 0 17 0;
+#X text 39 540 BAD;
+#X text 158 540 GOOD;
+#X text 135 329 ONSET INTO TABLE;
+#X text 274 330 This loads the table:;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header onsets_into_[tabread4~]_to_improve_accuracy
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 568 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 25 KEYWORDS;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.42. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION onsets into tabread4~ to improve accuracy
+;
+#X restore 392 570 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Hello World- Related Help Documents;
+#X text 19 37 Mention the help link \, and the fact that you can basically
+click on anything to get a help patch on it. Also be sure to see the
+FAQ at puredata.info as you start out with Pd. A link can be found
+in the "Help" menu above.;
+#X text 18 90 Another hello world can be found in the mailing lists.
+You can search for answers to questions on there \, and if you're having
+a hard time finding info you can always ask questions \, too. (See
+the netiquette page before posting \, though.);
+#X text 69 159 rethink calling that an "atom";
+#X restore 103 570 pd References;
+#X obj 6 570 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 156 You can use the "onset" inlet to [tabread4~] to get
+good accuracy reading longer arrays. The [tabread4~] object adds the
+index and the "main" (signal) inlet in 64-bit precision. So if \, for
+example \, the onset inlet could specify an integer exactly up to about
+8 million (190 seconds at 44100 Hz) \, and the signal inlet could act
+as a displacement.;
+#X connect 2 0 3 0;
+#X connect 3 0 7 0;
+#X connect 4 0 10 0;
+#X connect 4 0 11 0;
+#X connect 6 0 1 0;
+#X connect 6 0 1 1;
+#X connect 7 0 5 0;
+#X connect 8 0 9 0;
+#X connect 8 0 9 1;
+#X connect 10 0 2 0;
+#X connect 10 0 5 0;
+#X connect 12 0 13 0;
+#X connect 12 0 8 0;
+#X connect 13 0 6 0;
+#X connect 14 0 8 1;
+#X connect 14 0 13 1;
+#X connect 15 0 14 0;
+#X connect 17 0 12 0;
+#X connect 18 0 14 0;
diff --git a/pd/doc/3.audio.examples/B16.long-varispeed.pd b/pd/doc/3.audio.examples/B16.long-varispeed.pd
index 14d45825f..6a86e7cd3 100644
--- a/pd/doc/3.audio.examples/B16.long-varispeed.pd
+++ b/pd/doc/3.audio.examples/B16.long-varispeed.pd
@@ -1,158 +1,190 @@
-#N canvas 31 5 779 858 12;
-#X obj 399 526 metro 100;
-#X obj 212 472 phasor~;
-#X obj 399 556 snapshot~;
-#X text 561 824 updated for Pd version 0.42;
-#X obj 23 557 output~;
-#X obj 23 461 phasor~;
-#X floatatom 23 329 5 -100 1000 0 - - -;
-#X obj 23 518 tabread4~ \$0-tab;
-#X msg 290 329 0.5;
-#X msg 326 329 0.01;
-#X obj 398 455 loadbang;
-#X msg 399 478 1;
-#X obj 344 635 +;
-#X obj 144 680 tabread4~ \$0-tab;
-#X obj 375 634 f;
-#X obj 312 612 t f f;
-#X obj 145 712 output~;
-#X floatatom 455 667 8 0 0 0 - - -;
-#X obj 344 670 t f b;
-#X obj 377 699 f;
-#X obj 344 699 -;
-#X floatatom 457 612 8 0 0 0 - - -;
-#X obj 326 726 -;
-#X obj 399 507 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+#N canvas 313 19 779 655 10;
+#X obj 407 469 metro 100;
+#X obj 209 422 phasor~;
+#X obj 407 499 snapshot~;
+#X obj 20 512 output~;
+#X obj 20 416 phasor~;
+#X floatatom 20 284 5 -100 1000 0 - - -, f 5;
+#X obj 20 473 tabread4~ \$0-tab;
+#X msg 302 284 0.5;
+#X msg 338 284 0.01;
+#X obj 407 403 loadbang;
+#X msg 407 425 1;
+#X obj 365 575 +;
+#X obj 207 615 tabread4~ \$0-tab;
+#X obj 396 574 f;
+#X obj 338 552 t f f;
+#X obj 208 647 output~;
+#X floatatom 476 607 8 0 0 0 - - -, f 8;
+#X obj 365 610 t f b;
+#X obj 398 639 f;
+#X obj 365 639 -;
+#X floatatom 487 552 8 0 0 0 - - -, f 8;
+#X obj 338 666 -;
+#X obj 407 450 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
 1;
-#X obj 212 498 -~ 0.5;
-#X obj 290 811 + 0.5;
-#X obj 22 490 *~ 1e+06;
-#X floatatom 326 753 8 0 0 0 - - -;
-#X obj 530 519 samplerate~;
-#X obj 484 546 /;
-#X obj 484 519 t f b;
-#X obj 451 589 +;
-#X obj 295 787 / 10000;
-#X obj 212 523 *~ 10000;
-#X obj 484 570 * 10000;
-#X obj 532 155 samplerate~;
-#X obj 532 179 / 2;
-#X obj 521 93 loadbang;
-#X obj 521 230 tabwrite~ \$0-tab;
-#X obj 532 203 osc~;
-#X obj 521 134 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+#X obj 209 443 -~ 0.5;
+#X obj 316 740 + 0.5;
+#X obj 19 445 *~ 1e+06;
+#X floatatom 338 688 8 0 0 0 - - -, f 8;
+#X obj 538 462 samplerate~;
+#X obj 492 486 /;
+#X obj 492 462 t f b;
+#X obj 459 529 +;
+#X obj 321 716 / 10000;
+#X obj 208 465 *~ 10000;
+#X obj 492 510 * 10000;
+#X obj 452 146 samplerate~;
+#X obj 452 170 / 2;
+#X obj 441 84 loadbang;
+#X obj 441 221 tabwrite~ \$0-tab;
+#X obj 452 194 osc~;
+#X obj 441 125 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
 -1 -1;
-#X msg 545 116 \; pd dsp 1;
-#X obj 520 258 table \$0-tab 1e+06;
-#X text 488 61 and will take about 20 seconds to fill.;
-#X text 488 45 *** The table is now 1 million points \,;
-#X obj 23 433 / 1e+06;
-#X text 61 328 playback speed \, samples/sec;
-#X text 89 460 naive way: just;
-#X text 89 475 run a phasor;
-#X text 88 491 into tabread4~;
-#X text 454 680 new onset is phase plus old onset;
-#X obj 341 357 * 1e+06;
-#X text 458 626 extrapolated phase of next sample;
-#X text 409 700 new onset minus old onset;
-#X text 389 726 back up phasor output by amount the onset advanced
+#X msg 465 107 \; pd dsp 1;
+#X obj 441 249 table \$0-tab 1e+06;
+#X text 408 52 and will take about 20 seconds to fill.;
+#X text 408 36 *** The table is now 1 million points \,;
+#X obj 20 388 / 1e+06;
+#X text 58 283 playback speed \, samples/sec;
+#X text 86 415 naive way: just;
+#X text 86 430 run a phasor;
+#X text 85 446 into tabread4~;
+#X text 475 620 new onset is phase plus old onset;
+#X obj 338 312 * 1e+06;
+#X text 487 567 extrapolated phase of next sample;
+#X text 430 640 new onset minus old onset;
+#X text 397 662 back up phasor output by amount the onset advanced
 ;
-#X text 387 739 (approximately zero but not exactly because of;
-#X text 389 753 truncation error!);
-#X obj 341 383 t b f;
-#X text 400 357 convert to samples;
-#X text 385 384 set both last-onset and previous-onset;
-#X text 385 407 ... and also reset phasor.;
-#X text 354 791 convert phase back to range 0-1;
-#X text 215 548 convert phase to;
-#X text 215 562 range +/-5000;
-#X obj 212 435 / 10000;
-#X text 40 410 cycles/sec;
-#X text 30 400 convert to;
-#X text 216 412 cycles/sec;
-#X text 206 402 convert to;
-#X text 469 472 in order to change onset to reflect it;
-#X text 469 456 Each 100 msec \, poll phase of phasor~;
-#X text 24 29 Here is how to use the tabread~ "onset" input to allow
-clean varispeed playback from a long table. At left \, a phasor~ is
-naiveley rescaled to the size of the tble. At right \, the phasor~
+#X text 395 675 (approximately zero but not exactly because of;
+#X text 397 689 truncation error!);
+#X obj 338 334 t b f;
+#X text 397 312 convert to samples;
+#X text 379 334 set both last-onset and previous-onset;
+#X text 381 355 ... and also reset phasor.;
+#X text 372 716 convert phase back to range 0-1;
+#X text 211 490 convert phase to;
+#X text 211 504 range +/-5000;
+#X obj 209 390 / 10000;
+#X text 37 365 cycles/sec;
+#X text 27 355 convert to;
+#X text 208 369 cycles/sec;
+#X text 208 357 convert to;
+#X text 467 418 in order to change onset to reflect it;
+#X text 554 479 extrapolate snapshot of phase by one;
+#X text 553 492 sample to sync with next block;
+#X text 41 557 BAD;
+#X text 226 692 GOOD;
+#X msg 338 356 0;
+#X text 374 284 <- reset phase. 0.5 causes trouble for the "bad" way.
+;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header variable_speed_playback_from_long_tables
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 36 Here is how to use the [tabread~] "onset" input to allow
+clean varispeed playback from a long table. At left \, a [phasor~]
+is naiveley rescaled to the size of the tble. At right \, the [phasor~]
 gets only a 10000-point range about a moving "onset". Ten times per
-second \, we poll tha phasor~ phase \, sum its value into the onset
-\, and back up the phase of the phasor~ correspondingly.;
-#X text 24 138 The tricky bits are \, first \, that we need to poll
-the phasor~ phase one sample into the future (so we add the per-sample
-increment into the snapshot~ result). Second \, we can't just reset
-the phasor~ to a fixed point - instead \, we measure how much the onset
-has actually increased (which has truncation error from summing in
-the phase snapshot) \, and subtract that increase from the phase \,
-giving a value that differs from zero by the truncation error but reflects
-the true phase we should reset to for continuity.;
-#X text 26 281 The metronome rate is arbitrary but should be fast enough
-that the phasor~ never has time to wrap.;
-#X text 518 539 extrapolate snapshot of phase by one;
-#X text 517 552 sample to sync with next block;
-#X text 41 617 BAD;
-#X text 160 770 GOOD;
-#X text 195 9 VARIABLE SPEED PLAYBACK FROM LONG TABLES;
-#X msg 340 408 0;
-#X text 369 328 <- reset phase. 0.5 causes trouble for the "bad" way.
+second \, we poll the [phasor~] phase \, sum its value into the onset
+\, and back up the phase of the [phasor~] correspondingly.;
+#X text 18 122 The tricky bits are \, first \, that we need to poll
+the [phasor~] phase one sample into the future (so we add the per-sample
+increment into the [snapshot~] result). Second \, we can't just reset
+the [phasor~] to a fixed point - instead \, we measure how much the
+onset has actually increased (which has truncation error from summing
+in the phase snapshot) \, and subtract that increase from the phase
+\, giving a value that differs from zero by the truncation error but
+reflects the true phase we should reset to for continuity.;
+#X text 17 241 The metronome rate is arbitrary but should be fast enough
+that the [phasor~] never has time to wrap.;
+#X text 467 402 Each 100 msec \, poll phase of [phasor~];
+#X obj 1 778 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 25 KEYWORDS;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.42. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION variable speed playback from long tables
 ;
+#X restore 392 780 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Hello World- Related Help Documents;
+#X text 19 37 Mention the help link \, and the fact that you can basically
+click on anything to get a help patch on it. Also be sure to see the
+FAQ at puredata.info as you start out with Pd. A link can be found
+in the "Help" menu above.;
+#X text 18 90 Another hello world can be found in the mailing lists.
+You can search for answers to questions on there \, and if you're having
+a hard time finding info you can always ask questions \, too. (See
+the netiquette page before posting \, though.);
+#X text 69 159 rethink calling that an "atom";
+#X restore 103 780 pd References;
+#X obj 6 780 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 2 0;
-#X connect 1 0 24 0;
-#X connect 2 0 31 0;
-#X connect 5 0 26 0;
-#X connect 6 0 45 0;
-#X connect 6 0 64 0;
-#X connect 7 0 4 0;
+#X connect 1 0 23 0;
+#X connect 2 0 30 0;
+#X connect 4 0 25 0;
+#X connect 5 0 44 0;
+#X connect 5 0 63 0;
+#X connect 6 0 3 0;
+#X connect 6 0 3 1;
 #X connect 7 0 4 1;
-#X connect 8 0 5 1;
-#X connect 8 0 51 0;
-#X connect 9 0 5 1;
-#X connect 9 0 51 0;
-#X connect 10 0 11 0;
-#X connect 11 0 23 0;
-#X connect 12 0 14 0;
-#X connect 12 0 18 0;
-#X connect 12 0 13 1;
-#X connect 12 0 17 0;
-#X connect 13 0 16 0;
-#X connect 13 0 16 1;
-#X connect 14 0 12 1;
-#X connect 15 0 22 0;
-#X connect 15 1 12 0;
+#X connect 7 0 50 0;
+#X connect 8 0 4 1;
+#X connect 8 0 50 0;
+#X connect 9 0 10 0;
+#X connect 10 0 22 0;
+#X connect 11 0 13 0;
+#X connect 11 0 17 0;
+#X connect 11 0 12 1;
+#X connect 11 0 16 0;
+#X connect 12 0 15 0;
+#X connect 12 0 15 1;
+#X connect 13 0 11 1;
+#X connect 14 0 21 0;
+#X connect 14 1 11 0;
+#X connect 17 0 18 1;
+#X connect 17 0 19 0;
+#X connect 17 1 18 0;
 #X connect 18 0 19 1;
-#X connect 18 0 20 0;
-#X connect 18 1 19 0;
-#X connect 19 0 20 1;
-#X connect 20 0 22 1;
-#X connect 22 0 27 0;
-#X connect 22 0 32 0;
-#X connect 23 0 0 0;
-#X connect 24 0 33 0;
-#X connect 25 0 1 1;
-#X connect 26 0 7 0;
-#X connect 28 0 29 1;
-#X connect 29 0 34 0;
-#X connect 30 0 29 0;
-#X connect 30 1 28 0;
-#X connect 31 0 15 0;
-#X connect 31 0 21 0;
-#X connect 32 0 25 0;
-#X connect 33 0 2 0;
-#X connect 33 0 13 0;
-#X connect 34 0 31 1;
-#X connect 35 0 36 0;
+#X connect 19 0 21 1;
+#X connect 21 0 26 0;
+#X connect 21 0 31 0;
+#X connect 22 0 0 0;
+#X connect 23 0 32 0;
+#X connect 24 0 1 1;
+#X connect 25 0 6 0;
+#X connect 27 0 28 1;
+#X connect 28 0 33 0;
+#X connect 29 0 28 0;
+#X connect 29 1 27 0;
+#X connect 30 0 14 0;
+#X connect 30 0 20 0;
+#X connect 31 0 24 0;
+#X connect 32 0 2 0;
+#X connect 32 0 12 0;
+#X connect 33 0 30 1;
+#X connect 34 0 35 0;
+#X connect 35 0 38 0;
 #X connect 36 0 39 0;
-#X connect 37 0 40 0;
-#X connect 37 0 41 0;
-#X connect 39 0 38 0;
-#X connect 40 0 35 0;
-#X connect 40 0 38 0;
-#X connect 45 0 5 0;
-#X connect 51 0 57 0;
-#X connect 57 0 79 0;
-#X connect 57 1 19 1;
-#X connect 57 1 12 1;
-#X connect 64 0 1 0;
-#X connect 64 0 30 0;
-#X connect 79 0 15 0;
+#X connect 36 0 40 0;
+#X connect 38 0 37 0;
+#X connect 39 0 34 0;
+#X connect 39 0 37 0;
+#X connect 44 0 4 0;
+#X connect 50 0 56 0;
+#X connect 56 0 73 0;
+#X connect 56 1 18 1;
+#X connect 56 1 11 1;
+#X connect 63 0 1 0;
+#X connect 63 0 29 0;
+#X connect 73 0 14 0;
diff --git a/pd/doc/3.audio.examples/C01.nyquist.pd b/pd/doc/3.audio.examples/C01.nyquist.pd
index 256da0e31..82f23646a 100644
--- a/pd/doc/3.audio.examples/C01.nyquist.pd
+++ b/pd/doc/3.audio.examples/C01.nyquist.pd
@@ -1,87 +1,51 @@
-#N canvas 601 188 580 659 12;
-#N canvas 0 0 450 300 graph1 0;
-#X array table24 259 float 1;
-#A 0 -0.294693 0 0.294693 0.4 0.28948 0.10749 0.022875 0.0789655 0.181673
-0.218249 0.171348 0.115564 0.119192 0.169863 0.201356 0.178657 0.137857
-0.138353 0.188891 0.23571 0.22487 0.164534 0.115848 0.125265 0.176634
-0.214361 0.205655 0.169043 0.14204 0.134157 0.124033 0.0997798 0.0859507
-0.118173 0.195202 0.270956 0.301868 0.293569 0.285908 0.289835 0.256276
-0.128881 -0.0684912 -0.215994 -0.195335 -0.0145421 0.174701 0.203986
-0.0451069 -0.159794 -0.231026 -0.119011 0.0575033 0.135323 0.0628509
--0.0665307 -0.124779 -0.0776696 0.000279083 0.0247376 -0.00546273 -0.0222151
-0.017933 0.0755681 0.0749102 4.97367e-06 -0.0729564 -0.0490464 0.0834901
-0.232853 0.286943 0.213202 0.0759584 -0.0357248 -0.0863297 -0.101697
--0.115455 -0.125625 -0.107127 -0.0530433 0.012152 0.0608637 0.0902219
-0.111597 0.119683 0.0910146 0.0236817 -0.0326555 -0.0100379 0.100844
-0.216022 0.223032 0.094995 -0.0649958 -0.110291 0.00678482 0.180334
-0.247439 0.144699 -0.0319975 -0.124321 -0.0648335 0.0680811 0.141409
-0.100343 0.00354248 -0.0636733 -0.0891566 -0.131987 -0.227286 -0.316392
--0.293048 -0.12222 0.100475 0.222686 0.173879 0.0281889 -0.0714016
--0.0482686 0.0482418 0.108884 0.0773858 -0.00559103 -0.0590099 -0.0454391
-0.00509731 0.0411467 0.0421476 0.0225557 2.40108e-06 -0.0225508 -0.0421448
--0.0411506 -0.00510821 0.0454302 0.0590142 0.0056084 -0.0773706 -0.108887
--0.0482625 0.048252 0.0714103 -0.0281575 -0.173853 -0.222693 -0.100517
-0.122172 0.293026 0.316402 0.22731 0.132002 0.0891614 0.063682 -0.00352253
--0.100324 -0.141412 -0.0681076 0.0648079 0.124324 0.0320316 -0.144663
--0.247435 -0.180365 -0.00682225 0.110282 0.0650224 -0.0949583 -0.223017
--0.216038 -0.100873 0.010022 0.0326611 -0.0236657 -0.0910033 -0.119682
--0.111601 -0.0902271 -0.0608718 -0.0121649 0.0530291 0.107119 0.125625
-0.115458 0.101699 0.0863353 0.0357423 -0.0759289 -0.213176 -0.28694
--0.232878 -0.0835252 0.0490278 0.0729642 1.4921e-05 -0.0749008 -0.0755765
--0.0179463 0.0222127 0.00547055 -0.0247352 -0.000292052 0.0776522 0.12478
-0.0665546 -0.062824 -0.135322 -0.0575355 0.118973 0.23102 0.159828
--0.0450604 -0.203969 -0.174729 0.014495 0.195309 0.21601 0.0685338
--0.128843 -0.25626 -0.289835 -0.285909 -0.293565 -0.30187 -0.270969
--0.195221 -0.118186 -0.0859518 -0.0997742 -0.124029 -0.134156 -0.142036
--0.169035 -0.205649 -0.214364 -0.176646 -0.125273 -0.115843 -0.16452
--0.22486 -0.235715 -0.188904 -0.13836 -0.137851 -0.178647 -0.201357
--0.169874 -0.1192 -0.115557 -0.171333 -0.218246 -0.181691 -0.0789875
--0.0228734 -0.107456 -0.289441 -0.399997 -0.294741 -7.20325e-05 0.294645
-;
-#X coords 0 1.02 258 -1.02 258 130 1;
-#X restore 93 408 graph;
-#X obj 33 288 line~;
-#X msg 33 237 500 \, 1423 4000;
-#X floatatom 41 262 5 0 0 0 - - -;
-#X text 24 556 Synthesis techniques vary in their tendency to make
+#N canvas 433 91 448 577 10;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array table24 259 float 0;
+#X coords 0 1.02 259 -1.02 258 130 1;
+#X restore 24 358 graph;
+#X obj 24 232 line~;
+#X msg 24 181 500 \, 1423 4000;
+#X floatatom 32 206 5 0 0 0 - - -, f 5;
+#X text 21 499 Synthesis techniques vary in their tendency to make
 foldover. For higher pitched sounds you'll want to try out relatively
 folvover-resistant ones.;
-#X obj 33 342 output~;
-#X obj 201 281 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 24 286 output~;
+#X obj 182 232 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
 #N canvas 0 0 618 384 make-tab 0;
 #X obj 13 28 inlet;
-#X obj 99 28 inlet;
-#X obj 183 28 inlet;
-#X obj 255 29 inlet;
-#X msg 38 176 \; table24 sinesum 256 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0
+#X obj 69 28 inlet;
+#X obj 153 28 inlet;
+#X obj 225 29 inlet;
+#X msg 69 176 \; table24 sinesum 256 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0
 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 \, normalize
 0.4;
-#X msg 14 277 \; table24 sinesum 256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+#X msg 13 277 \; table24 sinesum 256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 \, normalize
 0.2;
-#X msg 183 101 \; table24 const 0 \, 0 1 1 1 1 1;
-#X msg 255 58 \; table24 const 0;
+#X msg 153 101 \; table24 const 0 \, 0 1 1 1 1 1;
+#X msg 225 58 \; table24 const 0;
+#X obj 82 146 loadbang;
 #X connect 0 0 5 0;
 #X connect 1 0 4 0;
 #X connect 2 0 6 0;
 #X connect 3 0 7 0;
-#X restore 201 355 pd make-tab;
-#X obj 232 300 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X connect 8 0 4 0;
+#X restore 182 313 pd make-tab;
+#X obj 203 252 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 263 317 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 224 272 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 295 334 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 245 292 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 222 276 sine;
-#X text 252 297 complex;
-#X text 284 314 rectangle;
-#X text 313 332 clear;
-#X obj 33 315 tabosc4~ table24;
-#X text 56 2 THE NYQUIST THEOREM AND FOLDOVER;
-#X text 30 33 WARNING: PLAY THIS QUIETLY TO AVOID UNPLEASANTNESS AND
+#X text 201 229 sine;
+#X text 221 249 complex;
+#X text 241 269 rectangle;
+#X text 263 290 clear;
+#X obj 24 259 tabosc4~ table24;
+#X text 21 37 WARNING: PLAY THIS QUIETLY TO AVOID UNPLEASANTNESS AND
 POSSIBLE EAR DAMAGE.;
-#X text 29 77 Foldover occurs when you synthesize frequencies greater
+#X text 21 68 Foldover occurs when you synthesize frequencies greater
 than the Nyquist frequency (half the sample rate). In this example
 \, the fundamental only reaches 1423 \, but the tables contain high
 partials. As the partials sweep upward you hear them reflect off the
@@ -89,8 +53,32 @@ Nyquist frequency. Also \, partials can come into contact with each
 other causing beating. The value of 1423 was chosen to make the beating
 effect especially strong if you're running at a sample rate of 44100
 (the usual one.);
-#X text 330 616 updated for Pd version 0.37;
-#X text 219 245 waveforms:;
+#X text 177 206 waveforms:;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header the_nyquist_theorem_and_foldover
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 555 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION the nyquist theorem and foldover;
+#X restore 392 557 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 nyquist theorem- Related Help Documents;
+#X restore 103 557 pd References;
+#X obj 6 557 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 15 0;
 #X connect 2 0 1 0;
 #X connect 3 0 1 0;
diff --git a/pd/doc/3.audio.examples/C02.sawtooth-foldover.pd b/pd/doc/3.audio.examples/C02.sawtooth-foldover.pd
index f52fc5482..7aea62f94 100644
--- a/pd/doc/3.audio.examples/C02.sawtooth-foldover.pd
+++ b/pd/doc/3.audio.examples/C02.sawtooth-foldover.pd
@@ -1,14 +1,12 @@
-#N canvas 180 71 562 473 12;
-#X obj 155 348 output~;
-#X text 310 443 updated for Pd version 0.37;
-#X text 56 2 FOLDOVER IN SAWTOOTH WAVES;
-#X obj 154 320 clip~ 0 1;
-#X obj 155 153 mtof;
-#X floatatom 155 131 3 0 0 0 - - -;
-#X obj 155 269 *~ 20;
-#X obj 155 295 -~ 19;
-#X obj 155 177 phasor~;
-#N canvas 0 0 560 183 /SUBPATCH/ 0;
+#N canvas 433 133 448 453 10;
+#X obj 155 333 output~;
+#X obj 155 305 clip~ 0 1;
+#X obj 155 152 mtof;
+#X floatatom 155 130 3 0 0 0 - - -, f 3;
+#X obj 155 261 *~ 20;
+#X obj 155 283 -~ 19;
+#X obj 155 176 phasor~;
+#N canvas 0 0 560 183 (subpatch) 0;
 #X obj 25 74 loadbang;
 #X msg 25 99 61;
 #X obj 25 124 outlet;
@@ -16,24 +14,49 @@
 opened.;
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
-#X restore 155 105 pd;
-#X text 190 130 <--pitch;
-#X obj 164 206 output~;
-#X text 237 205 <--sawtooth amplitude;
-#X text 233 373 <--pulse train amplitude;
-#X text 28 406 We'll explain more about making pulses later on... this
+#X restore 155 104 pd;
+#X text 190 129 <--pitch;
+#X obj 164 205 output~;
+#X text 237 204 <--sawtooth amplitude;
+#X text 233 358 <--pulse train amplitude;
+#X text 18 388 We'll explain more about making pulses later on... this
 example is mostly intended as ear training.;
-#X text 19 23 In more ordinary kinds of waveforms \, foldover comes
+#X text 18 37 In more ordinary kinds of waveforms \, foldover comes
 across as a "cheap synth" sound. You can hear the foldover clearly
 in the pulse train here \, and less clearly (but still audibly) in
 the straight sawtooth \, especially at high pitches.;
-#X connect 3 0 0 0;
-#X connect 3 0 0 1;
-#X connect 4 0 8 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header foldover_in_sawtooth_waves
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 431 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION foldover in sawtooth waves;
+#X restore 392 433 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 foldover- Related Help Documents;
+#X restore 103 433 pd References;
+#X obj 6 433 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 1 0 0 0;
+#X connect 1 0 0 1;
+#X connect 2 0 6 0;
+#X connect 3 0 2 0;
+#X connect 4 0 5 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 6 0 9 0;
+#X connect 6 0 9 1;
 #X connect 7 0 3 0;
-#X connect 8 0 6 0;
-#X connect 8 0 11 0;
-#X connect 8 0 11 1;
-#X connect 9 0 5 0;
diff --git a/pd/doc/3.audio.examples/C03.zipper.noise.pd b/pd/doc/3.audio.examples/C03.zipper.noise.pd
index a49f51ad7..ca6671a4a 100644
--- a/pd/doc/3.audio.examples/C03.zipper.noise.pd
+++ b/pd/doc/3.audio.examples/C03.zipper.noise.pd
@@ -1,12 +1,10 @@
-#N canvas 298 115 555 414 12;
-#X obj 42 349 output~;
-#X text 302 376 updated for Pd version 0.37;
-#X text 56 2 ZIPPER NOISE;
-#X obj 43 321 *~;
-#X obj 125 350 output~;
-#X obj 126 322 *~;
-#X obj 65 262 line;
-#X obj 149 262 line~;
+#N canvas 433 149 448 405 10;
+#X obj 21 318 output~;
+#X obj 22 290 *~;
+#X obj 96 318 output~;
+#X obj 97 291 *~;
+#X obj 22 231 line;
+#X obj 112 231 line~;
 #N canvas 0 0 450 300 metro 0;
 #X obj 88 39 loadbang;
 #X msg 87 65 1;
@@ -22,34 +20,59 @@
 #X connect 3 0 4 0;
 #X connect 4 0 5 0;
 #X connect 4 1 6 0;
-#X restore 65 170 pd metro;
-#X obj 65 198 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 22 139 pd metro;
+#X obj 22 167 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 132 199 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 112 167 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X msg 65 219 1 300;
-#X msg 132 221 0 300;
-#X obj 72 290 osc~ 880;
-#X text 30 28 Here is a related issue: if we use a (control) line object
+#X msg 22 188 1 300;
+#X msg 112 188 0 300;
+#X obj 37 259 osc~ 880;
+#X text 19 37 Here is a related issue: if we use a (control) line object
 to change an amplitude \, it sends ramping control messages \, once
 every 20 msec by default. At left we use this to control the amplitude
 of a sinusoid. In effect we're multiplying the sinusoid by a staircase
 signal (50 increments per second.) Using the signal version \, line~
 \, fixes the problem. Line~ outputs a ramp that is incremented every
 sample.;
-#X connect 3 0 0 0;
-#X connect 3 0 0 1;
-#X connect 5 0 4 0;
-#X connect 5 0 4 1;
-#X connect 6 0 3 1;
-#X connect 7 0 5 1;
-#X connect 8 0 9 0;
-#X connect 8 1 10 0;
-#X connect 9 0 11 0;
-#X connect 10 0 12 0;
-#X connect 11 0 6 0;
-#X connect 11 0 7 0;
-#X connect 12 0 6 0;
-#X connect 12 0 7 0;
-#X connect 13 0 3 0;
-#X connect 13 0 5 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header zipper_noise 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 383 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION zipper noise;
+#X text 12 25 KEYWORDS signal;
+#X restore 392 385 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 zipper noise- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 385 pd References;
+#X obj 6 385 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 1 0 0 0;
+#X connect 1 0 0 1;
+#X connect 3 0 2 0;
+#X connect 3 0 2 1;
+#X connect 4 0 1 0;
+#X connect 5 0 3 1;
+#X connect 6 0 7 0;
+#X connect 6 1 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 4 0;
+#X connect 9 0 5 0;
+#X connect 10 0 4 0;
+#X connect 10 0 5 0;
+#X connect 11 0 1 1;
+#X connect 11 0 3 0;
diff --git a/pd/doc/3.audio.examples/C04.control.to.signal.pd b/pd/doc/3.audio.examples/C04.control.to.signal.pd
index eed326dd1..1ad6a1836 100644
--- a/pd/doc/3.audio.examples/C04.control.to.signal.pd
+++ b/pd/doc/3.audio.examples/C04.control.to.signal.pd
@@ -1,7 +1,6 @@
-#N canvas 215 77 561 455 12;
-#X text 14 7 CONVERTING CONTROL TO SIGNALS;
-#X obj 29 350 output~;
-#X obj 107 352 output~;
+#N canvas 433 140 448 430 10;
+#X obj 21 310 output~;
+#X obj 99 310 output~;
 #N canvas 0 0 450 300 metro 0;
 #X obj 88 39 loadbang;
 #X msg 87 65 1;
@@ -17,32 +16,56 @@
 #X connect 3 0 4 0;
 #X connect 3 1 5 0;
 #X connect 6 0 2 0;
-#X restore 30 242 pd metro;
-#X msg 30 268 1 2;
-#X msg 97 270 0 2;
-#X obj 30 305 line~;
-#X obj 108 306 vline~;
-#X text 13 107 Here we try out line~ and vline~ as triangle wave generators.
-The subpatch is still sending alternating bangs as in the last patch
-\, but now at an audible frequency \, every 2 msec.;
-#X text 17 172 The effect of line~ rounding breakpoints to the nearest
-block (on the order of a millisecond) is that each 4-millisecond-long
-cycle has a different shape. Using vline~ resolves the problem.;
-#X text 385 437 Updated for Pd 0.37;
-#X text 16 411 Sometimes you will want to use vline~ in place of sig~
-for the same reason.;
-#X text 15 27 For controlling amplitudes \, line~ \, with its block-aligned
+#X restore 22 212 pd metro;
+#X msg 22 238 1 2;
+#X msg 100 238 0 2;
+#X obj 22 275 line~;
+#X obj 100 275 vline~;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header converting_controls_to_signals
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 37 For controlling amplitudes \, [line~] \, with its block-aligned
 breakpoints \, is accurate enough for most purposes. But certain usages
-\, such as this patch \, demand more accuracy. The vline~ object \,
-somewhat more expensive than line~ \, can handle breakpoints to sub-sample
-accuracy.;
-#X connect 3 0 4 0;
-#X connect 3 1 5 0;
+\, such as this patch \, demand more accuracy. The [vline~] object
+\, somewhat more expensive than [line~] \, can handle breakpoints to
+sub-sample accuracy.;
+#X text 19 101 Here we try out [line~] and [vline~] as triangle wave
+generators. The subpatch is still sending alternating bangs as in the
+last patch \, but now at an audible frequency \, every 2 msec.;
+#X text 18 154 The effect of [line~] rounding breakpoints to the nearest
+block (on the order of a millisecond) is that each 4-millisecond-long
+cycle has a different shape. Using [vline~] resolves the problem.;
+#X text 18 364 Sometimes you will want to use [vline~] in place of
+[sig~] for the same reason.;
+#X obj 1 408 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal conversion;
+#X text 12 65 DESCRIPTION converting controls to signals;
+#X restore 392 410 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 controls to signals- Related Help Documents;
+#X restore 103 410 pd References;
+#X obj 6 410 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 3 0 6 0;
+#X connect 4 0 5 0;
 #X connect 4 0 6 0;
-#X connect 4 0 7 0;
-#X connect 5 0 6 0;
-#X connect 5 0 7 0;
+#X connect 5 0 0 0;
+#X connect 5 0 0 1;
 #X connect 6 0 1 0;
 #X connect 6 0 1 1;
-#X connect 7 0 2 0;
-#X connect 7 0 2 1;
diff --git a/pd/doc/3.audio.examples/C05.sampler.oneshot.pd b/pd/doc/3.audio.examples/C05.sampler.oneshot.pd
index f75d55175..a231bbd93 100644
--- a/pd/doc/3.audio.examples/C05.sampler.oneshot.pd
+++ b/pd/doc/3.audio.examples/C05.sampler.oneshot.pd
@@ -1,84 +1,107 @@
-#N canvas 34 0 985 746 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 343 57 720 680 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array tab28 176403 float 0;
 #X coords 0 1.02 176403 -1.02 200 130 1;
-#X restore 740 126 graph;
-#X obj 577 486 loadbang;
-#X obj 31 340 hip~ 5;
-#X obj 587 345 adc~ 1;
-#X obj 587 375 hip~ 5;
-#X msg 558 306 bang;
-#X text 681 492 v-- re-read the original sample;
-#X text 20 6 ONE-SHOT SAMPLER USING LINE~ AS PHASE;
-#X obj 31 306 *~;
-#X obj 71 279 r cutoff;
-#X obj 31 194 r phase;
-#X msg 24 37 bang;
-#X obj 124 92 delay 5;
-#X text 77 37 <-- play the sample;
-#X msg 24 128 \; cutoff 0 5;
-#X text 34 85 cut the;
-#X text 34 104 sound off;
-#X text 204 77 Wait for the;
-#X text 202 97 cutoff to finish;
-#X text 349 121 set the upper line~ to start;
-#X text 349 140 at the first sample and go;
-#X text 348 161 forever (until the next trigger);
-#X text 18 486 To start a note \, first we have to mute the output
+#X restore 479 189 graph;
+#X obj 150 321 loadbang;
+#X obj 23 270 hip~ 5;
+#X obj 230 194 adc~ 1;
+#X obj 230 216 hip~ 5;
+#X msg 218 163 bang;
+#X text 214 319 v-- re-read the original sample;
+#X obj 23 248 *~;
+#X obj 53 226 r cutoff;
+#X obj 23 158 r phase;
+#X msg 22 42 bang;
+#X obj 112 74 delay 5;
+#X text 75 42 <-- play the sample;
+#X msg 22 113 \; cutoff 0 5;
+#X text 30 77 cut the;
+#X text 30 92 sound off;
+#X text 169 65 Wait for the;
+#X text 168 80 cutoff to finish;
+#X text 288 97 set the upper line~ to start;
+#X text 288 112 at the first sample and go;
+#X text 288 127 forever (until the next trigger);
+#X text 256 162 <-- record;
+#X obj 285 241 line~;
+#X obj 230 268 *~;
+#X text 507 320 ------ 4 seconds ------;
+#X obj 285 194 del 3990;
+#X msg 285 216 0 10;
+#X text 322 216 <--stop recording;
+#X text 19 592 We avoid clicking at the end of the table by getting
+the table's own contents to go smoothly to zero. To do this we added
+a level control to the recording patch that cuts off just before the
+recording reaches the end of the table.;
+#X text 146 400 this is.;
+#X text 147 385 My apologies to Jonathan Harvey whose bell;
+#X obj 150 365 soundfiler;
+#X obj 53 248 vline~;
+#X obj 22 299 output~;
+#X obj 23 180 vline~;
+#X obj 218 290 tabwrite~ tab28;
+#X msg 150 343 read ../sound/bell.aiff tab28;
+#X obj 23 202 tabread4~ tab28;
+#X msg 112 100 \; phase 1 \, 4.41e+08 1e+07 \; cutoff 1;
+#X msg 166 216 0 \, 1 5;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header one-shot_sampler_using_line~_as_phase
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 453 To start a note \, first we have to mute the output
 in case ther's already something playing---otherwise we'll get a click.
-The "cutoff" line~ then takes 5 msec to get to zero. After that amount
+The "cutoff" [line~] then takes 5 msec to get to zero. After that amount
 of delay \, we reset the phase to sample number 1 and set it in motion.
-We want the line~ output to increase by 1 each sample of output \,
+We want the [line~] output to increase by 1 each sample of output \,
 so we ask for it to do 4.41e+08 samples in 1e+07 milliseconds.;
-#X text 18 602 The cutoff mechanism is still safe if we happen to ask
+#X text 18 539 The cutoff mechanism is still safe if we happen to ask
 for two notes in under 5 msec. The second request would reset the delay
 \, so that there's no way the delay can possibly fire without the cutoff
-line~ at zero.;
-#X text 596 305 <-- record;
-#X obj 622 405 line~;
-#X obj 587 410 *~;
-#X text 738 267 ------ 4 seconds ------;
-#X obj 655 342 del 3990;
-#X msg 655 370 0 10;
-#X text 706 371 <--stop recording;
-#X text 19 672 We avoid clicking at the end of the table by getting
-the table's own contents to go smoothly to zero. To do this we added
-a level control to the recording patch that cuts off just before the
-recording reaches the end of the table.;
-#X text 576 599 this is.;
-#X text 578 575 My apologies to Jonathan Harvey whose bell;
-#X obj 577 545 soundfiler;
-#X text 19 443 Here's how to make a sampler with a line~ object \,
-instead of a phasor~ \, to generate the read location signal.;
-#X obj 71 306 vline~;
-#X obj 30 369 output~;
-#X obj 31 224 vline~;
-#X obj 558 439 tabwrite~ tab28;
-#X msg 577 516 read ../sound/bell.aiff tab28;
-#X obj 31 254 tabread4~ tab28;
-#X msg 124 127 \; phase 1 \, 4.41e+08 1e+07 \; cutoff 1;
-#X msg 497 386 0 \, 1 5;
-#X text 719 717 updated for Pd version 0.37;
-#X connect 1 0 40 0;
-#X connect 2 0 37 0;
-#X connect 2 0 37 1;
+[line~] at zero.;
+#X obj 1 658 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION one-shot sampler using line~ as phase;
+#X text 12 25 KEYWORDS signal;
+#X restore 392 660 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 one-shot sampler- Related Help Documents;
+#X restore 103 660 pd References;
+#X obj 6 660 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 20 423 Here's how to make a sampler with a [line~] object \,
+instead of a [phasor~] \, to generate the read location signal.;
+#X connect 1 0 36 0;
+#X connect 2 0 33 0;
+#X connect 2 0 33 1;
 #X connect 3 0 4 0;
-#X connect 4 0 26 0;
-#X connect 5 0 28 0;
-#X connect 5 0 43 0;
+#X connect 4 0 23 0;
+#X connect 5 0 25 0;
 #X connect 5 0 39 0;
-#X connect 8 0 2 0;
-#X connect 9 0 36 0;
-#X connect 10 0 38 0;
-#X connect 11 0 14 0;
-#X connect 11 0 12 0;
-#X connect 12 0 42 0;
-#X connect 25 0 26 1;
-#X connect 26 0 39 0;
-#X connect 28 0 29 0;
-#X connect 29 0 25 0;
-#X connect 36 0 8 1;
-#X connect 38 0 41 0;
-#X connect 40 0 34 0;
-#X connect 41 0 8 0;
-#X connect 43 0 25 0;
+#X connect 5 0 35 0;
+#X connect 7 0 2 0;
+#X connect 8 0 32 0;
+#X connect 9 0 34 0;
+#X connect 10 0 13 0;
+#X connect 10 0 11 0;
+#X connect 11 0 38 0;
+#X connect 22 0 23 1;
+#X connect 23 0 35 0;
+#X connect 25 0 26 0;
+#X connect 26 0 22 0;
+#X connect 32 0 7 1;
+#X connect 34 0 37 0;
+#X connect 36 0 31 0;
+#X connect 37 0 7 0;
+#X connect 39 0 22 0;
diff --git a/pd/doc/3.audio.examples/C06.signal.to.control.pd b/pd/doc/3.audio.examples/C06.signal.to.control.pd
index 1c3e4bf07..0e6e2ceb6 100644
--- a/pd/doc/3.audio.examples/C06.signal.to.control.pd
+++ b/pd/doc/3.audio.examples/C06.signal.to.control.pd
@@ -1,4 +1,4 @@
-#N canvas 215 77 561 455 12;
+#N canvas 433 195 448 265 10;
 #N canvas 0 0 269 179 metro 0;
 #X obj 88 39 loadbang;
 #X msg 87 65 1;
@@ -9,17 +9,40 @@
 #X connect 0 0 4 0;
 #X connect 1 0 3 0;
 #X connect 3 0 2 0;
-#X restore 41 247 pd metro;
-#X text 374 425 Updated for Pd 0.37;
-#X obj 41 316 snapshot~;
-#X obj 66 286 phasor~ 1;
-#X floatatom 41 347 5 0 0 0 - - -;
-#X text 14 7 CONVERTING SIGNALS TO CONTROLS;
-#X text 15 35 The snapshot~ object allows you to convert from signals
-back to control streams (float messages) -- an opposite of signal~.
+#X restore 21 119 pd metro;
+#X obj 21 175 snapshot~;
+#X obj 46 145 phasor~ 1;
+#X floatatom 21 206 5 0 0 0 - - -, f 5;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header converting_signals_to_controls
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 18 38 The [snapshot~] object allows you to convert from signals
+back to control streams (float messages) -- an opposite of [signal~].
 The value output is always the end of the most recently computed audio
 block \, so that even if you bang it metronomically (as here) it need
 not give you samples that are exactly evenly spaced.;
-#X connect 0 0 2 0;
-#X connect 2 0 4 0;
-#X connect 3 0 2 0;
+#X obj 1 243 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal conversion;
+#X text 12 65 DESCRIPTION converting signals to controls;
+#X restore 392 245 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 signals to controls- Related Help Documents;
+#X restore 103 245 pd References;
+#X obj 6 245 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
diff --git a/pd/doc/3.audio.examples/C07.envelope.follower.pd b/pd/doc/3.audio.examples/C07.envelope.follower.pd
index 51f8f56bd..714151690 100644
--- a/pd/doc/3.audio.examples/C07.envelope.follower.pd
+++ b/pd/doc/3.audio.examples/C07.envelope.follower.pd
@@ -1,113 +1,136 @@
-#N canvas 66 7 617 909 12;
-#X text 164 5 ENVELOPE FOLLOWERS;
-#X text 10 25 The env~ object reports ths RMS signal level over the
-last 256 samples (by default) or any other power of 2 that's at least
-twice the block size. The analysis is done in an overlapped fashion
-so that results appear every N/2 points if N is the analysis window
-size. So the larger the window \, the stabler the result and the less
-frequently it appears. Computation time doesn't depend heavily on N.
-;
-#X text 11 135 Envelope followers are frequently used to detect attacks
+#N canvas 433 83 448 603 10;
+#X text 19 123 Envelope followers are frequently used to detect attacks
 and periods of silence. (There are fancier attack detectors out there
 \, though.) Here is a simple threshold-based attack and rest detector.
 ;
-#X obj 102 297 dbtorms;
-#X obj 23 293 osc~ 440;
-#X obj 23 339 env~;
-#X floatatom 78 329 0 0 0 0 - - -;
-#X floatatom 102 274 0 0 0 0 - - -;
-#X msg 451 320 \; pd dsp 1;
-#X obj 119 380 t b f;
-#X floatatom 119 403 0 0 0 0 - - -;
-#X obj 126 458 pack;
-#X obj 126 481 route 0 1;
-#X obj 126 504 > 55;
-#X obj 176 504 < 45;
-#X obj 126 527 sel 1;
-#X obj 176 527 sel 1;
-#X msg 90 538 1;
-#X msg 90 516 0;
-#X obj 126 564 print attack;
-#X obj 119 435 != 0;
-#X obj 24 612 t b f;
-#X floatatom 15 638 0 0 0 0 - - -;
-#X obj 27 688 pack;
-#X obj 27 711 route 0 1;
-#X obj 27 749 sel 1;
-#X msg 6 856 1;
-#X msg 7 879 0;
-#X obj 20 666 != 0;
-#X obj 58 639 < 45;
-#X obj 31 783 timer;
-#X obj 113 712 sel 0;
-#X obj 95 832 sel 0;
-#X obj 45 832 sel 1;
-#X obj 45 873 print rest;
-#X obj 31 806 > 1000;
-#X text 162 403 state -- 1 if waiting for low threshold \,;
-#X text 199 418 0 if we've attained it and now want the;
-#X text 202 434 high one.;
-#X text 209 480 route the RMS value according to state;
-#X text 239 506 if off \, 55 dB means attack. If on \, 45;
-#X text 240 527 dB or less means state changes to off.;
-#X text 132 359 ATTACK DETECTION;
-#X text 40 594 REST DETECTION;
-#X text 100 637 Here we always will test RMS against a low value;
-#X text 125 654 but as before we route the result according to;
-#X text 147 671 our state \, 1 if "resting" \, 0 if not.;
-#X text 163 709 regardless of state \, when RMS isn't low;
-#X text 185 724 reset the timer;
-#X text 202 846 RMS isn't low enough.;
-#X text 120 744 If we're not in rest \, and the RMS is low \,;
-#X text 143 761 check elapsed time sinse RMS last wasn't low.;
-#X text 122 802 If more than 1 second \, report a rest.;
-#X text 170 828 If we're at rest \, pop out of it when;
-#X text 11 201 Both detectors are state machines with two states \,
+#X obj 102 267 dbtorms;
+#X obj 23 263 osc~ 440;
+#X obj 23 309 env~;
+#X floatatom 78 299 0 0 0 0 - - -;
+#X floatatom 102 244 0 0 0 0 - - -;
+#X msg 342 286 \; pd dsp 1;
+#X obj 110 350 t b f;
+#X floatatom 110 373 0 0 0 0 - - -;
+#X obj 116 418 pack;
+#X obj 116 441 route 0 1;
+#X obj 116 464 > 55;
+#X obj 166 464 < 45;
+#X obj 116 487 sel 1;
+#X obj 166 487 sel 1;
+#X msg 70 498 1;
+#X msg 70 476 0;
+#X obj 116 514 print attack;
+#X obj 110 395 != 0;
+#X obj 23 565 t b f;
+#X floatatom 23 591 0 0 0 0 - - -;
+#X obj 35 641 pack;
+#X obj 35 664 route 0 1;
+#X obj 35 700 sel 1;
+#X msg 14 809 1;
+#X msg 15 832 0;
+#X obj 28 619 != 0;
+#X obj 66 592 < 45;
+#X obj 39 736 timer;
+#X obj 121 665 sel 0;
+#X obj 103 785 sel 0;
+#X obj 53 785 sel 1;
+#X obj 53 826 print rest;
+#X obj 39 759 > 1000;
+#X text 153 373 state -- 1 if waiting for low threshold \,;
+#X text 190 388 0 if we've attained it and now want the;
+#X text 193 404 high one.;
+#X text 180 441 route the RMS value according to state;
+#X text 209 466 if off \, 55 dB means attack. If on \, 45;
+#X text 209 487 dB or less means state changes to off.;
+#X text 123 329 ATTACK DETECTION;
+#X text 33 546 REST DETECTION;
+#X text 98 590 Here we always will test RMS against a low value;
+#X text 123 607 but as before we route the result according to;
+#X text 145 624 our state \, 1 if "resting" \, 0 if not.;
+#X text 161 662 regardless of state \, when RMS isn't low;
+#X text 183 677 reset the timer;
+#X text 180 799 RMS isn't low enough.;
+#X text 108 697 If we're not in rest \, and the RMS is low \,;
+#X text 131 714 check elapsed time sinse RMS last wasn't low.;
+#X text 101 757 If more than 1 second \, report a rest.;
+#X text 148 781 If we're at rest \, pop out of it when;
+#X text 19 176 Both detectors are state machines with two states \,
 on and off. If on \, a test is run to determine whether to turn off
 \, and vice versa. The tests are run at each output of the rms~ object.
 ;
-#X text 355 884 updated for Pd version 0.37;
-#X text 109 320 note 3.01 dB difference between;
-#X text 113 336 peak and RMS amplitudes.;
-#X obj 451 297 loadbang;
-#X obj 23 316 *~;
-#X connect 3 0 59 1;
-#X connect 4 0 59 0;
-#X connect 5 0 6 0;
-#X connect 5 0 9 0;
-#X connect 5 0 21 0;
-#X connect 7 0 3 0;
+#X text 109 290 note 3.01 dB difference between;
+#X text 109 305 peak and RMS amplitudes.;
+#X obj 342 263 loadbang;
+#X obj 23 286 *~;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header envelope_followers
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 37 The [env~] object reports ths RMS signal level over the
+last 256 samples (by default) or any other power of 2 that's at least
+twice the block size. The analysis is done in an overlapped fashion
+so that results appear every N/2 points if N is the analysis window
+size. So the larger the window \, the stabler the result and the less
+frequently it appears. Computation time doesn't depend heavily on N.
+;
+#X obj 1 870 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION envelope followers;
+#X restore 392 872 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 envelope follower- Related Help Documents;
+#X restore 103 872 pd References;
+#X obj 6 872 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 1 0 56 1;
+#X connect 2 0 56 0;
+#X connect 3 0 4 0;
+#X connect 3 0 7 0;
+#X connect 3 0 19 0;
+#X connect 5 0 1 0;
+#X connect 7 0 8 0;
+#X connect 7 1 9 1;
+#X connect 8 0 18 0;
 #X connect 9 0 10 0;
-#X connect 9 1 11 1;
-#X connect 10 0 20 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 12 1 14 0;
+#X connect 10 0 11 0;
+#X connect 10 1 12 0;
+#X connect 11 0 13 0;
+#X connect 12 0 14 0;
 #X connect 13 0 15 0;
+#X connect 13 0 17 0;
 #X connect 14 0 16 0;
-#X connect 15 0 17 0;
-#X connect 15 0 19 0;
-#X connect 16 0 18 0;
-#X connect 17 0 10 0;
-#X connect 18 0 10 0;
-#X connect 20 0 11 0;
+#X connect 15 0 8 0;
+#X connect 16 0 8 0;
+#X connect 18 0 9 0;
+#X connect 19 0 20 0;
+#X connect 19 1 27 0;
+#X connect 20 0 26 0;
 #X connect 21 0 22 0;
-#X connect 21 1 29 0;
-#X connect 22 0 28 0;
-#X connect 23 0 24 0;
-#X connect 24 0 25 0;
-#X connect 24 1 32 0;
-#X connect 25 0 30 1;
-#X connect 26 0 22 0;
-#X connect 27 0 22 0;
-#X connect 28 0 23 0;
-#X connect 29 0 23 1;
-#X connect 29 0 31 0;
-#X connect 30 0 35 0;
-#X connect 31 0 30 0;
-#X connect 32 0 27 0;
-#X connect 33 0 26 0;
-#X connect 33 0 34 0;
-#X connect 35 0 33 0;
-#X connect 58 0 8 0;
-#X connect 59 0 5 0;
+#X connect 22 0 23 0;
+#X connect 22 1 30 0;
+#X connect 23 0 28 1;
+#X connect 24 0 20 0;
+#X connect 25 0 20 0;
+#X connect 26 0 21 0;
+#X connect 27 0 21 1;
+#X connect 27 0 29 0;
+#X connect 28 0 33 0;
+#X connect 29 0 28 0;
+#X connect 30 0 25 0;
+#X connect 31 0 24 0;
+#X connect 31 0 32 0;
+#X connect 33 0 31 0;
+#X connect 55 0 6 0;
+#X connect 56 0 3 0;
diff --git a/pd/doc/3.audio.examples/C08.analog.sequencer.pd b/pd/doc/3.audio.examples/C08.analog.sequencer.pd
index bbde61cc5..10afbd0cd 100644
--- a/pd/doc/3.audio.examples/C08.analog.sequencer.pd
+++ b/pd/doc/3.audio.examples/C08.analog.sequencer.pd
@@ -1,11 +1,11 @@
-#N canvas 57 74 829 559 12;
+#N canvas 371 99 634 555 10;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array 29-sequence 9 float 3;
 #A 0 110 550 385 495 165 385 495 275 615;
 #X coords 0 500 9 0 200 100 1;
-#X restore 621 42 graph;
-#X obj 27 426 *~;
-#X obj 27 454 hip~ 5;
+#X restore 411 112 graph;
+#X obj 23 406 *~;
+#X obj 23 434 hip~ 5;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array 29-envelope 103 float 1;
 #A 0 -0.0199988 1.0673e-06 0.0500008 0.13 0.16 0.28 0.5 0.6 0.7 0.8
@@ -22,7 +22,7 @@
 0.111111 0.1 0.0888889 0.0777778 0.0666667 0.0555556 0.0444444 0.0333333
 0.0222222 0.0111111 0 -0.0111111;
 #X coords 0 1 102 0 200 100 1;
-#X restore 622 146 graph;
+#X restore 412 216 graph;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array 29-sample 259 float 1;
 #A 0 0.989177 1 0.989177 0.95694 0.903989 0.83147 0.740952 0.634394
@@ -61,23 +61,22 @@
 -0.19512 -0.0490981 0.0979867 0.24295 0.382655 0.514076 0.634369 0.74093
 0.831452 0.903976 0.956931 0.989172 1 0.989181;
 #X coords 0 1 258 -1 200 100 1;
-#X restore 619 281 graph;
-#X text 566 533 updated for Pd version 0.37;
-#X obj 26 218 tabread~ 29-sequence;
-#X obj 106 241 wrap~;
-#X obj 106 265 *~ 100;
-#X obj 106 289 +~ 1;
-#X obj 26 242 phasor~;
-#X obj 26 266 -~ 0.5;
-#X obj 27 377 cos~;
-#X obj 84 336 *~;
-#X obj 28 488 output~;
-#X obj 84 408 tabread4~ 29-sample;
-#X obj 106 313 tabread4~ 29-envelope;
-#X obj 84 360 *~ 128;
-#X obj 84 384 +~ 129;
-#X obj 27 401 +~ 1;
-#X obj 26 194 *~ 9;
+#X restore 409 351 graph;
+#X obj 22 198 tabread~ 29-sequence;
+#X obj 102 221 wrap~;
+#X obj 102 245 *~ 100;
+#X obj 102 269 +~ 1;
+#X obj 22 222 phasor~;
+#X obj 22 246 -~ 0.5;
+#X obj 23 357 cos~;
+#X obj 80 316 *~;
+#X obj 24 468 output~;
+#X obj 80 388 tabread4~ 29-sample;
+#X obj 102 293 tabread4~ 29-envelope;
+#X obj 80 340 *~ 128;
+#X obj 80 364 +~ 129;
+#X obj 23 381 +~ 1;
+#X obj 22 174 *~ 9;
 #N canvas 328 85 609 424 make-tables 0;
 #X msg 109 52 bang;
 #X obj 109 77 t b b;
@@ -114,43 +113,67 @@ then went in and changed it with the mouse afterward.);
 #X connect 9 0 5 1;
 #X connect 10 0 8 0;
 #X connect 11 0 8 0;
-#X restore 689 401 pd make-tables;
-#X text 46 1 ANALOG-SYNTH-STYLE SEQUENCER;
-#X obj 26 170 phasor~ 0.6;
-#X text 97 194 main loop: sawtooth of amplitude 9;
-#X text 218 219 read frequency sequence;
-#X text 162 241 9x original frequency sawtooth;
-#X text 173 266 adjust for reading;
-#X text 346 266 envelope sample;
-#X text 123 336 multiply envelope by audio-frequency sawtooth;
-#X text 147 361 adjust amplitude and center for wavetable;
-#X text 62 428 multiply by raised-cosine smoothing function;
-#X text 478 401 how to make the tables:;
-#X text 27 27 Some control operations can be carried out entirely by
+#X restore 339 501 pd make-tables;
+#X obj 22 150 phasor~ 0.6;
+#X text 93 174 main loop: sawtooth of amplitude 9;
+#X text 214 199 read frequency sequence;
+#X text 158 221 9x original frequency sawtooth;
+#X text 169 246 adjust for reading;
+#X text 292 246 envelope sample;
+#X text 119 316 multiply envelope by audio-frequency sawtooth;
+#X text 143 341 adjust amplitude and center for wavetable;
+#X text 58 408 multiply by raised-cosine smoothing function;
+#X text 198 501 how to make the tables:;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header analog-synth-style_sequencer
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 37 Some control operations can be carried out entirely by
 tilde objects passing audio signals around. Here is an imitation of
-an analog sequencer and envelope generator. A phasor~ loops through
+an analog sequencer and envelope generator. A [phasor~] loops through
 the "sequence" table at 0.6 Hz \, generating 9 frequencies. Simultaneously
 \, by multiplying by 9 and wrapping \, we create a sawtooth at 9*0.6=5.4
 Hz \, which reads a second table for an envelope shape. This becomes
 the grain size for a sampler based on the 18.sampler.looped example
 earlier.;
+#X obj 1 533 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION analog synth-style sequencer;
+#X restore 392 534 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 analog synth- Related Help Documents;
+#X restore 103 535 pd References;
+#X obj 6 535 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 2 0;
-#X connect 2 0 14 0;
-#X connect 2 0 14 1;
-#X connect 6 0 10 0;
+#X connect 2 0 13 0;
+#X connect 2 0 13 1;
+#X connect 5 0 9 0;
+#X connect 6 0 7 0;
 #X connect 7 0 8 0;
-#X connect 8 0 9 0;
-#X connect 9 0 16 0;
+#X connect 8 0 15 0;
+#X connect 9 0 10 0;
+#X connect 10 0 12 0;
 #X connect 10 0 11 0;
-#X connect 11 0 13 0;
-#X connect 11 0 12 0;
-#X connect 12 0 19 0;
-#X connect 13 0 17 0;
-#X connect 15 0 1 1;
-#X connect 16 0 13 1;
-#X connect 17 0 18 0;
-#X connect 18 0 15 0;
-#X connect 19 0 1 0;
-#X connect 20 0 6 0;
-#X connect 20 0 7 0;
-#X connect 23 0 20 0;
+#X connect 11 0 18 0;
+#X connect 12 0 16 0;
+#X connect 14 0 1 1;
+#X connect 15 0 12 1;
+#X connect 16 0 17 0;
+#X connect 17 0 14 0;
+#X connect 18 0 1 0;
+#X connect 19 0 5 0;
+#X connect 19 0 6 0;
+#X connect 21 0 19 0;
diff --git a/pd/doc/3.audio.examples/C09.sample.hold.pd b/pd/doc/3.audio.examples/C09.sample.hold.pd
index dc41aacd3..e55160828 100644
--- a/pd/doc/3.audio.examples/C09.sample.hold.pd
+++ b/pd/doc/3.audio.examples/C09.sample.hold.pd
@@ -1,34 +1,35 @@
-#N canvas 120 85 930 452 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 345 127 713 469 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array samphold 44100 float 0;
 #X coords 0 1 44100 0 300 200 1;
-#X restore 606 36 graph;
+#X restore 365 116 graph;
 #N canvas 0 0 439 429 tables 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array dbtorms 123 float 1;
 #A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05
 2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05
 4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05
-8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828
-0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813
-0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946
-0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489
-0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813
-0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328
-0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526
-0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684
-0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202
-0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838
-0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946
-0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526
-2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341
-6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893;
+8.91251e-05 0.0001 0.000112202 0.000125893 0.000141254 0.000158489
+0.000177828 0.000199526 0.000223872 0.000251189 0.000281838 0.000316228
+0.000354813 0.000398107 0.000446684 0.000501187 0.000562341 0.000630957
+0.000707946 0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254
+0.00158489 0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228
+0.00354813 0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946
+0.00794328 0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489
+0.0177828 0.0199526 0.0223872 0.0251189 0.0281838 0.0316228 0.0354813
+0.0398107 0.0446684 0.0501187 0.0562341 0.0630957 0.0707946 0.0794328
+0.0891251 0.1 0.112202 0.125893 0.141254 0.158489 0.177828 0.199526
+0.223872 0.251189 0.281838 0.316228 0.354813 0.398107 0.446684 0.501187
+0.562341 0.630957 0.707946 0.794328 0.891251 1 1.12202 1.25893 1.41254
+1.58489 1.77828 1.99526 2.23872 2.51189 2.81838 3.16228 3.54813 3.98107
+4.46684 5.01187 5.62341 6.30957 7.07946 7.94328 8.91251 10 11.2202
+12.5893;
 #X coords 0 10 123 0 200 100 1;
 #X restore 78 55 graph;
 #X text 280 148 0;
 #X text 282 48 10;
 #X text 97 158 ------ 123 samples ------;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array mtof 130 float 1;
 #A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499
 12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017
@@ -50,55 +51,78 @@
 #X text 95 340 ------ 130 samples ------;
 #X text 294 325 0;
 #X text 296 225 12000;
-#X restore 648 280 pd tables;
-#X text 67 8 SAMPLE AND HOLD;
-#X obj 141 266 phasor~ 5;
-#X obj 44 241 phasor~ 7;
-#X obj 44 266 samphold~;
-#X floatatom 44 216 0 0 0 0 - - -;
-#X floatatom 141 211 0 0 0 0 - - -;
-#X obj 216 319 tabwrite~ samphold;
-#X msg 216 294 bang;
-#X obj 44 341 tabread4~ mtof;
-#X obj 44 291 *~ 48;
-#X obj 44 316 +~ 36;
-#X obj 44 366 osc~;
-#X msg 216 236 0;
-#X text 259 293 <--graph output;
-#X obj 44 191 unpack;
-#X text 254 233 <-- reset phase;
-#X msg 311 131 32 96.33;
-#X msg 124 131 5 7;
-#X msg 44 131 1 5;
-#X msg 78 131 2 11;
-#X msg 161 131 3.7 8.8;
-#X msg 235 131 3.4 8.9;
-#X text 16 31 Another analog favorite \, the sample and hold unit freezes
+#X restore 313 351 pd tables;
+#X obj 119 254 phasor~ 5;
+#X obj 22 229 phasor~ 7;
+#X obj 22 254 samphold~;
+#X floatatom 22 204 0 0 0 0 - - -;
+#X floatatom 119 199 0 0 0 0 - - -;
+#X obj 194 308 tabwrite~ samphold;
+#X msg 194 283 bang;
+#X obj 22 333 tabread4~ mtof;
+#X obj 22 286 *~ 48;
+#X obj 22 311 +~ 36;
+#X obj 22 356 osc~;
+#X msg 170 224 0;
+#X text 233 283 <--graph output;
+#X obj 22 179 unpack;
+#X text 198 222 <-- reset phase;
+#X msg 269 119 32 96.33;
+#X msg 102 119 5 7;
+#X msg 22 119 1 5;
+#X msg 56 119 2 11;
+#X msg 139 119 3.7 8.8;
+#X msg 203 119 3.4 8.9;
+#X text 19 38 Another analog favorite \, the sample and hold unit freezes
 an audio signal on command. In the Pd version \, the second input of
 samphold~ triggers it \, and the first input becomes the output's new
 value whenever the trigger decreases from one sample to the next. This
 is ideal for updating values when a phasor wraps around.;
-#X text 679 428 updated for Pd version 0.37;
-#X obj 44 392 output~;
-#X connect 3 0 5 1;
-#X connect 4 0 5 0;
-#X connect 5 0 11 0;
-#X connect 5 0 8 0;
-#X connect 6 0 4 0;
-#X connect 7 0 3 0;
-#X connect 9 0 8 0;
-#X connect 10 0 13 0;
-#X connect 11 0 12 0;
-#X connect 12 0 10 0;
-#X connect 13 0 26 0;
-#X connect 13 0 26 1;
-#X connect 14 0 3 1;
-#X connect 14 0 4 1;
-#X connect 16 0 6 0;
-#X connect 16 1 7 0;
-#X connect 18 0 16 0;
-#X connect 19 0 16 0;
-#X connect 20 0 16 0;
-#X connect 21 0 16 0;
-#X connect 22 0 16 0;
-#X connect 23 0 16 0;
+#X obj 22 382 output~;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header sample_and_hold
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 447 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION sample and hold;
+#X restore 392 449 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 sample and hold- Related Help Documents;
+#X restore 103 449 pd References;
+#X obj 6 449 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 2 0 4 1;
+#X connect 3 0 4 0;
+#X connect 4 0 10 0;
+#X connect 4 0 7 0;
+#X connect 5 0 3 0;
+#X connect 6 0 2 0;
+#X connect 8 0 7 0;
+#X connect 9 0 12 0;
+#X connect 10 0 11 0;
+#X connect 11 0 9 0;
+#X connect 12 0 24 0;
+#X connect 12 0 24 1;
+#X connect 13 0 2 1;
+#X connect 13 0 3 1;
+#X connect 15 0 5 0;
+#X connect 15 1 6 0;
+#X connect 17 0 15 0;
+#X connect 18 0 15 0;
+#X connect 19 0 15 0;
+#X connect 20 0 15 0;
+#X connect 21 0 15 0;
+#X connect 22 0 15 0;
diff --git a/pd/doc/3.audio.examples/C10.monophonic.synth.pd b/pd/doc/3.audio.examples/C10.monophonic.synth.pd
index 66b14564f..fdb1be606 100644
--- a/pd/doc/3.audio.examples/C10.monophonic.synth.pd
+++ b/pd/doc/3.audio.examples/C10.monophonic.synth.pd
@@ -1,107 +1,130 @@
-#N canvas 57 27 578 769 12;
-#X obj 13 514 mtof;
-#X obj 13 463 stripnote;
-#X obj 164 519 select;
-#X obj 155 413 float;
-#X obj 164 381 t b f;
-#X obj 164 487 float;
-#X text 217 367 f - store pitch below;
-#X text 209 415 velocity stored here;
-#X text 128 459 off;
-#X text 216 486 recall pitch;
-#X text 132 2 MONOPHONIC MIDI SYNTH;
-#X obj 13 340 unpack;
-#X obj 13 273 notein;
-#X obj 13 300 pack;
-#X obj 94 570 line~;
-#X msg 94 544 \$1 100;
-#X msg 164 545 0 1000;
-#X text 15 75 First \, at top \, incoming MIDI notes are parsed and
+#N canvas 424 19 448 637 10;
+#X obj 22 484 mtof;
+#X obj 22 433 stripnote;
+#X obj 173 489 select;
+#X obj 164 383 float;
+#X obj 173 351 t b f;
+#X obj 173 457 float;
+#X text 215 340 f - store pitch below;
+#X text 208 383 velocity stored here;
+#X text 137 429 off;
+#X text 213 456 recall pitch;
+#X obj 22 310 unpack;
+#X obj 22 243 notein;
+#X obj 22 270 pack;
+#X obj 103 540 line~;
+#X msg 103 514 \$1 100;
+#X msg 173 515 0 1000;
+#X text 20 79 First \, at top \, incoming MIDI notes are parsed and
 used to set pitch and trigger an ADSR envelope. Second \, the envelope
 generator itself has been extended to offer controls over the time
 and target values via number boxes.;
-#X text 17 21 This patch shows how to make a monophonic synthesizer
+#X text 19 36 This patch shows how to make a monophonic synthesizer
 that could be controlled from a MIDI or voltage-control keyboard--in
 this example we assume MIDI.;
-#X msg 152 290 55 64;
-#X msg 152 316 55 0;
-#X msg 95 291 48 64;
-#X msg 95 317 48 0;
-#X text 14 142 The note-off testing is complicated by the fact that
+#X msg 161 260 55 64;
+#X msg 161 286 55 0;
+#X msg 104 261 48 64;
+#X msg 104 287 48 0;
+#X text 20 132 The note-off testing is complicated by the fact that
 we have to test both that the velocity is zero \, and further that
 the note-off pitch matches the pitch that is now playing (the most
 recent note-on pitch.);
-#X text 218 387 b - bang to recall velocity;
-#X obj 155 442 sel 0;
-#X text 177 463 on;
-#X obj 16 712 output~;
-#X obj 15 688 hip~ 5;
-#X obj 14 642 *~;
-#X obj 13 541 phasor~;
-#X obj 13 565 -~ 0.5;
-#X obj 14 593 cos~;
-#X obj 102 617 *~;
-#X obj 14 617 +~ 1;
-#X text 332 741 updated for Pd version 0.37;
-#X obj 102 665 cos~;
-#X msg 95 268 48 128;
-#X text 18 491 pitch;
-#X text 19 443 messages;
-#X text 210 441 test for note on or off;
-#X text 227 520 test against latest;
-#X text 270 535 note-on pitch;
-#X text 18 407 filter;
-#X text 19 425 note-on;
-#X obj 15 664 *~;
-#X obj 94 517 / 127;
-#X text 14 208 The synthesis technique is the same as in the previous
+#X text 215 356 b - bang to recall velocity;
+#X obj 164 412 sel 0;
+#X text 186 433 on;
+#X obj 25 682 output~;
+#X obj 24 658 hip~ 5;
+#X obj 23 612 *~;
+#X obj 22 511 phasor~;
+#X obj 22 535 -~ 0.5;
+#X obj 23 563 cos~;
+#X obj 111 587 *~;
+#X obj 23 587 +~ 1;
+#X obj 111 635 cos~;
+#X msg 104 238 48 128;
+#X text 27 461 pitch;
+#X text 28 413 messages;
+#X text 209 412 test for note on or off;
+#X text 220 490 test against latest;
+#X text 263 505 note-on pitch;
+#X text 27 377 filter;
+#X text 28 395 note-on;
+#X obj 24 634 *~;
+#X obj 103 487 / 127;
+#X text 19 185 The synthesis technique is the same as in the previous
 patch \, done in a simpler (but less general) way with a cos~ object
 replacing the wavetable lookup.;
-#X text 148 571 envelope generator now controls amplitude;
-#X text 317 589 as well as grain size;
-#X obj 102 641 *~ 2;
-#X obj 123 594 +~ 0.5;
-#X text 148 687 The +~ 0.5 and *~ 2 are fudge factors.;
-#X text 148 648 This replaces the tabread4~;
-#X text 146 668 in the previous patch.;
-#X text 211 290 These buttons simulate MIDI input.;
-#X connect 0 0 30 0;
+#X text 145 540 envelope generator now controls amplitude;
+#X text 284 558 as well as grain size;
+#X obj 111 611 *~ 2;
+#X obj 132 564 +~ 0.5;
+#X text 157 657 The +~ 0.5 and *~ 2 are fudge factors.;
+#X text 157 618 This replaces the tabread4~;
+#X text 155 638 in the previous patch.;
+#X text 201 260 These buttons simulate MIDI input.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header monophonic_MIDI_synth
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 747 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS MIDI;
+#X text 12 65 DESCRIPTION monophonic MIDI synth;
+#X restore 392 749 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 MIDI synth- Related Help Documents;
+#X restore 103 749 pd References;
+#X obj 6 749 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 29 0;
 #X connect 1 0 2 1;
 #X connect 1 0 0 0;
-#X connect 2 0 16 0;
-#X connect 3 0 25 0;
+#X connect 2 0 15 0;
+#X connect 3 0 24 0;
 #X connect 4 0 3 0;
 #X connect 4 1 5 1;
 #X connect 5 0 2 0;
-#X connect 11 0 1 0;
-#X connect 11 0 4 0;
-#X connect 11 1 1 1;
-#X connect 11 1 3 1;
-#X connect 12 0 13 0;
-#X connect 12 1 13 1;
-#X connect 13 0 11 0;
-#X connect 14 0 45 1;
-#X connect 14 0 51 0;
-#X connect 15 0 14 0;
-#X connect 16 0 14 0;
-#X connect 19 0 11 0;
-#X connect 20 0 11 0;
-#X connect 21 0 11 0;
-#X connect 22 0 11 0;
-#X connect 25 0 5 0;
-#X connect 25 1 46 0;
-#X connect 28 0 27 0;
-#X connect 28 0 27 1;
-#X connect 29 0 45 0;
+#X connect 10 0 1 0;
+#X connect 10 0 4 0;
+#X connect 10 1 1 1;
+#X connect 10 1 3 1;
+#X connect 11 0 12 0;
+#X connect 11 1 12 1;
+#X connect 12 0 10 0;
+#X connect 13 0 43 1;
+#X connect 13 0 49 0;
+#X connect 14 0 13 0;
+#X connect 15 0 13 0;
+#X connect 18 0 10 0;
+#X connect 19 0 10 0;
+#X connect 20 0 10 0;
+#X connect 21 0 10 0;
+#X connect 24 0 5 0;
+#X connect 24 1 44 0;
+#X connect 27 0 26 0;
+#X connect 27 0 26 1;
+#X connect 28 0 43 0;
+#X connect 29 0 30 0;
+#X connect 30 0 32 0;
 #X connect 30 0 31 0;
 #X connect 31 0 33 0;
-#X connect 31 0 32 0;
-#X connect 32 0 34 0;
-#X connect 33 0 50 0;
-#X connect 34 0 29 0;
-#X connect 36 0 29 1;
-#X connect 37 0 11 0;
-#X connect 45 0 28 0;
-#X connect 46 0 15 0;
-#X connect 50 0 36 0;
-#X connect 51 0 33 1;
+#X connect 32 0 48 0;
+#X connect 33 0 28 0;
+#X connect 34 0 28 1;
+#X connect 35 0 10 0;
+#X connect 43 0 27 0;
+#X connect 44 0 14 0;
+#X connect 48 0 34 0;
+#X connect 49 0 32 1;
diff --git a/pd/doc/3.audio.examples/D01.envelope.gen.pd b/pd/doc/3.audio.examples/D01.envelope.gen.pd
index cd58d50c3..26b9aff24 100644
--- a/pd/doc/3.audio.examples/D01.envelope.gen.pd
+++ b/pd/doc/3.audio.examples/D01.envelope.gen.pd
@@ -1,50 +1,73 @@
-#N canvas 173 105 567 576 12;
-#X text 246 260 attack;
-#X text 317 261 release;
-#X obj 248 397 line~;
-#X msg 318 355 0 500;
-#X text 126 7 ENVELOPE GENERATORS;
-#X obj 65 369 phasor~ 50;
-#X obj 65 417 *~;
-#X obj 65 465 wrap~;
-#X msg 247 355 1 2500;
-#X obj 65 393 -~ 0.5;
-#X msg 182 331 10 200;
-#X obj 247 331 del 200;
-#X text 26 22 This patch uses an envelope generator to control a sound.
+#N canvas 433 97 448 560 10;
+#X text 203 210 attack;
+#X text 274 211 release;
+#X obj 204 347 line~;
+#X msg 275 305 0 500;
+#X obj 21 329 phasor~ 50;
+#X obj 21 377 *~;
+#X obj 21 425 wrap~;
+#X msg 204 305 1 2500;
+#X obj 21 353 -~ 0.5;
+#X msg 139 281 10 200;
+#X obj 204 281 del 200;
+#X text 18 37 This patch uses an envelope generator to control a sound.
 When you hit "attack" two things happen. First \, the line~ object
 rises to 10 in 200 milliseconds. Then after a "delay" of the same 200
 msec \, the second message sends the line~ back down to 1 over another
 2500 msec. The "release" just ramps us down to zero at the end.;
-#X obj 65 513 output~;
-#X text 311 550 updated for Pd version 0.37;
-#X obj 65 441 +~ 0.5;
-#X obj 65 489 hip~ 5;
-#X obj 247 280 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 21 473 output~;
+#X obj 21 401 +~ 0.5;
+#X obj 21 449 hip~ 5;
+#X obj 204 230 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 318 281 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 275 231 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X msg 257 308 stop;
-#X text 28 121 You can hit the "attack" and/or "release" while something
+#X msg 214 258 stop;
+#X text 18 112 You can hit the "attack" and/or "release" while something
 is still going on from a previous attack or release \, and the envelope
 generator does the ``right thing". In particular \, the release button
 sends a "stop" to the "del" object \, in case it is still scheduled
 to go off from a previous attack.;
-#X text 27 218 The synthesis method is a form of waveshaping \, which
+#X text 18 187 The synthesis method is a form of waveshaping \, which
 is the subject of a later chapter.;
-#X connect 2 0 6 1;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header envelope_generators
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 538 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION envelope generators;
+#X restore 392 540 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 envelope generators- Related Help Documents;
+#X restore 103 540 pd References;
+#X obj 6 540 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 2 0 5 1;
 #X connect 3 0 2 0;
-#X connect 5 0 9 0;
-#X connect 6 0 15 0;
-#X connect 7 0 16 0;
-#X connect 8 0 2 0;
-#X connect 9 0 6 0;
-#X connect 10 0 2 0;
-#X connect 11 0 8 0;
-#X connect 15 0 7 0;
-#X connect 16 0 13 0;
-#X connect 17 0 11 0;
+#X connect 4 0 8 0;
+#X connect 5 0 13 0;
+#X connect 6 0 14 0;
+#X connect 7 0 2 0;
+#X connect 8 0 5 0;
+#X connect 9 0 2 0;
+#X connect 10 0 7 0;
+#X connect 13 0 6 0;
+#X connect 14 0 12 0;
+#X connect 15 0 10 0;
+#X connect 15 0 9 0;
+#X connect 16 0 3 0;
+#X connect 16 0 17 0;
 #X connect 17 0 10 0;
-#X connect 18 0 3 0;
-#X connect 18 0 19 0;
-#X connect 19 0 11 0;
diff --git a/pd/doc/3.audio.examples/D02.adsr.pd b/pd/doc/3.audio.examples/D02.adsr.pd
index c2a6a9409..f272239d4 100644
--- a/pd/doc/3.audio.examples/D02.adsr.pd
+++ b/pd/doc/3.audio.examples/D02.adsr.pd
@@ -1,42 +1,65 @@
-#N canvas 40 23 609 630 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 433 88 448 588 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array adsr-output 44100 float 0;
 #X coords 0 1.02 44100 -1.02 200 130 1;
-#X restore 121 332 graph;
-#X text 121 464 ------ 1 second ------;
-#X obj 18 92 r trigger;
-#X obj 34 168 tabwrite~ adsr-output;
-#X obj 56 143 r graphit;
-#X msg 261 89 bang;
-#X text 305 90 <-- attack and delayed release;
-#X obj 272 113 del 500;
-#X text 376 196 <-- attack only;
-#X msg 261 177 \; pd dsp 1 \; trigger 1 \; graphit bang;
-#X text 377 273 <-- release only;
-#X msg 260 247 \; pd dsp 1 \; trigger 0 \; graphit bang;
-#X msg 272 138 \; trigger 0;
-#X text 324 452 -1;
-#X text 326 327 1;
-#X text 12 27 This patch introduces a simple "adsr" abstraction we'll
+#X restore 21 332 graph;
+#X text 50 464 ------ 1 second ------;
+#X obj 23 84 r trigger;
+#X obj 39 160 tabwrite~ adsr-output;
+#X obj 61 135 r graphit;
+#X msg 201 84 bang;
+#X text 245 85 <-- attack and delayed release;
+#X obj 212 108 del 500;
+#X text 296 191 <-- attack only;
+#X msg 201 172 \; pd dsp 1 \; trigger 1 \; graphit bang;
+#X text 296 261 <-- release only;
+#X msg 200 242 \; pd dsp 1 \; trigger 0 \; graphit bang;
+#X msg 212 133 \; trigger 0;
+#X text 224 452 -1;
+#X text 226 327 1;
+#X text 19 37 This patch introduces a simple "adsr" abstraction we'll
 use frequently. You can click on the "adsr" object to see what's inside.
 ;
-#X text 16 516 The active ingredient of the ADSR envelope generator
+#X text 18 489 The active ingredient of the ADSR envelope generator
 is a single line~ which gets passed messages to make the attack and
 release behavior. You can retrigger the ADSR envelope generator all
 you wish without having to wait for attacks or releases to finish;
-#X text 104 5 ENVELOPE GENERATOR ABSTRACTION;
-#X obj 18 118 adsr 1 100 200 50 300;
-#X text 356 601 updated for Pd version 0.37;
-#X obj 36 195 osc~ 440;
-#X obj 17 220 *~;
-#X obj 16 249 output~;
-#X connect 2 0 18 0;
+#X obj 23 110 adsr 1 100 200 50 300;
+#X obj 41 187 osc~ 440;
+#X obj 22 212 *~;
+#X obj 21 241 output~;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header envelope_generators_abstraction
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 566 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION envelope generators abstraction;
+#X restore 392 568 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 envelope generator absraction- Related Help Documents;
+#X restore 103 568 pd References;
+#X obj 6 568 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 2 0 17 0;
 #X connect 4 0 3 0;
 #X connect 5 0 9 0;
 #X connect 5 0 7 0;
 #X connect 7 0 12 0;
-#X connect 18 0 3 0;
-#X connect 18 0 21 0;
-#X connect 20 0 21 1;
-#X connect 21 0 22 0;
-#X connect 21 0 22 1;
+#X connect 17 0 3 0;
+#X connect 17 0 19 0;
+#X connect 18 0 19 1;
+#X connect 19 0 20 0;
+#X connect 19 0 20 1;
diff --git a/pd/doc/3.audio.examples/D03.envelope.dB.pd b/pd/doc/3.audio.examples/D03.envelope.dB.pd
index 70711f8a8..b4edaa2ae 100644
--- a/pd/doc/3.audio.examples/D03.envelope.dB.pd
+++ b/pd/doc/3.audio.examples/D03.envelope.dB.pd
@@ -1,29 +1,29 @@
-#N canvas 158 69 674 673 12;
-#X obj 32 80 r trigger;
-#X text 85 8 USING ADSR'S OUTPUT AS dB;
-#X obj 32 131 tabread4~ dbtorms;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 433 84 448 600 10;
+#X obj 22 83 r trigger;
+#X obj 22 134 tabread4~ dbtorms;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array dbtorms 123 float 1;
 #A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05
 2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05
 4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05
-8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828
-0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813
-0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946
-0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489
-0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813
-0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328
-0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526
-0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684
-0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202
-0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838
-0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946
-0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526
-2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341
-6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893;
+8.91251e-05 0.0001 0.000112202 0.000125893 0.000141254 0.000158489
+0.000177828 0.000199526 0.000223872 0.000251189 0.000281838 0.000316228
+0.000354813 0.000398107 0.000446684 0.000501187 0.000562341 0.000630957
+0.000707946 0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254
+0.00158489 0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228
+0.00354813 0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946
+0.00794328 0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489
+0.0177828 0.0199526 0.0223872 0.0251189 0.0281838 0.0316228 0.0354813
+0.0398107 0.0446684 0.0501187 0.0562341 0.0630957 0.0707946 0.0794328
+0.0891251 0.1 0.112202 0.125893 0.141254 0.158489 0.177828 0.199526
+0.223872 0.251189 0.281838 0.316228 0.354813 0.398107 0.446684 0.501187
+0.562341 0.630957 0.707946 0.794328 0.891251 1 1.12202 1.25893 1.41254
+1.58489 1.77828 1.99526 2.23872 2.51189 2.81838 3.16228 3.54813 3.98107
+4.46684 5.01187 5.62341 6.30957 7.07946 7.94328 8.91251 10 11.2202
+12.5893;
 #X coords 0 10 123 0 200 100 1;
-#X restore 387 83 graph;
-#N canvas 461 495 663 358 make-table 0;
+#X restore 207 109 graph;
+#N canvas 361 410 663 358 make-table 0;
 #X obj 97 195 moses 2;
 #X msg 81 44 bang;
 #X obj 81 73 t b b;
@@ -64,37 +64,61 @@
 #X connect 12 0 16 0;
 #X connect 14 0 13 0;
 #X connect 16 0 15 0;
-#X restore 266 351 pd make-table;
-#X text 257 327 here's the patch I used to make the table:;
-#X obj 53 157 osc~ 440;
-#X text 589 176 0;
-#X text 590 77 10;
-#X text 406 186 ------ 123 samples ------;
-#X text 117 306 <-- attack;
-#X text 116 362 <-- release;
-#X msg 31 347 \; pd dsp 1 \; trigger 0;
-#X obj 32 182 *~;
-#X msg 30 292 \; pd dsp 1 \; trigger 1;
-#X obj 32 106 adsr 100 100 200 70 300;
-#X text 28 409 The table is indexed from 1 to 120 so that 1 gives a
+#X restore 246 261 pd make-table;
+#X text 177 237 here's the patch I used to make the table:;
+#X obj 38 160 osc~ 440;
+#X text 409 202 0;
+#X text 410 103 10;
+#X text 226 212 ------ 123 samples ------;
+#X text 98 296 <-- attack;
+#X text 98 352 <-- release;
+#X msg 21 337 \; pd dsp 1 \; trigger 0;
+#X obj 22 185 *~;
+#X msg 21 282 \; pd dsp 1 \; trigger 1;
+#X obj 22 109 adsr 100 100 200 70 300;
+#X text 18 399 The table is indexed from 1 to 120 so that 1 gives a
 true zero out and 120 gives 10 (a 20 dB boost.) The extra 20 dB are
 for headroom.;
-#X text 25 459 (There's also a "real" dbtorms~ object... but it's almost
-certainly much more compute-intensive than tabread4~ \, since it has
-to call a library "exp" function.);
-#X text 26 518 Notice how the attack sounds different when you retrigger
+#X text 19 489 Notice how the attack sounds different when you retrigger
 than when you start from zero. This is because if you go from the steady
 state you only rise 30 dB instead of 100 \, so it sounds slower...
 a slur effect. If you don't want this \, you might try increasing the
 amplitude of retriggered notes in comparison to isolated ones.;
-#X text 34 28 For more natural sounding amplitude control \, you can
+#X text 19 36 For more natural sounding amplitude control \, you can
 use the ADSR's output as log amplitude. In practice this is best done
 using a lookup table:;
-#X obj 31 211 output~;
-#X text 406 631 updated for Pd version 0.37;
-#X connect 0 0 15 0;
-#X connect 2 0 13 0;
-#X connect 6 0 13 1;
-#X connect 13 0 20 0;
-#X connect 13 0 20 1;
-#X connect 15 0 2 0;
+#X obj 21 214 output~;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header using_ADSR's_output_as_dB
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 577 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION using ADSR's output as dB;
+#X restore 392 579 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 ADSR as dB- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 579 pd References;
+#X obj 6 579 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 444 (There's also a "real" [dbtorms~] object... but it's
+almost certainly much more compute-intensive than tabread4~ \, since
+it has to call a library "exp" function.);
+#X connect 0 0 14 0;
+#X connect 1 0 12 0;
+#X connect 5 0 12 1;
+#X connect 12 0 18 0;
+#X connect 12 0 18 1;
+#X connect 14 0 1 0;
diff --git a/pd/doc/3.audio.examples/D04.envelope.quartic.pd b/pd/doc/3.audio.examples/D04.envelope.quartic.pd
index 5b440ebee..ca654625b 100644
--- a/pd/doc/3.audio.examples/D04.envelope.quartic.pd
+++ b/pd/doc/3.audio.examples/D04.envelope.quartic.pd
@@ -1,61 +1,84 @@
-#N canvas 130 66 646 584 12;
-#X obj 21 345 osc~;
-#X obj 21 370 *~;
-#X obj 81 350 line~;
-#X obj 21 320 line~;
-#X obj 163 455 osc~;
-#X obj 212 483 *~;
-#X obj 234 366 line~;
-#X obj 163 366 line~;
-#X obj 163 313 sqrt;
-#X obj 163 339 sqrt;
-#X obj 234 313 sqrt;
-#X obj 234 339 sqrt;
-#X obj 163 398 *~;
-#X obj 163 428 *~;
-#X obj 234 398 *~;
-#X obj 234 427 *~;
-#X obj 163 288 unpack;
-#X obj 234 288 unpack;
-#X obj 21 295 r freq;
-#X obj 81 326 r amp;
-#X obj 163 263 r freq;
-#X obj 234 263 r amp;
-#X msg 340 277 \; amp 0 5000 \;;
-#X msg 340 232 \; amp 1 5000 \;;
-#X msg 492 278 \; amp 0 1000 \;;
-#X msg 494 232 \; amp 1 1000 \;;
-#X msg 337 357 \; freq 1760 5000 \;;
-#X msg 338 404 \; freq 55 5000 \;;
-#X msg 493 357 \; freq 1760 1000 \;;
-#X msg 496 405 \; freq 55 1000 \;;
-#X text 90 15 QUARTIC AND LINEAR ENVELOPES COMPARED;
-#X obj 341 464 loadbang;
-#X msg 341 492 \; amp 1 \; freq 1760;
-#X text 22 265 LINEAR;
-#X text 168 236 QUARTIC;
-#X obj 21 397 output~;
-#X obj 212 509 output~;
-#X text 14 123 In the quartic example \, for both the amplitude and
-the frequency \, we have to take the fourth root of the target value
-(which we get by taking square root twice.) Then we raise the line~
-output to the fourth power by squaring twice (the *~ objects \, whose
-left and right inlets are the same.) The cost is mostly that of the
-four additional *~ objects.;
-#X text 350 553 updated for Pd version 0.37;
-#X text 19 39 This patch has two sine wave oscillators \, one with
+#N canvas 433 97 448 559 10;
+#X obj 21 268 osc~;
+#X obj 21 293 *~;
+#X obj 68 267 line~;
+#X obj 21 243 line~;
+#X obj 118 410 osc~;
+#X obj 118 447 *~;
+#X obj 181 321 line~;
+#X obj 118 321 line~;
+#X obj 118 268 sqrt;
+#X obj 118 294 sqrt;
+#X obj 181 268 sqrt;
+#X obj 181 294 sqrt;
+#X obj 118 353 *~;
+#X obj 118 383 *~;
+#X obj 181 353 *~;
+#X obj 181 382 *~;
+#X obj 118 243 unpack;
+#X obj 181 243 unpack;
+#X obj 21 218 r freq;
+#X obj 68 243 r amp;
+#X obj 118 218 r freq;
+#X obj 181 218 r amp;
+#X msg 232 293 \; amp 0 5000 \;;
+#X msg 232 248 \; amp 1 5000 \;;
+#X msg 340 294 \; amp 0 1000 \;;
+#X msg 340 248 \; amp 1 1000 \;;
+#X msg 232 353 \; freq 1760 5000 \;;
+#X msg 233 401 \; freq 55 5000 \;;
+#X msg 340 353 \; freq 1760 1000 \;;
+#X msg 340 401 \; freq 55 1000 \;;
+#X obj 246 451 loadbang;
+#X msg 246 474 \; amp 1 \; freq 1760;
+#X text 22 195 LINEAR;
+#X text 143 193 QUARTIC;
+#X obj 21 320 output~;
+#X obj 118 473 output~;
+#X text 19 37 This patch has two sine wave oscillators \, one with
 linear envelopes \, the other with quartic ones which sound more uniform.
 The message boxes sweep the amplitude and frequency up and down. You
 can compare the two to see that quartic-shaped changes sound more uniform
 than linear ones.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header quartic_and_linear_envelopes_compared
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 537 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION quartic and linear envelopes compared;
+#X restore 392 539 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 quartic envelopes- Related Help Documents;
+#X restore 103 539 pd References;
+#X text 18 101 In the quartic example \, for both the amplitude and
+the frequency \, we have to take the fourth root of the target value
+(which we get by taking square root twice.) Then we raise the [line~]
+output to the fourth power by squaring twice (the [*~] objects \, whose
+left and right inlets are the same.) The cost is mostly that of the
+four additional [*~] objects.;
+#X obj 6 539 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 1 0;
-#X connect 1 0 35 0;
-#X connect 1 0 35 1;
+#X connect 1 0 34 0;
+#X connect 1 0 34 1;
 #X connect 2 0 1 1;
 #X connect 3 0 0 0;
 #X connect 4 0 5 0;
-#X connect 5 0 36 0;
-#X connect 5 0 36 1;
+#X connect 5 0 35 0;
+#X connect 5 0 35 1;
 #X connect 6 0 14 0;
 #X connect 6 0 14 1;
 #X connect 7 0 12 0;
@@ -78,4 +101,4 @@ than linear ones.;
 #X connect 19 0 2 0;
 #X connect 20 0 16 0;
 #X connect 21 0 17 0;
-#X connect 31 0 32 0;
+#X connect 30 0 31 0;
diff --git a/pd/doc/3.audio.examples/D05.envelope.pitch.pd b/pd/doc/3.audio.examples/D05.envelope.pitch.pd
index b91477aab..3b079de81 100644
--- a/pd/doc/3.audio.examples/D05.envelope.pitch.pd
+++ b/pd/doc/3.audio.examples/D05.envelope.pitch.pd
@@ -1,10 +1,8 @@
-#N canvas 222 84 686 544 12;
-#X obj 48 106 r trigger;
-#X obj 48 154 tabread4~ dbtorms;
-#X text 144 313 <-- attack;
-#X text 568 305 <-- release;
-#X obj 48 208 *~;
-#N canvas 151 343 812 522 make-table 0;
+#N canvas 433 112 448 515 10;
+#X obj 22 108 r trigger;
+#X obj 22 156 tabread4~ dbtorms;
+#X obj 22 230 *~;
+#N canvas 151 246 812 522 make-table 0;
 #X msg 82 49 bang;
 #X obj 82 78 t b b;
 #X obj 141 142 f;
@@ -14,31 +12,32 @@
 #X obj 141 176 t f f;
 #X floatatom 369 67 0 0 0 0 - - -;
 #X floatatom 369 127 0 0 0 0 - - -;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array dbtorms 123 float 1;
 #A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05
 2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05
 4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05
-8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828
-0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813
-0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946
-0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489
-0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813
-0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328
-0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526
-0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684
-0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202
-0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838
-0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946
-0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526
-2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341
-6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893;
+8.91251e-05 0.0001 0.000112202 0.000125893 0.000141254 0.000158489
+0.000177828 0.000199526 0.000223872 0.000251189 0.000281838 0.000316228
+0.000354813 0.000398107 0.000446684 0.000501187 0.000562341 0.000630957
+0.000707946 0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254
+0.00158489 0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228
+0.00354813 0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946
+0.00794328 0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489
+0.0177828 0.0199526 0.0223872 0.0251189 0.0281838 0.0316228 0.0354813
+0.0398107 0.0446684 0.0501187 0.0562341 0.0630957 0.0707946 0.0794328
+0.0891251 0.1 0.112202 0.125893 0.141254 0.158489 0.177828 0.199526
+0.223872 0.251189 0.281838 0.316228 0.354813 0.398107 0.446684 0.501187
+0.562341 0.630957 0.707946 0.794328 0.891251 1 1.12202 1.25893 1.41254
+1.58489 1.77828 1.99526 2.23872 2.51189 2.81838 3.16228 3.54813 3.98107
+4.46684 5.01187 5.62341 6.30957 7.07946 7.94328 8.91251 10 11.2202
+12.5893;
 #X coords 0 10 123 0 200 100 1;
 #X restore 538 298 graph;
 #X text 740 391 0;
 #X text 742 291 10;
 #X text 544 403 ------ 123 samples ------;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array mtof 130 float 1;
 #A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499
 12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017
@@ -114,40 +113,65 @@
 #X connect 32 0 34 0;
 #X connect 33 0 23 0;
 #X connect 33 1 34 1;
-#X restore 451 222 pd make-table;
-#X text 35 6 PITCH ENVELOPES;
-#X text 125 24 For pitch envelopes \, unlike amplitude envelopes \,
+#X restore 251 254 pd make-table;
+#X text 19 37 For pitch envelopes \, unlike amplitude envelopes \,
 discontinuities are allowed and sometimes you would rather the envelope
 generator actually jump to zero when it's triggered. The "adsr" object
 does this for you if you send a negative trigger instead of a positive
 one:;
-#X obj 280 106 r trigger2;
-#X obj 280 178 tabread4~ mtof;
-#X obj 280 202 osc~;
-#X msg 46 299 \; pd dsp 1 \; trigger 1 \; trigger2 1;
-#X text 358 297 <-- attack;
-#X msg 249 293 \; pd dsp 1 \; trigger 1 \; trigger2 -1;
-#X msg 472 293 \; pd dsp 1 \; trigger 0 \; trigger2 0;
-#X obj 280 154 +~ 69;
-#X text 358 314 restarting;
-#X text 363 331 pitch env;
-#X text 37 377 We have added a new table \, mtof \, for converting
+#X obj 204 108 r trigger2;
+#X obj 204 180 tabread4~ mtof;
+#X obj 204 204 osc~;
+#X msg 12 313 \; pd dsp 1 \; trigger 1 \; trigger2 1;
+#X msg 146 312 \; pd dsp 1 \; trigger 1 \; trigger2 -1;
+#X msg 304 312 \; pd dsp 1 \; trigger 0 \; trigger2 0;
+#X obj 204 156 +~ 69;
+#X text 223 330 restarting;
+#X text 224 344 pitch env;
+#X text 19 383 We have added a new table \, mtof \, for converting
 audio signals from pitch to frequency. Its range is 1-127 \, so you
 want to add a base pitch in before you start reading from it.;
-#X text 37 443 This is an extreme use of pitch enveloping. In a real
+#X text 18 437 This is an extreme use of pitch enveloping. In a real
 situation you might want an envelope controlling vibrato depth or the
 like instead of straight pitch.;
-#X obj 48 130 adsr 100 50 200 90 1000;
-#X obj 280 130 adsr 20 200 100 100 1000;
-#X text 413 497 updated for Pd version 0.37;
-#X obj 48 233 output~;
-#X connect 0 0 20 0;
-#X connect 1 0 4 0;
-#X connect 4 0 23 0;
-#X connect 4 0 23 1;
-#X connect 8 0 21 0;
-#X connect 9 0 10 0;
-#X connect 10 0 4 1;
-#X connect 15 0 9 0;
-#X connect 20 0 1 0;
-#X connect 21 0 15 0;
+#X obj 22 132 adsr 100 50 200 90 1000;
+#X obj 204 132 adsr 20 200 100 100 1000;
+#X obj 22 255 output~;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header pitch_envelopes
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 492 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 25 KEYWORDS;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION pitch envelopes;
+#X restore 392 494 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 pitch envelopes- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 494 pd References;
+#X text 78 331 <- attack;
+#X text 223 316 <- attack;
+#X text 376 331 <- release;
+#X obj 6 494 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 16 0;
+#X connect 1 0 2 0;
+#X connect 2 0 18 0;
+#X connect 2 0 18 1;
+#X connect 5 0 17 0;
+#X connect 6 0 7 0;
+#X connect 7 0 2 1;
+#X connect 11 0 6 0;
+#X connect 16 0 1 0;
+#X connect 17 0 11 0;
diff --git a/pd/doc/3.audio.examples/D06.envelope.portamento.pd b/pd/doc/3.audio.examples/D06.envelope.portamento.pd
index 6542e8b5b..284b97a5a 100644
--- a/pd/doc/3.audio.examples/D06.envelope.portamento.pd
+++ b/pd/doc/3.audio.examples/D06.envelope.portamento.pd
@@ -1,5 +1,5 @@
-#N canvas 222 84 642 346 12;
-#X floatatom 75 227 0 0 0;
+#N canvas 433 181 448 307 10;
+#X floatatom 48 209 0 0 0 0 - - -;
 #N canvas 159 26 495 266 output 0;
 #X obj 338 160 t b;
 #X obj 338 110 f;
@@ -51,37 +51,38 @@
 #X connect 22 0 23 0;
 #X connect 22 0 23 1;
 #X connect 24 0 21 0;
-#X restore 46 255 pd output;
-#X msg 123 227 MUTE;
-#X text 166 225 <-- output amplitude;
-#X obj 46 173 tabread4~ mtof;
-#X obj 46 197 osc~;
+#X restore 23 234 pd output;
+#X msg 74 209 MUTE;
+#X text 110 209 <-- output amplitude;
+#X obj 23 155 tabread4~ mtof;
+#X obj 23 179 osc~;
 #N canvas 247 30 505 439 tables 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array dbtorms 123 float 1;
 #A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05
 2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05
 4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05
-8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828
-0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813
-0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946
-0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489
-0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813
-0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328
-0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526
-0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684
-0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202
-0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838
-0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946
-0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526
-2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341
-6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893;
+8.91251e-05 0.0001 0.000112202 0.000125893 0.000141254 0.000158489
+0.000177828 0.000199526 0.000223872 0.000251189 0.000281838 0.000316228
+0.000354813 0.000398107 0.000446684 0.000501187 0.000562341 0.000630957
+0.000707946 0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254
+0.00158489 0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228
+0.00354813 0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946
+0.00794328 0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489
+0.0177828 0.0199526 0.0223872 0.0251189 0.0281838 0.0316228 0.0354813
+0.0398107 0.0446684 0.0501187 0.0562341 0.0630957 0.0707946 0.0794328
+0.0891251 0.1 0.112202 0.125893 0.141254 0.158489 0.177828 0.199526
+0.223872 0.251189 0.281838 0.316228 0.354813 0.398107 0.446684 0.501187
+0.562341 0.630957 0.707946 0.794328 0.891251 1 1.12202 1.25893 1.41254
+1.58489 1.77828 1.99526 2.23872 2.51189 2.81838 3.16228 3.54813 3.98107
+4.46684 5.01187 5.62341 6.30957 7.07946 7.94328 8.91251 10 11.2202
+12.5893;
 #X coords 0 10 123 0 200 100 1;
 #X restore 129 49 graph;
 #X text 331 142 0;
 #X text 333 42 10;
 #X text 127 157 ------ 123 samples ------;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array mtof 130 float 1;
 #A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499
 12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017
@@ -103,46 +104,69 @@
 #X text 128 336 ------ 130 samples ------;
 #X text 340 318 0;
 #X text 342 218 12000;
-#X restore 490 225 pd tables;
-#X text 35 6 PORTAMENTO;
-#X obj 46 149 line~;
-#X obj 46 101 r pitch;
-#X msg 316 101 36;
-#X msg 345 101 48;
-#X msg 372 101 60;
-#X msg 429 101 72;
-#X msg 401 101 67;
-#X msg 483 101 76;
-#X msg 457 101 74;
-#X obj 451 165 s pitch;
-#X msg 514 101 84;
-#X msg 544 101 96;
-#X floatatom 143 125 0 0 0;
-#X text 173 126 <-- change speed;
-#X floatatom 451 139 0 0 0;
-#X obj 46 125 pack 0 100;
-#X obj 388 192 loadbang;
-#X msg 387 214 \; pitch 72;
-#X text 40 37 Portamento can be done using just line~ \, but you still
-might want to sweep in pitch \, not frequency:;
-#X text 363 293 updated for Pd version 0.35;
+#X restore 370 245 pd tables;
+#X obj 23 131 line~;
+#X obj 23 83 r pitch;
+#X msg 176 111 36;
+#X msg 205 111 48;
+#X msg 232 111 60;
+#X msg 289 111 72;
+#X msg 261 111 67;
+#X msg 343 111 76;
+#X msg 317 111 74;
+#X obj 311 175 s pitch;
+#X msg 374 111 84;
+#X msg 404 111 96;
+#X floatatom 80 77 0 0 0 0 - - -;
+#X text 110 78 <-- change speed;
+#X floatatom 311 149 0 0 0 0 - - -;
+#X obj 23 107 pack 0 100;
+#X obj 267 212 loadbang;
+#X msg 267 234 \; pitch 72;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header portamento 20 10
+1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 20 37 Portamento can be done using just [line~] \, but you
+still might want to sweep in pitch \, not frequency:;
+#X obj 1 284 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.35. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION portamento;
+#X restore 392 286 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 portamento- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 286 pd References;
+#X obj 6 286 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 1 1;
 #X connect 1 0 0 0;
 #X connect 2 0 1 2;
 #X connect 4 0 5 0;
 #X connect 5 0 1 0;
-#X connect 8 0 4 0;
-#X connect 9 0 23 0;
-#X connect 10 0 22 0;
-#X connect 11 0 22 0;
-#X connect 12 0 22 0;
-#X connect 13 0 22 0;
-#X connect 14 0 22 0;
-#X connect 15 0 22 0;
-#X connect 16 0 22 0;
-#X connect 18 0 22 0;
-#X connect 19 0 22 0;
-#X connect 20 0 23 1;
-#X connect 22 0 17 0;
-#X connect 23 0 8 0;
-#X connect 24 0 25 0;
+#X connect 7 0 4 0;
+#X connect 8 0 22 0;
+#X connect 9 0 21 0;
+#X connect 10 0 21 0;
+#X connect 11 0 21 0;
+#X connect 12 0 21 0;
+#X connect 13 0 21 0;
+#X connect 14 0 21 0;
+#X connect 15 0 21 0;
+#X connect 17 0 21 0;
+#X connect 18 0 21 0;
+#X connect 19 0 22 1;
+#X connect 21 0 16 0;
+#X connect 22 0 7 0;
+#X connect 23 0 24 0;
diff --git a/pd/doc/3.audio.examples/D07.additive.pd b/pd/doc/3.audio.examples/D07.additive.pd
index c35a47fec..2bfe511fd 100644
--- a/pd/doc/3.audio.examples/D07.additive.pd
+++ b/pd/doc/3.audio.examples/D07.additive.pd
@@ -1,50 +1,73 @@
-#N canvas 9 13 684 547 12;
-#X obj 37 449 catch~ sum;
-#X obj 349 274 s frequency;
-#X obj 463 274 s duration;
-#X floatatom 463 224 0 0 0 0 - - -;
-#X obj 463 249 * 100;
-#X obj 349 249 mtof;
-#X floatatom 349 224 0 0 0 0 - - -;
-#X text 82 7 ADDITIVE SYNTHESIS;
-#X text 501 214 duration in tenths;
-#X text 503 230 of a second;
-#X text 387 223 pitch;
-#X text 433 518 updated for Pd version 0.37;
-#X obj 37 488 output~;
-#X text 26 83 Partial takes as arguments an amplitude \, a relative
+#N canvas 433 103 448 542 10;
+#X obj 23 424 catch~ sum;
+#X obj 209 254 s frequency;
+#X obj 293 254 s duration;
+#X floatatom 293 204 0 0 0 0 - - -;
+#X obj 293 229 * 100;
+#X obj 209 229 mtof;
+#X floatatom 209 204 0 0 0 0 - - -;
+#X text 331 194 duration in tenths;
+#X text 333 210 of a second;
+#X text 237 203 pitch;
+#X obj 23 453 output~;
+#X text 19 80 Partial takes as arguments an amplitude \, a relative
 frequency \, a detuning frequency \, and a relative duration. You set
 absolute duration and pitch using the controls below. Hit the trigger
 to make sound.;
-#X obj 36 164 partial 1 1 0.56 0;
-#X text 27 31 This patch demonstrates using an abstraction \, "partial"
+#X obj 22 142 partial 1 1 0.56 0;
+#X text 19 38 This patch demonstrates using an abstraction \, "partial"
 \, to make a simple additive synthesis instrument originally from Jean-Claude
 Risset.;
-#X obj 349 169 loadbang;
-#X msg 349 192 72;
-#X msg 463 194 40;
-#X obj 352 322 bng 25 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 209 149 loadbang;
+#X msg 209 172 72;
+#X msg 293 174 40;
+#X obj 232 322 bng 25 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 385 324 <-- click to play a note;
-#X obj 352 358 s trigger;
-#X obj 36 189 partial 0.67 0.9 0.56 1;
-#X obj 36 214 partial 1 0.65 0.92 0;
-#X obj 36 239 partial 1.8 0.55 0.92 1.7;
-#X obj 36 264 partial 2.67 0.325 1.19 0;
-#X obj 36 289 partial 1.67 0.35 1.7 0;
-#X obj 36 314 partial 1.46 0.25 2 0;
-#X obj 36 339 partial 1.33 0.2 2.74 0;
-#X obj 36 364 partial 1.33 0.15 3 0;
-#X obj 36 389 partial 1 0.1 3.76 0;
-#X obj 36 414 partial 1.33 0.075 4.07 0;
-#X connect 0 0 12 0;
-#X connect 0 0 12 1;
+#X text 265 324 <-- click to play a note;
+#X obj 232 358 s trigger;
+#X obj 22 167 partial 0.67 0.9 0.56 1;
+#X obj 22 192 partial 1 0.65 0.92 0;
+#X obj 22 217 partial 1.8 0.55 0.92 1.7;
+#X obj 22 242 partial 2.67 0.325 1.19 0;
+#X obj 22 267 partial 1.67 0.35 1.7 0;
+#X obj 22 292 partial 1.46 0.25 2 0;
+#X obj 22 317 partial 1.33 0.2 2.74 0;
+#X obj 22 342 partial 1.33 0.15 3 0;
+#X obj 22 367 partial 1 0.1 3.76 0;
+#X obj 22 392 partial 1.33 0.075 4.07 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header additive_synthesis
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 519 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION additive synthesis;
+#X restore 392 521 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 additive synthesis- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 521 pd References;
+#X obj 6 521 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 10 0;
+#X connect 0 0 10 1;
 #X connect 3 0 4 0;
 #X connect 4 0 2 0;
 #X connect 5 0 1 0;
 #X connect 6 0 5 0;
-#X connect 16 0 17 0;
-#X connect 16 0 18 0;
-#X connect 17 0 6 0;
-#X connect 18 0 3 0;
-#X connect 19 0 21 0;
+#X connect 14 0 15 0;
+#X connect 14 0 16 0;
+#X connect 15 0 6 0;
+#X connect 16 0 3 0;
+#X connect 17 0 19 0;
diff --git a/pd/doc/3.audio.examples/D08.table.spectrum.pd b/pd/doc/3.audio.examples/D08.table.spectrum.pd
index d9257e6ca..2c29321fc 100644
--- a/pd/doc/3.audio.examples/D08.table.spectrum.pd
+++ b/pd/doc/3.audio.examples/D08.table.spectrum.pd
@@ -1,5 +1,5 @@
-#N canvas 251 127 807 425 12;
-#N canvas 0 0 450 300 graph3 0;
+#N canvas 375 139 624 433 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array spectrum-tab 127 float 1;
 #A 0 48.5713 48.5713 48.5713 48.2142 48.2142 48.2142 48.2142 48.2142
 48.2142 48.2142 48.2142 48.2142 48.2142 48.5713 48.5713 48.9284 48.9284
@@ -17,7 +17,7 @@
 0.714596 0.714596 0.714596 0.714596 0.714596 1.07174 1.07174 1.07174
 1.07174 0.714286 0.357143;
 #X coords 0 50 126 0 300 140 1;
-#X restore 496 136 graph;
+#X restore 284 92 graph;
 #N canvas 98 16 694 474 oscbank 0;
 #X obj 36 53 spectrum-partial 1;
 #X obj 36 79 spectrum-partial 2;
@@ -57,35 +57,58 @@ abstraction.;
 #X obj 395 287 spectrum-partial 30;
 #X connect 11 0 12 0;
 #X connect 12 0 13 0;
-#X restore 17 251 pd oscbank;
-#X obj 19 321 catch~ sum-bus;
-#X obj 16 153 s pitch;
-#X floatatom 16 125 4 0 0 0 - - -;
-#X text 43 18 DRAWABLE SPECTRA;
-#X floatatom 14 183 4 0 0 0 - - -;
-#X obj 14 211 s whammybar;
+#X restore 22 251 pd oscbank;
+#X obj 22 316 catch~ sum-bus;
+#X obj 22 153 s pitch;
+#X floatatom 22 125 4 0 0 0 - - -, f 4;
+#X floatatom 22 187 4 0 0 0 - - -, f 4;
+#X obj 22 215 s whammybar;
 #N canvas 0 0 650 341 table-setup 0;
 #X obj 39 227 loadbang;
 #X msg 39 261 \; spectrum-tab xlabel -5 0 12 24 36 48 60 72 84 96 108
 120;
 #X text 82 60 comment;
 #X connect 0 0 1 0;
-#X restore 17 283 pd table-setup;
-#X msg 596 65 \; spectrum-tab const 0;
-#X text 26 42 In this array \, you can draw a spectral envelope that
+#X restore 22 283 pd table-setup;
+#X msg 374 279 \; spectrum-tab const 0;
+#X text 19 36 In this array \, you can draw a spectral envelope that
 will be synthesized by an oscillator bank. Each oscillator in the bank
 computes its own frequency and uses it to look up amplitude from the
 array.;
-#X text 113 254 <-- the oscillator bank;
-#X text 71 128 <-- pitch;
-#X text 61 185 <-- left or right shift (normally 0);
-#X text 157 318 <-- here we just collect the sum of all the partials
+#X text 98 251 <-- the oscillator bank;
+#X text 55 125 <-- pitch;
+#X text 59 188 <-- left or right shift (normally 0);
+#X text 120 316 <-- here we just collect the sum of all the partials
 which are computed in "oscbank".;
-#X text 662 44 CLEAR;
-#X text 148 283 <-- make the number labels;
-#X obj 19 358 output~;
-#X text 556 389 Updated for Pd version 0.37;
-#X connect 2 0 17 0;
-#X connect 2 0 17 1;
+#X text 418 258 CLEAR;
+#X text 123 283 <-- make the number labels;
+#X obj 22 346 output~;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header drawable_spectra
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 411 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal array;
+#X text 12 65 DESCRIPTION drawable spectra;
+#X restore 392 413 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 drawable spectra- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 413 pd References;
+#X obj 6 413 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 2 0 16 0;
+#X connect 2 0 16 1;
 #X connect 4 0 3 0;
-#X connect 6 0 7 0;
+#X connect 5 0 6 0;
diff --git a/pd/doc/3.audio.examples/D09.shepard.tone.pd b/pd/doc/3.audio.examples/D09.shepard.tone.pd
index 8cb666032..43b419f25 100644
--- a/pd/doc/3.audio.examples/D09.shepard.tone.pd
+++ b/pd/doc/3.audio.examples/D09.shepard.tone.pd
@@ -1,57 +1,55 @@
-#N canvas 124 20 599 828 12;
-#X floatatom 169 520 0 0 0 0 - - -;
-#X floatatom 169 446 0 0 0 0 - - -;
-#X text 462 208 START;
-#X floatatom 190 303 0 0 0 0 - - -;
-#X obj 190 280 r incr;
-#X obj 168 255 metro 50;
-#X floatatom 168 373 5 0 0 0 - - -;
-#X obj 168 394 s phase;
-#X obj 168 350 +;
-#X obj 169 469 s dropoff+;
-#X obj 169 622 s interval+;
-#X floatatom 169 599 0 0 0 0 - - -;
-#X obj 169 543 s pitch+;
-#X obj 169 423 r dropoff;
-#X obj 169 497 r pitch;
-#X obj 169 576 r interval;
-#X obj 168 212 r metro;
-#X obj 228 345 f;
-#X obj 12 212 shepvoice 0;
-#X floatatom 83 708 0 0 0 0 - - -;
-#X obj 83 685 r rev;
-#X obj 138 685 r revtime;
-#X floatatom 138 708 0 0 0 0 - - -;
-#X obj 228 368 mod 10000;
-#X obj 168 327 f;
-#X obj 73 742 rev2~;
-#X obj 12 769 output~;
-#X obj 168 235 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#N canvas 433 93 448 573 10;
+#X floatatom 179 479 0 0 0 0 - - -;
+#X floatatom 179 405 0 0 0 0 - - -;
+#X text 352 178 START;
+#X floatatom 200 262 0 0 0 0 - - -;
+#X obj 200 239 r incr;
+#X obj 178 214 metro 50;
+#X floatatom 178 332 5 0 0 0 - - -, f 5;
+#X obj 178 353 s phase;
+#X obj 178 309 +;
+#X obj 179 428 s dropoff+;
+#X obj 179 581 s interval+;
+#X floatatom 179 558 0 0 0 0 - - -;
+#X obj 179 502 s pitch+;
+#X obj 179 382 r dropoff;
+#X obj 179 456 r pitch;
+#X obj 179 535 r interval;
+#X obj 178 171 r metro;
+#X obj 238 304 f;
+#X obj 22 171 shepvoice 0;
+#X floatatom 89 667 0 0 0 0 - - -;
+#X obj 89 644 r rev;
+#X obj 134 644 r revtime;
+#X floatatom 134 667 0 0 0 0 - - -;
+#X obj 238 327 mod 10000;
+#X obj 178 286 f;
+#X obj 83 701 rev2~;
+#X obj 22 728 output~;
+#X obj 178 194 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X msg 446 225 \; dropoff 10 \; pitch 60 \; interval 120 \; metro 1
+#X msg 336 195 \; dropoff 10 \; pitch 60 \; interval 120 \; metro 1
 \; rev 84 \; revtime 87 \; incr -2 \; pd dsp 1;
-#X text 27 7 SHEPARD TONE;
-#X text 339 804 updated for Pd version 0.37;
-#X obj 12 235 shepvoice 500;
-#X obj 12 258 shepvoice 1000;
-#X obj 12 281 shepvoice 1500;
-#X obj 12 304 shepvoice 2000;
-#X obj 12 327 shepvoice 2500;
-#X obj 12 350 shepvoice 3000;
-#X obj 12 373 shepvoice 3500;
-#X obj 12 396 shepvoice 4000;
-#X obj 12 419 shepvoice 4500;
-#X obj 12 442 shepvoice 5000;
-#X obj 12 465 shepvoice 5500;
-#X obj 12 488 shepvoice 6000;
-#X obj 12 511 shepvoice 6500;
-#X obj 12 534 shepvoice 7000;
-#X obj 12 557 shepvoice 7500;
-#X obj 12 580 shepvoice 8000;
-#X obj 12 603 shepvoice 8500;
-#X obj 12 626 shepvoice 9000;
-#X obj 12 649 shepvoice 9500;
-#X text 25 31 This patch is a bank of 20 sinusoids \, arranged so that
+#X obj 22 194 shepvoice 500;
+#X obj 22 217 shepvoice 1000;
+#X obj 22 240 shepvoice 1500;
+#X obj 22 263 shepvoice 2000;
+#X obj 22 286 shepvoice 2500;
+#X obj 22 309 shepvoice 3000;
+#X obj 22 332 shepvoice 3500;
+#X obj 22 355 shepvoice 4000;
+#X obj 22 378 shepvoice 4500;
+#X obj 22 401 shepvoice 5000;
+#X obj 22 424 shepvoice 5500;
+#X obj 22 447 shepvoice 6000;
+#X obj 22 470 shepvoice 6500;
+#X obj 22 493 shepvoice 7000;
+#X obj 22 516 shepvoice 7500;
+#X obj 22 539 shepvoice 8000;
+#X obj 22 562 shepvoice 8500;
+#X obj 22 585 shepvoice 9000;
+#X obj 22 608 shepvoice 9500;
+#X text 19 36 This patch is a bank of 20 sinusoids \, arranged so that
 their frequencies sweep upward or downward in parallel \, and their
 amplitudes fade in and out so that each one is quiet when it wraps
 around from one end to the other. The overall "phase" computed here
@@ -61,6 +59,31 @@ the slope at which the amplitudes fall off at the ends \, "pitch" the
 center pitch of the cluster \, "interval" the number of (tenths of
 halftones) between successive voices \, and "rev" and "revtime" the
 reverberator at bottom.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header shepard_tone 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 793 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION shepard tone;
+#X restore 392 795 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 shepard tone- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 795 pd References;
+#X obj 6 795 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 12 0;
 #X connect 1 0 9 0;
 #X connect 3 0 24 1;
@@ -75,7 +98,7 @@ reverberator at bottom.;
 #X connect 15 0 11 0;
 #X connect 16 0 27 0;
 #X connect 17 0 23 0;
-#X connect 18 0 31 0;
+#X connect 18 0 29 0;
 #X connect 19 0 25 1;
 #X connect 20 0 19 0;
 #X connect 21 0 22 0;
@@ -85,6 +108,8 @@ reverberator at bottom.;
 #X connect 25 0 26 0;
 #X connect 25 1 26 1;
 #X connect 27 0 5 0;
+#X connect 29 0 30 0;
+#X connect 30 0 31 0;
 #X connect 31 0 32 0;
 #X connect 32 0 33 0;
 #X connect 33 0 34 0;
@@ -101,8 +126,6 @@ reverberator at bottom.;
 #X connect 44 0 45 0;
 #X connect 45 0 46 0;
 #X connect 46 0 47 0;
-#X connect 47 0 48 0;
-#X connect 48 0 49 0;
-#X connect 49 0 25 0;
-#X connect 49 0 26 0;
-#X connect 49 0 26 1;
+#X connect 47 0 25 0;
+#X connect 47 0 26 0;
+#X connect 47 0 26 1;
diff --git a/pd/doc/3.audio.examples/D10.sampler.notes.pd b/pd/doc/3.audio.examples/D10.sampler.notes.pd
index 6bfd1402b..48c8d8f9f 100644
--- a/pd/doc/3.audio.examples/D10.sampler.notes.pd
+++ b/pd/doc/3.audio.examples/D10.sampler.notes.pd
@@ -1,19 +1,19 @@
-#N canvas 12 0 1074 786 12;
-#X msg 257 7 bang;
-#X obj 257 35 delay 5;
-#X text 497 269 end of note;
-#X obj 363 35 r note;
+#N canvas 303 74 840 630 10;
+#X msg 207 32 bang;
+#X obj 207 60 delay 5;
+#X text 447 294 end of note;
+#X obj 313 60 r note;
 #N canvas 459 46 678 451 samples 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array sample1 176403 float 0;
 #X coords 0 1.02 176403 -1.02 200 130 1;
 #X restore 262 41 graph;
 #X text 264 376 ------ 4 seconds ------;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array sample2 176403 float 0;
 #X coords 0 1.02 176403 -1.02 200 130 1;
 #X restore 262 226 graph;
-#X restore 33 277 pd samples;
+#X restore 18 292 pd samples;
 #N canvas 21 287 947 410 recorder 0;
 #X obj 318 43 inlet;
 #X obj 272 196 adc~ 1;
@@ -63,9 +63,9 @@ sample2;
 #X connect 18 3 15 0;
 #X connect 20 0 19 0;
 #X connect 21 0 22 0;
-#X restore 33 443 pd recorder;
-#X msg 33 305 record 1;
-#X msg 33 360 stop;
+#X restore 18 434 pd recorder;
+#X msg 18 320 record 1;
+#X msg 18 363 stop;
 #N canvas 359 226 666 626 playback 0;
 #X obj 20 45 line~;
 #X obj 39 237 line~;
@@ -123,82 +123,80 @@ just a straight line.;
 #X connect 18 0 19 0;
 #X connect 18 0 19 1;
 #X connect 19 0 17 1;
-#X restore 33 480 pd playback;
-#X msg 33 332 record 2;
-#X text 645 25 ARGUMENTS FOR NOTES:;
-#X text 666 53 pitch in halftones;
-#X text 666 77 amplitude (dB);
-#X text 666 125 sample number;
-#X text 666 101 duration (msec);
-#X text 666 149 start location (msec);
-#X text 666 173 rise time (msec);
-#X text 666 197 decay time (msec);
-#X obj 363 62 unpack 0 0 0 0 0 0 0;
-#X text 50 6 CHOCOLATE SAMPLER;
-#X obj 521 168 f;
-#X obj 456 142 f;
-#X obj 387 142 f;
-#X obj 350 142 f;
-#X obj 318 142 f;
-#X obj 224 142 f;
-#X obj 224 169 mtof;
-#X obj 224 197 / 261.62;
-#X obj 224 224 * 4.41e+08;
-#X obj 224 252 +;
-#X obj 489 142 delay;
-#X obj 318 312 pack 0 0 0 0 0;
-#X obj 257 62 t b b b;
-#X text 498 346 This starts the note \, sending to "receives" in the
+#X restore 18 461 pd playback;
+#X msg 18 341 record 2;
+#X text 565 45 ARGUMENTS FOR NOTES:;
+#X text 586 73 pitch in halftones;
+#X text 586 97 amplitude (dB);
+#X text 586 145 sample number;
+#X text 586 121 duration (msec);
+#X text 586 169 start location (msec);
+#X text 586 193 rise time (msec);
+#X text 586 217 decay time (msec);
+#X obj 313 87 unpack 0 0 0 0 0 0 0;
+#X obj 471 193 f;
+#X obj 406 167 f;
+#X obj 337 167 f;
+#X obj 300 167 f;
+#X obj 268 167 f;
+#X obj 174 167 f;
+#X obj 174 194 mtof;
+#X obj 174 222 / 261.62;
+#X obj 174 249 * 4.41e+08;
+#X obj 174 277 +;
+#X obj 439 167 delay;
+#X obj 268 337 pack 0 0 0 0 0;
+#X obj 207 87 t b b b;
+#X text 408 371 This starts the note \, sending to "receives" in the
 playback subptach. The new receive "envelope" is an amplitude control
 in parallel with the cutoff control. The "sample-number" switches the
 tabread4~ between tables.;
-#X msg 156 44 \; pd dsp 1 \; cutoff 0 5;
-#X obj 387 197 + 1;
-#X msg 556 467 60 100 10000 1 0 0 0;
-#X obj 556 737 s note;
-#X msg 521 196 \; envelope 0 \$1;
-#X msg 675 691 62;
-#X msg 710 691 64;
-#X msg 641 691 60;
-#X msg 612 691 55;
-#X msg 743 691 72;
-#X msg 580 691 48;
-#X msg 642 734 60.5;
-#X msg 556 494 60 90 10000 1 0 0 0;
-#X msg 556 522 60 100 10000 2 0 0 0;
-#X msg 556 550 60 100 10000 1 3000 0 0;
-#X obj 387 169 * 44.1;
-#X msg 556 605 60 100 100 1 0 0 0;
-#X msg 556 632 60 100 100 1 0 0 1000;
-#X msg 556 577 60 100 10000 1 0 1000 0;
-#X msg 318 340 \; envelope 0 \, \$1 \$2 \; phase \$3 \, \$4 1e+07 \;
+#X msg 106 69 \; pd dsp 1 \; cutoff 0 5;
+#X obj 337 222 + 1;
+#X msg 416 487 60 100 10000 1 0 0 0;
+#X obj 416 758 s note;
+#X msg 471 221 \; envelope 0 \$1;
+#X msg 535 698 62;
+#X msg 570 698 64;
+#X msg 501 698 60;
+#X msg 472 698 55;
+#X msg 603 698 72;
+#X msg 440 698 48;
+#X msg 502 741 60.5;
+#X msg 416 514 60 90 10000 1 0 0 0;
+#X msg 416 541 60 100 10000 2 0 0 0;
+#X msg 416 568 60 100 10000 1 3000 0 0;
+#X obj 337 194 * 44.1;
+#X msg 416 622 60 100 100 1 0 0 0;
+#X msg 416 649 60 100 100 1 0 0 1000;
+#X msg 416 595 60 100 10000 1 0 1000 0;
+#X msg 268 365 \; envelope 0 \, \$1 \$2 \; phase \$3 \, \$4 1e+07 \;
 sample-number \$5 \; cutoff 1 5 \;;
-#X text 117 305 <-- record;
-#X msg 33 388 reload;
-#X msg 33 415 browse;
-#X text 7 109 transposition works;
-#X text 7 133 by altering the phase;
-#X text 7 181 The mtof and / 261;
-#X text 7 205 calculate speed change;
-#X text 7 229 considering 60 as unity.;
-#X text 24 43 as before we;
-#X text 15 64 mute and wait;
-#X text 7 157 target ($4 below right.);
-#X text 450 303 combine amplitude \, rise time \, start phase \, end
+#X text 80 320 <-- record;
+#X msg 18 385 reload;
+#X msg 18 406 browse;
+#X text 15 184 transposition works;
+#X text 15 198 by altering the phase;
+#X text 15 240 calculate speed change;
+#X text 15 254 considering 60 as unity.;
+#X text 15 74 as before we;
+#X text 15 89 mute and wait;
+#X text 15 212 target (\$4 below right.);
+#X text 370 328 combine amplitude \, rise time \, start phase \, end
 phase \, and sample number in one message;
-#X text 764 467 straight playback;
-#X text 764 493 change amplitude;
-#X text 767 521 change sample number;
-#X text 769 550 change start location;
-#X text 768 576 change rise time;
-#X text 768 609 change duration;
-#X text 769 633 ... and decay time;
-#X text 692 736 microtones OK too.;
-#X text 580 667 If you omit values they stay unchanged;
-#X text 552 426 Here are buttons to demonstrate the effect of varying
+#X text 574 487 straight playback;
+#X text 574 513 change amplitude;
+#X text 574 540 change sample number;
+#X text 574 568 change start location;
+#X text 574 595 change rise time;
+#X text 574 622 change duration;
+#X text 573 649 ... and decay time;
+#X text 539 741 microtones OK too.;
+#X text 439 677 If you omit values they stay unchanged;
+#X text 412 449 Here are buttons to demonstrate the effect of varying
 the parameters one by one.;
-#X obj 34 511 output~;
-#X text 13 596 This patch take the same principle as the earlier "one-shot
+#X obj 19 492 output~;
+#X text 16 560 This patch take the same principle as the earlier "one-shot
 sampler" \, but allows you to parametrize sample playback. Since we
 must wait 5 msec before starting the playback \, we store all the parameters
 in "f" objects \, and recall them to construct the new note. Transposition
@@ -206,58 +204,83 @@ is done by altering the amount to play back in the (artificial) ten
 thousand seconds (1e+07). The playback segment can be altered to start
 in the middle of the sample instead of the beginning \, and you can
 change the duration and rise and decay times.;
-#X text 823 763 updated for Pd version 0.37;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header chocolate_sampler
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 15 226 The [mtof] and / 261;
+#X obj 1 796 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION chocolate sampler;
+#X restore 392 798 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 chocolate sampler- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 798 pd References;
+#X obj 6 798 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 1 0;
-#X connect 0 0 34 0;
-#X connect 1 0 32 0;
+#X connect 0 0 33 0;
+#X connect 1 0 31 0;
 #X connect 3 0 18 0;
 #X connect 6 0 5 0;
 #X connect 7 0 5 0;
-#X connect 8 0 76 0;
-#X connect 8 0 76 1;
+#X connect 8 0 74 0;
+#X connect 8 0 74 1;
 #X connect 9 0 5 0;
-#X connect 18 0 25 1;
+#X connect 18 0 24 1;
 #X connect 18 0 0 0;
-#X connect 18 1 24 1;
-#X connect 18 2 30 1;
-#X connect 18 3 23 1;
-#X connect 18 4 22 1;
-#X connect 18 5 21 1;
-#X connect 18 6 20 1;
-#X connect 20 0 38 0;
-#X connect 21 0 31 1;
-#X connect 22 0 49 0;
-#X connect 23 0 31 4;
-#X connect 24 0 31 0;
+#X connect 18 1 23 1;
+#X connect 18 2 29 1;
+#X connect 18 3 22 1;
+#X connect 18 4 21 1;
+#X connect 18 5 20 1;
+#X connect 18 6 19 1;
+#X connect 19 0 37 0;
+#X connect 20 0 30 1;
+#X connect 21 0 48 0;
+#X connect 22 0 30 4;
+#X connect 23 0 30 0;
+#X connect 24 0 25 0;
 #X connect 25 0 26 0;
 #X connect 26 0 27 0;
 #X connect 27 0 28 0;
-#X connect 28 0 29 0;
-#X connect 29 0 31 3;
-#X connect 30 0 20 0;
-#X connect 31 0 53 0;
-#X connect 32 0 24 0;
-#X connect 32 1 25 0;
-#X connect 32 2 21 0;
-#X connect 32 2 22 0;
-#X connect 32 2 23 0;
-#X connect 32 2 30 0;
-#X connect 35 0 31 2;
-#X connect 35 0 29 1;
-#X connect 36 0 37 0;
-#X connect 39 0 37 0;
-#X connect 40 0 37 0;
-#X connect 41 0 37 0;
-#X connect 42 0 37 0;
-#X connect 43 0 37 0;
-#X connect 44 0 37 0;
-#X connect 45 0 37 0;
-#X connect 46 0 37 0;
-#X connect 47 0 37 0;
-#X connect 48 0 37 0;
-#X connect 49 0 35 0;
-#X connect 50 0 37 0;
-#X connect 51 0 37 0;
-#X connect 52 0 37 0;
+#X connect 28 0 30 3;
+#X connect 29 0 19 0;
+#X connect 30 0 52 0;
+#X connect 31 0 23 0;
+#X connect 31 1 24 0;
+#X connect 31 2 20 0;
+#X connect 31 2 21 0;
+#X connect 31 2 22 0;
+#X connect 31 2 29 0;
+#X connect 34 0 30 2;
+#X connect 34 0 28 1;
+#X connect 35 0 36 0;
+#X connect 38 0 36 0;
+#X connect 39 0 36 0;
+#X connect 40 0 36 0;
+#X connect 41 0 36 0;
+#X connect 42 0 36 0;
+#X connect 43 0 36 0;
+#X connect 44 0 36 0;
+#X connect 45 0 36 0;
+#X connect 46 0 36 0;
+#X connect 47 0 36 0;
+#X connect 48 0 34 0;
+#X connect 49 0 36 0;
+#X connect 50 0 36 0;
+#X connect 51 0 36 0;
+#X connect 54 0 5 0;
 #X connect 55 0 5 0;
-#X connect 56 0 5 0;
diff --git a/pd/doc/3.audio.examples/D11.sampler.poly.pd b/pd/doc/3.audio.examples/D11.sampler.poly.pd
index a08639646..4133ed42a 100644
--- a/pd/doc/3.audio.examples/D11.sampler.poly.pd
+++ b/pd/doc/3.audio.examples/D11.sampler.poly.pd
@@ -1,15 +1,15 @@
-#N canvas 91 72 1119 674 12;
+#N canvas 279 81 910 609 10;
 #N canvas 0 0 600 392 samples 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array sample1 176403 float 0;
 #X coords 0 1.02 176403 -1.02 200 130 1;
 #X restore 262 41 graph;
 #X text 282 385 ------ 4 seconds ------;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array sample2 176403 float 0;
 #X coords 0 1.02 176403 -1.02 200 130 1;
 #X restore 262 226 graph;
-#X restore 931 97 pd samples;
+#X restore 741 100 pd samples;
 #N canvas 52 219 967 340 recorder 0;
 #X obj 220 21 inlet;
 #X obj 174 174 adc~ 1;
@@ -59,42 +59,40 @@ sample2;
 #X connect 19 0 18 0;
 #X connect 20 0 21 0;
 #X connect 22 0 9 0;
-#X restore 931 284 pd recorder;
-#X msg 931 146 record 1;
-#X msg 931 202 stop;
-#X msg 931 174 record 2;
-#X text 19 49 ARGUMENTS FOR NOTES:;
-#X text 19 71 pitch in halftones;
-#X text 19 95 amplitude (dB);
-#X text 19 143 sample number;
-#X text 19 119 duration (msec);
-#X text 19 167 start location (msec);
-#X text 19 191 rise time (msec);
-#X text 19 215 decay time (msec);
-#X msg 931 229 reload;
-#X msg 931 257 browse;
-#X text 47 10 POLYPHONIC SAMPLER;
-#X obj 547 329 sampvoice;
-#X obj 631 17 r note;
-#X obj 631 44 unpack 0 0 0 0 0 0 0;
-#X obj 604 76 t b f;
-#X obj 544 109 f;
-#X obj 580 109 + 1;
-#X obj 552 146 mod 1e+06;
-#X obj 544 175 makenote 64;
-#X obj 544 203 poly 8 1;
-#X obj 544 230 stripnote;
-#X obj 617 272 pack 0 0 0 0 0 0 0 0;
-#X obj 617 300 route 1 2 3 4 5 6 7 8;
-#X text 929 124 record \, etc.;
-#X text 335 203 allocate sampler voice;
-#X text 361 228 drop note off again;
-#X obj 704 516 qlist;
-#X obj 870 520 r comment;
-#X text 732 445 sailors to untie him...;
-#X text 735 395 Lashed to the mast of his boat \, Ulysses;
-#X text 735 420 hears beautiful singing. He begs his;
-#X text 7 263 Here we take the previous patch and make it polyphonic
+#X restore 741 287 pd recorder;
+#X msg 741 149 record 1;
+#X msg 741 205 stop;
+#X msg 741 177 record 2;
+#X text 19 38 ARGUMENTS FOR NOTES:;
+#X text 19 60 pitch in halftones;
+#X text 19 84 amplitude (dB);
+#X text 19 132 sample number;
+#X text 19 108 duration (msec);
+#X text 19 156 start location (msec);
+#X text 19 180 rise time (msec);
+#X text 19 204 decay time (msec);
+#X msg 741 232 reload;
+#X msg 741 260 browse;
+#X obj 497 316 sampvoice;
+#X obj 581 20 r note;
+#X obj 581 42 unpack 0 0 0 0 0 0 0;
+#X obj 554 69 t b f;
+#X obj 494 102 f;
+#X obj 530 102 + 1;
+#X obj 502 139 mod 1e+06;
+#X obj 494 168 makenote 64;
+#X obj 494 196 poly 8 1;
+#X obj 494 223 stripnote;
+#X obj 567 265 pack 0 0 0 0 0 0 0 0;
+#X obj 567 287 route 1 2 3 4 5 6 7 8;
+#X text 739 127 record \, etc.;
+#X text 350 196 allocate sampler voice;
+#X text 368 223 drop note off again;
+#X obj 614 543 qlist;
+#X text 612 490 sailors to untie him...;
+#X text 612 460 Lashed to the mast of his boat \, Ulysses;
+#X text 612 475 hears beautiful singing. He begs his;
+#X text 19 229 Here we take the previous patch and make it polyphonic
 \, with 8 voices. The single voice which we had before has been made
 into an abstraction \, "sampvoice.pd" \, which we instantiate in 8
 copies. Earlier we used sends and receives to pass messages to "cutoff"
@@ -102,74 +100,99 @@ copies. Earlier we used sends and receives to pass messages to "cutoff"
 sending messages to each other \, so we combine the control and the
 audio computation in the sampvoice abstraction without using send and
 receive. Click on one to see how.;
-#X text 8 413 The "poly" object essentially repeats pitch and velocity
+#X text 19 337 The "poly" object essentially repeats pitch and velocity
 pairs to its output \, but also sending a voice number from its left
 outlet. To use it \, we unpack the 7 parameters \, calculate the voice
 number \, repack the message as 8 parameters with voice number first
 \, and use "route" to send it to one of the 8 voices.;
-#X text 8 515 There's some bother because poly expects to track note
+#X text 19 412 There's some bother because poly expects to track note
 on and note off messages separately as they would come from a MIDI
 keyboard. So we assign each note a unique fake "pitch" \, use makenote
 to generate the note-off messages \, and run poly on the resulting
 stream. We then discard both pitch and velocity (using the velocity
 only to strip note-offs) and rebuild the original message adding the
 voice number we just scored.;
-#X text 854 639 updated for Pd version 0.33;
-#X msg 704 486 read qlist-sampler.txt \, rewind \, tempo 1 \, bang
+#X msg 614 513 read qlist-sampler.txt \, rewind \, tempo 1 \, bang
 ;
-#X obj 548 551 output~;
-#X text 249 108 increment mod 1e+06 to make tag;
-#X text 276 127 (acts like a MIDI pitch to;
-#X text 277 146 identify the note to "poly");
-#X text 258 175 supply delayed note-off message;
-#X obj 547 522 sampvoice;
-#X obj 547 494 sampvoice;
-#X obj 547 467 sampvoice;
-#X obj 547 439 sampvoice;
-#X obj 547 412 sampvoice;
-#X obj 547 384 sampvoice;
-#X obj 547 356 sampvoice;
+#X obj 498 522 output~;
+#X text 286 101 increment mod 1e+06 to make tag;
+#X text 321 120 (acts like a MIDI pitch to;
+#X text 317 139 identify the note to "poly");
+#X text 296 168 supply delayed note-off message;
+#X obj 497 493 sampvoice;
+#X obj 497 468 sampvoice;
+#X obj 497 441 sampvoice;
+#X obj 497 416 sampvoice;
+#X obj 497 391 sampvoice;
+#X obj 497 366 sampvoice;
+#X obj 497 341 sampvoice;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header polyphonic_sampler
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 587 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION polyphonic sampler;
+#X restore 392 589 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 polyphonic sampler- Related Help Documents;
+#X restore 103 589 pd References;
+#X obj 6 589 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X obj 665 543 r comment;
 #X connect 2 0 1 0;
 #X connect 3 0 1 0;
 #X connect 4 0 1 0;
 #X connect 13 0 1 0;
 #X connect 14 0 1 0;
-#X connect 16 0 52 0;
+#X connect 15 0 49 0;
+#X connect 16 0 17 0;
 #X connect 17 0 18 0;
+#X connect 17 1 25 2;
+#X connect 17 2 22 2;
+#X connect 17 2 25 3;
+#X connect 17 3 25 4;
+#X connect 17 4 25 5;
+#X connect 17 5 25 6;
+#X connect 17 6 25 7;
 #X connect 18 0 19 0;
-#X connect 18 1 26 2;
-#X connect 18 2 23 2;
-#X connect 18 2 26 3;
-#X connect 18 3 26 4;
-#X connect 18 4 26 5;
-#X connect 18 5 26 6;
-#X connect 18 6 26 7;
+#X connect 18 1 25 1;
 #X connect 19 0 20 0;
-#X connect 19 1 26 1;
+#X connect 19 0 22 0;
 #X connect 20 0 21 0;
-#X connect 20 0 23 0;
-#X connect 21 0 22 0;
-#X connect 22 0 20 1;
+#X connect 21 0 19 1;
+#X connect 22 0 23 0;
+#X connect 22 1 23 1;
 #X connect 23 0 24 0;
-#X connect 23 1 24 1;
+#X connect 23 2 24 1;
 #X connect 24 0 25 0;
-#X connect 24 2 25 1;
 #X connect 25 0 26 0;
-#X connect 26 0 27 0;
-#X connect 27 0 16 1;
-#X connect 27 1 52 1;
-#X connect 27 2 51 1;
-#X connect 27 3 50 1;
-#X connect 27 4 49 1;
-#X connect 27 5 48 1;
-#X connect 27 6 47 1;
-#X connect 27 7 46 1;
-#X connect 40 0 31 0;
-#X connect 46 0 41 0;
-#X connect 46 0 41 1;
+#X connect 26 0 15 1;
+#X connect 26 1 49 1;
+#X connect 26 2 48 1;
+#X connect 26 3 47 1;
+#X connect 26 4 46 1;
+#X connect 26 5 45 1;
+#X connect 26 6 44 1;
+#X connect 26 7 43 1;
+#X connect 37 0 30 0;
+#X connect 43 0 38 0;
+#X connect 43 0 38 1;
+#X connect 44 0 43 0;
+#X connect 45 0 44 0;
+#X connect 46 0 45 0;
 #X connect 47 0 46 0;
 #X connect 48 0 47 0;
 #X connect 49 0 48 0;
-#X connect 50 0 49 0;
-#X connect 51 0 50 0;
-#X connect 52 0 51 0;
diff --git a/pd/doc/3.audio.examples/D12.sampler.bis.pd b/pd/doc/3.audio.examples/D12.sampler.bis.pd
index f0fa13fd3..c2a5d2f1b 100644
--- a/pd/doc/3.audio.examples/D12.sampler.bis.pd
+++ b/pd/doc/3.audio.examples/D12.sampler.bis.pd
@@ -1,15 +1,15 @@
-#N canvas 104 78 1119 674 12;
+#N canvas 293 77 868 620 10;
 #N canvas 0 0 600 392 samples 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array sample1 176403 float 0;
 #X coords 0 1.02 176403 -1.02 200 130 1;
 #X restore 262 41 graph;
 #X text 282 385 ------ 4 seconds ------;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array sample2 176403 float 0;
 #X coords 0 1.02 176403 -1.02 200 130 1;
 #X restore 262 226 graph;
-#X restore 785 563 pd samples;
+#X restore 575 533 pd samples;
 #N canvas 52 219 971 512 recorder 0;
 #X obj 174 304 adc~ 1;
 #X obj 174 332 hip~ 5;
@@ -68,136 +68,159 @@ sample2;
 #X connect 24 0 11 0;
 #X connect 25 0 11 0;
 #X connect 27 0 8 0;
-#X restore 785 586 pd recorder;
-#X text 782 458 sample number;
-#X obj 619 96 unpack 0 0 0 0 0 0 0;
-#X obj 563 124 poly 8 1;
-#X obj 654 270 route 1 2 3 4 5 6 7 8;
-#X obj 558 487 output~;
-#X obj 563 149 swap;
-#X obj 563 196 route 0;
-#X obj 563 173 pack;
-#X obj 605 221 unpack;
-#X obj 557 289 sampvoice2;
-#X obj 563 221 pack;
-#X text 933 411 amplitude;
-#X text 932 435 pitch;
-#X text 851 344 ARGUMENTS FOR:;
-#X text 784 386 pitch;
-#X text 784 410 amplitude;
-#X text 784 434 duration;
-#X text 13 4 POLY SAMPLER \, VERSION 2 FOR SEPARATE NOTE-ON/OFF MESSAGES
-;
-#X obj 619 71 r onoff;
-#X text 932 368 ON/OFF TRANSITIONS:;
-#X text 785 367 ENTIRE NOTES:;
-#X text 932 390 tag;
-#X text 782 485 sample onset;
-#X text 782 511 rise time;
-#X text 783 535 decay time;
-#X text 929 460 (same other 4);
-#X obj 836 159 f;
-#X obj 872 159 + 1;
-#X obj 836 185 mod 1e+06;
-#X obj 654 245 pack 0 0 0 0 0 0 0;
-#X obj 918 74 r note;
-#X obj 918 100 unpack 0 0 0 0 0 0 0;
-#X text 860 641 updated for Pd version 0.37;
-#X obj 895 127 t b f;
-#X obj 936 237 pack 0 0 0 0 0 0 0;
-#X obj 889 285 s onoff;
-#X obj 870 230 pipe;
-#X obj 870 253 pack;
-#X msg 103 528 \; onoff 1 90 60 1 0 0 100;
-#X msg 323 528 \; onoff 1 0;
-#X msg 104 570 \; onoff 2 90 48 1 0 0 100;
-#X msg 324 570 \; onoff 2 0;
-#X msg 104 627 \; note 51 90 1000 1 0 0 100;
-#X obj 557 312 sampvoice2;
-#X obj 557 336 sampvoice2;
-#X obj 557 360 sampvoice2;
-#X obj 557 383 sampvoice2;
-#X obj 557 407 sampvoice2;
-#X obj 557 430 sampvoice2;
-#X obj 557 454 sampvoice2;
-#X text 14 35 Here is a variation on the polyphonic sampler \, which
+#X restore 575 556 pd recorder;
+#X text 572 428 sample number;
+#X obj 459 76 unpack 0 0 0 0 0 0 0;
+#X obj 403 104 poly 8 1;
+#X obj 494 250 route 1 2 3 4 5 6 7 8;
+#X obj 398 467 output~;
+#X obj 403 129 swap;
+#X obj 403 176 route 0;
+#X obj 403 153 pack;
+#X obj 445 201 unpack;
+#X obj 397 269 sampvoice2;
+#X obj 403 201 pack;
+#X text 723 381 amplitude;
+#X text 722 405 pitch;
+#X text 641 314 ARGUMENTS FOR:;
+#X text 574 356 pitch;
+#X text 574 380 amplitude;
+#X text 574 404 duration;
+#X obj 459 51 r onoff;
+#X text 722 338 ON/OFF TRANSITIONS:;
+#X text 575 337 ENTIRE NOTES:;
+#X text 722 360 tag;
+#X text 572 455 sample onset;
+#X text 572 481 rise time;
+#X text 573 505 decay time;
+#X text 719 430 (same other 4);
+#X obj 636 159 f;
+#X obj 672 159 + 1;
+#X obj 636 185 mod 1e+06;
+#X obj 494 225 pack 0 0 0 0 0 0 0;
+#X obj 718 74 r note;
+#X obj 718 100 unpack 0 0 0 0 0 0 0;
+#X obj 695 127 t b f;
+#X obj 736 237 pack 0 0 0 0 0 0 0;
+#X obj 689 285 s onoff;
+#X obj 670 230 pipe;
+#X obj 670 253 pack;
+#X msg 23 448 \; onoff 1 90 60 1 0 0 100;
+#X msg 183 448 \; onoff 1 0;
+#X msg 24 490 \; onoff 2 90 48 1 0 0 100;
+#X msg 183 490 \; onoff 2 0;
+#X msg 24 547 \; note 51 90 1000 1 0 0 100;
+#X obj 397 292 sampvoice2;
+#X obj 397 316 sampvoice2;
+#X obj 397 340 sampvoice2;
+#X obj 397 363 sampvoice2;
+#X obj 397 387 sampvoice2;
+#X obj 397 410 sampvoice2;
+#X obj 397 434 sampvoice2;
+#X text 19 47 Here is a variation on the polyphonic sampler \, which
 can take separate messages to start and stop notes (so that you can
 attach it to a MIDI keyboard \, for example.) "Note" messages act as
 before \, but in an intermediate step they are split onto note-on and
 note-off messages \, sent to "onoff". You can alternatively send messages
 straight to onoff if you don't know the duration in advance.;
-#X text 12 150 Messages to "onoff" require a tag \, which is a number
+#X text 19 133 Messages to "onoff" require a tag \, which is a number
 shared between the note-on and note-off message so that we can track
 down the voice to turn it off. If you're using MIDI input \, you can
 just re-use the pitch as a tag.;
-#X text 102 508 separate messages for not on and off:;
-#X text 101 608 single messages to do both as before:;
-#X text 10 221 Messages to "onoff" whose amplitude is zero are note-off
+#X text 22 428 separate messages for not on and off:;
+#X text 21 528 single messages to do both as before:;
+#X text 19 186 Messages to "onoff" whose amplitude is zero are note-off
 messages (the other parameters of note-off messages are ignored). The
 "sampvoice2" abstraction is a modification of "sampvoice" which looks
 at the amplitude field to decide whether to begin or end a note.;
-#X text 10 301 To convert "note" messages to pairs of "onoff" messages
+#X text 20 250 To convert "note" messages to pairs of "onoff" messages
 \, first a counter generates a tag. The the "pipe" object delays a
 copy of the tag \, which the following "pack" object converts into
 a note-off message (a pair of numbers \, the tag and a zero.);
-#X text 9 382 Under "r onoff" \, the poly object allocates a voice
+#X text 20 314 Under "r onoff" \, the poly object allocates a voice
 number \, putting it out paired with velocity. After swapping the two
 and packing them into a single message \, the amplitude is checked
 against zero by the "route 0" object \; if zero \, the "pack" confects
 a 2-argument message (voice number and zero). Otherwise \, the "unpack"
 retrieves the nonzero amplitude for a note-on message \, to which we
 add all the other parameters and route to the appropriate voice.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header poly_sampler...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 74 27 ... version 2 for separate note-on/off messages;
+#X obj 1 598 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION polyphonic sampler;
+#X restore 392 600 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 polyphonic sampler- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 600 pd References;
+#X obj 6 600 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 3 0 4 0;
-#X connect 3 1 31 1;
+#X connect 3 1 30 1;
 #X connect 3 1 4 1;
-#X connect 3 2 31 2;
-#X connect 3 3 31 3;
-#X connect 3 4 31 4;
-#X connect 3 5 31 5;
-#X connect 3 6 31 6;
+#X connect 3 2 30 2;
+#X connect 3 3 30 3;
+#X connect 3 4 30 4;
+#X connect 3 5 30 5;
+#X connect 3 6 30 6;
 #X connect 4 0 7 0;
 #X connect 4 2 7 1;
 #X connect 5 0 11 1;
-#X connect 5 1 45 1;
-#X connect 5 2 46 1;
-#X connect 5 3 47 1;
-#X connect 5 4 48 1;
-#X connect 5 5 49 1;
-#X connect 5 6 50 1;
-#X connect 5 7 51 1;
+#X connect 5 1 43 1;
+#X connect 5 2 44 1;
+#X connect 5 3 45 1;
+#X connect 5 4 46 1;
+#X connect 5 5 47 1;
+#X connect 5 6 48 1;
+#X connect 5 7 49 1;
 #X connect 7 0 9 0;
 #X connect 7 1 9 1;
 #X connect 8 0 12 0;
 #X connect 8 1 10 0;
 #X connect 9 0 8 0;
-#X connect 10 1 31 0;
-#X connect 11 0 45 0;
+#X connect 10 1 30 0;
+#X connect 11 0 43 0;
 #X connect 12 0 5 0;
-#X connect 20 0 3 0;
+#X connect 19 0 3 0;
+#X connect 27 0 28 0;
 #X connect 28 0 29 0;
-#X connect 29 0 30 0;
-#X connect 30 0 28 1;
-#X connect 30 0 38 0;
-#X connect 30 0 36 0;
-#X connect 31 0 5 0;
+#X connect 29 0 27 1;
+#X connect 29 0 36 0;
+#X connect 29 0 34 0;
+#X connect 30 0 5 0;
+#X connect 31 0 32 0;
 #X connect 32 0 33 0;
-#X connect 33 0 35 0;
-#X connect 33 1 36 1;
-#X connect 33 2 38 1;
-#X connect 33 3 36 3;
-#X connect 33 4 36 4;
-#X connect 33 5 36 5;
-#X connect 33 6 36 6;
-#X connect 35 0 28 0;
-#X connect 35 1 36 2;
+#X connect 32 1 34 1;
+#X connect 32 2 36 1;
+#X connect 32 3 34 3;
+#X connect 32 4 34 4;
+#X connect 32 5 34 5;
+#X connect 32 6 34 6;
+#X connect 33 0 27 0;
+#X connect 33 1 34 2;
+#X connect 34 0 35 0;
 #X connect 36 0 37 0;
-#X connect 38 0 39 0;
-#X connect 39 0 37 0;
+#X connect 37 0 35 0;
+#X connect 43 0 44 0;
+#X connect 44 0 45 0;
 #X connect 45 0 46 0;
 #X connect 46 0 47 0;
 #X connect 47 0 48 0;
 #X connect 48 0 49 0;
-#X connect 49 0 50 0;
-#X connect 50 0 51 0;
-#X connect 51 0 6 0;
-#X connect 51 0 6 1;
+#X connect 49 0 6 0;
+#X connect 49 0 6 1;
diff --git a/pd/doc/3.audio.examples/D13.additive.qlist.pd b/pd/doc/3.audio.examples/D13.additive.qlist.pd
index 2c9b3cb7e..752216a45 100644
--- a/pd/doc/3.audio.examples/D13.additive.qlist.pd
+++ b/pd/doc/3.audio.examples/D13.additive.qlist.pd
@@ -1,34 +1,58 @@
-#N canvas 233 179 667 449 12;
-#X obj 16 182 osc-voice amp1 pit1;
-#X obj 16 206 osc-voice amp2 pit2;
-#X obj 16 230 osc-voice amp3 pit3;
-#X obj 16 254 osc-voice amp4 pit4;
-#X obj 16 278 osc-voice amp5 pit5;
-#X obj 16 302 osc-voice amp6 pit6;
-#X obj 16 326 osc-voice amp7 pit7;
-#X obj 16 350 osc-voice amp8 pit8;
-#X obj 464 343 qlist;
-#X msg 394 185 stop;
-#X msg 524 300 read qlist.txt;
-#X obj 524 255 loadbang;
-#X text 258 164 start;
-#X text 395 161 stop;
-#X text 534 279 reread file;
-#X msg 467 199 rewind;
-#X msg 535 199 next;
-#X msg 251 212 tempo 100 \, bang;
-#X msg 250 188 tempo 1 \, bang;
-#X text 82 11 USING QLIST TO SEQUENCE AN OSCILLATOR BANK;
-#X text 479 178 single step;
-#X obj 532 392 r #;
-#X text 28 49 Here is an eight voice additive synthesis patch controlled
+#N canvas 433 153 448 391 10;
+#X obj 22 106 osc-voice amp1 pit1;
+#X obj 22 130 osc-voice amp2 pit2;
+#X obj 22 154 osc-voice amp3 pit3;
+#X obj 22 178 osc-voice amp4 pit4;
+#X obj 22 202 osc-voice amp5 pit5;
+#X obj 22 226 osc-voice amp6 pit6;
+#X obj 22 250 osc-voice amp7 pit7;
+#X obj 22 274 osc-voice amp8 pit8;
+#X obj 339 285 qlist;
+#X msg 250 130 stop;
+#X msg 349 242 read qlist.txt;
+#X obj 349 197 loadbang;
+#X text 161 106 start;
+#X text 251 106 stop;
+#X text 359 221 reread file;
+#X msg 289 130 rewind;
+#X msg 339 130 next;
+#X msg 154 154 tempo 100 \, bang;
+#X msg 153 130 tempo 1 \, bang;
+#X text 335 109 single step;
+#X obj 401 322 r #;
+#X text 19 37 Here is an eight voice additive synthesis patch controlled
 by a qlist. Open a text editor on the file \, "qlist.txt" \, to see
 how the oscillators' amplitudes and frequencies are specified. The
 abstraction \, "osc-voice" \, shows an effective way to make patches
 react to qlists but also to mousing.;
-#X text 234 391 this is where qlist comments go:;
-#X obj 16 380 output~;
-#X text 394 423 updatged for Pd version 0.39;
+#X text 202 321 this is where qlist comments go:;
+#X obj 22 304 output~;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header using_qlist_to_sequence_an_oscillator_bank
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 369 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION using qlist to sequence an oscillator bank
+;
+#X restore 392 371 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 qlist sequencer- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 371 pd References;
+#X obj 6 371 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 3 0;
@@ -36,8 +60,8 @@ react to qlists but also to mousing.;
 #X connect 4 0 5 0;
 #X connect 5 0 6 0;
 #X connect 6 0 7 0;
-#X connect 7 0 24 0;
-#X connect 7 0 24 1;
+#X connect 7 0 23 0;
+#X connect 7 0 23 1;
 #X connect 9 0 8 0;
 #X connect 10 0 8 0;
 #X connect 11 0 10 0;
diff --git a/pd/doc/3.audio.examples/D14.vibrato.pd b/pd/doc/3.audio.examples/D14.vibrato.pd
index 3f4d6ea21..1a505bcbb 100644
--- a/pd/doc/3.audio.examples/D14.vibrato.pd
+++ b/pd/doc/3.audio.examples/D14.vibrato.pd
@@ -1,25 +1,24 @@
-#N canvas 80 10 709 653 12;
-#X obj 28 258 r trigger;
-#X obj 28 454 *~;
-#X obj 28 482 *~;
-#X floatatom 63 304 3 0 100 0 - - -;
-#X msg 460 493 \; trigger 0;
-#X obj 28 281 unpack;
-#X floatatom 28 304 1 0 100 0 - - -;
-#X obj 27 533 +~ 0.3;
-#X obj 27 559 cos~;
-#X obj 27 507 osc~;
-#X obj 63 323 mtof;
-#X obj 63 345 sqrt;
-#X obj 63 367 sqrt;
-#X text 572 461 <-- octave up;
-#X msg 460 416 \; trigger 1 60;
-#X msg 460 453 \; trigger 1 72;
-#X text 550 494 <-- release;
-#X text 556 512 is optional;
-#X obj 28 424 *~;
-#X obj 237 404 +~ 1;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 418 74 493 629 10;
+#X obj 21 213 r trigger;
+#X obj 21 409 *~;
+#X obj 21 437 *~;
+#X floatatom 56 259 3 0 100 0 - - -, f 3;
+#X msg 315 438 \; trigger 0;
+#X obj 21 236 unpack;
+#X floatatom 21 259 1 0 100 0 - - -, f 1;
+#X obj 20 488 +~ 0.3;
+#X obj 20 514 cos~;
+#X obj 20 462 osc~;
+#X obj 56 278 mtof;
+#X obj 56 300 sqrt;
+#X obj 56 322 sqrt;
+#X msg 315 361 \; trigger 1 60;
+#X msg 315 398 \; trigger 1 72;
+#X text 385 439 <-- release;
+#X text 391 457 is optional;
+#X obj 21 379 *~;
+#X obj 182 359 +~ 1;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array array62 131 float 1;
 #A 0 0.970031 1 0.970031 0.881921 0.740952 0.555571 0.336891 0.0980184
 -0.146729 -0.382682 -0.595698 -0.773009 -0.88 -0.9 -0.92 -0.92 -0.85773
@@ -38,32 +37,31 @@
 -0.595719 -0.382706 -0.146755 0.097992 0.336866 0.555549 0.740934 0.881909
 0.970025 1 0.970038;
 #X coords 0 1 130 -1 200 100 1;
-#X restore 246 508 graph;
-#X obj 237 356 tabosc4~ array62;
-#X floatatom 237 312 3 0 0 0 - - -;
-#X obj 237 333 / 6;
-#X obj 237 380 *~;
-#X floatatom 391 333 3 0 0 0 - - -;
-#X text 236 438 since we'll multiply \,;
-#X text 235 453 vibrato output should;
-#X text 235 470 be centered at 1 \, not 0;
-#X text 273 384 multiply by vib depth;
-#X obj 391 361 / 6923;
-#X text 62 425 apply vibrato;
-#X text 66 453 fourth;
-#X text 69 469 power;
-#X text 97 537 waveform;
-#X text 96 517 simple;
-#X text 457 354 4/(exp(log(2)/1200)-1);
-#X text 461 335 conversion factor is;
-#X text 384 295 vibrato depth;
-#X text 383 312 in cents;
-#X text 228 274 vibrato speed;
-#X text 227 291 in Hertz;
-#X obj 28 392 adsr 0 100 200 100 300;
-#X obj 26 587 output~;
-#X text 88 9 USING ADSRS FOR PORTAMENTO AND ADDING VIBRATO TOO;
-#X text 43 30 Portamento can be treated as a special case of an ADSR
+#X restore 163 483 graph;
+#X obj 182 311 tabosc4~ array62;
+#X floatatom 182 267 3 0 0 0 - - -, f 3;
+#X obj 182 288 / 6;
+#X obj 182 335 *~;
+#X floatatom 306 288 3 0 0 0 - - -, f 3;
+#X text 161 403 since we'll multiply \,;
+#X text 160 418 vibrato output should;
+#X text 160 435 be centered at 1 \, not 0;
+#X text 218 339 multiply by vib depth;
+#X obj 306 316 / 6923;
+#X text 55 380 apply vibrato;
+#X text 59 408 fourth;
+#X text 62 424 power;
+#X text 70 492 waveform;
+#X text 69 472 simple;
+#X text 353 309 4/(exp(log(2)/1200)-1);
+#X text 357 290 conversion factor is;
+#X text 299 250 vibrato depth;
+#X text 298 267 in cents;
+#X text 173 229 vibrato speed;
+#X text 172 246 in Hertz;
+#X obj 21 347 adsr 0 100 200 100 300;
+#X obj 19 542 output~;
+#X text 19 36 Portamento can be treated as a special case of an ADSR
 envelope \, with 100 percent sustain. Vibrato is properly computed
 in units of pitch \, but it's also possible to do the job without having
 to convert from pitch to frequency units at the audio rate. To do this
@@ -71,12 +69,38 @@ we just raise the "pitch" to the fourth power \, so that it acts pseudo-exponent
 Rather than add vibrato to the ADSR output \, we multiply a signal
 which controls relative frequency. The relative frequency change is
 one plus an oscillator.;
-#X text 439 626 updated for Pd version 0.39;
-#X text 45 185 The table below holds 6 cycles of vibrato with small
+#X text 18 155 The table below holds 6 cycles of vibrato with small
 variations to get a not-exactly-repeating vibrato. We thus have to
 divide vibrato frequency by six. You can just use a sine or triangle
 wave if you prefer.;
-#X text 573 426 <-- middle C;
+#X text 398 372 <-- middle C;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header using_ADSRs_for_portamento...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 138 28 ... and adding vibrato \, too;
+#X text 398 409 <-- octave up;
+#X obj 1 607 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION using ADSRs for portamento;
+#X restore 392 609 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 ADSR portamento- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 609 pd References;
+#X obj 6 609 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 5 0;
 #X connect 1 0 2 0;
 #X connect 1 0 2 1;
@@ -84,21 +108,21 @@ wave if you prefer.;
 #X connect 3 0 10 0;
 #X connect 5 0 6 0;
 #X connect 5 1 3 0;
-#X connect 6 0 42 0;
+#X connect 6 0 41 0;
 #X connect 7 0 8 0;
-#X connect 8 0 43 0;
-#X connect 8 0 43 1;
+#X connect 8 0 42 0;
+#X connect 8 0 42 1;
 #X connect 9 0 7 0;
 #X connect 10 0 11 0;
 #X connect 11 0 12 0;
-#X connect 12 0 42 1;
-#X connect 18 0 1 0;
-#X connect 18 0 1 1;
-#X connect 19 0 18 1;
-#X connect 21 0 24 0;
-#X connect 22 0 23 0;
-#X connect 23 0 21 0;
-#X connect 24 0 19 0;
-#X connect 25 0 30 0;
-#X connect 30 0 24 1;
-#X connect 42 0 18 0;
+#X connect 12 0 41 1;
+#X connect 17 0 1 0;
+#X connect 17 0 1 1;
+#X connect 18 0 17 1;
+#X connect 20 0 23 0;
+#X connect 21 0 22 0;
+#X connect 22 0 20 0;
+#X connect 23 0 18 0;
+#X connect 24 0 29 0;
+#X connect 29 0 23 1;
+#X connect 41 0 17 0;
diff --git a/pd/doc/3.audio.examples/E01.spectrum.pd b/pd/doc/3.audio.examples/E01.spectrum.pd
index 6754bda1f..022c046ff 100644
--- a/pd/doc/3.audio.examples/E01.spectrum.pd
+++ b/pd/doc/3.audio.examples/E01.spectrum.pd
@@ -1,14 +1,14 @@
-#N canvas 190 29 773 821 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 375 55 624 683 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E01-signal 882 float 0;
 #X coords 0 5 882 -5 200 130 1;
-#X restore 531 41 graph;
-#X obj 40 304 hip~ 5;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 381 61 graph;
+#X obj 21 304 hip~ 5;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E01-spectrum 128 float 0;
 #X coords 0 4300 127 -40 257 130 1;
-#X restore 485 226 graph;
-#X text 134 243 <-- click to graph;
+#X restore 235 246 graph;
+#X text 115 243 <-- click to graph;
 #N canvas 45 83 558 569 fft 0;
 #X obj 19 62 inlet~;
 #X obj 85 214 inlet;
@@ -31,10 +31,10 @@ until much later.;
 #X obj 90 425 samplerate~;
 #X obj 90 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X floatatom 90 472 5 0 0 0 - - -;
+#X floatatom 90 472 5 0 0 0 - - -, f 5;
 #X obj 90 448 / 256;
 #X obj 90 378 loadbang;
-#X floatatom 90 541 5 0 0 0 - - -;
+#X floatatom 90 541 5 0 0 0 - - -, f 5;
 #X obj 98 494 s fundamental;
 #X obj 90 517 ftom;
 #X text 146 540 <-just out of curiosity \, here's the pitch;
@@ -59,121 +59,144 @@ frequency for showing spectra: the 16th bin in a 4096-point spectrum
 #X connect 19 0 18 0;
 #X connect 20 0 17 0;
 #X connect 23 0 21 0;
-#X restore 51 279 pd fft;
-#X text 531 173 ---- 0.02 seconds ----;
-#X obj 111 244 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 32 279 pd fft;
+#X text 401 193 ---- 0.02 seconds ----;
+#X obj 92 244 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 40 332 output~;
-#X obj 111 279 tabwrite~ E01-signal;
-#X text 523 800 updated for Pd version 0.37;
-#X text 516 359 1;
-#X text 550 359 2;
-#X text 582 359 3;
-#X text 614 359 4;
-#X text 647 359 5;
-#X text 677 359 6;
-#X text 708 359 7;
-#X text 484 359 0;
-#X text 520 378 -- partial number --;
-#X text 733 97 0;
-#X obj 42 42 r fundamental;
-#X obj 42 111 osc~;
-#X obj 63 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+#X obj 21 332 output~;
+#X obj 92 279 tabwrite~ E01-signal;
+#X text 266 379 1;
+#X text 300 379 2;
+#X text 332 379 3;
+#X text 364 379 4;
+#X text 397 379 5;
+#X text 427 379 6;
+#X text 458 379 7;
+#X text 234 379 0;
+#X text 295 398 -- partial number --;
+#X text 583 117 0;
+#X obj 23 42 r fundamental;
+#X obj 23 111 osc~;
+#X obj 37 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
-#X obj 41 161 *~;
-#X obj 85 111 osc~;
-#X obj 106 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 84 161 *~;
-#X obj 128 111 osc~;
-#X obj 149 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 22 161 *~;
+#X obj 66 111 osc~;
+#X obj 80 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 65 161 *~;
+#X obj 109 111 osc~;
+#X obj 123 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X obj 127 161 *~;
-#X obj 128 88 * 2;
-#X obj 171 111 osc~;
-#X obj 192 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 108 161 *~;
+#X obj 109 88 * 2;
+#X obj 152 111 osc~;
+#X obj 166 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X obj 170 161 *~;
-#X obj 214 111 osc~;
-#X obj 235 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 151 161 *~;
+#X obj 195 111 osc~;
+#X obj 209 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X obj 213 161 *~;
-#X obj 257 111 osc~;
-#X obj 278 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 194 161 *~;
+#X obj 238 111 osc~;
+#X obj 252 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X obj 256 161 *~;
-#X obj 42 88 * 0;
-#X obj 85 88 * 1;
-#X obj 171 88 * 3;
-#X obj 214 88 * 4;
-#X obj 257 88 * 5;
-#X text 303 136 <-- On/Off;
-#X text 337 152 for each;
-#X text 339 168 partial;
-#X text 595 11 WAVEFORM;
-#X text 578 204 SPECTRUM;
-#X text 25 415 The next series of patches demonstrates various kinds
+#X obj 237 161 *~;
+#X obj 23 88 * 0;
+#X obj 66 88 * 1;
+#X obj 152 88 * 3;
+#X obj 195 88 * 4;
+#X obj 238 88 * 5;
+#X text 277 136 <-- On/Off;
+#X text 311 152 for each;
+#X text 313 168 partial;
+#X text 455 31 WAVEFORM;
+#X text 328 224 SPECTRUM;
+#X text 19 425 The next series of patches demonstrates various kinds
 of modulation: AM \, waveshaping \, and FM. We will need a tool for
 graphing spectra which is introduced here. In this patch the signal
 to be analyzed is a simple sum of up to six partials of a fundamental
 frequency (which is 172 Hz \, close to F below middle C \, if your
 sample rate happens to be 44100 Hz. The fundamental is chosen to agree
 with the analysis patch ("pd FFT") and is computed within it).;
-#X text 25 546 The partials are numbered 0 through 5 \, where 0 means
+#X text 18 522 The partials are numbered 0 through 5 \, where 0 means
 DC \, or zero frequency \, 1 is the fundamental \, and so on. The toggle
 switches allow you to turn them on and off separately. You have to
 press the "click to graph" button to update the two graphs.;
-#X text 745 344 0;
-#X text 743 223 1;
-#X text 744 282 0.5;
-#X text 26 631 The upper graph is just the (time domain) waveform \,
+#X text 495 364 0;
+#X text 493 243 1;
+#X text 494 302 0.5;
+#X text 18 586 The upper graph is just the (time domain) waveform \,
 about four periods long. The lower graph is the magnitude spectrum.
 Its peaks are the magnitudes of the partials. Note that a DC signal
 of amplitude one is considered a partial of magnitude 1 \, but the
 other partials \, which have peak amplitudes of 1 (and RMS 0.707) \,
 have peak magnitudes of only 0.5 in the spectrum.;
-#X obj 41 222 *~ 1;
-#X text 733 37 5;
-#X text 734 157 -5;
-#X text 81 221 sum;
-#X text 96 5 GRAPHING SPECTRA OF AUDIO SIGNALS;
-#X text 24 742 Here we're introducing a new feature: multiple signals
+#X obj 22 222 *~ 1;
+#X text 583 57 5;
+#X text 584 177 -5;
+#X text 62 221 sum;
+#X text 18 672 Here we're introducing a new feature: multiple signals
 connected to a signal inlet (as in the "*~ 1") are added. This is the
 most convenient way to sum the six partials.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header graphing_spectra_of_audio_signals
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 727 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION graphing spectra of audio signals;
+#X restore 392 729 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 spectrum- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 729 pd References;
+#X obj 6 729 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 7 0;
 #X connect 1 0 7 1;
 #X connect 6 0 4 1;
 #X connect 6 0 8 0;
-#X connect 20 0 40 0;
-#X connect 20 0 41 0;
-#X connect 20 0 30 0;
-#X connect 20 0 42 0;
-#X connect 20 0 43 0;
-#X connect 20 0 44 0;
-#X connect 21 0 23 0;
-#X connect 22 0 23 1;
-#X connect 23 0 56 0;
-#X connect 24 0 26 0;
-#X connect 25 0 26 1;
-#X connect 26 0 56 0;
-#X connect 27 0 29 0;
-#X connect 28 0 29 1;
-#X connect 29 0 56 0;
-#X connect 30 0 27 0;
-#X connect 31 0 33 0;
-#X connect 32 0 33 1;
-#X connect 33 0 56 0;
-#X connect 34 0 36 0;
-#X connect 35 0 36 1;
-#X connect 36 0 56 0;
-#X connect 37 0 39 0;
-#X connect 38 0 39 1;
-#X connect 39 0 56 0;
-#X connect 40 0 21 0;
-#X connect 41 0 24 0;
-#X connect 42 0 31 0;
-#X connect 43 0 34 0;
-#X connect 44 0 37 0;
-#X connect 56 0 4 0;
-#X connect 56 0 1 0;
-#X connect 56 0 8 0;
+#X connect 19 0 39 0;
+#X connect 19 0 40 0;
+#X connect 19 0 29 0;
+#X connect 19 0 41 0;
+#X connect 19 0 42 0;
+#X connect 19 0 43 0;
+#X connect 20 0 22 0;
+#X connect 21 0 22 1;
+#X connect 22 0 55 0;
+#X connect 23 0 25 0;
+#X connect 24 0 25 1;
+#X connect 25 0 55 0;
+#X connect 26 0 28 0;
+#X connect 27 0 28 1;
+#X connect 28 0 55 0;
+#X connect 29 0 26 0;
+#X connect 30 0 32 0;
+#X connect 31 0 32 1;
+#X connect 32 0 55 0;
+#X connect 33 0 35 0;
+#X connect 34 0 35 1;
+#X connect 35 0 55 0;
+#X connect 36 0 38 0;
+#X connect 37 0 38 1;
+#X connect 38 0 55 0;
+#X connect 39 0 20 0;
+#X connect 40 0 23 0;
+#X connect 41 0 30 0;
+#X connect 42 0 33 0;
+#X connect 43 0 36 0;
+#X connect 55 0 4 0;
+#X connect 55 0 1 0;
+#X connect 55 0 8 0;
diff --git a/pd/doc/3.audio.examples/E02.ring.modulation.pd b/pd/doc/3.audio.examples/E02.ring.modulation.pd
index 81004cf21..27b99b0a8 100644
--- a/pd/doc/3.audio.examples/E02.ring.modulation.pd
+++ b/pd/doc/3.audio.examples/E02.ring.modulation.pd
@@ -1,13 +1,13 @@
-#N canvas 269 43 755 746 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 320 21 755 628 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E02-signal 882 float 0;
 #X coords 0 5 882 -5 200 130 1;
-#X restore 501 66 graph;
-#X obj 15 370 hip~ 5;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 361 66 graph;
+#X obj 15 392 hip~ 5;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E02-spectrum 128 float 0;
 #X coords 0 4300 127 -40 257 130 1;
-#X restore 455 251 graph;
+#X restore 295 271 graph;
 #N canvas 45 83 558 569 fft 0;
 #X obj 19 61 inlet~;
 #X obj 95 214 inlet;
@@ -29,17 +29,17 @@ until much later.;
 #X obj 16 425 samplerate~;
 #X obj 16 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X floatatom 16 472 5 0 0 0 - - -;
+#X floatatom 16 472 5 0 0 0 - - -, f 5;
 #X obj 16 448 / 256;
 #X obj 16 378 loadbang;
-#X floatatom 16 541 5 0 0 0 - - -;
+#X floatatom 16 541 5 0 0 0 - - -, f 5;
 #X obj 24 494 s fundamental;
 #X obj 16 517 ftom;
 #X text 14 319 At load time \, calculate a good choice of fundamental
 frequency for showing spectra: the 16th bin in a 4096-point spectrum
 \, so SR*16/4096 or SR/256.;
 #X text 145 216 "bang" into this inlet to graph it;
-#X floatatom 191 480 5 0 0 0 - - -;
+#X floatatom 191 480 5 0 0 0 - - -, f 5;
 #X obj 191 456 / 4096;
 #X text 187 425 One bin is SR/4096:;
 #X text 72 540 <-just out of curiosity \, here's the fundamental pitch
@@ -69,84 +69,81 @@ frequency for showing spectra: the 16th bin in a 4096-point spectrum
 #X connect 22 0 20 0;
 #X connect 25 0 29 0;
 #X connect 26 0 25 0;
-#X restore 23 343 pd fft;
-#X text 501 198 ---- 0.02 seconds ----;
-#X obj 84 344 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 23 365 pd fft;
+#X text 391 198 ---- 0.02 seconds ----;
+#X obj 84 366 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 15 398 output~;
-#X text 501 720 updated for Pd version 0.37;
-#X text 486 384 1;
-#X text 520 384 2;
-#X text 552 384 3;
-#X text 584 384 4;
-#X text 617 384 5;
-#X text 647 384 6;
-#X text 678 384 7;
-#X text 454 384 0;
-#X text 490 403 -- partial number --;
-#X text 703 120 0;
-#X obj 18 32 r fundamental;
-#X obj 18 94 osc~;
-#X obj 39 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+#X obj 15 420 output~;
+#X text 326 404 1;
+#X text 360 404 2;
+#X text 392 404 3;
+#X text 424 404 4;
+#X text 457 404 5;
+#X text 487 404 6;
+#X text 518 404 7;
+#X text 294 404 0;
+#X text 366 423 -- partial number --;
+#X text 563 120 0;
+#X obj 18 54 r fundamental;
+#X obj 18 116 osc~;
+#X obj 32 141 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
-#X obj 17 144 *~;
-#X obj 61 94 osc~;
-#X obj 82 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+#X obj 17 166 *~;
+#X obj 61 116 osc~;
+#X obj 75 141 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
-#X obj 60 144 *~;
-#X obj 104 94 osc~;
-#X obj 125 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#X obj 60 166 *~;
+#X obj 104 116 osc~;
+#X obj 118 141 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X obj 103 144 *~;
-#X obj 104 71 * 2;
-#X obj 147 94 osc~;
-#X obj 168 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 103 166 *~;
+#X obj 104 93 * 2;
+#X obj 147 116 osc~;
+#X obj 161 141 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X obj 146 144 *~;
-#X obj 190 94 osc~;
-#X obj 211 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 146 166 *~;
+#X obj 190 116 osc~;
+#X obj 204 141 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X obj 189 144 *~;
-#X obj 233 94 osc~;
-#X obj 254 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 189 166 *~;
+#X obj 233 116 osc~;
+#X obj 247 141 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X obj 232 144 *~;
-#X obj 18 71 * 0;
-#X obj 61 71 * 1;
-#X obj 147 71 * 3;
-#X obj 190 71 * 4;
-#X obj 233 71 * 5;
-#X text 282 118 <-- On/Off;
-#X text 565 46 WAVEFORM;
-#X text 548 229 SPECTRUM;
-#X text 715 367 0;
-#X text 713 246 1;
-#X text 714 305 0.5;
-#X text 703 60 5;
-#X text 704 180 -5;
-#X obj 16 239 *~;
-#X text 300 102 partials;
-#X obj 154 270 osc~;
-#X floatatom 154 210 3 0 200 0 - - -;
-#X obj 154 239 *;
-#X obj 187 239 r freq-step;
-#X text 226 177 modulation;
-#X text 222 192 frequency in;
-#X text 185 209 <-- "steps" of f/16;
-#X text 97 -1 RING MODULATION: multiplying a complex tone by a sinusoid
+#X obj 232 166 *~;
+#X obj 18 93 * 0;
+#X obj 61 93 * 1;
+#X obj 147 93 * 3;
+#X obj 190 93 * 4;
+#X obj 233 93 * 5;
+#X text 275 140 <-- On/Off;
+#X text 425 46 WAVEFORM;
+#X text 388 249 SPECTRUM;
+#X text 555 387 0;
+#X text 553 266 1;
+#X text 554 325 0.5;
+#X text 563 60 5;
+#X text 564 180 -5;
+#X obj 16 261 *~;
+#X text 293 124 partials;
+#X obj 154 292 osc~;
+#X floatatom 154 232 3 0 200 0 - - -, f 3;
+#X obj 154 261 *;
+#X obj 186 261 r freq-step;
+#X text 226 199 modulation;
+#X text 222 214 frequency in;
+#X text 185 231 <-- "steps" of f/16;
+#X obj 84 321 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
-#X obj 84 299 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X text 107 343 <-- graph once;
-#X obj 84 321 metro 500;
-#X text 107 298 <-- graph repeatedly;
-#X text 35 463 Now we ring modulate the signal by multiplying it by
+#X text 107 365 <-- graph once;
+#X obj 84 343 metro 500;
+#X text 107 320 <-- graph repeatedly;
+#X text 12 474 Now we ring modulate the signal by multiplying it by
 another sinusoid. The modulation frequency is controlled in steps of
 f/16 where "f" is the fundamental frequency \, giving roughly 11 Hz.
 per step. Note that if the modulation frequency is set to zero we can't
 predict the overall amplitude because it depends on what phase the
 modulation oscillator happened to have at that moment.;
-#X text 32 579 If you choose a multiple of the fundamental as a modulation
+#X text 12 560 If you choose a multiple of the fundamental as a modulation
 frequency (16 \, 32 \, 48 \, 64 \, ... "steps") the result is again
 periodic at the original frequency. If you select a half-integer times
 the fundamental (8 \, 24 \, 40 \, ... steps) the pitch drops by an
@@ -154,44 +151,70 @@ octave and you get only odd partials. For most other settings you'll
 get an inharmonic complex of tones. These are sometimes heard as separate
 pitches and other times they seem to fuse into a single timbre with
 indeterminate pitch.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header ring_modulation:
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 91 27 multiplying a complex tone by a sinusoid;
+#X obj 1 681 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION ring modulation;
+#X text 12 25 KEYWORDS signal;
+#X restore 392 683 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 ring modulation- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 683 pd References;
+#X obj 6 683 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 6 0;
 #X connect 1 0 6 1;
 #X connect 5 0 3 1;
-#X connect 18 0 38 0;
-#X connect 18 0 39 0;
-#X connect 18 0 28 0;
-#X connect 18 0 40 0;
-#X connect 18 0 41 0;
-#X connect 18 0 42 0;
-#X connect 19 0 21 0;
-#X connect 20 0 21 1;
-#X connect 21 0 51 0;
-#X connect 22 0 24 0;
-#X connect 23 0 24 1;
-#X connect 24 0 51 0;
-#X connect 25 0 27 0;
-#X connect 26 0 27 1;
-#X connect 27 0 51 0;
-#X connect 28 0 25 0;
-#X connect 29 0 31 0;
-#X connect 30 0 31 1;
-#X connect 31 0 51 0;
-#X connect 32 0 34 0;
-#X connect 33 0 34 1;
-#X connect 34 0 51 0;
-#X connect 35 0 37 0;
-#X connect 36 0 37 1;
-#X connect 37 0 51 0;
-#X connect 38 0 19 0;
-#X connect 39 0 22 0;
-#X connect 40 0 29 0;
-#X connect 41 0 32 0;
-#X connect 42 0 35 0;
-#X connect 51 0 3 0;
-#X connect 51 0 1 0;
-#X connect 53 0 51 1;
-#X connect 54 0 55 0;
-#X connect 55 0 53 0;
-#X connect 56 0 55 1;
-#X connect 61 0 63 0;
-#X connect 63 0 5 0;
+#X connect 17 0 37 0;
+#X connect 17 0 38 0;
+#X connect 17 0 27 0;
+#X connect 17 0 39 0;
+#X connect 17 0 40 0;
+#X connect 17 0 41 0;
+#X connect 18 0 20 0;
+#X connect 19 0 20 1;
+#X connect 20 0 50 0;
+#X connect 21 0 23 0;
+#X connect 22 0 23 1;
+#X connect 23 0 50 0;
+#X connect 24 0 26 0;
+#X connect 25 0 26 1;
+#X connect 26 0 50 0;
+#X connect 27 0 24 0;
+#X connect 28 0 30 0;
+#X connect 29 0 30 1;
+#X connect 30 0 50 0;
+#X connect 31 0 33 0;
+#X connect 32 0 33 1;
+#X connect 33 0 50 0;
+#X connect 34 0 36 0;
+#X connect 35 0 36 1;
+#X connect 36 0 50 0;
+#X connect 37 0 18 0;
+#X connect 38 0 21 0;
+#X connect 39 0 28 0;
+#X connect 40 0 31 0;
+#X connect 41 0 34 0;
+#X connect 50 0 3 0;
+#X connect 50 0 1 0;
+#X connect 52 0 50 1;
+#X connect 53 0 54 0;
+#X connect 54 0 52 0;
+#X connect 55 0 54 1;
+#X connect 59 0 61 0;
+#X connect 61 0 5 0;
diff --git a/pd/doc/3.audio.examples/E03.octave.divider.pd b/pd/doc/3.audio.examples/E03.octave.divider.pd
index 5fa88f464..0d52dbad0 100644
--- a/pd/doc/3.audio.examples/E03.octave.divider.pd
+++ b/pd/doc/3.audio.examples/E03.octave.divider.pd
@@ -1,24 +1,23 @@
-#N canvas 51 52 793 665 12;
-#X obj 477 135 loadbang;
-#X obj 31 289 hip~ 5;
-#X obj 477 53 adc~ 1;
-#X obj 477 190 soundfiler;
-#X obj 32 322 output~;
-#X text 544 646 updated for Pd version 0.37;
-#X obj 478 100 tabwrite~ E03-table;
-#X msg 477 162 read ../sound/voice.wav E03-table;
-#X obj 117 64 fiddle~ 2048;
-#X obj 118 95 unpack;
-#X obj 111 199 osc~;
-#X obj 118 119 moses 1;
-#X obj 77 199 *~;
-#X obj 145 147 mtof;
-#X obj 145 170 *;
-#X msg 194 125 0.5;
-#X floatatom 194 154 3 0 0 0 - - -;
-#X msg 232 125 15;
+#N canvas 392 78 571 618 10;
+#X obj 287 155 loadbang;
+#X obj 31 271 hip~ 5;
+#X obj 407 67 adc~ 1;
+#X obj 287 230 soundfiler;
+#X obj 32 304 output~;
+#X obj 408 114 tabwrite~ E03-table;
+#X msg 287 182 read ../sound/voice.wav E03-table;
+#X obj 117 65 fiddle~ 2048;
+#X obj 118 96 unpack;
+#X obj 111 193 osc~;
+#X obj 118 120 moses 1;
+#X obj 77 193 *~;
+#X obj 157 143 mtof;
+#X obj 157 166 *;
+#X msg 201 114 0.5;
+#X floatatom 201 143 3 0 0 0 - - -, f 3;
+#X msg 239 114 15;
 #N canvas 0 0 446 202 (subpatch) 0;
-#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
 #X obj 100 20 inlet~;
 #X obj 99 87 *~;
@@ -28,9 +27,9 @@
 #X connect 1 0 2 0;
 #X connect 2 0 3 0;
 #X coords 0 0 100 100 40 18 1;
-#X restore 78 248 pd;
+#X restore 78 238 pd;
 #N canvas 0 0 446 202 (subpatch) 0;
-#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
 #X obj 100 20 inlet~;
 #X obj 99 87 *~;
@@ -40,9 +39,9 @@
 #X connect 1 0 2 0;
 #X connect 2 0 3 0;
 #X coords 0 0 100 100 40 18 1;
-#X restore 32 248 pd;
-#X obj 78 222 *~ 2;
-#X obj 194 100 loadbang;
+#X restore 32 238 pd;
+#X obj 78 216 *~ 2;
+#X obj 201 89 loadbang;
 #N canvas 414 195 613 302 looper 0;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array E03-table 44103 float 0;
@@ -60,9 +59,9 @@ with an adc~ if you want to go live.;
 #X connect 3 0 4 0;
 #X connect 4 0 2 0;
 #X connect 5 0 6 0;
-#X restore 118 18 pd looper;
-#X text 561 141 re-read original sample;
-#X obj 489 77 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 118 38 pd looper;
+#X text 371 161 re-read original sample;
+#X obj 419 91 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
 #N canvas 300 203 758 306 delay 0;
 #X obj 15 222 outlet~;
@@ -84,57 +83,80 @@ with an adc~ if you want to go live.;
 #X connect 4 0 0 0;
 #X connect 5 0 4 0;
 #X connect 6 0 5 0;
-#X restore 31 71 pd delay;
-#X text 242 4 OCTAVE DIVIDING VIA RING MODULATION;
-#X text 508 75 <-- record a sample;
-#X text 265 125 <-- choose an effect;
-#X text 157 231 on/off for original;
-#X text 128 247 <--and processed sounds;
-#X text 196 274 This patch demonstrates using ring modulation to alias
+#X restore 31 72 pd delay;
+#X text 438 89 <-- record a sample;
+#X text 272 114 <-- choose an effect;
+#X text 146 224 on/off for original;
+#X text 128 237 <--and processed sounds;
+#X text 106 303 This patch demonstrates using ring modulation to alias
 a sound down one octave. The ring modulation itself ("osc~" and multiplier)
 is easy. (We step it up by a factor of 2 to balance the original better.)
 ;
-#X text 198 340 Harder is getting the fundamental frequency of the
-original sound. We do this with the complicated "fiddle~" object \,
-which puts out a stream of analysis data for an incoming signal. The
-"2048" argument specifies the analysis window size. The analysis is
-most closely aligned with what the sound was doing at the middle of
-the window \, i.e. \, 1024 samples ago. The "pd delay" window delays
-the signal itself 1024 samples so it will be as tightly synchronized
-with the analysis data as possible. (If you're doing this on a real-time
-input \, you might drop the delay and settle for less perfect synchronization.)
-;
-#X text 198 512 About fiddle~ \, suffice it to say that the third outlet
+#X text 29 356 Harder is getting the fundamental frequency of the original
+sound. We do this with the complicated "fiddle~" object \, which puts
+out a stream of analysis data for an incoming signal. The "2048" argument
+specifies the analysis window size. The analysis is most closely aligned
+with what the sound was doing at the middle of the window \, i.e. \,
+1024 samples ago. The "pd delay" window delays the signal itself 1024
+samples so it will be as tightly synchronized with the analysis data
+as possible. (If you're doing this on a real-time input \, you might
+drop the delay and settle for less perfect synchronization.);
+#X text 28 486 About fiddle~ \, suffice it to say that the third outlet
 contains (pitch \, amplitude) pairs. We unpack the pitch and strip
 out any zeros (when fiddle~ fails to find a pitch it outputs zero but
 we'd rather stick with the most recent good one). This is converted
 from MIDI to Hertz \, and multiplied by 1/2 to control the modulation
 oscillator. (You can also try large-ish integers which leave the pitch
 intact but introduce funny formants.);
-#X msg 406 237 read ../../saucisse.wav E03-table;
-#X obj 25 16 adc~ 1;
-#X connect 0 0 7 0;
+#X msg 306 207 read ../../saucisse.wav E03-table;
+#X obj 31 38 adc~ 1;
+#X obj 1 596 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION octave dividing via ring modulation;
+#X restore 392 598 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 octave dividing- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 598 pd References;
+#X obj 6 598 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header octave_dividing_via_ring_modulation
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X connect 0 0 6 0;
 #X connect 1 0 4 0;
 #X connect 1 0 4 1;
-#X connect 2 0 6 0;
-#X connect 7 0 3 0;
-#X connect 8 2 9 0;
-#X connect 9 0 11 0;
-#X connect 10 0 12 1;
-#X connect 11 1 13 0;
-#X connect 12 0 20 0;
-#X connect 13 0 14 0;
-#X connect 14 0 10 0;
-#X connect 15 0 16 0;
-#X connect 16 0 14 1;
-#X connect 17 0 16 0;
+#X connect 2 0 5 0;
+#X connect 6 0 3 0;
+#X connect 7 2 8 0;
+#X connect 8 0 10 0;
+#X connect 9 0 11 1;
+#X connect 10 1 12 0;
+#X connect 11 0 19 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 13 1;
+#X connect 16 0 15 0;
+#X connect 17 0 1 0;
 #X connect 18 0 1 0;
-#X connect 19 0 1 0;
-#X connect 20 0 18 0;
-#X connect 21 0 15 0;
-#X connect 22 0 25 0;
-#X connect 22 0 8 0;
-#X connect 24 0 6 0;
-#X connect 25 0 19 0;
-#X connect 25 0 12 0;
-#X connect 34 0 3 0;
+#X connect 19 0 17 0;
+#X connect 20 0 14 0;
+#X connect 21 0 24 0;
+#X connect 21 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 18 0;
+#X connect 24 0 11 0;
+#X connect 32 0 3 0;
diff --git a/pd/doc/3.audio.examples/E04.difference.tone.pd b/pd/doc/3.audio.examples/E04.difference.tone.pd
index 7272222b1..f45ca7b59 100644
--- a/pd/doc/3.audio.examples/E04.difference.tone.pd
+++ b/pd/doc/3.audio.examples/E04.difference.tone.pd
@@ -1,45 +1,69 @@
-#N canvas 266 135 637 523 12;
-#X obj 19 128 +~;
-#X obj 18 209 output~;
-#X text 141 3 NONLINEAR DISTORTION AND DIFFERENCE TONES;
-#X obj 154 171 / 100;
-#X floatatom 154 151 5 0 500 0 - - -;
-#X obj 18 181 clip~ -1 1;
-#X floatatom 42 81 5 0 0 0 - - -;
-#X obj 42 103 osc~ 200;
-#X obj 18 155 *~;
-#X obj 42 35 loadbang;
-#X msg 154 127 50;
-#X obj 154 103 loadbang;
-#X text 385 494 updated for Pd version 0.37;
-#X text 94 80 <-- frequency of second tone;
-#X text 209 151 <-- before clipping;
-#X text 234 134 amplitude of sum;
-#X obj 18 9 osc~ 300;
-#X msg 42 58 225;
-#X text 99 226 This patch demonstrates how nonlinear distortion (also
+#N canvas 433 116 448 504 10;
+#X obj 23 151 +~;
+#X obj 22 232 output~;
+#X obj 158 197 / 100;
+#X floatatom 158 174 5 0 500 0 - - -, f 5;
+#X obj 22 204 clip~ -1 1;
+#X floatatom 46 104 5 0 0 0 - - -, f 5;
+#X obj 46 126 osc~ 200;
+#X obj 22 178 *~;
+#X obj 46 58 loadbang;
+#X msg 158 150 50;
+#X obj 158 126 loadbang;
+#X text 88 103 <-- frequency of second tone;
+#X text 195 174 <-- before clipping;
+#X text 220 157 amplitude of sum;
+#X obj 22 32 osc~ 300;
+#X msg 46 81 225;
+#X text 20 286 This patch demonstrates how nonlinear distortion (also
 known as "waveshaping") can create difference tones from a pair of
 sinusoids. The sinusoids are initially tuned to 225 and 300 Hz \, a
 musical fourth \, and have amplitude of 50 percent (0.5) so that the
 sum is always less than 1 in absolute value. At these settings the
 "clip~" object passes its input through unchanged.;
-#X text 100 344 If the amplitude rises above 50 percent \, the clip~
+#X text 21 372 If the amplitude rises above 50 percent \, the clip~
 object starts altering the signal nonlinearly \, and the result is
 no longer as if the two sinusoids had been processed separately. Instead
 \, they "intermodulate" \, finding a common subharmonic if one exists.
 At 300 and 225 Hz \, the subharmonic is at 75 \, two octaves below
 the upper tone and a twelveth below the lower one. Change the frequency
 of the second tone and you will hear a variety of effects.;
-#X connect 0 0 8 0;
-#X connect 3 0 8 1;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 5 0 1 1;
-#X connect 6 0 7 0;
-#X connect 7 0 0 1;
-#X connect 8 0 5 0;
-#X connect 9 0 17 0;
-#X connect 10 0 4 0;
-#X connect 11 0 10 0;
-#X connect 16 0 0 0;
-#X connect 17 0 6 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header nonlinear_distortion_and_difference_tones
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 482 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 25 KEYWORDS;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION nonlinear distortion and difference tones
+;
+#X restore 392 484 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 difference tones- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 484 pd References;
+#X obj 6 484 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 7 0;
+#X connect 2 0 7 1;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X connect 4 0 1 1;
+#X connect 5 0 6 0;
+#X connect 6 0 0 1;
+#X connect 7 0 4 0;
+#X connect 8 0 15 0;
+#X connect 9 0 3 0;
+#X connect 10 0 9 0;
+#X connect 14 0 0 0;
+#X connect 15 0 5 0;
diff --git a/pd/doc/3.audio.examples/E05.chebychev.pd b/pd/doc/3.audio.examples/E05.chebychev.pd
index 90c628db8..420d2df02 100644
--- a/pd/doc/3.audio.examples/E05.chebychev.pd
+++ b/pd/doc/3.audio.examples/E05.chebychev.pd
@@ -1,17 +1,16 @@
-#N canvas 224 60 657 571 12;
-#X obj 23 269 output~;
-#X obj 45 74 / 100;
-#X floatatom 45 54 5 0 100 0 - - -;
-#X obj 23 144 *~;
-#X text 403 539 updated for Pd version 0.37;
-#X obj 22 29 osc~ 220;
-#X obj 45 97 pack 0 50;
-#X obj 45 121 line~;
-#X text 97 54 <-- index in;
-#X text 117 68 hundredths;
-#X obj 23 169 *~ 128;
-#X obj 23 217 tabread4~ E05-tab;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 392 109 573 523 10;
+#X obj 22 282 output~;
+#X obj 44 87 / 100;
+#X floatatom 44 67 5 0 100 0 - - -, f 5;
+#X obj 22 157 *~;
+#X obj 21 42 osc~ 220;
+#X obj 44 110 pack 0 50;
+#X obj 44 134 line~;
+#X text 96 67 <-- index in;
+#X text 116 81 hundredths;
+#X obj 22 182 *~ 128;
+#X obj 22 230 tabread4~ E05-tab;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E05-tab 259 float 1;
 #A 0 -1.20148 -1 -0.810724 -0.63326 -0.467216 -0.31221 -0.167866 -0.0338144
 0.0903053 0.204849 0.310166 0.406597 0.494477 0.574137 0.645895 0.71007
@@ -49,8 +48,8 @@
 -0.204849 -0.0903053 0.0338144 0.167866 0.31221 0.467216 0.63326 0.810724
 1 1.20148;
 #X coords 0 1 258 -1 200 140 1;
-#X restore 262 46 graph;
-#X text 497 28 subpatch to;
+#X restore 202 66 graph;
+#X text 437 48 subpatch to;
 #N canvas 113 0 849 700 make-table 0;
 #X obj 141 304 t b b;
 #X obj 213 329 f;
@@ -201,57 +200,81 @@ them in a wavetable for use later.;
 #X connect 59 0 61 0;
 #X connect 60 0 58 0;
 #X connect 61 0 56 0;
-#X restore 489 146 pd make-table;
-#X obj 489 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 429 166 pd make-table;
+#X obj 429 146 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 517 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 457 146 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 545 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 485 146 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 573 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 513 146 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 600 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 540 146 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 497 45 calculate;
-#X text 495 64 Chebychev;
-#X text 496 83 polynomials;
-#X text 490 107 2;
-#X text 517 107 3;
-#X text 546 107 4;
-#X text 572 108 5;
-#X text 601 107 6;
-#X text 134 2 waveshaping with Chebychev polynomials;
-#X obj 23 193 +~ 129;
-#X obj 23 242 hip~ 5;
-#X text 107 256 This patch demonstrates using Chebychev polynomials
+#X text 437 65 calculate;
+#X text 435 84 Chebychev;
+#X text 436 103 polynomials;
+#X text 430 127 2;
+#X text 457 127 3;
+#X text 486 127 4;
+#X text 512 128 5;
+#X text 541 127 6;
+#X obj 22 206 +~ 129;
+#X obj 22 255 hip~ 5;
+#X text 107 276 This patch demonstrates using Chebychev polynomials
 (of the first kind) to generate pure harmonics using waveshaping. The
 pure harmonic only comes out when the index is one (top of the scale).
 Smaller indices will give various mixes of harmonics. The table initially
 holds the fifth Chebychev polynomial \, so you can get the fifth harmonic.
 ;
-#X text 106 355 There is an audible "rolling" sound as the index changes
+#X text 19 351 There is an audible "rolling" sound as the index changes
 for the higher degree polynomials \, because the amplitudes of the
 lower partials can rise and fall several times apiece as the index
 rises from zero to one.;
-#X text 105 422 Indices greater than one will try to read values outside
+#X text 19 404 Indices greater than one will try to read values outside
 the table (which would be clipped appropriately). Anyway \, the polynomials
 increase rapidly in value outside the interval from -1 to 1 that we
 are using here.;
-#X text 106 491 When you get tired of Chebychef polynomials you can
+#X text 20 457 When you get tired of Chebychef polynomials you can
 draw your own functions by hand and/or try other formulas.;
-#X connect 1 0 6 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header waveshaping_with_Chebychev_polynomials
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 501 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION waveshaping with Chebychev polynomials;
+#X restore 392 503 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 waveshaping- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 503 pd References;
+#X obj 6 503 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 1 0 5 0;
 #X connect 2 0 1 0;
-#X connect 3 0 10 0;
-#X connect 5 0 3 0;
-#X connect 6 0 7 0;
-#X connect 7 0 3 1;
-#X connect 10 0 29 0;
-#X connect 11 0 30 0;
-#X connect 15 0 14 0;
-#X connect 16 0 14 1;
-#X connect 17 0 14 2;
-#X connect 18 0 14 3;
-#X connect 19 0 14 4;
-#X connect 29 0 11 0;
-#X connect 30 0 0 0;
-#X connect 30 0 0 1;
+#X connect 3 0 9 0;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 1;
+#X connect 9 0 27 0;
+#X connect 10 0 28 0;
+#X connect 14 0 13 0;
+#X connect 15 0 13 1;
+#X connect 16 0 13 2;
+#X connect 17 0 13 3;
+#X connect 18 0 13 4;
+#X connect 27 0 10 0;
+#X connect 28 0 0 0;
+#X connect 28 0 0 1;
diff --git a/pd/doc/3.audio.examples/E06.exponential.pd b/pd/doc/3.audio.examples/E06.exponential.pd
index 02fe058b9..b5bb97f30 100644
--- a/pd/doc/3.audio.examples/E06.exponential.pd
+++ b/pd/doc/3.audio.examples/E06.exponential.pd
@@ -1,13 +1,13 @@
-#N canvas 88 112 754 729 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 410 22 486 623 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E06-signal 882 float 0;
 #X coords 0 1.02 882 -1.02 200 130 1;
-#X restore 509 46 graph;
-#X obj 14 265 hip~ 5;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 228 206 graph;
+#X obj 14 301 hip~ 5;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E06-spectrum 128 float 0;
 #X coords 0 4300 127 -40 257 130 1;
-#X restore 463 222 graph;
+#X restore 171 402 graph;
 #N canvas 45 83 558 569 fft 0;
 #X obj 19 61 inlet~;
 #X obj 208 212 inlet;
@@ -29,16 +29,16 @@ until much later.;
 #X obj 16 425 samplerate~;
 #X obj 16 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X floatatom 16 472 5 0 0 0 - - -;
+#X floatatom 16 472 5 0 0 0 - - -, f 5;
 #X obj 16 448 / 256;
 #X obj 16 378 loadbang;
-#X floatatom 16 541 5 0 0 0 - - -;
+#X floatatom 16 541 5 0 0 0 - - -, f 5;
 #X obj 24 494 s fundamental;
 #X obj 16 517 ftom;
 #X text 14 319 At load time \, calculate a good choice of fundamental
 frequency for showing spectra: the 16th bin in a 4096-point spectrum
 \, so SR*16/4096 or SR/256.;
-#X floatatom 191 480 5 0 0 0 - - -;
+#X floatatom 191 480 5 0 0 0 - - -, f 5;
 #X obj 191 456 / 4096;
 #X text 187 425 One bin is SR/4096:;
 #X obj 191 502 s freq-step;
@@ -74,32 +74,31 @@ frequency for showing spectra: the 16th bin in a 4096-point spectrum
 #X connect 31 0 28 0;
 #X connect 31 0 29 0;
 #X connect 32 0 31 0;
-#X restore 22 238 pd fft;
-#X text 509 178 ---- 0.02 seconds ----;
-#X obj 82 217 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 22 279 pd fft;
+#X text 260 338 ---- 0.02 seconds ----;
+#X obj 82 237 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 14 293 output~;
-#X text 499 708 updated for Pd version 0.37;
-#X text 494 355 1;
-#X text 528 355 2;
-#X text 560 355 3;
-#X text 592 355 4;
-#X text 625 355 5;
-#X text 655 355 6;
-#X text 686 355 7;
-#X text 462 355 0;
-#X text 496 372 -- partial number --;
-#X text 711 100 0;
-#X obj 12 30 r fundamental;
-#X obj 12 57 osc~;
-#X text 573 26 WAVEFORM;
-#X text 557 204 SPECTRUM;
-#X text 723 338 0;
-#X text 721 217 1;
-#X text 722 276 0.5;
-#X obj 82 238 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+#X obj 14 329 output~;
+#X text 202 535 1;
+#X text 236 535 2;
+#X text 268 535 3;
+#X text 300 535 4;
+#X text 333 535 5;
+#X text 363 535 6;
+#X text 394 535 7;
+#X text 170 535 0;
+#X text 235 552 -- partial number --;
+#X text 430 260 0;
+#X obj 12 50 r fundamental;
+#X obj 12 73 osc~;
+#X text 299 186 WAVEFORM;
+#X text 265 384 SPECTRUM;
+#X text 431 518 0;
+#X text 429 397 1;
+#X text 430 456 0.5;
+#X obj 82 258 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E06-tab 1003 float 1;
 #A 0 1.01005 1 0.99005 0.980199 0.970446 0.960789 0.951229 0.941765
 0.932394 0.923116 0.913931 0.904837 0.895834 0.88692 0.878095 0.869358
@@ -249,21 +248,21 @@ frequency for showing spectra: the 16th bin in a 4096-point spectrum
 4.82073e-05 4.77276e-05 4.72527e-05 4.67826e-05 4.63171e-05;
 #A 1000 0 0 0;
 #X coords 0 1 1002 0 180 100 1;
-#X restore 254 118 graph;
-#N canvas 140 79 589 249 make-table 0;
-#X obj 164 81 t b b;
-#X obj 236 106 f;
-#X obj 274 106 + 1;
-#X msg 258 83 0;
-#X obj 164 104 until;
-#X obj 236 136 t f f;
-#X obj 164 62 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 228 66 graph;
+#N canvas 140 79 400 238 make-table 0;
+#X obj 104 71 t b b;
+#X obj 104 126 f;
+#X obj 142 126 + 1;
+#X msg 147 94 0;
+#X obj 104 94 until;
+#X obj 104 148 t f f;
+#X obj 104 52 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 104 164 expr exp(-($f1-1)/100);
-#X obj 163 132 sel 999;
+#X obj 104 174 expr exp(-($f1-1)/100);
+#X obj 41 156 sel 999;
 #X text 35 10 This patch computes a decaying exponential function \,
 100 points per unit.;
-#X obj 137 196 tabwrite E06-tab;
+#X obj 104 196 tabwrite E06-tab;
 #X connect 0 0 4 0;
 #X connect 0 1 3 0;
 #X connect 1 0 2 0;
@@ -277,38 +276,37 @@ frequency for showing spectra: the 16th bin in a 4096-point spectrum
 #X connect 6 0 0 0;
 #X connect 7 0 10 0;
 #X connect 8 0 4 1;
-#X restore 302 258 pd make-table;
-#X text 251 95 waveshaping function;
-#X text 438 210 0;
-#X text 437 114 1;
-#X obj 12 168 +~ 1;
-#X obj 12 146 *~ 100;
-#X obj 12 83 +~ 1;
-#X floatatom 68 53 5 0 200 0 - - -;
-#X obj 68 96 pack 0 50;
-#X obj 68 120 line~;
-#X text 157 69 tenths;
-#X obj 68 73 / 10;
-#X obj 12 124 *~;
-#X obj 13 190 tabread4~ E06-tab;
-#X text 711 40 1;
-#X text 712 160 -1;
-#X text 103 237 <-- repeatedly;
-#X text 104 217 <-- graph once;
-#X text 121 0 Waveshaping using an exponential function;
-#X text 120 53 <--index in;
-#X text 250 218 0;
-#X text 417 220 10;
-#X text 14 652 When the index of modulation exceeds 5 we scan past
+#X restore 107 356 pd make-table;
+#X text 251 35 waveshaping function;
+#X text 412 158 0;
+#X text 411 62 1;
+#X obj 12 188 +~ 1;
+#X obj 12 166 *~ 100;
+#X obj 12 95 +~ 1;
+#X floatatom 68 73 5 0 200 0 - - -, f 5;
+#X obj 68 115 pack 0 50;
+#X obj 68 137 line~;
+#X text 126 88 tenths;
+#X obj 68 93 / 10;
+#X obj 12 144 *~;
+#X obj 13 210 tabread4~ E06-tab;
+#X text 430 200 1;
+#X text 431 320 -1;
+#X text 103 257 <-- repeatedly;
+#X text 104 237 <-- graph once;
+#X text 107 73 <--index in;
+#X text 224 166 0;
+#X text 391 168 10;
+#X text 12 766 When the index of modulation exceeds 5 we scan past
 the right hand border of the table (the thousandth point \, corresponding
 to exp(-10). This isn't a problem because the values are all close
 to zero there.;
-#X text 14 555 Table lookup is prepared as follows. First add one to
+#X text 11 691 Table lookup is prepared as follows. First add one to
 the sinusoid and adjust its amplitude according to index \; it ranges
 from 0 to 2*index. Then adjust for the table's input scale (100 points
 per unit \, so multiply by 100) and add one to skip the interpolation
 point at the beginning of the table.;
-#X text 13 398 Here we use an exponential function as a waveshaping
+#X text 11 572 Here we use an exponential function as a waveshaping
 transfer function. The theory is shown in detail in the accompanying
 book \, but in short \, we adjust the sinusoid so that \, as the index
 increases \, we scan starting from the left of the transfer function
@@ -317,19 +315,45 @@ exp(-x) with x varying from 0 to 10 When the index is zero \, the output
 is the constant 1 and the spectrum holds only DC. As the index grows
 \, the output is a sequence of steadily narrower pulses \, whose spectrum
 gets progressively fatter.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header waveshaping_using_an_exponential_function
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 832 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION waveshaping using an exponential function
+;
+#X restore 392 834 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 waveshaping- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 834 pd References;
+#X obj 6 834 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 6 0;
 #X connect 1 0 6 1;
 #X connect 5 0 3 1;
-#X connect 18 0 19 0;
-#X connect 19 0 33 0;
-#X connect 25 0 3 2;
-#X connect 31 0 40 0;
-#X connect 32 0 31 0;
-#X connect 33 0 39 0;
-#X connect 34 0 38 0;
-#X connect 35 0 36 0;
-#X connect 36 0 39 1;
-#X connect 38 0 35 0;
-#X connect 39 0 32 0;
-#X connect 40 0 3 0;
-#X connect 40 0 1 0;
+#X connect 17 0 18 0;
+#X connect 18 0 32 0;
+#X connect 24 0 3 2;
+#X connect 30 0 39 0;
+#X connect 31 0 30 0;
+#X connect 32 0 38 0;
+#X connect 33 0 37 0;
+#X connect 34 0 35 0;
+#X connect 35 0 38 1;
+#X connect 37 0 34 0;
+#X connect 38 0 31 0;
+#X connect 39 0 3 0;
+#X connect 39 0 1 0;
diff --git a/pd/doc/3.audio.examples/E07.evenodd.pd b/pd/doc/3.audio.examples/E07.evenodd.pd
index e6d3851e0..340957244 100644
--- a/pd/doc/3.audio.examples/E07.evenodd.pd
+++ b/pd/doc/3.audio.examples/E07.evenodd.pd
@@ -1,72 +1,71 @@
-#N canvas 187 149 784 591 12;
-#X obj 230 101 f;
-#X obj 264 77 + 1;
-#X obj 264 101 mod 11;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 340 102 729 544 10;
+#X obj 230 131 f;
+#X obj 264 107 + 1;
+#X obj 264 131 mod 11;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E07 11 float 0;
 #X coords 0 96 11 36 100 160 1;
-#X restore 528 15 graph;
-#X floatatom 320 53 0 10 999 0 - - -;
-#X obj 230 173 mtof;
-#X msg 26 92 1;
-#X obj 27 217 *~;
-#X obj 27 267 cos~;
-#X obj 27 292 hip~ 5;
-#X obj 27 244 +~ 0.1;
-#X floatatom 61 144 0 0 0 0 - - -;
-#X floatatom 166 145 0 0 200 0 - - -;
-#X floatatom 96 144 0 0 999 0 - - -;
-#X floatatom 131 144 0 0 999 0 - - -;
-#X msg 112 267 0;
-#X msg 112 245 0.1;
-#X msg 112 289 0.25;
-#X text 68 108 ADSR controls;
-#X text 106 125 A;
-#X text 141 125 D;
-#X text 176 125 S;
-#X floatatom 320 77 0 1 11 0 - - -;
-#X text 354 79 <--increment;
-#X text 355 56 <--msec;
-#X obj 26 193 *~ 0.01;
-#X obj 230 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+#X restore 600 46 graph;
+#X floatatom 320 83 0 10 999 0 - - -;
+#X obj 230 203 mtof;
+#X msg 26 122 1;
+#X obj 27 247 *~;
+#X obj 27 297 cos~;
+#X obj 27 322 hip~ 5;
+#X obj 27 274 +~ 0.1;
+#X floatatom 49 174 0 0 0 0 - - -;
+#X floatatom 137 174 0 0 200 0 - - -;
+#X floatatom 77 174 0 0 999 0 - - -;
+#X floatatom 107 174 0 0 999 0 - - -;
+#X msg 112 297 0;
+#X msg 112 275 0.1;
+#X msg 112 319 0.25;
+#X text 56 138 ADSR controls;
+#X text 83 155 A;
+#X text 113 155 D;
+#X text 143 154 S;
+#X floatatom 320 107 0 1 11 0 - - -;
+#X text 354 109 <--increment;
+#X text 355 86 <--msec;
+#X obj 26 223 *~ 0.01;
+#X obj 230 59 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
-#X obj 27 321 output~;
-#X text 527 562 updated for Pd version 0.37;
-#X obj 26 170 adsr 70 10 90 50 500;
-#X obj 230 150 +;
-#X floatatom 265 150 0 -48 120 0 - - -;
-#X text 299 152 <--transpose;
+#X obj 27 351 output~;
+#X obj 26 200 adsr 70 10 90 50 500;
+#X obj 230 180 +;
+#X floatatom 265 180 0 -48 120 0 - - -;
+#X text 299 182 <--transpose;
 #N canvas 0 0 538 208 make-table 0;
 #X obj 38 71 loadbang;
-#X text 16 11 This patch loads a sequence of pitches into E07. The
+#X text 16 11 This patch loads a sequence of pitches into array1. The
 values are floating-point \, so we could use microtones (60.5 \, for
 example) if we wish.;
-#X msg 38 99 \; E07 0 55 56 57 55 57 61 55 61 63 57 63 \; E07
-yticks 36 12 1 \; E07 ylabel 12 36 48 60 72 84 96;
+#X msg 38 99 \; array1 0 55 56 57 55 57 61 55 61 63 57 63 \; array1
+yticks 36 12 1 \; array1 ylabel 12 36 48 60 72 84 96;
 #X connect 0 0 2 0;
-#X restore 527 195 pd make-table;
-#X obj 176 50 sel 0;
-#X msg 26 69 0;
-#X text 48 125 level;
-#X obj 230 53 metro 130;
-#X obj 60 217 osc~;
-#X text 111 225 symmetry;
-#X text 157 265 even;
-#X text 165 288 odd;
-#X text 147 244 mixed;
-#X obj 230 126 tabread E07;
-#X text 253 26 <--ON/OFF;
-#X text 238 232 This patch uses a stepping sequencer to control a waveshaping
+#X restore 527 225 pd make-table;
+#X obj 176 80 sel 0;
+#X msg 26 99 0;
+#X text 40 155 level;
+#X obj 230 83 metro 130;
+#X obj 60 247 osc~;
+#X text 111 255 symmetry;
+#X text 157 295 even;
+#X text 165 318 odd;
+#X text 147 274 mixed;
+#X obj 230 156 tabread E07;
+#X text 253 56 <--ON/OFF;
+#X text 208 262 This patch uses a stepping sequencer to control a waveshaping
 instrument. A metronome (metro 130) drives a counter (f \, +1 \, and
 mod 11) which counts repeatedly through 11 values which are read from
 the stored table (tabread E07). The values may be read in sequence
 \, by twos or threes \, etc. \, according to the "increment" parameter.
 ;
-#X text 239 328 The metronome also triggers an ADSR envelope \, whose
+#X text 207 337 The metronome also triggers an ADSR envelope \, whose
 parameters may also be changed using the "level" \, "A" \, "D" \, and
 "S" controls.;
-#X text 142 5 SEQUENCED WAVESHAPING SYNTHESIZER;
-#X text 240 380 The synthesis (osc~ \, *~ \, +~ 0.1 \, cos~) is a very
+#X text 142 35 SEQUENCED WAVESHAPING SYNTHESIZER;
+#X text 206 379 The synthesis (osc~ \, *~ \, +~ 0.1 \, cos~) is a very
 simple application of the waveshaping technique. The oscillator (whose
 amplitude depends on the ADSR generator) is used as an index into the
 "cos~" wavetable. An additional offset ("symmetry") controls how the
@@ -75,35 +74,60 @@ zero \, the oscillator reads into the (even) cosine function (producing
 only even harmonics). If the offset is 0.25 \, we read 1/4 wave into
 the cosine function: the result is an odd function and we get odd harmonics.
 Between the two we get mixtures of even and odd.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header sequenced_waveshaping_synthesizer
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 522 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION sequenced waveshaping synthesizer;
+#X restore 392 524 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 waveshaping synthesizer- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 524 pd References;
+#X obj 6 524 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 1 0;
-#X connect 0 0 43 0;
+#X connect 0 0 42 0;
 #X connect 1 0 2 0;
 #X connect 2 0 0 1;
-#X connect 4 0 37 1;
-#X connect 5 0 38 0;
-#X connect 6 0 29 0;
+#X connect 4 0 36 1;
+#X connect 5 0 37 0;
+#X connect 6 0 28 0;
 #X connect 7 0 10 0;
 #X connect 8 0 9 0;
 #X connect 9 0 27 0;
 #X connect 9 0 27 1;
 #X connect 10 0 8 0;
-#X connect 11 0 29 1;
-#X connect 12 0 29 4;
-#X connect 13 0 29 2;
-#X connect 14 0 29 3;
+#X connect 11 0 28 1;
+#X connect 12 0 28 4;
+#X connect 13 0 28 2;
+#X connect 14 0 28 3;
 #X connect 15 0 10 1;
 #X connect 16 0 10 1;
 #X connect 17 0 10 1;
 #X connect 22 0 1 1;
 #X connect 25 0 7 0;
-#X connect 26 0 34 0;
-#X connect 26 0 37 0;
-#X connect 29 0 25 0;
-#X connect 30 0 5 0;
-#X connect 31 0 30 1;
-#X connect 34 0 35 0;
-#X connect 35 0 29 0;
-#X connect 37 0 0 0;
-#X connect 37 0 6 0;
-#X connect 38 0 7 1;
-#X connect 43 0 30 0;
+#X connect 26 0 33 0;
+#X connect 26 0 36 0;
+#X connect 28 0 25 0;
+#X connect 29 0 5 0;
+#X connect 30 0 29 1;
+#X connect 33 0 34 0;
+#X connect 34 0 28 0;
+#X connect 36 0 0 0;
+#X connect 36 0 6 0;
+#X connect 37 0 7 1;
+#X connect 42 0 29 0;
diff --git a/pd/doc/3.audio.examples/E08.phase.mod.pd b/pd/doc/3.audio.examples/E08.phase.mod.pd
index 53a6e0529..2cbfd66b9 100644
--- a/pd/doc/3.audio.examples/E08.phase.mod.pd
+++ b/pd/doc/3.audio.examples/E08.phase.mod.pd
@@ -1,45 +1,44 @@
-#N canvas 36 68 722 738 12;
-#X obj 224 164 *~;
-#X floatatom 224 107 0 0 0 0 - - -;
-#X obj 312 144 line~;
-#X floatatom 128 121 0 0 0 0 - - -;
-#X obj 128 235 cos~;
-#X obj 128 191 +~;
-#X obj 224 132 osc~ 0;
-#X obj 312 118 pack 0 50;
-#X floatatom 312 65 0 0 0 0 - - -;
-#X obj 312 92 / 100;
-#X text 286 27 modulation index;
-#X text 286 42 in hundredths;
-#X text 125 78 carrier;
-#X text 124 96 frequency;
-#X text 209 83 frequency;
-#X text 210 66 modulation;
-#X text 33 132 carrier;
-#X text 33 147 phase -->;
-#X text 6 175 phase;
-#X text 5 190 modulation-->;
-#X text 12 217 output;
-#X text 11 234 waveform -->;
-#X text 129 1 PHASE MODULATION;
-#X text 16 378 Most implementations of "FM" actually use phase \, not
+#N canvas 371 19 618 656 10;
+#X obj 194 174 *~;
+#X floatatom 194 117 0 0 0 0 - - -;
+#X obj 282 154 line~;
+#X floatatom 98 131 0 0 0 0 - - -;
+#X obj 98 245 cos~;
+#X obj 98 201 +~;
+#X obj 194 142 osc~ 0;
+#X obj 282 128 pack 0 50;
+#X floatatom 282 75 0 0 0 0 - - -;
+#X obj 282 102 / 100;
+#X text 256 37 modulation index;
+#X text 256 52 in hundredths;
+#X text 95 88 carrier;
+#X text 94 106 frequency;
+#X text 179 93 frequency;
+#X text 180 76 modulation;
+#X text 33 142 carrier;
+#X text 33 157 phase -->;
+#X text 14 185 phase;
+#X text 13 200 modulation-->;
+#X text 20 227 output;
+#X text 19 244 waveform -->;
+#X text 19 366 Most implementations of "FM" actually use phase \, not
 frequency \, modulation \, because it extends in a more natural way
 to "multi-operator FM" with three or more oscillators.;
-#X text 16 434 To do phase modulation \, we split the "carrier oscillator"
+#X text 18 409 To do phase modulation \, we split the "carrier oscillator"
 into its phase calculation (phasor~) and its waveform lookup (cos~).
 These together would be equivalent to an osc~ object \, but the "+~"
 between them adds the modulating oscillator's output to the phase.
 ;
-#X text 20 652 We also have to use a line~ to smooth changes in the
+#X text 23 579 We also have to use a line~ to smooth changes in the
 modulation index \, which wasn't necessary in the previous patch.;
-#X obj 128 148 phasor~;
-#X obj 117 557 cos~;
-#X obj 117 529 phasor~;
-#X text 60 539 this:;
-#X text 219 532 is the same;
-#X text 220 551 as this:;
-#X obj 335 544 osc~;
-#N canvas 0 0 450 300 graph2 0;
+#X obj 98 158 phasor~;
+#X obj 79 504 cos~;
+#X obj 79 476 phasor~;
+#X text 22 486 this:;
+#X text 181 479 is the same;
+#X text 182 498 as this:;
+#X obj 297 491 osc~;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array phase-out 441 float 1;
 #A 0 0.43245 0.433463 0.434452 0.435418 0.43636 0.43728 0.438178 0.439056
 0.439912 0.440749 0.441567 0.442366 0.443148 0.443912 0.444659 0.445391
@@ -161,36 +160,60 @@ modulation index \, which wasn't necessary in the previous patch.;
 -0.600055 -0.582513 -0.564966 -0.547418 -0.529898 -0.512429 -0.495016
 -0.477676 -0.460438 -0.443287 -0.426265 -0.409364;
 #X coords 0 1 440 -1 200 140 1;
-#X restore 509 190 graph;
-#X obj 213 246 tabwrite~ phase-out;
-#X obj 213 273 tabwrite~ cos-out;
-#X msg 213 221 bang;
-#X text 260 220 <-- graph them;
-#X obj 126 296 output~;
-#X obj 127 270 hip~;
-#X text 408 98 ramped to avoid;
-#X text 407 114 clicks.);
-#X text 407 82 (the index is;
-#X text 435 704 updated for Pd version 0.37;
-#X text 21 588 The "modulation" index \, which in true FM is in units
+#X restore 399 200 graph;
+#X obj 183 256 tabwrite~ phase-out;
+#X obj 183 283 tabwrite~ cos-out;
+#X msg 183 231 bang;
+#X text 230 230 <-- graph them;
+#X obj 96 306 output~;
+#X obj 97 280 hip~;
+#X text 348 108 ramped to avoid;
+#X text 347 124 clicks.);
+#X text 347 92 (the index is;
+#X text 23 526 The "modulation" index \, which in true FM is in units
 of Hertz \, is dimensionless for phase moduation. "Good" values tend
 to be between 0 and 1... in this patch the index is in hundredths.
 ;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header phase_modulation
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 634 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION phase modulation;
+#X restore 392 636 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 phase modulation- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 636 pd References;
+#X obj 6 636 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 5 1;
 #X connect 1 0 6 0;
 #X connect 2 0 0 1;
-#X connect 3 0 26 0;
-#X connect 4 0 35 0;
-#X connect 4 0 39 0;
+#X connect 3 0 25 0;
+#X connect 4 0 34 0;
+#X connect 4 0 38 0;
 #X connect 5 0 4 0;
-#X connect 5 0 34 0;
+#X connect 5 0 33 0;
 #X connect 6 0 0 0;
 #X connect 7 0 2 0;
 #X connect 8 0 9 0;
 #X connect 9 0 7 0;
-#X connect 26 0 5 0;
-#X connect 28 0 27 0;
-#X connect 36 0 34 0;
-#X connect 36 0 35 0;
-#X connect 39 0 38 0;
-#X connect 39 0 38 1;
+#X connect 25 0 5 0;
+#X connect 27 0 26 0;
+#X connect 35 0 33 0;
+#X connect 35 0 34 0;
+#X connect 38 0 37 0;
+#X connect 38 0 37 1;
diff --git a/pd/doc/3.audio.examples/E09.FM.spectrum.pd b/pd/doc/3.audio.examples/E09.FM.spectrum.pd
index 21094b41b..35849f7cb 100644
--- a/pd/doc/3.audio.examples/E09.FM.spectrum.pd
+++ b/pd/doc/3.audio.examples/E09.FM.spectrum.pd
@@ -1,16 +1,15 @@
-#N canvas 127 136 697 536 12;
-#X obj 94 188 *~;
-#X obj 136 188 line~;
-#X obj 18 179 cos~;
-#X obj 18 154 +~;
-#X obj 136 165 pack 0 50;
-#X floatatom 136 117 0 0 0 0 - - -;
-#X obj 136 141 / 100;
-#X obj 18 129 phasor~;
-#X obj 18 284 output~;
-#X obj 17 253 hip~;
-#X text 442 513 updated for Pd version 0.37;
-#N canvas 122 211 558 609 fft 1;
+#N canvas 399 119 551 495 10;
+#X obj 94 208 *~;
+#X obj 136 208 line~;
+#X obj 18 199 cos~;
+#X obj 18 174 +~;
+#X obj 136 185 pack 0 50;
+#X floatatom 136 137 0 0 0 0 - - -;
+#X obj 136 161 / 100;
+#X obj 18 149 phasor~;
+#X obj 18 304 output~;
+#X obj 17 273 hip~;
+#N canvas 122 159 558 609 fft 0;
 #X obj 19 61 inlet~;
 #X obj 208 212 inlet;
 #X obj 29 92 rfft~;
@@ -31,7 +30,7 @@ until much later.;
 #X obj 19 459 samplerate~;
 #X obj 19 436 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X floatatom 19 506 5 0 0 0 - - -;
+#X floatatom 19 506 5 0 0 0 - - -, f 5;
 #X obj 19 482 / 256;
 #X obj 19 412 loadbang;
 #X obj 75 528 s fundamental;
@@ -74,54 +73,79 @@ frequency for showing spectra: the 16th bin in a 4096-point spectrum
 #X connect 28 0 29 0;
 #X connect 28 1 20 0;
 #X connect 31 0 27 0;
-#X restore 62 243 pd fft;
-#X obj 122 222 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 62 263 pd fft;
+#X obj 122 242 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 122 243 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 122 263 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X text 143 242 <-- repeatedly;
-#X text 144 222 <-- graph once;
-#N canvas 0 0 450 300 graph1 0;
+#X text 143 262 <-- repeatedly;
+#X text 144 242 <-- graph once;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E09-signal 882 float 0;
 #X coords 0 1.02 882 -1.02 200 80 1;
-#X restore 433 28 graph;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 283 46 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E09-spectrum 259 float 0;
 #X coords 0 0.51 258 -0.008 259 130 1;
-#X restore 403 175 graph;
-#X text 442 114 ---- 0.02 seconds ----;
-#X text 433 306 2;
-#X text 464 306 4;
-#X text 403 306 0;
-#X text 441 321 -- partial number --;
-#X text 497 8 WAVEFORM;
-#X text 497 157 SPECTRUM;
-#X text 663 291 0;
-#X text 664 173 0.5;
-#X obj 93 117 osc~;
-#X obj 93 86 r fundamental;
-#X text 171 117 index (x100);
-#X text 496 306 6;
-#X text 529 306 8;
-#X text 557 306 10;
-#X text 589 306 12;
-#X text 621 306 14;
-#X text 43 3 SPECTRUM OF TWO-OPERATOR PHASE MODULATION;
-#X floatatom 18 58 3 0 15 0 - - -;
-#X obj 18 105 *;
-#X obj 18 33 r cm;
-#X text 52 57 carrier harmonic #;
-#X text 71 367 This patch measures the spectrum of two-operator phase
+#X restore 253 193 graph;
+#X text 292 132 ---- 0.02 seconds ----;
+#X text 283 324 2;
+#X text 314 324 4;
+#X text 253 324 0;
+#X text 291 339 -- partial number --;
+#X text 347 26 WAVEFORM;
+#X text 347 175 SPECTRUM;
+#X text 513 309 0;
+#X text 514 191 0.5;
+#X obj 93 137 osc~;
+#X obj 93 106 r fundamental;
+#X text 171 137 index (x100);
+#X text 346 324 6;
+#X text 379 324 8;
+#X text 407 324 10;
+#X text 439 324 12;
+#X text 471 324 14;
+#X floatatom 18 78 3 0 15 0 - - -, f 3;
+#X obj 18 125 *;
+#X obj 18 53 r cm;
+#X text 52 77 carrier harmonic #;
+#X text 15 363 This patch measures the spectrum of two-operator phase
 modulation. The carrier frequency is initially six times the modulation
 frequency \, but you can change it with the "carrier harmonic #" control.
 Changing the index changes the relative strengths of the harmonics.
 Past a certain index (which depends on the carrier frequency) the lower
 sidebands begin to reflect about the left edge of the spectrum \, causing
 complicated interference effects.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header spectrum_of_two-operator_phase_modulation
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 473 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION spectrum of two-operator phase modulation
+;
+#X restore 392 475 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 phase modulation- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 475 pd References;
+#X obj 6 475 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 3 1;
 #X connect 1 0 0 1;
 #X connect 2 0 9 0;
-#X connect 2 0 11 0;
+#X connect 2 0 10 0;
 #X connect 3 0 2 0;
 #X connect 4 0 1 0;
 #X connect 5 0 6 0;
@@ -129,11 +153,11 @@ complicated interference effects.;
 #X connect 7 0 3 0;
 #X connect 9 0 8 0;
 #X connect 9 0 8 1;
-#X connect 12 0 11 1;
-#X connect 13 0 11 2;
-#X connect 27 0 0 0;
-#X connect 28 0 27 0;
-#X connect 28 0 37 1;
-#X connect 36 0 37 0;
-#X connect 37 0 7 0;
-#X connect 38 0 36 0;
+#X connect 11 0 10 1;
+#X connect 12 0 10 2;
+#X connect 26 0 0 0;
+#X connect 27 0 26 0;
+#X connect 27 0 35 1;
+#X connect 34 0 35 0;
+#X connect 35 0 7 0;
+#X connect 36 0 34 0;
diff --git a/pd/doc/3.audio.examples/E10.complex.FM.pd b/pd/doc/3.audio.examples/E10.complex.FM.pd
index fbd6ce990..2b3ae3831 100644
--- a/pd/doc/3.audio.examples/E10.complex.FM.pd
+++ b/pd/doc/3.audio.examples/E10.complex.FM.pd
@@ -1,15 +1,14 @@
-#N canvas 165 123 695 505 12;
-#X obj 94 247 *~;
-#X obj 109 223 line~;
-#X obj 18 179 cos~;
-#X obj 18 154 +~;
-#X obj 109 200 pack 0 50;
-#X floatatom 109 152 0 0 300 0 - - -;
-#X obj 109 176 / 100;
-#X obj 18 129 phasor~;
-#X obj 20 340 output~;
-#X obj 19 309 hip~;
-#X text 437 472 updated for Pd version 0.37;
+#N canvas 378 124 615 479 10;
+#X obj 98 256 *~;
+#X obj 113 232 line~;
+#X obj 22 188 cos~;
+#X obj 22 163 +~;
+#X obj 113 209 pack 0 50;
+#X floatatom 113 161 0 0 300 0 - - -;
+#X obj 113 185 / 100;
+#X obj 22 138 phasor~;
+#X obj 24 349 output~;
+#X obj 23 318 hip~;
 #N canvas 62 299 558 609 fft 0;
 #X obj 19 61 inlet~;
 #X obj 208 212 inlet;
@@ -31,7 +30,7 @@ until much later.;
 #X obj 16 425 samplerate~;
 #X obj 16 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X floatatom 16 472 5 0 0 0 - - -;
+#X floatatom 16 472 5 0 0 0 - - -, f 5;
 #X obj 16 448 / 256;
 #X obj 16 378 loadbang;
 #X obj 72 494 s fundamental;
@@ -43,7 +42,7 @@ frequency for showing spectra: the 16th bin in a 4096-point spectrum
 #X text 273 232 toggle to graph repeatedly;
 #X text 262 212 bang to graph once;
 #X obj 16 494 t b f;
-#X obj 19 295 tabwrite~ E10-spectrum;
+#X obj 19 295 tabwrite~ E10-signal;
 #X obj 208 295 tabwrite~ E10-spectrum;
 #X text 72 536 set carrier multiplier and modulation multipliers after
 fundamental;
@@ -70,62 +69,86 @@ fundamental;
 #X connect 23 0 22 0;
 #X connect 26 0 30 0;
 #X connect 26 1 20 0;
-#X restore 65 311 pd fft;
-#X obj 125 290 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 69 320 pd fft;
+#X obj 129 299 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 125 311 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#X obj 129 320 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X text 146 310 <-- repeatedly;
-#X text 147 290 <-- graph once;
-#N canvas 0 0 450 300 graph1 0;
+#X text 150 319 <-- repeatedly;
+#X text 151 299 <-- graph once;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E10-spectrum 259 float 0;
 #X coords 0 2100 258 -20 259 130 1;
-#X restore 396 122 graph;
-#X text 426 253 2;
-#X text 457 253 4;
-#X text 396 253 0;
-#X text 434 268 -- partial number --;
-#X text 490 104 SPECTRUM;
-#X text 656 238 0;
-#X text 657 120 0.5;
-#X obj 93 128 osc~;
-#X obj 267 79 r fundamental;
-#X text 489 253 6;
-#X text 522 253 8;
-#X text 550 253 10;
-#X text 582 253 12;
-#X text 614 253 14;
-#X floatatom 18 58 3 0 15 0 - - -;
-#X obj 18 105 *;
-#X obj 18 33 r cm;
-#X text 43 3 SPECTRUM OF COMPLEX PHASE MODULATION;
-#X text 23 73 carrier;
-#X obj 93 107 *;
-#X floatatom 93 60 3 0 15 0 - - -;
-#X text 99 74 mod 1;
-#X obj 93 35 r m1;
-#X text 138 154 index1;
-#X obj 197 249 *~;
-#X obj 212 225 line~;
-#X obj 212 202 pack 0 50;
-#X floatatom 212 154 0 0 300 0 - - -;
-#X obj 212 178 / 100;
-#X obj 196 130 osc~;
-#X obj 196 109 *;
-#X floatatom 196 62 3 0 15 0 - - -;
-#X text 202 76 mod 2;
-#X text 246 154 index2;
-#X obj 196 37 r m2;
-#X text 126 349 Now we introduce a second modulator oscillator. The
+#X restore 320 151 graph;
+#X text 350 282 2;
+#X text 381 282 4;
+#X text 320 282 0;
+#X text 379 299 -- partial number --;
+#X text 414 133 SPECTRUM;
+#X text 583 268 0;
+#X text 584 150 0.5;
+#X obj 97 137 osc~;
+#X obj 271 88 r fundamental;
+#X text 413 282 6;
+#X text 446 282 8;
+#X text 470 283 10;
+#X text 502 283 12;
+#X text 534 283 14;
+#X floatatom 22 67 3 0 15 0 - - -, f 3;
+#X obj 22 114 *;
+#X obj 22 42 r cm;
+#X text 27 82 carrier;
+#X obj 97 116 *;
+#X floatatom 97 67 3 0 15 0 - - -, f 3;
+#X text 103 83 mod 1;
+#X obj 97 42 r m1;
+#X text 142 163 index1;
+#X obj 201 258 *~;
+#X obj 216 234 line~;
+#X obj 216 211 pack 0 50;
+#X floatatom 216 163 0 0 300 0 - - -;
+#X obj 216 187 / 100;
+#X obj 200 139 osc~;
+#X obj 200 118 *;
+#X floatatom 200 67 3 0 15 0 - - -, f 3;
+#X text 206 85 mod 2;
+#X text 250 163 index2;
+#X obj 200 42 r m2;
+#X text 130 358 Now we introduce a second modulator oscillator. The
 carrier is on the 8th harmonic and the two modulators are at 2 and
 3 times the fundamental. When either index of modulation is zero \,
 changing the other index gives the familiar 2-operator FM result. But
 if index2 is nonzero (try around 10 \, for example) then sliding index1
 upward from 0 introduces sidebands around each of the sidebands.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header spectrum_of_complex_phase_modulation
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 457 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION spectrum of complex phase modulation;
+#X restore 392 459 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 complex phase modulation- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 459 pd References;
+#X obj 6 459 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 3 1;
 #X connect 1 0 0 1;
 #X connect 2 0 9 0;
-#X connect 2 0 11 0;
+#X connect 2 0 10 0;
 #X connect 3 0 2 0;
 #X connect 4 0 1 0;
 #X connect 5 0 6 0;
@@ -133,24 +156,24 @@ upward from 0 introduces sidebands around each of the sidebands.;
 #X connect 7 0 3 0;
 #X connect 9 0 8 0;
 #X connect 9 0 8 1;
-#X connect 12 0 11 1;
-#X connect 13 0 11 2;
-#X connect 24 0 0 0;
-#X connect 25 0 32 1;
-#X connect 25 0 36 1;
-#X connect 25 0 47 1;
-#X connect 31 0 32 0;
-#X connect 32 0 7 0;
-#X connect 33 0 31 0;
-#X connect 36 0 24 0;
-#X connect 37 0 36 0;
-#X connect 39 0 37 0;
-#X connect 41 0 3 1;
-#X connect 42 0 41 1;
-#X connect 43 0 42 0;
-#X connect 44 0 45 0;
-#X connect 45 0 43 0;
-#X connect 46 0 41 0;
-#X connect 47 0 46 0;
-#X connect 48 0 47 0;
-#X connect 51 0 48 0;
+#X connect 11 0 10 1;
+#X connect 12 0 10 2;
+#X connect 23 0 0 0;
+#X connect 24 0 31 1;
+#X connect 24 0 34 1;
+#X connect 24 0 45 1;
+#X connect 30 0 31 0;
+#X connect 31 0 7 0;
+#X connect 32 0 30 0;
+#X connect 34 0 23 0;
+#X connect 35 0 34 0;
+#X connect 37 0 35 0;
+#X connect 39 0 3 1;
+#X connect 40 0 39 1;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 43 0 41 0;
+#X connect 44 0 39 0;
+#X connect 45 0 44 0;
+#X connect 46 0 45 0;
+#X connect 49 0 46 0;
diff --git a/pd/doc/3.audio.examples/F01.pulse.pd b/pd/doc/3.audio.examples/F01.pulse.pd
index 5ef7e862b..cc6a1a1b1 100644
--- a/pd/doc/3.audio.examples/F01.pulse.pd
+++ b/pd/doc/3.audio.examples/F01.pulse.pd
@@ -1,82 +1,105 @@
-#N canvas 15 126 835 625 12;
-#X obj 272 163 line~;
-#X floatatom 53 64 0 0 0 0 - - -;
-#X obj 30 315 cos~;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 363 20 641 592 10;
+#X obj 242 131 line~;
+#X floatatom 58 58 0 0 0 0 - - -;
+#X obj 35 309 cos~;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array pulse-output 882 float 0;
 #X coords 0 1.02 882 -1.02 200 130 1;
-#X restore 583 409 graph;
-#X obj 53 91 phasor~ 0;
-#X obj 272 139 pack 0 50;
-#X floatatom 272 90 0 0 100 0 - - -;
-#X text 50 43 frequency;
-#X obj 53 115 -~ 0.5;
-#X obj 53 207 *~;
-#X obj 272 114 / 10;
-#X obj 30 265 clip~ -0.5 0.5;
-#X obj 30 418 hip~ 5;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 393 299 graph;
+#X obj 58 85 phasor~ 0;
+#X obj 242 107 pack 0 50;
+#X floatatom 242 58 0 0 100 0 - - -;
+#X text 55 37 frequency;
+#X obj 58 109 -~ 0.5;
+#X obj 58 201 *~;
+#X obj 242 82 / 10;
+#X obj 35 259 clip~ -0.5 0.5;
+#X obj 35 412 hip~ 5;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array phase-output 882 float 0;
 #X coords 0 1.02 882 -1.02 200 60 1;
-#X restore 583 150 graph;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 393 57 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array clip-output 882 float 0;
 #X coords 0 1.02 882 -1.02 200 130 1;
-#X restore 583 272 graph;
-#X text 113 114 phase -1/2 to 1/2;
-#X text 139 91 phase 0 to 1;
-#X text 119 5 PULSE GENERATOR;
-#X obj 19 234 tabwrite~ phase-output;
-#X obj 19 393 tabwrite~ pulse-output;
-#X text 103 419 high pass filter to cut DC;
-#X text 319 115 fix range;
-#X text 326 164 smooth it;
-#X text 314 187 add 1;
-#X text 41 148 <-- click to graph;
-#X text 83 209 increase amplitude;
-#X text 164 264 clip back to range -1/2 to 1/2;
-#X text 90 316 cosine wave lookup (-1/2 and 1/2 give -1);
-#X obj 272 188 +~ 1;
-#X obj 19 292 tabwrite~ clip-output;
-#X text 585 539 ---- 0.02 seconds ----;
-#X obj 19 148 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 393 142 graph;
+#X text 118 108 phase -1/2 to 1/2;
+#X text 144 85 phase 0 to 1;
+#X obj 24 228 tabwrite~ phase-output;
+#X obj 24 387 tabwrite~ pulse-output;
+#X text 108 413 high pass filter to cut DC;
+#X text 289 83 fix range;
+#X text 296 132 smooth it;
+#X text 284 155 add 1;
+#X text 46 142 <-- click to graph;
+#X text 88 203 increase amplitude;
+#X text 169 258 clip back to range -1/2 to 1/2;
+#X text 95 310 cosine wave lookup (-1/2 and 1/2 give -1);
+#X obj 242 156 +~ 1;
+#X obj 24 286 tabwrite~ clip-output;
+#X text 425 429 ---- 0.02 seconds ----;
+#X obj 24 142 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 30 446 output~;
-#X obj 30 338 +~ 1;
-#X obj 30 361 *~ 0.5;
-#X text 574 589 updated for Pd version 0.37;
-#X text 88 337 add one (range now from 0 to 2);
-#X text 96 360 ...and now from 0 to 1;
-#X text 20 531 This patch computes a pulse train \, with an "index"
+#X obj 35 440 output~;
+#X obj 35 332 +~ 1;
+#X obj 35 355 *~ 0.5;
+#X text 93 331 add one (range now from 0 to 2);
+#X text 101 354 ...and now from 0 to 1;
+#X text 20 493 This patch computes a pulse train \, with an "index"
 control that essentually squeezes the pulses. If "bandwidth" is zero
 you get a pure cosine wave \, and for larger values of the bandwidth
 \, the cosine wave is squeezed to fill smaller portions of the waveform.
 ;
-#X text 269 71 index;
-#X text 790 142 0.5;
-#X text 787 198 -0.5;
-#X text 785 264 1;
-#X text 787 390 -1;
-#X text 785 405 1;
-#X text 786 528 -1;
-#X connect 0 0 28 0;
+#X text 239 39 index;
+#X text 600 49 0.5;
+#X text 597 105 -0.5;
+#X text 595 134 1;
+#X text 597 260 -1;
+#X text 595 295 1;
+#X text 596 418 -1;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header pulse_generator
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 570 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION pulse generator;
+#X restore 392 572 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 pulse generator- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 572 pd References;
+#X obj 6 572 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 27 0;
 #X connect 1 0 4 0;
-#X connect 2 0 33 0;
+#X connect 2 0 32 0;
 #X connect 4 0 8 0;
 #X connect 5 0 0 0;
 #X connect 6 0 10 0;
 #X connect 8 0 9 0;
 #X connect 9 0 11 0;
-#X connect 9 0 18 0;
+#X connect 9 0 17 0;
 #X connect 10 0 5 0;
 #X connect 11 0 2 0;
-#X connect 11 0 29 0;
-#X connect 12 0 32 0;
-#X connect 12 0 32 1;
-#X connect 28 0 9 1;
-#X connect 31 0 18 0;
-#X connect 31 0 29 0;
-#X connect 31 0 19 0;
-#X connect 33 0 34 0;
-#X connect 34 0 19 0;
-#X connect 34 0 12 0;
+#X connect 11 0 28 0;
+#X connect 12 0 31 0;
+#X connect 12 0 31 1;
+#X connect 27 0 9 1;
+#X connect 30 0 17 0;
+#X connect 30 0 28 0;
+#X connect 30 0 18 0;
+#X connect 32 0 33 0;
+#X connect 33 0 18 0;
+#X connect 33 0 12 0;
diff --git a/pd/doc/3.audio.examples/F02.just.say.pd b/pd/doc/3.audio.examples/F02.just.say.pd
index b82b4953a..9047467b1 100644
--- a/pd/doc/3.audio.examples/F02.just.say.pd
+++ b/pd/doc/3.audio.examples/F02.just.say.pd
@@ -1,9 +1,10 @@
-#N canvas 32 67 900 421 12;
-#X obj 39 247 cos~;
-#X graph graph1 0 -1.02 44100 1.02 452 206 652 76;
+#N canvas 392 32 567 408 10;
+#X obj 23 262 cos~;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array env-output 44100 float 0;
-#X pop;
-#X floatatom 71 305 0 0 0;
+#X coords 0 1.02 44100 -1.02 200 130 1;
+#X restore 326 91 graph;
+#X floatatom 48 320 0 0 0 0 - - -;
 #N canvas 159 26 495 266 output 0;
 #X obj 338 160 t b;
 #X obj 338 110 f;
@@ -55,23 +56,23 @@
 #X connect 22 0 23 0;
 #X connect 22 0 23 1;
 #X connect 24 0 21 0;
-#X restore 39 333 pd output;
-#X msg 115 306 MUTE;
-#X msg 162 93 bang;
-#X text 203 93 <-- click to graph;
-#X obj 39 168 -~ 0.5;
-#X obj 39 192 *~;
-#X obj 39 219 clip~ -0.5 0.5;
-#X obj 39 274 hip~ 5;
-#X obj 126 60 *~;
-#X floatatom 205 142 0 0 0;
-#X floatatom 205 168 0 0 0;
-#X obj 126 27 phasor~ -4;
-#X obj 126 191 +~ 0.5;
-#X obj 162 117 tabwrite~ env-output;
-#X text 451 211 --------- 1 second ---------;
-#X floatatom 205 194 0 0 0;
-#X obj 126 142 lop~ 130;
+#X restore 23 348 pd output;
+#X msg 74 321 MUTE;
+#X msg 146 108 bang;
+#X text 184 108 <-- click to graph;
+#X obj 23 183 -~ 0.5;
+#X obj 23 207 *~;
+#X obj 23 234 clip~ -0.5 0.5;
+#X obj 23 289 hip~ 5;
+#X obj 110 75 *~;
+#X floatatom 189 157 0 0 0 0 - - -;
+#X floatatom 189 183 0 0 0 0 - - -;
+#X obj 110 42 phasor~ -4;
+#X obj 110 206 +~ 0.5;
+#X obj 146 132 tabwrite~ env-output;
+#X text 325 226 --------- 1 second ---------;
+#X floatatom 189 209 0 0 0 0 - - -;
+#X obj 110 157 lop~ 130;
 #N canvas 168 232 351 420 freq 0;
 #X obj 180 176 t f f;
 #X obj 181 202 *;
@@ -80,9 +81,9 @@
 #X obj 90 107 metro 100;
 #X obj 61 287 pack;
 #X obj 60 376 outlet;
-#X floatatom 89 82 0 0 0;
-#X floatatom 54 243 0 0 0;
-#X floatatom 94 248 0 0 0;
+#X floatatom 89 82 0 0 0 0 - - -;
+#X floatatom 54 243 0 0 0 0 - - -;
+#X floatatom 94 248 0 0 0 0 - - -;
 #X obj 60 348 pack 0 30;
 #X obj 55 202 + 150;
 #X obj 88 34 loadbang;
@@ -109,25 +110,49 @@
 #X connect 15 0 4 1;
 #X connect 15 0 9 0;
 #X connect 16 0 0 0;
-#X restore 38 94 pd freq;
-#X obj 39 119 line~;
-#X obj 39 144 phasor~;
-#X text 225 19 negative frequency;
-#X text 226 35 makes falling sawtooth;
-#X text 155 59 square it to make a curve;
-#X text 245 152 you can;
-#X text 243 170 adjust these;
-#X text 247 189 values;
-#X text 334 250 We interrupt this series of patches to bring you an
+#X restore 23 112 pd freq;
+#X obj 23 134 line~;
+#X obj 23 159 phasor~;
+#X text 181 33 negative frequency;
+#X text 181 48 makes falling sawtooth;
+#X text 139 74 square it to make a curve;
+#X text 227 167 you can;
+#X text 227 185 adjust these;
+#X text 227 204 values;
+#X text 198 265 We interrupt this series of patches to bring you an
 important message from Nancy Reagan. If \, anywhere \, at any time
 \, someone offers you an illicit drug \, just say one word in reply...
 ;
-#X text 334 313 Now that I'm sure you've heard this important message
+#X text 198 328 Now that I'm sure you've heard this important message
 \, we can return to the essentially frivolous occupation of making
 turn-of-the-millenium western art music.;
-#X obj 126 165 *~ 6;
-#X text 561 384 updated for Pd version 0.34;
-#X text 156 305 <-- output;
+#X obj 110 180 *~ 6;
+#X text 110 321 <-- output;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header just_say_no 20 10
+1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 386 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION portamento;
+#X restore 392 388 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 portamento- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 388 pd References;
+#X obj 6 388 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 10 0;
 #X connect 2 0 3 1;
 #X connect 3 0 2 0;
diff --git a/pd/doc/3.audio.examples/F03.pulse.spectrum.pd b/pd/doc/3.audio.examples/F03.pulse.spectrum.pd
index 1d04bf850..439cb3004 100644
--- a/pd/doc/3.audio.examples/F03.pulse.spectrum.pd
+++ b/pd/doc/3.audio.examples/F03.pulse.spectrum.pd
@@ -1,28 +1,27 @@
-#N canvas 227 143 860 515 12;
-#X obj 189 166 line~;
-#X obj 42 187 cos~;
-#X obj 189 142 pack 0 50;
-#X floatatom 189 41 0 0 100 0 - - -;
-#X obj 43 114 -~ 0.5;
-#X obj 43 140 *~;
-#X obj 189 67 / 10;
-#X obj 189 91 moses 0;
-#X msg 189 115 0;
-#X obj 42 163 clip~ -0.5 0.5;
-#X text 184 23 bandwidth;
-#X obj 189 191 +~ 1;
-#X obj 42 211 +~ 1;
-#X text 63 1 PULSE SPECTRUM MEASUREMENT;
-#X text 14 357 Here is a measured amplitude spectrum for the pulse
+#N canvas 375 33 610 515 10;
+#X obj 169 180 line~;
+#X obj 22 201 cos~;
+#X obj 169 156 pack 0 50;
+#X floatatom 169 55 0 0 100 0 - - -;
+#X obj 23 128 -~ 0.5;
+#X obj 23 154 *~;
+#X obj 169 81 / 10;
+#X obj 169 105 moses 0;
+#X msg 169 129 0;
+#X obj 22 177 clip~ -0.5 0.5;
+#X text 164 37 bandwidth;
+#X obj 169 205 +~ 1;
+#X obj 22 225 +~ 1;
+#X text 19 357 Here is a measured amplitude spectrum for the pulse
 train. Nutice that \, other than a smallish spillover \, the energy
 sits in one "lobe" whose changing width justifies our calling the squeeze
 factor the "bandwidth.";
-#X text 16 428 The spectrum is in units of amplitude. THe sidelobes
+#X text 18 410 The spectrum is in units of amplitude. THe sidelobes
 \, although they look small \, are actually only about 34 dB down.
 You can design more complicated pulse trains \, little Blackman window
 functions \, which control the sidelobes much better.;
-#X obj 42 293 output~;
-#X obj 41 262 hip~;
+#X obj 22 307 output~;
+#X obj 21 276 hip~;
 #N canvas 122 211 558 609 fft 0;
 #X obj 19 61 inlet~;
 #X obj 208 212 inlet;
@@ -74,35 +73,59 @@ until much later.;
 #X connect 18 0 25 0;
 #X connect 21 0 23 0;
 #X connect 24 0 15 0;
-#X restore 95 264 pd fft;
-#X obj 155 243 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 75 278 pd fft;
+#X obj 135 257 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 155 264 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 135 278 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X text 176 263 <-- repeatedly;
-#X text 177 243 <-- graph once;
-#X obj 42 235 *~ 0.5;
-#X obj 43 90 phasor~;
-#N canvas 0 0 450 300 graph1 0;
+#X text 156 277 <-- repeatedly;
+#X text 157 257 <-- graph once;
+#X obj 22 249 *~ 0.5;
+#X obj 23 104 phasor~;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array F03-signal 882 float 0;
 #X coords 0 1.02 882 -1.02 200 130 1;
-#X restore 640 321 graph;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 390 251 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array F03-spectrum 259 float 0;
 #X coords 0 0.51 258 -0.008 256 130 1;
-#X restore 579 99 graph;
-#X text 640 454 ---- 0.02 seconds ----;
-#X text 608 230 2;
-#X text 639 230 4;
-#X text 578 230 0;
-#X text 616 245 -- partial number --;
-#X text 671 230 6;
-#X text 704 230 8;
-#X text 732 230 10;
-#X text 764 230 12;
-#X text 796 230 14;
-#X text 605 488 updated for Pd version 0.37;
-#X obj 43 63 r freq;
+#X restore 279 56 graph;
+#X text 418 384 ---- 0.02 seconds ----;
+#X text 308 187 2;
+#X text 339 187 4;
+#X text 278 187 0;
+#X text 342 202 -- partial number --;
+#X text 371 187 6;
+#X text 404 187 8;
+#X text 432 187 10;
+#X text 464 187 12;
+#X text 496 187 14;
+#X obj 23 77 r freq;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header pulse_spectrum_measurement
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 487 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION pulse spectrum measurement;
+#X restore 392 489 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 pulse spectrum- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 489 pd References;
+#X obj 6 489 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 11 0;
 #X connect 1 0 12 0;
 #X connect 2 0 0 0;
@@ -115,12 +138,12 @@ until much later.;
 #X connect 8 0 2 0;
 #X connect 9 0 1 0;
 #X connect 11 0 5 1;
-#X connect 12 0 23 0;
-#X connect 17 0 16 0;
-#X connect 17 0 16 1;
-#X connect 19 0 18 1;
-#X connect 20 0 18 2;
-#X connect 23 0 17 0;
-#X connect 23 0 18 0;
-#X connect 24 0 4 0;
-#X connect 38 0 24 0;
+#X connect 12 0 22 0;
+#X connect 16 0 15 0;
+#X connect 16 0 15 1;
+#X connect 18 0 17 1;
+#X connect 19 0 17 2;
+#X connect 22 0 16 0;
+#X connect 22 0 17 0;
+#X connect 23 0 4 0;
+#X connect 36 0 23 0;
diff --git a/pd/doc/3.audio.examples/F04.waveshaping.pulse.pd b/pd/doc/3.audio.examples/F04.waveshaping.pulse.pd
index 5724aeba4..790382bc2 100644
--- a/pd/doc/3.audio.examples/F04.waveshaping.pulse.pd
+++ b/pd/doc/3.audio.examples/F04.waveshaping.pulse.pd
@@ -1,40 +1,39 @@
-#N canvas 240 229 900 586 12;
-#X obj 220 171 line~;
-#X obj 220 147 pack 0 50;
-#X floatatom 220 46 0 0 0 0 - - -;
-#X obj 70 108 *~;
-#X obj 220 72 / 10;
-#X obj 220 96 moses 0;
-#X msg 220 120 0;
-#X text 215 28 bandwidth;
-#X obj 78 141 *~;
-#X obj 18 141 sig~ 1;
-#X obj 39 194 /~;
-#X obj 54 168 +~;
-#X text 111 141 X^2;
-#X text 84 171 1+X^2;
-#X text 71 196 1/(1+X^2);
-#X text 28 4 ANOTHER PULSE WIDTH MOD ALGORITHM;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 370 23 611 541 10;
+#X obj 220 181 line~;
+#X obj 220 157 pack 0 50;
+#X floatatom 220 56 0 0 0 0 - - -;
+#X obj 70 118 *~;
+#X obj 220 82 / 10;
+#X obj 220 106 moses 0;
+#X msg 220 130 0;
+#X text 215 38 bandwidth;
+#X obj 78 151 *~;
+#X obj 18 151 sig~ 1;
+#X obj 39 204 /~;
+#X obj 54 178 +~;
+#X text 111 151 X^2;
+#X text 84 181 1+X^2;
+#X text 71 206 1/(1+X^2);
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array F04-signal 882 float 0;
 #X coords 0 1.02 882 -1.02 200 130 1;
-#X restore 646 328 graph;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 396 313 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array F04-spectrum 259 float 0;
 #X coords 0 1.01 258 -0.008 256 200 1;
-#X restore 587 38 graph;
-#X text 646 461 ---- 0.02 seconds ----;
-#X text 614 237 2;
-#X text 645 237 4;
-#X text 584 237 0;
-#X text 622 252 -- partial number --;
-#X text 677 237 6;
-#X text 710 237 8;
-#X text 738 237 10;
-#X text 770 237 12;
-#X text 802 237 14;
-#X obj 40 277 output~;
-#X obj 39 246 hip~;
+#X restore 307 48 graph;
+#X text 426 446 ---- 0.02 seconds ----;
+#X text 334 247 2;
+#X text 365 247 4;
+#X text 304 247 0;
+#X text 372 262 -- partial number --;
+#X text 397 247 6;
+#X text 430 247 8;
+#X text 458 247 10;
+#X text 490 247 12;
+#X text 522 247 14;
+#X obj 40 287 output~;
+#X obj 39 256 hip~;
 #N canvas 122 211 558 609 fft 0;
 #X obj 19 61 inlet~;
 #X obj 224 210 inlet;
@@ -86,30 +85,55 @@ until much later.;
 #X connect 20 0 24 0;
 #X connect 21 0 15 0;
 #X connect 22 0 25 0;
-#X restore 93 248 pd fft;
-#X obj 153 227 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 93 258 pd fft;
+#X obj 153 237 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 153 248 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 153 258 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X text 174 247 <-- repeatedly;
-#X text 175 227 <-- graph once;
-#X obj 69 81 osc~;
-#X text 632 540 updated for Pd version 0.37;
-#X text 23 515 NOTE: The PAF algorithm is protected by patents belonging
+#X text 174 257 <-- repeatedly;
+#X text 175 237 <-- graph once;
+#X obj 69 91 osc~;
+#X text 19 464 NOTE: The PAF algorithm is protected by patents belonging
 to IRCAM. Noncommercial use seems to be fine with them but contact
 them first if you want to sell something using this.;
-#X text 24 473 This is the form of pulse train used in the original
+#X text 19 433 This is the form of pulse train used in the original
 Phase Aligned Formant (PAF) algorithm.;
-#X text 23 342 Here we use waveshaping to make another form of pulse
+#X text 19 336 Here we use waveshaping to make another form of pulse
 train. This one has a neat spectrum: the partials drop off exponentially
 (with the "bandwidth" controlling the rate of dropoff.) In later patches
 we'll use a wavetable to do the waveshaping but for simplicity \, it's
 done algebraically here. The oscillator runs at half the fundamental
 frequency. The symmetry of the waveshaping doubles the frequency of
 the output.;
-#X text 849 222 0;
-#X text 846 35 1;
-#X obj 69 56 r freq/2;
+#X text 569 232 0;
+#X text 566 45 1;
+#X obj 69 66 r freq/2;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header another_pulse_width_mod_algorithm
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 519 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION another pulse width modulation algorithm
+;
+#X restore 392 521 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 pulse width modulation- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 521 pd References;
+#X obj 6 521 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 3 1;
 #X connect 1 0 0 0;
 #X connect 2 0 4 0;
@@ -122,12 +146,12 @@ the output.;
 #X connect 8 0 11 1;
 #X connect 9 0 10 0;
 #X connect 9 0 11 0;
+#X connect 10 0 28 0;
 #X connect 10 0 29 0;
-#X connect 10 0 30 0;
 #X connect 11 0 10 1;
-#X connect 29 0 28 0;
-#X connect 29 0 28 1;
-#X connect 31 0 30 1;
-#X connect 32 0 30 2;
-#X connect 35 0 3 0;
-#X connect 42 0 35 0;
+#X connect 28 0 27 0;
+#X connect 28 0 27 1;
+#X connect 30 0 29 1;
+#X connect 31 0 29 2;
+#X connect 34 0 3 0;
+#X connect 40 0 34 0;
diff --git a/pd/doc/3.audio.examples/F05.ring.modulation.pd b/pd/doc/3.audio.examples/F05.ring.modulation.pd
index 937b579e1..bf0c7a5c8 100644
--- a/pd/doc/3.audio.examples/F05.ring.modulation.pd
+++ b/pd/doc/3.audio.examples/F05.ring.modulation.pd
@@ -1,19 +1,18 @@
-#N canvas 83 89 793 595 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 367 20 625 517 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array F05-signal 882 float 0;
 #X coords 0 1 882 -1 200 130 1;
-#X restore 554 218 graph;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 388 248 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array F05-spectrum 256 float 0;
 #X coords 0 0.51 255 -0.008 256 130 1;
-#X restore 499 22 graph;
-#X text 552 349 ---- 0.02 seconds ----;
-#X text 507 563 updated for Pd version 0.37;
-#X text 495 155 0;
-#X text 534 174 -- partial number --;
-#X text 761 142 0;
-#X text 758 19 0.5;
-#X floatatom 51 61 0 0 100 0 - - -;
+#X restore 299 52 graph;
+#X text 386 379 ---- 0.02 seconds ----;
+#X text 295 185 0;
+#X text 334 204 -- partial number --;
+#X text 561 172 0;
+#X text 558 49 0.5;
+#X floatatom 22 42 0 0 100 0 - - -;
 #N canvas 329 22 680 421 pulse-train 0;
 #X obj 184 348 line~;
 #X obj 39 317 cos~;
@@ -54,13 +53,13 @@ oscillator we're multpplying with.;
 #X connect 13 0 12 0;
 #X connect 17 0 3 0;
 #X connect 18 0 17 0;
-#X restore 51 86 pd pulse-train;
-#X text 83 61 <-- bandwidth;
-#X obj 51 219 *~;
-#X text 113 123 <-- modulation frequency as;
-#X text 152 137 multiple of fundamental;
-#X obj 51 277 output~;
-#X obj 50 246 hip~;
+#X restore 22 67 pd pulse-train;
+#X text 54 42 <-- bandwidth;
+#X obj 22 200 *~;
+#X text 68 114 <-- modulation frequency as;
+#X text 107 128 multiple of fundamental;
+#X obj 22 275 output~;
+#X obj 21 244 hip~;
 #N canvas 122 211 563 534 fft 0;
 #X obj 19 61 inlet~;
 #X obj 208 212 inlet;
@@ -112,49 +111,73 @@ until much later.;
 #X connect 20 0 25 0;
 #X connect 21 0 15 0;
 #X connect 23 0 22 0;
-#X restore 98 245 pd fft;
-#X obj 158 224 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 69 243 pd fft;
+#X obj 102 199 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 158 245 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#X obj 102 220 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X text 179 244 <-- repeatedly;
-#X text 180 224 <-- graph once;
-#X text 527 155 2;
-#X text 559 155 4;
-#X text 591 155 6;
-#X text 623 155 8;
-#X text 656 155 10;
-#X text 688 155 12;
-#X text 719 155 14;
-#X text 759 213 1;
-#X text 759 337 -1;
-#X text 122 185 modulating oscillator;
-#X text 153 6 RING MODULATED PULSE TRAINS;
-#X text 23 357 Now we take a pulse train and ring modulate it \, which
+#X text 123 219 <-- repeatedly;
+#X text 124 199 <-- graph once;
+#X text 327 185 2;
+#X text 359 185 4;
+#X text 391 185 6;
+#X text 423 185 8;
+#X text 456 185 10;
+#X text 488 185 12;
+#X text 519 185 14;
+#X text 593 243 1;
+#X text 593 367 -1;
+#X text 19 332 Now we take a pulse train and ring modulate it \, which
 effectively aliases the spectrum so that it is centered at any desired
 partial number. The "bandwidth" control still affects the shape of
 the peak \, independently of where it is centered. This generates a
 formant centered at the given partial.;
-#X floatatom 73 123 0 0 100 0 - - -;
-#X obj 73 182 osc~;
-#X obj 73 157 *;
-#X obj 107 157 r freq;
-#X text 23 457 This patch is limited to making formants centered on
+#X floatatom 38 114 0 0 100 0 - - -;
+#X obj 38 173 osc~;
+#X obj 38 148 *;
+#X obj 72 148 r freq;
+#X text 18 406 This patch is limited to making formants centered on
 harmonics. The center frequency thus can't be moved smoothly up and
 down at will (try shift-clicking on modulation frequency to make fractions).
 Next we'll look at two techniques for sliding a formant frequency without
 losing harmonicity.;
-#X text 184 85 <-- pulse train;
-#X text 220 101 generator from before;
-#X connect 8 0 9 0;
-#X connect 9 0 11 0;
-#X connect 11 0 15 0;
-#X connect 11 0 16 0;
-#X connect 15 0 14 0;
-#X connect 15 0 14 1;
-#X connect 17 0 16 1;
-#X connect 18 0 16 2;
-#X connect 33 0 35 0;
-#X connect 34 0 11 1;
-#X connect 35 0 34 0;
-#X connect 36 0 35 1;
+#X text 117 66 <-- pulse train;
+#X text 153 78 generator from before;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header ring_modulated_pulse_trains
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 74 173 modulating oscillator;
+#X obj 1 494 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION ring modulated pulse trains;
+#X restore 392 496 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 pulse trains- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 496 pd References;
+#X obj 6 496 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 7 0 8 0;
+#X connect 8 0 10 0;
+#X connect 10 0 14 0;
+#X connect 10 0 15 0;
+#X connect 14 0 13 0;
+#X connect 14 0 13 1;
+#X connect 16 0 15 1;
+#X connect 17 0 15 2;
+#X connect 30 0 32 0;
+#X connect 31 0 10 1;
+#X connect 32 0 31 0;
+#X connect 33 0 32 1;
diff --git a/pd/doc/3.audio.examples/F06.packets.pd b/pd/doc/3.audio.examples/F06.packets.pd
index ef098bba4..c404665e6 100644
--- a/pd/doc/3.audio.examples/F06.packets.pd
+++ b/pd/doc/3.audio.examples/F06.packets.pd
@@ -1,26 +1,26 @@
-#N canvas 207 159 864 663 12;
-#X obj 327 413 line~;
-#X obj 55 456 cos~;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 341 22 692 622 10;
+#X obj 283 346 line~;
+#X obj 21 387 cos~;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array pulse-output 882 float 0;
 #X coords 0 1 882 -1 200 130 1;
-#X restore 627 339 graph;
-#X obj 327 390 pack 0 50;
-#X floatatom 327 344 0 0 0 0 - - -;
-#X obj 55 355 -~ 0.5;
-#X obj 55 410 *~;
-#X obj 327 367 / 10;
-#X obj 55 433 clip~ -0.5 0.5;
-#X text 327 322 bandwidth;
-#X obj 327 436 +~ 1;
-#X obj 55 479 +~ 1;
-#X obj 206 491 cos~;
-#X obj 56 547 *~;
-#X floatatom 228 346 4 0 0 0 - - -;
-#X obj 228 366 / 10;
-#X text 627 472 --- 0.02 seconds ---;
-#X obj 206 465 *~;
-#N canvas 129 316 777 218 graph 1;
+#X restore 447 394 graph;
+#X obj 283 323 pack 0 50;
+#X floatatom 283 277 0 0 0 0 - - -;
+#X obj 21 286 -~ 0.5;
+#X obj 21 341 *~;
+#X obj 283 300 / 10;
+#X obj 21 364 clip~ -0.5 0.5;
+#X text 264 254 bandwidth;
+#X obj 283 369 +~ 1;
+#X obj 21 410 +~ 1;
+#X obj 172 422 cos~;
+#X obj 22 478 *~;
+#X floatatom 188 277 4 0 0 0 - - -, f 4;
+#X obj 188 297 / 10;
+#X text 477 527 --- 0.02 seconds ---;
+#X obj 172 396 *~;
+#N canvas 129 316 777 218 graph 0;
 #X obj 70 76 inlet~;
 #X obj 662 76 inlet;
 #X obj 67 143 tabwrite~ pulse-output;
@@ -36,58 +36,81 @@
 #X connect 1 0 7 0;
 #X connect 3 0 5 0;
 #X connect 4 0 6 0;
-#X restore 100 572 pd graph;
-#X obj 228 412 line~;
-#X obj 228 389 pack 0 50;
-#N canvas 0 0 450 300 graph3 0;
+#X restore 66 503 pd graph;
+#X obj 188 343 line~;
+#X obj 188 320 pack 0 50;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array carrier 882 float 0;
 #X coords 0 1 881 -1 200 140 1;
-#X restore 627 188 graph;
-#N canvas 0 0 450 300 graph4 0;
+#X restore 447 223 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array window 882 float 0;
 #X coords 0 1 881 -1 200 140 1;
-#X restore 628 35 graph;
-#X text 204 573 <-- graph;
-#X floatatom 55 310 4 0 0 0 - - -;
-#X obj 55 331 phasor~ 100;
-#X text 31 2 WINDOWED PACKETS;
-#X text 51 266 fundamental;
-#X text 206 260 center;
-#X text 204 279 freq. (in;
-#X text 203 298 tenths of;
-#X text 202 318 fundamental);
-#X text 119 493 window;
-#X text 241 469 magnified phase;
-#X text 283 509 desired center frequency;
-#X text 255 492 <--this cosine goes at the;
-#X text 284 528 but its phase is reset each;
-#X text 282 547 fundamental period.;
-#X text 28 32 The simpler of two techniques for making slidable center
+#X restore 447 55 graph;
+#X text 170 504 <-- graph;
+#X floatatom 21 241 4 0 0 0 - - -, f 4;
+#X obj 21 262 phasor~ 100;
+#X text 18 202 fundamental;
+#X text 168 210 center;
+#X text 168 225 freq. (in;
+#X text 168 239 tenths of;
+#X text 168 254 fundamental);
+#X text 85 424 window;
+#X text 207 400 magnified phase;
+#X text 249 440 desired center frequency;
+#X text 221 423 <--this cosine goes at the;
+#X text 250 459 but its phase is reset each;
+#X text 248 478 fundamental period.;
+#X text 19 36 The simpler of two techniques for making slidable center
 frequencies is to synthesize enveloped sinusoidal wave packets. The
 packets should repeat at the fundamental frequency \, but the frequency
 of the packet itself controls the center frequency of the formant.
 The length of the packet varies inversely with bandwidth.;
-#X obj 55 604 output~;
-#X obj 55 580 hip~;
-#X obj 182 573 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 21 535 output~;
+#X obj 21 511 hip~;
+#X obj 148 504 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 601 635 updated for Pd version 0.37;
-#X obj 55 502 *~ 0.5;
-#X text 831 161 -1;
-#X text 833 31 1;
-#X text 831 314 -1;
-#X text 835 184 1;
-#X text 832 458 -1;
-#X text 835 333 1;
-#X text 26 132 In the patch below \, the "clip~" followed by "cos~"
+#X obj 21 433 *~ 0.5;
+#X text 650 181 -1;
+#X text 652 51 1;
+#X text 651 349 -1;
+#X text 655 219 1;
+#X text 652 513 -1;
+#X text 655 388 1;
+#X text 18 111 In the patch below \, the "clip~" followed by "cos~"
 and "+~ 1" is the enveloping ("windowing") function \, which appears
 in the top graph. The carrier \, on the other hand \, is a broken sinusoid
 made by amplifying the phasor~ (the "*~" controlled by "center freq.")
 and taking the cos~ of the result. The "breaks" in the sinusoid only
 occur when the enveloping signal is zero.;
-#X text 105 464 raised;
-#X text 113 479 cosine;
-#X text 51 285 frequency;
+#X text 71 395 raised;
+#X text 79 410 cosine;
+#X text 18 217 frequency;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header windowed_packets
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 600 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION windowed packets;
+#X restore 392 602 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 windowed packets- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 602 pd References;
+#X obj 6 602 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 10 0;
 #X connect 1 0 11 0;
 #X connect 3 0 0 0;
@@ -98,11 +121,11 @@ occur when the enveloping signal is zero.;
 #X connect 7 0 3 0;
 #X connect 8 0 1 0;
 #X connect 10 0 6 1;
-#X connect 11 0 43 0;
+#X connect 11 0 41 0;
 #X connect 12 0 13 1;
 #X connect 12 0 18 2;
 #X connect 13 0 18 0;
-#X connect 13 0 40 0;
+#X connect 13 0 39 0;
 #X connect 14 0 15 0;
 #X connect 15 0 20 0;
 #X connect 17 0 12 0;
@@ -110,8 +133,8 @@ occur when the enveloping signal is zero.;
 #X connect 20 0 19 0;
 #X connect 24 0 25 0;
 #X connect 25 0 5 0;
-#X connect 40 0 39 0;
-#X connect 40 0 39 1;
-#X connect 41 0 18 3;
-#X connect 43 0 13 0;
-#X connect 43 0 18 1;
+#X connect 39 0 38 0;
+#X connect 39 0 38 1;
+#X connect 40 0 18 3;
+#X connect 41 0 13 0;
+#X connect 41 0 18 1;
diff --git a/pd/doc/3.audio.examples/F07.packet.spectrum.pd b/pd/doc/3.audio.examples/F07.packet.spectrum.pd
index bef1483b6..ed45baa42 100644
--- a/pd/doc/3.audio.examples/F07.packet.spectrum.pd
+++ b/pd/doc/3.audio.examples/F07.packet.spectrum.pd
@@ -1,7 +1,7 @@
-#N canvas 83 221 774 628 12;
-#X obj 302 351 line~;
-#X obj 34 444 cos~;
-#X floatatom 71 560 0 0 0;
+#N canvas 399 22 531 624 10;
+#X obj 282 351 line~;
+#X obj 34 442 cos~;
+#X floatatom 59 542 0 0 0 0 - - -;
 #N canvas 176 241 532 273 output 0;
 #X obj 338 160 t b;
 #X obj 338 110 f;
@@ -53,37 +53,38 @@
 #X connect 21 0 22 1;
 #X connect 23 0 20 0;
 #X connect 26 0 21 0;
-#X restore 35 587 pd output;
-#X msg 111 560 MUTE;
-#X obj 302 327 pack 0 50;
-#X floatatom 302 255 0 0 0;
+#X restore 34 564 pd output;
+#X msg 85 542 MUTE;
+#X obj 282 327 pack 0 50;
+#X floatatom 282 255 0 0 0 0 - - -;
 #X obj 34 356 -~ 0.5;
-#X obj 34 395 *~;
-#X obj 302 279 / 10;
+#X obj 34 398 *~;
+#X obj 282 279 / 10;
 #X obj 34 420 clip~ -0.5 0.5;
-#X text 302 233 bandwidth;
-#X obj 302 375 +~ 1;
-#X obj 35 467 +~ 1;
-#X obj 184 440 cos~;
-#X obj 35 496 *~;
-#X floatatom 206 269 4 0 0;
-#X obj 206 293 / 10;
+#X text 279 232 bandwidth;
+#X obj 282 375 +~ 1;
+#X obj 34 465 +~ 1;
+#X obj 184 436 cos~;
+#X obj 34 489 *~;
+#X floatatom 198 274 4 0 0 0 - - -, f 4;
+#X obj 198 298 / 10;
 #X obj 184 414 *~;
-#X text 204 224 center;
-#X text 204 243 freq.;
-#X obj 302 303 max 0;
-#X obj 206 365 line~;
-#X obj 206 341 pack 0 50;
-#X obj 206 317 max 0;
-#X floatatom 34 308 4 0 0;
+#X text 196 236 center;
+#X text 196 251 freq.;
+#X obj 282 303 max 0;
+#X obj 198 370 line~;
+#X obj 198 346 pack 0 50;
+#X obj 198 322 max 0;
+#X floatatom 34 308 4 0 0 0 - - -, f 4;
 #X obj 34 332 phasor~ 100;
-#X text 156 559 <-- output;
-#X text 30 283 freq.;
-#X text 30 264 fundamental;
-#X graph graph1 0 0 128 500 440 492 696 362;
+#X text 120 542 <-- output;
+#X text 31 284 freq.;
+#X text 31 269 fundamental;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array spectrum 128 float 0;
-#X pop;
-#X msg 108 498 bang;
+#X coords 0 500 128 0 256 130 1;
+#X restore 240 432 graph;
+#X msg 91 495 bang;
 #N canvas 204 17 358 238 fft 0;
 #X obj 46 48 inlet~;
 #X obj 159 181 tabwrite~ spectrum;
@@ -102,22 +103,45 @@
 #X connect 4 0 6 0;
 #X connect 5 0 6 0;
 #X connect 6 0 1 0;
-#X restore 59 524 pd fft;
-#X text 439 502 0;
-#X text 687 499 5512;
-#X text 149 498 <-- graph;
-#X text 31 2 WINDOWED PACKET SPECTRUM;
-#X text 19 34 Here's the spectrum you get. Note that even if you put
+#X restore 58 517 pd fft;
+#X text 239 572 0;
+#X text 487 569 5512;
+#X text 127 495 <-- graph;
+#X text 19 64 Here's the spectrum you get. Note that even if you put
 the center frequency right on a partial \, there is significant energy
 in neighboring partials (try fundamental 440 \, "center freq" 30 \,
 bandwidth 0.);
-#X text 18 104 The center frequency is in units of ten per partial
+#X text 18 134 The center frequency is in units of ten per partial
 \, or in other words a value of "30" means "centered on the third partial".
 ;
-#X text 505 596 updated for Pd version 0.34;
-#X text 22 155 This technique only works if you're doing Hanning-window
+#X text 22 185 This technique only works if you're doing Hanning-window
 shaped PWM--you can't combine this naturally with FM or with the waveshaping
 technique we'll see later.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header windowed_packet_spectrum
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 602 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION windowed packet spectrum;
+#X restore 392 604 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 windowed packet spectrum- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 604 pd References;
+#X obj 6 604 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 12 0;
 #X connect 1 0 13 0;
 #X connect 2 0 3 1;
diff --git a/pd/doc/3.audio.examples/F08.two.cosines.pd b/pd/doc/3.audio.examples/F08.two.cosines.pd
index ae4788f6c..61a0a3b7e 100644
--- a/pd/doc/3.audio.examples/F08.two.cosines.pd
+++ b/pd/doc/3.audio.examples/F08.two.cosines.pd
@@ -1,48 +1,72 @@
-#N canvas 534 115 698 613 12;
-#X obj 157 408 cos~;
-#X floatatom 204 198 4 0 100 0 - - -;
-#X obj 204 222 / 10;
-#X text 461 275 --- 0.02 seconds ---;
-#X obj 157 378 *~;
-#X obj 204 294 line~;
-#X obj 204 246 max 0;
-#N canvas 0 0 450 300 graph3 0;
+#N canvas 405 23 493 610 10;
+#X obj 124 379 cos~;
+#X floatatom 171 169 4 0 100 0 - - -, f 4;
+#X obj 171 193 / 10;
+#X text 313 263 --- 0.02 seconds ---;
+#X obj 124 349 *~;
+#X obj 171 265 line~;
+#X obj 171 217 max 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array F08-carrier 882 float 0;
 #X coords 0 2 881 -2 200 140 1;
-#X restore 447 123 graph;
-#X floatatom 57 295 4 0 0 0 - - -;
-#X text 53 251 fundamental;
-#X text 53 270 frequency;
-#X obj 199 408 cos~;
-#X obj 240 321 wrap~;
-#X obj 204 348 -~;
-#X obj 199 378 +~;
-#X obj 204 445 -~;
-#X obj 219 475 *~;
-#X obj 197 500 +~;
-#X obj 204 270 pack 0 50;
-#X text 254 408 synthesize the two partials;
-#X text 447 590 updated for Pd version 0.37;
-#X obj 198 526 hip~;
-#X obj 199 552 output~;
-#X text 26 29 The other \, spiffier way is to make a sum of cosines
+#X restore 277 121 graph;
+#X floatatom 24 266 4 0 0 0 - - -, f 4;
+#X text 22 227 fundamental;
+#X text 22 242 frequency;
+#X obj 166 379 cos~;
+#X obj 207 292 wrap~;
+#X obj 171 319 -~;
+#X obj 166 349 +~;
+#X obj 171 416 -~;
+#X obj 186 446 *~;
+#X obj 164 471 +~;
+#X obj 171 241 pack 0 50;
+#X text 221 379 synthesize the two partials;
+#X obj 165 497 hip~;
+#X obj 166 523 output~;
+#X text 19 47 The other \, spiffier way is to make a sum of cosines
 to interpolate between adjacent harmonics. Suppose for example we want
 a center frequency of 5.3 (in units of the fundamental.) We just take
 partial 5 with amplitude 0.7 and partial 6 with amplitude 0.3:;
-#X obj 286 552 tabwrite~ F08-carrier;
-#X text 316 528 <-graph;
-#X obj 284 527 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 253 523 tabwrite~ F08-carrier;
+#X text 283 499 <-graph;
+#X obj 251 498 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 57 319 phasor~ 100;
-#X text 83 149 center frequency (in;
-#X text 82 169 tenths of fundamental);
-#X text 125 3 MOVABLE CENTER FREQUENCY BY ADDING TWO COSINES;
-#X text 295 320 the fractional part "q";
-#X text 253 347 subtract to get the integer part "k";
-#X text 249 380 multiply phase by k and k+1;
-#X text 252 444 c2 - c1;
-#X text 267 473 q * (c2 - c1);
-#X text 236 500 q * c2 + (1-q) * c1;
+#X obj 24 290 phasor~ 100;
+#X text 69 131 center frequency (in;
+#X text 69 146 tenths of fundamental);
+#X text 262 291 the fractional part "q";
+#X text 220 318 subtract to get the integer part "k";
+#X text 216 351 multiply phase by k and k+1;
+#X text 219 415 c2 - c1;
+#X text 234 444 q * (c2 - c1);
+#X text 203 471 q * c2 + (1-q) * c1;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header movable_center_frequency...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 125 27 ... by adding two cosines;
+#X obj 1 588 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION movable center frequency;
+#X restore 392 590 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 movable center frequency- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 590 pd References;
+#X obj 6 590 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 15 1;
 #X connect 0 0 17 0;
 #X connect 1 0 2 0;
@@ -52,7 +76,7 @@ partial 5 with amplitude 0.7 and partial 6 with amplitude 0.3:;
 #X connect 5 0 13 0;
 #X connect 5 0 12 0;
 #X connect 6 0 18 0;
-#X connect 8 0 27 0;
+#X connect 8 0 26 0;
 #X connect 11 0 15 0;
 #X connect 12 0 13 1;
 #X connect 12 0 16 1;
@@ -60,11 +84,11 @@ partial 5 with amplitude 0.7 and partial 6 with amplitude 0.3:;
 #X connect 14 0 11 0;
 #X connect 15 0 16 0;
 #X connect 16 0 17 1;
-#X connect 17 0 21 0;
-#X connect 17 0 24 0;
+#X connect 17 0 20 0;
+#X connect 17 0 23 0;
 #X connect 18 0 5 0;
-#X connect 21 0 22 0;
-#X connect 21 0 22 1;
-#X connect 26 0 24 0;
-#X connect 27 0 4 0;
-#X connect 27 0 14 1;
+#X connect 20 0 21 0;
+#X connect 20 0 21 1;
+#X connect 25 0 23 0;
+#X connect 26 0 4 0;
+#X connect 26 0 14 1;
diff --git a/pd/doc/3.audio.examples/F09.declickit.pd b/pd/doc/3.audio.examples/F09.declickit.pd
index f35f5da8e..17a062682 100644
--- a/pd/doc/3.audio.examples/F09.declickit.pd
+++ b/pd/doc/3.audio.examples/F09.declickit.pd
@@ -1,17 +1,17 @@
-#N canvas 10 49 579 665 12;
-#X obj 130 481 cos~;
-#X obj 130 451 *~;
-#X obj 172 481 cos~;
-#X obj 214 397 wrap~;
-#X obj 177 402 -~;
-#X obj 172 451 +~;
-#X obj 172 516 -~;
-#X obj 192 548 *~;
-#X obj 170 573 +~;
-#X obj 204 159 loadbang;
-#X obj 204 185 metro 400;
-#X obj 216 209 del 200;
-#X obj 252 326 samphold~;
+#N canvas 420 23 448 659 10;
+#X obj 82 451 cos~;
+#X obj 82 421 *~;
+#X obj 124 451 cos~;
+#X obj 166 367 wrap~;
+#X obj 129 372 -~;
+#X obj 124 421 +~;
+#X obj 124 486 -~;
+#X obj 144 518 *~;
+#X obj 122 543 +~;
+#X obj 156 129 loadbang;
+#X obj 156 155 metro 400;
+#X obj 168 179 del 200;
+#X obj 204 296 samphold~;
 #N canvas 0 0 405 406 switch 0;
 #X obj 15 383 outlet~;
 #X obj 8 193 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
@@ -43,26 +43,49 @@
 #X connect 11 0 12 0;
 #X connect 12 0 0 0;
 #X coords 0 0 1 1 80 35 1;
-#X restore 177 351 pd switch;
-#X text 31 2 CHANGING THE CENTER FREQUENCY QUICKLY;
-#X text 34 27 Since in the previous patch the amplitudes of the two
+#X restore 129 321 pd switch;
+#X text 19 37 Since in the previous patch the amplitudes of the two
 cosines depend on "center frequency" we can't change that discontinuously
 without clicking \, as you hear in this patch. The fix is to use a
 samphold~ object to keep the center frequency frozen except at phase
 crossings. At the phase crossings the two weighted cosines add to one
 \, so we can discontinuously change the frequencies and weights there.
 ;
-#X text 266 365 <--toggles to select which one;
-#X text 369 384 is actually used;
-#X obj 171 602 output~;
-#X floatatom 225 264 3 0 50 0 - - -;
-#X obj 178 263 pack;
-#X text 258 263 <--gliss time;
-#X text 324 647 updated for Pd version 0.37;
-#X obj 178 287 line~;
-#X msg 216 239 13.5;
-#X msg 178 239 4;
-#X obj 70 287 phasor~ 80;
+#X text 218 335 <--toggles to select which one;
+#X text 321 354 is actually used;
+#X obj 123 572 output~;
+#X floatatom 177 234 3 0 50 0 - - -, f 3;
+#X obj 130 233 pack;
+#X text 210 233 <--gliss time;
+#X obj 130 257 line~;
+#X msg 168 209 13.5;
+#X msg 130 209 4;
+#X obj 22 257 phasor~ 80;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header changing_the_center_frequency_quickly
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 637 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION changing the center frequency quickly;
+#X restore 392 639 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 center frequency- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 639 pd References;
+#X obj 6 639 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 6 1;
 #X connect 0 0 8 0;
 #X connect 1 0 0 0;
@@ -74,21 +97,21 @@ crossings. At the phase crossings the two weighted cosines add to one
 #X connect 5 0 2 0;
 #X connect 6 0 7 0;
 #X connect 7 0 8 1;
-#X connect 8 0 18 0;
-#X connect 8 0 18 1;
+#X connect 8 0 17 0;
+#X connect 8 0 17 1;
 #X connect 9 0 10 0;
-#X connect 10 0 25 0;
+#X connect 10 0 23 0;
 #X connect 10 0 11 0;
-#X connect 11 0 24 0;
+#X connect 11 0 22 0;
 #X connect 12 0 13 1;
 #X connect 13 0 4 0;
 #X connect 13 0 3 0;
-#X connect 19 0 20 1;
-#X connect 20 0 23 0;
-#X connect 23 0 13 0;
-#X connect 23 0 12 0;
-#X connect 24 0 20 0;
-#X connect 25 0 20 0;
-#X connect 26 0 1 0;
-#X connect 26 0 5 1;
-#X connect 26 0 12 1;
+#X connect 18 0 19 1;
+#X connect 19 0 21 0;
+#X connect 21 0 13 0;
+#X connect 21 0 12 0;
+#X connect 22 0 19 0;
+#X connect 23 0 19 0;
+#X connect 24 0 1 0;
+#X connect 24 0 5 1;
+#X connect 24 0 12 1;
diff --git a/pd/doc/3.audio.examples/F10.sweepable.FM.pd b/pd/doc/3.audio.examples/F10.sweepable.FM.pd
index 17fc920b2..5c9ece801 100644
--- a/pd/doc/3.audio.examples/F10.sweepable.FM.pd
+++ b/pd/doc/3.audio.examples/F10.sweepable.FM.pd
@@ -1,41 +1,36 @@
-#N canvas 60 64 834 697 12;
-#X obj 168 476 cos~;
-#X obj 168 430 *~;
-#X obj 211 478 cos~;
-#X obj 252 379 wrap~;
-#X obj 215 378 -~;
-#X obj 211 455 +~;
-#X obj 209 513 -~;
-#X obj 230 539 *~;
-#X obj 215 348 samphold~;
-#X text 167 6 APPLYING TWO-COSINE CARRIER TO FM;
-#X floatatom 232 228 4 0 200 0 - - -;
-#X obj 232 251 / 10;
-#X text 232 147 center;
-#X obj 232 300 line~;
-#X text 232 167 freq. (in;
-#X text 232 187 tenths of;
-#X text 232 207 fundamental);
-#X obj 232 277 pack 0 50;
-#X obj 121 283 phasor~;
-#X floatatom 121 260 4 0 0 0 - - -;
-#X text 106 207 fundamental;
-#X text 106 227 (= mod freq);
-#X text 435 254 index;
-#X text 435 274 (percent);
-#X floatatom 435 295 4 0 500 0 - - -;
-#X obj 385 361 cos~;
-#X obj 435 364 line~;
-#X obj 385 384 *~;
-#X obj 435 318 / 100;
-#X obj 435 341 pack 0 50;
-#X obj 168 453 +~;
-#X text 388 410 modulating;
-#X text 388 430 oscillator;
-#X text 40 452 both phases-->;
-#X text 9 435 add modulator to;
-#X obj 233 632 output~;
-#X obj 232 601 hip~;
+#N canvas 337 19 711 648 10;
+#X obj 138 405 cos~;
+#X obj 138 359 *~;
+#X obj 181 407 cos~;
+#X obj 222 308 wrap~;
+#X obj 185 307 -~;
+#X obj 181 384 +~;
+#X obj 179 442 -~;
+#X obj 200 468 *~;
+#X obj 185 277 samphold~;
+#X floatatom 202 157 4 0 200 0 - - -, f 4;
+#X obj 202 180 / 10;
+#X obj 202 229 line~;
+#X obj 202 206 pack 0 50;
+#X obj 91 212 phasor~;
+#X floatatom 91 189 4 0 0 0 - - -, f 4;
+#X text 77 151 fundamental;
+#X text 77 166 (= mod freq);
+#X text 400 185 index;
+#X text 400 200 (percent);
+#X floatatom 405 224 4 0 500 0 - - -, f 4;
+#X obj 355 290 cos~;
+#X obj 405 293 line~;
+#X obj 355 313 *~;
+#X obj 405 247 / 100;
+#X obj 405 270 pack 0 50;
+#X obj 138 382 +~;
+#X text 358 339 modulating;
+#X text 358 355 oscillator;
+#X text 42 381 both phases-->;
+#X text 11 368 add modulator to;
+#X obj 203 561 output~;
+#X obj 202 530 hip~;
 #N canvas 122 211 558 609 fft 0;
 #X obj 23 55 inlet~;
 #X obj 210 303 inlet;
@@ -92,61 +87,87 @@ until much later.;
 #X connect 26 0 27 1;
 #X connect 27 0 2 0;
 #X connect 29 0 25 1;
-#X restore 286 601 pd fft;
-#X obj 346 580 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 256 530 pd fft;
+#X obj 289 485 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 346 601 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#X obj 289 506 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X text 367 600 <-- repeatedly;
-#X text 368 580 <-- graph once;
-#X text 580 663 updated for Pd version 0.37;
-#N canvas 0 0 450 300 graph1 0;
+#X text 310 505 <-- repeatedly;
+#X text 311 485 <-- graph once;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array F10-spectrum 259 float 0;
 #X coords 0 0.51 258 -0.008 256 130 1;
-#X restore 560 386 graph;
-#X text 552 517 0;
-#X obj 207 565 +~;
-#X text 31 30 We can apply the two-cosine method to FM synthesis to
+#X restore 440 394 graph;
+#X text 432 525 0;
+#X obj 177 494 +~;
+#X text 20 37 We can apply the two-cosine method to FM synthesis to
 get FM spectra which slide up and down: we just treat the cosines like
 carrier signals in an FM instrument. This doesn't work as well as you'd
 wish \, because the phases of the partials of the two FM instruments
 don't line up \, so that \, for indices of modulation above about 20%
 \, you get beating effects as the center frequency goes up and down.
 ;
-#X text 614 527 -- frequency --;
-#X text 792 518 2700;
+#X text 521 535 -- frequency --;
+#X text 672 526 2700;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header applying_two-cosine_carrier_to_FM
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 626 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.34. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION applying two-cosine carrier to FM;
+#X restore 392 628 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 frequency modulation- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 628 pd References;
+#X obj 6 628 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 202 122 center freq.;
+#X text 202 136 in tenths of fundamental);
 #X connect 0 0 6 1;
-#X connect 0 0 45 0;
-#X connect 1 0 30 0;
+#X connect 0 0 39 0;
+#X connect 1 0 25 0;
 #X connect 2 0 6 0;
 #X connect 3 0 4 1;
 #X connect 3 0 7 1;
 #X connect 4 0 1 1;
 #X connect 5 0 2 0;
 #X connect 6 0 7 0;
-#X connect 7 0 45 1;
+#X connect 7 0 39 1;
 #X connect 8 0 4 0;
 #X connect 8 0 3 0;
-#X connect 10 0 11 0;
-#X connect 11 0 17 0;
-#X connect 13 0 8 0;
-#X connect 17 0 13 0;
-#X connect 18 0 8 1;
-#X connect 18 0 25 0;
-#X connect 18 0 1 0;
-#X connect 18 0 5 1;
-#X connect 19 0 18 0;
-#X connect 24 0 28 0;
-#X connect 25 0 27 0;
-#X connect 26 0 27 1;
-#X connect 27 0 30 1;
-#X connect 28 0 29 0;
-#X connect 29 0 26 0;
-#X connect 30 0 5 0;
-#X connect 30 0 0 0;
-#X connect 36 0 35 0;
-#X connect 36 0 35 1;
-#X connect 38 0 37 1;
-#X connect 39 0 37 2;
-#X connect 45 0 36 0;
-#X connect 45 0 37 0;
+#X connect 9 0 10 0;
+#X connect 10 0 12 0;
+#X connect 11 0 8 0;
+#X connect 12 0 11 0;
+#X connect 13 0 8 1;
+#X connect 13 0 20 0;
+#X connect 13 0 1 0;
+#X connect 13 0 5 1;
+#X connect 14 0 13 0;
+#X connect 19 0 23 0;
+#X connect 20 0 22 0;
+#X connect 21 0 22 1;
+#X connect 22 0 25 1;
+#X connect 23 0 24 0;
+#X connect 24 0 21 0;
+#X connect 25 0 5 0;
+#X connect 25 0 0 0;
+#X connect 31 0 30 0;
+#X connect 31 0 30 1;
+#X connect 33 0 32 1;
+#X connect 34 0 32 2;
+#X connect 39 0 31 0;
+#X connect 39 0 32 0;
diff --git a/pd/doc/3.audio.examples/F11.anharmonic.FM.pd b/pd/doc/3.audio.examples/F11.anharmonic.FM.pd
index 333a6e44a..cba84c58e 100644
--- a/pd/doc/3.audio.examples/F11.anharmonic.FM.pd
+++ b/pd/doc/3.audio.examples/F11.anharmonic.FM.pd
@@ -1,26 +1,26 @@
-#N canvas 60 64 790 527 12;
-#X obj 122 381 cos~;
-#X floatatom 173 184 4 0 200 0 - - -;
-#X obj 173 207 / 10;
-#X text 173 103 center;
-#X text 173 123 freq. (in;
-#X text 173 143 tenths of;
-#X text 173 163 fundamental);
-#X floatatom 70 192 4 0 0 0 - - -;
-#X text 46 145 fundamental;
-#X text 46 165 (= mod freq);
-#X text 251 208 index;
-#X text 251 228 (percent);
-#X floatatom 251 249 4 0 500 0 - - -;
-#X obj 251 318 line~;
-#X obj 201 338 *~;
-#X obj 251 272 / 100;
-#X obj 251 295 pack 0 50;
-#X obj 122 358 +~;
-#X text 204 364 modulating;
-#X text 209 381 oscillator;
-#X obj 123 459 output~;
-#X obj 122 428 hip~;
+#N canvas 376 33 596 536 10;
+#X obj 102 353 cos~;
+#X floatatom 153 156 4 0 200 0 - - -, f 4;
+#X obj 153 179 / 10;
+#X text 153 90 center;
+#X text 153 105 freq. (in;
+#X text 153 120 tenths of;
+#X text 153 135 fundamental);
+#X floatatom 50 164 4 0 0 0 - - -, f 4;
+#X text 26 127 fundamental;
+#X text 26 142 (= mod freq);
+#X text 221 182 index;
+#X text 221 197 (percent);
+#X floatatom 221 218 4 0 500 0 - - -, f 4;
+#X obj 221 287 line~;
+#X obj 181 310 *~;
+#X obj 221 241 / 100;
+#X obj 221 264 pack 0 50;
+#X obj 102 330 +~;
+#X text 189 339 modulating;
+#X text 189 353 oscillator;
+#X obj 103 448 output~;
+#X obj 102 417 hip~;
 #N canvas 122 211 558 609 fft 0;
 #X obj 23 55 inlet~;
 #X obj 210 303 inlet;
@@ -77,38 +77,62 @@ until much later.;
 #X connect 25 0 26 1;
 #X connect 26 0 2 0;
 #X connect 28 0 24 1;
-#X restore 176 428 pd fft;
-#X obj 236 407 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 156 417 pd fft;
+#X obj 189 373 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 236 428 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X obj 189 394 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X text 257 427 <-- repeatedly;
-#X text 258 407 <-- graph once;
-#X text 530 479 updated for Pd version 0.37;
-#N canvas 0 0 450 300 graph1 0;
+#X text 210 393 <-- repeatedly;
+#X text 211 373 <-- graph once;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array F11-spectrum 259 float 0;
 #X coords 0 0.51 258 -0.008 256 130 1;
-#X restore 514 291 graph;
-#X text 506 422 0;
-#X text 568 432 -- frequency --;
-#X text 743 427 2700;
-#X obj 173 256 *;
-#X obj 173 233 t b f;
-#X obj 201 315 osc~;
-#X obj 122 322 phasor~;
-#X text 31 30 Here's what happens if you just slide the carrier frequency
+#X restore 324 110 graph;
+#X text 316 242 0;
+#X text 408 252 -- frequency --;
+#X text 553 247 2700;
+#X obj 153 228 *;
+#X obj 153 205 t b f;
+#X obj 181 287 osc~;
+#X obj 102 294 phasor~;
+#X text 19 37 Here's what happens if you just slide the carrier frequency
 around. The spectrum moves up and down all right \, but is only periodic
 at the original period when the center frequency roosts on a harmonic.
 ;
-#X text 50 308 carrier;
-#X text 24 325 oscillator;
-#X text 167 6 HOW NOT TO APPLY TWO-COSINE CARRIER TO FM;
+#X text 52 285 carrier;
+#X text 34 299 oscillator;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header how_not_to_apply_two-cosine_carrier_to_fm
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 513 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION how not to apply two-cosine carrier to fm
+;
+#X restore 392 515 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 frequency modulation- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 515 pd References;
+#X obj 6 515 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 21 0;
 #X connect 0 0 22 0;
 #X connect 1 0 2 0;
-#X connect 2 0 33 0;
-#X connect 7 0 32 0;
-#X connect 7 0 34 0;
+#X connect 2 0 32 0;
+#X connect 7 0 31 0;
+#X connect 7 0 33 0;
 #X connect 12 0 15 0;
 #X connect 13 0 14 1;
 #X connect 14 0 17 1;
@@ -119,8 +143,8 @@ at the original period when the center frequency roosts on a harmonic.
 #X connect 21 0 20 1;
 #X connect 23 0 22 1;
 #X connect 24 0 22 2;
-#X connect 32 0 35 0;
-#X connect 33 0 32 0;
-#X connect 33 1 32 1;
-#X connect 34 0 14 0;
-#X connect 35 0 17 0;
+#X connect 31 0 34 0;
+#X connect 32 0 31 0;
+#X connect 32 1 31 1;
+#X connect 33 0 14 0;
+#X connect 34 0 17 0;
diff --git a/pd/doc/3.audio.examples/F12.paf.pd b/pd/doc/3.audio.examples/F12.paf.pd
index f220bd45d..00a1551df 100644
--- a/pd/doc/3.audio.examples/F12.paf.pd
+++ b/pd/doc/3.audio.examples/F12.paf.pd
@@ -1,30 +1,28 @@
-#N canvas 262 0 692 819 12;
-#X obj 38 593 cos~;
-#X obj 38 570 *~;
-#X obj 81 593 cos~;
-#X obj 137 527 wrap~;
-#X obj 101 527 -~;
-#X obj 81 570 +~;
-#X obj 74 623 -~;
-#X obj 94 655 *~;
-#X obj 56 655 +~;
-#X obj 100 500 samphold~;
-#X floatatom 159 378 4 0 500 0 - - -;
-#X obj 159 401 / 10;
-#X text 157 311 center;
-#X obj 159 449 line~;
-#X text 157 359 fundamental);
-#X obj 159 426 pack 0 50;
-#X obj 39 446 phasor~;
-#X floatatom 39 425 4 0 0 0 - - -;
-#X text 19 398 fundamental;
-#X text 303 460 index;
-#X text 303 477 (percent);
-#X floatatom 303 498 4 0 500 0 - - -;
-#X obj 303 544 line~;
-#X obj 224 564 *~;
-#X obj 303 521 pack 0 50;
-#N canvas 0 0 450 300 graph4 0;
+#N canvas 337 22 692 652 10;
+#X obj 98 520 cos~;
+#X obj 98 497 *~;
+#X obj 141 520 cos~;
+#X obj 197 454 wrap~;
+#X obj 161 454 -~;
+#X obj 141 497 +~;
+#X obj 141 550 -~;
+#X obj 141 582 *~;
+#X obj 97 582 +~;
+#X obj 160 427 samphold~;
+#X floatatom 159 305 4 0 500 0 - - -, f 4;
+#X obj 159 328 / 10;
+#X obj 159 376 line~;
+#X obj 159 353 pack 0 50;
+#X obj 99 373 phasor~;
+#X floatatom 99 352 4 0 0 0 - - -, f 4;
+#X text 79 333 fundamental;
+#X text 333 390 index;
+#X text 333 407 (percent);
+#X floatatom 333 428 4 0 500 0 - - -, f 4;
+#X obj 333 474 line~;
+#X obj 254 494 *~;
+#X obj 333 451 pack 0 50;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array bell-curve 200 float 1;
 #A 0 1.12535e-07 1.54727e-07 2.12059e-07 2.89706e-07 3.94519e-07 5.35535e-07
 7.24633e-07 9.77371e-07 1.31404e-06 1.76105e-06 2.35258e-06 3.13275e-06
@@ -56,7 +54,7 @@
 3.13275e-06 2.35258e-06 1.76105e-06 1.31404e-06 9.77371e-07 7.24633e-07
 5.35535e-07 3.94519e-07 2.89706e-07 2.12059e-07 1.54727e-07;
 #X coords 0 1 199 0 200 140 1;
-#X restore 443 555 graph;
+#X restore 432 266 graph;
 #N canvas 94 264 600 388 make-table 0;
 #X msg 81 44 bang;
 #X obj 81 73 t b b;
@@ -83,28 +81,24 @@
 #X connect 8 0 7 0;
 #X connect 9 0 5 1;
 #X connect 10 0 8 0;
-#X restore 507 515 pd make-table;
-#X obj 224 541 cos~;
-#X obj 224 518 -~ 0.25;
-#X obj 224 587 +~ 100;
-#X obj 224 610 tabread4~ bell-curve;
-#X obj 95 684 *~;
-#X text 131 682 <--ring mod step;
-#X text 256 635 waveshaper;
-#X text 425 791 updated for Pd version 0.37;
-#X text 157 326 frequency;
-#X text 157 342 (tenths of;
-#X text 441 698 0;
-#X text 632 697 200;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 496 226 pd make-table;
+#X obj 254 471 cos~;
+#X obj 254 448 -~ 0.25;
+#X obj 254 517 +~ 100;
+#X obj 254 540 tabread4~ bell-curve;
+#X obj 125 614 *~;
+#X text 286 557 waveshaper;
+#X text 430 409 0;
+#X text 621 408 200;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array F12-spectrum 259 float 0;
 #X coords 0 0.51 258 -0.008 256 130 1;
-#X restore 421 308 graph;
-#X text 418 440 0;
-#X text 475 444 -- frequency --;
-#X text 644 441 2700;
-#X obj 95 756 output~;
-#X obj 94 725 hip~;
+#X restore 406 48 graph;
+#X text 403 180 0;
+#X text 487 184 -- frequency --;
+#X text 629 181 2700;
+#X obj 125 686 output~;
+#X obj 124 655 hip~;
 #N canvas 122 211 558 609 fft 0;
 #X obj 23 55 inlet~;
 #X obj 210 303 inlet;
@@ -161,31 +155,60 @@ until much later.;
 #X connect 25 0 26 1;
 #X connect 26 0 2 0;
 #X connect 28 0 24 1;
-#X restore 148 725 pd fft;
-#X obj 208 704 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 178 655 pd fft;
+#X obj 211 611 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 208 725 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#X obj 211 632 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X text 229 724 <-- repeatedly;
-#X text 230 704 <-- graph once;
-#X text 17 21 Instead of using the two cosines as FM carrier oscillators
+#X text 232 631 <-- repeatedly;
+#X text 233 611 <-- graph once;
+#X text 19 46 Instead of using the two cosines as FM carrier oscillators
 \, we can use them as ring modulators for a natural or synthetic tone.
 Here we use waveshaping - to wit \, a sinusoid looking up a Gaussian
 bell curve. This has the nice properties that the partials are always
 positive cosines in phase \, and the spectrum spreads out smoothly
 as the index changes.;
-#X text 98 1 PAF: TWO-COSINE RING MODULATOR FOR WAVESHAPER;
-#X text 17 253 Then with ~* we do the ring modulation and we're done.
-This is the PAF (phase-aligned formant) synthesis algorithm (patented
-1993 by IRCAM).;
-#X obj 224 492 *~ 0.5;
-#X text 17 129 For phase coherency \, the waveshaper and the cosine
-pair are driven from the same phasor~ object. Since the waveshaping
+#X obj 254 422 *~ 0.5;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header PAF: 20 10 1 18
+-261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 38 26 two-cosine ring modulator for waveshaper;
+#X text 19 132 For phase coherency \, the waveshaper and the cosine
+pair are driven from the same [phasor~] object. Since the waveshaping
 is done using a symmetric curve \, its output is at double the frequency
 of the input. So for each cycle of the phasor we compute a half-cycle
 of the sine function (by multiplying by 0.5 and subtracting 0.25 before
 the cosine lookup). We center the cosine output for lookup in a 200-point
 table containing a bell curve.;
+#X text 18 229 Then with [*~] we do the ring modulation and we're done.
+This is the PAF (phase-aligned formant) synthesis algorithm (patented
+1993 by IRCAM).;
+#X text 157 270 center frequency;
+#X text 157 285 (tenths of fundamental);
+#X text 16 613 ring mod step -->;
+#X obj 1 751 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION two-cosine ring modulator for waveshaper
+;
+#X restore 392 753 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 PAF- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 753 pd References;
+#X obj 6 753 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 6 1;
 #X connect 0 0 8 0;
 #X connect 1 0 5 0;
@@ -197,30 +220,30 @@ table containing a bell curve.;
 #X connect 5 0 2 0;
 #X connect 6 0 7 0;
 #X connect 7 0 8 1;
-#X connect 8 0 31 0;
+#X connect 8 0 29 0;
 #X connect 9 0 4 0;
 #X connect 9 0 3 0;
 #X connect 10 0 11 0;
-#X connect 11 0 15 0;
-#X connect 13 0 9 0;
-#X connect 15 0 13 0;
-#X connect 16 0 9 1;
-#X connect 16 0 5 1;
-#X connect 16 0 1 0;
-#X connect 16 0 53 0;
-#X connect 17 0 16 0;
-#X connect 21 0 24 0;
-#X connect 22 0 23 1;
-#X connect 23 0 29 0;
-#X connect 24 0 22 0;
-#X connect 27 0 23 0;
-#X connect 28 0 27 0;
-#X connect 29 0 30 0;
-#X connect 30 0 31 1;
-#X connect 31 0 44 0;
-#X connect 31 0 45 0;
-#X connect 44 0 43 0;
-#X connect 44 0 43 1;
-#X connect 46 0 45 1;
-#X connect 47 0 45 2;
-#X connect 53 0 28 0;
+#X connect 11 0 13 0;
+#X connect 12 0 9 0;
+#X connect 13 0 12 0;
+#X connect 14 0 9 1;
+#X connect 14 0 5 1;
+#X connect 14 0 1 0;
+#X connect 14 0 45 0;
+#X connect 15 0 14 0;
+#X connect 19 0 22 0;
+#X connect 20 0 21 1;
+#X connect 21 0 27 0;
+#X connect 22 0 20 0;
+#X connect 25 0 21 0;
+#X connect 26 0 25 0;
+#X connect 27 0 28 0;
+#X connect 28 0 29 1;
+#X connect 29 0 38 0;
+#X connect 29 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 37 1;
+#X connect 40 0 39 1;
+#X connect 41 0 39 2;
+#X connect 45 0 26 0;
diff --git a/pd/doc/3.audio.examples/F13.paf.control.pd b/pd/doc/3.audio.examples/F13.paf.control.pd
index 59ebd3349..8ee79bba6 100644
--- a/pd/doc/3.audio.examples/F13.paf.control.pd
+++ b/pd/doc/3.audio.examples/F13.paf.control.pd
@@ -1,25 +1,24 @@
-#N canvas 89 36 756 792 12;
-#X obj 127 608 cos~;
-#X obj 127 585 *~;
-#X obj 170 608 cos~;
-#X obj 225 553 wrap~;
-#X obj 189 553 -~;
-#X obj 170 585 +~;
-#X obj 163 638 -~;
-#X obj 183 670 *~;
-#X obj 145 670 +~;
-#X obj 189 521 samphold~;
-#X floatatom 189 321 4 0 127 0 - - -;
-#X text 185 283 center;
-#X obj 189 388 line~;
-#X obj 189 365 pack 0 50;
-#X obj 80 464 phasor~;
-#X floatatom 80 370 4 0 127 0 - - -;
-#X text 71 331 fundamental;
-#X floatatom 387 384 4 0 127 0 - - -;
-#X obj 387 455 line~;
-#X obj 298 584 *~;
-#X obj 387 432 pack 0 50;
+#N canvas 400 28 528 645 10;
+#X obj 76 528 cos~;
+#X obj 76 505 *~;
+#X obj 119 528 cos~;
+#X obj 174 473 wrap~;
+#X obj 138 473 -~;
+#X obj 119 505 +~;
+#X obj 112 558 -~;
+#X obj 132 590 *~;
+#X obj 94 590 +~;
+#X obj 138 441 samphold~;
+#X floatatom 138 241 4 0 127 0 - - -, f 4;
+#X obj 138 308 line~;
+#X obj 138 285 pack 0 50;
+#X obj 29 384 phasor~;
+#X floatatom 29 290 4 0 127 0 - - -, f 4;
+#X text 20 251 fundamental;
+#X floatatom 336 304 4 0 127 0 - - -, f 4;
+#X obj 336 375 line~;
+#X obj 247 504 *~;
+#X obj 336 352 pack 0 50;
 #N canvas 94 264 600 388 make-table 0;
 #X msg 81 44 bang;
 #X obj 81 73 t b b;
@@ -32,7 +31,7 @@
 #X obj 52 270 expr exp(-$f1*$f1);
 #X obj 63 168 sel 199;
 #X obj 51 241 expr ($f1-100)/25;
-#N canvas 0 0 450 300 graph4 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array bell-curve 200 float 1;
 #A 0 1.12535e-07 1.54727e-07 2.12059e-07 2.89706e-07 3.94519e-07 5.35535e-07
 7.24633e-07 9.77371e-07 1.31404e-06 1.76105e-06 2.35258e-06 3.13275e-06
@@ -79,39 +78,30 @@
 #X connect 8 0 7 0;
 #X connect 9 0 5 1;
 #X connect 10 0 8 0;
-#X restore 536 647 pd make-table;
-#X obj 298 558 cos~;
-#X obj 298 533 -~ 0.25;
-#X obj 298 610 +~ 100;
-#X obj 298 633 tabread4~ bell-curve;
-#X obj 184 699 *~;
-#X text 330 658 waveshaper;
-#X text 31 2 CHANGING PAF CONTROLS TO NATURAL UNITS;
-#X obj 80 394 mtof;
-#X obj 211 413 expr 1/$f1;
-#X obj 189 341 mtof;
-#X text 184 298 freq.;
-#X obj 189 437 *~;
-#X text 385 357 bandwidth;
-#X obj 387 406 mtof;
-#X obj 387 491 *~;
-#X obj 387 515 *~ 25;
-#X text 18 23 The more "natural" units for describing a formant might
-be center frequency and bandwidth \, so that you can change the fundamental
-without having the formant shift up and down in parallel. Here all
-three frequencies are expressed in MIDI units. The bandwidth and center
-frequency have to be divided by the fundamental (the expr 1/$f1 takes
-its reciprocal and two *~ objects finish the division.);
-#X text 427 490 divide by fundamental;
-#X text 445 514 range for table;
-#X text 364 609 offset to middle of table;
-#X text 196 459 C.F. relative;
-#X text 197 475 to fundamental;
-#X text 69 346 (MIDI units);
-#X text 220 697 ring mod;
-#X obj 184 726 output~;
-#X text 483 762 updated for Pd version 0.37;
-#X text 19 137 Here we take a somewhat lax approach to sampholding
+#X restore 255 647 pd make-table;
+#X obj 247 478 cos~;
+#X obj 247 453 -~ 0.25;
+#X obj 247 530 +~ 100;
+#X obj 247 553 tabread4~ bell-curve;
+#X obj 133 619 *~;
+#X text 279 578 waveshaper;
+#X obj 29 314 mtof;
+#X obj 160 333 expr 1/$f1;
+#X obj 138 261 mtof;
+#X obj 138 357 *~;
+#X text 334 277 bandwidth;
+#X obj 336 326 mtof;
+#X obj 336 411 *~;
+#X obj 336 435 *~ 25;
+#X text 376 410 divide by fundamental;
+#X text 394 434 range for table;
+#X text 313 529 offset to middle of table;
+#X text 145 379 C.F. relative;
+#X text 146 395 to fundamental;
+#X text 18 266 (MIDI units);
+#X text 169 617 ring mod;
+#X obj 133 646 output~;
+#X text 20 123 Here we take a somewhat lax approach to sampholding
 the center frequency control. The frequency itself changes instantly
 \, but the center/fundamental frequency ratio waits for the next period.
 This gives a slight "chirp" if the fundamental is abruptly raised a
@@ -119,7 +109,39 @@ couple of octaves. There's no easy way using Pd's built-in primitives
 to avoid this. Note however that there's a "paf~" extern available
 which solves this problem better and \, moreover \, runs much faster.
 ;
-#X obj 298 508 *~ 0.5;
+#X obj 247 428 *~ 0.5;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header changing_PAF_controls_to_natural_units
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 37 The more "natural" units for describing a formant might
+be center frequency and bandwidth \, so that you can change the fundamental
+without having the formant shift up and down in parallel. Here all
+three frequencies are expressed in MIDI units. The bandwidth and center
+frequency have to be divided by the fundamental (the expr 1/$f1 takes
+its reciprocal and two [*~] objects finish the division.);
+#X text 136 222 center freq.;
+#X obj 1 711 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION changing PAF controls to natural units;
+#X text 12 25 KEYWORDS signal;
+#X restore 392 713 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 PAF- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 713 pd References;
+#X obj 6 713 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 6 1;
 #X connect 0 0 8 0;
 #X connect 1 0 5 0;
@@ -131,34 +153,34 @@ which solves this problem better and \, moreover \, runs much faster.
 #X connect 5 0 2 0;
 #X connect 6 0 7 0;
 #X connect 7 0 8 1;
-#X connect 8 0 26 0;
+#X connect 8 0 25 0;
 #X connect 9 0 4 0;
 #X connect 9 0 3 0;
-#X connect 10 0 31 0;
-#X connect 12 0 33 0;
-#X connect 13 0 12 0;
-#X connect 14 0 9 1;
-#X connect 14 0 1 0;
-#X connect 14 0 5 1;
-#X connect 14 0 49 0;
-#X connect 15 0 29 0;
-#X connect 17 0 35 0;
-#X connect 18 0 36 0;
-#X connect 19 0 24 0;
-#X connect 20 0 18 0;
-#X connect 22 0 19 0;
-#X connect 23 0 22 0;
-#X connect 24 0 25 0;
-#X connect 25 0 26 1;
-#X connect 26 0 46 0;
-#X connect 26 0 46 1;
-#X connect 29 0 30 0;
-#X connect 29 0 14 0;
-#X connect 30 0 33 1;
-#X connect 30 0 36 1;
-#X connect 31 0 13 0;
-#X connect 33 0 9 0;
-#X connect 35 0 20 0;
-#X connect 36 0 37 0;
-#X connect 37 0 19 1;
-#X connect 49 0 23 0;
+#X connect 10 0 29 0;
+#X connect 11 0 30 0;
+#X connect 12 0 11 0;
+#X connect 13 0 9 1;
+#X connect 13 0 1 0;
+#X connect 13 0 5 1;
+#X connect 13 0 44 0;
+#X connect 14 0 27 0;
+#X connect 16 0 32 0;
+#X connect 17 0 33 0;
+#X connect 18 0 23 0;
+#X connect 19 0 17 0;
+#X connect 21 0 18 0;
+#X connect 22 0 21 0;
+#X connect 23 0 24 0;
+#X connect 24 0 25 1;
+#X connect 25 0 42 0;
+#X connect 25 0 42 1;
+#X connect 27 0 28 0;
+#X connect 27 0 13 0;
+#X connect 28 0 30 1;
+#X connect 28 0 33 1;
+#X connect 29 0 12 0;
+#X connect 30 0 9 0;
+#X connect 32 0 19 0;
+#X connect 33 0 34 0;
+#X connect 34 0 18 1;
+#X connect 44 0 22 0;
diff --git a/pd/doc/3.audio.examples/F14.wave.packet.pd b/pd/doc/3.audio.examples/F14.wave.packet.pd
index bb6c92b2f..9e551fde8 100644
--- a/pd/doc/3.audio.examples/F14.wave.packet.pd
+++ b/pd/doc/3.audio.examples/F14.wave.packet.pd
@@ -1,112 +1,135 @@
-#N canvas 448 73 647 779 12;
-#X floatatom 272 241 4 0 127 0 - - -;
-#X text 268 203 center;
-#X obj 272 308 line~;
-#X obj 272 285 pack 0 50;
-#X floatatom 205 246 4 0 127 0 - - -;
-#X text 153 204 fundamental;
-#X floatatom 397 252 4 0 127 0 - - -;
-#X obj 397 323 line~;
-#X obj 132 586 *~;
-#X obj 397 300 pack 0 50;
-#X obj 132 635 cos~;
-#X obj 206 310 mtof;
-#X obj 294 333 expr 1/$f1;
-#X obj 272 261 mtof;
-#X text 267 218 freq.;
-#X obj 272 357 *~;
-#X text 394 231 bandwidth;
-#X obj 397 274 mtof;
-#X obj 396 366 *~;
-#X text 437 358 divide by fundamental;
-#X text 149 220 (MIDI units);
-#X obj 136 720 output~;
-#X text 91 2 WAVE PACKETS AS ALTERNATIVE TO PAF;
-#X obj 79 421 phasor~;
-#X obj 471 479 +~ 0.5;
-#X obj 471 504 wrap~;
-#X text 442 424 second phase signal;
-#X text 443 439 out of phase from;
-#X text 441 456 first one;
-#X obj 132 658 +~ 1;
-#X obj 78 522 -~ 0.5;
-#X obj 135 692 +~;
-#X obj 77 586 *~;
-#X obj 77 609 cos~;
-#X obj 214 556 samphold~;
-#X obj 126 555 samphold~;
-#X obj 76 634 *~;
-#X obj 132 610 clip~ -0.5 0.5;
-#X obj 372 597 *~;
-#X obj 372 646 cos~;
-#X obj 372 669 +~ 1;
-#X obj 318 533 -~ 0.5;
-#X obj 317 597 *~;
-#X obj 317 620 cos~;
-#X obj 454 567 samphold~;
-#X obj 366 566 samphold~;
-#X obj 316 645 *~;
-#X obj 372 621 clip~ -0.5 0.5;
-#X obj 396 390 max~ 1;
-#X obj 205 285 - 12;
-#X text 375 755 updated for Pd version 0.40.;
-#X text 20 122 The patch is almost exactly like B13 (the overlapping
+#N canvas 387 23 561 651 10;
+#X floatatom 232 201 4 0 127 0 - - -, f 4;
+#X text 228 163 center;
+#X obj 232 268 line~;
+#X obj 232 245 pack 0 50;
+#X floatatom 165 206 4 0 127 0 - - -, f 4;
+#X text 113 164 fundamental;
+#X floatatom 357 212 4 0 127 0 - - -, f 4;
+#X obj 357 283 line~;
+#X obj 92 546 *~;
+#X obj 357 260 pack 0 50;
+#X obj 92 595 cos~;
+#X obj 166 270 mtof;
+#X obj 254 293 expr 1/$f1;
+#X obj 232 221 mtof;
+#X text 227 178 freq.;
+#X obj 232 317 *~;
+#X text 354 191 bandwidth;
+#X obj 357 234 mtof;
+#X obj 356 326 *~;
+#X text 397 318 divide by fundamental;
+#X text 109 180 (MIDI units);
+#X obj 96 680 output~;
+#X obj 39 381 phasor~;
+#X obj 431 439 +~ 0.5;
+#X obj 431 464 wrap~;
+#X text 402 384 second phase signal;
+#X text 403 399 out of phase from;
+#X text 401 416 first one;
+#X obj 92 618 +~ 1;
+#X obj 38 482 -~ 0.5;
+#X obj 95 652 +~;
+#X obj 37 546 *~;
+#X obj 37 569 cos~;
+#X obj 174 516 samphold~;
+#X obj 86 515 samphold~;
+#X obj 36 594 *~;
+#X obj 92 570 clip~ -0.5 0.5;
+#X obj 332 557 *~;
+#X obj 332 606 cos~;
+#X obj 332 629 +~ 1;
+#X obj 278 493 -~ 0.5;
+#X obj 277 557 *~;
+#X obj 277 580 cos~;
+#X obj 414 527 samphold~;
+#X obj 326 526 samphold~;
+#X obj 276 605 *~;
+#X obj 332 581 clip~ -0.5 0.5;
+#X obj 356 350 max~ 1;
+#X obj 165 245 - 12;
+#X text 19 112 The patch is almost exactly like B13 (the overlapping
 sample) except that \, instead of using tabread~ we just use cos~ \,
 and that we control pulse width (for bandwidth) as well as wavetable
 transposition (for center frequency).;
-#X text 18 23 The stretched wavetable method is an alternative to the
+#X text 19 37 The stretched wavetable method is an alternative to the
 PAF generator \, slightly more expensive in processing time but with
 two advantages: first \, it is not patent encumbered (PAF patent runs
 out in 2011) and second \, it can be generalized to use samples instead
 of sinusoids to make complex spectral shapes.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header wave_packets_as_alternative_to_PAF
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 745 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.40. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION wave packets as alternative to PAF;
+#X restore 392 747 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 wave packets- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 747 pd References;
+#X obj 6 747 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 13 0;
 #X connect 2 0 15 0;
 #X connect 3 0 2 0;
-#X connect 4 0 49 0;
+#X connect 4 0 48 0;
 #X connect 6 0 17 0;
 #X connect 7 0 18 0;
-#X connect 8 0 37 0;
+#X connect 8 0 36 0;
 #X connect 9 0 7 0;
-#X connect 10 0 29 0;
+#X connect 10 0 28 0;
 #X connect 11 0 12 0;
-#X connect 11 0 23 0;
+#X connect 11 0 22 0;
 #X connect 12 0 15 1;
 #X connect 12 0 18 1;
 #X connect 13 0 3 0;
-#X connect 15 0 35 0;
-#X connect 15 0 45 0;
+#X connect 15 0 34 0;
+#X connect 15 0 44 0;
 #X connect 17 0 9 0;
-#X connect 18 0 48 0;
+#X connect 18 0 47 0;
+#X connect 22 0 23 0;
+#X connect 22 0 29 0;
+#X connect 22 0 34 1;
+#X connect 22 0 33 1;
 #X connect 23 0 24 0;
-#X connect 23 0 30 0;
-#X connect 23 0 35 1;
-#X connect 23 0 34 1;
-#X connect 24 0 25 0;
-#X connect 25 0 41 0;
-#X connect 25 0 45 1;
-#X connect 25 0 44 1;
-#X connect 29 0 36 1;
-#X connect 30 0 8 0;
-#X connect 30 0 32 0;
-#X connect 31 0 21 0;
-#X connect 31 0 21 1;
-#X connect 32 0 33 0;
-#X connect 33 0 36 0;
-#X connect 34 0 8 1;
-#X connect 35 0 32 1;
-#X connect 36 0 31 0;
-#X connect 37 0 10 0;
-#X connect 38 0 47 0;
-#X connect 39 0 40 0;
-#X connect 40 0 46 1;
-#X connect 41 0 38 0;
+#X connect 24 0 40 0;
+#X connect 24 0 44 1;
+#X connect 24 0 43 1;
+#X connect 28 0 35 1;
+#X connect 29 0 8 0;
+#X connect 29 0 31 0;
+#X connect 30 0 21 0;
+#X connect 30 0 21 1;
+#X connect 31 0 32 0;
+#X connect 32 0 35 0;
+#X connect 33 0 8 1;
+#X connect 34 0 31 1;
+#X connect 35 0 30 0;
+#X connect 36 0 10 0;
+#X connect 37 0 46 0;
+#X connect 38 0 39 0;
+#X connect 39 0 45 1;
+#X connect 40 0 37 0;
+#X connect 40 0 41 0;
 #X connect 41 0 42 0;
-#X connect 42 0 43 0;
-#X connect 43 0 46 0;
-#X connect 44 0 38 1;
-#X connect 45 0 42 1;
-#X connect 46 0 31 1;
-#X connect 47 0 39 0;
-#X connect 48 0 34 0;
-#X connect 48 0 44 0;
-#X connect 49 0 11 0;
+#X connect 42 0 45 0;
+#X connect 43 0 37 1;
+#X connect 44 0 41 1;
+#X connect 45 0 30 1;
+#X connect 46 0 38 0;
+#X connect 47 0 33 0;
+#X connect 47 0 43 0;
+#X connect 48 0 11 0;
diff --git a/pd/doc/3.audio.examples/G01.delay.pd b/pd/doc/3.audio.examples/G01.delay.pd
index 6b03ed12a..2696f62b0 100644
--- a/pd/doc/3.audio.examples/G01.delay.pd
+++ b/pd/doc/3.audio.examples/G01.delay.pd
@@ -1,10 +1,6 @@
-#N canvas 19 35 777 377 12;
-#X text 103 7 DELAYS;
-#X text 248 79 The delwrite~ object creates the delay line \; you give
-it a name and a size in milliseconds. Each delwrite~ should have a
-different name.;
+#N canvas 424 20 448 557 10;
 #N canvas 0 0 548 248 sample 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array G01-tab 61079 float 0;
 #X coords 0 1 61078 -1 200 140 1;
 #X restore 100 20 graph;
@@ -13,36 +9,63 @@ different name.;
 #X msg 61 199 read -resize ../sound/voice.wav G01-tab;
 #X connect 1 0 3 0;
 #X connect 3 0 2 0;
-#X restore 253 337 pd sample;
-#X floatatom 38 196 4 0 999 0 - - -;
-#X text 81 195 <-- delay time;
-#X text 46 230 read from delay line;
-#X obj 38 249 delread~ delay1;
-#X obj 14 87 tabplay~ G01-tab;
-#X obj 14 63 metro 1000;
-#X obj 14 39 loadbang;
-#X text 40 146 write to delay line;
-#X obj 16 303 output~;
-#X obj 15 275 +~;
-#X obj 24 165 delwrite~ delay1 1000;
-#X text 499 348 updated for Pd version 0.37-1;
-#X text 248 24 You can delay a signal using the delwrite~ and delread~
+#X restore 205 241 pd sample;
+#X floatatom 38 189 4 0 999 0 - - -, f 4;
+#X text 72 189 <-- delay time;
+#X text 46 223 read from delay line;
+#X obj 38 242 delread~ delay1;
+#X obj 22 90 tabplay~ G01-tab;
+#X obj 22 66 metro 1000;
+#X obj 22 42 loadbang;
+#X text 48 139 write to delay line;
+#X obj 24 296 output~;
+#X obj 23 268 +~;
+#X obj 32 158 delwrite~ delay1 1000;
+#X text 36 110 test signal to delay;
+#X text 105 203 (msec);
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header delays 20 10 1 18
+-261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 535 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37-1. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION delays;
+#X restore 392 537 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 delays- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 537 pd References;
+#X text 21 345 You can delay a signal using the [delwrite~] and [delread~]
 objects. In this example \, a sample loops continuously and is added
 to a delayed copy of itself.;
-#X text 247 215 The delread~ object always delays the signal an integer
+#X text 21 387 The [delwrite~] object creates the delay line \; you
+give it a name and a size in milliseconds. Each [delwrite~] should
+have a different name.;
+#X text 21 429 [delread~]'s arguments are the name of a [delwrite~]
+(of which there should be exactly one) and an optional delay time in
+milliseconds between 0 and the length of the delay line. Each [delwrite~]
+may have as many [delread~]s as you wish \, which can then function
+as multiple delay taps.;
+#X text 20 493 The [delread~] object always delays the signal an integer
 number of samples and does no interpolation.;
-#X text 28 107 test signal to delay;
-#X text 248 130 Delread~'s arguments are the name of a delwrite (of
-which there should be exactly one) and an optional delay time in milliseconds
-between 0 and the length of the delay line. Each delwrite~ may have
-as many delread~s as you wish \, which can then function as multiple
-delay taps.;
-#X text 114 209 (msec);
-#X connect 3 0 6 0;
-#X connect 6 0 12 1;
-#X connect 7 0 12 0;
-#X connect 7 0 13 0;
-#X connect 8 0 7 0;
-#X connect 9 0 8 0;
-#X connect 12 0 11 0;
-#X connect 12 0 11 1;
+#X obj 6 537 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 1 0 4 0;
+#X connect 4 0 10 1;
+#X connect 5 0 10 0;
+#X connect 5 0 11 0;
+#X connect 6 0 5 0;
+#X connect 7 0 6 0;
+#X connect 10 0 9 0;
+#X connect 10 0 9 1;
diff --git a/pd/doc/3.audio.examples/G02.delay.loop.pd b/pd/doc/3.audio.examples/G02.delay.loop.pd
index ba355b7c9..def2bbb03 100644
--- a/pd/doc/3.audio.examples/G02.delay.loop.pd
+++ b/pd/doc/3.audio.examples/G02.delay.loop.pd
@@ -1,44 +1,67 @@
-#N canvas 130 225 601 527 12;
-#X floatatom 36 197 5 -30 130 0 - - -;
-#X floatatom 58 322 0 0 0 0 - - -;
-#X text 88 196 <-- pitch;
-#X text 88 321 <-- delay time;
-#X text 287 420 write to delay line;
-#X text 246 346 read from delay line;
-#X text 72 393 add the original and the delayed signal;
-#X obj 36 233 mtof;
-#X msg 111 233 1;
-#X obj 37 282 *~;
-#X obj 37 394 +~;
-#X obj 58 370 *~ 0.7;
-#X text 116 370 feedback gain;
-#X text 57 9 DELAYS WITH FEEDBACK;
-#X text 33 39 You can feed the result of a delread~ module back into
-its own delwrite~ \, as long as you're careful about stability. For
-delays below 30 msec \, you can frequently hear the resonant pitch.
-For longer delay times you get the famous old delay loop effect.;
-#X obj 111 281 *~;
-#X obj 111 257 adsr 1 100 1000 0 1000;
-#X obj 37 463 output~;
-#X text 32 118 We've added an amplitude control here so that the test
+#N canvas 424 19 448 520 10;
+#X floatatom 22 167 5 -30 130 0 - - -, f 5;
+#X floatatom 39 292 0 0 0 0 - - -;
+#X text 61 166 <-- pitch;
+#X text 69 291 <-- delay time;
+#X text 58 363 add the original and the delayed signal;
+#X obj 22 203 mtof;
+#X msg 97 193 1;
+#X obj 23 262 *~;
+#X obj 23 364 +~;
+#X obj 39 340 *~ 0.7;
+#X text 97 340 feedback gain;
+#X obj 97 241 *~;
+#X obj 97 217 adsr 1 100 1000 0 1000;
+#X obj 23 433 output~;
+#X text 20 102 We've added an amplitude control here so that the test
 oscillator only speaks while you're dragging the pitch up and down.
 Be sure to try shift-dragging on the pitch control.;
-#X text 330 495 updated for Pd version 0.37-1;
-#X obj 36 257 phasor~;
-#X obj 58 346 delread~ G02-del 160;
-#X obj 77 419 delwrite~ G02-del 2000;
-#X connect 0 0 7 0;
-#X connect 0 0 8 0;
-#X connect 1 0 21 0;
-#X connect 7 0 20 0;
-#X connect 8 0 16 0;
-#X connect 9 0 10 0;
-#X connect 10 0 17 0;
-#X connect 10 0 17 1;
-#X connect 10 0 22 0;
-#X connect 11 0 10 1;
-#X connect 15 0 9 1;
-#X connect 16 0 15 0;
-#X connect 16 0 15 1;
-#X connect 20 0 9 0;
-#X connect 21 0 11 0;
+#X obj 22 227 phasor~;
+#X obj 39 316 delread~ G02-del 160;
+#X obj 63 389 delwrite~ G02-del 2000;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header delays_with_feedback
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 38 You can feed the result of a [delread~] module back into
+its own [delwrite~] \, as long as you're careful about stability. For
+delays below 30 msec \, you can frequently hear the resonant pitch.
+For longer delay times you get the famous old delay loop effect.;
+#X text 169 316 read from delay line;
+#X text 210 389 write to delay line;
+#X obj 1 498 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37-1. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION delays with feedback;
+#X restore 392 500 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 delays with feedback- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 500 pd References;
+#X obj 6 500 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 5 0;
+#X connect 0 0 6 0;
+#X connect 1 0 16 0;
+#X connect 5 0 15 0;
+#X connect 6 0 12 0;
+#X connect 7 0 8 0;
+#X connect 8 0 13 0;
+#X connect 8 0 13 1;
+#X connect 8 0 17 0;
+#X connect 9 0 8 1;
+#X connect 11 0 7 1;
+#X connect 12 0 11 0;
+#X connect 12 0 11 1;
+#X connect 15 0 7 0;
+#X connect 16 0 9 0;
diff --git a/pd/doc/3.audio.examples/G03.delay.variable.pd b/pd/doc/3.audio.examples/G03.delay.variable.pd
index c2ece553c..cd7a451ff 100644
--- a/pd/doc/3.audio.examples/G03.delay.variable.pd
+++ b/pd/doc/3.audio.examples/G03.delay.variable.pd
@@ -1,48 +1,72 @@
-#N canvas 100 17 660 504 12;
+#N canvas 424 19 448 503 10;
 #X obj 33 305 hip~ 10;
-#X floatatom 301 221 0 0 0 0 - - -;
-#X obj 301 269 line~;
-#X obj 301 245 pack 0 100;
-#X floatatom 226 191 0 0 0 0 - - -;
-#X floatatom 382 297 0 0 0 0 - - -;
-#X obj 382 369 line~;
-#X obj 382 345 pack 0 100;
-#X obj 382 321 * 0.01;
-#X floatatom 113 166 0 0 0 0 - - -;
-#X obj 113 237 line~;
-#X obj 113 213 pack 0 100;
+#X floatatom 251 216 0 0 0 0 - - -;
+#X obj 251 264 line~;
+#X obj 251 240 pack 0 100;
+#X floatatom 176 191 0 0 0 0 - - -;
+#X floatatom 295 297 0 0 0 0 - - -;
+#X obj 295 369 line~;
+#X obj 295 345 pack 0 100;
+#X obj 295 321 * 0.01;
+#X floatatom 94 166 0 0 0 0 - - -;
+#X obj 94 237 line~;
+#X obj 94 213 pack 0 100;
 #X obj 33 257 *~;
 #X obj 33 281 cos~;
 #X floatatom 33 134 0 0 0 0 - - -;
 #X obj 33 158 mtof;
 #X obj 33 182 * 0.5;
 #X obj 33 329 clip~ -0.2 0.2;
-#X obj 113 189 * 0.01;
+#X obj 94 189 * 0.01;
 #X obj 33 353 +~;
-#X obj 361 395 *~;
-#X obj 226 287 *~;
-#X obj 226 215 / 100;
+#X obj 281 395 *~;
+#X obj 176 287 *~;
+#X obj 176 215 / 100;
 #X obj 33 377 hip~ 5;
-#X obj 226 263 +~ 1;
-#X obj 226 239 osc~ 0;
-#X obj 226 311 +~ 1.46;
-#X text 154 164 <-- timbre;
-#X text 66 135 <-- pitch;
-#X text 279 191 <-- cycle frequency (hundredths);
-#X text 354 222 <-- cycle depth (msec);
-#X text 431 298 <-- feedback (hundredths);
-#X text 89 6 VARIABLE DELAYS;
+#X obj 176 263 +~ 1;
+#X obj 176 239 osc~ 0;
+#X obj 176 311 +~ 1.46;
+#X text 122 165 <-- timbre;
+#X text 58 135 <-- pitch;
+#X text 206 191 <-- cycle frequency (hundredths);
+#X text 277 217 <-- cycle depth (msec);
 #X obj 33 206 osc~ 0;
-#X text 46 32 This is a fuzzed FM generator going into a delay loop
-\, this time using a variable delay object (vd~). You can get several
+#X obj 32 409 output~;
+#X obj 176 335 vd~ G03-del;
+#X obj 281 443 delwrite~ G03-del 1000;
+#X obj 281 419 clip~ -1 1;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header variable_delays
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 343 309 (hundredths);
+#X text 322 297 <-- feedback;
+#X obj 1 481 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal nonlocal;
+#X text 12 65 DESCRIPTION variable delays;
+#X restore 392 483 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 variable delays- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 483 pd References;
+#X obj 6 483 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 37 This is a fuzzed FM generator going into a delay loop
+\, this time using a variable delay object-- [vd~]. You can get several
 interesting effects this way. We have taken the precaution of clipping
 inside the loop to avoid instabilities. You can push the loop gain
 past 1 if you want \, it will just oscillate.;
-#X obj 32 409 output~;
-#X obj 226 335 vd~ G03-del;
-#X obj 361 443 delwrite~ G03-del 1000;
-#X obj 361 419 clip~ -1 1;
-#X text 387 481 updated for Pd version 0.37-1;
 #X connect 0 0 17 0;
 #X connect 1 0 3 0;
 #X connect 2 0 21 1;
@@ -59,19 +83,19 @@ past 1 if you want \, it will just oscillate.;
 #X connect 13 0 0 0;
 #X connect 14 0 15 0;
 #X connect 15 0 16 0;
-#X connect 16 0 33 0;
+#X connect 16 0 31 0;
 #X connect 17 0 19 0;
 #X connect 18 0 11 0;
 #X connect 19 0 23 0;
-#X connect 20 0 38 0;
+#X connect 20 0 35 0;
 #X connect 21 0 26 0;
 #X connect 22 0 25 0;
 #X connect 23 0 20 0;
-#X connect 23 0 35 0;
-#X connect 23 0 35 1;
+#X connect 23 0 32 0;
+#X connect 23 0 32 1;
 #X connect 24 0 21 0;
 #X connect 25 0 24 0;
-#X connect 26 0 36 0;
-#X connect 33 0 12 0;
-#X connect 36 0 19 1;
-#X connect 38 0 37 0;
+#X connect 26 0 33 0;
+#X connect 31 0 12 0;
+#X connect 33 0 19 1;
+#X connect 35 0 34 0;
diff --git a/pd/doc/3.audio.examples/G04.control.blocksize.pd b/pd/doc/3.audio.examples/G04.control.blocksize.pd
index efae501ae..544f07ce8 100644
--- a/pd/doc/3.audio.examples/G04.control.blocksize.pd
+++ b/pd/doc/3.audio.examples/G04.control.blocksize.pd
@@ -1,4 +1,4 @@
-#N canvas 100 17 637 513 12;
+#N canvas 424 19 448 486 10;
 #N canvas 195 311 647 354 delay-writer 0;
 #X obj 86 220 inlet~;
 #X obj 86 326 outlet~;
@@ -32,48 +32,73 @@ the output level control as well.;
 #X connect 4 0 11 0;
 #X connect 5 0 10 0;
 #X connect 10 0 3 0;
-#X restore 153 420 pd delay-writer;
-#X obj 283 384 expr 1000/$f1;
-#X obj 283 358 mtof;
-#X msg 153 355 1;
-#X msg 192 355 0;
-#X obj 153 254 metro 500;
-#X obj 283 304 random 60;
-#X obj 153 228 loadbang;
-#X obj 283 330 + 30;
-#X text 86 9 CONTROLLING DELAY WITH BLOCK~;
-#X text 299 420 <-- here is the delay loop;
-#X text 63 43 In situations where a delay read feeds back to a delay
+#X restore 120 370 pd delay-writer;
+#X obj 207 333 expr 1000/$f1;
+#X obj 207 307 mtof;
+#X msg 120 305 1;
+#X msg 159 305 0;
+#X obj 120 204 metro 500;
+#X obj 207 253 random 60;
+#X obj 120 178 loadbang;
+#X obj 207 279 + 30;
+#X text 224 370 <-- here is the delay loop;
+#X text 19 36 In situations where a delay read feeds back to a delay
 write \, the minimum possible delay you can achieve is one block \,
 which by default is 64 samples \, or 1.45 msec at 44100 Hz. You can
 shorten the minimum delay by changing the block size. Do this in a
 subpatch (open it to see how).;
-#X obj 153 449 output~;
-#X obj 153 387 vline~;
-#X text 371 487 updated for Pd version 0.37-1;
-#X text 61 124 Here we use this principle to make a harpisichord-like
+#X obj 120 399 output~;
+#X obj 120 337 vline~;
+#X text 19 100 Here we use this principle to make a harpisichord-like
 sound by sending pulses into a recirculating delay line (which imitates
 the travel of the wave up and down the harpsichord string.) This is
 related to Karplus-Strong synthesis \, but the idea is probably much
 older than their paper.;
-#X text 33 328 this makes;
-#X text 32 346 a rectangular;
-#X text 31 384 long.;
-#X text 409 366 length of delay line is;
-#X text 410 384 1000/(frequency);
-#X obj 192 329 del 1;
-#X text 32 364 pulse 1 msec;
-#X connect 0 0 12 0;
-#X connect 0 0 12 1;
+#X text 19 288 this makes;
+#X text 20 303 a rectangular;
+#X text 19 333 long.;
+#X text 299 325 length of delay line is;
+#X text 300 340 1000/(frequency);
+#X obj 159 279 del 1;
+#X text 20 318 pulse 1 msec;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header controlling_delay_with_block~
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 464 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 165 RELEASE_VERSION 0.41.4;
+#X text 12 145 RELEASE_DATE 2009-06-12;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for release 0.37-1. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal nonlocal;
+#X text 12 65 DESCRIPTION controlling delay with block~;
+#X restore 392 466 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 delay and block~- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 466 pd References;
+#X obj 6 466 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 11 0;
+#X connect 0 0 11 1;
 #X connect 1 0 0 1;
 #X connect 2 0 1 0;
-#X connect 3 0 13 0;
-#X connect 4 0 13 0;
+#X connect 3 0 12 0;
+#X connect 4 0 12 0;
 #X connect 5 0 3 0;
 #X connect 5 0 6 0;
-#X connect 5 0 21 0;
+#X connect 5 0 19 0;
 #X connect 6 0 8 0;
 #X connect 7 0 5 0;
 #X connect 8 0 2 0;
-#X connect 13 0 0 0;
-#X connect 21 0 4 0;
+#X connect 12 0 0 0;
+#X connect 19 0 4 0;
diff --git a/pd/doc/3.audio.examples/G05.execution.order.pd b/pd/doc/3.audio.examples/G05.execution.order.pd
index d50c97a97..acd577d21 100644
--- a/pd/doc/3.audio.examples/G05.execution.order.pd
+++ b/pd/doc/3.audio.examples/G05.execution.order.pd
@@ -1,21 +1,19 @@
-#N canvas 100 17 683 605 12;
-#X floatatom 424 290 0 0 100 0 - - -;
-#X obj 59 404 +~;
-#X text 86 9 ORDER OF EXECUTION OF DELWRITE~ AND DELREAD~/VD~;
-#X text 42 29 If you're writing to and reading from a delay line \,
+#N canvas 424 19 448 624 10;
+#X floatatom 332 260 0 0 100 0 - - -;
+#X obj 21 417 +~;
+#X text 21 49 If you're writing to and reading from a delay line \,
 you have to get the write sorted before the read or else you'll never
 get less than a block's delay. This patch compares a "wrong" flanger
 with a "right" one:;
-#X text 471 284 <-- delay in samples;
-#X obj 94 490 *~;
-#X obj 94 466 -~;
+#X obj 56 503 *~;
+#X obj 56 479 -~;
 #N canvas 0 0 600 400 delay-writer 0;
 #X obj 96 107 inlet~;
 #X obj 96 180 outlet~;
 #X obj 116 144 delwrite~ G05-d2 1000;
 #X connect 0 0 1 0;
 #X connect 0 0 2 0;
-#X restore 283 403 pd delay-writer;
+#X restore 235 396 pd delay-writer;
 #N canvas 0 0 280 330 delay-reader 0;
 #X obj 96 107 inlet~;
 #X obj 89 267 outlet~;
@@ -26,16 +24,15 @@ with a "right" one:;
 #X connect 2 0 4 0;
 #X connect 3 0 1 0;
 #X connect 4 0 3 1;
-#X restore 282 431 pd delay-reader;
-#X obj 59 490 +~;
-#X obj 424 313 / 44.1;
-#X obj 59 534 output~;
-#X obj 135 490 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
-1;
-#X text 159 490 <-- off to hear left-hand side \; on to hear right
+#X restore 244 424 pd delay-reader;
+#X obj 21 503 +~;
+#X obj 332 296 / 44.1;
+#X obj 21 537 output~;
+#X obj 97 503 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X text 121 503 <-- off to hear left-hand side \; on to hear right
 hand side.;
-#X text 393 575 updated for Pd version 0.37-1;
-#X obj 424 337 pack 0 30;
+#X obj 332 320 pack 0 30;
 #N canvas 0 0 450 300 pulse 0;
 #X obj 64 197 outlet~;
 #X obj 63 93 phasor~ 50;
@@ -46,34 +43,62 @@ hand side.;
 #X connect 2 0 3 0;
 #X connect 3 0 4 0;
 #X connect 4 0 0 0;
-#X restore 60 302 pd pulse;
-#X obj 81 354 delwrite~ G05-d1 1000;
-#X obj 82 381 vd~ G05-d1;
-#X obj 424 362 line~;
-#X text 44 96 To get them to go off in the correct order \, put the
+#X restore 22 255 pd pulse;
+#X obj 29 350 delwrite~ G05-d1 1000;
+#X obj 36 394 vd~ G05-d1;
+#X obj 332 345 line~;
+#X text 21 102 To get them to go off in the correct order \, put the
 delread~ and vd~ objects in subpatches. The audio connections between
 the subpatches force the "reader" to be sorted after the "writer".
 DSP sorting in Pd follows the hierarchy of subpatches.;
-#X text 43 175 To hear the difference scroll the delay time between
+#X text 20 166 To hear the difference scroll the delay time between
 0 and 100 samples. The patch at left doesn't let you get below 64 samples
 \, but the patch at right can go all the way down to one sample.;
-#X text 45 241 You can use the same strategy to avoid picking up unwanted
+#X text 19 219 You can use the same strategy to avoid picking up unwanted
 64-sample delays in send~/receive~ and throw~/catch~ pairs.;
-#X connect 0 0 10 0;
-#X connect 1 0 6 1;
-#X connect 1 0 9 0;
-#X connect 5 0 9 1;
-#X connect 6 0 5 0;
-#X connect 7 0 8 0;
-#X connect 8 0 6 0;
-#X connect 9 0 11 0;
-#X connect 9 0 11 1;
-#X connect 10 0 15 0;
-#X connect 12 0 5 1;
-#X connect 15 0 19 0;
-#X connect 16 0 1 0;
-#X connect 16 0 7 0;
-#X connect 16 0 17 0;
-#X connect 18 0 1 1;
-#X connect 19 0 8 1;
-#X connect 19 0 18 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header order_of_execution...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 116 29 ... of delwrite~ and delread~/vd~;
+#X obj 1 602 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37-1. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal nonlocal;
+#X text 12 65 DESCRIPTION order of execution;
+#X restore 392 604 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 order of execution- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 604 pd References;
+#X obj 6 604 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 358 275 (in samples);
+#X text 362 259 <-- delay;
+#X connect 0 0 8 0;
+#X connect 1 0 4 1;
+#X connect 1 0 7 0;
+#X connect 3 0 7 1;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 6 0 4 0;
+#X connect 7 0 9 0;
+#X connect 7 0 9 1;
+#X connect 8 0 12 0;
+#X connect 10 0 3 1;
+#X connect 12 0 16 0;
+#X connect 13 0 1 0;
+#X connect 13 0 5 0;
+#X connect 13 0 14 0;
+#X connect 15 0 1 1;
+#X connect 16 0 6 1;
+#X connect 16 0 15 0;
diff --git a/pd/doc/3.audio.examples/G06.octave.doubler.pd b/pd/doc/3.audio.examples/G06.octave.doubler.pd
index a95fe24ea..0fb601ca3 100644
--- a/pd/doc/3.audio.examples/G06.octave.doubler.pd
+++ b/pd/doc/3.audio.examples/G06.octave.doubler.pd
@@ -1,16 +1,16 @@
-#N canvas 110 17 775 614 12;
-#X obj 463 303 loadbang;
-#X obj 553 222 adc~ 1;
-#X obj 463 358 soundfiler;
-#X obj 31 394 output~;
-#X obj 554 269 tabwrite~ E03-table;
-#X msg 463 330 read ../sound/voice.wav E03-table;
-#X obj 58 83 fiddle~ 2048;
-#X obj 126 106 unpack;
-#X obj 126 130 moses 1;
-#X obj 199 108 mtof;
-#N canvas 0 0 446 202 /SUBPATCH/ 0;
-#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+#N canvas 424 19 448 622 10;
+#X obj 197 378 loadbang;
+#X obj 279 300 adc~ 1;
+#X obj 197 422 soundfiler;
+#X obj 22 396 output~;
+#X obj 280 347 tabwrite~ E03-table;
+#X msg 197 400 read ../sound/voice.wav E03-table;
+#X obj 49 95 fiddle~ 2048;
+#X obj 117 118 unpack;
+#X obj 117 142 moses 1;
+#X obj 190 120 mtof;
+#N canvas 0 0 446 202 (subpatch) 0;
+#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
 #X obj 100 20 inlet~;
 #X obj 99 87 *~;
@@ -20,8 +20,8 @@
 #X connect 1 0 2 0;
 #X connect 2 0 3 0;
 #X coords 0 0 100 100 40 18 1;
-#X restore 77 329 pd;
-#N canvas 0 0 446 202 /SUBPATCH/ 0;
+#X restore 68 339 pd;
+#N canvas 0 0 446 202 (subpatch) 0;
 #X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
 #X obj 100 20 inlet~;
@@ -32,9 +32,9 @@
 #X connect 1 0 2 0;
 #X connect 2 0 3 0;
 #X coords 0 0 100 100 40 18 1;
-#X restore 31 329 pd;
+#X restore 22 339 pd;
 #N canvas 414 195 613 302 looper 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array E03-table 44103 float 0;
 #X coords 0 1.02 44103 -1.02 200 130 1;
 #X restore 349 22 graph;
@@ -50,65 +50,90 @@ with an adc~ if you want to go live.;
 #X connect 3 0 4 0;
 #X connect 4 0 2 0;
 #X connect 5 0 6 0;
-#X restore 31 30 pd looper;
-#X text 547 309 re-read original sample;
-#X obj 565 246 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 22 42 pd looper;
+#X text 261 379 re-read original sample;
+#X obj 291 324 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 584 244 <-- record a sample;
-#X text 152 314 on/off for original;
-#X text 123 330 <--and processed sounds;
-#X text 240 3 OCTAVE DOUBLING VIA VARIABLE COMB FILTER;
-#X obj 31 367 +~;
-#X obj 252 157 samplerate~;
-#X obj 199 156 t f b;
-#X obj 59 58 delwrite~ G06-del 100;
-#X obj 79 234 delread~ G06-del;
-#X obj 101 282 vd~ G06-del;
-#X obj 78 306 +~;
-#X obj 230 210 +;
-#X obj 199 131 expr 500/$f1;
-#X obj 230 262 line~;
-#X obj 230 239 pack 0 20;
-#X text 243 108 fundamental frequency;
-#X text 311 131 1/2 period \, in msec;
-#X text 286 201 estimate fiddle~ delay;
-#X text 491 592 updated for Pd version 0.37-1;
-#X text 159 401 We already saw how to use ring modulation to alias
-a pitched sound down one octave. Here we do the reverse: filter out
-all odd harmonics using a variable-delay comb filter tuned one octave
-above the incoming sound. We use two taps into the delay line. The
-fixed one (delread~) adjusts for the delayed output of fiddle~. The
-variable one (vd~) adds to this an additional delay equal to 1/2 the
-measured period of the incoming sound. THese two are added. Odd harmonics
-are 180 degrees out of phase at the two taps and cancel. Even harmonics
-get through - so the sound goes up an octave \, without denaturing
+#X text 310 322 <-- record a sample;
+#X obj 22 369 +~;
+#X obj 243 169 samplerate~;
+#X obj 190 168 t f b;
+#X obj 50 70 delwrite~ G06-del 100;
+#X obj 70 244 delread~ G06-del;
+#X obj 92 292 vd~ G06-del;
+#X obj 69 316 +~;
+#X obj 221 222 +;
+#X obj 190 143 expr 500/$f1;
+#X obj 221 272 line~;
+#X obj 221 249 pack 0 20;
+#X text 225 120 fundamental frequency;
+#X text 274 143 1/2 period \, in msec;
+#X text 257 213 estimate fiddle~ delay;
+#X obj 243 195 expr 2048000/$f1;
+#X text 259 228 as one window (in msec);
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header octave_doubling_via_variable_comb_filter
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 135 325 on/off for;
+#X text 135 355 processed sounds;
+#X text 111 340 <-- original and;
+#X obj 1 600 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37-1. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION octave doubling via variable comb filter
+;
+#X restore 392 602 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 octave doubling- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 602 pd References;
+#X obj 6 602 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 20 446 We already saw how to use ring modulation to alias a
+pitched sound down one octave. Here we do the reverse: filter out all
+odd harmonics using a variable-delay comb filter tuned one octave above
+the incoming sound. We use two taps into the delay line. The fixed
+one (delread~) adjusts for the delayed output of [fiddle~]. The variable
+one (vd~) adds to this an additional delay equal to 1/2 the measured
+period of the incoming sound. THese two are added. Odd harmonics are
+180 degrees out of phase at the two taps and cancel. Even harmonics
+get through -- so the sound goes up an octave \, without denaturing
 the timbre as a speed-up would.;
-#X obj 252 183 expr 2048000/$f1;
-#X text 288 216 as one window (in msec);
 #X connect 0 0 5 0;
 #X connect 1 0 4 0;
 #X connect 5 0 2 0;
 #X connect 6 2 7 0;
 #X connect 7 0 8 0;
 #X connect 8 1 9 0;
-#X connect 9 0 27 0;
-#X connect 10 0 19 1;
-#X connect 11 0 19 0;
+#X connect 9 0 24 0;
+#X connect 10 0 16 1;
+#X connect 11 0 16 0;
 #X connect 12 0 6 0;
 #X connect 12 0 11 0;
-#X connect 12 0 22 0;
+#X connect 12 0 19 0;
 #X connect 14 0 4 0;
-#X connect 19 0 3 0;
-#X connect 19 0 3 1;
-#X connect 20 0 35 0;
-#X connect 21 0 26 0;
-#X connect 21 1 20 0;
-#X connect 23 0 25 0;
-#X connect 24 0 25 1;
-#X connect 25 0 10 0;
-#X connect 26 0 29 0;
-#X connect 27 0 21 0;
-#X connect 28 0 24 0;
-#X connect 29 0 28 0;
-#X connect 35 0 26 1;
-#X connect 35 0 23 0;
+#X connect 16 0 3 0;
+#X connect 16 0 3 1;
+#X connect 17 0 30 0;
+#X connect 18 0 23 0;
+#X connect 18 1 17 0;
+#X connect 20 0 22 0;
+#X connect 21 0 22 1;
+#X connect 22 0 10 0;
+#X connect 23 0 26 0;
+#X connect 24 0 18 0;
+#X connect 25 0 21 0;
+#X connect 26 0 25 0;
+#X connect 30 0 23 1;
+#X connect 30 0 20 0;
diff --git a/pd/doc/3.audio.examples/G07.shaker.pd b/pd/doc/3.audio.examples/G07.shaker.pd
index 1da97e8ea..cb2e487c5 100644
--- a/pd/doc/3.audio.examples/G07.shaker.pd
+++ b/pd/doc/3.audio.examples/G07.shaker.pd
@@ -1,49 +1,73 @@
-#N canvas 159 89 808 531 12;
-#X obj 21 438 output~;
-#X obj 21 411 +~;
-#X obj 33 192 delwrite~ G07-del 30;
-#X obj 99 391 line~;
-#X obj 63 391 *~;
-#X obj 93 335 line~;
-#X obj 57 335 *~;
-#X obj 80 281 line~;
-#X obj 44 281 *~;
-#X obj 58 221 line~;
-#X obj 22 221 *~;
-#X text 51 8 THE "SHAKER";
-#X obj 279 86 + 1;
-#X obj 279 109 mod 4;
-#X obj 244 83 f;
-#X obj 284 160 random 1000;
-#X obj 244 135 t f b;
-#X obj 244 37 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+#N canvas 370 22 611 540 10;
+#X obj 21 453 output~;
+#X obj 21 426 +~;
+#X obj 33 207 delwrite~ G07-del 30;
+#X obj 99 406 line~;
+#X obj 63 406 *~;
+#X obj 93 350 line~;
+#X obj 57 350 *~;
+#X obj 80 296 line~;
+#X obj 44 296 *~;
+#X obj 58 236 line~;
+#X obj 22 236 *~;
+#X obj 279 101 + 1;
+#X obj 279 124 mod 4;
+#X obj 244 98 f;
+#X obj 284 175 random 1000;
+#X obj 244 150 t f b;
+#X obj 244 52 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
-#X floatatom 347 34 5 10 1000 0 - - -;
-#X obj 244 242 route 0 1 2 3;
-#X obj 44 255 delread~ G07-del 30;
-#X obj 23 165 phasor~ 80;
-#X obj 57 309 delread~ G07-del 17;
-#X obj 63 365 delread~ G07-del 11;
-#X obj 347 59 * 4;
-#X obj 284 187 expr 2 * $f1/1000 - 0.7;
-#X floatatom 23 142 5 30 1000 0 - - -;
-#X obj 244 58 metro 50;
-#X obj 244 218 pack 0 0 200;
-#X text 23 118 frequency;
-#X text 225 17 on/off;
-#X text 344 13 time constant (msec);
-#X text 536 511 updated for Pd version 0.37-1;
-#X text 266 306 This is a time-varying comb filter \, combining four
+#X floatatom 347 49 5 10 1000 0 - - -, f 5;
+#X obj 244 257 route 0 1 2 3;
+#X obj 44 270 delread~ G07-del 30;
+#X obj 23 180 phasor~ 80;
+#X obj 57 324 delread~ G07-del 17;
+#X obj 63 380 delread~ G07-del 11;
+#X obj 347 74 * 4;
+#X obj 284 202 expr 2 * $f1/1000 - 0.7;
+#X floatatom 23 157 5 30 1000 0 - - -, f 5;
+#X obj 244 73 metro 50;
+#X obj 244 233 pack 0 0 200;
+#X text 23 133 frequency;
+#X text 225 32 on/off;
+#X text 344 28 time constant (msec);
+#X text 236 321 This is a time-varying comb filter \, combining four
 delayed copies of the input signal. The amplitude of each delayed copy
 varies randomly between -0.7 and +1.3. Each time the metronome goes
 off \, one of the four delay's gains is changed in sequence. The change
 occurs over the next four ticks of the metronome (so \, if the metronome
 ticks every 50 msec \, each message to a line~ has a second argument
 of 200.);
-#X text 268 424 Any collection of four gains for the four delayed copies
+#X text 236 407 Any collection of four gains for the four delayed copies
 of the signal (including the original) defines some sort of irregular
 comb filter. The peaks and valleys of the comb filter shift constantly
 as the gains change to new \, random values.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header the_"shaker" 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 518 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37-1. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal nonlocal;
+#X text 12 65 DESCRIPTION the "shaker" - a time-varying comb filter
+;
+#X restore 392 520 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 the shaker- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 520 pd References;
+#X obj 6 520 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 1 0 0 0;
 #X connect 1 0 0 1;
 #X connect 3 0 4 1;
@@ -54,27 +78,27 @@ as the gains change to new \, random values.;
 #X connect 8 0 1 1;
 #X connect 9 0 10 1;
 #X connect 10 0 1 0;
-#X connect 12 0 13 0;
-#X connect 13 0 14 1;
-#X connect 14 0 12 0;
-#X connect 14 0 16 0;
-#X connect 15 0 25 0;
-#X connect 16 0 28 0;
-#X connect 16 1 15 0;
-#X connect 17 0 27 0;
-#X connect 18 0 24 0;
-#X connect 18 0 27 1;
-#X connect 19 0 9 0;
-#X connect 19 1 7 0;
-#X connect 19 2 5 0;
-#X connect 19 3 3 0;
-#X connect 20 0 8 0;
-#X connect 21 0 2 0;
-#X connect 21 0 10 0;
-#X connect 22 0 6 0;
-#X connect 23 0 4 0;
-#X connect 24 0 28 2;
-#X connect 25 0 28 1;
-#X connect 26 0 21 0;
-#X connect 27 0 14 0;
-#X connect 28 0 19 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 1;
+#X connect 13 0 11 0;
+#X connect 13 0 15 0;
+#X connect 14 0 24 0;
+#X connect 15 0 27 0;
+#X connect 15 1 14 0;
+#X connect 16 0 26 0;
+#X connect 17 0 23 0;
+#X connect 17 0 26 1;
+#X connect 18 0 9 0;
+#X connect 18 1 7 0;
+#X connect 18 2 5 0;
+#X connect 18 3 3 0;
+#X connect 19 0 8 0;
+#X connect 20 0 2 0;
+#X connect 20 0 10 0;
+#X connect 21 0 6 0;
+#X connect 22 0 4 0;
+#X connect 23 0 27 2;
+#X connect 24 0 27 1;
+#X connect 25 0 20 0;
+#X connect 26 0 13 0;
+#X connect 27 0 18 0;
diff --git a/pd/doc/3.audio.examples/G08.reverb.pd b/pd/doc/3.audio.examples/G08.reverb.pd
index 099414366..2350154b1 100644
--- a/pd/doc/3.audio.examples/G08.reverb.pd
+++ b/pd/doc/3.audio.examples/G08.reverb.pd
@@ -1,4 +1,4 @@
-#N canvas 390 121 616 352 12;
+#N canvas 424 19 448 331 10;
 #N canvas 0 0 499 321 test-input 0;
 #X obj 75 253 outlet~;
 #X obj 74 201 -~;
@@ -15,31 +15,32 @@
 #X obj 195 166 adsr 100 100 2000 0 2000;
 #X obj 73 54 inlet;
 #N canvas 0 0 600 392 conversion-tables 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array dbtorms 123 float 1;
 #A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05
 2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05
 4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05
-8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828
-0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813
-0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946
-0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489
-0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813
-0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328
-0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526
-0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684
-0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202
-0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838
-0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946
-0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526
-2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341
-6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893;
+8.91251e-05 0.0001 0.000112202 0.000125893 0.000141254 0.000158489
+0.000177828 0.000199526 0.000223872 0.000251189 0.000281838 0.000316228
+0.000354813 0.000398107 0.000446684 0.000501187 0.000562341 0.000630957
+0.000707946 0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254
+0.00158489 0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228
+0.00354813 0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946
+0.00794328 0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489
+0.0177828 0.0199526 0.0223872 0.0251189 0.0281838 0.0316228 0.0354813
+0.0398107 0.0446684 0.0501187 0.0562341 0.0630957 0.0707946 0.0794328
+0.0891251 0.1 0.112202 0.125893 0.141254 0.158489 0.177828 0.199526
+0.223872 0.251189 0.281838 0.316228 0.354813 0.398107 0.446684 0.501187
+0.562341 0.630957 0.707946 0.794328 0.891251 1 1.12202 1.25893 1.41254
+1.58489 1.77828 1.99526 2.23872 2.51189 2.81838 3.16228 3.54813 3.98107
+4.46684 5.01187 5.62341 6.30957 7.07946 7.94328 8.91251 10 11.2202
+12.5893;
 #X coords 0 10 123 0 200 100 1;
 #X restore 70 45 graph;
 #X text 272 138 0;
 #X text 274 38 10;
 #X text 89 148 ------ 123 samples ------;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array mtof 130 float 1;
 #A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499
 12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017
@@ -131,11 +132,10 @@
 #X connect 11 0 9 1;
 #X connect 12 0 11 0;
 #X connect 13 0 4 0;
-#X restore 39 114 pd test-input;
-#X text 135 6 REVERBERATOR;
-#X floatatom 39 87 0 10 130 0 - - -;
-#X text 76 87 <-- pitch;
-#N canvas 96 169 958 610 reverb 0;
+#X restore 21 114 pd test-input;
+#X floatatom 21 87 0 10 130 0 - - -;
+#X text 48 87 <-- pitch;
+#N canvas 43 53 958 610 reverb 0;
 #X obj 13 19 inlet~;
 #X obj 13 43 reverb-echo echo-del1 5.43216;
 #X obj 277 215 +~;
@@ -234,20 +234,44 @@ so the recirculation gain is limited to 0.5.;
 #X connect 33 1 34 1;
 #X connect 34 0 2 0;
 #X connect 34 1 3 0;
-#X restore 58 179 pd reverb;
-#X floatatom 134 155 0 0 100 0 - - -;
-#X text 169 155 <-- feedback (100 maximum);
-#X obj 38 206 output~;
-#X text 342 317 updated for Pd version 0.37-1;
-#X text 149 180 <-- open to see how it works;
-#X text 34 269 Many improvements are possible. Much better reverberators
+#X restore 40 179 pd reverb;
+#X floatatom 91 155 0 0 100 0 - - -;
+#X text 119 155 <-- feedback (100 maximum);
+#X obj 20 206 output~;
+#X text 119 180 <-- open to see how it works;
+#X text 17 265 Many improvements are possible. Much better reverberators
 can be found in the "extras" library.;
-#X text 29 30 Here is a simple recirculating reverberator. "Feedback"
+#X text 19 37 Here is a simple recirculating reverberator. "Feedback"
 should be between 0 and 100 - if 100 \, the reverberation lasts forever.
 ;
-#X connect 0 0 4 0;
-#X connect 0 0 7 0;
-#X connect 2 0 0 0;
-#X connect 4 0 7 0;
-#X connect 4 1 7 1;
-#X connect 5 0 4 1;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header reverberator 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 309 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 25 KEYWORDS;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37-1. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION reverberator;
+#X restore 392 311 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 reverberator- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 311 pd References;
+#X obj 6 311 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 3 0;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 3 0 6 0;
+#X connect 3 1 6 1;
+#X connect 4 0 3 1;
diff --git a/pd/doc/3.audio.examples/G09.pitchshift.pd b/pd/doc/3.audio.examples/G09.pitchshift.pd
index 7687dc663..12e3d61bf 100644
--- a/pd/doc/3.audio.examples/G09.pitchshift.pd
+++ b/pd/doc/3.audio.examples/G09.pitchshift.pd
@@ -1,49 +1,48 @@
-#N canvas 93 36 964 554 12;
-#X floatatom 19 87 0 0 0 0 - - -;
-#X obj 82 358 *~;
-#X obj 205 295 line~;
-#X floatatom 237 112 0 0 0 0 - - -;
-#X text 68 9 PITCH SHIFTER;
-#X obj 205 269 pack 0 200;
-#X obj 237 86 r window;
-#X obj 19 61 r transpose;
-#X obj 19 143 exp;
-#X floatatom 19 169 6 0 0 0 - - -;
-#X obj 19 259 /;
-#X obj 146 189 * 0.001;
-#X obj 314 365 line~;
-#X obj 314 340 pack 0 200;
-#X floatatom 314 289 0 0 0 0 - - -;
-#X obj 314 263 r delay;
-#X obj 82 384 +~;
-#X obj 19 410 cos~;
-#X obj 19 437 *~;
-#X obj 19 466 +~;
-#X obj 106 317 wrap~;
-#X obj 251 360 *~;
-#X obj 251 393 +~;
-#X obj 188 420 cos~;
-#X obj 188 447 *~;
-#X msg 492 56 \; transpose 0 \; window 100 \; delay 0;
-#X obj 492 30 loadbang;
-#X obj 146 216 t b f;
-#X floatatom 19 285 6 0 0 0 - - -;
-#X obj 106 290 +~ 0.5;
-#X obj 19 358 -~ 0.5;
-#X obj 19 384 *~ 0.5;
-#X obj 188 359 -~ 0.5;
-#X obj 188 392 *~ 0.5;
-#X obj 19 196 - 1;
-#X obj 19 117 * 0.05776;
-#X obj 19 222 * -1;
-#X text 53 86 <-- transposition;
-#X text 96 99 (halftones);
-#X text 82 163 speed;
-#X text 81 177 change;
-#X text 281 111 <--window (msec);
-#X text 54 252 tape head;
+#N canvas 318 99 794 553 10;
+#X floatatom 19 107 0 0 0 0 - - -;
+#X obj 82 338 *~;
+#X obj 205 275 line~;
+#X floatatom 237 118 0 0 0 0 - - -;
+#X obj 205 249 pack 0 200;
+#X obj 237 96 r window;
+#X obj 19 81 r transpose;
+#X obj 19 151 exp;
+#X floatatom 19 173 6 0 0 0 - - -, f 6;
+#X obj 19 243 /;
+#X obj 146 173 * 0.001;
+#X obj 314 345 line~;
+#X obj 314 320 pack 0 200;
+#X floatatom 314 269 0 0 0 0 - - -;
+#X obj 314 243 r delay;
+#X obj 82 364 +~;
+#X obj 19 388 cos~;
+#X obj 19 415 *~;
+#X obj 19 439 +~;
+#X obj 106 297 wrap~;
+#X obj 251 340 *~;
+#X obj 251 370 +~;
+#X obj 188 394 cos~;
+#X obj 188 416 *~;
+#X msg 412 57 \; transpose 0 \; window 100 \; delay 0;
+#X obj 412 31 loadbang;
+#X obj 146 200 t b f;
+#X floatatom 19 265 6 0 0 0 - - -, f 6;
+#X obj 106 270 +~ 0.5;
+#X obj 19 338 -~ 0.5;
+#X obj 19 364 *~ 0.5;
+#X obj 188 339 -~ 0.5;
+#X obj 188 372 *~ 0.5;
+#X obj 19 194 - 1;
+#X obj 19 129 * 0.05776;
+#X obj 19 216 * -1;
+#X text 53 106 <-- transposition;
+#X text 96 119 (halftones);
+#X text 62 167 speed;
+#X text 61 181 change;
+#X text 281 117 <--window (msec);
+#X text 54 236 tape head;
 #N canvas 0 0 612 637 test-input 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array array1 155948 float 0;
 #X coords 0 1 155947 -1 200 150 1;
 #X restore 150 141 graph;
@@ -81,82 +80,106 @@
 #X connect 15 0 16 0;
 #X connect 16 0 17 0;
 #X connect 17 0 18 0;
-#X restore 264 11 pd test-input;
-#X text 425 153 This is a classic rotating-tape-head style pitch shifter
-using the vd~ variable delay object. Ther are two moving tape heads
+#X restore 264 31 pd test-input;
+#X obj 19 466 output~;
+#X obj 19 296 phasor~;
+#X obj 314 296 max 1.5;
+#X text 317 202 delay;
+#X text 314 220 (msec);
+#X obj 237 140 max 1;
+#X text 55 249 rotation freq;
+#X obj 82 388 vd~ G09-del;
+#X obj 251 392 vd~ G09-del;
+#X obj 264 53 delwrite~ G09-del 5000;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header pitch_shifter 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 409 143 This is a classic rotating-tape-head style pitch shifter
+using the [vd~] variable delay object. Ther are two moving tape heads
 \, each of which is loudest at the middle of its trajectory \, and
 enveloped out at the moment it has to jump back (or forward) to start
 another scratch. Most of the brain work is in computing how fast the
 tape heads have to move to get the desired transposition.;
-#X text 425 272 The "window size" is the total trajectory of the read
+#X text 409 229 The "window size" is the total trajectory of the read
 points in the delay line \, in milliseconds. The delay times are controlled
-by a phasor~ object. The second delay time \, 180 degrees out of phase
-from the first one \, is computed using the "wrap" object.;
-#X text 423 362 The "window size" is the total trajectory of the read
+by a [phasor~] object. The second delay time \, 180 degrees out of
+phase from the first one \, is computed using the "wrap" object.;
+#X text 408 293 The "window size" is the total trajectory of the read
 points in the delay line \, in milliseconds. The delay times are controlled
-by a phasor~ object. The second delay time \, 180 degrees out of phase
-from the first one \, is computed using the "wrap" object.;
-#X text 422 454 The cos~ objects compute the fadein and fadeout of
+by a [phasor~] object. The second delay time \, 180 degrees out of
+phase from the first one \, is computed using the "wrap" object.;
+#X text 407 357 The [cos~] objects compute the fadein and fadeout of
 the two delay line outputs. They each traverse the positive half of
 the cosine waveform (phase -0.25 to +0.25) over the time the phase
 goes from one end to the other.;
-#X obj 19 493 output~;
-#X obj 19 316 phasor~;
-#X text 689 534 updated for Pd version 0.37-1;
-#X obj 314 316 max 1.5;
-#X text 317 222 delay;
-#X text 314 240 (msec);
-#X obj 237 139 max 1;
-#X text 55 265 rotation freq;
-#X obj 82 410 vd~ G09-del;
-#X obj 251 422 vd~ G09-del;
-#X obj 264 42 delwrite~ G09-del 5000;
-#X connect 0 0 35 0;
-#X connect 1 0 16 0;
+#X obj 1 531 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37-1. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION pitch shifter;
+#X text 12 25 KEYWORDS signal;
+#X restore 392 533 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 pitch shifter- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 533 pd References;
+#X obj 6 533 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 34 0;
+#X connect 1 0 15 0;
 #X connect 2 0 1 1;
-#X connect 2 0 21 1;
-#X connect 3 0 54 0;
-#X connect 5 0 2 0;
-#X connect 6 0 3 0;
-#X connect 7 0 0 0;
-#X connect 8 0 9 0;
-#X connect 9 0 34 0;
-#X connect 10 0 28 0;
-#X connect 11 0 27 0;
-#X connect 12 0 16 1;
-#X connect 12 0 22 1;
-#X connect 13 0 12 0;
-#X connect 14 0 51 0;
-#X connect 15 0 14 0;
-#X connect 16 0 56 0;
+#X connect 2 0 20 1;
+#X connect 3 0 48 0;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 8 0;
+#X connect 8 0 33 0;
+#X connect 9 0 27 0;
+#X connect 10 0 26 0;
+#X connect 11 0 15 1;
+#X connect 11 0 21 1;
+#X connect 12 0 11 0;
+#X connect 13 0 45 0;
+#X connect 14 0 13 0;
+#X connect 15 0 50 0;
+#X connect 16 0 17 0;
 #X connect 17 0 18 0;
-#X connect 18 0 19 0;
-#X connect 19 0 48 0;
-#X connect 19 0 48 1;
+#X connect 18 0 43 0;
+#X connect 18 0 43 1;
+#X connect 19 0 20 0;
+#X connect 19 0 31 0;
 #X connect 20 0 21 0;
-#X connect 20 0 32 0;
-#X connect 21 0 22 0;
-#X connect 22 0 57 0;
-#X connect 23 0 24 0;
-#X connect 24 0 19 1;
-#X connect 26 0 25 0;
-#X connect 27 0 10 0;
-#X connect 27 1 10 1;
-#X connect 28 0 49 0;
-#X connect 29 0 20 0;
-#X connect 30 0 31 0;
-#X connect 31 0 17 0;
-#X connect 32 0 33 0;
-#X connect 33 0 23 0;
-#X connect 34 0 36 0;
-#X connect 35 0 8 0;
-#X connect 36 0 10 0;
-#X connect 43 0 58 0;
-#X connect 49 0 1 0;
-#X connect 49 0 30 0;
-#X connect 49 0 29 0;
-#X connect 51 0 13 0;
-#X connect 54 0 11 0;
-#X connect 54 0 5 0;
-#X connect 56 0 18 1;
-#X connect 57 0 24 1;
+#X connect 21 0 51 0;
+#X connect 22 0 23 0;
+#X connect 23 0 18 1;
+#X connect 25 0 24 0;
+#X connect 26 0 9 0;
+#X connect 26 1 9 1;
+#X connect 27 0 44 0;
+#X connect 28 0 19 0;
+#X connect 29 0 30 0;
+#X connect 30 0 16 0;
+#X connect 31 0 32 0;
+#X connect 32 0 22 0;
+#X connect 33 0 35 0;
+#X connect 34 0 7 0;
+#X connect 35 0 9 0;
+#X connect 42 0 52 0;
+#X connect 44 0 1 0;
+#X connect 44 0 29 0;
+#X connect 44 0 28 0;
+#X connect 45 0 12 0;
+#X connect 48 0 10 0;
+#X connect 48 0 4 0;
+#X connect 50 0 17 1;
+#X connect 51 0 23 1;
diff --git a/pd/doc/3.audio.examples/H01.low-pass.pd b/pd/doc/3.audio.examples/H01.low-pass.pd
index 81a713b89..51b2cc259 100644
--- a/pd/doc/3.audio.examples/H01.low-pass.pd
+++ b/pd/doc/3.audio.examples/H01.low-pass.pd
@@ -1,20 +1,19 @@
-#N canvas 97 42 601 612 12;
-#X obj 72 411 mtof;
-#X floatatom 72 388 5 0 0 0 - #0-pit -;
-#X obj 41 542 output~;
-#X obj 41 457 lop~;
-#X obj 42 354 noise~;
-#X text 124 387 <-- cutoff (pitch units);
-#X text 135 434 <-- cutoff (Hertz);
-#X floatatom 72 436 5 0 0 0 - - -;
-#X text 348 582 updated for Pd version 0.39;
-#X text 88 459 low-pass filter;
-#X obj 130 535 tabwrite~ H01-graph;
-#X obj 130 510 metro 250;
-#X obj 130 490 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#N canvas 430 19 448 544 10;
+#X obj 52 326 mtof;
+#X floatatom 52 303 5 0 0 0 - #0-pit -, f 5;
+#X obj 21 457 output~;
+#X obj 21 372 lop~;
+#X obj 22 269 noise~;
+#X text 89 303 <-- cutoff (pitch units);
+#X text 86 351 <-- cutoff (Hertz);
+#X floatatom 52 351 5 0 0 0 - - -, f 5;
+#X text 57 374 low-pass filter;
+#X obj 110 450 tabwrite~ H01-graph;
+#X obj 110 425 metro 250;
+#X obj 110 405 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X text 148 487 graphing on/off;
-#N canvas 0 0 450 300 graph2 0;
+#X text 128 402 graphing on/off;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array H01-graph 882 float 3;
 #A 0 -0.107788 -0.0695636 -0.0991016 -0.104581 -0.0683972 -0.0547128
 -0.0857414 -0.0731684 -0.0892636 -0.115914 -0.0935128 -0.0572466 -0.0387586
@@ -142,26 +141,13 @@
 -0.00476758 -0.0362654 -0.0701252 -0.0547324 -0.0708724 -0.0970369
 -0.099428 -0.102544 -0.0736354 -0.0556618 -0.0863601;
 #X coords 0 1 882 -1 200 140 1;
-#X restore 384 386 graph;
-#X text 408 528 --- 0.02 sec ---;
-#X text 28 30 This and the following patches show how to use filters
-in Pd \, starting with the simplest one: the one-pole low-pass filter.
-Here we test it with an input of white noise. The lop~ object does
-the filtering. Its left inlet takes an audio signal to be filtered
-\, and its right inlet takes messages to set its cutoff frequency in
-Hertz.;
-#X text 26 129 The lop~ object is normalized to pass DC (the lowest
-frequency) with a gain of one. Higher frequencies are progressively
-more and more attenuated. The lower the cutoff frequency \, the lower
-the total power of the filtered noise. If you graph the output you'll
-see that the waveform gets smoother (and smaller overall) as the cutoff
-frequency is lowered.;
-#X text 28 243 At the cutoff frequency the gain is about -3 dB \, and
+#X restore 244 327 graph;
+#X text 288 469 --- 0.02 sec ---;
+#X text 19 199 At the cutoff frequency the gain is about -3 dB \, and
 above that the gain drops a further 6 dB per octave. (Sometimes one
 uses the word "rolloff" instead of "cutoff" to emphasize the gradual
 way the gain drops off with frequency.);
-#X text 108 353 white noise \, test signal;
-#X text 185 6 ONE-POLE LOW-PASS FILTER;
+#X text 69 268 white noise \, test signal;
 #N canvas 0 0 450 300 loadbang 0;
 #X obj 85 16 loadbang;
 #X obj 85 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
@@ -173,13 +159,50 @@ way the gain drops off with frequency.);
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 5 0;
-#X restore 129 582 pd loadbang;
+#X restore 110 484 pd loadbang;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header one-pole_low-pass_filter
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 37 This and the following patches show how to use filters
+in Pd \, starting with the simplest one: the one-pole low-pass filter.
+Here we test it with an input of white noise. The [lop~] object does
+the filtering. Its left inlet takes an audio signal to be filtered
+\, and its right inlet takes messages to set its cutoff frequency in
+Hertz.;
+#X text 19 113 The [lop~] object is normalized to pass DC (the lowest
+frequency) with a gain of one. Higher frequencies are progressively
+more and more attenuated. The lower the cutoff frequency \, the lower
+the total power of the filtered noise. If you graph the output you'll
+see that the waveform gets smoother (and smaller overall) as the cutoff
+frequency is lowered.;
+#X obj 1 522 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION one-pole low-pass filter;
+#X restore 392 524 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 low-pass filter- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 524 pd References;
+#X obj 6 524 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 7 0;
 #X connect 1 0 0 0;
 #X connect 3 0 2 0;
 #X connect 3 0 2 1;
-#X connect 3 0 10 0;
+#X connect 3 0 9 0;
 #X connect 4 0 3 0;
 #X connect 7 0 3 1;
+#X connect 10 0 9 0;
 #X connect 11 0 10 0;
-#X connect 12 0 11 0;
diff --git a/pd/doc/3.audio.examples/H02.high-pass.pd b/pd/doc/3.audio.examples/H02.high-pass.pd
index ddbca85c8..ac10b3ce2 100644
--- a/pd/doc/3.audio.examples/H02.high-pass.pd
+++ b/pd/doc/3.audio.examples/H02.high-pass.pd
@@ -1,10 +1,9 @@
-#N canvas 29 10 595 573 12;
-#X obj 26 479 output~;
-#X text 324 527 updated for Pd version 0.39;
-#X obj 114 460 metro 250;
-#X obj 114 440 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#N canvas 402 19 504 516 10;
+#X obj 22 429 output~;
+#X obj 110 410 metro 250;
+#X obj 110 390 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X text 132 437 graphing on/off;
+#X text 128 387 graphing on/off;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array H02-graph 882 float 3;
 #A 0 0.86084 0.876465 0.891113 0.904785 0.917725 0.929688 0.940918
@@ -125,44 +124,68 @@
 -0.0324707 -0.0637207 -0.0949707 -0.125977 -0.157227 -0.187988 -0.21875
 -0.249268 -0.279297 -0.309326 -0.339111 -0.368408;
 #X coords 0 1 882 -1 200 140 1;
-#X restore 369 323 graph;
-#X text 393 465 --- 0.02 sec ---;
-#X text 24 31 Many synthesis algorithms and transformations can have
+#X restore 289 283 graph;
+#X text 313 425 --- 0.02 sec ---;
+#X text 19 36 Many synthesis algorithms and transformations can have
 outputs with a zero-freqency component (commonly called DC for "direct
 current"). These are inaudible and sometimes cause distortion in audio
 output devices \, or when converting to fixed-point soundfile formats.
 It is often desirable to filter an audio signal to remove its DC component.
 ;
-#X text 23 147 The simplest way to do this is to use a one-pole low-pass
+#X text 19 122 The simplest way to do this is to use a one-pole low-pass
 filter \, tuned to a low frequency such as 3 Hertz \, and to subtract
 its output from the original. This difference is called a one-pole
 \, one-zero high-pass filter \, and it is used so often that Pd provides
 one in the "hip~" object.;
-#X obj 26 270 +~ 1;
-#X obj 25 407 hip~ 5;
-#X text 88 407 high-pass filter;
-#X floatatom 74 366 5 0 0 0 - - -;
-#X msg 74 296 0;
-#X text 110 245 sinusoidal test signal;
-#X text 71 270 add "DC";
-#X text 112 296 zero for no filtering;
-#X msg 74 319 3;
-#X text 109 320 3 (or so) to remove DC;
-#X text 114 343 higher freqencies affect;
-#X text 154 359 the audible part of;
-#X text 154 375 the signal as well.;
-#X obj 26 245 osc~ 220;
-#X msg 74 342 220;
-#X text 131 4 ONE-POLE \, ONE-ZERO HIGH-PASS FILTER;
-#X obj 114 485 tabwrite~ H02-graph;
-#X connect 2 0 25 0;
-#X connect 3 0 2 0;
-#X connect 9 0 10 0;
-#X connect 10 0 0 0;
-#X connect 10 0 0 1;
-#X connect 10 0 25 0;
-#X connect 12 0 10 1;
-#X connect 13 0 12 0;
-#X connect 17 0 12 0;
-#X connect 22 0 9 0;
-#X connect 23 0 12 0;
+#X obj 22 220 +~ 1;
+#X obj 21 357 hip~ 5;
+#X text 84 357 high-pass filter;
+#X floatatom 70 316 5 0 0 0 - - -, f 5;
+#X msg 70 246 0;
+#X text 67 220 add "DC";
+#X text 108 246 zero for no filtering;
+#X msg 70 269 3;
+#X text 105 270 3 (or so) to remove DC;
+#X text 110 293 higher freqencies affect;
+#X text 150 309 the audible part of;
+#X text 150 325 the signal as well.;
+#X obj 22 195 osc~ 220;
+#X msg 70 292 220;
+#X obj 110 435 tabwrite~ H02-graph;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header one-pole_one-zero_high-pass_filter
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 86 195 sinusoidal test signal;
+#X obj 1 494 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 25 KEYWORDS;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION one-pole one-zero high-pass filter;
+#X restore 392 496 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 high-pass filter- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 496 pd References;
+#X obj 6 496 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 1 0 22 0;
+#X connect 2 0 1 0;
+#X connect 8 0 9 0;
+#X connect 9 0 0 0;
+#X connect 9 0 0 1;
+#X connect 9 0 22 0;
+#X connect 11 0 9 1;
+#X connect 12 0 11 0;
+#X connect 15 0 11 0;
+#X connect 20 0 8 0;
+#X connect 21 0 11 0;
diff --git a/pd/doc/3.audio.examples/H03.band-pass.pd b/pd/doc/3.audio.examples/H03.band-pass.pd
index 976fee548..689405198 100644
--- a/pd/doc/3.audio.examples/H03.band-pass.pd
+++ b/pd/doc/3.audio.examples/H03.band-pass.pd
@@ -1,27 +1,26 @@
-#N canvas 44 0 604 533 12;
-#X obj 43 278 mtof;
-#X floatatom 43 255 5 0 150 0 - #0-pit -;
-#X obj 32 446 output~;
-#X obj 32 225 noise~;
-#X text 95 254 <-- cutoff (pitch units);
-#X text 106 301 <-- cutoff (Hertz);
-#X floatatom 43 303 5 0 0 0 - - -;
-#X text 330 494 updated for Pd version 0.39;
-#X obj 121 414 metro 250;
-#X obj 121 394 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#N canvas 418 19 470 499 10;
+#X obj 33 244 mtof;
+#X floatatom 33 221 5 0 150 0 - #0-pit -, f 5;
+#X obj 22 412 output~;
+#X obj 22 191 noise~;
+#X text 85 220 <-- cutoff (pitch units);
+#X text 96 267 <-- cutoff (Hertz);
+#X floatatom 33 269 5 0 0 0 - - -, f 5;
+#X obj 111 380 metro 250;
+#X obj 111 360 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X text 139 391 graphing on/off;
-#N canvas 0 0 450 300 graph2 0;
+#X text 129 357 graphing on/off;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array H03-graph 882 float 2;
 #X coords 0 1 882 -1 200 140 1;
-#X restore 375 290 graph;
-#X text 399 432 --- 0.02 sec ---;
-#X text 98 224 white noise \, test signal;
-#X obj 32 361 bp~;
-#X text 73 363 band-pass filter;
-#X obj 121 439 tabwrite~ H03-graph;
-#X floatatom 54 331 5 0 1000 0 - #0-q -;
-#X text 106 329 <-- q;
+#X restore 258 256 graph;
+#X text 282 398 --- 0.02 sec ---;
+#X text 88 190 white noise \, test signal;
+#X obj 22 327 bp~;
+#X text 63 329 band-pass filter;
+#X obj 111 405 tabwrite~ H03-graph;
+#X floatatom 44 297 5 0 1000 0 - #0-q -, f 5;
+#X text 96 295 <-- q;
 #N canvas 0 0 450 300 loadbang 0;
 #X obj 85 16 loadbang;
 #X obj 85 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
@@ -33,25 +32,49 @@
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 5 0;
-#X restore 139 482 pd loadbang;
-#X text 154 8 RESONANT (BAND-PASS) FILTER;
-#X text 26 129 The two controls specify \, first \, the center frequency
+#X restore 111 439 pd loadbang;
+#X text 19 112 The two controls specify \, first \, the center frequency
 \, and second \, the sharpness of the filter \, commonly called "q".
 If you increase q to 10 or 20 \, you will see a drop in total signal
 power \, and moreover \, you'll see and hear the resonant frequency
 more clearly in the result.;
-#X text 28 30 A simple resonant band-pass filter is provided in the
+#X text 20 37 A simple resonant band-pass filter is provided in the
 bp~ object. Resonant filters can be tuned to a specific "center frequency"
 and then will pass that frequency while attenuating other frequencies
 (the further from the center frequency \, the more attenuation). This
 patch uses a white noise source to demonstrate bp~.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header resonant_(band-pass)_filter
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 477 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION resonant (band-pass) filter;
+#X restore 392 479 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 band-pass filter- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 479 pd References;
+#X obj 6 479 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 6 0;
 #X connect 1 0 0 0;
-#X connect 3 0 14 0;
-#X connect 6 0 14 1;
-#X connect 8 0 16 0;
-#X connect 9 0 8 0;
-#X connect 14 0 2 0;
-#X connect 14 0 2 1;
-#X connect 14 0 16 0;
-#X connect 17 0 14 2;
+#X connect 3 0 13 0;
+#X connect 6 0 13 1;
+#X connect 7 0 15 0;
+#X connect 8 0 7 0;
+#X connect 13 0 2 0;
+#X connect 13 0 2 1;
+#X connect 13 0 15 0;
+#X connect 16 0 13 2;
diff --git a/pd/doc/3.audio.examples/H04.filter.sweep.pd b/pd/doc/3.audio.examples/H04.filter.sweep.pd
index 1675e9a65..61a76dcae 100644
--- a/pd/doc/3.audio.examples/H04.filter.sweep.pd
+++ b/pd/doc/3.audio.examples/H04.filter.sweep.pd
@@ -1,29 +1,27 @@
-#N canvas 360 22 557 528 12;
-#X floatatom 44 146 5 0 150 0 - #0-pitch -;
-#X text 126 9 SWEEPING FILTERS;
-#X obj 44 193 phasor~;
-#X obj 59 351 +~;
-#X floatatom 81 326 5 0 100 0 - #0-offset -;
-#X floatatom 60 222 5 0 0 0 - #0-speed -;
-#X floatatom 82 273 5 0 100 0 - #0-depth -;
-#X floatatom 75 404 5 0 1000 0 - #0-q -;
-#X obj 44 426 vcf~;
-#X obj 59 375 tabread4~ mtof;
-#X text 127 403 <-- Q (selectivity);
-#X text 115 182 sawtooth;
-#X text 116 198 oscillator;
-#X text 112 221 <-- sweep speed;
-#X text 137 245 LFO for sweep;
-#X text 134 274 <-- sweep depth;
-#X text 131 326 <-- base center frequency;
-#X text 103 350 add base to sweep;
-#X text 192 375 convert to Hz.;
-#X text 97 144 <-- pitch;
-#X obj 43 457 output~;
-#X obj 44 169 mtof;
-#X obj 60 244 phasor~;
-#X obj 60 298 *~;
-#X text 294 496 updated for Pd version 0.39;
+#N canvas 424 19 448 536 10;
+#X floatatom 22 138 5 0 150 0 - #0-pitch -, f 5;
+#X obj 22 185 phasor~;
+#X obj 37 343 +~;
+#X floatatom 52 318 5 0 100 0 - #0-offset -, f 5;
+#X floatatom 38 214 5 0 0 0 - #0-speed -, f 5;
+#X floatatom 53 265 5 0 100 0 - #0-depth -, f 5;
+#X floatatom 47 396 5 0 1000 0 - #0-q -, f 5;
+#X obj 22 418 vcf~;
+#X obj 37 367 tabread4~ mtof;
+#X text 87 396 <-- Q (selectivity);
+#X text 77 176 sawtooth;
+#X text 77 190 oscillator;
+#X text 79 214 <-- sweep speed;
+#X text 103 237 LFO for sweep;
+#X text 95 265 <-- sweep depth;
+#X text 95 318 <-- base center frequency;
+#X text 81 342 add base to sweep;
+#X text 131 367 convert to Hz.;
+#X text 60 137 <-- pitch;
+#X obj 21 449 output~;
+#X obj 22 161 mtof;
+#X obj 38 236 phasor~;
+#X obj 38 290 *~;
 #N canvas 706 247 450 300 startup 0;
 #X obj 85 16 loadbang;
 #X obj 85 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
@@ -36,47 +34,48 @@
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 5 0;
-#X restore 168 491 pd startup;
-#X text 14 109 Note the different effects of negative and positive
+#X restore 289 476 pd startup;
+#X text 19 101 Note the different effects of negative and positive
 sweep speeds.;
-#X text 13 32 If you want actively changing center frequencies \, use
-"vcf~" instead of "bp~". The vcf~ module takes an audio signal to set
-center frequency. (Q is still set by messages though.) Vcf is computationally
-somewhat more expensive than bp~.;
-#N canvas 0 22 612 404 conversion-tables 0;
-#N canvas 0 22 450 300 graph2 0;
-#X array mtof 130 float 1;
-#A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499
-12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017
-21.8268 23.1247 24.4997 25.9565 27.5 29.1352 30.8677 32.7032 34.6478
-36.7081 38.8909 41.2034 43.6535 46.2493 48.9994 51.9131 55 58.2705
-61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989
-103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814
-174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183
-293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164
-493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991
-830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51
-1396.91 1479.98 1567.98 1661.22 1760 1864.66 1975.53 2093 2217.46 2349.32
-2489.02 2637.02 2793.83 2959.96 3135.96 3322.44 3520 3729.31 3951.07
-4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.88
-7040 7458.62 7902.13 8372.02 8869.84 9397.27 9956.06 10548.1 11175.3
-11839.8 12543.9 13289.8 14080;
-#X coords 0 12000 130 0 200 100 1;
-#X restore 309 225 graph;
-#X text 319 333 ------ 130 samples ------;
-#X text 518 318 0;
-#X text 520 218 12000;
-#X restore 168 463 pd conversion-tables;
-#X connect 0 0 21 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header sweeping_filters
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 37 If you want actively changing center frequencies \, use
+[vcf~] instead of [bp~]. The [vcf~] module takes an audio signal to
+set center frequency. (Q is still set by messages though.) [vcf~] is
+computationally somewhat more expensive than [bp~].;
+#X obj 1 514 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION sweeping filters;
+#X restore 392 516 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 sweeping filters- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 516 pd References;
+#X obj 6 516 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 20 0;
+#X connect 1 0 7 0;
 #X connect 2 0 8 0;
-#X connect 3 0 9 0;
-#X connect 4 0 3 1;
-#X connect 5 0 22 0;
-#X connect 6 0 23 1;
-#X connect 7 0 8 2;
-#X connect 8 0 20 0;
-#X connect 8 0 20 1;
-#X connect 9 0 8 1;
-#X connect 21 0 2 0;
-#X connect 22 0 23 0;
-#X connect 23 0 3 0;
+#X connect 3 0 2 1;
+#X connect 4 0 21 0;
+#X connect 5 0 22 1;
+#X connect 6 0 7 2;
+#X connect 7 0 19 0;
+#X connect 7 0 19 1;
+#X connect 8 0 7 1;
+#X connect 20 0 1 0;
+#X connect 21 0 22 0;
+#X connect 22 0 2 0;
diff --git a/pd/doc/3.audio.examples/H05.filter.floyd.pd b/pd/doc/3.audio.examples/H05.filter.floyd.pd
index 401b56289..decc34651 100644
--- a/pd/doc/3.audio.examples/H05.filter.floyd.pd
+++ b/pd/doc/3.audio.examples/H05.filter.floyd.pd
@@ -1,6 +1,6 @@
-#N canvas 288 109 559 650 12;
-#N canvas 0 22 604 396 conversion-tables 0;
-#N canvas 0 22 450 300 graph1 0;
+#N canvas 424 20 448 653 10;
+#N canvas 0 0 600 392 conversion-tables 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array dbtorms 123 float 1;
 #A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05
 2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05
@@ -25,7 +25,7 @@
 #X text 504 141 0;
 #X text 506 41 10;
 #X text 321 151 ------ 123 samples ------;
-#N canvas 0 22 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array mtof 130 float 1;
 #A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499
 12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017
@@ -47,37 +47,36 @@
 #X text 319 333 ------ 130 samples ------;
 #X text 518 318 0;
 #X text 520 218 12000;
-#X restore 121 588 pd conversion-tables;
-#X obj 31 411 line~;
-#X obj 31 387 pack 0 100;
-#X floatatom 31 339 3 0 150 0 - #0-cf -;
-#X floatatom 47 461 3 0 999 0 - #0-q -;
-#X obj 16 512 vcf~;
-#X obj 31 436 tabread4~ mtof;
-#X text 81 461 <-- Q (selectivity);
-#X text 88 5 ANOTHER SWEEPING FILTER EXAMPLE;
-#X obj 15 267 clip~ 0 0.5;
-#X obj 15 291 *~ 2;
-#X obj 15 315 -~;
-#X text 119 268 trick to;
-#X text 120 285 make symmetric;
-#X text 118 302 triangle wave;
-#X obj 22 147 f;
-#X obj 55 145 + 1;
-#X obj 22 217 mtof;
-#X obj 55 169 mod 8;
-#N canvas 0 22 450 300 graph1 0;
+#X restore 233 284 pd conversion-tables;
+#X obj 31 401 line~;
+#X obj 31 377 pack 0 100;
+#X floatatom 31 329 3 0 150 0 - #0-cf -, f 3;
+#X floatatom 47 451 3 0 999 0 - #0-q -, f 3;
+#X obj 16 502 vcf~;
+#X obj 31 426 tabread4~ mtof;
+#X text 81 451 <-- Q (selectivity);
+#X obj 15 257 clip~ 0 0.5;
+#X obj 15 281 *~ 2;
+#X obj 15 305 -~;
+#X text 90 258 trick to;
+#X text 91 275 make symmetric;
+#X text 89 292 triangle wave;
+#X obj 22 137 f;
+#X obj 55 135 + 1;
+#X obj 22 207 mtof;
+#X obj 55 159 mod 8;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-array1 8 float 2;
 #X coords 0 96 8 36 200 100 1;
-#X restore 340 144 graph;
-#X text 73 336 <-- center frequency;
-#X obj 22 123 metro 85;
-#X text 107 147 sequencer for;
-#X text 122 164 8 note loop;
-#X obj 16 576 output~;
-#X obj 22 104 tgl 15 0 empty \$0-metro empty 0 -6 0 8 -262144 -1 -1
+#X restore 230 164 graph;
+#X text 73 326 <-- center frequency;
+#X obj 22 113 metro 85;
+#X text 107 137 sequencer for;
+#X text 122 154 8 note loop;
+#X obj 16 566 output~;
+#X obj 22 94 tgl 15 0 empty \$1-metro empty 0 -6 0 8 -262144 -1 -1
 0 1;
-#N canvas 876 177 379 259 startup 0;
+#N canvas 876 177 375 255 startup 0;
 #X obj 22 24 loadbang;
 #X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
@@ -89,45 +88,69 @@
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 5 0;
-#X restore 121 611 pd startup;
-#X text 96 364 at least 61;
-#X obj 22 241 phasor~;
-#X text 294 616 updated for Pd version 0.39;
-#X obj 22 193 tabread \$0-array1;
-#X obj 16 540 vcf~;
-#X obj 31 362 max 61;
-#X text 82 409 smooth & convert to Hz.;
-#X obj 47 482 max 3;
-#X text 105 483 at least 3;
-#X text 11 28 Here's an approximate reconstruction of an old riff by
+#X restore 233 307 pd startup;
+#X text 96 354 at least 61;
+#X obj 22 231 phasor~;
+#X obj 22 183 tabread \$0-array1;
+#X obj 16 530 vcf~;
+#X obj 31 352 max 61;
+#X text 82 399 smooth & convert to Hz.;
+#X obj 47 472 max 3;
+#X text 105 473 at least 3;
+#X text 19 36 Here's an approximate reconstruction of an old riff by
 Pink Floyd. Because we're filtering a waveform with odd partials \,
 it's easier to pick out the partials in the filtered sound than if
 we had had both even and odd ones.;
-#X text 78 527 rejection of the stop bands without having;
-#X text 79 509 Put two vcf objects in series for better;
-#X text 77 545 to make the passband excessively narrow.;
+#X text 57 515 rejection of the stop bands without having;
+#X text 57 530 to make the passband excessively narrow.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header another_sweeping_filter_example
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 631 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION another sweeping filter example;
+#X restore 392 633 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 sweeping filter- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 633 pd References;
+#X obj 6 633 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 58 500 Put two [vcf~] objects in series for better;
 #X connect 1 0 6 0;
 #X connect 2 0 1 0;
-#X connect 3 0 32 0;
-#X connect 4 0 34 0;
-#X connect 5 0 31 0;
+#X connect 3 0 30 0;
+#X connect 4 0 32 0;
+#X connect 5 0 29 0;
 #X connect 6 0 5 1;
-#X connect 6 0 31 1;
+#X connect 6 0 29 1;
+#X connect 8 0 9 0;
 #X connect 9 0 10 0;
-#X connect 10 0 11 0;
-#X connect 11 0 5 0;
-#X connect 15 0 16 0;
-#X connect 15 0 30 0;
-#X connect 16 0 18 0;
-#X connect 17 0 28 0;
-#X connect 18 0 15 1;
-#X connect 21 0 15 0;
-#X connect 25 0 21 0;
-#X connect 28 0 9 0;
-#X connect 28 0 11 1;
-#X connect 30 0 17 0;
-#X connect 31 0 24 0;
-#X connect 31 0 24 1;
-#X connect 32 0 2 0;
-#X connect 34 0 5 2;
-#X connect 34 0 31 2;
+#X connect 10 0 5 0;
+#X connect 14 0 15 0;
+#X connect 14 0 28 0;
+#X connect 15 0 17 0;
+#X connect 16 0 27 0;
+#X connect 17 0 14 1;
+#X connect 20 0 14 0;
+#X connect 24 0 20 0;
+#X connect 27 0 8 0;
+#X connect 27 0 10 1;
+#X connect 28 0 16 0;
+#X connect 29 0 23 0;
+#X connect 29 0 23 1;
+#X connect 30 0 2 0;
+#X connect 32 0 5 2;
+#X connect 32 0 29 2;
diff --git a/pd/doc/3.audio.examples/H06.envelope.follower.pd b/pd/doc/3.audio.examples/H06.envelope.follower.pd
index 8f536fbac..952f79f9a 100644
--- a/pd/doc/3.audio.examples/H06.envelope.follower.pd
+++ b/pd/doc/3.audio.examples/H06.envelope.follower.pd
@@ -1,25 +1,19 @@
-#N canvas 87 74 585 621 12;
-#X floatatom 354 464 4 0 0 0 - - -;
-#X floatatom 150 316 3 0 999 0 - #0-osc2 -;
-#X obj 150 336 osc~;
-#X text 162 12 ENVELOPE FOLLOWER;
-#X text 22 33 An envelope follower measures the mean square power of
-an signal as it changes over time. (You can convert mean square power
-to RMS ampitude or to decibels if you wish.) The term "mean square"
-means simply that the signal should be squared \, and then averaged.
-The averageing is done using a low-pass filter such as lop~.;
-#X obj 62 466 lop~;
-#X floatatom 93 444 3 0 100 0 - #0-lop -;
-#X obj 61 356 +~;
-#X text 187 317 <-- frequency of second oscillator;
-#X obj 62 330 osc~ 500;
-#X obj 62 413 *~;
-#X obj 62 522 snapshot~;
-#X floatatom 62 573 5 0 999 0 - - -;
-#X obj 62 545 sqrt;
-#X text 335 361 built-in envelope;
-#X obj 354 491 dbtorms;
-#X floatatom 354 518 5 0 999 0 - - -;
+#N canvas 424 26 448 582 10;
+#X floatatom 274 414 4 0 0 0 - - -, f 4;
+#X floatatom 117 260 3 0 999 0 - #0-osc2 -, f 3;
+#X obj 117 280 osc~;
+#X obj 22 416 lop~;
+#X floatatom 43 394 3 0 100 0 - #0-lop -, f 3;
+#X obj 21 306 +~;
+#X text 143 260 <-- frequency of second oscillator;
+#X obj 22 280 osc~ 500;
+#X obj 22 363 *~;
+#X obj 22 472 snapshot~;
+#X floatatom 22 523 5 0 999 0 - - -, f 5;
+#X obj 22 495 sqrt;
+#X text 254 316 built-in envelope;
+#X obj 274 441 dbtorms;
+#X floatatom 274 468 5 0 999 0 - - -, f 5;
 #N canvas 536 459 382 265 startup 0;
 #X obj 22 24 loadbang;
 #X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
@@ -37,50 +31,79 @@ The averageing is done using a low-pass filter such as lop~.;
 #X connect 2 0 5 0;
 #X connect 6 0 8 0;
 #X connect 7 0 6 0;
-#X restore 217 598 pd startup;
-#X text 115 414 square the signal;
-#X text 124 440 <-- responsiveness;
-#X text 159 501 take snapshot;
-#X text 108 548 convert to RMS;
-#X text 327 599 updated for Pd version 0.39;
-#X text 334 381 follower for comparison;
-#X text 107 466 low-pass filter;
-#X text 114 573 output;
-#X obj 70 497 r \$0-tick;
-#X text 159 517 every 1/4 second;
-#X obj 389 439 r \$0-tick;
-#X obj 354 439 f;
-#X obj 376 414 env~;
-#X text 20 242 The env~ object at right \, which is a built-in envelope
-follower using a higher-quality low-pass filter than lop~ \, is shown
-for comparison. Its output is artificially slowed down to match the
-homemade one at left.;
-#X obj 150 359 *~;
-#X obj 185 360 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X restore 274 522 pd startup;
+#X text 52 362 square the signal;
+#X text 66 394 <-- responsiveness;
+#X text 93 451 take snapshot;
+#X text 61 495 convert to RMS;
+#X text 254 331 follower for comparison;
+#X text 56 416 low-pass filter;
+#X text 61 523 output;
+#X obj 30 447 r \$0-tick;
+#X text 93 466 every 1/4 second;
+#X obj 221 365 r \$0-tick;
+#X obj 274 389 f;
+#X obj 289 364 env~;
+#X obj 117 303 *~;
+#X obj 147 303 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X text 204 358 <-- on/off;
-#X text 20 128 Here we're adding two oscillators so the result should
+#X text 166 301 <-- on/off;
+#X text 19 112 Here we're adding two oscillators so the result should
 be an RMS of one if the second oscillator is on \, 0.707 otherwise.
 Note two effects: first \, the more responsive the envelope follower
 \, the less accurate the result (but the faster it responds). Second
 \, if the two oscillators are tuned close to each other their beating
 affects the nombers coming out.;
-#X connect 0 0 15 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header envelope_follower
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 560 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION envelope follower;
+#X restore 392 562 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 envelope follower- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 562 pd References;
+#X obj 6 562 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 37 An envelope follower measures the mean square power of
+an signal as it changes over time. (You can convert mean square power
+to RMS ampitude or to decibels if you wish.) The term "mean square"
+means simply that the signal should be squared \, and then averaged.
+The averageing is done using a low-pass filter such as [lop~].;
+#X text 18 198 The [env~] object at right \, which is a built-in envelope
+follower using a higher-quality low-pass filter than [lop~] \, is shown
+for comparison. Its output is artificially slowed down to match the
+homemade one at left.;
+#X connect 0 0 13 0;
 #X connect 1 0 2 0;
-#X connect 2 0 32 0;
-#X connect 5 0 11 0;
-#X connect 6 0 5 1;
-#X connect 7 0 10 0;
-#X connect 7 0 10 1;
-#X connect 7 0 30 0;
-#X connect 9 0 7 0;
-#X connect 10 0 5 0;
-#X connect 11 0 13 0;
-#X connect 13 0 12 0;
-#X connect 15 0 16 0;
-#X connect 26 0 11 0;
-#X connect 28 0 29 0;
-#X connect 29 0 0 0;
-#X connect 30 0 29 1;
-#X connect 32 0 7 1;
-#X connect 33 0 32 1;
+#X connect 2 0 28 0;
+#X connect 3 0 9 0;
+#X connect 4 0 3 1;
+#X connect 5 0 8 0;
+#X connect 5 0 8 1;
+#X connect 5 0 27 0;
+#X connect 7 0 5 0;
+#X connect 8 0 3 0;
+#X connect 9 0 11 0;
+#X connect 11 0 10 0;
+#X connect 13 0 14 0;
+#X connect 23 0 9 0;
+#X connect 25 0 26 0;
+#X connect 26 0 0 0;
+#X connect 27 0 26 1;
+#X connect 28 0 5 1;
+#X connect 29 0 28 1;
diff --git a/pd/doc/3.audio.examples/H07.measure.spectrum.pd b/pd/doc/3.audio.examples/H07.measure.spectrum.pd
index f290ca4a1..d38db73d5 100644
--- a/pd/doc/3.audio.examples/H07.measure.spectrum.pd
+++ b/pd/doc/3.audio.examples/H07.measure.spectrum.pd
@@ -1,37 +1,28 @@
-#N canvas 407 54 626 729 12;
-#X floatatom 145 654 5 0 0 0 - - -;
-#X obj 44 565 bp~;
-#X obj 44 536 bp~;
-#X obj 55 467 mtof;
-#X floatatom 55 490 7 0 0 0 - - -;
-#X floatatom 98 520 3 0 999 0 - #0-q -;
-#X floatatom 55 447 7 0 150 0 - #0-pitch -;
-#X obj 145 586 env~ 4096;
-#X obj 45 370 *~ 0;
-#X obj 44 395 +~ 1;
-#X obj 145 608 + 0.5;
-#X obj 145 631 int;
-#X text 12 41 In this example we use two cascaded bandpass filters
+#N canvas 424 19 448 637 10;
+#X floatatom 121 578 5 0 0 0 - - -, f 5;
+#X obj 20 489 bp~;
+#X obj 20 460 bp~;
+#X obj 31 391 mtof;
+#X floatatom 31 414 7 0 0 0 - - -, f 7;
+#X floatatom 74 444 3 0 999 0 - #0-q -, f 3;
+#X floatatom 31 371 7 0 150 0 - #0-pitch -, f 7;
+#X obj 121 510 env~ 4096;
+#X obj 21 294 *~ 0;
+#X obj 20 319 +~ 1;
+#X obj 121 532 + 0.5;
+#X obj 121 555 int;
+#X text 19 37 In this example we use two cascaded bandpass filters
 to troll for partials in Jonathan Harvey's famous bell sample.;
-#X text 16 233 You can hear partials around 48 \, 51.3 \, 55 (faint!)
+#X text 18 176 You can hear partials around 48 \, 51.3 \, 55 (faint!)
 \, 57 (fainter!) \, 60 \, two beating partials around 65 \, 67 \, 69
 \, 70.9 \, 71.75 \, 72.6 \, 74 \, 74.65 \, 75.6 \, 77 \, 81.2 \, 84.6
 \, 86.5 \, and probably many more. There's also one down at 36 \, but
 it's easier to see it on the meter than hear it.;
-#X text 124 447 <-- center pitch;
-#X text 120 463 (shift-drag to fine tune);
-#X text 131 491 <-- center frequency;
-#X text 138 520 <-- Q (filter selectivity);
-#X obj 44 614 output~;
-#X text 341 680 updated for Pd version 0.39;
-#X text 14 82 Note that filters can give unexpected level changes.
-The bp~ object is designed to have roughly unit gain at the pass band
-\, so the higher you set "Q" the more amplitude is lost. You can correct
-for this by pushing the output amplitude \, but be sure to remember
-to reset the output amplitude before you reduce Q again. I set the
-Q to 100 and the output amplitude to 110 or 120 (with the room gain
-way down.) Then holding the shift key \, slowly drag the center pitch
-upward listening for modes.;
+#X text 83 371 <-- center pitch;
+#X text 79 387 (shift-drag to fine tune);
+#X text 83 415 <-- center frequency;
+#X text 99 444 <-- Q (filter selectivity);
+#X obj 20 538 output~;
 #N canvas 316 21 483 471 startup 0;
 #X obj 53 335 r readfile;
 #X obj 53 388 soundfiler;
@@ -57,16 +48,49 @@ upward listening for modes.;
 #X connect 7 1 5 1;
 #X connect 8 0 7 0;
 #X connect 11 0 1 0;
-#X restore 456 625 pd startup;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 373 419 pd startup;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-array 155948 float 0;
 #X coords 0 1 155947 -1 200 150 1;
-#X restore 396 322 graph;
-#X obj 45 322 r \$0-loopf;
-#X obj 45 346 phasor~;
-#X obj 44 419 tabread4~ \$0-array;
-#X obj 89 370 r \$0-totsamps;
-#X text 109 12 MEASURING SPECTRA USING BANDPASS FILTERS;
+#X restore 237 256 graph;
+#X obj 21 246 r \$0-loopf;
+#X obj 21 270 phasor~;
+#X obj 20 343 tabread4~ \$0-array;
+#X obj 65 294 r \$0-totsamps;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header measuring_spectra_using_bandpass_filters
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 615 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION measuring spectra using bandpass filters
+;
+#X restore 392 617 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 bandpass filters- Related Help Documents;
+#X text 19 37 links;
+#X restore 103 617 pd References;
+#X obj 6 617 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 68 Note that filters can give unexpected level changes.
+The [bp~] object is designed to have roughly unit gain at the pass
+band \, so the higher you set "Q" the more amplitude is lost. You can
+correct for this by pushing the output amplitude \, but be sure to
+remember to reset the output amplitude before you reduce Q again. I
+set the Q to 100 and the output amplitude to 110 or 120 (with the room
+gain way down.) Then holding the shift key \, slowly drag the center
+pitch upward listening for modes.;
 #X connect 1 0 7 0;
 #X connect 1 0 18 0;
 #X connect 1 0 18 1;
@@ -79,10 +103,10 @@ upward listening for modes.;
 #X connect 6 0 3 0;
 #X connect 7 0 10 0;
 #X connect 8 0 9 0;
-#X connect 9 0 25 0;
+#X connect 9 0 23 0;
 #X connect 10 0 11 0;
 #X connect 11 0 0 0;
-#X connect 23 0 24 0;
-#X connect 24 0 8 0;
-#X connect 25 0 2 0;
-#X connect 26 0 8 1;
+#X connect 21 0 22 0;
+#X connect 22 0 8 0;
+#X connect 23 0 2 0;
+#X connect 24 0 8 1;
diff --git a/pd/doc/3.audio.examples/H08.heterodyning.pd b/pd/doc/3.audio.examples/H08.heterodyning.pd
index 5bdf28e34..b7d8429ed 100644
--- a/pd/doc/3.audio.examples/H08.heterodyning.pd
+++ b/pd/doc/3.audio.examples/H08.heterodyning.pd
@@ -1,14 +1,12 @@
-#N canvas 280 49 607 705 12;
-#X text 336 665 updated for Pd version 0.39;
-#X text 109 12 MORE ON MEASURING SPECTRA: HETERODYNING;
-#X obj 46 289 phasor~ 100;
-#X obj 99 343 phasor~;
-#X floatatom 99 320 5 0 999 0 - #0-freq -;
-#X obj 99 395 cos~;
-#X obj 148 395 cos~;
-#X obj 148 370 +~ 0.25;
-#X obj 47 547 snapshot~;
-#N canvas 536 459 382 265 startup 0;
+#N canvas 424 19 448 650 10;
+#X obj 22 222 phasor~ 100;
+#X obj 75 270 phasor~;
+#X floatatom 75 247 5 0 999 0 - #0-freq -, f 5;
+#X obj 75 322 cos~;
+#X obj 124 322 cos~;
+#X obj 124 297 +~ 0.25;
+#X obj 23 474 snapshot~;
+#N canvas 139 174 382 265 startup 0;
 #X obj 22 24 loadbang;
 #X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
@@ -25,61 +23,86 @@
 #X connect 2 0 8 0;
 #X connect 5 0 7 0;
 #X connect 6 0 5 0;
-#X restore 382 573 pd startup;
-#X obj 47 446 *~;
-#X obj 91 446 *~;
-#X obj 48 471 lop~;
-#X obj 92 471 lop~;
-#X floatatom 153 435 3 0 100 0 - #0-lop -;
-#X text 186 435 <-- responsiveness;
-#X obj 136 547 snapshot~;
-#X floatatom 47 575 5 0 0 0 - - -;
-#X floatatom 136 575 5 0 0 0 - - -;
-#X obj 161 496 r \$0-tick;
-#X obj 161 517 t b b;
-#X obj 47 643 expr sqrt($f1*$f1+$f2*$f2);
-#X floatatom 47 669 5 0 0 0 - - -;
-#X text 56 248 signal to;
-#X text 58 268 analyze;
-#X text 51 44 Another method for picking out the strengths of partials
+#X restore 320 316 pd startup;
+#X obj 23 373 *~;
+#X obj 67 373 *~;
+#X obj 24 398 lop~;
+#X obj 68 398 lop~;
+#X floatatom 129 362 3 0 100 0 - #0-lop -, f 3;
+#X text 156 362 <-- responsiveness;
+#X obj 112 474 snapshot~;
+#X floatatom 23 497 5 0 0 0 - - -, f 5;
+#X floatatom 112 497 5 0 0 0 - - -, f 5;
+#X obj 137 423 r \$0-tick;
+#X obj 137 444 t b b;
+#X obj 23 565 expr sqrt($f1*$f1+$f2*$f2);
+#X floatatom 23 591 5 0 0 0 - - -, f 5;
+#X text 32 187 signal to;
+#X text 34 201 analyze;
+#X text 20 37 Another method for picking out the strengths of partials
 in a sound is heterodyning. We guess the frequency of a partial (as
 in the previous patch) but this time we multiply by a complex exponential
 to frequency-shift the partial down to zero (DC).;
-#X text 47 126 Then a low-pass filter (applied separately on the real
+#X text 19 101 Then a low-pass filter (applied separately on the real
 and imaginary parts) removes all but the DC component thus obtained.
 The result is two audio signals (which we take snapshots of) holding
 the real and imaginary parts of the complex amplitude of the partial
 we want. Compared to the previous method \, this had the advantage
 of reporting the phase of the partial as well as its frequency.;
-#X text 240 358 modulate;
-#X text 237 394 to DC;
-#X text 154 321 <-- test frequency;
-#X text 236 376 test frequency;
-#X text 132 471 low-pass filter;
-#X text 55 596 real;
-#X text 59 611 part;
-#X text 207 589 part;
-#X text 198 574 imaginary;
-#X text 105 670 magnitude;
-#X connect 2 0 10 0;
-#X connect 2 0 11 0;
-#X connect 3 0 5 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 10 1;
-#X connect 6 0 11 1;
-#X connect 7 0 6 0;
-#X connect 8 0 17 0;
-#X connect 10 0 12 0;
-#X connect 11 0 13 0;
-#X connect 12 0 8 0;
-#X connect 13 0 16 0;
-#X connect 14 0 13 1;
-#X connect 14 0 12 1;
-#X connect 16 0 18 0;
-#X connect 17 0 21 0;
-#X connect 18 0 21 1;
+#X text 180 283 modulate;
+#X text 180 313 to DC;
+#X text 112 247 <-- test frequency;
+#X text 180 298 test frequency;
+#X text 100 399 low-pass filter;
+#X text 31 518 real;
+#X text 32 532 part;
+#X text 161 512 part;
+#X text 152 497 imaginary;
+#X text 62 591 magnitude;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header more_on_measuring_spectra:_heterodyning
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 628 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION more on measuring spectra: heterodyning;
+#X restore 392 630 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 heterodyning- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 630 pd References;
+#X obj 6 630 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 8 0;
+#X connect 0 0 9 0;
+#X connect 1 0 3 0;
+#X connect 1 0 5 0;
+#X connect 2 0 1 0;
+#X connect 3 0 8 1;
+#X connect 4 0 9 1;
+#X connect 5 0 4 0;
+#X connect 6 0 15 0;
+#X connect 8 0 10 0;
+#X connect 9 0 11 0;
+#X connect 10 0 6 0;
+#X connect 11 0 14 0;
+#X connect 12 0 11 1;
+#X connect 12 0 10 1;
+#X connect 14 0 16 0;
+#X connect 15 0 19 0;
+#X connect 16 0 19 1;
+#X connect 17 0 18 0;
+#X connect 18 0 6 0;
+#X connect 18 1 14 0;
 #X connect 19 0 20 0;
-#X connect 20 0 8 0;
-#X connect 20 1 16 0;
-#X connect 21 0 22 0;
diff --git a/pd/doc/3.audio.examples/H09.ssb.modulation.pd b/pd/doc/3.audio.examples/H09.ssb.modulation.pd
index c0fbf2dfe..ed6897e6f 100644
--- a/pd/doc/3.audio.examples/H09.ssb.modulation.pd
+++ b/pd/doc/3.audio.examples/H09.ssb.modulation.pd
@@ -1,28 +1,26 @@
-#N canvas 7 6 605 578 12;
-#X obj 188 393 cos~;
-#X obj 231 371 +~ -0.25;
-#X obj 231 394 cos~;
-#X obj 23 438 *~;
-#X obj 89 438 *~;
-#X obj 22 462 -~;
-#X floatatom 188 322 5 0 0 0 - - -;
-#X text 30 242 sample loop for;
-#X text 30 260 test signal;
-#X text 35 321 pair of allpass;
-#X text 34 338 filters to make;
-#X text 34 356 90 degree phase;
-#X text 32 373 shifted versions;
-#X text 238 323 <-- shift frequency;
-#X text 310 356 cosine and sine waves;
-#X text 55 7 SINGLE SIDEBAND MODULATION;
-#X text 300 7 (AKA FREQUENCY SHIFTING);
+#N canvas 424 21 448 560 10;
+#X obj 186 371 cos~;
+#X obj 229 349 +~ -0.25;
+#X obj 229 372 cos~;
+#X obj 21 416 *~;
+#X obj 87 416 *~;
+#X obj 20 440 -~;
+#X floatatom 186 300 5 0 0 0 - - -, f 5;
+#X text 24 221 sample loop for;
+#X text 24 236 test signal;
+#X text 33 299 pair of allpass;
+#X text 32 316 filters to make;
+#X text 32 334 90 degree phase;
+#X text 30 351 shifted versions;
+#X text 236 301 <-- shift frequency;
+#X text 290 334 cosine and sine waves;
 #N canvas 555 154 448 326 bell-loop 0;
 #X obj 23 142 /;
 #X obj 23 214 +~ 1;
 #X msg 23 117 44100;
 #X obj 23 91 t b f;
 #X obj 24 264 outlet~;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-array 155948 float 0;
 #X coords 0 1 155947 -1 200 150 1;
 #X restore 234 88 graph;
@@ -41,7 +39,7 @@
 #X connect 8 0 1 0;
 #X connect 9 0 8 0;
 #X connect 10 0 4 0;
-#X restore 24 279 pd bell-loop;
+#X restore 22 257 pd bell-loop;
 #N canvas 711 110 483 471 startup 0;
 #X obj 53 335 r readfile;
 #X obj 53 388 soundfiler;
@@ -66,38 +64,63 @@
 #X connect 7 1 5 1;
 #X connect 8 0 7 0;
 #X connect 10 0 1 0;
-#X restore 157 530 pd startup;
-#X obj 21 495 output~;
-#X text 352 547 updated for Pd version 0.39;
-#X obj 188 347 phasor~;
-#X text 123 438 <-- complex multipier;
-#X text 122 455 (calculates real part);
-#X text 309 371 to form the real and;
-#X text 309 387 imaginary part of a;
-#X text 309 404 complex sinusoid;
-#X text 43 37 The signal sideband modulator gives you only one sideband
+#X restore 125 500 pd startup;
+#X obj 19 473 output~;
+#X obj 186 325 phasor~;
+#X text 121 416 <-- complex multipier;
+#X text 120 433 (calculates real part);
+#X text 289 349 to form the real and;
+#X text 289 365 imaginary part of a;
+#X text 289 382 complex sinusoid;
+#X text 19 47 The signal sideband modulator gives you only one sideband
 for each frequency in the input signal (whereas ring modulation gave
 both a positive and negative sideband). You can set the shift frequency
 positive to shift all frequencies upward \, or negative to shift them
 downwards.;
-#X text 42 117 The technique is to filter the input into two versions
+#X text 19 111 The technique is to filter the input into two versions
 \, 90 degrees out of phase \, which can be interpreted as the real
 and imaginary part of a complex signal with positive frequencies only.
 You can then form the (complex) product of this with a (complex) sinusoid
 to modulate upward or downward in frequency.;
-#X obj 23 400 hilbert~;
-#X text 42 213 The "Hilbert~" object is an abstraction in pd/extra.
+#X obj 21 378 hilbert~;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header single_sideband_modulation
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
 ;
+#X text 60 27 (a.k.a. frequency shifting);
+#X text 18 186 The [hilbert~] object is an abstraction in pd/extra.
+;
+#X obj 1 538 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION single sideband modulation;
+#X restore 392 540 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 19 37 links:;
+#X text 7 2 single sideband modulation- Related Help Documents;
+#X restore 103 540 pd References;
+#X obj 6 540 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 3 1;
 #X connect 1 0 2 0;
 #X connect 2 0 4 1;
 #X connect 3 0 5 0;
 #X connect 4 0 5 1;
-#X connect 5 0 19 0;
-#X connect 5 0 19 1;
-#X connect 6 0 21 0;
-#X connect 17 0 29 0;
-#X connect 21 0 1 0;
-#X connect 21 0 0 0;
-#X connect 29 0 3 0;
-#X connect 29 1 4 0;
+#X connect 5 0 17 0;
+#X connect 5 0 17 1;
+#X connect 6 0 18 0;
+#X connect 15 0 26 0;
+#X connect 18 0 1 0;
+#X connect 18 0 0 0;
+#X connect 26 0 3 0;
+#X connect 26 1 4 0;
diff --git a/pd/doc/3.audio.examples/H10.measurement.pd b/pd/doc/3.audio.examples/H10.measurement.pd
index d0a04774b..ef9a45814 100644
--- a/pd/doc/3.audio.examples/H10.measurement.pd
+++ b/pd/doc/3.audio.examples/H10.measurement.pd
@@ -1,6 +1,6 @@
-#N canvas 25 22 868 421 12;
-#X obj 25 338 filter-graph2 tab1 tab2;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 346 25 666 457 10;
+#X obj 25 336 filter-graph2 tab1 tab2;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array tab1 100 float 1;
 #A 0 0.830737 0.844715 0.882793 0.953057 1.0592 1.19383 1.30927 1.28362
 1.08532 0.848171 0.656605 0.517756 0.418204 0.345252 0.291106 0.249389
@@ -17,8 +17,8 @@
 0.517664 0.656606 0.848216 1.08532 1.28264 1.30927 1.19534 1.05919
 0.951738 0.882758 0.851605;
 #X coords 0 2 99 0 200 140 1;
-#X restore 634 -1 graph;
-#N canvas 0 0 450 300 graph2 0;
+#X restore 434 49 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array tab2 100 float 3;
 #A 0 8.59501e-06 0.0327982 0.0790568 0.143062 0.250239 0.425263 0.697661
 1.04745 1.37257 1.59826 1.73194 1.8042 1.83798 1.84726 1.84029 1.8221
@@ -33,20 +33,18 @@
 4.4609 4.44271 4.43574 4.44501 4.4788 4.55106 4.68474 4.91043 5.23555
 5.58534 5.85774 6.03276 6.13994 6.20394 6.24278;
 #X coords 0 6.283 99 0 200 140 1;
-#X restore 639 200 graph;
-#X text 621 56 1;
-#X text 633 342 0;
-#X text 615 265 pi;
-#X text 608 195 2pi;
-#X obj 25 203 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 439 250 graph;
+#X text 421 106 1;
+#X text 433 392 0;
+#X text 415 315 pi;
+#X text 408 245 2pi;
+#X obj 25 201 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X floatatom 33 249 5 0 0 0 - - -;
-#X text 621 -8 2;
-#X text 104 -6 MEASURING FILTER FREQUENCY AND PHASE RESPONSE;
-#X text 610 382 updated for Pd version 0.39;
-#X text 691 145 frequency;
-#X text 631 141 0;
-#X text 814 144 44100;
+#X floatatom 33 247 5 0 0 0 - - -, f 5;
+#X text 421 42 2;
+#X text 491 195 frequency;
+#X text 431 191 0;
+#X text 614 194 44100;
 #N canvas 876 177 375 255 startup 0;
 #X obj 22 24 loadbang;
 #X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
@@ -58,33 +56,59 @@
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 5 0;
-#X restore 285 350 pd startup;
-#X floatatom 238 257 5 0 10000 0 - #0-freq -;
-#X floatatom 249 280 3 0 999 0 - #0-q -;
-#X text 12 18 You can use the "filter-graph1" and "filter-graph2" abstractions
+#X restore 205 408 pd startup;
+#X floatatom 167 258 5 0 10000 0 - #0-freq -, f 5;
+#X floatatom 178 281 3 0 999 0 - #0-q -, f 3;
+#X text 19 36 You can use the "filter-graph1" and "filter-graph2" abstractions
 as shown to test filters. Connect them as shown with a filter between
 them. Try varying the parameters and/or substituting other filters.
 ;
-#X text 575 127 gain=0;
-#X text 574 327 phase=0;
-#X obj 25 226 filter-graph1 100 44100;
-#X obj 227 310 bp~;
-#X text 44 202 <-- compute;
-#X text 34 266 index;
-#X text 290 254 <-- center frequency;
-#X text 288 279 <-- "Q";
-#X text 9 86 "filter-graph1" takes as arguments the number of points
+#X text 385 177 gain=0;
+#X text 384 377 phase=0;
+#X obj 25 224 filter-graph1 100 44100;
+#X obj 160 311 bp~;
+#X text 44 200 <-- compute;
+#X text 34 264 index;
+#X text 204 257 <-- center frequency;
+#X text 204 281 <-- "Q";
+#X text 19 89 "filter-graph1" takes as arguments the number of points
 to graph and the frequency range. "filter-graph2 takes as arguments
 the name of a table to hold the (frequency dependent) gain \, and another
 \, if specified \, for the phase.;
-#X text 8 153 You can edit this patch to replace "bp" with any other
+#X text 19 142 You can edit this patch to replace "bp" with any other
 filter you're curious about.;
-#X connect 7 0 21 0;
-#X connect 16 0 22 1;
-#X connect 17 0 22 2;
-#X connect 21 0 0 0;
-#X connect 21 0 8 0;
-#X connect 21 1 0 1;
-#X connect 21 1 22 0;
-#X connect 21 2 0 2;
-#X connect 22 0 0 3;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header measuring_filter_frequency_&_phase_response
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 435 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION measuring filter frequency and phase response
+;
+#X restore 392 437 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 frequency and phase response- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 437 pd References;
+#X obj 6 437 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 7 0 19 0;
+#X connect 14 0 20 1;
+#X connect 15 0 20 2;
+#X connect 19 0 0 0;
+#X connect 19 0 8 0;
+#X connect 19 1 0 1;
+#X connect 19 1 20 0;
+#X connect 19 2 0 2;
+#X connect 20 0 0 3;
diff --git a/pd/doc/3.audio.examples/H11.shelving.pd b/pd/doc/3.audio.examples/H11.shelving.pd
index 8eee1178c..12b41f49d 100644
--- a/pd/doc/3.audio.examples/H11.shelving.pd
+++ b/pd/doc/3.audio.examples/H11.shelving.pd
@@ -1,5 +1,5 @@
-#N canvas 25 22 868 421 12;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 348 19 658 417 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-tab1 100 float 1;
 #A 0 1.39998 1.39868 1.3942 1.39349 1.38496 1.3772 1.36745 1.35633
 1.34208 1.32931 1.31817 1.30372 1.28879 1.27458 1.25944 1.24351 1.22874
@@ -15,11 +15,11 @@
 0.86826 0.867939 0.866731 0.867094 0.867762 0.867796 0.864339 0.872811
 0.920535;
 #X coords 0 5 99 0 200 300 1;
-#X restore 621 28 graph;
-#X obj 29 245 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 421 48 graph;
+#X obj 21 183 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X floatatom 37 289 3 0 0 0 - - -;
-#X text 676 334 frequency;
+#X floatatom 29 227 3 0 0 0 - - -, f 3;
+#X text 476 354 frequency;
 #N canvas 876 177 375 255 startup 0;
 #X obj 22 24 loadbang;
 #X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
@@ -31,44 +31,67 @@
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 5 0;
-#X restore 289 390 pd startup;
-#X floatatom 281 265 3 -99 99 0 - #0-pole -;
-#X text 559 316 gain=0;
-#X text 108 34 SHELVING FILTER;
-#X obj 29 378 filter-graph2 \$0-tab1;
-#X obj 29 266 filter-graph1 100 22050;
-#X text 796 330 22050;
-#X obj 232 314 rpole~;
-#X obj 281 288 / 100;
-#X floatatom 335 264 4 -100 100 0 - #0-zero -;
-#X obj 335 287 / 100;
-#X obj 231 346 rzero~;
-#X text 608 21 5;
-#X text 616 327 0;
-#X text 604 258 1;
-#X text 16 58 This patch demonstrates using the raw filters \, rpole~
-and rzero~ (raw \, real-valued one-pole and one-zero filters) \, to
-make a shelving filter.;
-#X text 14 109 If the pole is at p and the zero is at q \, the gain
+#X restore 227 316 pd startup;
+#X floatatom 177 213 3 -99 99 0 - #0-pole -, f 3;
+#X text 359 336 gain=0;
+#X obj 21 316 filter-graph2 \$0-tab1;
+#X obj 21 204 filter-graph1 100 22050;
+#X text 596 350 22050;
+#X obj 144 262 rpole~;
+#X obj 177 236 / 100;
+#X floatatom 227 212 4 -100 100 0 - #0-zero -, f 4;
+#X obj 227 235 / 100;
+#X obj 143 294 rzero~;
+#X text 408 41 5;
+#X text 416 347 0;
+#X text 404 278 1;
+#X text 19 79 If the pole is at p and the zero is at q \, the gain
 at DC is (1-q)/(1-p) and the gain at Nyquist is (1+q)/(1+p). If the
 pole location is close to plus or minus one \, this can give large
 gains unless q is in the same vicinity. (try \, for example \, p=90%
 \, q=70%).;
-#X text 11 191 The crossover region varies from DC to Nyquist as p
+#X text 18 143 The crossover region varies from DC to Nyquist as p
 and q decrease from 100% to -100%.;
-#X text 278 241 pole;
-#X text 334 241 zero;
-#X text 383 263 (in hundredths);
-#X text 610 387 updated for Pd version 0.39;
-#X connect 1 0 9 0;
-#X connect 5 0 12 0;
-#X connect 9 0 2 0;
-#X connect 9 0 8 0;
-#X connect 9 1 8 1;
-#X connect 9 1 11 0;
-#X connect 9 2 8 2;
-#X connect 11 0 15 0;
-#X connect 12 0 11 1;
-#X connect 13 0 14 0;
-#X connect 14 0 15 1;
-#X connect 15 0 8 3;
+#X text 174 192 pole;
+#X text 226 192 zero;
+#X text 258 211 (in hundredths);
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header shelving_filter
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 395 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION shelving filter;
+#X restore 392 397 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 shelving filter- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 397 pd References;
+#X obj 6 397 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 37 This patch demonstrates using the raw filters \, [rpole~]
+and [rzero~] (raw \, real-valued one-pole and one-zero filters) \,
+to make a shelving filter.;
+#X connect 1 0 8 0;
+#X connect 5 0 11 0;
+#X connect 8 0 2 0;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 8 1 10 0;
+#X connect 8 2 7 2;
+#X connect 10 0 14 0;
+#X connect 11 0 10 1;
+#X connect 12 0 13 0;
+#X connect 13 0 14 1;
+#X connect 14 0 7 3;
diff --git a/pd/doc/3.audio.examples/H12.peaking.pd b/pd/doc/3.audio.examples/H12.peaking.pd
index e005e01a4..04b562d37 100644
--- a/pd/doc/3.audio.examples/H12.peaking.pd
+++ b/pd/doc/3.audio.examples/H12.peaking.pd
@@ -1,5 +1,5 @@
-#N canvas 41 39 854 640 12;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 326 19 738 592 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-tab1 100 float 1;
 #A 0 0.960563 0.960996 0.962862 0.970269 0.977017 0.985214 1.00122
 1.02249 1.05453 1.10332 1.18193 1.31034 1.5315 1.91468 2.37977 2.37001
@@ -15,11 +15,11 @@
 0.922781 0.92203 0.923331 0.923265 0.922948 0.922413 0.922799 0.925651
 0.921397 0.931729 0.976084;
 #X coords 0 5 99 0 200 300 1;
-#X restore 616 193 graph;
-#X obj 41 404 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 516 193 graph;
+#X obj 23 334 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X floatatom 49 448 3 0 0 0 - - -;
-#X text 671 499 frequency;
+#X floatatom 31 378 3 0 0 0 - - -, f 3;
+#X text 571 499 frequency;
 #N canvas 876 177 375 255 startup 0;
 #X obj 22 24 loadbang;
 #X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
@@ -31,82 +31,106 @@
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 5 0;
-#X restore 328 602 pd startup;
-#X floatatom 276 368 3 0 99 0 - #0-pole -;
-#X text 554 481 gain=0;
-#X obj 41 600 filter-graph2 \$0-tab1;
-#X obj 41 425 filter-graph1 100 22050;
-#X text 791 495 22050;
-#X obj 276 391 / 100;
-#X floatatom 330 367 4 0 100 0 - #0-zero -;
-#X obj 330 390 / 100;
-#X text 594 182 5;
-#X text 611 492 0;
-#X text 599 423 1;
-#X text 596 596 updated for Pd version 0.39;
-#X text 183 10 PEAKING FILTER;
-#X floatatom 406 366 3 0 180 0 - #0-pole -;
-#X text 415 328 angle;
-#X text 399 344 (degrees);
-#X obj 460 435 sin;
-#X obj 405 436 cos;
-#X obj 405 387 * 3.14159;
-#X obj 405 411 / 180;
-#X obj 241 515 *;
-#X obj 405 460 t b f;
-#X obj 460 460 t b f;
-#X obj 209 543 cpole~;
-#X obj 226 574 czero~;
-#X text 266 332 pole and zero;
-#X text 284 347 radii (%);
-#X obj 277 516 *;
-#X obj 314 542 *;
-#X obj 349 542 *;
-#X text 21 34 To get a peaking filter \, start with a shelving filter
+#X restore 310 532 pd startup;
+#X floatatom 258 298 3 0 99 0 - #0-pole -, f 3;
+#X text 454 481 gain=0;
+#X obj 23 530 filter-graph2 \$0-tab1;
+#X obj 23 355 filter-graph1 100 22050;
+#X text 691 495 22050;
+#X obj 258 321 / 100;
+#X floatatom 312 297 4 0 100 0 - #0-zero -, f 4;
+#X obj 312 320 / 100;
+#X text 494 182 5;
+#X text 511 492 0;
+#X text 499 423 1;
+#X floatatom 388 296 3 0 180 0 - #0-pole -, f 3;
+#X text 397 258 angle;
+#X text 381 274 (degrees);
+#X obj 442 365 sin;
+#X obj 387 366 cos;
+#X obj 387 317 * 3.14159;
+#X obj 387 341 / 180;
+#X obj 223 445 *;
+#X obj 387 390 t b f;
+#X obj 442 390 t b f;
+#X obj 191 473 cpole~;
+#X obj 208 504 czero~;
+#X text 248 262 pole and zero;
+#X text 266 277 radii (%);
+#X obj 259 446 *;
+#X obj 296 472 *;
+#X obj 331 472 *;
+#X text 20 198 Here the pole and zero radii (p and q) control the center-frequency
+gain by the formula (1-q)/(1-p). The closer to 1 the radii \, the narrower
+the band affected. The non-peak gain \, (1+q)/(1+p) \, is close to
+1 as long as p and q are at least 50% or so.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header peaking_filter 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 37 To get a peaking filter \, start with a shelving filter
 but rotate the pole and zero to the point on the unit circle you want
 to amplify or attenuate. The rpole~ and rzero~ filters are replaced
 with their complex-valued siblings \, cpole~ and czero~. These filters
 take a (real \, imaginary) pair to filter and another (real-imaginary)
-pair to specify the pole or zero. As for rpole~ and rzero~ \, the coefficients
-may change at audio rate.;
-#X text 22 162 The outputs of cpole~ and czero~ are also in the form
-of a (real-imaginary) pair. Both outlets of cpole~ are connected to
-czero~ in this example \, but then since we want a real-valued filter
-\, we only take the real part of the (complex) output of czero~.;
-#X text 23 246 Here the pole and zero radii (p and q) control the center-frequency
-gain by the formula (1-q)/(1-p). The closer to 1 the radii \, the narrower
-the band affected. The non-peak gain \, (1+q)/(1+p) \, is close to
-1 as long as p and q are at least 50% or so.;
+pair to specify the pole or zero. As for [rpole~] and [rzero~] \, the
+coefficients may change at audio rate.;
+#X obj 1 570 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION peaking filter;
+#X restore 392 572 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 peaking filter- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 572 pd References;
+#X obj 6 572 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 134 The outputs of [cpole~] and [czero~] are also in the
+form of a (real-imaginary) pair. Both outlets of [cpole~] are connected
+to [czero~] in this example \, but then since we want a real-valued
+filter \, we only take the real part of the (complex) output of [czero~].
+;
 #X connect 1 0 8 0;
 #X connect 5 0 10 0;
 #X connect 8 0 2 0;
 #X connect 8 0 7 0;
 #X connect 8 1 7 1;
-#X connect 8 1 28 0;
+#X connect 8 1 26 0;
 #X connect 8 2 7 2;
-#X connect 10 0 25 0;
-#X connect 10 0 32 0;
+#X connect 10 0 23 0;
+#X connect 10 0 30 0;
 #X connect 11 0 12 0;
-#X connect 12 0 33 0;
-#X connect 12 0 34 0;
-#X connect 18 0 23 0;
-#X connect 21 0 27 0;
-#X connect 22 0 26 0;
-#X connect 23 0 24 0;
-#X connect 24 0 22 0;
-#X connect 24 0 21 0;
-#X connect 25 0 28 2;
-#X connect 26 0 25 0;
-#X connect 26 0 33 0;
-#X connect 26 1 25 1;
-#X connect 26 1 33 1;
-#X connect 27 0 32 0;
-#X connect 27 0 34 0;
-#X connect 27 1 34 1;
-#X connect 27 1 32 1;
-#X connect 28 0 29 0;
-#X connect 28 1 29 1;
-#X connect 29 0 7 3;
-#X connect 32 0 28 3;
-#X connect 33 0 29 2;
-#X connect 34 0 29 3;
+#X connect 12 0 31 0;
+#X connect 12 0 32 0;
+#X connect 16 0 21 0;
+#X connect 19 0 25 0;
+#X connect 20 0 24 0;
+#X connect 21 0 22 0;
+#X connect 22 0 20 0;
+#X connect 22 0 19 0;
+#X connect 23 0 26 2;
+#X connect 24 0 23 0;
+#X connect 24 0 31 0;
+#X connect 24 1 23 1;
+#X connect 24 1 31 1;
+#X connect 25 0 30 0;
+#X connect 25 0 32 0;
+#X connect 25 1 32 1;
+#X connect 25 1 30 1;
+#X connect 26 0 27 0;
+#X connect 26 1 27 1;
+#X connect 27 0 7 3;
+#X connect 30 0 26 3;
+#X connect 31 0 27 2;
+#X connect 32 0 27 3;
diff --git a/pd/doc/3.audio.examples/H13.butterworth.pd b/pd/doc/3.audio.examples/H13.butterworth.pd
index 4cdcb6286..c2506daeb 100644
--- a/pd/doc/3.audio.examples/H13.butterworth.pd
+++ b/pd/doc/3.audio.examples/H13.butterworth.pd
@@ -1,5 +1,5 @@
-#N canvas 49 22 840 502 12;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 356 19 647 471 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-tab1 100 float 1;
 #A 0 0.999974 0.998121 0.998981 1.00106 1.00019 1.00133 1.00017 0.997406
 0.995891 0.986251 0.976591 0.959539 0.93749 0.903172 0.859824 0.805118
@@ -16,11 +16,11 @@
 0.00587868 0.0056713 0.00547262 0.00528366 0.00509866 0.00493017 0.00476291
 0.00460384 0.00445121 0.00430475 0.00416536;
 #X coords 0 5 99 0 200 300 1;
-#X restore 615 71 graph;
-#X obj 32 250 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 422 112 graph;
+#X obj 22 215 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X floatatom 40 294 3 0 0 0 - - -;
-#X text 670 377 frequency;
+#X floatatom 30 259 3 0 0 0 - - -, f 3;
+#X text 477 418 frequency;
 #N canvas 876 177 375 255 startup 0;
 #X obj 22 24 loadbang;
 #X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
@@ -32,43 +32,67 @@
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 5 0;
-#X restore 324 431 pd startup;
-#X text 553 359 gain=0;
-#X obj 32 446 filter-graph2 \$0-tab1;
-#X text 593 60 5;
-#X text 610 370 0;
-#X text 598 301 1;
-#X text 575 435 updated for Pd version 0.39;
-#X text 186 -4 BUTTERWORTH FILTER;
-#X obj 216 398 butterworth3~;
-#X floatatom 244 340 3 0 100 0 - #0-lf -;
-#X floatatom 291 339 3 85 150 0 - #0-hf -;
-#X obj 244 366 mtof;
-#X obj 291 366 mtof;
-#X text 790 373 5000;
-#X obj 32 271 filter-graph1 100 5000;
-#X text 232 318 poles;
-#X text 288 318 zeros;
-#X text 24 20 The butterworth filter can be configured for low-pass
-\, high-pass \, and shelving \, depending on the placement of the poles
-and zeros. For low-pass \, the poles are placed to set the cutoff frequency
-and the zeros are at -1 (the Nyquist). Leaving the poles fixed and
-moving the zeros then gives shelving filters. In this example \, the
-actual filtering is relegated to an abstraction (butterworth3~) which
-takes frequencies corresponding to the pole and zero placement.;
-#X text 24 147 The butterworth3~ abstraction computes filter coeffients
+#X restore 216 397 pd startup;
+#X text 360 400 gain=0;
+#X obj 22 411 filter-graph2 \$0-tab1;
+#X text 400 101 5;
+#X text 417 411 0;
+#X text 405 342 1;
+#X obj 146 373 butterworth3~;
+#X floatatom 164 315 3 0 100 0 - #0-lf -, f 3;
+#X floatatom 211 314 3 85 150 0 - #0-hf -, f 3;
+#X obj 164 341 mtof;
+#X obj 211 341 mtof;
+#X text 597 414 5000;
+#X obj 22 236 filter-graph1 100 5000;
+#X text 156 293 poles;
+#X text 208 293 zeros;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header Butterworth_filter
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 449 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION Butterworth filter;
+#X restore 392 451 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Butterworth filter- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 451 pd References;
+#X obj 6 451 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 133 The [butterworth3~] abstraction computes filter coeffients
 using control messages \, and so it is not suitable for continuously
 time-varying Butterworth filters. For that \, it is often appropriate
 to use time-saving approximations \, but precisely which approximations
 to use will depend on the way the filter is to be used.;
-#X connect 1 0 18 0;
-#X connect 12 0 6 3;
-#X connect 13 0 15 0;
-#X connect 14 0 16 0;
-#X connect 15 0 12 1;
-#X connect 16 0 12 2;
-#X connect 18 0 2 0;
-#X connect 18 0 6 0;
-#X connect 18 1 6 1;
-#X connect 18 1 12 0;
-#X connect 18 2 6 2;
+#X text 19 36 The butterworth filter can be configured for low-pass
+\, high-pass \, and shelving \, depending on the placement of the poles
+and zeros. For low-pass \, the poles are placed to set the cutoff frequency
+and the zeros are at -1 (the Nyquist). Leaving the poles fixed and
+moving the zeros then gives shelving filters. In this example \, the
+actual filtering is relegated to an abstraction-- [butterworth3~]--
+which takes frequencies corresponding to the pole and zero placement.
+;
+#X connect 1 0 16 0;
+#X connect 10 0 6 3;
+#X connect 11 0 13 0;
+#X connect 12 0 14 0;
+#X connect 13 0 10 1;
+#X connect 14 0 10 2;
+#X connect 16 0 2 0;
+#X connect 16 0 6 0;
+#X connect 16 1 6 1;
+#X connect 16 1 10 0;
+#X connect 16 2 6 2;
diff --git a/pd/doc/3.audio.examples/H14.all.pass.pd b/pd/doc/3.audio.examples/H14.all.pass.pd
index d493df7b7..9c371c584 100644
--- a/pd/doc/3.audio.examples/H14.all.pass.pd
+++ b/pd/doc/3.audio.examples/H14.all.pass.pd
@@ -1,6 +1,6 @@
-#N canvas 25 22 868 421 12;
-#X obj 25 338 filter-graph2 tab1 tab2;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 424 23 448 647 10;
+#X obj 22 254 filter-graph2 tab1 tab2;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array tab1 100 float 1;
 #A 0 0.999994 1.0015 1.00454 0.999907 0.99994 0.999773 1.00002 1.0004
 0.999993 0.998703 1 0.999993 1 0.999699 0.999312 0.99924 0.999999 1
@@ -15,8 +15,8 @@
 0.999996 0.99999 1 0.99999 0.999991 0.998888 1.00002 0.999955 0.999942
 0.999432 1.00007 1.00956;
 #X coords 0 2 99 0 200 140 1;
-#X restore 634 -1 graph;
-#N canvas 0 0 450 300 graph2 0;
+#X restore 230 249 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array tab2 100 float 3;
 #A 0 8.595e-06 0.0615936 0.127096 0.18809 0.251487 0.314087 0.376949
 0.439804 0.502669 0.565481 0.628309 0.691149 0.753982 0.816816 0.879645
@@ -31,19 +31,18 @@
 5.46619 5.52902 5.59185 5.65469 5.71752 5.78033 5.8432 5.90605 5.96891
 6.03151 6.09491 6.1559 6.21446;
 #X coords 0 6.283 99 0 200 140 1;
-#X restore 639 200 graph;
-#X text 621 56 1;
-#X text 633 342 0;
-#X text 615 265 pi;
-#X text 608 195 2pi;
-#X obj 25 203 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 235 450 graph;
+#X text 217 306 1;
+#X text 229 592 0;
+#X text 211 515 pi;
+#X text 204 445 2pi;
+#X obj 22 119 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X floatatom 33 249 5 0 0 0 - - -;
-#X text 621 -8 2;
-#X text 610 382 updated for Pd version 0.39;
-#X text 691 145 frequency;
-#X text 631 141 0;
-#X text 814 144 44100;
+#X floatatom 30 165 5 0 0 0 - - -, f 5;
+#X text 217 242 2;
+#X text 287 395 frequency;
+#X text 227 391 0;
+#X text 410 394 44100;
 #N canvas 876 177 375 255 startup 0;
 #X obj 22 24 loadbang;
 #X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
@@ -55,31 +54,55 @@
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 5 0;
-#X restore 398 370 pd startup;
-#X text 575 127 gain=0;
-#X text 574 327 phase=0;
-#X obj 25 226 filter-graph1 100 44100;
-#X text 44 202 <-- compute;
-#X text 34 266 index;
-#X text 104 -6 ALL-PASS FILTERS;
-#X floatatom 346 264 3 -99 99 0 - #0-pole -;
-#X obj 239 306 rpole~;
-#X obj 346 287 / 100;
-#X obj 239 281 rzero_rev~;
-#X text 341 240 pole (%);
-#X text 14 20 The all-pass filter has a phase response that depends
+#X restore 22 286 pd startup;
+#X text 171 377 gain=0;
+#X text 170 577 phase=0;
+#X obj 22 142 filter-graph1 100 44100;
+#X text 41 118 <-- compute;
+#X text 31 182 index;
+#X floatatom 253 177 3 -99 99 0 - #0-pole -, f 3;
+#X obj 156 227 rpole~;
+#X obj 253 200 / 100;
+#X obj 156 202 rzero_rev~;
+#X text 248 153 pole (%);
+#X text 19 37 The all-pass filter has a phase response that depends
 on its coefficient \, and a flat frequency response. The coefficient
 (p) gives the location of the pole. There is a zero at 1/p \, unless
 p=0. If p=0 the filter is effectively a one-sample delay. Negative
 values of $p$ are allowed \, as long as p is between -1 and 1;
-#X connect 7 0 17 0;
-#X connect 17 0 0 0;
-#X connect 17 0 8 0;
-#X connect 17 1 0 1;
-#X connect 17 1 24 0;
-#X connect 17 2 0 2;
-#X connect 21 0 23 0;
-#X connect 22 0 0 3;
-#X connect 23 0 24 1;
-#X connect 23 0 22 1;
-#X connect 24 0 22 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header all-pass_filters
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 625 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION all-pass filters;
+#X restore 392 627 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 all-pass filters- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 627 pd References;
+#X obj 6 627 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 7 0 16 0;
+#X connect 16 0 0 0;
+#X connect 16 0 8 0;
+#X connect 16 1 0 1;
+#X connect 16 1 22 0;
+#X connect 16 2 0 2;
+#X connect 19 0 21 0;
+#X connect 20 0 0 3;
+#X connect 21 0 22 1;
+#X connect 21 0 20 1;
+#X connect 22 0 20 0;
diff --git a/pd/doc/3.audio.examples/H15.phaser.pd b/pd/doc/3.audio.examples/H15.phaser.pd
index 4de372c1e..ed5c6b513 100644
--- a/pd/doc/3.audio.examples/H15.phaser.pd
+++ b/pd/doc/3.audio.examples/H15.phaser.pd
@@ -1,6 +1,4 @@
-#N canvas 25 22 703 596 12;
-#X text 448 562 updated for Pd version 0.39;
-#X text 167 -1 PHASER;
+#N canvas 391 19 524 587 10;
 #N canvas 876 177 375 255 startup 0;
 #X obj 22 24 loadbang;
 #X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
@@ -12,7 +10,7 @@
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 5 0;
-#X restore 323 561 pd startup;
+#X restore 123 527 pd startup;
 #N canvas 0 0 660 424 chord 0;
 #X obj 87 97 -~ 0.5;
 #X obj 87 146 clip~ -0.5 0.5;
@@ -60,50 +58,76 @@
 #X connect 20 0 11 0;
 #X connect 21 0 15 0;
 #X connect 23 0 4 0;
-#X restore 73 271 pd chord;
-#X obj 72 533 output~;
-#X obj 95 325 rpole~;
-#X obj 95 300 rzero_rev~;
-#X obj 95 374 rpole~;
-#X obj 95 349 rzero_rev~;
-#X obj 95 422 rpole~;
-#X obj 95 397 rzero_rev~;
-#X obj 95 471 rpole~;
-#X obj 95 446 rzero_rev~;
-#X obj 72 501 +~;
-#X text 23 17 The phaser ranks \, along with fuzz and wah-wah \, as
-one of the great guitar pedals. A phaser simply adds an all-passed
-copy of the signal to the original \, making phase reinforcement and
-cancellation at frequencies that depend on the all-pass coefficients.
-In this example the coefficients range from 0.88 to 0.98 \, controlled
-by a phasor~ object (no relation). The phasor~ is converted to a symmetrical
-triangle wave (abs($v1-0.5)) and then ranged appropriately.;
-#X obj 250 417 phasor~ 0.3;
-#X text 22 158 Many variations of this have been invented. A deeper
+#X restore 23 238 pd chord;
+#X obj 22 500 output~;
+#X obj 45 292 rpole~;
+#X obj 45 267 rzero_rev~;
+#X obj 45 341 rpole~;
+#X obj 45 316 rzero_rev~;
+#X obj 45 389 rpole~;
+#X obj 45 364 rzero_rev~;
+#X obj 45 438 rpole~;
+#X obj 45 413 rzero_rev~;
+#X obj 22 468 +~;
+#X obj 230 294 phasor~ 0.3;
+#X text 20 145 Many variations of this have been invented. A deeper
 effect can be obtained by using 12 all-pass filters and adding the
 outputs of the 4th \, 8th. and 12th one to the original. Various stereo
 configurations are possible. Some people use 6 instead of the 4 stages
 used here. Controls can be added to change the frequency of sweeping
 and the range of the all-pass coeefficients.;
-#X obj 250 449 expr~ 1 - 0.03 - 0.6*abs($v1-0.5)*abs($v1-0.5);
+#X obj 230 326 expr~ 1 - 0.03 - 0.6*abs($v1-0.5)*abs($v1-0.5);
+#X text 19 37 The phaser ranks \, along with fuzz and wah-wah \, as
+one of the great guitar pedals. A phaser simply adds an all-passed
+copy of the signal to the original \, making phase reinforcement and
+cancellation at frequencies that depend on the all-pass coefficients.
+In this example the coefficients range from 0.88 to 0.98 \, controlled
+by a [phasor~] object (no relation). The [phasor~] is converted to
+a symmetrical triangle wave (abs($v1-0.5)) and then ranged appropriately.
+;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header phaser 20 10 1 18
+-261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 565 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION phaser;
+#X restore 392 567 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 phaser- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 567 pd References;
+#X obj 6 567 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 1 0 4 0;
+#X connect 1 0 11 0;
 #X connect 3 0 6 0;
-#X connect 3 0 13 0;
+#X connect 4 0 3 0;
 #X connect 5 0 8 0;
 #X connect 6 0 5 0;
 #X connect 7 0 10 0;
 #X connect 8 0 7 0;
-#X connect 9 0 12 0;
+#X connect 9 0 11 1;
 #X connect 10 0 9 0;
-#X connect 11 0 13 1;
-#X connect 12 0 11 0;
-#X connect 13 0 4 0;
-#X connect 13 0 4 1;
-#X connect 15 0 17 0;
-#X connect 17 0 6 1;
-#X connect 17 0 5 1;
-#X connect 17 0 8 1;
-#X connect 17 0 7 1;
-#X connect 17 0 10 1;
-#X connect 17 0 9 1;
-#X connect 17 0 12 1;
-#X connect 17 0 11 1;
+#X connect 11 0 2 0;
+#X connect 11 0 2 1;
+#X connect 12 0 14 0;
+#X connect 14 0 4 1;
+#X connect 14 0 3 1;
+#X connect 14 0 6 1;
+#X connect 14 0 5 1;
+#X connect 14 0 8 1;
+#X connect 14 0 7 1;
+#X connect 14 0 10 1;
+#X connect 14 0 9 1;
diff --git a/pd/doc/3.audio.examples/H16.adsr.filter.qlist.pd b/pd/doc/3.audio.examples/H16.adsr.filter.qlist.pd
index f112d2b6b..f4a25b534 100644
--- a/pd/doc/3.audio.examples/H16.adsr.filter.qlist.pd
+++ b/pd/doc/3.audio.examples/H16.adsr.filter.qlist.pd
@@ -1,70 +1,70 @@
-#N canvas 131 52 921 585 12;
-#X obj 12 219 r trigger;
-#X obj 12 437 *~;
-#X obj 12 330 *~ 0.01;
-#X obj 12 365 *~;
-#X obj 12 395 *~;
-#X obj 59 359 r pitch;
-#X obj 59 409 mtof;
-#X floatatom 59 384 4 0 0 0 - - -;
-#X floatatom 36 271 4 0 0 0 - - -;
-#X obj 36 246 r level;
-#X floatatom 110 271 4 0 0 0 - - -;
-#X obj 110 246 r attack;
-#X floatatom 195 271 4 0 0 0 - - -;
-#X obj 195 246 r decay;
-#X floatatom 270 271 4 0 0 0 - - -;
-#X floatatom 364 271 4 0 0 0 - - -;
-#X obj 270 246 r sustain;
-#X obj 364 246 r release;
+#N canvas 328 19 745 613 10;
+#X obj 22 229 r trigger;
+#X obj 22 447 *~;
+#X obj 22 340 *~ 0.01;
+#X obj 22 375 *~;
+#X obj 22 405 *~;
+#X obj 69 369 r pitch;
+#X obj 69 419 mtof;
+#X floatatom 69 394 4 0 0 0 - - -, f 4;
+#X floatatom 46 281 4 0 0 0 - - -, f 4;
+#X obj 46 256 r level;
+#X floatatom 120 281 4 0 0 0 - - -, f 4;
+#X obj 120 256 r attack;
+#X floatatom 205 281 4 0 0 0 - - -, f 4;
+#X obj 205 256 r decay;
+#X floatatom 280 281 4 0 0 0 - - -, f 4;
+#X floatatom 374 281 4 0 0 0 - - -, f 4;
+#X obj 280 256 r sustain;
+#X obj 374 256 r release;
 #X obj 499 158 r note;
-#X msg 500 236 \; trigger 1;
-#X obj 602 225 del;
-#X msg 602 247 \; trigger 0;
-#X obj 14 166 qlist;
-#X obj 14 7 r qlist;
-#X msg 35 34 bang;
-#X msg 35 59 rewind;
-#X obj 42 88 r tempo;
-#X floatatom 42 113 4 0 0 0 - - -;
-#X msg 42 138 tempo \$1;
+#X msg 499 256 \; trigger 1;
+#X obj 592 234 del;
+#X msg 592 256 \; trigger 0;
+#X obj 22 201 qlist;
+#X obj 22 42 r qlist;
+#X msg 43 69 bang;
+#X msg 43 94 rewind;
+#X obj 50 123 r tempo;
+#X floatatom 50 148 4 0 0 0 - - -, f 4;
+#X msg 50 173 tempo \$1;
 #X obj 499 201 t b f;
-#X obj 550 198 s pitch;
-#X obj 624 176 r duration;
-#X floatatom 624 201 4 0 0 0 - - -;
-#X floatatom 499 181 4 0 0 0 - - -;
-#X obj 268 319 r trigger;
-#X floatatom 294 375 4 0 0 0 - - -;
-#X floatatom 366 405 4 0 0 0 - - -;
-#X floatatom 456 405 4 0 0 0 - - -;
-#X floatatom 542 405 4 0 0 0 - - -;
-#X floatatom 638 405 4 0 0 0 - - -;
-#X obj 294 350 r level2;
-#X obj 366 380 r attack2;
-#X obj 456 380 r decay2;
-#X obj 542 380 r sustain2;
-#X obj 638 380 r release2;
-#X obj 59 434 tabosc4~ array1;
-#X floatatom 218 365 4 0 0 0 - - -;
-#X obj 12 481 vcf~;
-#X floatatom 119 487 4 0 0 0 - - -;
-#X obj 119 462 r q;
-#X obj 12 305 adsr 0 0 0 0 0;
-#X obj 268 443 adsr 0 0 0 0 0;
-#X obj 294 400 / 69.23;
-#X obj 218 390 mtof;
-#X obj 218 415 sqrt;
-#X obj 218 440 sqrt;
-#X obj 176 335 r filter;
-#X obj 219 493 *~;
-#X obj 219 518 *~;
-#X obj 268 468 +~ 1;
-#X obj 218 465 *~;
-#X text 118 214 ADSR for amplitude:;
+#X obj 526 233 s pitch;
+#X obj 607 185 r duration;
+#X floatatom 607 210 4 0 0 0 - - -, f 4;
+#X floatatom 499 181 4 0 0 0 - - -, f 4;
+#X obj 278 329 r trigger;
+#X floatatom 304 385 4 0 0 0 - - -, f 4;
+#X floatatom 376 415 4 0 0 0 - - -, f 4;
+#X floatatom 456 415 4 0 0 0 - - -, f 4;
+#X floatatom 542 415 4 0 0 0 - - -, f 4;
+#X floatatom 638 415 4 0 0 0 - - -, f 4;
+#X obj 304 360 r level2;
+#X obj 376 390 r attack2;
+#X obj 456 390 r decay2;
+#X obj 542 390 r sustain2;
+#X obj 638 390 r release2;
+#X obj 69 444 tabosc4~ array1;
+#X floatatom 228 375 4 0 0 0 - - -, f 4;
+#X obj 22 491 vcf~;
+#X floatatom 129 497 4 0 0 0 - - -, f 4;
+#X obj 129 472 r q;
+#X obj 22 315 adsr 0 0 0 0 0;
+#X obj 278 453 adsr 0 0 0 0 0;
+#X obj 304 410 / 69.23;
+#X obj 228 400 mtof;
+#X obj 228 425 sqrt;
+#X obj 228 450 sqrt;
+#X obj 186 345 r filter;
+#X obj 229 503 *~;
+#X obj 229 528 *~;
+#X obj 278 478 +~ 1;
+#X obj 228 475 *~;
+#X text 128 230 ADSR for amplitude:;
 #N canvas 0 258 703 380 otherstuff 0;
 #X obj 289 86 loadbang;
 #X obj 418 85 loadbang;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array array1 67 float 1;
 #A 0 0 0 0 0 0.714286 0.742857 0.757143 0.771429 0.778571 0.785714
 0.785714 0.785714 0.785714 0.790476 0.795238 0.614286 0.585714 0.442857
@@ -80,27 +80,50 @@
 tempo 4;
 #X connect 0 0 4 0;
 #X connect 1 0 3 0;
-#X restore 134 560 pd otherstuff;
-#X text 87 33 <--start loop;
-#X text 104 61 <--stop loop;
-#X text 90 113 <--set tempo;
-#X text 257 562 <--loadbangs and table;
-#X msg 447 517 \; qlist read qlist2.txt;
-#X text 441 493 click to reload qlist2.txt;
-#X obj 12 509 output~;
-#X text 229 19 This is an analog-synth sound made using a wavetable
+#X restore 144 553 pd otherstuff;
+#X text 95 68 <--start loop;
+#X text 112 96 <--stop loop;
+#X text 98 148 <--set tempo;
+#X text 230 553 <--loadbangs and table;
+#X msg 447 507 \; qlist read qlist2.txt;
+#X text 441 483 click to reload qlist2.txt;
+#X obj 22 519 output~;
+#X text 201 39 This is an analog-synth sound made using a wavetable
 oscillator and a "vcf~' object. Unkike the "floyd" example earlier
 \, we use a qlist object to do the sequencing. This can also be adapted
 to make a keyboard synth.;
-#X text 227 85 The qlist reads the file \, "qlist2.txt" \, which contains
+#X text 199 105 The qlist reads the file \, "qlist2.txt" \, which contains
 four "note" messages and a message at the end that restarts the qlist
 at the beginning. The "note" messages are translated into a pitch change
 and triggers for the ADSRs.;
-#X text 667 551 updated for Pd version 0.39;
-#X text 379 305 ADSR for filter. Here \, it works better to make the
+#X text 370 315 ADSR for filter. Here \, it works better to make the
 envelope modify a constant "filter pitch"--so the "filter" receive
 gets the "mtof" treatment and the ADSR is an offset in halftones.;
-#X text 231 1 ANALOG_STYLE SYNTH USING QLIST;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header analog_style_synth_using_qlist
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 591 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION analog style synth using qlist;
+#X restore 392 593 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 analog synth with qlist- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 593 pd References;
+#X obj 6 593 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 50 0;
 #X connect 1 0 47 0;
 #X connect 2 0 3 0;
diff --git a/pd/doc/3.audio.examples/I01.Fourier.analysis.pd b/pd/doc/3.audio.examples/I01.Fourier.analysis.pd
index f82e17105..1e63fc392 100644
--- a/pd/doc/3.audio.examples/I01.Fourier.analysis.pd
+++ b/pd/doc/3.audio.examples/I01.Fourier.analysis.pd
@@ -1,52 +1,63 @@
-#N canvas 247 4 688 708 12;
-#X floatatom 38 264 7 0 0 0 - - -;
+#N canvas 343 19 688 666 10;
+#X floatatom 38 284 7 0 0 0 - - -, f 7;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-real 64 float 2;
 #X coords 0 64 64 -64 256 200 1;
-#X restore 423 184 graph;
-#X floatatom 38 168 5 0 32 0 - - -;
-#X obj 78 240 samplerate~;
-#X obj 38 215 t f b;
-#X obj 38 240 *;
-#X obj 80 568 metro 250;
-#X obj 38 637 tabwrite~ \$0-real;
-#X obj 67 614 tabwrite~ \$0-imaginary;
-#X obj 38 384 osc~;
+#X restore 393 194 graph;
+#X floatatom 38 188 5 0 32 0 - - -, f 5;
+#X obj 78 260 samplerate~;
+#X obj 38 235 t f b;
+#X obj 38 260 *;
+#X obj 80 588 metro 250;
+#X obj 38 657 tabwrite~ \$0-real;
+#X obj 67 634 tabwrite~ \$0-imaginary;
+#X obj 38 404 osc~;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-imaginary 64 float 2;
 #X coords 0 64 64 -64 256 200 1;
-#X restore 423 417 graph;
-#X obj 69 360 f;
-#X floatatom 91 316 3 0 100 0 - - -;
-#X obj 91 337 / 100;
-#X obj 38 191 / 64;
-#X text 595 165 real part;
-#X text 550 398 imaginary part;
-#X obj 80 545 loadbang;
-#X text 94 166 <- frequency;
-#X text 133 182 (as multiple;
-#X text 135 198 of SR/64 \, the;
-#X text 133 215 fundamental);
-#X text 170 345 of a cycle;
-#X text 431 638 updated for PD version 0.39;
-#X obj 89 590 s \$0-snap;
-#X obj 69 286 r \$0-snap;
-#X text 127 315 <- phase in;
-#X text 161 331 hundredths;
-#X text 113 264 <- frequency \, Hz.;
-#X text 87 415 given the real and imaginary part;
-#X text 88 431 of a complex-valued signal. Here;
-#X text 87 447 the imaginary part is zero (the;
-#X text 86 400 fft~ computes the Fourier transform \,;
-#X text 186 541 real and imaginary;
-#X text 186 557 outputs are graphed;
-#X text 185 574 separately.;
-#X text 86 464 input is real-valued). The output;
-#X text 85 482 is a (real \, imaginary) pair for each;
-#X text 86 500 frequency from 0 to 63 (in units of;
-#X text 87 520 SR/64).;
-#X text 145 -36 The "fft~" object has separate inlets for the real
-and imaginary parts of a complex-valued signal and outputs its Fourier
+#X restore 393 427 graph;
+#X obj 69 380 f;
+#X floatatom 91 336 3 0 100 0 - - -, f 3;
+#X obj 91 357 / 100;
+#X obj 38 211 / 64;
+#X text 565 175 real part;
+#X text 520 408 imaginary part;
+#X obj 80 565 loadbang;
+#X text 94 186 <- frequency;
+#X text 133 202 (as multiple;
+#X text 135 218 of SR/64 \, the;
+#X text 133 235 fundamental);
+#X text 170 365 of a cycle;
+#X obj 89 610 s \$0-snap;
+#X obj 69 306 r \$0-snap;
+#X text 127 335 <- phase in;
+#X text 161 351 hundredths;
+#X text 113 284 <- frequency \, Hz.;
+#X text 87 435 given the real and imaginary part;
+#X text 88 451 of a complex-valued signal. Here;
+#X text 87 467 the imaginary part is zero (the;
+#X text 86 420 fft~ computes the Fourier transform \,;
+#X text 186 561 real and imaginary;
+#X text 186 577 outputs are graphed;
+#X text 185 594 separately.;
+#X text 86 484 input is real-valued). The output;
+#X text 85 502 is a (real \, imaginary) pair for each;
+#X text 86 520 frequency from 0 to 63 (in units of;
+#X text 87 540 SR/64).;
+#X msg 38 99 0;
+#X msg 38 120 10;
+#X msg 38 141 10.5;
+#X text 159 303 bang-on-snapshot;
+#X text 157 317 from below;
+#X text 100 383 sync phase with snapshots;
+#X obj 37 443 fft~;
+#X msg 274 634 \; pd dsp 1;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header Fourier_analysis
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 135 28 The [fft~] object has separate inlets for the real and
+imaginary parts of a complex-valued signal and outputs its Fourier
 transform \, again using separate outlets for the real and imaginary
 part. The transform is done on one block of samples (here the block
 size is 64 \, Pd's default.) The outputs give the complex amplitudes
@@ -56,16 +67,27 @@ sample rate. If the frequency (in harmonics) is an integer \, the result
 is two harmonics symmetric about the Nyquist frequency. Fractional
 frequencies spill across harmonics. Changing the initial phase rotates
 energy from real to imaginary and back.;
-#X text 26 -24 ANALYSIS;
-#X text 27 -42 FOURIER;
-#X msg 38 79 0;
-#X msg 38 100 10;
-#X msg 38 121 10.5;
-#X text 159 283 bang-on-snapshot;
-#X text 157 297 from below;
-#X text 100 363 sync phase with snapshots;
-#X obj 37 423 fft~;
-#X msg 274 614 \; pd dsp 1;
+#X obj 1 687 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION Fourier analysis;
+#X restore 392 689 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Fourier analysis- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 689 pd References;
+#X obj 6 689 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 9 0;
 #X connect 2 0 14 0;
 #X connect 3 0 5 1;
@@ -74,17 +96,17 @@ energy from real to imaginary and back.;
 #X connect 5 0 0 0;
 #X connect 6 0 7 0;
 #X connect 6 0 8 0;
-#X connect 6 0 24 0;
-#X connect 9 0 49 0;
+#X connect 6 0 23 0;
+#X connect 9 0 45 0;
 #X connect 11 0 9 1;
 #X connect 12 0 13 0;
 #X connect 13 0 11 1;
 #X connect 14 0 4 0;
 #X connect 17 0 6 0;
-#X connect 17 0 50 0;
-#X connect 25 0 11 0;
-#X connect 43 0 2 0;
-#X connect 44 0 2 0;
-#X connect 45 0 2 0;
-#X connect 49 0 7 0;
-#X connect 49 1 8 0;
+#X connect 17 0 46 0;
+#X connect 24 0 11 0;
+#X connect 39 0 2 0;
+#X connect 40 0 2 0;
+#X connect 41 0 2 0;
+#X connect 45 0 7 0;
+#X connect 45 1 8 0;
diff --git a/pd/doc/3.audio.examples/I02.Hann.window.pd b/pd/doc/3.audio.examples/I02.Hann.window.pd
index 1cf8b46a6..d0a3961b7 100644
--- a/pd/doc/3.audio.examples/I02.Hann.window.pd
+++ b/pd/doc/3.audio.examples/I02.Hann.window.pd
@@ -1,5 +1,5 @@
-#N canvas 281 223 567 589 12;
-#N canvas 228 148 651 544 fft-analysis 0;
+#N canvas 433 87 448 590 10;
+#N canvas 228 148 529 544 fft-analysis 0;
 #X obj 15 164 *~;
 #X obj 14 99 inlet~;
 #X obj 15 218 rfft~;
@@ -51,23 +51,21 @@ of "fft".;
 #X connect 9 0 7 0;
 #X connect 10 0 9 0;
 #X connect 22 0 6 0;
-#X restore 26 289 pd fft-analysis;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 26 319 pd fft-analysis;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-magnitude 256 float 0;
 #X coords 0 256 255 0 256 100 1;
-#X restore 287 208 graph;
-#X text 110 6 WINDOWING AND BLOCKING FOURIER TRANSFORMS;
-#X obj 25 264 osc~;
-#X floatatom 25 218 5 0 0 0 - - -;
-#X obj 25 240 * 10;
-#X text 305 559 updated for Pd version 0.39;
-#X text 349 183 magnitude;
-#X text 284 311 0;
-#X text 522 311 255;
-#X text 273 297 0;
-#X text 255 253 128;
-#X text 254 203 256;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 182 178 graph;
+#X obj 25 294 osc~;
+#X floatatom 25 248 5 0 0 0 - - -, f 5;
+#X obj 25 270 * 10;
+#X text 271 151 magnitude;
+#X text 179 281 0;
+#X text 417 281 255;
+#X text 168 267 0;
+#X text 150 223 128;
+#X text 149 173 256;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-hann 512 float 1;
 #A 0 0 3.76403e-05 0.000150591 0.000338793 0.000602275 0.000940949
 0.00135478 0.00184369 0.00240764 0.00304651 0.00376022 0.00454867 0.00541174
@@ -137,28 +135,28 @@ of "fft".;
 0.00135431 0.000940561 0.000601947 0.000338584 0.000150442 3.75807e-05
 ;
 #X coords 0 1 511 0 200 120 1;
-#X restore 278 401 graph;
-#X msg 156 415 0;
-#X obj 50 464 osc~;
-#X obj 50 416 samplerate~;
-#X obj 50 487 *~ -0.5;
-#X obj 50 510 +~ 0.5;
-#X obj 42 535 tabwrite~ \$0-hann;
-#X text 264 393 1;
-#X text 257 511 0;
-#X text 273 524 0;
-#X obj 50 440 / 512;
-#X obj 42 393 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 218 344 graph;
+#X msg 140 410 0;
+#X obj 34 459 osc~;
+#X obj 34 411 samplerate~;
+#X obj 34 482 *~ -0.5;
+#X obj 34 505 +~ 0.5;
+#X obj 26 530 tabwrite~ \$0-hann;
+#X text 204 336 1;
+#X text 197 454 0;
+#X text 213 467 0;
+#X obj 34 435 / 512;
+#X obj 26 383 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 321 373 Hann window;
-#X text 98 462 period 512;
-#X text 40 368 recalculate Hann;
-#X text 75 383 window table;
-#X text 100 233 tens of Hz.;
-#X text 80 215 <- frequency \,;
-#X text 98 270 click here and;
-#X text 170 286 <- see;
-#X text 21 32 In this example we use a sub-patch ("pd fft-analysis")
+#X text 281 314 Hann window;
+#X text 82 457 period 512;
+#X text 27 358 recalculate Hann;
+#X text 52 374 window table;
+#X text 84 266 tens of Hz.;
+#X text 64 248 <- frequency \,;
+#X text 79 300 click here and;
+#X text 127 319 <- see;
+#X text 19 37 In this example we use a sub-patch ("pd fft-analysis")
 to re-block the Fourier transform to 512 points. The signal is multiplied
 by the Hann window function (which is just a raised cosine.) The magnitude
 \, which is computed in the sub-patch \, is graphed below in this window.
@@ -166,16 +164,42 @@ The point at 255 corresponds to just below the Nyquist frequency. Phase
 isn't shown \, and unlike the previous patch we don't control the initial
 phase of the oscillator. (For fun \, try drawing other window functions
 with the mouse...);
-#X text 459 527 511;
-#X connect 3 0 0 0;
-#X connect 4 0 5 0;
-#X connect 5 0 3 0;
-#X connect 14 0 15 1;
-#X connect 15 0 17 0;
-#X connect 16 0 23 0;
-#X connect 17 0 18 0;
-#X connect 18 0 19 0;
-#X connect 23 0 15 0;
-#X connect 24 0 16 0;
-#X connect 24 0 14 0;
-#X connect 24 0 19 0;
+#X text 399 470 511;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header windowing_and_blocking_Fourier_transforms
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 568 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION windowing and blocking Fourier transforms
+;
+#X restore 392 570 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Hann window- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 570 pd References;
+#X obj 6 570 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 2 0 0 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 12 0 13 1;
+#X connect 13 0 15 0;
+#X connect 14 0 21 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X connect 21 0 13 0;
+#X connect 22 0 14 0;
+#X connect 22 0 12 0;
+#X connect 22 0 17 0;
diff --git a/pd/doc/3.audio.examples/I03.resynthesis.pd b/pd/doc/3.audio.examples/I03.resynthesis.pd
index f709d29f2..0fb10460e 100644
--- a/pd/doc/3.audio.examples/I03.resynthesis.pd
+++ b/pd/doc/3.audio.examples/I03.resynthesis.pd
@@ -1,4 +1,4 @@
-#N canvas 73 310 580 406 12;
+#N canvas 376 24 580 400 10;
 #N canvas 265 48 643 640 fft-analysis 0;
 #X obj 15 164 *~;
 #X obj 14 99 inlet~;
@@ -57,10 +57,9 @@ four. This window now computes blocks of 512 samples at intervals of
 #X connect 13 0 5 1;
 #X connect 16 0 13 0;
 #X connect 18 0 11 0;
-#X restore 26 289 pd fft-analysis;
-#X text 290 362 updated for Pd version 0.39;
+#X restore 23 279 pd fft-analysis;
 #N canvas 35 66 592 433 Hann-window 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-hann 512 float 0;
 #X coords 0 1 511 0 200 120 1;
 #X restore 293 249 graph;
@@ -96,10 +95,10 @@ the file smaller (it doesn't have to be saved with the array.);
 #X connect 11 0 6 0;
 #X connect 16 0 11 0;
 #X connect 16 0 17 0;
-#X restore 192 318 pd Hann-window;
-#X obj 27 323 output~;
-#X obj 25 264 noise~;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 152 340 pd Hann-window;
+#X obj 24 313 output~;
+#X obj 22 254 noise~;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-gain 256 float 3;
 #A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
@@ -110,23 +109,47 @@ the file smaller (it doesn't have to be saved with the array.);
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
 #X coords 0 1 256 -0.01 512 60 1;
-#X restore 22 168 graph;
-#X msg 192 264 const 0;
-#X obj 192 293 s \$0-gain;
-#X text 138 0 FOURIER RESYNTHESIS;
-#X text 6 218 0;
-#X text 6 159 1;
-#X text 19 228 0;
-#X text 516 231 22K;
-#X text 270 261 <- reset gain;
-#X text 224 148 GAIN;
-#X text 21 24 Using Fourier resynthesis you can take an incoming sound
+#X restore 35 157 graph;
+#X msg 152 293 const 0;
+#X obj 152 315 s \$0-gain;
+#X text 19 207 0;
+#X text 19 148 1;
+#X text 32 217 0;
+#X text 529 220 22K;
+#X text 210 293 <- reset gain;
+#X text 237 137 GAIN;
+#X text 19 37 Using Fourier resynthesis you can take an incoming sound
 \, operate on its spectrum \, and hear the result. Here we start with
 white noise and apply a frequency-dependent gain \, which works as
 a graphic equalizer. There are N/2 = 256 points \, each spaced SR/512
 Hz. apart (although their frequency ranges overlap). Open the "fft-analysis"
 patch to see the workings.;
-#X connect 0 0 3 0;
-#X connect 0 0 3 1;
-#X connect 4 0 0 0;
-#X connect 6 0 7 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header Fourier_resynthesis
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 378 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION Fourier resynthesis;
+#X restore 392 380 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Fourier resynthesis- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 380 pd References;
+#X obj 6 380 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 2 0;
+#X connect 0 0 2 1;
+#X connect 3 0 0 0;
+#X connect 5 0 6 0;
diff --git a/pd/doc/3.audio.examples/I04.noisegate.pd b/pd/doc/3.audio.examples/I04.noisegate.pd
index 0a8bd12ae..d887e9246 100644
--- a/pd/doc/3.audio.examples/I04.noisegate.pd
+++ b/pd/doc/3.audio.examples/I04.noisegate.pd
@@ -1,6 +1,6 @@
-#N canvas 42 28 657 564 12;
-#X floatatom 316 376 0 0 0 0 - - -;
-#X floatatom 81 384 0 0 100 0 - - -;
+#N canvas 424 22 448 500 10;
+#X floatatom 196 343 0 0 0 0 - - -;
+#X floatatom 30 315 0 0 100 0 - - -;
 #N canvas 98 0 648 669 fft-analysis 0;
 #X obj 35 589 *~;
 #X obj 143 305 *~;
@@ -139,11 +139,11 @@ with each of the accumulating ones.;
 #X connect 32 0 13 1;
 #X connect 36 0 6 1;
 #X connect 36 0 4 1;
-#X restore 80 441 pd fft-analysis;
+#X restore 30 367 pd fft-analysis;
 #N canvas 0 110 565 454 hann-window 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-hann 1024 float 0;
-#X coords 0 1 1023 0 300 100 1;
+#X coords 0 1 1024 0 300 100 1;
 #X restore 82 311 graph;
 #X obj 378 165 osc~;
 #X obj 378 190 *~ -0.5;
@@ -189,10 +189,10 @@ and window-msec (analysis window size in seconds and msec).;
 #X connect 19 0 1 0;
 #X connect 19 1 4 0;
 #X connect 19 1 18 0;
-#X restore 331 478 pd hann-window;
-#X text 197 355 noise;
+#X restore 320 418 pd hann-window;
+#X text 106 293 noise;
 #N canvas 132 255 660 373 insample 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-sample 155948 float 0;
 #X coords 0 1 155947 -1 400 150 1;
 #X restore 236 25 graph;
@@ -224,14 +224,13 @@ and window-msec (analysis window size in seconds and msec).;
 #X connect 12 0 3 0;
 #X connect 15 0 2 0;
 #X connect 15 1 12 0;
-#X restore 331 456 pd insample;
-#X obj 316 401 s mask-level;
-#X floatatom 202 379 0 0 100 0 - - -;
-#X text 317 325 on;
-#X text 362 326 off;
-#X text 317 309 masking;
-#X text 290 5 DENOISER;
-#X msg 361 349 0;
+#X restore 320 396 pd insample;
+#X obj 196 368 s mask-level;
+#X floatatom 111 315 0 0 100 0 - - -;
+#X text 197 293 on;
+#X text 242 294 off;
+#X text 204 270 masking;
+#X msg 241 316 0;
 #N canvas 190 43 812 571 test-signal 0;
 #X obj 75 328 line~;
 #X obj 75 250 f;
@@ -289,30 +288,30 @@ amplitude of each in dB.;
 #X connect 21 0 3 0;
 #X connect 22 0 20 0;
 #X connect 25 0 4 0;
-#X restore 81 409 pd test-signal;
-#X text 69 357 sampler;
-#X text 443 311 calculate noise mask;
-#X obj 80 488 output~;
-#X msg 462 338 \; make-mask 2000;
-#X msg 316 348 15;
+#X restore 30 340 pd test-signal;
+#X text 18 293 sampler;
+#X text 302 294 calculate noise mask;
+#X obj 30 413 output~;
+#X msg 320 316 \; make-mask 2000;
+#X msg 196 315 15;
 #N canvas 0 0 592 442 mask-table 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-mask 512 float 0;
 #X coords 0 500 511 0 400 300 1;
 #X restore 110 76 graph;
-#X text 25 14 This table ($0-mask) is the average power measured in
-each channel of the spectrum \, presumed to represent the noise floor.
-;
-#X restore 331 500 pd mask-table;
-#X text 80 322 amplitudes (dB);
-#X text 68 26 This patch attempts to scrub the noise floor from a sample
+#X text 25 14 This table (1010-mask) is the average power measured
+in each channel of the spectrum \, presumed to represent the noise
+floor.;
+#X restore 320 440 pd mask-table;
+#X text 32 270 amplitudes (dB);
+#X text 19 36 This patch attempts to scrub the noise floor from a sample
 in two steps. First using the "make-mask" message (which is caught
 in the "fft-analysis" window) \, you estimate the background spectrum.
 You would normally do this at a moment when only the background noise
 is audible. Then \, turn on "masking" (to 15 by default \, but try
 other values) and the patch will try to clean the background noise
 out of a signal.;
-#X text 67 149 For this demonstration \, you control the amplitudes
+#X text 19 134 For this demonstration \, you control the amplitudes
 of a looping sample and a filtered noise source. Normally you'd hit
 "calculate noise mask" with only hte noise turned on \, then turn both
 the noise and the sampler on \, and also "masking" \, to see if the
@@ -320,11 +319,35 @@ patch can clean the noise out of the signal. Open the "fft-analysis"
 window to see the algorithm \, or the "insample" window to change samples
 \, or "mask-table" to see the current mask (the average signal power
 of the noise to clean out of the signal).;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header denoiser 20 10 1
+18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 478 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION denoiser;
+#X restore 392 480 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 denoiser- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 480 pd References;
+#X obj 6 480 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 6 0;
-#X connect 1 0 13 0;
-#X connect 2 0 16 0;
-#X connect 2 0 16 1;
-#X connect 7 0 13 1;
-#X connect 12 0 0 0;
-#X connect 13 0 2 0;
-#X connect 18 0 0 0;
+#X connect 1 0 12 0;
+#X connect 2 0 15 0;
+#X connect 2 0 15 1;
+#X connect 7 0 12 1;
+#X connect 11 0 0 0;
+#X connect 12 0 2 0;
+#X connect 17 0 0 0;
diff --git a/pd/doc/3.audio.examples/I05.compressor.pd b/pd/doc/3.audio.examples/I05.compressor.pd
index 1acfb624c..f4882ae78 100644
--- a/pd/doc/3.audio.examples/I05.compressor.pd
+++ b/pd/doc/3.audio.examples/I05.compressor.pd
@@ -1,4 +1,4 @@
-#N canvas 557 371 620 428 12;
+#N canvas 433 145 448 416 10;
 #N canvas 297 254 646 523 fft-analysis 0;
 #X obj 115 409 *~;
 #X obj 75 409 *~;
@@ -62,9 +62,9 @@ set 10;
 #X connect 18 0 19 0;
 #X connect 19 0 12 0;
 #X connect 20 0 5 1;
-#X restore 42 330 pd fft-analysis;
-#X floatatom 57 196 0 0 500 0 - squelch-set -;
-#X obj 57 220 s squelch;
+#X restore 21 300 pd fft-analysis;
+#X floatatom 22 139 0 0 500 0 - squelch-set -;
+#X obj 22 163 s squelch;
 #N canvas 240 72 427 657 test-signal 0;
 #X obj 90 444 line~;
 #X obj 90 369 f;
@@ -114,12 +114,12 @@ set 10;
 #X connect 19 0 17 0;
 #X connect 20 0 12 0;
 #X connect 21 0 11 0;
-#X restore 43 303 pd test-signal;
-#X obj 43 359 output~;
+#X restore 22 273 pd test-signal;
+#X obj 22 329 output~;
 #N canvas 388 86 722 350 insample 0;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-sample 155948 float 0;
-#X coords 0 1 155947 -1 400 150 1;
+#X coords 0 1 155948 -1 400 150 1;
 #X restore 259 24 graph;
 #X obj 19 23 r read-sample;
 #X obj 19 74 unpack s f;
@@ -156,31 +156,28 @@ set 10;
 #X connect 15 0 16 0;
 #X connect 16 0 17 0;
 #X connect 18 0 15 1;
-#X restore 223 313 pd insample;
-#X text 362 406 updated for Pd version 0.39;
-#X text 56 43 Here we divide each complex channel in the Fourier analysis
+#X restore 173 304 pd insample;
+#X text 20 46 Here we divide each complex channel in the Fourier analysis
 by its own magnitude to "flatten" the spectrum. The "squelch" control
 limits the amplitude boost the algorithm will apply. If infinite \,
 you'll get a white spectrum. If less \, the louder parts of the spectrum
 will be flattened but the quieter ones will only be boosted by the
 squelch value.;
-#X text 73 6 DYNAMIC RANGE COMPRESSION BY FOURIER ANALYSIS CHANNEL
-;
-#X floatatom 223 366 5 0 0 0 - #0-samp-msec -;
-#X obj 43 282 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X floatatom 173 357 5 0 0 0 - #0-samp-msec -, f 5;
+#X obj 22 252 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 62 281 <- record;
-#X text 276 365 sample length \, msec;
-#X msg 292 183 ../sound/bell.aiff;
-#X msg 292 208 ../sound/voice.wav;
-#X msg 292 233 ../sound/voice2.wav;
-#X text 91 197 <- squelch;
-#X text 295 161 change input sound;
-#X obj 292 259 s read-sample;
+#X text 41 251 <- record;
+#X text 212 356 sample length \, msec;
+#X msg 172 161 ../sound/bell.aiff;
+#X msg 172 186 ../sound/voice.wav;
+#X msg 172 211 ../sound/voice2.wav;
+#X text 48 139 <- squelch;
+#X text 175 139 change input sound;
+#X obj 172 237 s read-sample;
 #N canvas 0 110 565 454 hann-window 0;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-hann 1024 float 0;
-#X coords 0 1 1023 0 300 100 1;
+#X coords 0 1 1024 0 300 100 1;
 #X restore 82 311 graph;
 #X obj 378 165 osc~;
 #X obj 378 190 *~ -0.5;
@@ -226,12 +223,38 @@ and window-msec (analysis window size in seconds and msec).;
 #X connect 19 0 1 0;
 #X connect 19 1 4 0;
 #X connect 19 1 18 0;
-#X restore 223 335 pd hann-window;
+#X restore 173 326 pd hann-window;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header dynamic_range_compression...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 82 26 ... by Fourier analysis channel;
+#X obj 1 394 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION dynamic range compression;
+#X restore 392 396 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 dynamic range compression- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 396 pd References;
+#X obj 6 396 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 4 0;
 #X connect 0 0 4 1;
 #X connect 1 0 2 0;
 #X connect 3 0 0 0;
-#X connect 10 0 3 0;
-#X connect 13 0 18 0;
-#X connect 14 0 18 0;
-#X connect 15 0 18 0;
+#X connect 8 0 3 0;
+#X connect 11 0 16 0;
+#X connect 12 0 16 0;
+#X connect 13 0 16 0;
diff --git a/pd/doc/3.audio.examples/I06.timbre.stamp.pd b/pd/doc/3.audio.examples/I06.timbre.stamp.pd
index 16890499a..dd2d663b6 100644
--- a/pd/doc/3.audio.examples/I06.timbre.stamp.pd
+++ b/pd/doc/3.audio.examples/I06.timbre.stamp.pd
@@ -1,4 +1,4 @@
-#N canvas 72 0 668 530 12;
+#N canvas 433 119 448 494 10;
 #N canvas 147 0 795 617 fft-analysis 0;
 #X obj 94 511 *~;
 #X obj 55 511 *~;
@@ -88,30 +88,29 @@ with the filter input.);
 #X connect 28 0 26 1;
 #X connect 29 0 18 0;
 #X connect 30 0 16 1;
-#X restore 86 444 pd fft-analysis;
-#X text 137 12 CORT&ZACK's SECRET;
-#X text 27 422 filter;
-#X text 29 437 input;
-#X text 232 441 source;
-#X text 233 422 control;
-#X floatatom 53 300 0 0 500 0 - squelch-set -;
-#X obj 53 324 s squelch;
-#X obj 86 468 output~;
-#X msg 157 278 ../sound/bell.aiff;
-#X msg 157 303 ../sound/voice.wav;
-#X msg 157 328 ../sound/voice2.wav;
-#X obj 157 354 s read-sound1;
-#X msg 373 280 ../sound/bell.aiff;
-#X msg 373 305 ../sound/voice.wav;
-#X msg 373 330 ../sound/voice2.wav;
-#X obj 373 355 s read-sound2;
-#X text 386 256 control source;
-#X text 169 255 filter input;
-#X text 255 231 change input sounds;
-#X floatatom 454 409 5 0 0 0 - #0-samp-msec -;
-#X obj 87 394 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 57 384 pd fft-analysis;
+#X text 12 362 filter;
+#X text 14 377 input;
+#X text 170 381 source;
+#X text 171 362 control;
+#X floatatom 22 210 0 0 500 0 - squelch-set -;
+#X obj 22 234 s squelch;
+#X obj 57 408 output~;
+#X msg 137 218 ../sound/bell.aiff;
+#X msg 137 243 ../sound/voice.wav;
+#X msg 137 268 ../sound/voice2.wav;
+#X obj 137 294 s read-sound1;
+#X msg 303 218 ../sound/bell.aiff;
+#X msg 303 243 ../sound/voice.wav;
+#X msg 303 268 ../sound/voice2.wav;
+#X obj 303 294 s read-sound2;
+#X text 316 196 control source;
+#X text 156 196 filter input;
+#X text 215 171 change input sounds;
+#X floatatom 312 349 5 0 0 0 - #0-samp-msec -, f 5;
+#X obj 58 334 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 215 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 156 335 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
 #N canvas 190 43 661 593 test-signals 0;
 #X obj 90 444 line~;
@@ -209,8 +208,8 @@ with the filter input.);
 #X connect 42 0 35 0;
 #X connect 43 0 34 0;
 #X connect 44 0 30 0;
-#X restore 87 415 pd test-signals;
-#X text 104 393 <- record ->;
+#X restore 58 355 pd test-signals;
+#X text 75 333 <- record ->;
 #N canvas 388 86 722 350 insample2 0;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-sample2 62079 float 0;
@@ -251,8 +250,8 @@ with the filter input.);
 #X connect 12 0 9 0;
 #X connect 14 0 6 1;
 #X connect 16 0 10 1;
-#X restore 334 430 pd insample2;
-#N canvas 388 86 722 350 insample1 0;
+#X restore 222 370 pd insample2;
+#N canvas 302 86 722 350 insample1 0;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-sample 155948 float 0;
 #X coords 0 1 155947 -1 400 150 1;
@@ -292,12 +291,12 @@ with the filter input.);
 #X connect 14 0 15 0;
 #X connect 16 0 13 1;
 #X connect 17 0 10 0;
-#X restore 334 408 pd insample1;
-#X floatatom 453 432 5 0 0 0 - #0-samp2-msec -;
+#X restore 222 348 pd insample1;
+#X floatatom 311 372 5 0 0 0 - #0-samp2-msec -, f 5;
 #N canvas 0 110 565 454 hann-window 0;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-hann 1024 float 0;
-#X coords 0 1 1023 0 300 100 1;
+#X coords 0 1 1024 0 300 100 1;
 #X restore 82 311 graph;
 #X obj 378 165 osc~;
 #X obj 378 190 *~ -0.5;
@@ -343,10 +342,10 @@ and window-msec (analysis window size in seconds and msec).;
 #X connect 19 0 1 0;
 #X connect 19 1 4 0;
 #X connect 19 1 18 0;
-#X restore 334 455 pd hann-window;
-#X text 509 412 sample lengths \,;
-#X text 510 427 msec;
-#X text 27 35 This is a Fourier-based "vocoder" (perhaps better called
+#X restore 222 395 pd hann-window;
+#X text 351 352 sample lengths \,;
+#X text 352 367 msec;
+#X text 19 36 This is a Fourier-based "vocoder" (perhaps better called
 a "timbre stamp") like the one the Convolution brothers use. The "control
 source" is analyzed to get its spectral envelope \, which is then stamped
 onto the "filter input" by adjusting the amplitudes of its Fourier
@@ -354,17 +353,41 @@ transform. The "filter input" is first whitened by the compression
 algorithm from the previous patch in this series. The best value of
 "squelch" to use depends critically on what kind of sounds are used
 for the filter input and the control source.;
-#X text 402 498 updated for Pd version 0.39;
-#X connect 0 0 8 0;
-#X connect 0 0 8 1;
-#X connect 6 0 7 0;
-#X connect 9 0 12 0;
-#X connect 10 0 12 0;
-#X connect 11 0 12 0;
-#X connect 13 0 16 0;
-#X connect 14 0 16 0;
-#X connect 15 0 16 0;
-#X connect 21 0 23 0;
-#X connect 22 0 23 1;
-#X connect 23 0 0 0;
-#X connect 23 1 0 1;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header Cort_&_Zack's_secret
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 472 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION Cort and Zack's secret;
+#X restore 392 474 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Cort and Zack's secret- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 474 pd References;
+#X obj 6 474 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 7 0;
+#X connect 0 0 7 1;
+#X connect 5 0 6 0;
+#X connect 8 0 11 0;
+#X connect 9 0 11 0;
+#X connect 10 0 11 0;
+#X connect 12 0 15 0;
+#X connect 13 0 15 0;
+#X connect 14 0 15 0;
+#X connect 20 0 22 0;
+#X connect 21 0 22 1;
+#X connect 22 0 0 0;
+#X connect 22 1 0 1;
diff --git a/pd/doc/3.audio.examples/I07.phase.vocoder.pd b/pd/doc/3.audio.examples/I07.phase.vocoder.pd
index 735b8cd2e..6c07ad4b4 100644
--- a/pd/doc/3.audio.examples/I07.phase.vocoder.pd
+++ b/pd/doc/3.audio.examples/I07.phase.vocoder.pd
@@ -1,8 +1,8 @@
-#N canvas 425 33 744 599 12;
-#X floatatom 494 315 5 0 0 0 - transpo-set -;
-#X floatatom 167 383 3 0 0 0 - speed-set -;
-#X floatatom 55 385 7 0 0 0 - location-set -;
-#N canvas 90 42 821 693 fft-analysis 0;
+#N canvas 433 82 448 604 10;
+#X floatatom 346 251 5 0 0 0 - transpo-set -, f 5;
+#X floatatom 101 295 3 0 0 0 - speed-set -, f 3;
+#X floatatom 22 295 7 0 0 0 - location-set -, f 7;
+#N canvas 196 2 821 693 fft-analysis 0;
 #X obj 51 477 *~;
 #X obj 18 477 *~;
 #X obj 18 499 -~;
@@ -37,9 +37,9 @@
 bang;
 #X msg 426 619 set \$1 4;
 #X obj 97 425 q8_rsqrt~;
-#N canvas 139 105 1006 799 read-windows 0;
+#N canvas 10 0 1008 700 read-windows 0;
 #X obj 18 693 *~;
-#X obj 340 448 r window-size;
+#X obj 364 448 r window-size;
 #X obj 156 300 f;
 #X obj 102 91 r window-size;
 #X obj 102 139 /;
@@ -60,14 +60,14 @@ bang;
 #X text 188 394 reading location (samples);
 #X obj 51 597 / 4;
 #X obj 288 245 * 0.01;
-#X floatatom 340 498 7 0 0 0 - - -;
-#X obj 340 474 *;
-#X obj 499 365 r transpo;
-#X obj 499 387 * 0.01;
-#X obj 501 408 + 69;
-#X obj 502 429 mtof;
-#X obj 502 451 / 440;
-#X obj 375 474 t b f;
+#X floatatom 364 498 7 0 0 0 - - -, f 7;
+#X obj 364 474 *;
+#X obj 502 347 r transpo;
+#X obj 502 369 * 0.01;
+#X obj 504 390 + 69;
+#X obj 505 411 mtof;
+#X obj 505 433 / 440;
+#X obj 399 474 t b f;
 #X obj 19 719 outlet~;
 #X obj 195 720 outlet~;
 #X obj 218 664 tabreceive~ \$0-hann;
@@ -77,7 +77,7 @@ bang;
 #X obj 768 508 r speed;
 #X msg 768 532 set \$1;
 #X obj 768 557 s speed-set;
-#X text 411 498 stretched window size (samples);
+#X text 432 498 stretched window size (samples);
 #X obj 877 507 r transpo;
 #X msg 877 533 set \$1;
 #X obj 877 558 s transpo-set;
@@ -96,7 +96,7 @@ bang;
 #X obj 178 347 r \$0-insamprate;
 #X obj 528 586 r rewind;
 #X msg 528 744 \; location \$1;
-#X floatatom 111 187 5 0 0 0 - - -;
+#X floatatom 111 187 5 0 0 0 - - -, f 5;
 #X obj 102 115 t f b;
 #X obj 142 139 samplerate~;
 #X obj 102 208 / 4;
@@ -123,8 +123,8 @@ by "location". If "speed" is nonzero \, "location" automatically precesses.
 #X obj 845 684 r auto;
 #X obj 730 685 r no-detune;
 #X msg 730 707 \; detune 0;
-#X text 326 275 loop to precess the location according;
-#X text 325 291 to the "speed" parameter.;
+#X text 321 280 loop to precess the location according;
+#X text 320 296 to the "speed" parameter.;
 #X text 611 31 if location changes \, update number box;
 #X text 610 50 in main window via "location-set" \, but;
 #X text 613 69 taking care to limit frequency of updates.;
@@ -136,6 +136,14 @@ by "location". If "speed" is nonzero \, "location" automatically precesses.
 #X text 496 527 "rewind" control takes us;
 #X text 499 545 to a location depending on;
 #X text 499 564 stretched window size.;
+#X obj 593 457 t b f;
+#X obj 617 395 samplerate~;
+#X obj 593 348 r \$0-insamprate;
+#X obj 593 418 /;
+#X obj 505 455 * 1;
+#X text 494 312 desired transposition and sample;
+#X text 494 329 rate correction for soundfile;
+#X obj 593 370 t f b;
 #X connect 0 0 30 0;
 #X connect 1 0 23 0;
 #X connect 2 0 11 0;
@@ -171,7 +179,7 @@ by "location". If "speed" is nonzero \, "location" automatically precesses.
 #X connect 25 0 26 0;
 #X connect 26 0 27 0;
 #X connect 27 0 28 0;
-#X connect 28 0 29 0;
+#X connect 28 0 99 0;
 #X connect 29 0 23 0;
 #X connect 29 1 23 1;
 #X connect 32 0 5 1;
@@ -216,6 +224,14 @@ by "location". If "speed" is nonzero \, "location" automatically precesses.
 #X connect 77 0 75 0;
 #X connect 79 0 78 0;
 #X connect 80 0 81 0;
+#X connect 95 0 99 0;
+#X connect 95 1 99 1;
+#X connect 96 0 98 1;
+#X connect 97 0 102 0;
+#X connect 98 0 95 0;
+#X connect 99 0 29 0;
+#X connect 102 0 98 0;
+#X connect 102 1 96 0;
 #X restore 109 133 pd read-windows;
 #X obj 137 543 tabsend~ prev-imag;
 #X obj 136 567 tabsend~ prev-real;
@@ -345,26 +361,26 @@ shifts the signal to the left or right depending on its argument.)
 #X connect 54 0 11 0;
 #X connect 54 0 11 1;
 #X connect 54 0 21 0;
-#X restore 55 480 pd fft-analysis;
+#X restore 22 490 pd fft-analysis;
 #N canvas 260 23 647 768 phase-tables 0;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array prev-imag 4096 float 0;
 #X coords 0 1000 4096 -1000 400 300 1;
 #X restore 169 326 graph;
-#N canvas 0 0 450 300 graph3 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array prev-real 4096 float 0;
 #X coords 0 500 4096 -500 400 300 1;
 #X restore 170 17 graph;
-#X restore 440 504 pd phase-tables;
-#X obj 494 338 s transpo;
-#X text 164 364 hundredths;
-#X text 493 294 in cents;
-#X text 389 359 normal;
-#X obj 56 517 output~;
+#X restore 170 436 pd phase-tables;
+#X obj 346 274 s transpo;
+#X text 98 274 hundredths;
+#X text 345 230 in cents;
+#X text 269 270 normal;
+#X obj 23 517 output~;
 #N canvas 0 110 565 454 hann-window 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-hann 1024 float 0;
-#X coords 0 1 1023 0 300 100 1;
+#X coords 0 1 1024 0 300 100 1;
 #X restore 82 311 graph;
 #X obj 378 165 osc~;
 #X obj 378 190 *~ -0.5;
@@ -410,11 +426,11 @@ and window-msec (analysis window size in seconds and msec).;
 #X connect 19 0 1 0;
 #X connect 19 1 4 0;
 #X connect 19 1 18 0;
-#X restore 440 528 pd hann-window;
+#X restore 170 460 pd hann-window;
 #N canvas 388 86 694 447 insample 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array \$0-sample 160161 float 0;
-#X coords 0 1 160160 -1 400 150 1;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-sample 82301 float 0;
+#X coords 0 1 82300 -1 400 150 1;
 #X restore 281 135 graph;
 #X obj 28 133 r read-sample;
 #X obj 28 184 unpack s f;
@@ -433,12 +449,12 @@ and window-msec (analysis window size in seconds and msec).;
 #X obj 28 381 * 1000;
 #X obj 28 404 s \$0-samp-msec;
 #X obj 66 357 r \$0-insamprate;
-#X obj 29 70 hip~ 5;
-#X obj 29 46 adc~ 1;
+#X obj 37 68 hip~ 5;
+#X obj 37 44 adc~ 1;
 #X obj 29 9 inlet;
-#X obj 91 46 samplerate~;
+#X obj 99 44 samplerate~;
 #X obj 29 93 tabwrite~ \$0-sample;
-#X obj 91 70 s \$0-insamprate;
+#X obj 99 68 s \$0-insamprate;
 #X msg 285 383 \; read-sample ../sound/voice.wav;
 #X obj 276 20 inlet;
 #X obj 276 42 openpanel;
@@ -463,53 +479,50 @@ and window-msec (analysis window size in seconds and msec).;
 #X connect 18 0 22 0;
 #X connect 19 0 18 0;
 #X connect 20 0 21 0;
-#X connect 20 0 19 0;
+#X connect 20 0 22 0;
 #X connect 21 0 23 0;
 #X connect 25 0 26 0;
 #X connect 26 0 27 0;
-#X restore 441 480 pd insample;
-#X floatatom 552 480 5 0 0 0 - #0-samp-msec -;
-#X msg 229 486 ../sound/bell.aiff;
-#X msg 229 511 ../sound/voice.wav;
-#X msg 229 536 ../sound/voice2.wav;
-#X obj 229 562 s read-sample;
-#X obj 441 439 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 171 412 pd insample;
+#X floatatom 247 412 5 0 0 0 - #0-samp-msec -, f 5;
+#X msg 22 384 ../sound/bell.aiff;
+#X msg 22 409 ../sound/voice.wav;
+#X msg 22 434 ../sound/voice2.wav;
+#X obj 22 460 s read-sample;
+#X obj 171 371 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 460 438 <- record;
-#X obj 493 387 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+#X text 190 370 <- record;
+#X obj 346 330 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X obj 55 407 s location;
-#X obj 167 407 s speed;
-#X obj 262 386 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 22 317 s location;
+#X obj 101 317 s speed;
+#X obj 171 296 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 262 408 s rewind;
-#X msg 345 336 200;
-#X msg 345 358 100;
-#X msg 345 380 20;
-#X text 386 335 contract;
-#X text 390 380 expand;
-#X obj 493 407 s lock;
-#X text 494 277 detune;
-#X text 55 330 location;
-#X text 52 346 (stops;
-#X text 57 361 motion);
-#X text 165 348 motion in;
-#X text 232 464 read input sound;
-#X text 103 7 PHASE VOCODER FOR TIME STETCHING AND CONTRACTION;
-#X text 604 479 length \, msec;
-#X floatatom 607 419 5 0 0 0 - window-size -;
-#X msg 607 307 512;
-#X msg 607 329 1024;
-#X msg 607 351 2048;
-#X msg 607 373 4096;
-#X obj 607 395 s window-size;
-#X text 607 274 window size \,;
-#X text 607 289 samples;
-#X text 648 306 <- set;
-#X text 100 306 ------- location controls -------;
-#X text 660 419 (check);
-#X obj 345 407 s auto;
-#X text 23 35 This patch takes a sound \, analyzes windows in it both
+#X obj 171 318 s rewind;
+#X msg 236 247 200;
+#X msg 236 269 100;
+#X text 266 246 contract;
+#X text 270 291 expand;
+#X obj 346 350 s lock;
+#X text 345 215 detune;
+#X text 22 240 location;
+#X text 19 256 (stops;
+#X text 24 271 motion);
+#X text 99 258 motion in;
+#X text 25 362 read input sound;
+#X floatatom 346 524 5 0 0 0 - window-size -, f 5;
+#X msg 346 412 512;
+#X msg 346 434 1024;
+#X msg 346 456 2048;
+#X msg 346 478 4096;
+#X obj 346 500 s window-size;
+#X text 343 376 window size \,;
+#X text 343 391 samples;
+#X text 377 411 <- set;
+#X text 43 216 ------- location controls -------;
+#X text 381 524 (check);
+#X obj 236 318 s auto;
+#X text 19 46 This patch takes a sound \, analyzes windows in it both
 for channel magnitude and for phase precession in each channel (compared
 to another operlapping window). The real-time output recreates the
 same magnitudes and phase precession \, althought the phases themselves
@@ -521,12 +534,41 @@ boxes - the number box is for readout). The "lock" feature forces phase
 coherency between neighboring channels \, which makes a more present
 sound but can add artifacts to the sound. Look in "pd fft-analysis"
 to see the workings.;
-#X text 483 568 updated for Pd version 0.39;
-#X obj 551 316 bng 15 250 50 0 no-detune empty empty 0 -6 0 8 -262144
+#X obj 346 301 bng 15 250 50 0 no-detune empty empty 0 -6 0 8 -262144
 -1 -1;
-#X obj 535 460 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 234 392 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 466 458 file ->;
+#X text 185 390 file ->;
+#X msg 236 291 20;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header phase_vocoder...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 99 26 ... for time stretching and contraction;
+#X text 364 300 no detune;
+#X text 286 426 (msec);
+#X text 285 411 length;
+#X obj 1 582 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION phase vocoder;
+#X restore 392 584 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 phase vocoder- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 584 pd References;
+#X obj 6 584 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 5 0;
 #X connect 1 0 21 0;
 #X connect 2 0 20 0;
@@ -536,13 +578,13 @@ to see the workings.;
 #X connect 14 0 16 0;
 #X connect 15 0 16 0;
 #X connect 17 0 11 0;
-#X connect 19 0 29 0;
+#X connect 19 0 28 0;
 #X connect 22 0 23 0;
-#X connect 24 0 49 0;
-#X connect 25 0 49 0;
-#X connect 26 0 49 0;
-#X connect 39 0 43 0;
-#X connect 40 0 43 0;
-#X connect 41 0 43 0;
-#X connect 42 0 43 0;
-#X connect 53 0 11 1;
+#X connect 24 0 46 0;
+#X connect 25 0 46 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 40 0;
+#X connect 39 0 40 0;
+#X connect 49 0 11 1;
+#X connect 51 0 46 0;
diff --git a/pd/doc/3.audio.examples/I08.pvoc.reverb.pd b/pd/doc/3.audio.examples/I08.pvoc.reverb.pd
index 6898c2165..b9b620c87 100644
--- a/pd/doc/3.audio.examples/I08.pvoc.reverb.pd
+++ b/pd/doc/3.audio.examples/I08.pvoc.reverb.pd
@@ -1,4 +1,4 @@
-#N canvas 502 83 570 415 12;
+#N canvas 433 147 448 409 10;
 #N canvas 105 328 986 609 fft 0;
 #X obj 18 500 *~;
 #X obj 291 455 *~;
@@ -282,17 +282,16 @@ and phase;
 #X connect 57 0 12 0;
 #X connect 57 0 12 1;
 #X connect 57 0 28 3;
-#X restore 141 301 pd fft;
-#X floatatom 377 233 0 0 1000 0 - revtime-set -;
-#X floatatom 68 239 0 0 0 0 - - -;
-#X text 131 9 PIANO REVERB;
-#X text 418 236 reverb time;
-#X obj 141 331 output~;
-#X obj 36 333 output~;
-#X text 23 25 This is a phase vocoder acting as a reverberator. The
+#X restore 114 275 pd fft;
+#X floatatom 229 211 0 0 1000 0 - revtime-set -;
+#X floatatom 31 211 0 0 0 0 - - -;
+#X text 255 211 reverb time;
+#X obj 114 305 output~;
+#X obj 31 305 output~;
+#X text 19 36 This is a phase vocoder acting as a reverberator. The
 sound is more coherent (less "whispered") than a real room or a standard
 delay-based reverberator.;
-#X text 25 80 The technique is to "punch" the incoming sound into channels
+#X text 19 78 The technique is to "punch" the incoming sound into channels
 where (1) there's a peak \, and (2) the incoming sound drowns out whatever
 might already be there. If the sound already in any channel is louder
 than the input the input for that channel is ignored.;
@@ -327,16 +326,16 @@ than the input the input for that channel is ignored.;
 #X connect 10 0 9 0;
 #X connect 11 0 2 0;
 #X connect 12 0 13 0;
-#X restore 68 266 pd test-sound;
-#X text 56 217 short tone;
-#X obj 377 257 s revtime;
-#X text 24 164 For each window \, the amplitude in each channel is
+#X restore 31 238 pd test-sound;
+#X text 19 189 short tone;
+#X obj 229 235 s revtime;
+#X text 19 142 For each window \, the amplitude in each channel is
 propagated by a constant phase increment and multiplied downward by
 a gain that determines the "reverb time".;
 #N canvas 0 110 565 454 hann-window 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array \$0-hann 4096 float 0;
-#X coords 0 1 4095 0 300 100 1;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-hann 1024 float 0;
+#X coords 0 1 1024 0 300 100 1;
 #X restore 82 311 graph;
 #X obj 378 165 osc~;
 #X obj 378 190 *~ -0.5;
@@ -382,40 +381,64 @@ and window-msec (analysis window size in seconds and msec).;
 #X connect 19 0 1 0;
 #X connect 19 1 4 0;
 #X connect 19 1 18 0;
-#X restore 360 305 pd hann-window;
+#X restore 229 311 pd hann-window;
 #N canvas 52 71 774 520 tables 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-last-real 2048 float 0;
 #X coords 0 500 2048 -500 200 150 1;
 #X restore 103 15 graph;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-last-imag 2048 float 0;
 #X coords 0 500 2048 500 200 150 1;
 #X restore 497 6 graph;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-amp-real 2048 float 0;
 #X coords 0 500 2048 -500 200 150 1;
 #X restore 105 185 graph;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-amp-imag 2048 float 0;
 #X coords 0 500 2048 -500 200 150 1;
 #X restore 501 178 graph;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-inc-real 2048 float 0;
 #X coords 0 1 2048 -1 200 150 1;
 #X restore 105 357 graph;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-inc-imag 2048 float 0;
 #X coords 0 1 2048 -1 200 150 1;
 #X restore 503 342 graph;
-#X restore 360 326 pd tables;
-#X text 307 383 Updated for Pd version 0.39;
-#X text 26 389 reverb in;
-#X text 133 388 reverb out;
-#X connect 0 0 5 0;
-#X connect 0 0 5 1;
-#X connect 1 0 11 0;
-#X connect 2 0 9 0;
-#X connect 9 0 0 0;
-#X connect 9 0 6 0;
-#X connect 9 0 6 1;
+#X restore 229 332 pd tables;
+#X text 32 354 reverb in;
+#X text 116 354 reverb out;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header piano_reverb 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 387 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION piano reverb;
+#X restore 392 389 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 piano reverb- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 389 pd References;
+#X obj 6 389 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 4 0;
+#X connect 0 0 4 1;
+#X connect 1 0 10 0;
+#X connect 2 0 8 0;
+#X connect 8 0 0 0;
+#X connect 8 0 5 0;
+#X connect 8 0 5 1;
diff --git a/pd/doc/3.audio.examples/I09.sheep.from.goats.pd b/pd/doc/3.audio.examples/I09.sheep.from.goats.pd
index 87a779eda..6a929cc69 100644
--- a/pd/doc/3.audio.examples/I09.sheep.from.goats.pd
+++ b/pd/doc/3.audio.examples/I09.sheep.from.goats.pd
@@ -1,4 +1,4 @@
-#N canvas -6 5 609 588 12;
+#N canvas 433 105 448 535 10;
 #N canvas 300 81 867 775 fft-analysis 0;
 #X obj 85 664 *~;
 #X obj 35 712 *~;
@@ -164,14 +164,13 @@
 #X connect 62 0 37 1;
 #X connect 63 0 61 0;
 #X connect 64 0 62 0;
-#X restore 49 410 pd fft-analysis;
-#X floatatom 355 287 0 0 100 0 - - -;
-#X text 138 10 PITCHED/UNPITCHED SEPARATION;
-#X obj 48 443 output~;
-#X floatatom 48 356 0 0 100 0 - - -;
-#X text 105 337 noise;
-#X floatatom 108 356 0 0 100 0 - - -;
-#N canvas 214 193 769 642 test-signal 0;
+#X restore 36 317 pd fft-analysis;
+#X floatatom 254 263 0 0 100 0 - - -;
+#X obj 35 350 output~;
+#X floatatom 35 263 0 0 100 0 - - -;
+#X text 69 243 noise;
+#X floatatom 75 263 0 0 100 0 - - -;
+#N canvas 214 126 769 642 test-signal 0;
 #X obj 75 328 line~;
 #X obj 75 250 f;
 #X obj 517 236 *~;
@@ -239,13 +238,13 @@ amplitude of each in dB.;
 #X connect 30 0 29 0;
 #X connect 32 0 28 0;
 #X connect 33 0 16 0;
-#X restore 48 380 pd test-signal;
-#X text 32 334 sampler;
-#X text 56 314 amplitudes (dB);
+#X restore 35 287 pd test-signal;
+#X text 20 243 sampler;
+#X text 36 224 amplitudes (dB);
 #N canvas 0 110 565 454 hann-window 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-hann 1024 float 0;
-#X coords 0 1 1023 0 300 100 1;
+#X coords 0 1 1024 0 300 100 1;
 #X restore 82 311 graph;
 #X obj 378 165 osc~;
 #X obj 378 190 *~ -0.5;
@@ -291,35 +290,35 @@ and window-msec (analysis window size in seconds and msec).;
 #X connect 19 0 1 0;
 #X connect 19 1 4 0;
 #X connect 19 1 18 0;
-#X restore 457 458 pd hann-window;
+#X restore 35 442 pd hann-window;
 #N canvas 52 71 774 520 tables 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-last-real 2048 float 0;
 #X coords 0 500 2048 -500 200 150 1;
 #X restore 103 15 graph;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-last-imag 2048 float 0;
 #X coords 0 500 2048 500 200 150 1;
 #X restore 497 6 graph;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-precess-real 2048 float 0;
 #X coords 0 500 2048 -500 200 150 1;
 #X restore 105 185 graph;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-precess-imag 2048 float 0;
 #X coords 0 500 2048 -500 200 150 1;
 #X restore 501 178 graph;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-inc-real 2048 float 0;
 #X coords 0 1 2048 -1 200 150 1;
 #X restore 105 357 graph;
-#N canvas 0 0 450 300 graph2 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-inc-imag 2048 float 0;
 #X coords 0 1 2048 -1 200 150 1;
 #X restore 503 342 graph;
-#X restore 457 479 pd tables;
+#X restore 35 463 pd tables;
 #N canvas 388 86 722 350 insample 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-sample 62079 float 0;
 #X coords 0 1 62078 -1 400 150 1;
 #X restore 259 24 graph;
@@ -358,34 +357,32 @@ and window-msec (analysis window size in seconds and msec).;
 #X connect 15 0 16 0;
 #X connect 16 0 17 0;
 #X connect 18 0 15 1;
-#X restore 233 501 pd insample;
-#X msg 233 403 ../sound/bell.aiff;
-#X msg 233 426 ../sound/voice.wav;
-#X msg 233 449 ../sound/voice2.wav;
-#X text 236 383 change input sound;
-#X obj 233 473 s read-sample;
-#X floatatom 233 523 5 0 0 0 - #0-samp-msec -;
-#X text 286 522 sample length \, msec;
-#X floatatom 233 285 0 0 100 0 - - -;
-#X floatatom 169 356 0 0 100 0 - - -;
-#X text 167 336 osc;
-#X msg 471 325 512;
-#X msg 471 346 1024;
-#X msg 471 368 2048;
-#X obj 471 413 s window-size;
-#X msg 471 390 4096;
-#X obj 233 308 s clean;
-#X text 233 331 0=silent;
-#X text 231 351 100=all;
-#X obj 355 310 s dirty;
-#X text 351 331 100=silent;
-#X text 353 348 0=all;
-#X text 354 563 updated for Pd version 0.39;
-#X text 11 212 Two separate thresholds may be adjusted to listen to
+#X restore 291 442 pd insample;
+#X msg 156 393 ../sound/bell.aiff;
+#X msg 156 416 ../sound/voice.wav;
+#X msg 156 439 ../sound/voice2.wav;
+#X text 159 373 change input sound;
+#X obj 156 463 s read-sample;
+#X floatatom 291 464 5 0 0 0 - #0-samp-msec -, f 5;
+#X floatatom 173 263 0 0 100 0 - - -;
+#X floatatom 116 263 0 0 100 0 - - -;
+#X text 114 243 osc;
+#X msg 335 263 512;
+#X msg 335 284 1024;
+#X msg 335 306 2048;
+#X obj 335 351 s window-size;
+#X msg 335 328 4096;
+#X obj 173 286 s clean;
+#X text 173 309 0=silent;
+#X text 173 326 100=all;
+#X obj 254 286 s dirty;
+#X text 251 309 100=silent;
+#X text 251 326 0=all;
+#X text 19 166 Two separate thresholds may be adjusted to listen to
 the "clean" or "dirty" part of the signal. You'll hear anything less
 incoherent than the clean threshold \, OR more incoherent than the
 dirty one.;
-#X text 13 35 This patch applies a very simple coherence test to distinguish
+#X text 20 36 This patch applies a very simple coherence test to distinguish
 between sinusoids and noise in an input signal. It works very imperfectly
 (since noise is random \, no matter what test we place on it it will
 sometimes spoof its way in.) Here we just test that neighboring channels
@@ -394,18 +391,45 @@ main lobe in response to a sinusoid. If any three channels are so arranged
 \, all three are considered as contributing to a sinusoid. To do this
 we make an "incoherence" measure which is zero if the phase relationship
 is perfect and progressively larger otherwise.;
-#X connect 0 0 3 0;
-#X connect 0 0 3 1;
-#X connect 1 0 31 0;
-#X connect 4 0 7 0;
-#X connect 6 0 7 1;
-#X connect 7 0 0 0;
-#X connect 13 0 17 0;
-#X connect 14 0 17 0;
-#X connect 15 0 17 0;
-#X connect 20 0 28 0;
-#X connect 21 0 7 2;
-#X connect 23 0 26 0;
-#X connect 24 0 26 0;
-#X connect 25 0 26 0;
-#X connect 27 0 26 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header pitched/unpitched_separation
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 349 479 (msec);
+#X text 331 464 sample length;
+#X obj 1 513 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION pitched/unpitched separation;
+#X restore 392 515 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 pitched/unpitched separation- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 515 pd References;
+#X obj 6 515 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 2 0;
+#X connect 0 0 2 1;
+#X connect 1 0 29 0;
+#X connect 3 0 6 0;
+#X connect 5 0 6 1;
+#X connect 6 0 0 0;
+#X connect 12 0 16 0;
+#X connect 13 0 16 0;
+#X connect 14 0 16 0;
+#X connect 18 0 26 0;
+#X connect 19 0 6 2;
+#X connect 21 0 24 0;
+#X connect 22 0 24 0;
+#X connect 23 0 24 0;
+#X connect 25 0 24 0;
diff --git a/pd/doc/3.audio.examples/I10.phase.bash.pd b/pd/doc/3.audio.examples/I10.phase.bash.pd
index 4c66f9b7e..a0e5eecd6 100644
--- a/pd/doc/3.audio.examples/I10.phase.bash.pd
+++ b/pd/doc/3.audio.examples/I10.phase.bash.pd
@@ -1,5 +1,5 @@
-#N canvas 165 311 718 552 12;
-#X floatatom 407 323 0 0 0 0 - - -;
+#N canvas 395 91 564 579 10;
+#X floatatom 332 293 0 0 0 0 - - -;
 #N canvas 122 165 801 538 fft 0;
 #X obj 39 153 *~;
 #X obj 7 153 *~;
@@ -98,23 +98,21 @@
 #X connect 33 0 27 0;
 #X connect 34 0 35 0;
 #X connect 35 0 29 0;
-#X restore 22 459 pd fft;
-#X floatatom 586 377 0 0 120 0 - pitch-set -;
-#X floatatom 583 330 0 0 0 0 - specshift-set -;
-#X obj 583 353 s specshift;
-#X obj 407 443 s loco;
-#X obj 586 400 s pitch;
-#X obj 407 346 pack 0 100;
-#X obj 588 453 output~;
-#X text 214 -1 PHASE BASHING;
-#X text 455 515 updated for Pd version 0.39;
-#X floatatom 199 389 5 0 0 0 - #0-samp-msec -;
-#X text 197 403 sample length \, msec;
-#X msg 198 288 ../sound/bell.aiff;
-#X msg 198 313 ../sound/voice.wav;
-#X msg 198 338 ../sound/voice2.wav;
-#X text 201 266 change input sound;
-#X obj 198 364 s read-sample;
+#X restore 22 447 pd fft;
+#X floatatom 458 346 0 0 120 0 - pitch-set -;
+#X floatatom 455 299 0 0 0 0 - specshift-set -;
+#X obj 455 322 s specshift;
+#X obj 332 413 s loco;
+#X obj 458 369 s pitch;
+#X obj 332 316 pack 0 100;
+#X obj 457 422 output~;
+#X floatatom 159 357 5 0 0 0 - #0-samp-msec -, f 5;
+#X text 157 371 sample length \, msec;
+#X msg 158 256 ../sound/bell.aiff;
+#X msg 158 281 ../sound/voice.wav;
+#X msg 158 306 ../sound/voice2.wav;
+#X text 161 234 change input sound;
+#X obj 158 332 s read-sample;
 #N canvas 190 43 657 626 test-signal 0;
 #X obj 88 381 line~;
 #X obj 88 306 f;
@@ -172,13 +170,13 @@
 #X connect 21 0 17 1;
 #X connect 22 0 2 0;
 #X connect 23 0 22 0;
-#X restore 22 436 pd test-signal;
-#X obj 143 417 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 22 424 pd test-signal;
+#X obj 103 404 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
 #N canvas 0 110 565 454 hann-window 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array \$0-hann 2048 float 0;
-#X coords 0 1 2047 0 300 100 1;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-hann 1024 float 0;
+#X coords 0 1 1024 0 300 100 1;
 #X restore 82 311 graph;
 #X obj 378 165 osc~;
 #X obj 378 190 *~ -0.5;
@@ -224,14 +222,14 @@ and window-msec (analysis window size in seconds and msec).;
 #X connect 19 0 1 0;
 #X connect 19 1 4 0;
 #X connect 19 1 18 0;
-#X restore 195 441 pd hann-window;
-#X msg 28 269 512;
-#X msg 28 290 1024;
-#X msg 28 312 2048;
-#X obj 28 357 s window-size;
-#X msg 28 334 4096;
+#X restore 135 446 pd hann-window;
+#X msg 22 239 512;
+#X msg 22 260 1024;
+#X msg 22 282 2048;
+#X obj 22 327 s window-size;
+#X msg 22 304 4096;
 #N canvas 388 86 736 499 insample 0;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-sample 62079 float 0;
 #X coords 0 1 62078 -1 400 150 1;
 #X restore 259 24 graph;
@@ -253,9 +251,9 @@ and window-msec (analysis window size in seconds and msec).;
 #X obj 19 328 s \$0-samp-msec;
 #X obj 57 281 r \$0-insamprate;
 #X msg 38 402 \; read-sample ../sound/voice.wav;
-#N canvas 0 0 450 300 graph1 0;
-#X array \$0-nophase 62079 float 0;
-#X coords 0 1 62078 -1 400 150 1;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-nophase 1 float 0;
+#X coords 0 1 1 -1 400 150 1;
 #X restore 256 185 graph;
 #X msg 376 403 resize \$1;
 #X obj 376 379 r \$0-samplength;
@@ -279,27 +277,27 @@ and window-msec (analysis window size in seconds and msec).;
 #X connect 17 0 14 1;
 #X connect 20 0 22 0;
 #X connect 21 0 20 0;
-#X restore 195 464 pd insample;
-#X obj 22 416 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 135 469 pd insample;
+#X obj 22 404 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 33 384 ---analyze---;
-#X text 20 399 sample;
-#X obj 94 489 tabwrite~ \$0-nophase;
+#X text 31 368 ---analyze---;
+#X text 20 387 sample;
+#X obj 104 492 tabwrite~ \$0-nophase;
 #X obj 21 492 output~;
-#X msg 415 384 0 \, 400 4000;
-#X msg 415 419 0 \, 400 10000;
-#X text 47 18 This patch takes an incoming sound \, does an overlap-2
+#X msg 340 354 0 \, 400 4000;
+#X msg 340 389 0 \, 400 10000;
+#X text 20 36 This patch takes an incoming sound \, does an overlap-2
 FFT analysis of it \, and bashes the phases of the spectra so that
 when regenerated the components will all have zero phase at the middle
 of each window. You can use the windows as waveforms and cross-fade
 them at will without getting phase modulation. This might be useful
 for making synthetic instruments that mimic the spectral variation
 of recorded sounds.;
-#X text 398 305 (hundredths of sec);
-#X text 401 289 location in sample;
-#X text 420 365 normal speed;
-#X text 422 403 slow;
-#X text 458 262 ------ playback -------;
+#X text 323 275 (hundredths of sec);
+#X text 326 259 location in sample;
+#X text 345 335 normal speed;
+#X text 347 373 slow;
+#X text 358 232 ------ playback -------;
 #N canvas 81 424 887 624 playback 0;
 #X obj 101 479 r invblk;
 #X obj 28 499 *~;
@@ -528,42 +526,67 @@ shift;
 #X connect 107 0 108 0;
 #X connect 108 0 112 0;
 #X connect 109 0 106 0;
-#X restore 589 428 pd playback;
-#X text 585 290 spectral shift;
-#X text 583 306 (hundredths of;
-#X text 646 323 octave);
-#X text 126 398 live;
-#X text 45 141 You can save the analyses and needn't be running the
+#X restore 458 397 pd playback;
+#X text 457 259 spectral shift;
+#X text 455 275 (hundredths of;
+#X text 500 292 octave);
+#X text 95 385 live;
+#X text 19 133 You can save the analyses and needn't be running the
 FFT patch to do the resynthesis. You can read a sample \, select window
 size \, and press "sample" to analyze it \, or else analyze a "live"
 input. You'll hear the phase-bashed sample as the analysis runs. You
 can regenerate the sound with specified pitch \, sample location \,
 and spectral shift \, using the "playback" controls.;
-#X text 83 278 analysis;
-#X text 80 264 (redo;
-#X text 83 294 after;
-#X text 84 309 changing;
-#X text 84 325 window;
-#X text 85 339 size);
+#X text 67 248 analysis;
+#X text 64 234 (redo;
+#X text 67 264 after;
+#X text 68 279 changing;
+#X text 68 295 window;
+#X text 69 309 size);
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header phase_bashing 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 557 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION phase bashing;
+#X restore 392 559 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 phase bashing- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 559 pd References;
+#X obj 6 559 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 7 0;
-#X connect 1 0 30 0;
-#X connect 1 0 31 0;
-#X connect 1 0 31 1;
-#X connect 1 1 30 0;
+#X connect 1 0 28 0;
+#X connect 1 0 29 0;
+#X connect 1 0 29 1;
+#X connect 1 1 28 0;
 #X connect 2 0 6 0;
 #X connect 3 0 4 0;
 #X connect 7 0 5 0;
-#X connect 13 0 17 0;
-#X connect 14 0 17 0;
-#X connect 15 0 17 0;
-#X connect 18 0 1 0;
-#X connect 19 0 18 1;
-#X connect 21 0 24 0;
-#X connect 22 0 24 0;
-#X connect 23 0 24 0;
-#X connect 25 0 24 0;
-#X connect 27 0 18 0;
-#X connect 32 0 5 0;
-#X connect 33 0 5 0;
-#X connect 40 0 8 0;
-#X connect 40 0 8 1;
+#X connect 11 0 15 0;
+#X connect 12 0 15 0;
+#X connect 13 0 15 0;
+#X connect 16 0 1 0;
+#X connect 17 0 16 1;
+#X connect 19 0 22 0;
+#X connect 20 0 22 0;
+#X connect 21 0 22 0;
+#X connect 23 0 22 0;
+#X connect 25 0 16 0;
+#X connect 30 0 5 0;
+#X connect 31 0 5 0;
+#X connect 38 0 8 0;
+#X connect 38 0 8 1;
diff --git a/pd/doc/3.audio.examples/J01.even.odd.pd b/pd/doc/3.audio.examples/J01.even.odd.pd
index 18603bb3a..cb0ca26c1 100644
--- a/pd/doc/3.audio.examples/J01.even.odd.pd
+++ b/pd/doc/3.audio.examples/J01.even.odd.pd
@@ -1,66 +1,89 @@
-#N canvas 213 27 782 599 12;
-#X obj 80 156 wrap~;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 368 22 615 581 10;
+#X obj 80 186 wrap~;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-phasor 882 float 0;
 #X coords 0 1.02 882 -1.02 200 130 1;
-#X restore 567 35 graph;
-#X obj 24 57 -~ 0.5;
-#X obj 80 184 -~ 0.5;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 397 65 graph;
+#X obj 24 87 -~ 0.5;
+#X obj 80 214 -~ 0.5;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-sum 882 float 0;
 #X coords 0 1.02 882 -1.02 200 130 1;
-#X restore 567 189 graph;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 397 219 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-difference 882 float 0;
 #X coords 0 1.02 882 -1.02 200 130 1;
-#X restore 566 343 graph;
-#X text 570 475 ---- 0.02 seconds ----;
-#X text 528 567 updated for Pd version 0.39;
-#X obj 22 335 output~;
-#X obj 138 78 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 396 373 graph;
+#X text 430 505 ---- 0.02 seconds ----;
+#X obj 22 365 output~;
+#X obj 138 108 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 29 270 output~;
-#X text 41 -1 Splitting a sawtooth wave into even and odd harmonics
-;
-#X obj 24 29 phasor~ 100;
-#X text 87 58 remove DC bias;
-#X text 132 29 original sawtooth;
-#X text 144 173 180-degree-out-of-phase;
-#X text 147 188 sawtooth;
-#X text 145 212 form the sum and difference;
-#X obj 23 224 +~;
-#X obj 59 223 -~;
-#X text 4 408 This patch splits a sawtooth wave into its even and odd
-harmonics. The wrap~ object is used to make the phased copy. Adding
+#X obj 29 300 output~;
+#X obj 24 59 phasor~ 100;
+#X text 74 87 remove DC bias;
+#X text 102 59 original sawtooth;
+#X text 144 203 180-degree-out-of-phase;
+#X text 147 218 sawtooth;
+#X text 145 242 form the sum and difference;
+#X obj 23 254 +~;
+#X obj 59 253 -~;
+#X text 19 418 This patch splits a sawtooth wave into its even and
+odd harmonics. The wrap~ object is used to make the phased copy. Adding
 and subtracting this to and from the original gives the results shown
 and heard. (Listen to the two outputs separately \, then together.)
 ;
-#X text 102 291 output level;
-#X text 93 367 for sum;
-#X text 95 350 output level;
-#X text 100 308 for difference;
-#X text 157 77 <-- click to graph;
-#X msg 148 97 \; pd dsp 1;
-#X obj 138 247 tabwrite~ \$0-difference;
-#X obj 138 270 tabwrite~ \$0-sum;
-#X obj 138 138 tabwrite~ \$0-phasor;
-#X text 4 491 This is a classic technique for gaining separate control
+#X text 100 319 output level;
+#X text 93 387 for sum;
+#X text 93 372 output level;
+#X text 100 333 for difference;
+#X text 157 107 <-- click to graph;
+#X msg 148 127 \; pd DSP 1;
+#X obj 138 277 tabwrite~ \$0-difference;
+#X obj 138 300 tabwrite~ \$0-sum;
+#X obj 138 168 tabwrite~ \$0-phasor;
+#X text 19 482 This is a classic technique for gaining separate control
 over the even and odd harmonics in a synthetic sound. It can also be
 used conceptually to understand the harmonic content of a square wave
 in terms of that of a sawtooth \, or vice versa.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header splitting_a_sawtooth_wave...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 131 28 ... into even and odd harmonics;
+#X obj 1 559 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION splitting a sawtooth wave;
+#X restore 392 561 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 splitting a sawtooth- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 561 pd References;
+#X obj 6 561 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 3 0;
 #X connect 2 0 0 0;
-#X connect 2 0 18 0;
-#X connect 2 0 19 0;
-#X connect 2 0 29 0;
-#X connect 3 0 18 1;
-#X connect 3 0 19 1;
-#X connect 9 0 26 0;
-#X connect 9 0 27 0;
-#X connect 9 0 28 0;
-#X connect 9 0 29 0;
-#X connect 12 0 2 0;
-#X connect 18 0 8 0;
-#X connect 18 0 28 0;
-#X connect 19 0 10 1;
-#X connect 19 0 27 0;
+#X connect 2 0 16 0;
+#X connect 2 0 17 0;
+#X connect 2 0 27 0;
+#X connect 3 0 16 1;
+#X connect 3 0 17 1;
+#X connect 8 0 24 0;
+#X connect 8 0 25 0;
+#X connect 8 0 26 0;
+#X connect 8 0 27 0;
+#X connect 10 0 2 0;
+#X connect 16 0 7 0;
+#X connect 16 0 26 0;
+#X connect 17 0 9 1;
+#X connect 17 0 25 0;
diff --git a/pd/doc/3.audio.examples/J02.trapezoids.pd b/pd/doc/3.audio.examples/J02.trapezoids.pd
index 1e7e5d274..d83ba9568 100644
--- a/pd/doc/3.audio.examples/J02.trapezoids.pd
+++ b/pd/doc/3.audio.examples/J02.trapezoids.pd
@@ -1,84 +1,108 @@
-#N canvas 262 74 690 585 12;
-#X obj 137 133 wrap~;
-#X obj 137 155 -~ 0.5;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 376 25 605 568 10;
+#X obj 137 153 wrap~;
+#X obj 137 175 -~ 0.5;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-sum 882 float 0;
 #X coords 0 1.02 881 -1.02 200 130 1;
-#X restore 421 155 graph;
-#X text 420 293 ---- 0.02 seconds ----;
-#X text 427 550 updated for Pd version 0.39;
-#X obj 53 335 output~;
-#X obj 147 369 tabwrite~ \$0-sum;
-#X obj 137 111 -~;
-#X obj 159 70 / 100;
-#X floatatom 159 49 4 -100 100 0 - - -;
-#X obj 158 220 / 100;
-#X floatatom 158 199 4 -100 100 0 - - -;
-#X obj 136 242 *~;
-#X obj 209 134 wrap~;
-#X obj 209 156 -~ 0.5;
-#X obj 209 112 -~;
-#X obj 231 71 / 100;
-#X floatatom 231 50 4 -100 100 0 - - -;
-#X obj 230 221 / 100;
-#X floatatom 230 200 4 -100 100 0 - - -;
-#X obj 208 243 *~;
-#X obj 280 135 wrap~;
-#X obj 280 157 -~ 0.5;
-#X obj 280 113 -~;
-#X obj 302 72 / 100;
-#X floatatom 302 51 4 -100 100 0 - - -;
-#X obj 301 222 / 100;
-#X floatatom 301 201 4 -100 100 0 - - -;
-#X obj 279 244 *~;
-#X text 138 30 -- PHASES (percent) --;
-#X text 164 180 AMPLITUDES (percent);
-#X obj 111 268 +~;
-#X obj 112 294 +~;
-#X text 31 3 Making trapezoidal waves from sawtooth waves;
-#X obj 158 321 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#X restore 391 185 graph;
+#X text 422 318 ---- 0.02 seconds ----;
+#X obj 53 355 output~;
+#X obj 147 389 tabwrite~ \$0-sum;
+#X obj 137 131 -~;
+#X obj 159 90 / 100;
+#X floatatom 159 69 4 -100 100 0 - - -, f 4;
+#X obj 158 240 / 100;
+#X floatatom 158 219 4 -100 100 0 - - -, f 4;
+#X obj 136 262 *~;
+#X obj 209 154 wrap~;
+#X obj 209 176 -~ 0.5;
+#X obj 209 132 -~;
+#X obj 231 91 / 100;
+#X floatatom 231 70 4 -100 100 0 - - -, f 4;
+#X obj 230 241 / 100;
+#X floatatom 230 220 4 -100 100 0 - - -, f 4;
+#X obj 208 263 *~;
+#X obj 280 155 wrap~;
+#X obj 280 177 -~ 0.5;
+#X obj 280 133 -~;
+#X obj 302 92 / 100;
+#X floatatom 302 71 4 -100 100 0 - - -, f 4;
+#X obj 301 242 / 100;
+#X floatatom 301 221 4 -100 100 0 - - -, f 4;
+#X obj 279 264 *~;
+#X text 138 50 -- PHASES (percent) --;
+#X text 164 200 AMPLITUDES (percent);
+#X obj 111 288 +~;
+#X obj 112 314 +~;
+#X obj 158 341 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X obj 25 77 phasor~ 88.2;
-#X obj 158 343 metro 193;
-#X text 4 476 If the amplitudes sum to zero (with negative ones to
-balance positive ones) \, the slope of each linear segment becomes
-zero. Otherrwise \, the segments have just enough slope to make up
-for the three jumps ane get to the same starting value after each cycle..
-;
-#X text 4 408 Here we combine three sawtooth waves with controllable
+#X obj 25 97 phasor~ 88.2;
+#X obj 158 363 metro 193;
+#X text 19 416 Here we combine three sawtooth waves with controllable
 relative phases and amplitudes (in percent \, between -100 and 100.)
 Each sawtooth wave gives rise to one jump (upward or downward) per
 cycle.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header making_trapezoidal_waves...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 131 27 ... from sawtooth waves;
+#X obj 1 546 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION making trapezoidal waves;
+#X restore 392 548 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 trapezoidal waves- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 548 pd References;
+#X obj 6 548 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 18 469 If the amplitudes sum to zero (with negative ones to
+balance positive ones) \, the slope of each linear segment becomes
+zero. Otherrwise \, the segments have just enough slope to make up
+for the three jumps ane get to the same starting value after each cycle.
+;
 #X connect 0 0 1 0;
-#X connect 1 0 12 0;
-#X connect 7 0 0 0;
-#X connect 8 0 7 1;
-#X connect 9 0 8 0;
-#X connect 10 0 12 1;
-#X connect 11 0 10 0;
-#X connect 12 0 31 0;
-#X connect 13 0 14 0;
-#X connect 14 0 20 0;
-#X connect 15 0 13 0;
-#X connect 16 0 15 1;
-#X connect 17 0 16 0;
-#X connect 18 0 20 1;
-#X connect 19 0 18 0;
-#X connect 20 0 31 1;
-#X connect 21 0 22 0;
-#X connect 22 0 28 0;
-#X connect 23 0 21 0;
-#X connect 24 0 23 1;
-#X connect 25 0 24 0;
-#X connect 26 0 28 1;
-#X connect 27 0 26 0;
-#X connect 28 0 32 1;
-#X connect 31 0 32 0;
-#X connect 32 0 6 0;
-#X connect 32 0 5 0;
-#X connect 32 0 5 1;
-#X connect 34 0 36 0;
-#X connect 35 0 7 0;
-#X connect 35 0 15 0;
-#X connect 35 0 23 0;
-#X connect 36 0 6 0;
+#X connect 1 0 11 0;
+#X connect 6 0 0 0;
+#X connect 7 0 6 1;
+#X connect 8 0 7 0;
+#X connect 9 0 11 1;
+#X connect 10 0 9 0;
+#X connect 11 0 30 0;
+#X connect 12 0 13 0;
+#X connect 13 0 19 0;
+#X connect 14 0 12 0;
+#X connect 15 0 14 1;
+#X connect 16 0 15 0;
+#X connect 17 0 19 1;
+#X connect 18 0 17 0;
+#X connect 19 0 30 1;
+#X connect 20 0 21 0;
+#X connect 21 0 27 0;
+#X connect 22 0 20 0;
+#X connect 23 0 22 1;
+#X connect 24 0 23 0;
+#X connect 25 0 27 1;
+#X connect 26 0 25 0;
+#X connect 27 0 31 1;
+#X connect 30 0 31 0;
+#X connect 31 0 5 0;
+#X connect 31 0 4 0;
+#X connect 31 0 4 1;
+#X connect 32 0 34 0;
+#X connect 33 0 6 0;
+#X connect 33 0 14 0;
+#X connect 33 0 22 0;
+#X connect 34 0 5 0;
diff --git a/pd/doc/3.audio.examples/J03.pulse.width.mod.pd b/pd/doc/3.audio.examples/J03.pulse.width.mod.pd
index 06301686b..1af75c3c3 100644
--- a/pd/doc/3.audio.examples/J03.pulse.width.mod.pd
+++ b/pd/doc/3.audio.examples/J03.pulse.width.mod.pd
@@ -1,48 +1,71 @@
-#N canvas 46 315 784 514 12;
-#X floatatom 95 64 0 0 0 0 - - -;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 368 112 644 514 10;
+#X floatatom 33 62 0 0 0 0 - - -;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-difference 882 float 0;
 #X coords 0 1.02 882 -1.02 200 130 1;
-#X restore 565 325 graph;
-#X text 81 39 frequency;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 415 341 graph;
+#X text 19 37 frequency;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-phasor1 882 float 0;
 #X coords 0 1.02 882 -1.02 200 130 1;
-#X restore 565 24 graph;
-#X text 57 9 CLASSICAL PULSE WIDTH MODULATION;
-#X obj 111 156 phasor~ 0;
-#X obj 111 132 + 0.2;
-#X obj 95 206 -~;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 415 40 graph;
+#X obj 49 154 phasor~ 0;
+#X obj 49 130 + 0.2;
+#X obj 33 204 -~;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-phasor2 882 float 0;
 #X coords 0 1.02 882 -1.02 200 130 1;
-#X restore 565 176 graph;
-#X text 24 314 This patch demonstrates pulse width modulation \, which
+#X restore 415 192 graph;
+#X text 24 304 This patch demonstrates pulse width modulation \, which
 is accomplished simply by subtracting two sawtooth waves at a varying
 phase difference. Here their frequencies are set to differ by 1/5 Hz.
 so that the relative phase wanders continuously.;
-#X text 570 457 ---- 0.02 seconds ----;
-#X text 524 487 updated for Pd version 0.39;
-#X obj 96 247 output~;
-#X obj 200 124 tabwrite~ \$0-phasor1;
-#X obj 200 182 tabwrite~ \$0-phasor2;
-#X obj 200 236 tabwrite~ \$0-difference;
-#X obj 95 97 phasor~;
-#X obj 200 82 metro 193;
-#X obj 200 62 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+#X text 420 473 ---- 0.02 seconds ----;
+#X obj 34 245 output~;
+#X obj 138 122 tabwrite~ \$0-phasor1;
+#X obj 138 180 tabwrite~ \$0-phasor2;
+#X obj 138 234 tabwrite~ \$0-difference;
+#X obj 33 95 phasor~;
+#X obj 138 80 metro 193;
+#X obj 138 60 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
 ;
-#X text 219 60 <-- start/stop graphing;
-#X connect 0 0 6 0;
-#X connect 0 0 16 0;
-#X connect 5 0 7 1;
-#X connect 5 0 14 0;
-#X connect 6 0 5 0;
-#X connect 7 0 12 0;
-#X connect 7 0 12 1;
-#X connect 7 0 15 0;
-#X connect 16 0 7 0;
-#X connect 16 0 13 0;
-#X connect 17 0 13 0;
-#X connect 17 0 14 0;
-#X connect 17 0 15 0;
-#X connect 18 0 17 0;
+#X text 157 58 <-- start/stop graphing;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header classical_pulse_width_modulation
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 492 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION classical pulse width modulation;
+#X restore 392 494 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 pulse width modulation- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 494 pd References;
+#X obj 6 494 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 5 0;
+#X connect 0 0 14 0;
+#X connect 4 0 6 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 6 0 10 0;
+#X connect 6 0 10 1;
+#X connect 6 0 13 0;
+#X connect 14 0 6 0;
+#X connect 14 0 11 0;
+#X connect 15 0 11 0;
+#X connect 15 0 12 0;
+#X connect 15 0 13 0;
+#X connect 16 0 15 0;
diff --git a/pd/doc/3.audio.examples/J04.corners.pd b/pd/doc/3.audio.examples/J04.corners.pd
index 72671d3d0..b715e919d 100644
--- a/pd/doc/3.audio.examples/J04.corners.pd
+++ b/pd/doc/3.audio.examples/J04.corners.pd
@@ -1,112 +1,137 @@
-#N canvas 612 -7 619 714 12;
-#X obj 117 132 wrap~;
-#X obj 117 154 -~ 0.5;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 365 19 619 652 10;
+#X obj 117 152 wrap~;
+#X obj 117 174 -~ 0.5;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-sum 882 float 0;
 #X coords 0 0.25 881 -0.25 200 130 1;
-#X restore 411 70 graph;
-#X text 410 208 ---- 0.02 seconds ----;
-#X text 354 676 updated for Pd version 0.39;
-#X obj 33 427 output~;
-#X obj 127 461 tabwrite~ \$0-sum;
-#X obj 117 110 -~;
-#X obj 139 69 / 100;
-#X floatatom 139 48 4 -100 100 0 - - -;
-#X obj 138 312 / 100;
-#X floatatom 138 291 4 -100 100 0 - - -;
-#X obj 116 334 *~;
-#X obj 203 133 wrap~;
-#X obj 203 155 -~ 0.5;
-#X obj 203 111 -~;
-#X obj 225 70 / 100;
-#X floatatom 225 49 4 -100 100 0 - - -;
-#X obj 225 313 / 100;
-#X floatatom 225 292 4 -100 100 0 - - -;
-#X obj 203 335 *~;
-#X obj 290 134 wrap~;
-#X obj 290 156 -~ 0.5;
-#X obj 290 112 -~;
-#X obj 311 71 / 100;
-#X floatatom 311 50 4 -100 100 0 - - -;
-#X obj 313 314 / 100;
-#X floatatom 313 293 4 -100 100 0 - - -;
-#X obj 291 336 *~;
-#X text 129 26 -- PHASES (percent) --;
-#X text 140 267 AMPLITUDES (percent);
-#X obj 91 360 +~;
-#X obj 92 386 +~;
-#X obj 138 413 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#X restore 411 90 graph;
+#X text 410 228 ---- 0.02 seconds ----;
+#X obj 33 447 output~;
+#X obj 118 474 tabwrite~ \$0-sum;
+#X obj 117 130 -~;
+#X obj 139 89 / 100;
+#X floatatom 139 68 4 -100 100 0 - - -, f 4;
+#X obj 138 332 / 100;
+#X floatatom 138 311 4 -100 100 0 - - -, f 4;
+#X obj 116 354 *~;
+#X obj 203 153 wrap~;
+#X obj 203 175 -~ 0.5;
+#X obj 203 131 -~;
+#X obj 225 90 / 100;
+#X floatatom 225 69 4 -100 100 0 - - -, f 4;
+#X obj 225 333 / 100;
+#X floatatom 225 312 4 -100 100 0 - - -, f 4;
+#X obj 203 355 *~;
+#X obj 290 154 wrap~;
+#X obj 290 176 -~ 0.5;
+#X obj 290 132 -~;
+#X obj 311 91 / 100;
+#X floatatom 311 70 4 -100 100 0 - - -, f 4;
+#X obj 313 334 / 100;
+#X floatatom 313 313 4 -100 100 0 - - -, f 4;
+#X obj 291 356 *~;
+#X text 129 46 -- PHASES (percent) --;
+#X text 140 287 AMPLITUDES (percent);
+#X obj 91 380 +~;
+#X obj 92 406 +~;
+#X obj 129 426 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X obj 138 435 metro 193;
-#X obj 20 80 phasor~;
-#X floatatom 20 59 5 0 0 0 - - -;
-#X text 12 36 frequency;
-#X obj 116 184 *~;
-#X obj 203 184 *~;
-#X obj 290 184 *~;
-#X obj 116 209 *~ 0.5;
-#X obj 116 234 -~ 0.0833;
-#X obj 203 209 *~ 0.5;
-#X obj 290 209 *~ 0.5;
-#X obj 204 234 -~ 0.0833;
-#X obj 291 234 -~ 0.0833;
-#X text 30 3 Making waveforms with corners using parabolic waves;
-#X text 14 499 Here we combine three parabolic waves (in the same way
+#X obj 129 448 metro 193;
+#X obj 20 100 phasor~;
+#X floatatom 20 79 5 0 0 0 - - -, f 5;
+#X text 12 56 frequency;
+#X obj 116 204 *~;
+#X obj 203 204 *~;
+#X obj 290 204 *~;
+#X obj 116 229 *~ 0.5;
+#X obj 116 254 -~ 0.0833;
+#X obj 203 229 *~ 0.5;
+#X obj 290 229 *~ 0.5;
+#X obj 204 254 -~ 0.0833;
+#X obj 291 254 -~ 0.0833;
+#X text 20 507 Here we combine three parabolic waves (in the same way
 as \, two patches ago \, we combined sawtooth waves). The parabolic
 wave is obtained from the sawtooth wave (assuming it runs from -0.5
 to 0.5) by the formula: y=x*x/2 - 1/12. This is normalized so that
 the corner has a slope change of minus one unit per cycle \, and adjusted
 to remove any DC component.;
-#X text 12 593 In general \, the segments of the result will be curved
+#X text 20 582 In general \, the segments of the result will be curved
 \, but if the three magnitudes sum algebraicly to zero \, the segments
 will be linear.;
-#X text 371 67 0.25;
-#X text 362 184 -0.25;
-#X text 14 644 Note the reduced scale of the graph (from -0.25 to 0.25)
+#X text 371 87 0.25;
+#X text 362 204 -0.25;
+#X text 20 624 Note the reduced scale of the graph (from -0.25 to 0.25)
 compared to the previous examples.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header making_waveforms_with_corners...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 37 ...using parabolic waves;
+#X obj 1 668 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 135 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 115 AUTHOR Miller Puckette;
+#X text 12 95 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 155 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION making waveforms with corners using parabolic
+waves;
+#X restore 392 670 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 waveforms with corners- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 670 pd References;
+#X obj 6 670 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 1 0;
-#X connect 1 0 38 0;
-#X connect 1 0 38 1;
-#X connect 7 0 0 0;
-#X connect 8 0 7 1;
-#X connect 9 0 8 0;
-#X connect 10 0 12 1;
-#X connect 11 0 10 0;
-#X connect 12 0 31 0;
-#X connect 13 0 14 0;
-#X connect 14 0 39 0;
-#X connect 14 0 39 1;
-#X connect 15 0 13 0;
-#X connect 16 0 15 1;
-#X connect 17 0 16 0;
-#X connect 18 0 20 1;
-#X connect 19 0 18 0;
-#X connect 20 0 31 1;
-#X connect 21 0 22 0;
-#X connect 22 0 40 0;
-#X connect 22 0 40 1;
-#X connect 23 0 21 0;
-#X connect 24 0 23 1;
-#X connect 25 0 24 0;
-#X connect 26 0 28 1;
-#X connect 27 0 26 0;
-#X connect 28 0 32 1;
-#X connect 31 0 32 0;
-#X connect 32 0 6 0;
-#X connect 32 0 5 0;
-#X connect 32 0 5 1;
-#X connect 33 0 34 0;
+#X connect 1 0 37 0;
+#X connect 1 0 37 1;
+#X connect 6 0 0 0;
+#X connect 7 0 6 1;
+#X connect 8 0 7 0;
+#X connect 9 0 11 1;
+#X connect 10 0 9 0;
+#X connect 11 0 30 0;
+#X connect 12 0 13 0;
+#X connect 13 0 38 0;
+#X connect 13 0 38 1;
+#X connect 14 0 12 0;
+#X connect 15 0 14 1;
+#X connect 16 0 15 0;
+#X connect 17 0 19 1;
+#X connect 18 0 17 0;
+#X connect 19 0 30 1;
+#X connect 20 0 21 0;
+#X connect 21 0 39 0;
+#X connect 21 0 39 1;
+#X connect 22 0 20 0;
+#X connect 23 0 22 1;
+#X connect 24 0 23 0;
+#X connect 25 0 27 1;
+#X connect 26 0 25 0;
+#X connect 27 0 31 1;
+#X connect 30 0 31 0;
+#X connect 31 0 5 0;
+#X connect 31 0 4 0;
+#X connect 31 0 4 1;
+#X connect 32 0 33 0;
+#X connect 33 0 5 0;
 #X connect 34 0 6 0;
-#X connect 35 0 7 0;
-#X connect 35 0 15 0;
-#X connect 35 0 23 0;
-#X connect 36 0 35 0;
-#X connect 38 0 41 0;
+#X connect 34 0 14 0;
+#X connect 34 0 22 0;
+#X connect 35 0 34 0;
+#X connect 37 0 40 0;
+#X connect 38 0 42 0;
 #X connect 39 0 43 0;
-#X connect 40 0 44 0;
-#X connect 41 0 42 0;
-#X connect 42 0 12 0;
+#X connect 40 0 41 0;
+#X connect 41 0 11 0;
+#X connect 42 0 44 0;
 #X connect 43 0 45 0;
-#X connect 44 0 46 0;
-#X connect 45 0 20 0;
-#X connect 46 0 28 0;
+#X connect 44 0 19 0;
+#X connect 45 0 27 0;
diff --git a/pd/doc/3.audio.examples/J05.triangle.pd b/pd/doc/3.audio.examples/J05.triangle.pd
index fda0ef05d..0bd375949 100644
--- a/pd/doc/3.audio.examples/J05.triangle.pd
+++ b/pd/doc/3.audio.examples/J05.triangle.pd
@@ -1,35 +1,32 @@
-#N canvas 111 30 606 531 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 387 37 514 475 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-sum 882 float 0;
 #X coords 0 0.5 881 -0.5 200 130 1;
-#X restore 382 119 graph;
-#X text 381 257 ---- 0.02 seconds ----;
-#X text 350 505 updated for Pd version 0.39;
-#X obj 46 242 output~;
-#X obj 140 276 tabwrite~ \$0-sum;
-#X obj 130 107 / 100;
-#X floatatom 130 86 4 0 100 0 - - -;
-#X obj 206 108 / 100;
-#X floatatom 206 87 4 0 100 0 - - -;
-#X obj 151 228 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#X restore 302 99 graph;
+#X text 331 233 ---- 0.02 seconds ----;
+#X obj 54 246 output~;
+#X obj 149 273 tabwrite~ \$0-sum;
+#X obj 131 102 / 100;
+#X floatatom 131 81 4 0 100 0 - - -, f 4;
+#X obj 207 102 / 100;
+#X floatatom 207 81 4 0 100 0 - - -, f 4;
+#X obj 160 228 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X obj 151 250 metro 193;
-#X obj 19 95 phasor~;
-#X floatatom 19 74 5 0 0 0 - - -;
-#X text 11 51 frequency;
-#X text 126 50 SLOPES (percent);
-#X obj 108 137 *~;
-#X obj 19 129 *~ -1;
-#X obj 19 154 +~ 1;
-#X obj 184 156 *~;
-#X obj 108 189 min~;
-#X text 341 118 0.5;
-#X text 338 237 -0.5;
-#X text 30 4 Making waveforms with corners by specifying line segment
-slopes;
-#X text 136 67 up;
-#X text 209 68 down;
-#X text 29 317 Occasionally a second method for making corners is more
+#X obj 160 250 metro 193;
+#X obj 27 89 phasor~;
+#X floatatom 27 68 5 0 0 0 - - -, f 5;
+#X text 19 45 frequency;
+#X text 134 44 SLOPES (percent);
+#X obj 116 131 *~;
+#X obj 27 120 *~ -1;
+#X obj 27 145 +~ 1;
+#X obj 192 180 *~;
+#X obj 116 213 min~;
+#X text 269 95 0.5;
+#X text 266 216 -0.5;
+#X text 135 61 up;
+#X text 206 61 down;
+#X text 24 310 Occasionally a second method for making corners is more
 convenient. Here we specify the slopes of the rising and falling segments
 (as always \, in units per cycle). We then make a triangle wave with
 a corner at (0 \, 0) and another one \, placed somewhere within the
@@ -39,18 +36,44 @@ and t the falling one \, both as positive numbers). The y value is
 st/(s+t). If we wish instead to specify the corner location (x \, y)
 (with x in cycles \, 0<x<1) we set s = y/x and t = y/(1-x). The DC
 value is y/2.;
-#X connect 5 0 15 1;
-#X connect 6 0 5 0;
-#X connect 7 0 18 1;
-#X connect 8 0 7 0;
-#X connect 9 0 10 0;
-#X connect 10 0 4 0;
-#X connect 11 0 15 0;
-#X connect 11 0 16 0;
-#X connect 12 0 11 0;
-#X connect 15 0 19 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header making_waveforms_with_corners...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 80 23 ... by specifying line segment slopes;
+#X obj 1 453 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION making waveforms with corners;
+#X restore 392 455 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 waveforms with corners- Related Help Documents;
+#X text 19 37 links:;
+#X restore 103 455 pd References;
+#X obj 6 455 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 4 0 14 1;
+#X connect 5 0 4 0;
+#X connect 6 0 17 1;
+#X connect 7 0 6 0;
+#X connect 8 0 9 0;
+#X connect 9 0 3 0;
+#X connect 10 0 14 0;
+#X connect 10 0 15 0;
+#X connect 11 0 10 0;
+#X connect 14 0 18 0;
+#X connect 15 0 16 0;
 #X connect 16 0 17 0;
-#X connect 17 0 18 0;
-#X connect 18 0 19 1;
-#X connect 19 0 3 0;
-#X connect 19 0 4 0;
+#X connect 17 0 18 1;
+#X connect 18 0 2 0;
+#X connect 18 0 3 0;
diff --git a/pd/doc/3.audio.examples/J06.enveloping.pd b/pd/doc/3.audio.examples/J06.enveloping.pd
index 52bae857f..c771371c3 100644
--- a/pd/doc/3.audio.examples/J06.enveloping.pd
+++ b/pd/doc/3.audio.examples/J06.enveloping.pd
@@ -1,64 +1,88 @@
-#N canvas 4 -26 874 736 12;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 328 34 727 584 10;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-waveform 882 float 0;
 #X coords 0 1.02 881 -1.02 200 130 1;
-#X restore 639 379 graph;
-#X floatatom 47 25 0 0 20 0 - - -;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 511 269 graph;
+#X floatatom 47 45 0 0 20 0 - - -;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-env 22050 float 0;
 #X coords 0 1.02 22049 -1.02 200 130 1;
-#X restore 638 189 graph;
-#X obj 47 52 phasor~;
-#X text 126 2 ENVELOPE GENERATORS FROM LINE SEGMENTS;
+#X restore 511 89 graph;
+#X obj 47 67 phasor~;
 #X obj 19 514 output~;
-#X text 610 698 updated for Pd version 0.39;
-#X obj 46 98 *~;
-#X obj 11 165 -~;
-#X obj 10 214 *~;
-#X floatatom 68 75 3 0 100 0 - - -;
-#X obj 16 244 min~;
-#X floatatom 68 123 3 0 100 0 - - -;
-#X obj 68 146 / 100;
-#X floatatom 68 172 3 0 100 0 - - -;
-#X obj 60 386 *~ 2;
-#X obj 60 409 min~;
-#X obj 110 386 -~ 1;
-#X obj 60 358 phasor~ 200;
-#X obj 18 477 *~;
-#X obj 27 326 tabwrite~ \$0-env;
-#X obj 38 306 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 46 113 *~;
+#X obj 11 180 -~;
+#X obj 10 229 *~;
+#X floatatom 61 90 3 0 100 0 - - -, f 3;
+#X obj 16 259 min~;
+#X floatatom 68 138 3 0 100 0 - - -, f 3;
+#X obj 68 161 / 100;
+#X floatatom 68 187 3 0 100 0 - - -, f 3;
+#X obj 60 394 *~ 2;
+#X obj 60 417 min~;
+#X obj 110 394 -~ 1;
+#X obj 60 366 phasor~ 200;
+#X obj 18 485 *~;
+#X obj 27 341 tabwrite~ \$0-env;
+#X obj 38 321 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 68 195 * -1;
-#X obj 69 457 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 68 210 * -1;
+#X obj 69 465 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 61 478 tabwrite~ \$0-waveform;
-#X obj 111 409 *~ -3;
-#X obj 60 432 -~ 0.5;
-#X text 639 514 ----- 0.02 second ----;
-#X text 86 24 <-- frequency (Hz.);
-#X text 636 322 ----- 0.5 second ------;
-#X text 107 72 <-- slope of rise segment. Just multiply this by the
+#X obj 61 486 tabwrite~ \$0-waveform;
+#X obj 111 417 *~ -3;
+#X obj 60 440 -~ 0.5;
+#X text 541 404 ----- 0.02 second ----;
+#X text 86 44 <-- frequency (Hz.);
+#X text 539 222 ----- 0.5 second ------;
+#X text 100 87 <-- slope of rise segment. Just multiply this by the
 phase to make the segment.;
-#X text 129 140 Subtract this to make the phasor cross zero at the
+#X text 132 155 Subtract this to make the phasor cross zero at the
 desired point of the cycle.;
-#X text 107 173 <-- slope of decay segment.;
-#X text 112 190 multiply the phasor (with the zero crossing shifted
+#X text 107 188 <-- slope of decay segment.;
+#X text 112 205 multiply the phasor (with the zero crossing shifted
 as above) by the desired slope \, negating it so the segment points
 downward.;
-#X text 63 244 minimum of rise and decay segments (makes a triangle
+#X text 63 259 minimum of rise and decay segments (makes a triangle
 wave);
-#X obj 17 267 clip~ 0 1;
-#X text 109 266 clip the triangle wave to between 0 and 1 \, to make
+#X obj 17 282 clip~ 0 1;
+#X text 109 281 clip the triangle wave to between 0 and 1 \, to make
 the sustain and silent regions.;
-#X text 108 121 <-- Duty cycle (end of decay segment as % of cycle.)
+#X text 108 136 <-- Duty cycle (end of decay segment as % of cycle.)
 ;
-#X text 60 304 <-- click to graph envelope shape;
-#X text 91 456 <-- click to graph audio waveform;
-#X text 172 364 this makes a quick-and-dirty triangle wave;
-#X text 172 382 as described in the previous patch. It's;
-#X text 172 419 to listen to.;
+#X text 60 319 <-- click to graph envelope shape;
+#X text 91 464 <-- click to graph audio waveform;
+#X text 162 372 this makes a quick-and-dirty triangle wave;
+#X text 162 390 as described in the previous patch. It's;
+#X text 162 427 to listen to.;
+#X text 163 409 used here so we'll have something;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header envelope_generators_from_line_segments
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 677 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION envelope generators from line segments;
+#X restore 392 679 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 envelope generators- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 679 pd References;
+#X obj 6 679 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X text 97 511 You can make a phasor-generated envelope generator using
-"min" and "clip" to combine line segments. Here a rise segment starts
+[min] and [clip] to combine line segments. Here a rise segment starts
 at phase 0 \, and a decay segment passes through zero at a controllable
 point (the "duty cycle" \, as a percentage of a cycle.) Each has a
 controllable slope (in units per cycle). The resulting triangle wave
@@ -68,30 +92,29 @@ meet at a value less than one \, in which case there is none). Limiting
 below by 0 prevents us from following the decay segment into negative
 values. Reasonable values to start with are 6 Hz. frequency \, rise
 and decay slope 10 \, duty cycle 75%.;
-#X text 173 401 used here so we'll have something;
 #X connect 1 0 3 0;
-#X connect 3 0 7 0;
-#X connect 3 0 8 0;
-#X connect 7 0 11 1;
-#X connect 8 0 9 0;
-#X connect 9 0 11 0;
-#X connect 10 0 7 1;
-#X connect 11 0 35 0;
-#X connect 12 0 13 0;
-#X connect 13 0 8 1;
-#X connect 14 0 22 0;
-#X connect 15 0 16 0;
-#X connect 16 0 26 0;
-#X connect 17 0 25 0;
-#X connect 18 0 15 0;
-#X connect 18 0 17 0;
-#X connect 19 0 5 0;
-#X connect 19 0 5 1;
-#X connect 21 0 20 0;
-#X connect 22 0 9 1;
-#X connect 23 0 24 0;
-#X connect 25 0 16 1;
-#X connect 26 0 24 0;
-#X connect 26 0 19 1;
-#X connect 35 0 19 0;
-#X connect 35 0 20 0;
+#X connect 3 0 5 0;
+#X connect 3 0 6 0;
+#X connect 5 0 9 1;
+#X connect 6 0 7 0;
+#X connect 7 0 9 0;
+#X connect 8 0 5 1;
+#X connect 9 0 33 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 1;
+#X connect 12 0 20 0;
+#X connect 13 0 14 0;
+#X connect 14 0 24 0;
+#X connect 15 0 23 0;
+#X connect 16 0 13 0;
+#X connect 16 0 15 0;
+#X connect 17 0 4 0;
+#X connect 17 0 4 1;
+#X connect 19 0 18 0;
+#X connect 20 0 7 1;
+#X connect 21 0 22 0;
+#X connect 23 0 14 1;
+#X connect 24 0 22 0;
+#X connect 24 0 17 1;
+#X connect 33 0 17 0;
+#X connect 33 0 18 0;
diff --git a/pd/doc/3.audio.examples/J07.oversampling.pd b/pd/doc/3.audio.examples/J07.oversampling.pd
index 4c5f3cc81..146c236b3 100644
--- a/pd/doc/3.audio.examples/J07.oversampling.pd
+++ b/pd/doc/3.audio.examples/J07.oversampling.pd
@@ -1,5 +1,5 @@
-#N canvas 378 114 542 534 12;
-#N canvas 371 260 740 538 16x 0;
+#N canvas 433 122 448 484 10;
+#N canvas 284 230 740 538 16x 0;
 #X obj 21 269 *~ 0.125;
 #X obj 21 292 rzero~ -1;
 #X obj 21 315 rzero~ -1;
@@ -12,15 +12,15 @@
 #X obj 20 143 *~ 0.12532;
 #X obj 20 189 *~ 0.01668;
 #X obj 279 358 buttercoef3;
-#X floatatom 279 282 7 0 0 0 - - -;
+#X floatatom 279 282 7 0 0 0 - - -, f 7;
 #X obj 279 332 / 16;
-#X floatatom 279 488 7 0 0 0 - - -;
+#X floatatom 279 488 7 0 0 0 - - -, f 7;
 #X obj 279 307 / 22050;
-#X floatatom 293 468 7 0 0 0 - - -;
-#X floatatom 308 448 7 0 0 0 - - -;
-#X floatatom 323 428 7 0 0 0 - - -;
-#X floatatom 338 408 7 0 0 0 - - -;
-#X floatatom 353 388 7 0 0 0 - - -;
+#X floatatom 293 468 7 0 0 0 - - -, f 7;
+#X floatatom 308 448 7 0 0 0 - - -, f 7;
+#X floatatom 323 428 7 0 0 0 - - -, f 7;
+#X floatatom 338 408 7 0 0 0 - - -, f 7;
+#X floatatom 353 388 7 0 0 0 - - -, f 7;
 #X text 335 489 normalizer for rpole~;
 #X text 352 468 normalizer for cpole~;
 #X text 366 449 coef for rpole~;
@@ -60,32 +60,55 @@ H13.butterworth.pd in this series.;
 #X connect 27 1 28 1;
 #X connect 28 0 0 0;
 #X connect 29 0 12 0;
-#X restore 29 123 pd 16x;
-#X floatatom 29 86 7 0 0 0 - - -;
-#X obj 115 124 phasor~;
-#X obj 28 169 output~;
-#X obj 114 169 output~;
-#X obj 29 58 mtof;
-#X floatatom 29 34 3 -24 135 0 - - -;
-#X text 158 15 UPSAMPLING TO CONTROL FOLDOVER;
-#X text 62 32 <-- pitch;
-#X text 132 225 not;
-#X text 28 240 sampled;
-#X text 32 224 16x up-;
-#X text 26 268 The "pd 16x" subpatch at left contains a phasor~ object
+#X restore 22 131 pd 16x;
+#X floatatom 22 94 7 0 0 0 - - -, f 7;
+#X obj 108 132 phasor~;
+#X obj 22 177 output~;
+#X obj 108 177 output~;
+#X obj 22 66 mtof;
+#X floatatom 22 42 3 -24 135 0 - - -, f 3;
+#X text 47 41 <-- pitch;
+#X text 131 230 not;
+#X text 30 238 sampled;
+#X text 30 225 16x up-;
+#X text 19 263 The "pd 16x" subpatch at left contains a phasor~ object
 \, but is locally upsampled by a factor of sixteen. Without upsampling
 \, partials as low as 24 Khz. fold back over into the audible range.
 With upsampling \, the first audibly folding over partial is at almost
 700 Hz \, 29 times higher. The relevant partials will be 29 times \,
 or almost 30 dB \, quieter when upsampled.;
-#X text 27 378 A third-order Butterworth filter is used inside the
+#X text 19 349 A third-order Butterworth filter is used inside the
 "pd 16x" subpatch - without that \, the internal signal would fold
 over as it gets downsampled at the outlet~ object.;
-#X text 312 507 Updated for Pd version 0.42;
-#X text 26 430 You can trade off cutoff frequency with foldover. Here
+#X text 19 396 You can trade off cutoff frequency with foldover. Here
 \, the filter is set for a cutoff of 15 kHz. Lowering it to 7500 Hz
 would further reduce foldover by 18 dB at the expense of losing energy
 in the range 7500-15000 Hz.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header upsampling_to_control_foldover
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 462 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.42. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION upsampling to control foldover;
+#X restore 392 464 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 oversampling- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 464 pd References;
+#X obj 6 464 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 3 0;
 #X connect 0 0 3 1;
 #X connect 1 0 0 0;
diff --git a/pd/doc/3.audio.examples/J08.classicsynth.pd b/pd/doc/3.audio.examples/J08.classicsynth.pd
index ae9ce754f..dff82d680 100644
--- a/pd/doc/3.audio.examples/J08.classicsynth.pd
+++ b/pd/doc/3.audio.examples/J08.classicsynth.pd
@@ -1,4 +1,4 @@
-#N canvas 203 294 592 528 12;
+#N canvas 433 111 448 519 10;
 #N canvas 158 4 781 654 16x 0;
 #X obj 69 345 *~ 0.064;
 #X obj 69 368 rpole~ 0.93538;
@@ -64,36 +64,34 @@
 #X connect 25 0 26 0;
 #X connect 26 0 15 0;
 #X connect 28 0 27 0;
-#X restore 41 160 pd 16x;
-#X obj 44 255 output~;
-#X text 333 501 Updated for Pd version 0.39;
-#X text 151 7 THE CLASSIC SUBTRACTIVE SYNTH SOUND;
-#X obj 152 132 *~;
-#X obj 151 102 +~ 0.2;
-#X obj 151 156 *~ 2000;
-#X obj 108 221 *~;
-#X obj 43 218 *~;
-#X obj 41 122 mtof;
-#X obj 41 13 r \$0-note;
-#X obj 41 62 makenote 1;
-#X obj 404 150 + 20;
-#X obj 404 102 metro 300;
-#X obj 404 80 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 404 201 s \$0-note;
-#X obj 404 125 random 70;
-#X obj 42 192 vcf~ 3;
-#X floatatom 228 112 3 0 0 0 - - -;
-#X floatatom 228 157 7 0 0 0 - - -;
-#X obj 228 133 mtof;
-#X obj 108 196 adsr 2 30 200 50 500;
-#X obj 151 77 adsr 1 10 200 50 500;
-#X obj 404 175 pack 0 200;
-#X obj 41 92 poly 1 1;
-#X obj 41 36 unpack;
-#X floatatom 480 80 3 0 0 0 - - -;
-#X floatatom 489 154 3 0 0 0 - - -;
-#X text 31 323 Now that we can make reasonably high-quality classic
+#X restore 22 189 pd 16x;
+#X obj 25 284 output~;
+#X obj 133 161 *~;
+#X obj 132 131 +~ 0.2;
+#X obj 132 185 *~ 2000;
+#X obj 89 250 *~;
+#X obj 24 247 *~;
+#X obj 22 151 mtof;
+#X obj 22 42 r \$0-note;
+#X obj 22 91 makenote 1;
+#X obj 344 170 + 20;
+#X obj 344 122 metro 300;
+#X obj 344 100 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 344 221 s \$0-note;
+#X obj 344 145 random 70;
+#X obj 23 221 vcf~ 3;
+#X floatatom 209 141 3 0 0 0 - - -, f 3;
+#X floatatom 209 186 7 0 0 0 - - -, f 7;
+#X obj 209 162 mtof;
+#X obj 89 225 adsr 2 30 200 50 500;
+#X obj 132 106 adsr 1 10 200 50 500;
+#X obj 344 195 pack 0 200;
+#X obj 22 121 poly 1 1;
+#X obj 22 65 unpack;
+#X floatatom 395 100 3 0 0 0 - - -, f 3;
+#X floatatom 401 174 3 0 0 0 - - -, f 3;
+#X text 22 343 Now that we can make reasonably high-quality classic
 waveforms using upsampling \, we combine an upsampled oscillator with
 a "vcf" filter and ADSR generators to control the filter resonant frequency
 and the amplitude to make the classic subtractive synthesis sound.
@@ -102,34 +100,59 @@ Send an "s \$0-note" object a (pitch \, duration) pair to play a note.
 can add controls to change the parameters of the ADSR envelopes and/or
 the vcf~ "Q" parameter. THe oscillators' waveforms and tuning relationship
 is controlled by other parameters set within the "pd 16x" window.;
-#X connect 0 0 17 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 5 0 4 1;
-#X connect 6 0 17 1;
-#X connect 7 0 8 1;
-#X connect 8 0 1 0;
-#X connect 8 0 1 1;
-#X connect 9 0 0 0;
-#X connect 10 0 25 0;
-#X connect 11 0 24 0;
-#X connect 11 1 24 1;
-#X connect 12 0 23 0;
-#X connect 13 0 16 0;
-#X connect 14 0 13 0;
-#X connect 16 0 12 0;
-#X connect 17 0 8 0;
-#X connect 18 0 20 0;
-#X connect 19 0 6 1;
-#X connect 20 0 19 0;
-#X connect 21 0 7 0;
-#X connect 21 0 7 1;
-#X connect 22 0 5 0;
-#X connect 23 0 15 0;
-#X connect 24 1 9 0;
-#X connect 24 2 22 0;
-#X connect 24 2 21 0;
-#X connect 25 0 11 0;
-#X connect 25 1 11 2;
-#X connect 26 0 13 1;
-#X connect 27 0 23 1;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header the_classic_subtractive_synth_sound
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 497 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS signal;
+#X text 12 65 DESCRIPTION the classic subtractive synth sound;
+#X restore 392 499 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 classic subtractive synth- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 499 pd References;
+#X obj 6 499 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 15 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 3 0 2 1;
+#X connect 4 0 15 1;
+#X connect 5 0 6 1;
+#X connect 6 0 1 0;
+#X connect 6 0 1 1;
+#X connect 7 0 0 0;
+#X connect 8 0 23 0;
+#X connect 9 0 22 0;
+#X connect 9 1 22 1;
+#X connect 10 0 21 0;
+#X connect 11 0 14 0;
+#X connect 12 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 6 0;
+#X connect 16 0 18 0;
+#X connect 17 0 4 1;
+#X connect 18 0 17 0;
+#X connect 19 0 5 0;
+#X connect 19 0 5 1;
+#X connect 20 0 3 0;
+#X connect 21 0 13 0;
+#X connect 22 1 7 0;
+#X connect 22 2 20 0;
+#X connect 22 2 19 0;
+#X connect 23 0 9 0;
+#X connect 23 1 9 2;
+#X connect 24 0 11 1;
+#X connect 25 0 21 1;
diff --git a/pd/doc/3.audio.examples/J09.bandlimited.pd b/pd/doc/3.audio.examples/J09.bandlimited.pd
index 38247473e..0ad5a6885 100644
--- a/pd/doc/3.audio.examples/J09.bandlimited.pd
+++ b/pd/doc/3.audio.examples/J09.bandlimited.pd
@@ -1,22 +1,22 @@
-#N canvas 33 1 608 881 12;
-#X floatatom 201 163 0 0 0 0 - - -;
-#X obj 53 387 -~;
-#X obj 201 237 /~;
-#X obj 208 214 clip~ 1 999999;
-#X obj 76 195 phasor~;
-#X obj 88 257 *~;
-#X obj 88 281 clip~ -0.5 0.5;
-#X floatatom 76 147 0 0 0 0 - - -;
-#X floatatom 201 115 0 0 0 0 - - -;
-#X obj 201 139 mtof;
-#X text 208 45 band limit (MIDI units);
-#X obj 201 67 loadbang;
-#X obj 88 305 *~ 1000;
-#X obj 88 329 +~ 501;
-#X obj 76 219 -~ 0.5;
-#X text 219 397 graph output;
-#X obj 76 101 samplerate~;
-#X obj 76 125 / 512;
+#N canvas 392 91 572 577 10;
+#X floatatom 173 170 0 0 0 0 - - -;
+#X obj 34 394 -~;
+#X obj 173 244 /~;
+#X obj 188 221 clip~ 1 999999;
+#X obj 48 202 phasor~;
+#X obj 60 264 *~;
+#X obj 60 288 clip~ -0.5 0.5;
+#X floatatom 48 154 0 0 0 0 - - -;
+#X floatatom 173 122 0 0 0 0 - - -;
+#X obj 173 146 mtof;
+#X text 180 52 band limit (MIDI units);
+#X obj 173 74 loadbang;
+#X obj 60 312 *~ 1000;
+#X obj 60 336 +~ 501;
+#X obj 48 226 -~ 0.5;
+#X text 191 404 graph output;
+#X obj 48 108 samplerate~;
+#X obj 48 132 / 512;
 #N canvas 49 311 450 300 fft 0;
 #X obj 31 41 inlet~;
 #X obj 35 85 rfft~;
@@ -37,60 +37,58 @@
 #X connect 4 0 5 0;
 #X connect 5 0 6 0;
 #X connect 6 0 8 0;
-#X restore 126 423 pd fft;
-#N canvas 0 0 450 300 graph1 0;
+#X restore 107 430 pd fft;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-fft 256 float 3;
-#A 0 8.35364 88.2226 82.204 78.6857 76.1917 74.2598 72.6836 71.3537
-70.204 69.1927 68.2904 67.4768 66.7365 66.0581 65.4323 64.8524 64.3122
-63.8074 63.3336 62.8881 62.4675 62.0699 61.693 61.3352 60.9946 60.6703
-60.3606 60.0649 59.7817 59.5107 59.2506 59.0011 58.7612 58.5307 58.3086
-58.0948 57.8885 57.6896 57.4975 57.3119 57.1324 56.9588 56.7906 56.6279
-56.4699 56.3169 56.1681 56.0239 55.8835 55.7472 55.6144 55.4853 55.3594
-55.2368 55.1171 55.0005 54.8864 54.7751 54.6661 54.5596 54.4552 54.3531
-54.2528 54.1546 54.0581 53.9635 53.8703 53.7788 53.6886 53.5999 53.5124
-53.4262 53.341 53.257 53.1738 53.0917 53.0103 52.9299 52.85 52.771
-52.6924 52.6146 52.537 52.4601 52.3835 52.3073 52.2313 52.1556 52.0801
-52.0048 51.9295 51.8545 51.7793 51.7042 51.629 51.5538 51.4784 51.4029
-51.3271 51.2513 51.175 51.0985 51.0216 50.9444 50.8667 50.7887 50.7102
-50.6312 50.5516 50.4716 50.3909 50.3097 50.2277 50.1452 50.0619 49.978
-49.8932 49.8078 49.7214 49.6344 49.5464 49.4576 49.3678 49.2771 49.1854
-49.0929 48.9992 48.9046 48.8089 48.7121 48.6142 48.5152 48.415 48.3137
-48.2111 48.1073 48.0022 47.8959 47.7882 47.6792 47.5688 47.4571 47.3439
-47.2293 47.1131 46.9956 46.8764 46.7558 46.6334 46.5096 46.384 46.2568
-46.1278 45.9972 45.8646 45.7304 45.5942 45.4563 45.3163 45.1746 45.0306
-44.8849 44.7369 44.5869 44.4347 44.2804 44.1238 43.965 43.8038 43.6404
-43.4744 43.3062 43.1352 42.9619 42.7858 42.6072 42.4257 42.2417 42.0546
-41.8649 41.6719 41.4762 41.2771 41.0752 40.8697 40.6613 40.4491 40.2338
-40.0147 39.7922 39.5657 39.3357 39.1016 38.8637 38.6214 38.3752 38.1243
-37.8694 37.6096 37.3454 37.076 36.8021 36.5227 36.2385 35.9484 35.6533
-35.3519 35.0451 34.7318 34.4127 34.0866 33.7542 33.4145 33.0681 32.7138
-32.3524 31.9824 31.6049 31.2182 30.8233 30.4185 30.0049 29.5806 29.1467
-28.7012 28.2454 27.7769 27.297 26.8034 26.2972 25.7759 25.2407 24.6887
-24.1212 23.5348 22.9309 22.3055 21.6598 20.9892 20.2947 19.5705 18.8168
-18.0266 17.1987 16.3231 15.3963 14.404 13.3362 12.1694 10.8809 9.42496
-7.74107 5.71798 3.15337 0 0;
+#A 0 0 88.2226 82.204 78.6858 76.1919 74.2601 72.6841 71.3543 70.2048
+69.1937 68.2916 67.4783 66.7382 66.0601 65.4346 64.855 64.3151 63.8106
+63.3371 62.8919 62.4716 62.0744 61.6977 61.3402 60.9999 60.6759 60.3665
+60.071 59.7881 59.5172 59.2573 59.008 58.7682 58.5377 58.3156 58.1018
+57.8955 57.6966 57.5043 57.3186 57.1388 56.9649 56.7964 56.6333 56.4749
+56.3213 56.172 56.0271 55.8861 55.749 55.6155 55.4855 55.3586 55.235
+55.1142 54.9964 54.8811 54.7685 54.6581 54.5502 54.4443 54.3407 54.2388
+54.1389 54.0406 53.9441 53.8491 53.7556 53.6634 53.5726 53.4829 53.3945
+53.3071 53.2207 53.1352 53.0507 52.9669 52.8839 52.8015 52.7198 52.6386
+52.5581 52.4778 52.3982 52.3187 52.2397 52.1609 52.0824 52.004 51.9258
+51.8477 51.7697 51.6917 51.6137 51.5356 51.4576 51.3793 51.301 51.2224
+51.1437 51.0647 50.9855 50.9059 50.8262 50.7459 50.6655 50.5845 50.5032
+50.4214 50.3391 50.2564 50.1732 50.0894 50.0051 49.9201 49.8347 49.7486
+49.6619 49.5745 49.4865 49.3978 49.3084 49.2182 49.1274 49.0358 48.9434
+48.8503 48.7564 48.6616 48.566 48.4696 48.3723 48.2741 48.1752 48.0752
+47.9744 47.8727 47.77 47.6664 47.5618 47.4562 47.3497 47.2421 47.1336
+47.024 46.9135 46.8018 46.6891 46.5753 46.4605 46.3445 46.2275 46.1092
+45.99 45.8695 45.7479 45.6251 45.5012 45.376 45.2497 45.122 44.9933
+44.8631 44.7319 44.5992 44.4654 44.3301 44.1936 44.0557 43.9166 43.7759
+43.634 43.4906 43.3458 43.1995 43.0518 42.9026 42.7519 42.5996 42.4459
+42.2905 42.1335 41.9749 41.8146 41.6526 41.489 41.3235 41.1563 40.9872
+40.8163 40.6434 40.4687 40.2919 40.1131 39.9322 39.7492 39.5638 39.3764
+39.1865 38.9943 38.7995 38.6023 38.4023 38.1998 37.9943 37.786 37.5746
+37.3602 37.1423 36.9212 36.6965 36.4682 36.2359 35.9997 35.7592 35.5144
+35.2648 35.0104 34.7508 34.4859 34.215 33.9383 33.6549 33.3649 33.0674
+32.7622 32.4486 32.1262 31.7941 31.4518 31.0983 30.7329 30.3542 29.9614
+29.5529 29.1275 28.6831 28.2179 27.7295 27.2153 26.6718 26.0954 25.4811
+24.8236 24.1153 23.3477 22.5087 21.5838 20.5517 19.3842 18.038 16.4488
+14.5061 12.0034 8.48161 2.45351;
 #X coords 0 100 256 0 200 140 1;
-#X restore 375 275 graph;
-#X floatatom 375 425 5 0 0 0 - - -;
-#X floatatom 375 471 5 0 0 0 - - -;
-#X obj 52 443 output~;
-#X obj 88 353 tabread4~ \$0-transition;
-#X obj 201 186 * 0.4;
-#X msg 201 91 136.766;
-#X obj 375 447 tabread \$0-fft;
-#X obj 195 400 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 338 255 graph;
+#X floatatom 338 405 5 0 0 0 - - -, f 5;
+#X floatatom 338 451 5 0 0 0 - - -, f 5;
+#X obj 33 450 output~;
+#X obj 60 360 tabread4~ \$0-transition;
+#X obj 173 193 * 0.4;
+#X msg 173 98 136.766;
+#X obj 338 427 tabread \$0-fft;
+#X obj 167 407 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 195 422 tabwrite~ \$0-out;
-#N canvas 0 0 450 300 graph1 0;
+#X obj 167 429 tabwrite~ \$0-out;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-out 882 float 0;
 #X coords 0 1 882 -1 200 140 1;
-#X restore 378 108 graph;
-#X text 75 15 BAND-LIMITED SAWTOOTH GENERATOR USING A TRANSITION TABLE
-;
-#X obj 76 60 loadbang;
-#X obj 76 83 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 341 88 graph;
+#X obj 48 67 loadbang;
+#X obj 48 90 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X text 39 657 Now any time we wish to make a discontinuity in the
+#X text 22 611 Now any time we wish to make a discontinuity in the
 output signal \, we make it look exactly like the bandlimited square
 wave looks. We do this by reading through the table we recorded \,
 carefully adding a "digital" \, non-band-limited \, sawtooth to "array1"
@@ -130,7 +128,7 @@ left is the transition in the table.;
 #X text 80 369 This one is used - first and third harmonics only.;
 #X text 28 644 This alternate one puts in harmonics 1 \, 3 \, and 5
 ;
-#N canvas 0 0 450 300 graph1 0;
+#N canvas 0 0 450 300 (subpatch) 0;
 #X array \$0-transition 1002 float 0;
 #X coords 0 1 1002 -1 200 140 1;
 #X restore 539 32 graph;
@@ -170,9 +168,8 @@ will work everywhere.;
 #X connect 23 0 19 0;
 #X connect 24 0 26 0;
 #X connect 27 0 22 0;
-#X restore 182 465 pd transition-table;
-#X text 351 853 updated for Pd version 0.39;
-#X text 37 515 A more sophisticated way to control foldover in sawtooth
+#X restore 154 472 pd transition-table;
+#X text 22 504 A more sophisticated way to control foldover in sawtooth
 waves is to replace the once-a-cycle jump with a bandlimited transition.
 To get a band-limited transition we synthesize a band-limited square
 wave and harvest the transition from the middle of the top half to
@@ -180,11 +177,37 @@ the middle of the bottom half. Here we use a square wave at SR/10 \,
 so that only partials 1 and 3 fit below the Nyquist. The transition
 should take 1/2 period \, or 5 samples. The table is calculated and
 stored in the "transition-table" subpatch.;
-#X text 40 767 The "band limit" controls how fast the transition table
+#X text 22 697 The "band limit" controls how fast the transition table
 is read. If it is set to the Nyquist frequency the table is read at
 0.4 times the Nyquist \, or five samples a cycle. Lowering the band
 limit cuts off the partials of the generated sawtooth wave at frequencies
 below the Nyquist.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header band-limited_sawtooth_generator...
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 105 27 ... using a transition table;
+#X obj 1 774 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 224 211 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 65 DESCRIPTION band-limited sawtooth generator;
+#X text 12 25 KEYWORDS signal bandlimited;
+#X restore 392 776 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 band-limited sawtooth- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 776 pd References;
+#X obj 6 776 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 24 0;
 #X connect 1 0 18 0;
 #X connect 1 0 22 0;
@@ -212,5 +235,5 @@ below the Nyquist.;
 #X connect 25 0 8 0;
 #X connect 26 0 21 0;
 #X connect 27 0 28 0;
-#X connect 31 0 32 0;
-#X connect 32 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 16 0;
diff --git a/pd/doc/3.audio.examples/adsr.pd b/pd/doc/3.audio.examples/adsr.pd
index 351f354c1..9f491e294 100644
--- a/pd/doc/3.audio.examples/adsr.pd
+++ b/pd/doc/3.audio.examples/adsr.pd
@@ -1,96 +1,96 @@
-#N canvas 371 139 752 655 12;
-#X obj 105 111 inlet;
-#X obj 435 151 inlet;
-#X text 101 86 trigger;
-#X obj 105 139 sel 0;
-#X obj 244 155 t b;
-#X obj 166 264 f \$1;
-#X obj 166 289 pack 0 \$2;
-#X obj 492 151 inlet;
-#X obj 438 281 del \$2;
-#X obj 458 429 line~;
-#X obj 462 304 f \$4;
-#X obj 501 379 pack 0 \$3;
-#X obj 554 151 inlet;
-#X obj 616 151 inlet;
-#X obj 689 150 inlet;
-#X msg 105 170 stop;
-#X obj 612 306 pack 0 \$5;
-#X text 435 129 level;
-#X obj 501 355 * \$1;
-#X obj 458 454 outlet~;
-#X text 102 378 and pack with;
-#X text 103 398 attack time;
-#X text 31 126 if zero;
-#X text 32 143 release;
-#X text 12 160 and cancel;
-#X text 43 177 decay;
-#X text 284 272 on attack \, set a;
-#X text 278 305 recall sustain value;
-#X text 315 378 pack with decay time;
-#X text 605 332 on release ramp;
-#X text 606 349 back to zero;
-#X obj 462 329 * 0.01;
-#X text 47 567 Objects such as "f" and "pack" can be given dollar sign
-arguments to initialize their contents from adsr's creation arguments.
-Inlets are supplied to change them on the fly.;
-#X text 13 2 ADSR ENVELOPE;
-#X text 488 129 attack;
-#X text 555 128 decay;
-#X text 609 129 sustain;
-#X text 686 129 release;
-#X text 202 71 attack;
-#X obj 204 92 moses;
-#X obj 194 122 t b b;
-#X msg 128 290 0;
-#X text 20 273 optionally;
-#X text 10 291 bash to zero;
-#X text 25 246 ATTACK:;
-#X text 49 477 When you send this patch a positive trigger it schedules
-a line~ to do an attack and decay \, and if zero \, it starts the release
-ramp.;
-#X text 495 629 Updated for Pd version 0.37;
-#X text 255 89 test for negative trigger;
-#X text 253 113 if so \, zero;
-#X text 254 129 the output;
-#X text 278 165 in any case;
-#X text 303 355 multiply by peak level;
-#X text 280 286 delay for sustain;
-#X text 276 328 convert from percent;
-#X text 155 340 ... then;
-#X text 103 359 recall peak level;
-#X text 439 113 peak;
-#X text 281 149 ... do this;
-#X text 47 529 Negative triggers cause the output to jump to zero and
-then attack (instead of attacking from the current location).;
-#X text 208 1 Arguments: level \, attack time \, decay time \, sustain
-level \, release time. A \, D \, and R are in msec and S is in percent.
-This patch is used as an abstraction in various examples.;
-#X connect 0 0 3 0;
-#X connect 1 0 5 1;
-#X connect 1 0 18 1;
-#X connect 3 0 15 0;
-#X connect 3 0 16 0;
-#X connect 3 1 39 0;
-#X connect 4 0 5 0;
-#X connect 4 0 8 0;
-#X connect 5 0 6 0;
-#X connect 6 0 9 0;
-#X connect 7 0 6 1;
-#X connect 7 0 8 1;
-#X connect 8 0 10 0;
-#X connect 9 0 19 0;
-#X connect 10 0 31 0;
-#X connect 11 0 9 0;
-#X connect 12 0 11 1;
-#X connect 13 0 10 1;
-#X connect 14 0 16 1;
-#X connect 15 0 8 0;
-#X connect 16 0 9 0;
-#X connect 18 0 11 0;
-#X connect 31 0 18 0;
-#X connect 39 0 40 0;
-#X connect 39 1 4 0;
-#X connect 40 0 4 0;
-#X connect 40 1 41 0;
-#X connect 41 0 9 0;
+#N canvas 5 3 752 655 12;
+#X obj 105 111 inlet;
+#X obj 435 151 inlet;
+#X text 101 86 trigger;
+#X obj 105 139 sel 0;
+#X obj 244 155 t b;
+#X obj 166 264 f \$1;
+#X obj 166 289 pack 0 \$2;
+#X obj 492 151 inlet;
+#X obj 438 281 del \$2;
+#X obj 458 429 line~;
+#X obj 462 304 f \$4;
+#X obj 501 379 pack 0 \$3;
+#X obj 554 151 inlet;
+#X obj 616 151 inlet;
+#X obj 689 150 inlet;
+#X msg 105 170 stop;
+#X obj 612 306 pack 0 \$5;
+#X text 435 129 level;
+#X obj 501 355 * \$1;
+#X obj 458 454 outlet~;
+#X text 102 378 and pack with;
+#X text 103 398 attack time;
+#X text 31 126 if zero;
+#X text 32 143 release;
+#X text 12 160 and cancel;
+#X text 43 177 decay;
+#X text 284 272 on attack \, set a;
+#X text 278 305 recall sustain value;
+#X text 315 378 pack with decay time;
+#X text 605 332 on release ramp;
+#X text 606 349 back to zero;
+#X obj 462 329 * 0.01;
+#X text 47 567 Objects such as "f" and "pack" can be given dollar sign
+arguments to initialize their contents from adsr's creation arguments.
+Inlets are supplied to change them on the fly.;
+#X text 13 2 ADSR ENVELOPE;
+#X text 488 129 attack;
+#X text 555 128 decay;
+#X text 609 129 sustain;
+#X text 686 129 release;
+#X text 202 71 attack;
+#X obj 204 92 moses;
+#X obj 194 122 t b b;
+#X msg 128 290 0;
+#X text 20 273 optionally;
+#X text 10 291 bash to zero;
+#X text 25 246 ATTACK:;
+#X text 49 477 When you send this patch a positive trigger it schedules
+a line~ to do an attack and decay \, and if zero \, it starts the release
+ramp.;
+#X text 495 629 Updated for Pd version 0.37;
+#X text 255 89 test for negative trigger;
+#X text 253 113 if so \, zero;
+#X text 254 129 the output;
+#X text 278 165 in any case;
+#X text 303 355 multiply by peak level;
+#X text 280 286 delay for sustain;
+#X text 276 328 convert from percent;
+#X text 155 340 ... then;
+#X text 103 359 recall peak level;
+#X text 439 113 peak;
+#X text 281 149 ... do this;
+#X text 47 529 Negative triggers cause the output to jump to zero and
+then attack (instead of attacking from the current location).;
+#X text 208 1 Arguments: level \, attack time \, decay time \, sustain
+level \, release time. A \, D \, and R are in msec and S is in percent.
+This patch is used as an abstraction in various examples.;
+#X connect 0 0 3 0;
+#X connect 1 0 5 1;
+#X connect 1 0 18 1;
+#X connect 3 0 15 0;
+#X connect 3 0 16 0;
+#X connect 3 1 39 0;
+#X connect 4 0 5 0;
+#X connect 4 0 8 0;
+#X connect 5 0 6 0;
+#X connect 6 0 9 0;
+#X connect 7 0 6 1;
+#X connect 7 0 8 1;
+#X connect 8 0 10 0;
+#X connect 9 0 19 0;
+#X connect 10 0 31 0;
+#X connect 11 0 9 0;
+#X connect 12 0 11 1;
+#X connect 13 0 10 1;
+#X connect 14 0 16 1;
+#X connect 15 0 8 0;
+#X connect 16 0 9 0;
+#X connect 18 0 11 0;
+#X connect 31 0 18 0;
+#X connect 39 0 40 0;
+#X connect 39 1 4 0;
+#X connect 40 0 4 0;
+#X connect 40 1 41 0;
+#X connect 41 0 9 0;
diff --git a/pd/doc/3.audio.examples/buttercoef3.pd b/pd/doc/3.audio.examples/buttercoef3.pd
index 6d15d6afe..9f98d9f52 100644
--- a/pd/doc/3.audio.examples/buttercoef3.pd
+++ b/pd/doc/3.audio.examples/buttercoef3.pd
@@ -1,80 +1,80 @@
-#N canvas 139 346 714 532 10;
-#X obj 63 51 inlet;
-#X floatatom 522 134 5 0 0 0 - - -;
-#X obj 101 153 t f f;
-#X msg 101 108 0.667;
-#X msg 82 283 0;
-#X obj 517 270 loadbang;
-#X obj 528 298 inlet;
-#X obj 517 322 f;
-#X obj 517 346 expr 1 - 2*$f1;
-#X obj 63 79 t b b b f;
-#X obj 205 228 * -1;
-#X obj 163 228 t f f;
-#X obj 63 391 f;
-#X obj 30 463 outlet;
-#X text 515 237 1 to normalize at Nyquist;
-#X text 59 30 characteristic frequency \, 0(DC) to 1(Nyquist);
-#X obj 283 470 outlet;
-#X obj 439 472 outlet;
-#X text 439 494 imag2a;
-#X text 283 492 real1;
-#X text 374 494 real2;
-#X obj 500 473 outlet;
-#X text 500 495 imag2b;
-#X obj 373 470 outlet;
-#X text 27 485 normalizer1;
-#X obj 173 470 outlet;
-#X text 170 492 normalizer2;
-#X obj 156 436 expr (($f2-$f1)*($f2-$f1)+$f3*$f3);
-#X obj 63 412 t f f;
-#X obj 101 176 expr (1 - $f2*$f2) / (1 + $f2*$f2 + 2*$f2*cos($f1))
-;
-#X obj 163 205 expr 2*$f2*sin($f1) / (1 + $f2*$f2 + 2*$f2*cos($f1))
-;
-#X obj 82 307 expr (1 - $f2*$f2) / (1 + $f2*$f2 + 2*$f2*cos($f1));
-#X obj 522 89 clip 0 1;
-#X obj 522 111 expr tan($f1*1.57);
-#X obj 101 131 expr $f1*1.5708;
-#X text 515 251 0 to normalize at DC;
-#X text 119 4 3-pole (or zero) Butterworth filter coefficient calculator
-;
-#X text 145 109 "theta" in units of pi/2;
-#X text 211 138 conjugate pair of pole/zero locations:;
-#X text 197 155 real part: (1-r*r)/(1+r*r-2rcos(th));
-#X text 245 226 imaginary part: 2rsin(th)/(...);
-#X text 270 282 real-valued one \, theta=0;
-#X obj 30 439 expr abs($f1-$f2);
-#X connect 0 0 9 0;
-#X connect 1 0 29 1;
-#X connect 1 0 30 1;
-#X connect 1 0 31 1;
-#X connect 2 0 29 0;
-#X connect 2 1 30 0;
-#X connect 3 0 34 0;
-#X connect 4 0 31 0;
-#X connect 5 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 8 0 12 1;
-#X connect 9 0 12 0;
-#X connect 9 1 4 0;
-#X connect 9 2 3 0;
-#X connect 9 3 32 0;
-#X connect 10 0 21 0;
-#X connect 11 0 17 0;
-#X connect 11 0 27 2;
-#X connect 11 1 10 0;
-#X connect 12 0 28 0;
-#X connect 27 0 25 0;
-#X connect 28 0 42 0;
-#X connect 28 1 27 0;
-#X connect 29 0 23 0;
-#X connect 29 0 27 1;
-#X connect 30 0 11 0;
-#X connect 31 0 16 0;
-#X connect 31 0 42 1;
-#X connect 32 0 33 0;
-#X connect 33 0 1 0;
-#X connect 34 0 2 0;
-#X connect 42 0 13 0;
+#N canvas 0 0 714 532 10;
+#X obj 63 51 inlet;
+#X floatatom 522 134 5 0 0 0 - - -;
+#X obj 101 153 t f f;
+#X msg 101 108 0.667;
+#X msg 82 283 0;
+#X obj 517 270 loadbang;
+#X obj 528 298 inlet;
+#X obj 517 322 f;
+#X obj 517 346 expr 1 - 2*$f1;
+#X obj 63 79 t b b b f;
+#X obj 205 228 * -1;
+#X obj 163 228 t f f;
+#X obj 63 391 f;
+#X obj 30 463 outlet;
+#X text 515 237 1 to normalize at Nyquist;
+#X text 59 30 characteristic frequency \, 0(DC) to 1(Nyquist);
+#X obj 283 470 outlet;
+#X obj 439 472 outlet;
+#X text 439 494 imag2a;
+#X text 283 492 real1;
+#X text 374 494 real2;
+#X obj 500 473 outlet;
+#X text 500 495 imag2b;
+#X obj 373 470 outlet;
+#X text 27 485 normalizer1;
+#X obj 173 470 outlet;
+#X text 170 492 normalizer2;
+#X obj 156 436 expr (($f2-$f1)*($f2-$f1)+$f3*$f3);
+#X obj 63 412 t f f;
+#X obj 101 176 expr (1 - $f2*$f2) / (1 + $f2*$f2 + 2*$f2*cos($f1))
+;
+#X obj 163 205 expr 2*$f2*sin($f1) / (1 + $f2*$f2 + 2*$f2*cos($f1))
+;
+#X obj 82 307 expr (1 - $f2*$f2) / (1 + $f2*$f2 + 2*$f2*cos($f1));
+#X obj 522 89 clip 0 1;
+#X obj 522 111 expr tan($f1*1.57);
+#X obj 101 131 expr $f1*1.5708;
+#X text 515 251 0 to normalize at DC;
+#X text 119 4 3-pole (or zero) Butterworth filter coefficient calculator
+;
+#X text 145 109 "theta" in units of pi/2;
+#X text 211 138 conjugate pair of pole/zero locations:;
+#X text 197 155 real part: (1-r*r)/(1+r*r-2rcos(th));
+#X text 245 226 imaginary part: 2rsin(th)/(...);
+#X text 270 282 real-valued one \, theta=0;
+#X obj 30 439 expr abs($f1-$f2);
+#X connect 0 0 9 0;
+#X connect 1 0 29 1;
+#X connect 1 0 30 1;
+#X connect 1 0 31 1;
+#X connect 2 0 29 0;
+#X connect 2 1 30 0;
+#X connect 3 0 34 0;
+#X connect 4 0 31 0;
+#X connect 5 0 7 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 12 1;
+#X connect 9 0 12 0;
+#X connect 9 1 4 0;
+#X connect 9 2 3 0;
+#X connect 9 3 32 0;
+#X connect 10 0 21 0;
+#X connect 11 0 17 0;
+#X connect 11 0 27 2;
+#X connect 11 1 10 0;
+#X connect 12 0 28 0;
+#X connect 27 0 25 0;
+#X connect 28 0 42 0;
+#X connect 28 1 27 0;
+#X connect 29 0 23 0;
+#X connect 29 0 27 1;
+#X connect 30 0 11 0;
+#X connect 31 0 16 0;
+#X connect 31 0 42 1;
+#X connect 32 0 33 0;
+#X connect 33 0 1 0;
+#X connect 34 0 2 0;
+#X connect 42 0 13 0;
diff --git a/pd/doc/3.audio.examples/butterworth3~.pd b/pd/doc/3.audio.examples/butterworth3~.pd
index 9b6511c67..90eb7ae3a 100644
--- a/pd/doc/3.audio.examples/butterworth3~.pd
+++ b/pd/doc/3.audio.examples/butterworth3~.pd
@@ -1,104 +1,104 @@
-#N canvas -21 471 656 598 10;
-#X obj 59 313 rpole~;
-#X obj 58 379 cpole~;
-#X obj 82 410 cpole~;
-#X obj 58 351 *~;
-#X msg 488 421 clear;
-#X obj 127 160 loadbang;
-#X obj 131 468 rzero~;
-#X obj 131 519 czero~;
-#X obj 156 545 czero~;
-#X obj 131 497 /~;
-#X obj 397 257 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-50;
-#X obj 59 289 *~;
-#X obj 131 446 /~;
-#X obj 171 207 samplerate~;
-#X obj 171 228 / 2;
-#X obj 127 250 / 22050;
-#X obj 127 208 f \$1;
-#X obj 127 228 t f b;
-#X obj 135 181 inlet;
-#X obj 397 164 loadbang;
-#X obj 405 185 inlet;
-#X obj 263 162 loadbang;
-#X obj 307 209 samplerate~;
-#X obj 307 230 / 2;
-#X obj 263 252 / 22050;
-#X obj 263 230 t f b;
-#X obj 271 183 inlet;
-#X obj 58 163 inlet~;
-#X obj 488 166 inlet;
-#X obj 155 568 outlet~;
-#X obj 263 210 f \$2;
-#X obj 397 212 f \$3;
-#X text 58 142 audio;
-#X text 133 140 lp freq;
-#X text 263 142 hp freq;
-#X text 395 146 hi/lo norm;
-#X text 490 143 clear;
-#X text 68 10 3-pole \, 3-zero butterworth lp/hp/shelving filter. Args:
-lp freq \, hp freq \, normalize-hi. Inlets: input signal \, lo freq
-\, hi freq \, hi norm \, reset.;
-#X text 70 75 For high-pass: set LP freq =0 and hi/lo to 1;
-#X text 70 56 For low-pass: set HP freq >= SR/2 and hi/lo to 0;
-#X text 69 92 Shelving: HP and LP specify shelving band. Gain difference
-is about HP/LP cubed (so HP=2LP should give about 18 dB \, for example.)
-;
-#X obj 127 272 buttercoef3;
-#X obj 198 429 buttercoef3;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 1 1 2 1;
-#X connect 2 0 12 0;
-#X connect 3 0 1 0;
-#X connect 4 0 0 0;
-#X connect 4 0 1 0;
-#X connect 4 0 2 0;
-#X connect 4 0 6 0;
-#X connect 4 0 7 0;
-#X connect 4 0 8 0;
-#X connect 5 0 16 0;
-#X connect 6 0 9 0;
-#X connect 7 0 8 0;
-#X connect 7 1 8 1;
-#X connect 8 0 29 0;
-#X connect 9 0 7 0;
-#X connect 10 0 41 1;
-#X connect 10 0 42 1;
-#X connect 11 0 0 0;
-#X connect 12 0 6 0;
-#X connect 13 0 14 0;
-#X connect 14 0 15 1;
-#X connect 15 0 41 0;
-#X connect 16 0 17 0;
-#X connect 17 0 15 0;
-#X connect 17 1 13 0;
-#X connect 18 0 16 0;
-#X connect 19 0 31 0;
-#X connect 20 0 31 0;
-#X connect 21 0 30 0;
-#X connect 22 0 23 0;
-#X connect 23 0 24 1;
-#X connect 24 0 42 0;
-#X connect 25 0 24 0;
-#X connect 25 1 22 0;
-#X connect 26 0 30 0;
-#X connect 27 0 11 0;
-#X connect 28 0 4 0;
-#X connect 30 0 25 0;
-#X connect 31 0 10 0;
-#X connect 41 0 11 1;
-#X connect 41 1 3 1;
-#X connect 41 2 0 1;
-#X connect 41 3 1 2;
-#X connect 41 3 2 2;
-#X connect 41 4 1 3;
-#X connect 41 5 2 3;
-#X connect 42 0 12 1;
-#X connect 42 1 9 1;
-#X connect 42 2 6 1;
-#X connect 42 3 7 2;
-#X connect 42 3 8 2;
-#X connect 42 4 7 3;
-#X connect 42 5 8 3;
+#N canvas 0 0 656 598 10;
+#X obj 59 313 rpole~;
+#X obj 58 379 cpole~;
+#X obj 82 410 cpole~;
+#X obj 58 351 *~;
+#X msg 488 421 clear;
+#X obj 127 160 loadbang;
+#X obj 131 468 rzero~;
+#X obj 131 519 czero~;
+#X obj 156 545 czero~;
+#X obj 131 497 /~;
+#X obj 397 257 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+50;
+#X obj 59 289 *~;
+#X obj 131 446 /~;
+#X obj 171 207 samplerate~;
+#X obj 171 228 / 2;
+#X obj 127 250 / 22050;
+#X obj 127 208 f \$1;
+#X obj 127 228 t f b;
+#X obj 135 181 inlet;
+#X obj 397 164 loadbang;
+#X obj 405 185 inlet;
+#X obj 263 162 loadbang;
+#X obj 307 209 samplerate~;
+#X obj 307 230 / 2;
+#X obj 263 252 / 22050;
+#X obj 263 230 t f b;
+#X obj 271 183 inlet;
+#X obj 58 163 inlet~;
+#X obj 488 166 inlet;
+#X obj 155 568 outlet~;
+#X obj 263 210 f \$2;
+#X obj 397 212 f \$3;
+#X text 58 142 audio;
+#X text 133 140 lp freq;
+#X text 263 142 hp freq;
+#X text 395 146 hi/lo norm;
+#X text 490 143 clear;
+#X text 68 10 3-pole \, 3-zero butterworth lp/hp/shelving filter. Args:
+lp freq \, hp freq \, normalize-hi. Inlets: input signal \, lo freq
+\, hi freq \, hi norm \, reset.;
+#X text 70 75 For high-pass: set LP freq =0 and hi/lo to 1;
+#X text 70 56 For low-pass: set HP freq >= SR/2 and hi/lo to 0;
+#X text 69 92 Shelving: HP and LP specify shelving band. Gain difference
+is about HP/LP cubed (so HP=2LP should give about 18 dB \, for example.)
+;
+#X obj 127 272 buttercoef3;
+#X obj 198 429 buttercoef3;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 12 0;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 4 0 1 0;
+#X connect 4 0 2 0;
+#X connect 4 0 6 0;
+#X connect 4 0 7 0;
+#X connect 4 0 8 0;
+#X connect 5 0 16 0;
+#X connect 6 0 9 0;
+#X connect 7 0 8 0;
+#X connect 7 1 8 1;
+#X connect 8 0 29 0;
+#X connect 9 0 7 0;
+#X connect 10 0 41 1;
+#X connect 10 0 42 1;
+#X connect 11 0 0 0;
+#X connect 12 0 6 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 1;
+#X connect 15 0 41 0;
+#X connect 16 0 17 0;
+#X connect 17 0 15 0;
+#X connect 17 1 13 0;
+#X connect 18 0 16 0;
+#X connect 19 0 31 0;
+#X connect 20 0 31 0;
+#X connect 21 0 30 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 1;
+#X connect 24 0 42 0;
+#X connect 25 0 24 0;
+#X connect 25 1 22 0;
+#X connect 26 0 30 0;
+#X connect 27 0 11 0;
+#X connect 28 0 4 0;
+#X connect 30 0 25 0;
+#X connect 31 0 10 0;
+#X connect 41 0 11 1;
+#X connect 41 1 3 1;
+#X connect 41 2 0 1;
+#X connect 41 3 1 2;
+#X connect 41 3 2 2;
+#X connect 41 4 1 3;
+#X connect 41 5 2 3;
+#X connect 42 0 12 1;
+#X connect 42 1 9 1;
+#X connect 42 2 6 1;
+#X connect 42 3 7 2;
+#X connect 42 3 8 2;
+#X connect 42 4 7 3;
+#X connect 42 5 8 3;
diff --git a/pd/doc/3.audio.examples/osc-voice.pd b/pd/doc/3.audio.examples/osc-voice.pd
index 48bb81ea1..108cfbe58 100644
--- a/pd/doc/3.audio.examples/osc-voice.pd
+++ b/pd/doc/3.audio.examples/osc-voice.pd
@@ -1,4 +1,4 @@
-#N canvas 153 209 946 576 12;
+#N canvas 370 27 946 576 12;
 #X obj 163 390 line~;
 #X obj 401 438 line~;
 #X obj 163 511 *~;
@@ -23,10 +23,10 @@
 #X obj 96 486 inlet~;
 #X obj 96 538 outlet~;
 #X obj 96 512 +~;
-#X floatatom 293 342 0 0 0;
+#X floatatom 293 342 0 0 0 0 - - -;
 #X msg 294 316 set \$1;
 #X obj 294 368 s \$1;
-#X floatatom 96 336 0 0 0;
+#X floatatom 96 336 0 0 0 0 - - -;
 #X msg 96 310 set \$1;
 #X obj 96 362 s \$2;
 #X text 370 201 amplitude;
@@ -50,7 +50,8 @@ and amplitude are now in MIDI and dB \, and there's a summing bus arrangement
 #X text 451 403 The "pack" always gets a 30 \, but if you send a pair
 of numbers to amplitude \, the second one overrides the 30;
 #X text 439 254 first bang the "30" \, then pass the list on;
-#X text 62 7 This abstraction is used in patch 68.qlist.pd.;
+#X text 62 7 This abstraction is used in patch D13.additive.qlist.pd.
+;
 #X connect 0 0 17 0;
 #X connect 0 0 17 1;
 #X connect 1 0 19 0;
diff --git a/pd/doc/4.data.structures/01.scalars.pd b/pd/doc/4.data.structures/01.scalars.pd
index ec5794cb1..5d192ebcc 100644
--- a/pd/doc/4.data.structures/01.scalars.pd
+++ b/pd/doc/4.data.structures/01.scalars.pd
@@ -1,63 +1,97 @@
 #N struct template1 float x float y float z float q;
-#N canvas 363 11 579 461 12;
-#N canvas 13 22 297 180 data 1;
+#N canvas 424 19 448 426 10;
+#N canvas 395 77 297 180 data 0;
 #X scalar template1 50 100 30 9 \;;
 #X scalar template1 150 100 -20 900 \;;
-#X restore 60 347 pd data;
-#N canvas 10 274 550 324 template1 1;
-#X obj 60 46 filledpolygon 244 q 5 0 0 20 z 40 0;
-#X text 4 164 The filledpolygon's arguments are interior color \, border
-color \, border width \, and then the points of the polygon. Arguments
-which are symbols ("q" and "z" in this case) mean to take the values
-from the data structure. Other values are constant. The position of
-the object is automatically controlled by fields named "x" and "y".
+#X restore 24 316 pd data;
+#N canvas 390 118 428 272 template1 0;
+#X obj 22 67 filledpolygon 244 q 5 0 0 20 z 40 0;
+#X obj 22 42 struct template1 float x float y float z float q;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure template;
+#X text 19 92 This subpatch acts as a template which describes the
+data structure. The [struct] associates a name with this template ("template1")
+and specifies four floating point values named x \, y \, z \, and q.
+The [filledpolygon] is a drawing instruction. Templates should have
+only one [struct] object but may have any number of drawing instructions.
 ;
-#X obj 60 21 struct template1 float x float y float z float q;
-#X text 3 67 This subpatch acts as a template which describes the data
-structure. The "struct" specifies four floating point values named
-x \, y \, z \, and q. The "filledpolygon" is a drawing instruction.
-Templates should have only one template object but may have any number
-of drawing instructions.;
-#X restore 60 371 pd template1;
-#N canvas 0 0 440 292 stuff 0;
-#X obj 235 185 pointer;
-#X obj 28 187 append template1 x y z q;
-#X msg 235 127 \; pd-data clear;
-#X msg 235 163 traverse pd-data \, bang;
-#X obj 125 128 t b b b;
-#X msg 125 87 bang;
-#X obj 125 56 loadbang;
-#X text 159 87 click here to re-initialize;
-#X text 25 243 This subpatch sets up the "data" window with two objects.
-How this works will get explained later.;
-#X msg 28 164 50 100 30 9 \, 150 100 -20 900;
-#X connect 0 0 1 4;
-#X connect 3 0 0 0;
-#X connect 4 0 9 0;
-#X connect 4 1 3 0;
-#X connect 4 2 2 0;
-#X connect 5 0 4 0;
-#X connect 6 0 5 0;
-#X connect 9 0 1 0;
-#X restore 59 397 pd stuff;
-#X text 37 72 The positions \, border color \, and altitude of each
+#X text 19 178 The arguments to [filledpolygon] are interior color
+\, border color \, border width \, and then the points of the polygon.
+Arguments which are symbols ("q" and "z" in this case) mean to take
+the values from the data structure. Other values are constant. The
+position of the object is automatically controlled by fields named
+"x" and "y".;
+#X restore 24 341 pd template1;
+#X text 19 89 The positions \, border color \, and altitude of each
 triangle are numeric values which can control \, or be controlled by
 \, other elements of the patch.;
-#X text 37 124 When the data window is locked (not in edit mode) you
-can drag the apex of either triangle up or down to change the altitude
-(you should see the cursor change with dragging is meaningful.) In
-edit (unlocked) mode \, you can move teh entire triangles around \,
-or cut \, copy \, and paste them.;
-#X text 47 325 subpatches:;
-#X text 37 281 Data is not persistent. If you save a Pd patch and reopen
+#X text 21 290 subpatches:;
+#X text 20 259 Data is not persistent. If you save a Pd patch and reopen
 it \, the "data" isn't preserved.;
-#X text 37 5 This patch shows a simple data window with two objects
+#X text 19 36 This patch shows a simple data window with two objects
 in it. The objects' data structures and appearances are defined by
 the "template1" subpatch. This kind of object is called a "scalar."
 ;
-#X text 37 207 Scalars are described by "templates" \, which are subwindows.
+#X text 20 195 Scalars are described by "templates" \, which are subwindows.
 The subwindows are found by their name \, in this case "template1."
 The template describes what form the data take and how it is shown.
 It's possible to mix data of many different templates in the same collection.
 ;
-#X text 294 398 updated for Pd version 0.35.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header scalars 20 10 1
+18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 404 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 85 PLATFORM windows macosx gnulinux;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 205 RELEASE_VERSION 0.41.4;
+#X text 12 185 RELEASE_DATE 2009-06-12;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 125 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 105 DATATYPE float;
+#X text 12 225 HELP_PATCH_AUTHORS Updated for release 0.35. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS data_structure GUI;
+#X text 12 65 DESCRIPTION scalars;
+#X restore 392 406 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 scalars - Related Help Documents;
+#X restore 103 406 pd References;
+#X obj 6 406 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 20 131 When the data window is locked (not in edit mode) you
+can drag the apex of either triangle up or down to change the altitude
+(you should see the cursor change with dragging is meaningful.) In
+edit (unlocked) mode \, you can move the entire triangles around \,
+or cut \, copy \, and paste them.;
+#N canvas 10 147 428 250 init 0;
+#X obj 229 171 pointer;
+#X obj 22 173 append template1 x y z q;
+#X msg 229 113 \; pd-data clear;
+#X msg 229 149 traverse pd-data \, bang;
+#X obj 119 114 t b b b;
+#X msg 119 73 bang;
+#X obj 119 42 loadbang;
+#X text 153 73 click here to re-initialize;
+#X text 19 203 This subpatch sets up the "data" window with two objects.
+How this works will get explained later.;
+#X msg 22 150 50 100 30 9 \, 150 100 -20 900;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Initialization Patch;
+#X connect 0 0 1 4;
+#X connect 3 0 0 0;
+#X connect 4 0 9 0;
+#X connect 4 1 3 0;
+#X connect 4 2 2 0;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 9 0 1 0;
+#X restore 24 366 pd init;
diff --git a/pd/doc/4.data.structures/02.getting.data.pd b/pd/doc/4.data.structures/02.getting.data.pd
index 4b2000527..cd59f2afc 100644
--- a/pd/doc/4.data.structures/02.getting.data.pd
+++ b/pd/doc/4.data.structures/02.getting.data.pd
@@ -1,77 +1,106 @@
 #N struct template2 float x float y float z float q float zz;
-#N canvas 138 2 630 580 12;
-#X text 345 543 updated for Pd version 0.32.;
-#N canvas 42 312 598 266 stuff 0;
-#X obj 353 159 pointer;
-#X obj 117 103 t b b b;
-#X msg 117 62 bang;
-#X obj 117 31 loadbang;
-#X text 163 62 click here to re-initialize;
-#X text 127 242 Explained later...;
-#X obj 28 208 append template2 x y z q;
-#X msg 353 101 \; pd-data2 clear;
-#X msg 353 137 traverse pd-data2 \, bang;
-#X msg 28 185 50 150 30 9 \, 200 100 -20 900 \, 100 100 -50 30;
-#X connect 0 0 6 4;
-#X connect 1 0 9 0;
-#X connect 1 1 8 0;
-#X connect 1 2 7 0;
-#X connect 2 0 1 0;
-#X connect 3 0 2 0;
-#X connect 8 0 0 0;
-#X connect 9 0 6 0;
-#X restore 506 310 pd stuff;
-#X text 506 242 subpatches:;
-#X obj 15 303 pointer;
-#X msg 27 271 next;
-#X text 75 301 <- object that outputs pointers to scalars;
-#N canvas 13 22 307 198 data2 1;
+#N canvas 424 19 448 608 10;
+#X text 18 478 subpatches:;
+#X obj 21 283 pointer;
+#X msg 36 251 next;
+#X text 73 283 <- object that outputs pointers to scalars;
+#N canvas 385 73 307 198 data2 0;
 #X scalar template2 50 150 30 9 0 \;;
 #X scalar template2 200 100 -20 900 0 \;;
 #X scalar template2 100 100 -50 30 0 \;;
-#X restore 506 265 pd data2;
-#N canvas 315 125 554 155 template2 1;
-#X text 13 79 The template for the two scalars \, as in the last patch
+#X restore 19 503 pd data2;
+#N canvas 368 314 428 153 template2 0;
+#X text 13 99 The template for the two scalars \, as in the last patch
 ;
-#X obj 15 46 filledpolygon 244 q 5 0 0 20 z 40 0;
-#X obj 14 21 struct template2 float x float y float z float q;
-#X restore 506 288 pd template2;
-#X obj 15 355 get template2 x y z q;
-#X floatatom 15 384 5 0 0 0 - - -;
-#X floatatom 76 384 5 0 0 0 - - -;
-#X floatatom 137 384 5 0 0 0 - - -;
-#X floatatom 199 385 5 0 0 0 - - -;
-#X msg 15 246 traverse pd-data2;
-#X obj 59 330 print;
-#X text 111 331 <- this gets a bang when we reach the end;
-#X text 211 353 <- this takes incoming pointers;
-#X text 214 367 and outputs the values of x \, y \, z \, and q.;
-#X text 172 245 <- go to head of list (click first);
-#X text 68 273 <- output next item (click 4 times);
-#X text 14 5 The simplest thing you can do with a collection of scalars
+#X obj 15 66 filledpolygon 244 q 5 0 0 20 z 40 0;
+#X obj 14 41 struct template2 float x float y float z float q;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
+#X restore 19 526 pd template2;
+#X obj 21 335 get template2 x y z q;
+#X floatatom 21 364 5 0 0 0 - - -, f 5;
+#X floatatom 62 364 5 0 0 0 - - -, f 5;
+#X floatatom 103 364 5 0 0 0 - - -, f 5;
+#X floatatom 144 364 5 0 0 0 - - -, f 5;
+#X msg 21 226 traverse pd-data2;
+#X obj 60 310 print;
+#X text 101 310 <- this gets a bang when we reach the end;
+#X text 177 335 <- this takes incoming pointers;
+#X text 180 349 and outputs the values of x \, y \, z \, and q.;
+#X text 138 226 <- go to head of list (click first);
+#X text 76 251 <- output next item (click 4 times);
+#X text 19 36 The simplest thing you can do with a collection of scalars
 (a list) is to traverse it \, getting the numbers back out. This is
 done using two objects \, "pointer" which does the traversal \, and
 "get" which \, given a pointer to a scalar \, extracts numeric quantities
 from it.;
-#X text 14 85 You can send the "pointer" object a "traverse" message
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header getting_data 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 586 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.32. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS data_structure;
+#X text 12 65 DESCRIPTION getting data;
+#X restore 392 588 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 getting data from scalars- Related Help Documents;
+#X restore 103 588 pd References;
+#X obj 6 588 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 100 You can send the [pointer] object a "traverse" message
 to point it to the head of the list. The argument "pd-data2" indicates
 the Pd window named "data2." The head of the list means \, not the
 first scalar in the list \, but the position before the first scalar
 \, which is a valid pointer in Pd but has no data or template.;
-#X text 14 180 The "next" message tells the "pointer" object to go
+#X text 18 175 The "next" message tells the [pointer] object to go
 to the next scalar in the list and output it. If there are no more
 \, "pointer" outputs a bang at right.;
-#X text 19 424 The "get" object takes a pointer \, checks that its
-template agrees with what "get" is expecting \, i.e. \, "template2"
+#X text 18 394 The [get] object takes a pointer \, checks that its
+template agrees with what [get] is expecting \, i.e. \, "template2"
 \, and if so outputs the values of x \, y \, z \, and q in the usual
 reverse order.;
-#X text 18 492 The pointer sent from "pointer" to "get" is an elementary
+#X text 18 447 The pointer sent from [pointer] to [get] is an elementary
 Pd type on a level with "float" and "symbol".;
-#X connect 3 0 8 0;
-#X connect 3 1 14 0;
-#X connect 4 0 3 0;
-#X connect 8 0 9 0;
-#X connect 8 1 10 0;
-#X connect 8 2 11 0;
-#X connect 8 3 12 0;
-#X connect 13 0 3 0;
+#N canvas 42 312 428 290 init 0;
+#X obj 46 179 pointer;
+#X obj 27 85 t b b b;
+#X msg 27 58 bang;
+#X obj 27 31 loadbang;
+#X text 73 58 click here to re-initialize;
+#X text 28 262 Explained later...;
+#X obj 27 231 append template2 x y z q;
+#X msg 66 112 \; pd-data2 clear;
+#X msg 46 152 traverse pd-data2 \, bang;
+#X msg 27 206 50 150 30 9 \, 200 100 -20 900 \, 100 100 -50 30;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Initialization;
+#X connect 0 0 6 4;
+#X connect 1 0 9 0;
+#X connect 1 1 8 0;
+#X connect 1 2 7 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 8 0 0 0;
+#X connect 9 0 6 0;
+#X restore 19 548 pd init;
+#X connect 1 0 6 0;
+#X connect 1 1 12 0;
+#X connect 2 0 1 0;
+#X connect 6 0 7 0;
+#X connect 6 1 8 0;
+#X connect 6 2 9 0;
+#X connect 6 3 10 0;
+#X connect 11 0 1 0;
diff --git a/pd/doc/4.data.structures/03.setting.data.pd b/pd/doc/4.data.structures/03.setting.data.pd
index 1f300ca34..3133282ff 100644
--- a/pd/doc/4.data.structures/03.setting.data.pd
+++ b/pd/doc/4.data.structures/03.setting.data.pd
@@ -1,16 +1,16 @@
 #N struct template3 float x float y float w float h float q;
-#N canvas 401 39 621 469 12;
-#X floatatom 60 371 0 0 0 0 - - -;
-#X floatatom 60 323 0 0 0 0 - - -;
-#X floatatom 60 275 0 0 0 0 - - -;
-#X floatatom 60 227 0 0 0 0 - - -;
-#X floatatom 324 322 0 0 0 0 - - -;
-#X floatatom 283 322 0 0 0 0 - - -;
-#X floatatom 240 322 0 0 0 0 - - -;
-#X obj 197 274 pointer;
-#X msg 205 249 next;
-#X floatatom 197 322 0 0 0 0 - - -;
-#N canvas 19 29 363 341 data3 1;
+#N canvas 433 123 448 481 10;
+#X floatatom 22 351 0 0 0 0 - - -;
+#X floatatom 22 303 0 0 0 0 - - -;
+#X floatatom 22 255 0 0 0 0 - - -;
+#X floatatom 22 207 0 0 0 0 - - -;
+#X floatatom 286 302 0 0 0 0 - - -;
+#X floatatom 245 302 0 0 0 0 - - -;
+#X floatatom 202 302 0 0 0 0 - - -;
+#X obj 159 254 pointer;
+#X msg 167 229 next;
+#X floatatom 159 302 0 0 0 0 - - -;
+#N canvas 429 68 389 382 data3 1;
 #X scalar template3 18 25 43 18 741 \;;
 #X scalar template3 111 109 75 25 72 \;;
 #X scalar template3 111 32 4 15 163 \;;
@@ -19,62 +19,113 @@
 #X scalar template3 173 221 76 48 763 \;;
 #X scalar template3 250 127 18 36 543 \;;
 #X scalar template3 124 210 78 21 107 \;;
-#X scalar template3 264 183 32 32 178 \;;
+#X scalar template3 264 183 1 33 178 \;;
 #X scalar template3 26 28 56 60 132 \;;
 #X scalar template3 2 202 66 2 808 \;;
-#X scalar template3 246 33 74 51 642 \;;
+#X scalar template3 270 46 74 51 881 \;;
 #X scalar template3 214 226 8 43 180 \;;
 #X scalar template3 57 145 51 58 939 \;;
 #X scalar template3 216 102 36 43 505 \;;
 #X scalar template3 166 86 68 9 614 \;;
 #X scalar template3 144 191 56 28 886 \;;
 #X scalar template3 228 2 62 1 758 \;;
-#X scalar template3 168 169 48 22 644 \;;
+#X scalar template3 168 169 28 23 654 \;;
 #X scalar template3 223 248 73 50 727 \;;
-#X restore 269 425 pd data3;
-#N canvas 100 436 466 223 template3 1;
-#X obj 25 68 filledpolygon q 0 1 0 0 w 0 w h 0 h;
-#X obj 26 163 drawnumber q 0 0 0;
-#X text 22 39 five numeric ("float") fields;
-#X text 25 88 drawing a rectangle \, interior color q \, border black
+#X restore 159 400 pd data3;
+#N canvas 145 268 428 247 template3 0;
+#X obj 25 88 filledpolygon q 0 1 0 0 w 0 w h 0 h;
+#X obj 26 183 drawnumber q 0 0 0;
+#X text 22 59 five numeric ("float") fields;
+#X text 25 108 drawing a rectangle \, interior color q \, border black
 and one unit thick \, through the points (0 \, 0) \, (w \, 0) \, (w
 \, h) \, and (0 \, h). Note that the three points containing variables
 become hot spots for mouse dragging.;
-#X text 26 184 Draw the value of q as an Araboc numeral \, at (0 \,
+#X text 26 204 Draw the value of q as an Araboc numeral \, at (0 \,
 0) \, in black.;
-#X obj 24 19 struct template3 float x float y float w float h float
+#X obj 24 39 struct template3 float x float y float w float h float
 q;
-#X restore 269 446 pd template3;
-#N canvas 313 223 587 367 stuff 0;
-#X obj 352 180 pointer;
-#X obj 352 204 t b b p;
-#X obj 222 333 append template3 x y w h q;
-#X obj 288 9 loadbang;
-#X obj 288 62 t b b b;
-#X msg 331 138 traverse pd-data3;
-#X msg 477 136 \; pd-data3 clear;
-#X msg 240 110 0;
-#X obj 187 136 f;
-#X obj 220 136 + 1;
-#X obj 189 112 until;
-#X obj 201 159 sel 20;
-#X obj 251 159 t b;
-#X msg 290 32 bang;
-#X obj 25 237 random 300;
-#X obj 100 237 random 300;
-#X obj 323 236 random 1000;
-#X obj 177 237 random 80;
-#X obj 252 237 random 80;
-#X obj 101 263 - 30;
-#X obj 354 11 inlet;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 setting scalar data- Related Help Documents;
+#X restore 159 421 pd template3;
+#X msg 159 354 remake;
+#X obj 159 278 get template3 x y w h q;
+#X floatatom 318 302 0 0 0 0 - - -;
+#X obj 22 231 set template3 x;
+#X obj 22 279 set template3 y;
+#X obj 22 327 set template3 w;
+#X obj 22 374 set template3 h;
+#X floatatom 22 398 0 0 0 0 - - -;
+#X obj 22 421 set template3 q;
+#X msg 159 206 traverse pd-data3;
+#X text 213 353 <- click to randomize;
+#X text 19 113 Getting parameter values is as in the previous patch
+\; however \, as you traverse the list with "next" messages the new
+pointers are also sent to the five "set" objects. These have as arguments
+the template name and the name of the field they will set. You can
+drag on the five number boxes (after selecting an object with "traverse"
+and "next" messages) to change its location \, shape \, and color.
+;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header setting_data 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 38 The [set] object allows you to change numeric values.
+In this example \, the template specifies five fields describing the
+(x \, y) location \, width \, height \, and color. A new feature is
+that the color is also getting printed out under the rectangles. This
+is done using the "drawnumber" object in the template.;
+#X obj 1 459 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 25 KEYWORDS data_structure;
+#X text 12 65 DESCRIPTION setting data;
+#X restore 392 461 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 setting scalar data- Related Help Documents;
+#X restore 103 461 pd References;
+#X obj 6 461 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#N canvas 313 68 428 426 init 0;
+#X obj 304 205 pointer;
+#X obj 304 229 t b b p;
+#X obj 190 388 append template3 x y w h q;
+#X obj 171 32 loadbang;
+#X obj 171 66 t b b b;
+#X msg 304 183 traverse pd-data3;
+#X msg 270 91 \; pd-data3 clear;
+#X msg 212 117 0;
+#X obj 171 139 f;
+#X obj 204 139 + 1;
+#X obj 171 117 until;
+#X obj 171 161 sel 20;
+#X obj 221 161 t b;
+#X obj 7 291 random 300;
+#X obj 81 291 random 300;
+#X obj 291 291 random 1000;
+#X obj 155 291 random 80;
+#X obj 223 291 random 80;
+#X obj 81 313 - 30;
+#X obj 235 32 inlet;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Initialization;
 #X connect 0 0 1 0;
-#X connect 1 0 14 0;
+#X connect 1 0 13 0;
+#X connect 1 1 14 0;
 #X connect 1 1 15 0;
 #X connect 1 1 16 0;
 #X connect 1 1 17 0;
-#X connect 1 1 18 0;
 #X connect 1 2 2 5;
-#X connect 3 0 13 0;
+#X connect 3 0 4 0;
 #X connect 4 0 10 0;
 #X connect 4 1 5 0;
 #X connect 4 1 7 0;
@@ -88,54 +139,30 @@ q;
 #X connect 11 0 10 1;
 #X connect 11 1 12 0;
 #X connect 12 0 0 0;
-#X connect 13 0 4 0;
-#X connect 14 0 2 0;
-#X connect 15 0 19 0;
-#X connect 16 0 2 4;
-#X connect 17 0 2 2;
-#X connect 18 0 2 3;
-#X connect 19 0 2 1;
-#X connect 20 0 13 0;
-#X restore 269 404 pd stuff;
-#X msg 269 379 remake;
-#X obj 197 298 get template3 x y w h q;
-#X floatatom 356 322 0 0 0 0 - - -;
-#X obj 60 251 set template3 x;
-#X obj 60 299 set template3 y;
-#X obj 60 347 set template3 w;
-#X obj 60 394 set template3 h;
-#X floatatom 60 418 0 0 0 0 - - -;
-#X obj 60 441 set template3 q;
-#X msg 197 226 traverse pd-data3;
-#X text 46 5 The "set" object allows you to change numeric values.
-In this example \, the template specifies five fields describing the
-(x \, y) location \, width \, height \, and color. A new feature is
-that the color is also getting printed out under the rectangles. This
-is done using the "drawnumber" object in the template.;
-#X text 323 378 <- click to randomize;
-#X text 45 99 Getting parameter values is as in the previous patch
-\; however \, as you traverse the list with "next" messages the new
-pointers are also sent to the five "set" objects. These have as arguments
-the template name and the name of the field they will set. You can
-drag on the five number boxes (after selecting an object with "traverse"
-and "next" messages) to change its location \, shape \, and color.
-;
-#X connect 0 0 19 0;
-#X connect 1 0 18 0;
-#X connect 2 0 17 0;
-#X connect 3 0 16 0;
-#X connect 7 0 14 0;
+#X connect 13 0 2 0;
+#X connect 14 0 18 0;
+#X connect 15 0 2 4;
+#X connect 16 0 2 2;
+#X connect 17 0 2 3;
+#X connect 18 0 2 1;
+#X connect 19 0 4 0;
+#X restore 159 379 pd init;
+#X connect 0 0 18 0;
+#X connect 1 0 17 0;
+#X connect 2 0 16 0;
+#X connect 3 0 15 0;
+#X connect 7 0 13 0;
+#X connect 7 0 15 1;
 #X connect 7 0 16 1;
 #X connect 7 0 17 1;
 #X connect 7 0 18 1;
-#X connect 7 0 19 1;
-#X connect 7 0 21 1;
+#X connect 7 0 20 1;
 #X connect 8 0 7 0;
-#X connect 13 0 12 0;
-#X connect 14 0 9 0;
-#X connect 14 1 6 0;
-#X connect 14 2 5 0;
-#X connect 14 3 4 0;
-#X connect 14 4 15 0;
-#X connect 20 0 21 0;
-#X connect 22 0 7 0;
+#X connect 12 0 31 0;
+#X connect 13 0 9 0;
+#X connect 13 1 6 0;
+#X connect 13 2 5 0;
+#X connect 13 3 4 0;
+#X connect 13 4 14 0;
+#X connect 19 0 20 0;
+#X connect 21 0 7 0;
diff --git a/pd/doc/4.data.structures/04.append.pd b/pd/doc/4.data.structures/04.append.pd
index b5c2492b3..f33d1d903 100644
--- a/pd/doc/4.data.structures/04.append.pd
+++ b/pd/doc/4.data.structures/04.append.pd
@@ -1,36 +1,63 @@
-#N canvas 308 71 688 415 12;
-#X obj 421 332 pointer;
-#X obj 108 277 t b b b;
-#X msg 120 241 bang;
-#X text 161 240 click here to re-initialize;
-#X msg 11 313 50 250 30 9 \, 200 200 -20 900 \, 100 200 -50 30;
-#X text 56 27 The objects below put three items in the data window.
-First the window is cleared. Then a "pointer" object is instructed
+#N canvas 424 22 448 416 10;
+#X obj 295 322 pointer;
+#X obj 22 227 t b b b;
+#X msg 22 201 bang;
+#X text 63 200 click here to re-initialize;
+#X msg 22 303 50 250 30 9 \, 200 200 -20 900 \, 100 200 -50 30;
+#X obj 22 356 append template4 x y z q;
+#X msg 295 259 \; pd-data4 clear;
+#N canvas 448 54 315 341 data4 0;
+#X restore 302 196 pd data4;
+#N canvas 15 278 428 148 template4 0;
+#X obj 17 64 filledpolygon 244 q 5 0 0 20 z 40 0;
+#X text 15 89 The template for the two scalars \, as in the last patch
+;
+#X obj 17 39 struct template4 float x float y float z float q;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template- Related Help Documents;
+#X restore 302 223 pd template4;
+#X msg 295 299 traverse pd-data4 \, bang;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header appending_a_scalar
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X text 19 37 The objects below put three items in the data window.
+First the window is cleared. Then a [pointer] object is instructed
 to point to the beginning of the data window ("traverse pd-data") \,
-and to output its value ("bang") to the "append" object. This object
+and to output its value ("bang") to the [append] object. This object
 is then given numeric values to create three items.;
-#X obj 11 336 append template4 x y z q;
-#X msg 421 269 \; pd-data4 clear;
-#N canvas 0 0 315 341 data4 1;
-#X restore 430 219 pd data4;
-#N canvas 15 278 519 148 template4 0;
-#X obj 17 44 filledpolygon 244 q 5 0 0 20 z 40 0;
-#X text 13 79 The template for the two scalars \, as in the last patch
-;
-#X obj 17 19 struct template4 float x float y float z float q;
-#X restore 428 243 pd template4;
-#X msg 421 309 traverse pd-data4 \, bang;
-#X text 57 165 The outlet of "append" is a pointer to the newly created
-scalar. You can pass that on to other append objects if you want to
-build heterogenous lists.;
-#X text 363 375 Updated for Pd version 0.32;
-#X text 57 121 The "append" object is given the argument "template4"
+#X text 19 112 The [append] object is given the argument "template4"
 to specify what kind of data structure to append. The other arguments
 are the names of variables we'll set.;
-#X connect 0 0 6 4;
+#X text 19 155 The outlet of [append] is a pointer to the newly created
+scalar. You can pass that on to other append objects if you want to
+build heterogenous lists.;
+#X obj 1 394 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.37. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS data_structure;
+#X text 12 65 DESCRIPTION appending a scalar;
+#X restore 392 396 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 appending a scalar- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 396 pd References;
+#X obj 6 396 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X connect 0 0 5 4;
 #X connect 1 0 4 0;
-#X connect 1 1 10 0;
-#X connect 1 2 7 0;
+#X connect 1 1 9 0;
+#X connect 1 2 6 0;
 #X connect 2 0 1 0;
-#X connect 4 0 6 0;
-#X connect 10 0 0 0;
+#X connect 4 0 5 0;
+#X connect 9 0 0 0;
diff --git a/pd/doc/4.data.structures/05.array.pd b/pd/doc/4.data.structures/05.array.pd
index 15e43d224..aafe343fe 100644
--- a/pd/doc/4.data.structures/05.array.pd
+++ b/pd/doc/4.data.structures/05.array.pd
@@ -1,120 +1,153 @@
 #N struct template5 float x float y float z float q array bazoo template5-element
 ;
 #N struct template5-element float y;
-#N canvas 67 294 709 456 12;
-#X obj 235 323 pointer;
-#X floatatom 232 183 0 0 0 0 - - -;
-#X msg 235 300 bang;
-#X floatatom 15 200 0 0 0 0 - - -;
-#X floatatom 17 350 0 0 0 0 - - -;
-#X floatatom 235 369 0 0 0 0 - - -;
-#X floatatom 451 276 0 0 0 0 - - -;
-#X obj 451 229 pointer;
-#X obj 318 163 pointer;
-#X msg 449 194 bang;
-#N canvas 0 0 384 196 data5 1;
-#X scalar template5 60 109 30 9 \; 0 \; 0 \; 0 \; 0 \; 0 \; 3 \; 0
-\; 0 \; 0 \; 7 \; -60 \; -66 \; -68 \; -70 \; -88 \; -100 \; -100 \;
-14 \; 12 \; 8 \; 6 \; 2 \; -4 \; -26 \; -34 \; -58 \; -60 \; -66 \;
--66 \; -66 \; -66 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0
-\; 0 \; 0 \; 0 \; 0 \; 43 \; 0 \; 0 \; 0 \; 0 \; \;;
-#X restore 508 314 pd data5;
-#N canvas 470 534 646 260 template5 1;
-#X obj 8 91 filledpolygon 244 q 3 0 0 20 z 40 0;
-#X text 6 44 this declares an array named "bazoo" whose elements are
+#N canvas 424 19 448 473 10;
+#X obj 165 343 pointer;
+#X floatatom 106 168 0 0 0 0 - - -;
+#X msg 165 320 bang;
+#X floatatom 147 270 0 0 0 0 - - -;
+#X floatatom 12 300 0 0 0 0 - - -;
+#X floatatom 165 389 0 0 0 0 - - -;
+#X floatatom 298 293 0 0 0 0 - - -;
+#X obj 298 246 pointer;
+#X obj 282 163 pointer;
+#X msg 298 221 bang;
+#N canvas 454 37 332 220 data5 1;
+#X scalar template5 50 75 30 9 \; 0 \; 0 \; 0 \; 0 \; 0 \; 3 \; 0 \;
+0 \; 0 \; 7 \; -30 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \;
+0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0
+\; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 0 \; 43 \; 0 \;
+0 \; 0 \; 0 \; \;;
+#X restore 315 344 pd data5;
+#N canvas 191 327 428 260 template5 0;
+#X obj 24 125 filledpolygon 244 q 3 0 0 20 z 40 0;
+#X text 22 78 this declares an array named "bazoo" whose elements are
 described by "template5-element." Array declarations take three arguments
 while "float" declarations take only two.;
-#X text 6 136 Here we ask to plot the array \, color 700 \, line width
+#X text 22 170 Here we ask to plot the array \, color 700 \, line width
 3 \, starting location (30 \, 10) relative to the scalar \, points
 spaced 4 apart.;
-#X text 7 186 You can also do (x \, y) plots and/or make the line thickness
-variable---see the help window for "plot".;
-#X obj 6 8 struct template5 float x float y float z float q array bazoo
-template5-element;
-#X obj 8 113 plot bazoo 700 3 30 40 4;
-#X restore 508 337 pd template5;
-#N canvas 65 248 568 128 template5-element 0;
-#X text 12 36 This says that array elements will have a single floating-point
+#X text 23 220 You can also do (x \, y) plots and/or make the line
+thickness variable---see the help window for "plot".;
+#X obj 22 42 struct template5 float x float y float z float q array
+bazoo template5-element;
+#X obj 24 147 plot bazoo 700 3 30 40 4;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
+#X restore 315 367 pd template5;
+#N canvas 65 248 428 149 template5-element 0;
+#X text 19 66 This says that array elements will have a single floating-point
 number named "y". The variable name "y" is automatically assumed to
 control screen height \; if you don't have at least that variable you
 can't plot the array..;
-#X obj 35 11 struct template5-element float y;
-#X restore 508 360 pd template5-element;
-#N canvas 515 84 589 429 stuff 0;
-#X obj 354 163 pointer;
-#X obj 136 102 t b b b;
-#X msg 136 61 bang;
-#X text 170 61 click here to re-initialize;
-#X obj 134 163 append template5 x y z q;
-#X msg 354 100 \; pd-data5 clear;
-#X msg 354 140 traverse pd-data5 \, bang;
-#X msg 283 280 50;
-#X obj 284 307 setsize template5 bazoo;
-#X obj 137 23 loadbang;
-#X msg 134 140 50 150 30 9;
-#X obj 134 191 t b b p;
-#X floatatom 68 327 0 0 0 0 - - -;
-#X floatatom 14 332 0 0 0 0 - - -;
-#X obj 14 376 set template5-element y;
-#X obj 68 350 element template5 bazoo;
-#X obj 20 303 unpack;
-#X msg 12 258 3 5 \, 7 9 \, -30 10 \, 43 45;
+#X obj 22 42 struct template5-element float y;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
+#X restore 315 390 pd template5-element;
+#X msg 282 140 traverse pd-data5 \, next;
+#X obj 298 269 getsize template5 bazoo;
+#X obj 106 190 setsize template5 bazoo;
+#X obj 12 323 set template5-element y;
+#X obj 165 366 get template5-element y;
+#X obj 147 293 element template5 bazoo;
+#X text 19 37 Scalars may contain arrays \, and moreover the elements
+of an array can be of any scalar type (and can have sub-arrays recursively.)
+The type of the element of an array is fixed in the template. In this
+case \, "template5" contains the definition of the top-level scalar
+and "template5-element" is the template of each array element (see
+the template subpatch.);
+#X text 292 121 click to get pointer;
+#X text 298 201 get size;
+#X text 94 148 set size;
+#X text 144 218 select an individual;
+#X text 144 233 element \, which is a;
+#X text 144 248 scalar with template;
+#X text 210 264 template5;
+#X text 12 360 work as before \, but on;
+#X text 12 375 array elements...;
+#X text 12 345 normal "set" amd "get";
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header arrays_in_data_structures
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 451 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.35. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS data_structure;
+#X text 12 65 DESCRIPTION arrays in data structures;
+#X restore 392 453 pd META;
+#N canvas 9 256 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Arrays in Data Structures- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 453 pd References;
+#X obj 6 453 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#N canvas 99 170 428 429 init 0;
+#X obj 163 180 pointer;
+#X obj 22 91 t b b b;
+#X msg 22 66 bang;
+#X text 56 66 click here to re-initialize;
+#X obj 22 202 append template5 x y z q;
+#X msg 163 117 \; pd-data5 clear;
+#X msg 163 157 traverse pd-data5 \, bang;
+#X msg 41 246 50;
+#X obj 41 268 setsize template5 bazoo;
+#X obj 22 42 loadbang;
+#X obj 22 224 t b b p;
+#X floatatom 55 341 0 0 0 0 - - -;
+#X floatatom 22 341 0 0 0 0 - - -;
+#X obj 22 392 set template5-element y;
+#X obj 55 364 element template5 bazoo;
+#X obj 22 317 unpack;
+#X msg 22 295 3 5 \, 7 9 \, -30 10 \, 43 45;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Initialization;
+#X msg 22 180 50 75 30 9;
 #X connect 0 0 4 4;
-#X connect 1 0 10 0;
+#X connect 1 0 19 0;
 #X connect 1 1 6 0;
 #X connect 1 2 5 0;
 #X connect 2 0 1 0;
-#X connect 4 0 11 0;
+#X connect 4 0 10 0;
 #X connect 6 0 0 0;
 #X connect 7 0 8 0;
 #X connect 9 0 2 0;
-#X connect 10 0 4 0;
-#X connect 11 0 17 0;
-#X connect 11 1 7 0;
-#X connect 11 2 8 1;
-#X connect 11 2 15 1;
-#X connect 12 0 15 0;
-#X connect 13 0 14 0;
-#X connect 15 0 14 1;
-#X connect 16 0 13 0;
-#X connect 16 1 12 0;
-#X connect 17 0 16 0;
-#X restore 508 383 pd stuff;
-#X msg 318 140 traverse pd-data5 \, next;
-#X obj 451 252 getsize template5 bazoo;
-#X obj 232 229 setsize template5 bazoo;
-#X obj 17 373 set template5-element y;
-#X obj 235 346 get template5-element y;
-#X obj 15 223 element template5 bazoo;
-#X text 38 15 Scalars may contain arrays \, and moreover the elements
-of an array can be of any scalar type (and can have sub-arrays recursively.)
-The type of the element of an array is fixed in the template. In this
-case \, "template5" contains the definition of the top-level scalar
-and "template5-element" is the template of each array element (see
-the template subpatch.);
-#X text 328 121 click to get pointer;
-#X text 449 173 get size;
-#X text 221 158 set size;
-#X text 16 133 select an individual;
-#X text 16 153 element \, which is a;
-#X text 14 169 scalar with template;
-#X text 104 189 template5;
-#X text 12 413 work as before \, but on;
-#X text 12 433 array elements...;
-#X text 433 424 Updated for Pd version 0.35;
-#X text 17 395 normal "set" amd "get";
-#X connect 0 0 18 0;
-#X connect 1 0 16 0;
+#X connect 10 0 16 0;
+#X connect 10 1 7 0;
+#X connect 10 2 8 1;
+#X connect 10 2 14 1;
+#X connect 11 0 14 0;
+#X connect 12 0 13 0;
+#X connect 14 0 13 1;
+#X connect 15 0 12 0;
+#X connect 15 1 11 0;
+#X connect 16 0 15 0;
+#X connect 19 0 4 0;
+#X restore 315 413 pd init;
+#X connect 0 0 17 0;
+#X connect 1 0 15 0;
 #X connect 2 0 0 0;
-#X connect 3 0 19 0;
-#X connect 4 0 17 0;
-#X connect 7 0 15 0;
-#X connect 8 0 16 1;
-#X connect 8 0 19 1;
+#X connect 3 0 18 0;
+#X connect 4 0 16 0;
+#X connect 7 0 14 0;
+#X connect 8 0 15 1;
+#X connect 8 0 18 1;
 #X connect 8 0 7 0;
 #X connect 9 0 7 0;
-#X connect 14 0 8 0;
-#X connect 15 0 6 0;
-#X connect 18 0 5 0;
-#X connect 19 0 0 0;
-#X connect 19 0 17 1;
+#X connect 13 0 8 0;
+#X connect 14 0 6 0;
+#X connect 17 0 5 0;
+#X connect 18 0 0 0;
+#X connect 18 0 16 1;
diff --git a/pd/doc/4.data.structures/06.file.pd b/pd/doc/4.data.structures/06.file.pd
index 30c902dc6..9977070a3 100644
--- a/pd/doc/4.data.structures/06.file.pd
+++ b/pd/doc/4.data.structures/06.file.pd
@@ -1,44 +1,53 @@
-#N canvas 405 27 291 318 12;
-#N canvas 0 0 377 383 data 1;
-#X restore 40 153 pd data;
-#N canvas 50 470 557 157 template-toplevel 0;
-#X obj 21 94 plot bazoo 700 3 10 20 20;
-#X obj 21 68 drawpolygon q 4 0 0 20 z z -5 10 20;
-#X obj 21 30 struct template-toplevel float x float y float z float
+#N canvas 428 31 448 298 10;
+#N canvas 457 156 377 383 data 1;
+#X restore 22 172 pd data;
+#N canvas 178 228 428 157 template-toplevel 0;
+#X obj 22 106 plot bazoo 700 3 10 20 20;
+#X obj 22 80 drawpolygon q 4 0 0 20 z z -5 10 20;
+#X obj 22 42 struct template-toplevel float x float y float z float
 q array bazoo template-element;
-#X restore 40 174 pd template-toplevel;
-#N canvas 199 231 600 239 template-element 0;
-#X obj 58 83 drawpolygon 10 2 5 0 0 -5 -5 0 0 5 5 0;
-#X obj 59 48 struct template-element float x float y float w;
-#X restore 40 197 pd template-element;
-#X msg 45 16 \; pd-data clear;
-#N canvas 125 240 709 410 traversal 0;
-#X floatatom 212 353 0 0 0 0 - - -;
-#X obj 212 376 set template-toplevel q;
-#X floatatom 212 307 0 0 0 0 - - -;
-#X floatatom 210 255 0 0 0 0 - - -;
-#X floatatom 96 62 0 0 0 0 - - -;
-#X floatatom 97 114 0 0 0 0 - - -;
-#X floatatom 23 144 0 0 0 0 - - -;
-#X floatatom 210 209 0 0 0 0 - - -;
-#X floatatom 617 194 0 0 0 0 - - -;
-#X floatatom 550 192 0 0 0 0 - - -;
-#X floatatom 486 191 0 0 0 0 - - -;
-#X obj 419 116 pointer;
-#X obj 419 168 get template-toplevel x y z q;
-#X msg 450 90 next;
-#X floatatom 419 191 0 0 0 0 - - -;
-#X obj 23 169 set template-element y;
-#X obj 97 137 element template-toplevel bazoo;
-#X obj 96 85 setsize template-toplevel bazoo;
-#X obj 210 232 set template-toplevel x;
-#X obj 210 278 set template-toplevel y;
-#X obj 212 330 set template-toplevel z;
-#X floatatom 22 200 0 0 0 0 - - -;
-#X obj 22 225 set template-element x;
-#X msg 419 67 traverse pd-data \, next;
-#X floatatom 26 258 0 0 0 0 - - -;
-#X obj 26 283 set template-element w;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Toplevel Data Structure Template;
+#X restore 22 194 pd template-toplevel;
+#N canvas 199 231 428 155 template-element 0;
+#X obj 22 67 drawpolygon 10 2 5 0 0 -5 -5 0 0 5 5 0;
+#X obj 22 42 struct template-element float x float y float w;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
+#X restore 22 216 pd template-element;
+#X msg 22 42 \; pd-data clear;
+#N canvas 92 161 428 401 traversal 0;
+#X floatatom 37 298 0 0 0 0 - - -;
+#X obj 37 321 set template-toplevel q;
+#X floatatom 37 252 0 0 0 0 - - -;
+#X floatatom 37 200 0 0 0 0 - - -;
+#X floatatom 7 89 0 0 0 0 - - -;
+#X floatatom 229 129 0 0 0 0 - - -;
+#X floatatom 216 181 0 0 0 0 - - -;
+#X floatatom 37 154 0 0 0 0 - - -;
+#X floatatom 374 362 0 0 0 0 - - -;
+#X floatatom 317 362 0 0 0 0 - - -;
+#X floatatom 260 362 0 0 0 0 - - -;
+#X obj 203 91 pointer;
+#X obj 203 339 get template-toplevel x y z q;
+#X msg 234 65 next;
+#X floatatom 203 362 0 0 0 0 - - -;
+#X obj 216 206 set template-element y;
+#X obj 229 152 element template-toplevel bazoo;
+#X obj 7 112 setsize template-toplevel bazoo;
+#X obj 37 177 set template-toplevel x;
+#X obj 37 223 set template-toplevel y;
+#X obj 37 275 set template-toplevel z;
+#X floatatom 216 229 0 0 0 0 - - -;
+#X obj 216 254 set template-element x;
+#X msg 203 42 traverse pd-data \, next;
+#X floatatom 215 277 0 0 0 0 - - -;
+#X obj 215 302 set template-element w;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Traversing Data Structure;
 #X connect 0 0 1 0;
 #X connect 2 0 20 0;
 #X connect 3 0 19 0;
@@ -64,6 +73,30 @@ q array bazoo template-element;
 #X connect 21 0 22 0;
 #X connect 23 0 11 0;
 #X connect 24 0 25 0;
-#X restore 41 218 pd traversal;
-#X msg 43 55 \; pd-data write xx.txt;
-#X msg 41 102 \; pd-data read file.txt;
+#X restore 22 238 pd traversal;
+#X msg 22 82 \; pd-data write xx.txt;
+#X msg 22 122 \; pd-data read file.txt;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header saving_to_file 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 276 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 25 KEYWORDS data_structure;
+#X text 12 65 DESCRIPTION saving to file;
+#X restore 392 278 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 saving data structures- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 278 pd References;
+#X obj 6 278 pddp/pddplink ../5.reference/pddp/help.pd -text help;
diff --git a/pd/doc/4.data.structures/07.sequencer.pd b/pd/doc/4.data.structures/07.sequencer.pd
index eb323520f..533d08b4c 100644
--- a/pd/doc/4.data.structures/07.sequencer.pd
+++ b/pd/doc/4.data.structures/07.sequencer.pd
@@ -2,20 +2,29 @@
 template-pitch array amp template-amp;
 #N struct template-pitch float x float y float w;
 #N struct template-amp float x float y float w;
-#N canvas 124 61 556 609 12;
-#N canvas 565 104 524 166 template-toplevel 0;
-#X obj 25 86 plot pitch voiceno 3 10 0;
-#X obj 25 113 plot amp 0 3 10 0;
-#X obj 25 21 struct template-toplevel float x float y float voiceno
+#N canvas 424 19 448 576 10;
+#N canvas 95 388 428 166 template-toplevel 0;
+#X obj 25 106 plot pitch voiceno 3 10 0;
+#X obj 25 133 plot amp 0 3 10 0;
+#X obj 25 41 struct template-toplevel float x float y float voiceno
 array pitch template-pitch array amp template-amp;
-#X obj 27 61 filledpolygon 9 9 0 0 -2 0 2 5 2 5 -2;
-#X restore 55 385 pd template-toplevel;
-#N canvas 0 0 419 102 template-amp 0;
-#X obj 15 41 struct template-amp float x float y float w;
-#X restore 55 407 pd template-amp;
-#N canvas 42 221 452 87 template-pitch 0;
-#X obj 21 29 struct template-pitch float x float y float w;
-#X restore 57 430 pd template-pitch;
+#X obj 27 81 filledpolygon 9 9 0 0 -2 0 2 5 2 5 -2;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Top Level Template;
+#X restore 22 340 pd template-toplevel;
+#N canvas 0 0 428 102 template-amp 0;
+#X obj 21 42 struct template-amp float x float y float w;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
+#X restore 22 362 pd template-amp;
+#N canvas 42 221 428 118 template-pitch 0;
+#X obj 22 42 struct template-pitch float x float y float w;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
+#X restore 22 384 pd template-pitch;
 #N canvas 323 50 551 562 synthesis 0;
 #X msg 125 220 next;
 #X msg 108 172 traverse pd-data \, next;
@@ -81,68 +90,81 @@ array pitch template-pitch array amp template-amp;
 #X connect 26 0 27 0;
 #X connect 27 0 28 0;
 #X connect 28 0 14 0;
-#X restore 55 511 pd synthesis;
-#X floatatom 269 464 0 0 0 0 - - -;
-#X msg 55 484 start;
-#X msg 106 484 stop;
-#N canvas 258 114 425 363 data 1;
-#X scalar template-toplevel 22 86 900 \; 0 0 12 \; 10 0 12 \; \; 0
-0 0 \; 10 0 2.5 \; 11 0 0 \; \;;
-#X scalar template-toplevel 33 80 990 \; 0 0 12 \; 10 0 12 \; \; 0
-0 2.5 \; 10 0 2.5 \; 11 0 0 \; \;;
-#X scalar template-toplevel 57 43.25 90 \; 0 65 12 \; 100 10 0 \; 100
-10 12 \; 230 50 0 \; 230 10 3 \; 240 60 0 \; 240 25 10 \; 250 60 0
-\; 250 37 10 \; 260 65 0.5 \; 285 65 0.5 \; \; 1 0 2 \; 103 0 1 \;
-195 0 2 \; 220 0 0.75 \; 225 0 1.25 \; 248 0 2.5 \; 251 0 2.25 \; 255
-0 0 \; 256 0 1.5 \; 260 0 0 \; 261 0 2 \; 265 0 0 \; 266 0 2.5 \; 270
-0 0 \; 271 0 3 \; 275 0 0 \; \;;
-#X scalar template-toplevel 83 80 900 \; 0 5 0.25 \; 60 5 0.25 \; \;
-0 0 0 \; 28 -0.25 3.5 \; 58 -0.25 0 \; \;;
-#X scalar template-toplevel 161 105 900 \; 0 0 12 \; 70 -20 12 \; \;
-0 0 0 \; 10 0 2.5 \; 20 0 0 \; 30 0 0 \; 40 0 2.5 \; 50 0 0 \; 60 0
-2.5 \; 70 0 0 \; \;;
-#X scalar template-toplevel 338 63.5 909 \; 0 0 12 \; 50 0 12 \; \;
-0 0 4 \; 10 0 2.5 \; 50 0 0 \; \;;
-#X coords 0 90.75 1 90.5 0 0 0;
-#X restore 55 364 pd data;
-#N canvas 82 467 332 145 stuff 0;
-#X msg 1 101 \; pd-data write xx.txt;
-#X msg -3 39 \; pd-data read score.txt;
-#X obj 208 7 loadbang;
-#X msg 208 34 \; tempo 60;
-#X msg 198 101 \; pd-data sort;
-#X connect 2 0 3 0;
-#X restore 56 452 pd stuff;
-#X obj 269 417 r tempo;
-#X msg 269 440 set \$1;
-#X obj 269 488 s tempo;
-#X text 13 4 This patch shows an example of how to use data collections
+#X restore 22 462 pd synthesis;
+#X floatatom 176 365 0 0 0 0 - - -;
+#X msg 22 435 start;
+#X msg 73 435 stop;
+#N canvas 386 74 426 367 data 1;
+#X scalar template-toplevel 3 86 0 \; 0 0 0 \; \; 0 0 0 \; \;;
+#X scalar template-toplevel 14 80 0 \; 0 0 0 \; \; 0 0 0 \; \;;
+#X scalar template-toplevel 38 43.25 0 \; 0 0 0 \; \; 0 0 0 \; \;;
+#X scalar template-toplevel 64 80 0 \; 0 0 0 \; \; 0 0 0 \; \;;
+#X scalar template-toplevel 142 105 0 \; 0 0 0 \; \; 0 0 0 \; \;;
+#X scalar template-toplevel 319 63.5 0 \; 0 0 0 \; \; 0 0 0 \; \;;
+#X coords 0 91.75 1 91.5 0 0 0;
+#X restore 22 318 pd data;
+#X obj 176 318 r tempo;
+#X msg 176 341 set \$1;
+#X obj 176 389 s tempo;
+#X text 20 37 This patch shows an example of how to use data collections
 as musical sequences (with apologies to Yuasa and Stockhausen). Here
 the black traces show dynamics and the colored ones show pitch. The
 fatness of the pitch traces give bandwidth. Any of the three can change
 over the life of the event.;
-#X text 11 97 To hear the result \, turn the volume up to 70 or so
+#X text 19 112 To hear the result \, turn the volume up to 70 or so
 (higher if it's not loud enough the first time) and hit "start". You
 can set the tempo lower if that helps you follow the "score" the first
 couple of times.;
-#X text 302 464 <--- tempo;
-#X obj 55 539 output~;
-#X text 304 574 Updated for Pd version 0.39;
-#X text 10 259 This confuses Tk's scroll bars \, by the way \, and
+#X obj 22 490 output~;
+#X text 19 239 This confuses Tk's scroll bars \, by the way \, and
 when you resize the window the image still sticks to the top and not
 the bottom of the window as it should. When you resize a canvas with
 y having positive units (growing upward) \, just hit 'save' and Pd
 will check the scrolling and correct if necessary.;
-#X text 10 161 Note the screen units in the "data" window (open it
+#X text 20 164 Note the screen units in the "data" window (open it
 and get "properties" to see them.) Normally \, there are -1 y units
 per pixel - that is \, adding 1 to y moves down one pixel. This is
 the "natural" y unit for most drawing programs. In the data window
 \, each pixel is 0.25 units \, meaning that adding one to a 'y' value
 moves it up four pixels.;
-#X connect 3 0 15 0;
-#X connect 3 0 15 1;
-#X connect 4 0 11 0;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header sequencer 20 10
+1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 554 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS data_structure GUI;
+#X text 12 65 DESCRIPTION sequencer;
+#X restore 392 556 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 data structure sequencer- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 556 pd References;
+#X obj 6 556 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 209 365 <-- tempo;
+#N canvas 94 417 332 145 init 0;
+#X msg 1 91 \; pd-data write xx.txt;
+#X msg 1 29 \; pd-data read score.txt;
+#X obj 198 27 loadbang;
+#X msg 198 54 \; tempo 60;
+#X msg 198 101 \; pd-data sort;
+#X connect 2 0 3 0;
+#X restore 22 406 pd init;
+#X connect 3 0 13 0;
+#X connect 3 0 13 1;
+#X connect 4 0 10 0;
 #X connect 5 0 3 0;
 #X connect 6 0 3 0;
-#X connect 9 0 10 0;
-#X connect 10 0 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 4 0;
diff --git a/pd/doc/4.data.structures/08.selection.pd b/pd/doc/4.data.structures/08.selection.pd
index 6733ee4d5..d224c9c81 100644
--- a/pd/doc/4.data.structures/08.selection.pd
+++ b/pd/doc/4.data.structures/08.selection.pd
@@ -1,29 +1,29 @@
 #N struct template8 float x float y float w float h float q;
-#N canvas 60 446 586 452 12;
-#X floatatom 53 347 0 0 0 0 - - -;
-#X floatatom 53 299 0 0 0 0 - - -;
-#X floatatom 53 251 0 0 0 0 - - -;
-#X floatatom 53 203 0 0 0 0 - - -;
-#X floatatom 342 283 0 0 0 0 - - -;
-#X floatatom 301 283 0 0 0 0 - - -;
-#X floatatom 258 283 0 0 0 0 - - -;
-#X floatatom 215 283 0 0 0 0 - - -;
-#X floatatom 374 283 0 0 0 0 - - -;
-#X floatatom 53 394 0 0 0 0 - - -;
-#N canvas 19 29 363 341 data8 1;
-#X scalar template8 28 123 0 16 917 \;;
-#X scalar template8 289 213 0 32 66 \;;
+#N canvas 424 22 448 418 10;
+#X floatatom 22 288 0 0 0 0 - - -;
+#X floatatom 22 240 0 0 0 0 - - -;
+#X floatatom 22 192 0 0 0 0 - - -;
+#X floatatom 22 144 0 0 0 0 - - -;
+#X floatatom 285 224 0 0 0 0 - - -;
+#X floatatom 251 224 0 0 0 0 - - -;
+#X floatatom 217 224 0 0 0 0 - - -;
+#X floatatom 184 224 0 0 0 0 - - -;
+#X floatatom 319 224 0 0 0 0 - - -;
+#X floatatom 22 335 0 0 0 0 - - -;
+#N canvas 454 39 363 388 data8 0;
+#X scalar template8 28 123 18 16 917 \;;
+#X scalar template8 297 247 6 32 66 \;;
 #X scalar template8 185 -30 46 71 78 \;;
 #X scalar template8 20 259 49 42 220 \;;
 #X scalar template8 111 142 28 72 634 \;;
 #X scalar template8 249 66 46 11 48 \;;
 #X scalar template8 25 3 70 11 903 \;;
-#X scalar template8 259 -23 10 4 169 \;;
+#X scalar template8 259 -23 21 33 352 \;;
 #X scalar template8 229 116 25 27 710 \;;
 #X scalar template8 281 207 50 25 612 \;;
-#X scalar template8 54 124 62 51 421 \;;
+#X scalar template8 55 114 48 40 321 \;;
 #X scalar template8 176 182 39 66 866 \;;
-#X scalar template8 144 37 27 27 125 \;;
+#X scalar template8 155 69 27 27 125 \;;
 #X scalar template8 115 26 66 32 319 \;;
 #X scalar template8 134 2 50 25 454 \;;
 #X scalar template8 274 58 21 45 583 \;;
@@ -31,51 +31,72 @@
 #X scalar template8 216 190 24 73 214 \;;
 #X scalar template8 215 256 50 78 652 \;;
 #X scalar template8 287 32 72 19 325 \;;
-#X restore 410 359 pd data8;
-#N canvas 280 471 688 314 template8 0;
-#X obj 25 177 filledpolygon q 0 1 0 0 w 0 w h 0 h;
-#X obj 26 200 drawnumber q 0 0 0;
+#X restore 184 280 pd data8;
+#N canvas 206 292 507 237 template8 0;
+#X obj 24 167 filledpolygon q 0 1 0 0 w 0 w h 0 h;
+#X obj 25 190 drawnumber q 0 0 0;
 #X obj 24 19 struct template8 float x float y float w float h float
 q;
 #X obj 24 74 route select;
 #X obj 24 103 outlet;
 #X obj 32 46 print struct-template8;
-#X text 151 72 "struct" outputs messages notifying you when objects
+#X text 131 82 [struct] outputs messages notifying you when objects
 of this structure are selected or deselected. Here we only catch selection.
 ;
 #X connect 2 0 3 0;
 #X connect 2 0 5 0;
 #X connect 3 0 4 0;
-#X restore 215 208 pd template8;
-#X text 46 5 This patch demonstrates catching the selection so you
-can make control panels to edit parameters. The "struct" object outputs
+#X restore 184 144 pd template8;
+#X obj 22 168 set template8 x;
+#X obj 22 216 set template8 y;
+#X obj 22 264 set template8 w;
+#X obj 22 311 set template8 h;
+#X obj 22 358 set template8 q;
+#X obj 184 200 get template8 x y w h q;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header selection 20 10
+1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 396 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS data_structure GUI;
+#X text 12 65 DESCRIPTION selection;
+#X restore 392 398 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 selecting scalars- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 398 pd References;
+#X obj 6 398 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 36 This patch demonstrates catching the selection so you
+can make control panels to edit parameters. The [struct] object outputs
 a pointer to any selected object of type struct8.;
-#X obj 53 227 set template8 x;
-#X obj 53 275 set template8 y;
-#X obj 53 323 set template8 w;
-#X obj 53 370 set template8 h;
-#X obj 53 417 set template8 q;
-#X obj 215 259 get template8 x y w h q;
-#X text 46 68 To try it \, unlock the subpatch (data8) and select something.
-The 5 paramters should show up under the "get" object in this window
-\, and you should be able to change them with the "set" object.;
-#X text 332 405 updated for Pd version 0.39;
-#X text 47 136 The blue "selection" rectangle ought to notice when
-the object that got selected gets moved or resized \, but this isn't
-done yet (as of Pd version 0.39).;
-#X connect 0 0 16 0;
-#X connect 1 0 15 0;
-#X connect 2 0 14 0;
-#X connect 3 0 13 0;
-#X connect 9 0 17 0;
+#X text 19 78 To try it \, unlock the subpatch (data8) and select something.
+The 5 paramters should show up under the [get] object in this window
+\, and you should be able to change them with the [set] object.;
+#X connect 0 0 15 0;
+#X connect 1 0 14 0;
+#X connect 2 0 13 0;
+#X connect 3 0 12 0;
+#X connect 9 0 16 0;
+#X connect 11 0 12 1;
 #X connect 11 0 13 1;
 #X connect 11 0 14 1;
 #X connect 11 0 15 1;
 #X connect 11 0 16 1;
-#X connect 11 0 17 1;
-#X connect 11 0 18 0;
-#X connect 18 0 7 0;
-#X connect 18 1 6 0;
-#X connect 18 2 5 0;
-#X connect 18 3 4 0;
-#X connect 18 4 8 0;
+#X connect 11 0 17 0;
+#X connect 17 0 7 0;
+#X connect 17 1 6 0;
+#X connect 17 2 5 0;
+#X connect 17 3 4 0;
+#X connect 17 4 8 0;
diff --git a/pd/doc/4.data.structures/09.scaling.pd b/pd/doc/4.data.structures/09.scaling.pd
index 8af7d6ffb..10d4b9d1c 100644
--- a/pd/doc/4.data.structures/09.scaling.pd
+++ b/pd/doc/4.data.structures/09.scaling.pd
@@ -1,74 +1,119 @@
 #N struct template9b float x float y float w symbol s;
 #N struct template9a float x float y float a float b float c;
-#N canvas 387 17 573 330 12;
-#X text 319 276 updated for Pd version 0.39;
-#N canvas 1 11 363 341 data9 1;
+#N canvas 424 19 448 294 10;
+#N canvas 427 68 363 341 data9 0;
 #X scalar template9b 222 157 26.3158 why? \;;
-#X scalar template9a 149 243 23 57.1429 32 \;;
+#X scalar template9a 149 223 58 57.1429 40 \;;
 #X scalar template9a 84 80 100 20 32 \;;
 #X coords 0 341 1 340 0 0 0;
-#X restore 22 274 pd data9;
-#N canvas 48 362 604 524 template9a 0;
-#X obj 24 19 struct template9a float x float y float a float b float
+#X restore 23 234 pd data9;
+#N canvas 95 8 428 641 template9a 0;
+#X obj 24 34 struct template9a float x float y float a float b float
 c;
-#X obj 31 380 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X obj 22 420 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 31 402 t b b;
-#X obj 210 461 pointer;
-#X msg 60 430 traverse pd-data9 \, bang;
-#X obj 31 486 append template9a x y a b c;
-#X msg 31 462 50 50 30 20 40;
-#X obj 23 115 drawpolygon 0 1 0 10 0 a(0:100)(10:110) -5 a(0:100)(5:105)
+#X obj 22 442 t b b;
+#X obj 181 502 pointer;
+#X msg 49 470 traverse pd-data9 \, bang;
+#X obj 22 526 append template9a x y a b c;
+#X msg 22 502 50 50 30 20 40;
+#X obj 23 112 drawpolygon 0 1 0 10 0 a(0:100)(10:110) -5 a(0:100)(5:105)
 0 a(0:100)(10:110) 5 a(0:100)(5:105);
-#X obj 25 287 drawcurve 0 1 0 -2 0 3 5 3 5 -8 -13 -8 -13 21;
-#X obj 25 247 drawpolygon 0 1 10 0 c(0:100)(10:110) 0 c(0:100)(5:105)
--5 c(0:100)(10:110) 0 c(0:100)(5:105) 5;
-#X obj 25 193 drawpolygon 0 1 7 7 b(0:100)(7:77) b(0:100)(7:77) b(0:100)(0:70)
+#X obj 22 356 drawcurve 0 1 0 -2 0 3 5 3 5 -8 -13 -8 -13 21;
+#X obj 23 185 drawpolygon 0 1 7 7 b(0:100)(7:77) b(0:100)(7:77) b(0:100)(0:70)
 b(0:100)(7:77) b(0:100)(7:77) b(0:100)(7:77) b(0:100)(7:77) b(0:100)(0:70)
 ;
-#X text 23 50 'a' controls an arrow pointing upward. The main segment
+#X text 20 60 'a' controls an arrow pointing upward. The main segment
 goes from (0.10) to (0 \, a+10). Then we hike 5 units down and left
 \, back to the point \, and then 5 units down and right.;
-#X text 28 154 Slightly more complicated construction to make an arrow
+#X text 20 155 Slightly more complicated construction to make an arrow
 at 45 degrees:;
-#X text 25 330 It's a good practice to put a small patch like this
+#X text 19 375 It's a good practice to put a small patch like this
 one in each template that you can use to make the first one (and will
 often find yourself wanting to use again later):;
+#X text 249 485 or \, if you won't be;
+#X text 249 499 using the pointer that;
+#X text 249 513 comes from the outlet;
+#X msg 161 574 scalar template9a 50 50 30 20 40;
+#X text 249 526 of [append] \, send a;
+#X text 249 540 "scalar" message to;
+#X text 249 553 the subpatch:;
+#X obj 161 618 s pd-data9;
+#X text 173 593 (structName fieldOne \, fieldTwo \, etc.);
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
+#X obj 23 304 drawpolygon 0 1 10 0 c(0:100)(10:110)(20) 0 c(0:100)(5:105)(20)
+-5 c(0:100)(10:110)(20) 0 c(0:100)(5:105)(20) 5;
+#X text 20 240 'c' controls the horizontal arrow. Here we introduce
+the "quantum" value \, which can be added in parentheses after the
+scaling coordinates. This quantizes the arrow so that it moves in steps
+of 20 pixels. As of Pd 0.42 you can only set a literal quantum value
+(you can't use a variable).;
 #X connect 1 0 2 0;
 #X connect 2 0 6 0;
 #X connect 2 1 4 0;
 #X connect 3 0 5 5;
 #X connect 4 0 3 0;
 #X connect 6 0 5 0;
-#X restore 21 224 pd template9a;
-#N canvas 353 371 688 314 template9b 0;
-#X obj 351 176 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X connect 16 0 20 0;
+#X restore 23 190 pd template9a;
+#N canvas 220 239 428 329 template9b 0;
+#X obj 23 195 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 351 196 t b b;
-#X obj 567 254 pointer;
-#X msg 360 227 traverse pd-data9 \, bang;
-#X obj 24 19 struct template9b float x float y float w symbol s;
-#X obj 37 54 filledpolygon 900 0 1 w(0:100)(0:38) w(0:100)(0:92) w(0:100)(0:92)
+#X obj 23 215 t b b;
+#X obj 158 267 pointer;
+#X msg 50 237 traverse pd-data9 \, bang;
+#X obj 22 42 struct template9b float x float y float w symbol s;
+#X obj 22 69 filledpolygon 900 0 1 w(0:100)(0:38) w(0:100)(0:92) w(0:100)(0:92)
 w(0:100)(0:38) w(0:100)(0:92) w(0:100)(0:-38) w(0:100)(0:38) w(0:100)(0:-92)
 w(0:100)(0:-38) w(0:100)(0:-92) w(0:100)(0:-92) w(0:100)(0:-38) w(0:100)(0:-92)
 w(0:100)(0:38) w(0:100)(0:-38) w(0:100)(0:92);
-#X msg 351 257 50 50 30;
-#X obj 352 281 append template9b x y w;
-#X obj 36 171 drawsymbol s w(0:100)(10:-90) 10 0;
+#X msg 23 267 50 50 30;
+#X obj 23 289 append template9b x y w;
+#X obj 23 161 drawsymbol s w(0:100)(10:-90) 10 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
 #X connect 0 0 1 0;
 #X connect 1 0 6 0;
 #X connect 1 1 3 0;
 #X connect 2 0 7 3;
 #X connect 3 0 2 0;
 #X connect 6 0 7 0;
-#X restore 21 248 pd template9b;
-#X text 35 7 Screen dimensions can be tailored to specific ranges by
-adding suffixes in the drawing instructions. For example \, in "template9a"
+#X restore 23 212 pd template9b;
+#X text 19 37 Screen dimensions can be tailored to specific ranges
+by adding suffixes in the drawing instructions. For example \, in "template9a"
 \, a coordinate such as "b(0:100)(7:77)" instructs the drawpolygon
 object to rescale b from the range 0-100 to the range 7-77.;
-#X text 39 93 The application is to introduce an offset to a coordinate.
+#X text 20 101 The application is to introduce an offset to a coordinate.
 For example \, the construction "a(0:100)(10:110)" just gives a+10.
 ;
-#X text 35 147 Each of the three arrows of template9a is controlled
+#X text 20 143 Each of the three arrows of template9a is controlled
 by a single parameter (a \, b \, or c) and the entire red octagon in
 template9b likewise.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header scaling_and_quantization
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 272 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS data_structure GUI;
+#X text 12 65 DESCRIPTION scaling and quantization;
+#X restore 392 274 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 scaling- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 274 pd References;
+#X obj 6 274 pddp/pddplink ../5.reference/pddp/help.pd -text help;
diff --git a/pd/doc/4.data.structures/10.onoff.pd b/pd/doc/4.data.structures/10.onoff.pd
index 2b535b7ce..046de6276 100644
--- a/pd/doc/4.data.structures/10.onoff.pd
+++ b/pd/doc/4.data.structures/10.onoff.pd
@@ -1,51 +1,102 @@
-#N struct template10 float x float y float a float b float c float
-w;
-#N canvas 322 90 571 381 12;
-#X text 315 344 updated for Pd version 0.39;
-#N canvas 36 348 577 459 template10 1;
-#X obj 63 327 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#N struct template10 float x float y float a float b symbol z;
+#N canvas 424 23 448 288 10;
+#N canvas 46 12 428 604 template10 0;
+#X obj 23 478 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 63 349 t b b;
-#X obj 242 408 pointer;
-#X msg 92 377 traverse pd-data10 \, bang;
-#X obj 33 203 drawpolygon 0 1 20 20 20 -20 -20 -20 -20 20 20 20;
-#X obj 33 111 drawcurve -v b 900 2 a(0:100)(0:100) 0 a(0:100)(0:71)
+#X obj 23 500 t b b;
+#X obj 170 554 pointer;
+#X msg 50 522 traverse pd-data10 \, bang;
+#X obj 22 356 drawpolygon 0 1 20 20 20 -20 -20 -20 -20 20 20 20;
+#X obj 22 276 drawcurve -v b 900 2 a(0:100)(0:100) 0 a(0:100)(0:71)
 a(0:100)(0:71) 0 a(0:100)(0:100) a(0:100)(0:-71) a(0:100)(0:71) a(0:100)(0:-100)
 0 a(0:100)(0:-71) a(0:100)(0:-71) 0 a(0:100)(0:-100) a(0:100)(0:71)
 a(0:100)(0:-71) a(0:100)(0:100) 0;
-#X obj 33 274 drawnumber b -10 -30 0;
-#X text 71 86 "circle" of radius a \, visible when b != 0;
-#X obj 63 433 append template10 x y a b;
-#X msg 61 409 50 50 10 1;
-#X obj 24 19 struct template10 float x float y float a float b;
-#X text 23 50 Template demonstrating turning a drawing instruction
+#X obj 22 452 drawnumber b -10 -30 0;
+#X text 20 255 "circle" of radius a \, visible when b != 0;
+#X obj 23 578 append template10 x y a b;
+#X msg 23 554 50 50 10 1;
+#X text 19 37 Template demonstrating turning a drawing instruction
 on and off.;
-#X obj 33 231 loadbang;
-#X obj 33 254 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+#X obj 22 409 loadbang;
+#X obj 22 432 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
 ;
-#X text 63 252 <- show/hide this drawing instruction;
+#X text 52 430 <- show/hide this drawing instruction;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
+#X obj 22 94 route click;
+#X obj 22 136 unpack p;
+#X obj 22 158 t a a;
+#X obj 22 224 set template10 b;
+#X obj 22 180 get template10 b;
+#X obj 22 202 == 0;
+#X text 130 183 By getting and setting the data when;
+#X text 129 198 the scalar is clicked \, we're building our;
+#X obj 280 220 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X text 129 213 own version of [toggle]:;
+#X text 121 138 of actions that are reported to the outlet;
+#X text 121 153 when you manipulate a scalar with the mouse.);
+#X text 121 123 (See the help patch for [struct] for a list;
+#X text 98 93 <-- when the scalar is clicked \, a "click" message;
+#X text 122 108 is sent to the outlet of [struct];
+#X obj 22 72 struct template10 float x float y float a float b symbol
+z;
+#X obj 22 381 drawsymbol z -20 35 617;
 #X connect 0 0 1 0;
 #X connect 1 0 9 0;
 #X connect 1 1 3 0;
 #X connect 2 0 8 4;
 #X connect 3 0 2 0;
 #X connect 9 0 8 0;
-#X connect 12 0 13 0;
-#X connect 13 0 6 0;
-#X restore 22 236 pd template10;
-#N canvas 210 14 324 294 data10 1;
-#X scalar template10 92 193 15 1 40 0 \;;
-#X scalar template10 180 161 15 0 40 0 \;;
+#X connect 11 0 12 0;
+#X connect 12 0 6 0;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
+#X connect 18 0 20 0;
+#X connect 18 1 19 1;
+#X connect 20 0 21 0;
+#X connect 21 0 19 0;
+#X connect 31 0 16 0;
+#X restore 23 201 pd template10;
+#N canvas 385 79 324 294 data10 1;
+#X scalar template10 102 160 15.493 1 click_me \;;
+#X scalar template10 180 161 15 1 and_me! \;;
 #X coords 0 294 1 293 0 0 0;
-#X restore 23 269 pd data10;
-#X text 25 13 Drawing instructions can be dynamically turned on and
-off \, either globally for all data of a given template \, or locally
-according to a data field. In this example the "drawcurve" instruction's
-arguments contain the leading flag "-v b" meaning that its visibility
-is turned on and off by the field b.;
-#X text 25 111 To turn a drawing instruction on and off globally \,
+#X restore 23 228 pd data10;
+#X text 19 112 To turn a drawing instruction on and off globally \,
 send a number to its inlet. By default drawing instructions are initially
 visible \, unless given the "-n" flag.;
-#X text 21 169 Arrays have the additional possibility of turning on
+#X text 20 153 Arrays have the additional possibility of turning on
 and off drawing instructions for their individual points as scalars.
 Use "-vs z" to make the variable z control this.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header drawing_visibility
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 266 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS data_structure GUI;
+#X text 12 65 DESCRIPTION drawing visibility;
+#X restore 392 268 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 drawing visibility;
+#X text 19 37 Links:;
+#X restore 103 268 pd References;
+#X obj 6 268 pddp/pddplink ../5.reference/pddp/help.pd -text help;
+#X text 19 37 Drawing instructions can be dynamically turned on and
+off \, either globally for all data of a given template \, or locally
+according to a data field. In this example the [drawcurve] instruction's
+arguments contain the leading flag "-v b" meaning that its visibility
+is turned on and off by the field b.;
diff --git a/pd/doc/4.data.structures/11.array.controls.pd b/pd/doc/4.data.structures/11.array.controls.pd
index 8e04662f8..ad27a6b47 100644
--- a/pd/doc/4.data.structures/11.array.controls.pd
+++ b/pd/doc/4.data.structures/11.array.controls.pd
@@ -1,49 +1,76 @@
 #N struct template11 float x float y array a template11a;
 #N struct template11a float x float amp float w1 float w2;
-#N canvas 14 266 568 347 12;
-#X text 300 287 updated for Pd version 0.39;
-#N canvas 587 7 540 455 template11 1;
-#X obj 41 303 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#N canvas 424 19 448 287 10;
+#N canvas 38 150 428 395 template11 0;
+#X obj 22 266 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 41 325 t b b;
-#X obj 222 384 pointer;
-#X msg 72 353 traverse pd-data11 \, bang;
-#X obj 43 409 append template11 x y;
-#X msg 41 385 50 50;
-#X obj 23 19 struct template11 float x float y array a template11a
+#X obj 22 288 t b b;
+#X obj 145 340 pointer;
+#X msg 49 310 traverse pd-data11 \, bang;
+#X obj 22 362 append template11 x y;
+#X msg 22 340 50 50;
+#X obj 22 42 struct template11 float x float y array a template11a
 ;
-#X obj 31 254 filledpolygon 0 0 0 0 0 3 0 3 30 0 30 0 0;
-#X obj 31 134 plot -w w1 a 0 2 5 0;
-#X obj 33 190 plot -w w2 a 0 2 5 15;
-#X obj 40 83 plot -y amp(0:100)(0:100) a 500 2 5 30;
-#X text 41 61 Graph (x \, amp) pairs (using "amp" as the "y" field"):
+#X obj 22 227 filledpolygon 0 0 0 0 0 3 0 3 30 0 30 0 0;
+#X obj 22 133 plot -w w1 a 0 2 5 0;
+#X obj 22 182 plot -w w2 a 0 2 5 15;
+#X obj 22 88 plot -y amp(0:100)(0:100) a 500 2 5 30;
+#X text 21 69 Graph (x \, amp) pairs (using "amp" as the "y" field"):
 ;
-#X text 33 108 Graph "w1" as width ("y" is zero);
-#X text 30 168 also "w2" \, at (5 \, 15) to disambiguate the one at
+#X text 21 114 Graph "w1" as width ("y" is zero);
+#X text 21 160 also "w2" \, at (5 \, 15) to disambiguate the one at
 (5 \, 0);
-#X text 28 231 Mark the scalar itself;
+#X text 20 207 Mark the scalar itself;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
 #X connect 0 0 1 0;
 #X connect 1 0 5 0;
 #X connect 1 1 3 0;
 #X connect 2 0 4 2;
 #X connect 3 0 2 0;
 #X connect 5 0 4 0;
-#X restore 40 233 pd template11;
-#N canvas 25 458 313 196 data11 1;
+#X restore 22 173 pd template11;
+#N canvas 478 218 313 196 data11 1;
 #X scalar template11 41 87 \; 2 0 0 0 \; 18 51 7 0 \; 98 41 0 5 \;
 109 0 0 0 \; \;;
 #X coords 0 196 1 195 0 0 0;
-#X restore 51 299 pd data11;
-#N canvas 336 497 561 109 template11a 0;
+#X restore 22 227 pd data11;
+#N canvas 77 231 394 109 template11a 0;
 #X obj 23 19 struct template11a float x float amp float w1 float w2
 ;
-#X restore 47 271 pd template11a;
-#X text 25 13 You can control which variable is used as "x" \, "y"
+#X restore 22 200 pd template11a;
+#X text 19 37 You can control which variable is used as "x" \, "y"
 \, and "width" when plotting an array. In this example a single array
 "a" is plotted three times \, to show the values of the "amp" \, "w1"
 and "w2" fields. This is convenient when you want to have several variables
 in each point of the array and need several traces of the same array
 to visualize it all.;
-#X text 24 127 In this example the array points have no "y" field at
+#X text 19 123 In this example the array points have no "y" field at
 all \, so if no variable is supplied to use instead of "y" \, the array
 is flat along its "x" axis.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header controlling_arrays
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 265 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.39. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS data_structure GUI;
+#X text 12 65 DESCRIPTION controlling arrays;
+#X restore 392 267 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 controlling arrays- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 267 pd References;
+#X obj 6 267 pddp/pddplink ../5.reference/pddp/help.pd -text help;
diff --git a/pd/doc/4.data.structures/12.beat-patterns.pd b/pd/doc/4.data.structures/12.beat-patterns.pd
index 1bcb86944..37ed8709e 100644
--- a/pd/doc/4.data.structures/12.beat-patterns.pd
+++ b/pd/doc/4.data.structures/12.beat-patterns.pd
@@ -1,24 +1,27 @@
 #N struct rect float x float y float w float h;
-#N canvas 193 140 549 265 10;
-#N canvas 457 224 643 316 rect 0;
-#X obj 134 219 pointer;
-#X msg 134 188 traverse pd-test \, bang;
-#X obj 69 99 filledpolygon 0 0 0 0 0 0 h w h w 0 0 0;
-#X obj 46 252 append rect x y w h;
-#X obj 68 76 struct rect float x float y float w float h;
-#X msg 46 219 50 50 50 2;
-#X obj 432 201 r this-ptr;
-#X obj 347 257 s this-ptr;
-#X obj 344 202 r add-rect;
-#X obj 346 232 append rect x y w h;
+#N canvas 424 20 448 188 10;
+#N canvas 127 107 428 301 rect 0;
+#X obj 134 140 pointer;
+#X msg 134 109 traverse pd-test \, bang;
+#X obj 23 65 filledpolygon 0 0 0 0 0 0 h w h w 0 0 0;
+#X obj 23 162 append rect x y w h;
+#X obj 22 42 struct rect float x float y float w float h;
+#X msg 23 140 50 50 50 2;
+#X obj 134 210 r this-ptr;
+#X obj 23 254 s this-ptr;
+#X obj 23 210 r add-rect;
+#X obj 23 232 append rect x y w h;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
 #X connect 0 0 3 4;
 #X connect 1 0 0 0;
 #X connect 5 0 3 0;
 #X connect 6 0 9 4;
 #X connect 8 0 9 0;
 #X connect 9 0 7 0;
-#X restore 27 186 pd rect;
-#N canvas 34 58 616 659 output 1;
+#X restore 22 106 pd rect;
+#N canvas 318 26 616 659 output 0;
 #X scalar rect 57 179 2 10 \;;
 #X scalar rect 82 179 1 10 \;;
 #X scalar rect 107 179 1 10 \;;
@@ -353,8 +356,8 @@
 #X text 305 53 the beats and the lighter ones help;
 #X text 304 73 show the proportions.;
 #X coords 0 659 1 658 0 0 0;
-#X restore 26 208 pd output;
-#N canvas 386 64 781 519 generator 0;
+#X restore 22 128 pd output;
+#N canvas 123 79 781 519 generator 0;
 #X obj 646 4 r start;
 #X obj 645 71 pointer;
 #X obj 646 27 symbol;
@@ -449,7 +452,31 @@
 #X connect 27 0 26 0;
 #X connect 27 0 28 0;
 #X connect 28 0 39 0;
-#X restore 27 166 pd generator;
-#X text 27 21 Example: computing and graphing beat patterns. I made
+#X restore 22 84 pd generator;
+#X text 19 37 Example: computing and graphing beat patterns. I made
 this to make it easier to practice performing a-in-the-time-of-b time
 divisions.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header beat_patterns 20
+10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 166 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for release 0.35. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 25 KEYWORDS data_structure GUI;
+#X text 12 65 DESCRIPTION beat patterns;
+#X restore 392 168 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 beat patterns - Related Help Documents;
+#X restore 103 168 pd References;
+#X obj 6 168 pddp/pddplink ../5.reference/pddp/help.pd -text help;
diff --git a/pd/doc/4.data.structures/13.sliderule.pd b/pd/doc/4.data.structures/13.sliderule.pd
index d149cfa3a..1bb48c2ea 100644
--- a/pd/doc/4.data.structures/13.sliderule.pd
+++ b/pd/doc/4.data.structures/13.sliderule.pd
@@ -1,7 +1,7 @@
 #N struct label float x float y float n;
 #N struct line float x float y float w;
-#N canvas 552 6 487 277 10;
-#N canvas 15 -5 504 847 data 1;
+#N canvas 425 19 448 278 10;
+#N canvas 15 0 504 734 data 0;
 #X scalar label 55 190.999 43 \;;
 #X scalar label 175 196.826 44 \;;
 #X scalar label 175 203 45 \;;
@@ -85,26 +85,32 @@
 #X scalar line 195 709.254 60 \;;
 #X scalar line 195 746.255 60 \;;
 #X scalar line 75 785.456 300 \;;
-#X text 50 -32 Linear frequency chart -- cut this down the middle and
-use as a slide rule to compute frequency shifts. The longer lines are
-staves with the bass and treble clef. The numbers are the MIDI pitches.
-;
-#X text 148 686 36;
-#X text 109 751 zero Hz.;
-#X coords 0 847 1 846 0 0 0;
-#X restore 25 174 pd data;
-#N canvas 308 63 600 392 line 0;
-#X obj 140 114 drawpolygon 0 1 0 0 w 0;
-#X obj 145 63 struct line float x float y float w;
-#X restore 25 195 pd line;
-#N canvas 567 89 600 392 label 0;
-#X obj 140 114 drawnumber n 0 0 0;
-#X obj 145 63 struct label float x float y float n;
-#X restore 25 216 pd label;
-#N canvas 468 99 775 518 generator 0;
+#X text 50 -145 Linear frequency chart -- cut this down the middle
+and use as a slide rule to compute frequency shifts. The longer lines
+are staves with the bass and treble clef. The numbers are the MIDI
+pitches.;
+#X text 148 573 36;
+#X text 109 638 zero Hz.;
+#X coords 0 734 1 733 0 0 0;
+#X restore 22 154 pd data;
+#N canvas 174 102 428 177 line 0;
+#X obj 22 73 drawpolygon 0 1 0 0 w 0;
+#X obj 22 42 struct line float x float y float w;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
+#X restore 22 175 pd line;
+#N canvas 126 179 428 166 label 0;
+#X obj 40 74 drawnumber n 0 0 0;
+#X obj 40 43 struct label float x float y float n;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 Data Structure Template;
+#X restore 22 196 pd label;
+#N canvas 70 76 614 518 generator 0;
 #X obj 353 173 sel 36 60;
-#X obj 457 171 pointer;
-#X msg 457 149 traverse pd-data \, bang;
+#X obj 427 171 pointer;
+#X msg 427 149 traverse pd-data \, bang;
 #X msg 28 11 \; pd-data clear;
 #X obj 146 52 until;
 #X obj 146 76 float;
@@ -193,9 +199,8 @@ staves with the bass and treble clef. The numbers are the MIDI pitches.
 #X connect 29 0 31 0;
 #X connect 30 0 24 0;
 #X connect 31 1 28 0;
-#X restore 25 238 pd generator;
-#X text 53 5 FREQUENCY SHIFTER SLIDE RULE.;
-#X text 23 32 This might help you if you need to compute products of
+#X restore 22 218 pd generator;
+#X text 19 37 This might help you if you need to compute products of
 frequency shifting and/or FM spectra. Print and cut in half down the
 middle. If you know the pitches associated with two frequencies a and
 b \, align the pitch of a on the left side against the zero-frequency
@@ -203,3 +208,27 @@ marker on the right side. Then find the pitch of b on the right \,
 and the matching pitch on the left corresponds to the frequency a+b.
 To get a-b \, find b on the left and look up the corresponding pitch
 on the right.;
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header frequency_shifter_slide_rule
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 256 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 25 KEYWORDS data_structure GUI;
+#X text 12 65 DESCRIPTION frequency shifter slide rule;
+#X restore 392 258 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 frequency shifter slide rule- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 258 pd References;
+#X obj 6 258 pddp/pddplink ../5.reference/pddp/help.pd -text help;
diff --git a/pd/doc/4.data.structures/14.partialtracer.pd b/pd/doc/4.data.structures/14.partialtracer.pd
index b8b300419..2196a3ab5 100644
--- a/pd/doc/4.data.structures/14.partialtracer.pd
+++ b/pd/doc/4.data.structures/14.partialtracer.pd
@@ -1,1906 +1,40 @@
-#N struct peak-template float x float y float amp float ampreal float
-ampimag float used;
-#N struct trace-template float x float y float voiceno array bazoo
-point-template;
-#N struct point-template float y float amp;
-#N canvas 151 184 913 595 12;
+#N canvas 269 21 913 627 10;
 #X declare -path lib;
-#X floatatom 777 74 0 0 100 0 - - -;
+#X floatatom 777 94 0 0 100 0 - - -;
 #N canvas 516 98 663 557 (subpatch) 0;
 #X obj 103 108 outlet;
 #X msg 101 80 set \$1;
 #X obj 103 57 r osc-amp;
 #X connect 1 0 0 0;
 #X connect 2 0 1 0;
-#X restore 777 52 pd;
-#X obj 777 100 s osc-amp;
-#X obj 121 511 pack 0 100;
-#X obj 122 533 line~;
-#X obj 121 489 dbtorms;
-#X obj 122 573 *~;
-#X floatatom 827 245 0 0 0 0 - - -;
-#X msg 668 269 0;
-#X floatatom 737 224 0 0 0 0 - - -;
-#X floatatom 838 290 0 0 0 0 - - -;
-#X floatatom 647 74 0 0 110 0 - - -;
+#X restore 777 72 pd;
+#X obj 777 120 s osc-amp;
+#X obj 121 501 pack 0 100;
+#X obj 122 523 line~;
+#X obj 121 479 dbtorms;
+#X obj 122 563 *~;
+#X floatatom 827 265 0 0 0 0 - - -;
+#X msg 668 289 0;
+#X floatatom 737 244 0 0 0 0 - - -;
+#X floatatom 838 310 0 0 0 0 - - -;
+#X floatatom 647 94 0 0 110 0 - - -;
 #N canvas 516 98 663 555 (subpatch) 0;
 #X obj 103 108 outlet;
 #X msg 101 80 set \$1;
 #X obj 103 57 r grain-amp;
 #X connect 1 0 0 0;
 #X connect 2 0 1 0;
-#X restore 647 51 pd;
+#X restore 647 71 pd;
 #N canvas 168 244 589 236 peak-template 0;
 #X obj 81 52 filledpolygon 3 3 3 0 0 0 amp 0 0;
 #X obj 74 10 struct peak-template float x float y float amp float ampreal
 float ampimag float used;
 #X restore 417 525 pd peak-template;
-#N canvas 0 0 600 386 peak-list 0;
-#X scalar peak-template 15.9467 330 -253.674 -0.0844133 0.146416 0
-\;;
-#X scalar peak-template 8.09598 330 -245.031 -0.108977 0.0532605 0
-\;;
-#X scalar peak-template 21.9063 330 -199.607 0.00667671 -0.0201446
-0 \;;
-#X scalar peak-template 31.1714 330 -199.12 -0.0160738 -0.0132466 0
-\;;
-#X scalar peak-template 37.8022 330 -186.266 0.0101767 -0.00762842
-0 \;;
-#X scalar peak-template 45.3485 330 -173.243 0.00456202 0.00622276
-0 \;;
-#X scalar peak-template 220.731 330 -164.961 0.00271995 0.00491236
-0 \;;
-#X scalar peak-template 55.8179 330 -162.658 -0.00364488 -0.00362429
-0 \;;
-#X scalar peak-template 214.238 330 -156.636 0.00401103 0.000744068
-0 \;;
-#X scalar peak-template 230.388 330 -142.193 -0.00175354 -0.0015548
-0 \;;
-#X scalar peak-template 205.698 330 -136.685 -0.000451969 -0.00184241
-0 \;;
-#X scalar peak-template 236.853 330 -132.195 -0.000800519 -0.00138166
-0 \;;
-#X scalar peak-template 70.1927 330 -129.01 0.000948858 -0.00104714
-0 \;;
-#X scalar peak-template 60.6268 330 -128.771 -0.000107767 -0.00139602
-0 \;;
-#X scalar peak-template 199.238 330 -125.184 -5.52672e-05 -0.00121886
-0 \;;
-#X scalar peak-template 102.316 330 -124.61 -0.00091363 -0.000768004
-0 \;;
-#X scalar peak-template 244.64 330 -122.315 0.000568953 -0.000933157
-0 \;;
-#X scalar peak-template 183.608 330 -113.564 -0.0006863 0.000373102
-0 \;;
-#X scalar peak-template 190.466 330 -112.684 -0.000702547 0.000277036
-0 \;;
-#X scalar peak-template 84.4484 330 -116.206 0.000855313 -0.000125835
-0 \;;
-#X scalar peak-template 110.15 330 -115.035 -0.0001249 -0.000817018
-0 \;;
-#X scalar peak-template 174.384 330 -107.641 0.000516575 0.000347021
-0 \;;
-#X scalar peak-template 80.1102 330 -113.14 0.000618534 0.000456134
-0 \;;
-#X scalar peak-template 739.645 330 -113.263 -0.00061248 0.000470234
-0 \;;
-#X scalar peak-template 141.831 330 -105.395 -0.000346359 0.000453871
-0 \;;
-#X restore 298 457 pd peak-list;
-#N canvas 74 441 745 526 trace-list 1;
-#X scalar trace-template 0 0 3 \; 57.4756 71.1499 \; 56.6996 79.7329
-\; \;;
-#X scalar trace-template 0 0 6 \; 68.7958 68.5415 \; \;;
-#X scalar trace-template 0 0 10 \; 72.1585 54.0198 \; 72.027 60.6226
-\; 71.5842 61.862 \; 71.091 60.5141 \; 70.3611 60.3523 \; 70.9366 54.7085
-\; 71.0735 52.2826 \; 71.3993 48.898 \; 70.4122 43.0506 \; 70.6467
-35.4039 \; \;;
-#X scalar trace-template 0 0 13 \; 75.1361 54.1268 \; 74.826 58.9083
-\; 74.8015 58.2652 \; \;;
-#X scalar trace-template 0 0 16 \; 93.8916 49.7957 \; \;;
-#X scalar trace-template 0 0 18 \; 104.549 52.3586 \; \;;
-#X scalar trace-template 0 0 22 \; 107.047 51.1394 \; 107.037 52.8323
-\; 107.007 55.1471 \; \;;
-#X scalar trace-template 5 0 1 \; 55.8012 81.4728 \; 55.5341 82.4149
-\; 55.0362 84.3325 \; 54.925 85.5837 \; 54.9055 86.3615 \; 54.6702
-85.9042 \; 54.1036 83.7372 \; 53.7571 78.7488 \; 53.3201 72.8738 \;
-54.8047 58.1952 \; \;;
-#X scalar trace-template 5 0 5 \; 98.2897 56.9831 \; 98.2967 56.5387
-\; 98.2076 57.7703 \; \;;
-#X scalar trace-template 5 0 6 \; 105.674 54.2495 \; 105.673 56.157
-\; 105.679 54.3729 \; 105.672 45.7686 \; \;;
-#X scalar trace-template 5 0 14 \; 105.203 57.7523 \; 105.214 57.8342
-\; 105.26 54.0331 \; \;;
-#X scalar trace-template 5 0 16 \; 105.27 55.7998 \; \;;
-#X scalar trace-template 5 0 18 \; 96.3372 53.1138 \; \;;
-#X scalar trace-template 5 0 24 \; 91.5376 52.4183 \; 91.6323 55.6354
-\; \;;
-#X scalar trace-template 10 0 3 \; 92.8153 56.7736 \; 92.69 53.7227
-\; \;;
-#X scalar trace-template 10 0 7 \; 73.8193 56.4623 \; 74.0778 57.8288
-\; 73.8012 54.3914 \; 73.8703 48.2022 \; \;;
-#X scalar trace-template 10 0 16 \; 97.4895 56.1181 \; 97.4097 61.4156
-\; 97.3372 59.4565 \; 97.2453 55.0281 \; 97.1582 53.561 \; \;;
-#X scalar trace-template 10 0 18 \; 94.5248 54.9649 \; \;;
-#X scalar trace-template 10 0 20 \; 99.3492 54.9459 \; \;;
-#X scalar trace-template 15 0 9 \; 58.751 69.2183 \; \;;
-#X scalar trace-template 15 0 13 \; 68.7707 65.5664 \; 69.4343 58.9916
-\; 69.2403 51.8567 \; 69.4641 51.8688 \; \;;
-#X scalar trace-template 15 0 15 \; 64.2458 66.3536 \; 64.7097 63.8999
-\; \;;
-#X scalar trace-template 15 0 17 \; 98.12 61.6584 \; 98.0759 59.3161
-\; 97.9283 57.2672 \; 97.9042 54.345 \; 97.9775 46.6193 \; 98.0437
-30.8392 \; \;;
-#X scalar trace-template 15 0 18 \; 93.6311 57.6541 \; \;;
-#X scalar trace-template 15 0 20 \; 72.1465 57.592 \; 72.7218 50.7256
-\; 72.6739 45.163 \; 72.827 47.7164 \; 72.347 45.3634 \; 73.2437 34.8942
-\; 72.4919 36.8733 \; \;;
-#X scalar trace-template 15 0 21 \; 98.5137 55.6623 \; 98.3772 57.2168
-\; 98.3283 56.7836 \; 98.2853 50.0495 \; \;;
-#X scalar trace-template 15 0 22 \; 96.7609 53.9646 \; 96.7573 57.3216
-\; 96.901 56.4167 \; 96.8986 50.763 \; 96.7653 41.0124 \; 96.6051 27.4919
-\; 96.6915 31.3266 \; \;;
-#X scalar trace-template 15 0 23 \; 96.6599 57.643 \; \;;
-#X scalar trace-template 15 0 24 \; 25.1619 51.7721 \; \;;
-#X scalar trace-template 20 0 3 \; 97.5703 59.4746 \; 97.639 61.3037
-\; 97.5821 52.7502 \; 97.4317 49.262 \; 97.3345 37.6363 \; \;;
-#X scalar trace-template 20 0 5 \; 99.0862 52.1441 \; 98.9966 52.2653
-\; 98.9366 43.5301 \; 98.7499 39.1149 \; \;;
-#X scalar trace-template 20 0 8 \; 88.7439 52.1357 \; 88.6063 48.607
-\; 88.4629 45.3163 \; 88.5646 37.1753 \; \;;
-#X scalar trace-template 20 0 9 \; 76.6582 50.6773 \; 76.4757 47.9655
-\; 76.0797 45.6933 \; 76.0124 41.2622 \; 76.111 34.2795 \; 75.815 34.9297
-\; \;;
-#X scalar trace-template 20 0 14 \; 89.9143 50.7512 \; 89.8175 48.7246
-\; 89.5803 46.0486 \; 89.5973 36.8849 \; \;;
-#X scalar trace-template 20 0 18 \; 90.3997 50.2411 \; 90.3685 46.0385
-\; \;;
-#X scalar trace-template 20 0 19 \; 92.007 47.4144 \; \;;
-#X scalar trace-template 20 0 23 \; 95.9485 49.755 \; 96.1285 47.8386
-\; 96.1404 43.5474 \; \;;
-#X scalar trace-template 20 0 24 \; 90.9179 47.4232 \; 90.9154 45.4841
-\; 90.6842 43.4723 \; 90.7132 33.3246 \; \;;
-#X scalar trace-template 25 0 6 \; 96.4763 48.1872 \; \;;
-#X scalar trace-template 25 0 11 \; 89.3172 47.7196 \; \;;
-#X scalar trace-template 25 0 12 \; 82.8228 46.0375 \; 82.846 40.9498
-\; 83.1092 38.7591 \; \;;
-#X scalar trace-template 25 0 15 \; 95.2468 44.5831 \; \;;
-#X scalar trace-template 25 0 19 \; 99.7228 45.2257 \; \;;
-#X scalar trace-template 30 0 6 \; 97.7405 56.7114 \; \;;
-#X scalar trace-template 30 0 7 \; 98.4639 50.9759 \; \;;
-#X scalar trace-template 30 0 11 \; 99.0794 45.8889 \; \;;
-#X scalar trace-template 30 0 15 \; 91.7936 43.9899 \; 91.9119 38.476
-\; 91.7941 27.6638 \; \;;
-#X scalar trace-template 30 0 18 \; 96.3046 44.1244 \; \;;
-#X scalar trace-template 30 0 19 \; 84.3616 43.0986 \; 84.4914 38.6378
-\; 84.5763 32.2108 \; \;;
-#X scalar trace-template 35 0 4 \; 64.8609 62.0142 \; 64.3096 52.2251
-\; 63.9179 47.4607 \; 65.1468 51.9224 \; \;;
-#X scalar trace-template 35 0 6 \; 67.279 52.6475 \; 67.0166 51.557
-\; 66.7609 42.7254 \; 66.2104 53.6697 \; \;;
-#X scalar trace-template 35 0 7 \; 79.7413 38.9881 \; 79.9646 31.0069
-\; \;;
-#X scalar trace-template 35 0 11 \; 117.599 38.2206 \; 117.635 33.6855
-\; \;;
-#X scalar trace-template 35 0 13 \; 117.527 36.493 \; 117.488 26.9096
-\; \;;
-#X scalar trace-template 35 0 16 \; 83.4012 38.8664 \; 83.5996 31.6635
-\; 83.5749 37.3988 \; \;;
-#X scalar trace-template 35 0 18 \; 117.755 36.44 \; \;;
-#X scalar trace-template 35 0 21 \; 95.2338 33.5163 \; \;;
-#X scalar trace-template 35 0 23 \; 107.704 35.4627 \; 107.721 31.1631
-\; \;;
-#X scalar trace-template 40 0 2 \; 59.333 58.52 \; \;;
-#X scalar trace-template 40 0 5 \; 4.76558 44.7982 \; \;;
-#X scalar trace-template 40 0 8 \; 117.837 33.3774 \; \;;
-#X scalar trace-template 40 0 12 \; 97.1803 35.0264 \; \;;
-#X scalar trace-template 40 0 14 \; 117.68 34.5832 \; \;;
-#X scalar trace-template 40 0 18 \; 98.3911 24.5617 \; \;;
-#X scalar trace-template 40 0 21 \; 84.8597 30.5339 \; \;;
-#X scalar trace-template 40 0 24 \; 107.784 31.1939 \; \;;
-#X scalar trace-template 45 0 2 \; 51.6483 69.8412 \; \;;
-#X scalar trace-template 45 0 3 \; 62.8352 45.6144 \; 61.4115 49.4289
-\; \;;
-#X scalar trace-template 45 0 5 \; 76.485 38.5394 \; \;;
-#X scalar trace-template 45 0 7 \; 67.5763 45.6307 \; 67.4925 51.1622
-\; \;;
-#X scalar trace-template 45 0 8 \; 82.1746 36.9205 \; \;;
-#X scalar trace-template 45 0 11 \; 74.7603 34.7385 \; \;;
-#X scalar trace-template 45 0 12 \; 114.054 32.9146 \; 114.149 57.9938
-\; \;;
-#X scalar trace-template 45 0 13 \; 106.111 31.5629 \; \;;
-#X scalar trace-template 45 0 14 \; 119.151 29.1117 \; \;;
-#X scalar trace-template 45 0 15 \; 106.523 30.406 \; 106.52 52.0421
-\; 106.622 58.7555 \; 106.654 60.575 \; 106.665 57.6211 \; \;;
-#X scalar trace-template 45 0 17 \; 104.801 29.8914 \; 104.741 48.5498
-\; \;;
-#X scalar trace-template 45 0 18 \; 109.541 29.1446 \; 109.544 47.4596
-\; \;;
-#X scalar trace-template 45 0 19 \; 119.001 26.5122 \; \;;
-#X scalar trace-template 45 0 21 \; 118.523 27.2134 \; \;;
-#X scalar trace-template 45 0 23 \; 92.9503 28.7476 \; \;;
-#X scalar trace-template 45 0 24 \; 118.577 28.7577 \; 118.669 51.6144
-\; \;;
-#X scalar trace-template 50 0 2 \; 113.879 55.3717 \; 113.876 63.208
-\; 113.879 63.7127 \; 113.913 58.2536 \; 113.967 54.0574 \; \;;
-#X scalar trace-template 50 0 5 \; 105.25 56.3462 \; \;;
-#X scalar trace-template 50 0 8 \; 114.186 56.2486 \; 114.17 61.7646
-\; \;;
-#X scalar trace-template 50 0 9 \; 115.369 51.8212 \; 115.396 58.0459
-\; 115.404 58.493 \; \;;
-#X scalar trace-template 50 0 10 \; 105.314 55.0189 \; \;;
-#X scalar trace-template 50 0 11 \; 59.7326 50.1854 \; \;;
-#X scalar trace-template 50 0 13 \; 113.553 48.8139 \; \;;
-#X scalar trace-template 50 0 14 \; 114.65 48.9427 \; \;;
-#X scalar trace-template 50 0 16 \; 105.745 48.636 \; 105.679 57.4135
-\; 105.528 61.5143 \; 105.528 62.5137 \; 105.518 58.751 \; 105.472
-52.909 \; \;;
-#X scalar trace-template 50 0 19 \; 114.444 47.8306 \; \;;
-#X scalar trace-template 50 0 20 \; 116.679 45.6275 \; \;;
-#X scalar trace-template 50 0 21 \; 118.699 52.0059 \; \;;
-#X scalar trace-template 50 0 22 \; 104.27 43.0814 \; \;;
-#X scalar trace-template 50 0 23 \; 91.7498 44.214 \; \;;
-#X scalar trace-template 55 0 1 \; 108.535 61.6816 \; 108.532 63.3951
-\; 108.509 58.7369 \; \;;
-#X scalar trace-template 55 0 3 \; 43.4621 60.557 \; \;;
-#X scalar trace-template 55 0 4 \; 111.754 62.3488 \; 111.753 62.0433
-\; \;;
-#X scalar trace-template 55 0 5 \; 93.4812 61.1796 \; 93.4064 62.1943
-\; 93.3087 61.1056 \; 93.2521 59.2244 \; 93.3045 53.8694 \; \;;
-#X scalar trace-template 55 0 6 \; 106.037 59.2202 \; 106.032 64.9245
-\; 106.028 65.718 \; 105.99 61.6129 \; 105.946 54.7512 \; 105.902 53.4521
-\; 105.826 59.7742 \; \;;
-#X scalar trace-template 55 0 7 \; 94.0043 59.8076 \; 94.0496 64.4823
-\; 94.0766 67.4586 \; 94.0832 66.5081 \; 94.0858 60.4824 \; 94.0519
-57.3767 \; 93.9501 59.9649 \; 93.8858 62.4423 \; 93.9548 61.1516 \;
-\;;
-#X scalar trace-template 55 0 10 \; 115.829 60.8003 \; 115.828 59.5409
-\; \;;
-#X scalar trace-template 55 0 11 \; 99.9991 60.2356 \; 99.9902 60.3169
-\; \;;
-#X scalar trace-template 55 0 12 \; 98.0686 60.0103 \; 98.0528 59.9308
-\; 97.9925 57.6906 \; 97.8859 56.8807 \; 97.809 55.4109 \; 97.7985
-57.8828 \; 97.8873 62.7719 \; 97.9727 67.3879 \; 98.0639 68.5004 \;
-98.1988 66.872 \; 98.2398 63.897 \; 98.3118 56.738 \; 98.3355 49.9897
-\; 98.3369 51.8101 \; 98.3943 55.808 \; \;;
-#X scalar trace-template 55 0 13 \; 77.0215 60.4598 \; \;;
-#X scalar trace-template 55 0 14 \; 99.5903 58.7265 \; 99.6018 60.2019
-\; 99.634 59.678 \; 99.6371 57.6768 \; 99.5831 54.2244 \; 99.6482 56.5613
-\; 99.658 62.8188 \; 99.6985 67.8082 \; 99.7882 68.3324 \; 99.9258
-68.5941 \; 100.001 67.102 \; 100.071 59.6095 \; \;;
-#X scalar trace-template 55 0 17 \; 106.329 58.0421 \; \;;
-#X scalar trace-template 55 0 18 \; 118.448 58.3807 \; \;;
-#X scalar trace-template 55 0 19 \; 98.5344 58.6314 \; \;;
-#X scalar trace-template 55 0 20 \; 114.218 57.2896 \; 114.196 60.8147
-\; 114.247 57.8065 \; \;;
-#X scalar trace-template 55 0 21 \; 74.1551 58.6946 \; \;;
-#X scalar trace-template 55 0 22 \; 108.876 57.4218 \; 108.884 59.8044
-\; 108.887 56.5772 \; \;;
-#X scalar trace-template 55 0 23 \; 99.223 57.731 \; 99.2411 58.3133
-\; 99.2309 59.3052 \; 99.2284 58.1737 \; 99.2168 53.516 \; \;;
-#X scalar trace-template 55 0 24 \; 108.273 57.9692 \; \;;
-#X scalar trace-template 60 0 3 \; 104.792 60.4364 \; 104.779 58.7978
-\; \;;
-#X scalar trace-template 60 0 8 \; 92.8342 60.3298 \; 92.8528 60.5127
-\; 92.5407 53.981 \; \;;
-#X scalar trace-template 60 0 13 \; 94.4643 58.0916 \; 94.6355 58.0613
-\; 94.679 57.0481 \; 94.74 56.2747 \; 94.5523 55.6712 \; \;;
-#X scalar trace-template 60 0 17 \; 104.266 58.7875 \; 104.251 61.1319
-\; 104.242 58.8205 \; 104.241 52.5004 \; \;;
-#X scalar trace-template 60 0 18 \; 117.546 59.4428 \; 117.55 56.2746
-\; \;;
-#X scalar trace-template 60 0 19 \; 111.313 58.7874 \; 111.309 56.6006
-\; \;;
-#X scalar trace-template 60 0 21 \; 114.438 58.3491 \; 114.446 57.5028
-\; \;;
-#X scalar trace-template 60 0 24 \; 109.131 58.3358 \; \;;
-#X scalar trace-template 65 0 4 \; 104.882 49.0181 \; 104.859 55.5088
-\; \;;
-#X scalar trace-template 65 0 9 \; 50.5129 58.1022 \; 52.0422 62.4943
-\; \;;
-#X scalar trace-template 65 0 10 \; 104.938 57.3005 \; \;;
-#X scalar trace-template 65 0 11 \; 113.423 58.2578 \; 113.396 53.8867
-\; \;;
-#X scalar trace-template 65 0 24 \; 103.921 58.4253 \; 103.965 56.4895
-\; \;;
-#X scalar trace-template 70 0 1 \; 28.7656 65.6265 \; 30.4187 56.1352
-\; 20.9307 55.7277 \; \;;
-#X scalar trace-template 70 0 3 \; 44.3816 62.7999 \; 45.3064 79.4637
-\; 46.0318 82.7263 \; 46.2638 86.5013 \; 46.6024 87.3288 \; 46.8569
-86.6402 \; 46.917 85.573 \; 47.0133 84.9324 \; 47.2429 84.8494 \; 47.5238
-85.098 \; 47.6638 85.1508 \; 47.4935 84.5333 \; 47.0848 83.4253 \;
-46.5846 82.5027 \; 46.158 82.0857 \; 45.8538 82.0532 \; 45.7845 81.8161
-\; 45.271 80.7153 \; 44.9272 79.1805 \; 44.6754 78.1312 \; 44.176 77.6596
-\; 44.0203 77.6338 \; 44.5443 80.211 \; 44.7524 82.0784 \; 44.5238
-83.859 \; 44.5432 84.6691 \; 44.4566 84.8053 \; 44.3101 83.2943 \;
-43.4597 79.1389 \; 43.0261 71.7648 \; 42.9685 61.5879 \; \;;
-#X scalar trace-template 70 0 10 \; 66.028 56.9894 \; 65.9473 66.2473
-\; 66.2148 73.5068 \; 66.3251 79.2535 \; 66.3195 82.2919 \; 66.223
-82.904 \; 66.1099 82.4279 \; 66.0253 81.3052 \; 65.9722 78.2544 \;
-66.2036 72.5636 \; 66.3236 66.8396 \; 66.0337 64.6209 \; 65.5822 67.3236
-\; 65.2495 73.3914 \; 64.9661 78.6321 \; 64.8079 81.7467 \; 64.6581
-81.0436 \; 64.178 76.2971 \; 64.0002 66.4944 \; 63.0613 51.8605 \;
-\;;
-#X scalar trace-template 70 0 15 \; 54.1281 59.7815 \; 53.8668 62.0644
-\; \;;
-#X scalar trace-template 70 0 18 \; 104.683 55.9118 \; 104.658 50.6814
-\; 104.71 51.4453 \; 104.659 56.6503 \; 104.631 62.6507 \; 104.543
-61.3073 \; 104.488 61.5049 \; 104.41 63.3451 \; 104.469 57.9746 \;
-104.532 44.7933 \; \;;
-#X scalar trace-template 70 0 19 \; 59.5975 58.5012 \; 59.0246 64.932
-\; 58.8337 75.1344 \; 58.8721 80.6605 \; 58.8335 82.3774 \; 58.797
-81.5338 \; 58.9634 80.3942 \; 59.1204 80.149 \; 59.2536 80.8596 \;
-59.3481 81.568 \; 59.2892 81.97 \; 59.0309 81.9452 \; 58.8996 82.1376
-\; 58.7961 82.8746 \; 58.4282 83.9642 \; 58.118 84.3872 \; 57.4864
-82.7859 \; 56.213 81.2494 \; 55.9459 80.4686 \; 56.4277 80.3121 \;
-56.8306 80.2673 \; 57.3033 80.5597 \; 57.1452 81.0683 \; 56.6141 81.951
-\; 56.4287 82.1288 \; 56.3809 81.5032 \; 56.0749 79.8672 \; 55.7657
-75.9288 \; 54.7572 68.3138 \; 53.0913 58.55 \; \;;
-#X scalar trace-template 70 0 20 \; 97.5191 54.9218 \; 97.5905 54.0471
-\; \;;
-#X scalar trace-template 70 0 21 \; 100.908 55.2177 \; 100.895 50.5504
-\; \;;
-#X scalar trace-template 70 0 22 \; 60.661 57.6485 \; \;;
-#X scalar trace-template 75 0 0 \; 47.1446 79.2267 \; \;;
-#X scalar trace-template 75 0 2 \; 95.3305 53.7638 \; 95.1563 63.5682
-\; 95.058 69.933 \; 95.0398 72.6937 \; 95.0625 72.0074 \; 95.1761 69.3127
-\; 95.2614 66.3402 \; 95.3102 60.6198 \; 95.2644 50.703 \; \;;
-#X scalar trace-template 75 0 4 \; 70.6684 54.5473 \; 70.8535 63.5517
-\; 70.923 70.6645 \; 70.9625 74.8792 \; 70.9973 76.3398 \; 71.041 75.3628
-\; 71.1063 71.4505 \; 71.4828 64.4961 \; 71.664 55.6991 \; 72.0093
-45.5064 \; \;;
-#X scalar trace-template 75 0 8 \; 74.5842 53.7224 \; 74.6798 60.9324
-\; 74.7701 65.088 \; 74.8205 66.5031 \; 74.8536 66.2739 \; 74.9078
-65.5817 \; 75.0981 63.6081 \; 75.36 58.2125 \; 75.5816 50.9285 \; 75.0917
-48.3284 \; 74.6947 52.0563 \; 74.5236 54.0149 \; \;;
-#X scalar trace-template 75 0 9 \; 98.9494 52.6161 \; 98.855 59.6254
-\; \;;
-#X scalar trace-template 75 0 11 \; 107.435 49.9268 \; \;;
-#X scalar trace-template 75 0 22 \; 97.0322 49.2979 \; 96.9545 55.426
-\; 96.9874 62.7103 \; 97.0176 67.7851 \; 97.0907 68.579 \; 97.2424
-67.1777 \; 97.3408 64.3775 \; 97.2826 56.4723 \; \;;
-#X scalar trace-template 75 0 24 \; 68.562 44.4703 \; \;;
-#X scalar trace-template 80 0 0 \; 62.6941 58.8803 \; \;;
-#X scalar trace-template 80 0 5 \; 96.1265 63.7529 \; 96.0421 66.677
-\; 96.0624 72.5341 \; 96.1505 74.4534 \; 96.249 74.4393 \; 96.3181
-71.6039 \; 96.323 64.0989 \; 96.3578 56.2766 \; 96.4634 42.1048 \;
-\;;
-#X scalar trace-template 80 0 11 \; 96.211 61.8841 \; \;;
-#X scalar trace-template 80 0 15 \; 98.7364 57.2459 \; 98.7772 64 \;
-98.835 69.2622 \; 98.9775 71.0388 \; 99.0667 71.2528 \; 99.1468 68.4925
-\; 99.2247 61.5751 \; 99.2735 53.0332 \; 99.1813 42.7543 \; 99.3925
-56.1553 \; \;;
-#X scalar trace-template 80 0 16 \; 97.2317 53.4618 \; \;;
-#X scalar trace-template 80 0 17 \; 99.8089 55.5397 \; \;;
-#X scalar trace-template 80 0 20 \; 77.7817 52.9002 \; 77.9789 62.443
-\; 78.0495 61.979 \; 78.1565 60.837 \; \;;
-#X scalar trace-template 80 0 21 \; 118.685 53.5776 \; \;;
-#X scalar trace-template 80 0 23 \; 119.147 52.8507 \; \;;
-#X scalar trace-template 80 0 24 \; 105.139 50.5351 \; 105.163 59.2938
-\; 105.221 64.0555 \; 105.163 62.8698 \; 105.09 64.5973 \; \;;
-#X scalar trace-template 85 0 0 \; 100.422 57.9845 \; 100.491 63.3379
-\; 100.573 64.3463 \; 100.697 64.1111 \; 100.779 61.2922 \; 100.846
-53.0746 \; \;;
-#X scalar trace-template 85 0 1 \; 105.764 61.2428 \; 105.791 63.1944
-\; 105.735 64.2197 \; 105.685 67.6098 \; 105.628 69.7158 \; 105.632
-62.3856 \; \;;
-#X scalar trace-template 85 0 9 \; 106.282 57.177 \; 106.331 60.5044
-\; 106.278 61.0081 \; 106.244 63.1701 \; \;;
-#X scalar trace-template 85 0 11 \; 78.228 58.4228 \; \;;
-#X scalar trace-template 85 0 13 \; 104.477 56.8221 \; \;;
-#X scalar trace-template 85 0 16 \; 101.156 56.4595 \; 101.232 60.987
-\; 101.363 61.7738 \; 101.491 62.3755 \; 101.566 60.2702 \; \;;
-#X scalar trace-template 85 0 17 \; 102.556 56.1643 \; 102.672 59.4597
-\; \;;
-#X scalar trace-template 85 0 21 \; 103.279 55.5753 \; 103.338 60.8145
-\; 103.452 60.2049 \; 103.626 62.2785 \; 103.69 60.1499 \; \;;
-#X scalar trace-template 85 0 23 \; 80.6156 56.2613 \; 80.6278 59.0661
-\; \;;
-#X scalar trace-template 90 0 6 \; 104.017 60.4545 \; \;;
-#X scalar trace-template 90 0 11 \; 101.951 59.5806 \; 102.074 60.2808
-\; 102.246 61.7509 \; 102.311 59.2503 \; \;;
-#X scalar trace-template 90 0 13 \; 92.7145 58.605 \; \;;
-#X scalar trace-template 95 0 6 \; 105.479 63.3839 \; 105.526 68.3622
-\; \;;
-#X scalar trace-template 95 0 13 \; 104.926 61.7527 \; 104.953 67.5045
-\; 105.01 66.9893 \; 105.106 61.8638 \; 105.161 53.9912 \; 105.056
-36.4085 \; \;;
-#X scalar trace-template 95 0 17 \; 106.112 59.4222 \; 106.088 64.0517
-\; 106.133 64.6438 \; 106.031 58.503 \; \;;
-#X scalar trace-template 95 0 23 \; 104.307 58.6226 \; 104.297 62.9229
-\; \;;
-#X scalar trace-template 100 0 7 \; 102.933 61.6534 \; 103.043 60.5042
-\; 103.149 53.9428 \; \;;
-#X scalar trace-template 100 0 20 \; 105.893 57.9727 \; \;;
-#X scalar trace-template 105 0 6 \; 63.6483 57.9829 \; \;;
-#X scalar trace-template 105 0 9 \; 106.686 58.7287 \; \;;
-#X scalar trace-template 105 0 20 \; 107.237 57.525 \; \;;
-#X scalar trace-template 105 0 23 \; 78.3567 56.9218 \; \;;
-#X scalar trace-template 105 0 24 \; 67.279 63.1581 \; \;;
-#X scalar trace-template 110 0 6 \; 105.762 63.5753 \; 105.729 54.4994
-\; \;;
-#X scalar trace-template 110 0 9 \; 54.4145 54.0393 \; \;;
-#X scalar trace-template 110 0 11 \; 97.4824 57.7759 \; 97.4072 49.9733
-\; 97.4188 43.1923 \; 97.4494 53.8367 \; 97.2663 60.9229 \; 97.399
-62.1905 \; \;;
-#X scalar trace-template 110 0 16 \; 60.9096 61.9022 \; \;;
-#X scalar trace-template 110 0 20 \; 106.281 56.2507 \; \;;
-#X scalar trace-template 110 0 21 \; 98.1126 58.0075 \; 98.0507 56.8621
-\; 98.0248 54.25 \; 98.0529 52.1177 \; 98.0875 55.393 \; 98.1957 59.4561
-\; 98.2548 62.1281 \; 98.3588 61.753 \; 98.2578 52.1228 \; \;;
-#X scalar trace-template 110 0 23 \; 106.914 55.8768 \; 107.003 47.2128
-\; \;;
-#X scalar trace-template 110 0 24 \; 97.8258 55.2253 \; 97.7615 56.9729
-\; 97.7798 56.1292 \; 97.7046 57.0451 \; 97.7385 58.6266 \; 97.7286
-63.1467 \; 97.6773 65.5081 \; \;;
-#X scalar trace-template 115 0 0 \; 68.2533 59.2205 \; \;;
-#X scalar trace-template 115 0 1 \; 105.802 57.0624 \; \;;
-#X scalar trace-template 115 0 7 \; 98.7789 54.5448 \; 98.6909 54.5418
-\; 98.6698 56.6369 \; 98.6558 61.9572 \; 98.6089 66.107 \; 98.5499
-65.5083 \; 98.5333 60.7304 \; \;;
-#X scalar trace-template 115 0 9 \; 105.242 56.0645 \; \;;
-#X scalar trace-template 115 0 14 \; 96.7716 53.6612 \; 96.7862 48.729
-\; 96.7225 52.0128 \; \;;
-#X scalar trace-template 115 0 16 \; 96.2302 54.6293 \; \;;
-#X scalar trace-template 115 0 17 \; 97.1559 51.3868 \; 97.2517 49.4146
-\; 97.1145 46.5651 \; 97.0374 68.5707 \; \;;
-#X scalar trace-template 115 0 20 \; 99.3979 53.8341 \; \;;
-#X scalar trace-template 115 0 22 \; 95.6152 47.3413 \; 95.7933 40.2091
-\; 95.8117 52.2763 \; 96.0363 62.5129 \; 95.9603 64.1765 \; 95.86 64.5745
-\; \;;
-#X scalar trace-template 120 0 0 \; 63.9916 57.0381 \; 64.2159 50.3829
-\; \;;
-#X scalar trace-template 120 0 1 \; 71.1539 56.093 \; \;;
-#X scalar trace-template 120 0 2 \; 70.6556 54.4364 \; 70.771 57.7957
-\; 70.6885 60.2903 \; 70.5159 61.3918 \; 70.1955 61.5167 \; 69.6017
-61.3411 \; 69.2061 59.7526 \; 69.8033 52.0409 \; 69.0208 43.5237 \;
-68.9326 56.827 \; 68.9851 66.3004 \; 69.1314 74.2815 \; 68.9457 79.5783
-\; 68.5964 82.7769 \; 68.3265 83.2435 \; 68.1623 80.7762 \; 67.827
-75.7023 \; 67.6299 67.8599 \; 67.7025 58.6257 \; \;;
-#X scalar trace-template 120 0 6 \; 83.6247 47.5748 \; \;;
-#X scalar trace-template 120 0 9 \; 78.5751 46.396 \; \;;
-#X scalar trace-template 120 0 16 \; 93.513 42.6424 \; \;;
-#X scalar trace-template 120 0 18 \; 81.2407 43.4618 \; \;;
-#X scalar trace-template 120 0 20 \; 105.473 36.7186 \; 105.324 53.5137
-\; 105.425 62.4231 \; 105.462 66.6387 \; 105.472 65.9009 \; 105.54
-59.6241 \; \;;
-#X scalar trace-template 120 0 23 \; 94.6678 41.2581 \; \;;
-#X scalar trace-template 125 0 1 \; 67.279 55.2067 \; \;;
-#X scalar trace-template 125 0 4 \; 99.4797 55.746 \; 99.5114 61.0345
-\; 99.506 64.8965 \; 99.4235 61.3435 \; 99.3281 54.3145 \; \;;
-#X scalar trace-template 125 0 5 \; 104.792 50.2295 \; 104.851 59.5202
-\; 104.852 64.0489 \; 104.834 62.4463 \; \;;
-#X scalar trace-template 125 0 6 \; 105.955 55.1657 \; 106.022 56.8532
-\; 106.027 61.6359 \; 106.024 61.529 \; 106.104 54.688 \; \;;
-#X scalar trace-template 125 0 9 \; 100.073 46.225 \; 100.221 56.5845
-\; 100.276 59.5332 \; \;;
-#X scalar trace-template 125 0 13 \; 105.903 54.6662 \; \;;
-#X scalar trace-template 125 0 16 \; 104.191 45.1731 \; 104.305 56.2167
-\; 104.29 62.1135 \; 104.225 59.7614 \; \;;
-#X scalar trace-template 125 0 18 \; 95.6491 49.0642 \; 95.4005 51.3254
-\; 95.4859 58.3154 \; 95.5195 63.5584 \; 95.6858 63.111 \; 95.5254
-52.9112 \; \;;
-#X scalar trace-template 125 0 23 \; 100.84 44.8828 \; 100.971 52.5872
-\; \;;
-#X scalar trace-template 130 0 0 \; 96.9296 68.2025 \; 96.9229 70.7525
-\; 96.911 71.2325 \; 96.8475 67.6464 \; 96.8883 56.7906 \; \;;
-#X scalar trace-template 130 0 1 \; 55.7407 61.8333 \; \;;
-#X scalar trace-template 130 0 12 \; 96.1424 61.1484 \; \;;
-#X scalar trace-template 130 0 13 \; 105.169 58.025 \; 105.18 59.8246
-\; 105.219 61.1852 \; 105.308 61.9676 \; 105.257 55.4418 \; 105.368
-44.5374 \; \;;
-#X scalar trace-template 130 0 14 \; 105.73 54.6697 \; 105.772 60.0226
-\; 105.787 62.842 \; 105.825 62.9742 \; 105.846 57.1241 \; 105.87 45.6745
-\; 105.84 31.6255 \; \;;
-#X scalar trace-template 130 0 15 \; 103.749 51.8393 \; 103.689 58.5917
-\; 103.567 59.2444 \; 103.509 59.6344 \; 103.507 54.4535 \; 103.569
-46.0626 \; 103.569 21.2137 \; \;;
-#X scalar trace-template 135 0 1 \; 94.826 60.4828 \; 94.8546 62.6004
-\; 94.671 62.0785 \; 94.4878 54.123 \; \;;
-#X scalar trace-template 135 0 8 \; 96.3859 59.4198 \; \;;
-#X scalar trace-template 135 0 12 \; 103.052 56.8622 \; \;;
-#X scalar trace-template 135 0 17 \; 94.6802 56.5378 \; \;;
-#X scalar trace-template 135 0 23 \; 104.556 55.3201 \; 104.64 58.9501
-\; 104.721 59.9894 \; 104.677 29.848 \; 104.84 42.1598 \; \;;
-#X scalar trace-template 140 0 8 \; 97.574 67.4101 \; 97.583 67.5659
-\; 97.4339 62.0541 \; 97.4373 50.5792 \; \;;
-#X scalar trace-template 140 0 9 \; 104.963 59.2519 \; 104.96 55.6746
-\; \;;
-#X scalar trace-template 140 0 11 \; 99.6143 60.2031 \; \;;
-#X scalar trace-template 140 0 12 \; 104.367 57.6511 \; 104.413 56.4335
-\; 104.49 51.622 \; \;;
-#X scalar trace-template 140 0 17 \; 104.055 59.2627 \; 104.112 60.5614
-\; 104.1 54.8239 \; 104.292 41.62 \; \;;
-#X scalar trace-template 145 0 5 \; 97.0387 63.4862 \; \;;
-#X scalar trace-template 145 0 11 \; 73.4964 58.6867 \; 73.132 57.006
-\; 72.5959 52.2778 \; 72.3012 46.7949 \; 72.4469 43.2487 \; \;;
-#X scalar trace-template 145 0 16 \; 102.91 56.0969 \; \;;
-#X scalar trace-template 145 0 22 \; 103.859 57.8932 \; 103.854 53.6061
-\; \;;
-#X scalar trace-template 145 0 24 \; 103.24 55.3534 \; \;;
-#X scalar trace-template 150 0 4 \; 105.75 57.5191 \; \;;
-#X scalar trace-template 150 0 5 \; 96.6719 57.2885 \; \;;
-#X scalar trace-template 150 0 6 \; 103.987 56.4863 \; \;;
-#X scalar trace-template 150 0 7 \; 104.659 52.0965 \; \;;
-#X scalar trace-template 150 0 9 \; 79.2186 53.3809 \; 79.0163 49.2866
-\; 78.8806 43.5405 \; \;;
-#X scalar trace-template 150 0 16 \; 89.5825 51.8688 \; \;;
-#X scalar trace-template 150 0 20 \; 76.7088 51.9108 \; 76.8432 46.4259
-\; 77.1702 39.9933 \; \;;
-#X scalar trace-template 150 0 24 \; 91.0294 50.8573 \; \;;
-#X scalar trace-template 155 0 0 \; 58.7854 73.5324 \; \;;
-#X scalar trace-template 155 0 1 \; 67.6521 56.6884 \; 67.279 60.564
-\; \;;
-#X scalar trace-template 155 0 4 \; 97.1835 51.5837 \; 97.2382 42.6143
-\; 97.3407 41.9578 \; 97.2803 46.3782 \; 97.2462 54.9285 \; 97.2405
-60.8982 \; 97.186 61.9162 \; 97.1356 58.9903 \; 97.0654 54.4072 \;
-\;;
-#X scalar trace-template 155 0 5 \; 97.8242 45.7325 \; 97.6397 42.3616
-\; 97.7207 41.898 \; 97.6372 45.4791 \; \;;
-#X scalar trace-template 155 0 6 \; 81.072 47.1297 \; 81.4454 34.6657
-\; \;;
-#X scalar trace-template 155 0 7 \; 103.665 48.2698 \; \;;
-#X scalar trace-template 155 0 12 \; 82.7284 45.6134 \; \;;
-#X scalar trace-template 155 0 16 \; 75.8736 44.046 \; 75.4219 40.5243
-\; 75.3126 45.8419 \; 76.0672 54.4199 \; 75.9607 54.0018 \; 75.7005
-54.6561 \; 75.2585 59.118 \; 75.3474 58.5097 \; 75.3939 56.9321 \;
-75.3269 52.0046 \; \;;
-#X scalar trace-template 155 0 18 \; 89.0491 40.8756 \; \;;
-#X scalar trace-template 155 0 21 \; 83.1307 46.0906 \; 82.937 23.7351
-\; 83.2355 39.4904 \; \;;
-#X scalar trace-template 155 0 22 \; 103.089 41.5226 \; \;;
-#X scalar trace-template 155 0 24 \; 87.6398 41.8453 \; \;;
-#X scalar trace-template 160 0 0 \; 66.3772 59.0452 \; 66.317 57.2027
-\; \;;
-#X scalar trace-template 160 0 7 \; 77.8523 44.1406 \; 78.197 49.433
-\; \;;
-#X scalar trace-template 160 0 8 \; 79.3079 43.6751 \; 79.3195 45.32
-\; 79.2421 57.8439 \; 79.6756 58.8891 \; 80.0306 55.445 \; \;;
-#X scalar trace-template 160 0 12 \; 96.8905 39.4582 \; 96.9248 36.8833
-\; \;;
-#X scalar trace-template 160 0 13 \; 80.2749 37.1673 \; 80.1904 41.7085
-\; \;;
-#X scalar trace-template 160 0 17 \; 71.4971 44.8012 \; \;;
-#X scalar trace-template 160 0 18 \; 74.1322 29.2825 \; \;;
-#X scalar trace-template 160 0 22 \; 84.3907 32.3293 \; \;;
-#X scalar trace-template 160 0 23 \; 103.454 29.1254 \; 103.363 30.8575
-\; 103.483 43.4293 \; 103.455 55.1119 \; 103.404 61.7872 \; 103.393
-63.4632 \; 103.445 57.9885 \; \;;
-#X scalar trace-template 160 0 24 \; 98.425 30.714 \; \;;
-#X scalar trace-template 165 0 1 \; 65.0725 59.3874 \; 65.2968 70.1558
-\; 64.7961 79.8125 \; 64.2019 83.0497 \; 63.7437 83.4104 \; 63.4457
-82.0825 \; 63.1555 79.6909 \; 62.9661 74.9721 \; 62.3735 67.2386 \;
-\;;
-#X scalar trace-template 165 0 6 \; 69.8808 52.7739 \; \;;
-#X scalar trace-template 165 0 9 \; 72.8347 42.8028 \; 72.8347 56.4173
-\; 72.8036 65.6327 \; 72.4884 70.4341 \; 72.2612 71.256 \; 72.192 69.4709
-\; 72.1761 65.3692 \; 72.1727 58.7169 \; \;;
-#X scalar trace-template 165 0 14 \; 83.6038 40.2629 \; 83.7488 60.8388
-\; 83.6118 61.1732 \; 83.6416 59.2213 \; \;;
-#X scalar trace-template 165 0 15 \; 98.0969 33.0531 \; 98.0865 44.3888
-\; 98.0603 54.4928 \; 98.052 60.8425 \; 98.0076 63.9834 \; 97.9835
-63.2399 \; 97.919 58.6122 \; \;;
-#X scalar trace-template 165 0 17 \; 95.5827 32.4406 \; \;;
-#X scalar trace-template 165 0 18 \; 98.9543 31.4913 \; 98.8589 40.5702
-\; \;;
-#X scalar trace-template 165 0 20 \; 94.2174 31.0072 \; \;;
-#X scalar trace-template 165 0 22 \; 85.8439 30.8784 \; 86.2516 42.0567
-\; 86.3862 53.5239 \; 86.3392 62.3554 \; 86.2914 64.6131 \; 85.9585
-62.4475 \; 85.826 55.4383 \; \;;
-#X scalar trace-template 165 0 24 \; 92.9538 29.4611 \; \;;
-#X scalar trace-template 170 0 0 \; 73.3294 60.0839 \; \;;
-#X scalar trace-template 170 0 6 \; 83.9354 58.8144 \; \;;
-#X scalar trace-template 170 0 7 \; 85.1639 47.1991 \; 84.9908 61.3567
-\; 84.8308 66.4198 \; 84.6646 64.7867 \; 84.4705 58.0568 \; \;;
-#X scalar trace-template 170 0 10 \; 76.4174 52.7469 \; \;;
-#X scalar trace-template 170 0 11 \; 97.1236 46.2216 \; \;;
-#X scalar trace-template 170 0 12 \; 105.835 40.7383 \; 105.978 49.2075
-\; 106.031 56.7109 \; 105.999 58.0012 \; 105.973 56.2105 \; \;;
-#X scalar trace-template 170 0 13 \; 103.057 40.096 \; 102.913 49.0831
-\; 102.808 55.3774 \; 102.73 55.7971 \; \;;
-#X scalar trace-template 170 0 17 \; 104.07 39.6159 \; 104.012 51.5969
-\; 103.978 60.8304 \; \;;
-#X scalar trace-template 170 0 20 \; 103.626 37.5581 \; \;;
-#X scalar trace-template 170 0 21 \; 105.307 37.6238 \; \;;
-#X scalar trace-template 170 0 24 \; 96.3502 37.7664 \; 96.3927 47.8998
-\; \;;
-#X scalar trace-template 175 0 0 \; 53.8911 67.3249 \; \;;
-#X scalar trace-template 175 0 5 \; 82.1272 66.4862 \; \;;
-#X scalar trace-template 175 0 6 \; 82.4572 61.6346 \; 82.2939 65.5493
-\; 82.4371 61.8962 \; 82.4334 57.5816 \; 82.2831 53.503 \; \;;
-#X scalar trace-template 175 0 10 \; 81.3092 64.7334 \; 81.0542 63.1777
-\; 80.5738 60.1169 \; 80.3458 57.9887 \; 80.2331 54.4228 \; \;;
-#X scalar trace-template 175 0 11 \; 78.7816 61.5107 \; 78.5544 60.7085
-\; 78.2576 61.3503 \; 78.1299 60.9071 \; 78.0477 58.0177 \; 77.9596
-51.9549 \; \;;
-#X scalar trace-template 175 0 18 \; 30.9649 57.8221 \; \;;
-#X scalar trace-template 175 0 20 \; 87.6305 50.6796 \; 87.6824 61.3363
-\; 87.7738 65.5553 \; 87.6706 63.9521 \; 87.5926 58.3977 \; 87.4044
-49.0299 \; \;;
-#X scalar trace-template 175 0 21 \; 77.4491 51.5702 \; \;;
-#X scalar trace-template 180 0 0 \; 41.5518 64.6704 \; \;;
-#X scalar trace-template 180 0 5 \; 88.9938 55.8587 \; 89.0075 64.1778
-\; 89.0137 67.1789 \; 89.0181 64.5468 \; 89.0589 58.319 \; \;;
-#X scalar trace-template 180 0 18 \; 103.928 62.9257 \; 103.913 62.6543
-\; 103.909 62.2848 \; 103.918 58.3983 \; 104.071 54.312 \; \;;
-#X scalar trace-template 180 0 21 \; 74.6972 57.8181 \; \;;
-#X scalar trace-template 180 0 24 \; 104.478 54.7945 \; 104.424 57.2808
-\; 104.365 59.383 \; 104.291 56.8206 \; 104.239 50.2427 \; \;;
-#X scalar trace-template 185 0 0 \; 30.5406 67.801 \; 31.2086 64.8856
-\; 38.4538 57.4354 \; \;;
-#X scalar trace-template 185 0 8 \; 90.1444 54.9002 \; 90.1774 60.3139
-\; 90.1872 62.5949 \; 90.1773 59.8964 \; \;;
-#X scalar trace-template 185 0 14 \; 105.486 56.451 \; \;;
-#X scalar trace-template 185 0 17 \; 106.488 55.4928 \; \;;
-#X scalar trace-template 185 0 21 \; 102.894 52.3808 \; \;;
-#X scalar trace-template 190 0 13 \; 103.299 59.9118 \; 103.275 51.6698
-\; \;;
-#X scalar trace-template 190 0 14 \; 86.7483 58.3287 \; \;;
-#X scalar trace-template 190 0 17 \; 98.7084 57.0523 \; 98.7554 57.7563
-\; 98.8544 55.7785 \; \;;
-#X scalar trace-template 190 0 21 \; 91.1551 56.5026 \; 91.1378 55.5348
-\; \;;
-#X scalar trace-template 195 0 7 \; 88.2358 53.3418 \; \;;
-#X scalar trace-template 195 0 12 \; 104.445 54.5809 \; 104.489 49.3027
-\; \;;
-#X scalar trace-template 195 0 14 \; 99.0175 54.5166 \; \;;
-#X scalar trace-template 195 0 23 \; 99.4227 53.3752 \; \;;
-#X scalar trace-template 200 0 0 \; 17.8806 55.9034 \; \;;
-#X scalar trace-template 200 0 4 \; 111.325 51.4995 \; 111.249 57.7763
-\; \;;
-#X scalar trace-template 200 0 6 \; 115.645 52.6935 \; 115.652 55.3135
-\; 115.624 58.579 \; \;;
-#X scalar trace-template 200 0 7 \; 88.7186 53.0937 \; \;;
-#X scalar trace-template 200 0 10 \; 110.81 54.5492 \; \;;
-#X scalar trace-template 200 0 13 \; 111.534 48.8612 \; 111.503 60.7063
-\; 111.473 64.4167 \; 111.44 64.4249 \; 111.429 65.1964 \; 111.435
-64.716 \; 111.461 59.5964 \; \;;
-#X scalar trace-template 200 0 14 \; 107.192 51.3543 \; \;;
-#X scalar trace-template 200 0 15 \; 107.725 51.722 \; \;;
-#X scalar trace-template 200 0 21 \; 110.775 53.9938 \; 110.765 60.1593
-\; 110.72 61.4758 \; \;;
-#X scalar trace-template 200 0 22 \; 115.855 50.5927 \; \;;
-#X scalar trace-template 200 0 23 \; 110.3 49.7937 \; 110.212 59.207
-\; 110.234 64.4164 \; 110.251 69.1681 \; 110.258 71.0713 \; 110.247
-67.8894 \; 110.231 62.9948 \; \;;
-#X scalar trace-template 205 0 0 \; 119.046 57.9889 \; 119.026 63.4287
-\; 119.028 63.1849 \; 119.031 60.9702 \; \;;
-#X scalar trace-template 205 0 5 \; 115.101 56.6111 \; 115.102 63.0497
-\; \;;
-#X scalar trace-template 205 0 7 \; 114.048 63.5805 \; 114.069 60.2282
-\; 114.098 60.5725 \; 114.195 60.5632 \; 114.217 61.9178 \; 114.199
-59.9502 \; \;;
-#X scalar trace-template 205 0 8 \; 118.711 56.2782 \; 118.641 58.5951
-\; \;;
-#X scalar trace-template 205 0 9 \; 112.94 55.4876 \; 112.936 60.2285
-\; \;;
-#X scalar trace-template 205 0 10 \; 114.28 55.6778 \; 114.319 59.0834
-\; \;;
-#X scalar trace-template 205 0 11 \; 111.215 59.9421 \; 111.177 59.4391
-\; 111.146 61.243 \; 111.13 61.8664 \; 111.136 63.1439 \; 111.173 63.9344
-\; 111.148 59.8724 \; 111.118 56.7723 \; \;;
-#X scalar trace-template 205 0 12 \; 113.501 58.3075 \; \;;
-#X scalar trace-template 205 0 14 \; 114.929 56.021 \; 114.919 59.4994
-\; 114.929 61.7452 \; \;;
-#X scalar trace-template 205 0 15 \; 118.813 53.5036 \; 118.787 60.0132
-\; 118.784 61.2655 \; \;;
-#X scalar trace-template 205 0 16 \; 114.025 58.6071 \; \;;
-#X scalar trace-template 205 0 17 \; 114.038 59.1291 \; \;;
-#X scalar trace-template 205 0 18 \; 115.32 54.0326 \; 115.315 60.519
-\; 115.303 63.62 \; 115.288 63.4663 \; 115.299 60.4082 \; \;;
-#X scalar trace-template 205 0 20 \; 108.217 53.6661 \; \;;
-#X scalar trace-template 205 0 22 \; 113.466 58.9355 \; \;;
-#X scalar trace-template 205 0 24 \; 110.15 56.6294 \; \;;
-#X scalar trace-template 210 0 1 \; 110.863 62.3883 \; 110.884 62.5401
-\; 110.892 64.4451 \; 110.865 64.5475 \; 110.827 63.6657 \; 110.8 63.3741
-\; 110.763 60.8118 \; 110.731 61.8331 \; 110.737 62.5076 \; 110.729
-61.6645 \; 110.748 58.3789 \; \;;
-#X scalar trace-template 210 0 4 \; 109.638 61.7566 \; 109.629 69.1354
-\; 109.611 66.3531 \; 109.589 64.3165 \; 109.559 60.1706 \; 109.506
-58.6773 \; 109.513 58.4946 \; 109.535 59.8422 \; 109.482 62.0589 \;
-109.451 64.4827 \; 109.411 62.0315 \; \;;
-#X scalar trace-template 210 0 12 \; 115.077 64.9949 \; 115.065 64.0915
-\; 115.073 56.0988 \; 115.103 59.9038 \; 115.111 60.8423 \; 115.136
-58.9259 \; 115.158 60.0511 \; 115.167 58.4997 \; 115.197 58.9281 \;
-\;;
-#X scalar trace-template 210 0 16 \; 110.311 58.8075 \; \;;
-#X scalar trace-template 210 0 17 \; 115.52 58.2548 \; 115.565 62.0643
-\; 115.547 61.0246 \; \;;
-#X scalar trace-template 210 0 20 \; 115.788 58.245 \; 115.788 59.9369
-\; \;;
-#X scalar trace-template 210 0 22 \; 111.978 57.8804 \; \;;
-#X scalar trace-template 210 0 24 \; 109.705 61.3998 \; \;;
-#X scalar trace-template 215 0 2 \; 109.669 67.3405 \; \;;
-#X scalar trace-template 215 0 5 \; 108.539 61.2289 \; 108.534 62.8229
-\; 108.479 60.3829 \; \;;
-#X scalar trace-template 215 0 6 \; 111.563 59.8638 \; \;;
-#X scalar trace-template 215 0 8 \; 109.983 60.9428 \; 109.952 64.8453
-\; 109.97 66.9026 \; 109.981 66.6552 \; 109.931 61.7871 \; 109.935
-53.9882 \; \;;
-#X scalar trace-template 215 0 9 \; 108.825 60.9774 \; 108.827 61.9332
-\; 108.827 60.436 \; \;;
-#X scalar trace-template 215 0 10 \; 112.253 60.4079 \; 112.286 59.9168
-\; 112.302 59.1805 \; \;;
-#X scalar trace-template 215 0 16 \; 119.185 59.4943 \; 119.195 63.38
-\; 119.185 62.5575 \; \;;
-#X scalar trace-template 215 0 21 \; 114.465 60.2056 \; 114.416 61.0626
-\; 114.411 61.535 \; 114.377 62.2623 \; 114.37 61.0554 \; 114.329 58.4786
-\; \;;
-#X scalar trace-template 215 0 22 \; 114.795 58.1419 \; 114.804 61.6074
-\; 114.806 64.8347 \; 114.777 62.5979 \; 114.734 60.6226 \; 114.709
-58.6048 \; 114.684 56.1249 \; \;;
-#X scalar trace-template 215 0 24 \; 118.887 58.2542 \; \;;
-#X scalar trace-template 220 0 2 \; 109.728 64.2821 \; 109.71 64.7634
-\; 109.767 62.9047 \; 109.769 60.0289 \; 109.773 58.7574 \; 109.704
-61.8176 \; 109.71 66.4914 \; 109.749 66.836 \; \;;
-#X scalar trace-template 220 0 6 \; 115.006 63.3023 \; 114.995 61.5753
-\; 115.006 60.807 \; 115.021 62.7056 \; 115.019 62.0787 \; 115.037
-61.6848 \; 115.031 60.1042 \; 115.005 59.2332 \; 114.99 58.5249 \;
-\;;
-#X scalar trace-template 220 0 14 \; 112.113 62.6333 \; 112.133 65.0886
-\; 112.141 65.3132 \; 112.135 58.622 \; \;;
-#X scalar trace-template 220 0 15 \; 113.941 61.0123 \; 113.946 63.9524
-\; 113.955 63.7432 \; 113.975 61.6876 \; 114.013 57.603 \; 114.05 56.9921
-\; 114.096 57.6646 \; \;;
-#X scalar trace-template 220 0 19 \; 113.066 59.8583 \; 113.073 63.0846
-\; 113.063 64.442 \; 113.053 64.0318 \; 113.063 63.1794 \; 113.081
-62.5089 \; 113.097 60.0062 \; \;;
-#X scalar trace-template 220 0 20 \; 116.143 60.7241 \; 116.078 60.8979
-\; 116.074 58.8135 \; \;;
-#X scalar trace-template 220 0 24 \; 111.789 60.2285 \; 111.802 64.6584
-\; 111.822 66.3942 \; 111.796 64.1547 \; 111.793 58.9821 \; 111.859
-58.7194 \; 111.897 60.9679 \; 111.904 58.9696 \; \;;
-#X scalar trace-template 225 0 0 \; 111.904 61.0514 \; \;;
-#X scalar trace-template 225 0 3 \; 113.628 62.2073 \; 113.657 61.3381
-\; 113.714 57.7217 \; \;;
-#X scalar trace-template 225 0 17 \; 111.254 59.3837 \; \;;
-#X scalar trace-template 230 0 0 \; 110.065 58.8539 \; 110.035 62.7027
-\; 110.079 58.5743 \; 110.031 58.9951 \; 110.009 62.3068 \; 109.978
-66.9502 \; 110.01 65.4379 \; 109.973 64.1758 \; \;;
-#X scalar trace-template 230 0 5 \; 112.108 62.0882 \; \;;
-#X scalar trace-template 230 0 9 \; 110.601 63.4055 \; 110.576 64.7381
-\; 110.535 63.5107 \; 110.485 65.5188 \; \;;
-#X scalar trace-template 230 0 10 \; 110.98 59.7334 \; 110.954 59.3772
-\; 110.902 59.5167 \; \;;
-#X scalar trace-template 230 0 16 \; 115.443 60.8204 \; 115.442 61.3795
-\; 115.447 61.2352 \; 115.454 57.5713 \; \;;
-#X scalar trace-template 230 0 17 \; 116.573 61.2182 \; 116.59 59.993
-\; 116.597 57.4185 \; \;;
-#X scalar trace-template 230 0 18 \; 118.598 60.1757 \; 118.605 57.1415
-\; \;;
-#X scalar trace-template 235 0 5 \; 111.245 61.7362 \; 111.21 56.2196
-\; 111.239 57.173 \; 111.305 58.2531 \; 111.333 60.3108 \; 111.323
-59.7934 \; 111.293 57.1695 \; \;;
-#X scalar trace-template 235 0 7 \; 112.216 60.6577 \; 112.263 56.6106
-\; 112.299 56.9005 \; 112.32 58.5459 \; 112.323 58.8555 \; 112.328
-58.3102 \; \;;
-#X scalar trace-template 235 0 13 \; 114.505 55.5804 \; \;;
-#X scalar trace-template 235 0 20 \; 109.206 57.3355 \; 109.171 56.8109
-\; 109.129 62.5785 \; 109.133 66.4944 \; 109.133 65.843 \; 109.139
-61.1267 \; \;;
-#X scalar trace-template 235 0 23 \; 113.243 57.4388 \; 113.216 58.8721
-\; 113.238 58.8026 \; 113.289 61.7848 \; 113.297 61.9071 \; 113.304
-59.0348 \; \;;
-#X scalar trace-template 240 0 3 \; 110.365 57.4322 \; \;;
-#X scalar trace-template 240 0 13 \; 116.886 57.2863 \; 116.877 58.8456
-\; \;;
-#X scalar trace-template 240 0 14 \; 114.203 56.4883 \; 114.193 59.3781
-\; 114.23 60.3238 \; 114.234 61.4562 \; 114.285 60.0183 \; \;;
-#X scalar trace-template 240 0 18 \; 113.557 55.8053 \; 113.533 59.4318
-\; 113.563 59.4649 \; \;;
-#X scalar trace-template 245 0 3 \; 110.445 64.0536 \; 110.445 67.8681
-\; 110.411 70.3933 \; 110.379 68.4655 \; 110.397 62.042 \; \;;
-#X scalar trace-template 245 0 8 \; 108.188 57.5731 \; 108.189 59.1262
-\; \;;
-#X scalar trace-template 245 0 10 \; 114.512 57.0767 \; 114.521 61.2863
-\; 114.5 62.9911 \; 114.525 57.7139 \; \;;
-#X scalar trace-template 245 0 11 \; 115.691 54.7675 \; 115.682 62.0605
-\; 115.71 63.5017 \; 115.711 58.1871 \; \;;
-#X scalar trace-template 245 0 17 \; 113.344 56.9144 \; \;;
-#X scalar trace-template 245 0 21 \; 118.389 56.1649 \; 118.352 59.2933
-\; 118.325 58.9929 \; \;;
-#X scalar trace-template 250 0 9 \; 118.53 59.7842 \; 118.545 61.4914
-\; 118.549 60.1962 \; \;;
-#X scalar trace-template 250 0 13 \; 111.505 58.511 \; 111.5 63.1154
-\; 111.5 62.817 \; 111.502 58.4828 \; \;;
-#X scalar trace-template 250 0 16 \; 116.53 59.4521 \; 116.525 59.4614
-\; \;;
-#X scalar trace-template 250 0 17 \; 115.881 58.9615 \; 115.886 59.8338
-\; \;;
-#X scalar trace-template 250 0 22 \; 114.357 56.6608 \; \;;
-#X scalar trace-template 255 0 8 \; 112.11 59.542 \; 112.104 60.3085
-\; 112.079 56.1448 \; \;;
-#X scalar trace-template 255 0 12 \; 117.319 59.9772 \; \;;
-#X scalar trace-template 255 0 15 \; 119.079 59.4458 \; 119.048 60.4763
-\; 119.03 56.9412 \; \;;
-#X scalar trace-template 255 0 18 \; 112.498 59.3368 \; 112.487 57.986
-\; \;;
-#X scalar trace-template 255 0 19 \; 118.078 59.1041 \; 118.079 58.0394
-\; \;;
-#X scalar trace-template 255 0 22 \; 116.08 59.6963 \; 116.082 58.787
-\; \;;
-#X scalar trace-template 260 0 2 \; 109.889 67.2814 \; 109.891 63.6715
-\; 109.887 51.8722 \; \;;
-#X scalar trace-template 260 0 12 \; 115.311 60.044 \; 115.327 56.0445
-\; \;;
-#X scalar trace-template 260 0 16 \; 114.423 58.6997 \; \;;
-#X scalar trace-template 260 0 17 \; 114.162 59.4405 \; \;;
-#X scalar trace-template 260 0 21 \; 108.903 57.9206 \; \;;
-#X scalar trace-template 260 0 24 \; 113.727 57.8469 \; \;;
-#X scalar trace-template 265 0 1 \; 65.9686 65.8084 \; 66.3367 75.9846
-\; 66.2735 78.8915 \; 65.8919 76.6756 \; 65.2994 73.5396 \; 64.9346
-71.8191 \; 64.8234 70.8531 \; 65.1388 70.521 \; 65.7272 70.5762 \;
-66.1835 70.6078 \; 66.4891 70.4807 \; 66.3697 70.2349 \; 65.9628 70.1615
-\; 65.467 69.6348 \; 64.8712 67.3478 \; 64.2939 62.4146 \; 63.8363
-53.1106 \; 63.4845 45.5518 \; 64.7161 51.871 \; 63.6534 56.1168 \;
-\;;
-#X scalar trace-template 265 0 4 \; 71.84 63.9345 \; 71.7913 77.3996
-\; 71.7682 80.1257 \; \;;
-#X scalar trace-template 265 0 6 \; 67.5248 63.0406 \; \;;
-#X scalar trace-template 265 0 7 \; 53.8098 68.1673 \; 50.3304 74.3326
-\; 47.8106 81.3903 \; 47.3139 83.8828 \; 46.5068 83.6372 \; 46.203
-82.54 \; 45.9237 81.7084 \; 45.9361 81.2276 \; 46.3232 81.2229 \; 46.8654
-81.5735 \; 47.3105 82.0669 \; 47.502 82.6299 \; 47.3722 83.254 \; 47.0065
-83.9353 \; 46.4437 84.3165 \; 46.0045 83.5199 \; 45.7966 80.558 \;
-43.7806 72.7975 \; 44.0393 67.0753 \; \;;
-#X scalar trace-template 265 0 9 \; 55.3584 69.4826 \; \;;
-#X scalar trace-template 265 0 10 \; 110.313 63.0308 \; \;;
-#X scalar trace-template 265 0 11 \; 86.8658 58.8014 \; 86.912 69.1698
-\; 86.7528 73.9734 \; 86.7273 73.1923 \; \;;
-#X scalar trace-template 265 0 14 \; 44.6287 49.1555 \; \;;
-#X scalar trace-template 265 0 16 \; 56.6758 66.0351 \; 57.3305 71.4322
-\; 58.2789 77.4319 \; 58.4864 79.2017 \; 58.3734 78.1804 \; 57.9676
-77.3786 \; 57.7343 76.8948 \; 57.9555 75.9782 \; 58.4443 74.941 \;
-59.0144 74.0265 \; 59.3994 73.5609 \; 59.4371 73.6964 \; 59.1224 74.3365
-\; 58.7575 75.159 \; 58.1458 74.515 \; 56.8487 71.8626 \; 55.5518 67.2782
-\; 54.5964 60.0755 \; 55.529 52.5102 \; 55.6479 58.3431 \; 55.6832
-60.8044 \; 54.9739 56.384 \; 55.7407 43.3155 \; 53.5182 36.9447 \;
-\;;
-#X scalar trace-template 265 0 17 \; 76.367 55.7239 \; 76.7559 58.9207
-\; \;;
-#X scalar trace-template 265 0 18 \; 85.8479 54.4204 \; 85.917 64.6292
-\; 86.1501 68.6243 \; 86.2507 75.3941 \; 86.3115 77.1975 \; 86.3684
-71.0242 \; \;;
-#X scalar trace-template 265 0 19 \; 80.913 54.4039 \; 80.8744 63.2538
-\; 80.5411 65.1817 \; 80.1955 68.144 \; 79.7511 69.9625 \; 79.4881
-72.3306 \; 79.4548 74.0702 \; 79.715 72.4458 \; 79.4144 65.2541 \;
-\;;
-#X scalar trace-template 265 0 20 \; 84.8546 54.1655 \; 85.0033 64.0831
-\; 84.898 69.3132 \; 85.0036 69.5424 \; 84.7346 67.5814 \; 84.8998
-61.4702 \; 84.7841 58.7265 \; 84.6708 66.1913 \; 84.4924 68.2757 \;
-\;;
-#X scalar trace-template 265 0 21 \; 88.9782 53.9525 \; 88.8066 63.2468
-\; 88.9378 58.0831 \; 88.9959 60.1172 \; 89.0436 63.3059 \; \;;
-#X scalar trace-template 265 0 22 \; 106.075 57.3922 \; 106.175 56.7511
-\; \;;
-#X scalar trace-template 265 0 23 \; 88.3355 55.991 \; \;;
-#X scalar trace-template 265 0 24 \; 77.7802 54.7733 \; 78.1053 63.2959
-\; 77.716 70.3242 \; \;;
-#X scalar trace-template 270 0 0 \; 75.3837 73.318 \; \;;
-#X scalar trace-template 270 0 3 \; 75.0451 73.7116 \; 75.0121 77.5542
-\; 74.7802 82.0388 \; 74.5169 81.6509 \; 73.9392 78.558 \; 73.6926
-76.8281 \; 73.9043 74.6795 \; 74.5242 75.4796 \; 75.0402 75.9337 \;
-75.2989 76.2206 \; 75.2603 75.3861 \; 74.8493 74.2081 \; 74.4939 73.6658
-\; 74.7558 67.6012 \; 75.1131 61.0117 \; 75.6483 45.7892 \; \;;
-#X scalar trace-template 270 0 5 \; 83.2187 62.5531 \; 82.8822 66.8277
-\; 82.6493 69.5774 \; 82.6751 66.5763 \; \;;
-#X scalar trace-template 270 0 6 \; 88.6456 64.1159 \; 88.6222 63.8715
-\; 88.4373 63.8516 \; 88.613 61.1168 \; 88.7909 64.8887 \; 88.7482
-63.5686 \; 88.5291 60.5847 \; 88.5281 60.9204 \; 88.3346 58.9126 \;
-88.5546 52.4593 \; \;;
-#X scalar trace-template 270 0 8 \; 87.9031 59.4032 \; 87.9726 63.6924
-\; 87.8944 66.4185 \; \;;
-#X scalar trace-template 270 0 9 \; 83.9273 60.0344 \; \;;
-#X scalar trace-template 270 0 10 \; 90.1161 55.5294 \; 89.93 60.6368
-\; 89.9133 62.0459 \; 90.1329 60.8106 \; 90.1941 63.7221 \; 90.1321
-61.2938 \; 90.0018 57.5945 \; 90.0171 56.8389 \; \;;
-#X scalar trace-template 270 0 12 \; 105.671 55.7996 \; 105.685 59.0066
-\; \;;
-#X scalar trace-template 270 0 13 \; 98.4533 55.4107 \; \;;
-#X scalar trace-template 270 0 14 \; 90.8799 54.7789 \; 90.9463 59.8699
-\; 90.8862 62.8499 \; 90.8948 61.2393 \; \;;
-#X scalar trace-template 270 0 15 \; 91.4668 54.6648 \; \;;
-#X scalar trace-template 270 0 23 \; 20.6781 53.6597 \; 24.8204 59.8282
-\; 29.3809 63.0958 \; 25.2902 59.6049 \; 16.7656 53.9698 \; 20.9359
-51.4195 \; \;;
-#X scalar trace-template 275 0 0 \; 71.4711 82.6449 \; 71.3935 80.9503
-\; 70.4116 76.1308 \; 69.8358 73.5168 \; 69.7831 73.5962 \; 70.2045
-73.5824 \; 70.7012 73.567 \; 71.1429 73.2073 \; 71.4238 73.2852 \;
-71.3872 72.923 \; 71.0362 72.0984 \; 70.708 71.3443 \; 70.692 66.6931
-\; 69.3768 59.0069 \; 69.0003 46.2925 \; 70.536 43.4584 \; \;;
-#X scalar trace-template 275 0 2 \; 63.1915 65.5449 \; \;;
-#X scalar trace-template 275 0 9 \; 78.7255 65.929 \; 78.5699 65.5992
-\; 78.4811 65.4891 \; \;;
-#X scalar trace-template 275 0 13 \; 77.3169 67.7731 \; 77.3407 73.0564
-\; 77.2765 78.4436 \; 77.0359 80.3724 \; 76.8754 80.1772 \; 77.0518
-77.4236 \; \;;
-#X scalar trace-template 275 0 15 \; 81.3124 63.0026 \; 81.5615 62.7425
-\; 82.0572 69.6073 \; 81.8468 71.1511 \; 81.8037 71.3624 \; 82.0847
-69.7455 \; \;;
-#X scalar trace-template 275 0 17 \; 89.4588 62.2316 \; 89.4408 64.327
-\; 89.5149 61.3408 \; \;;
-#X scalar trace-template 275 0 22 \; 33.9453 58.3999 \; \;;
-#X scalar trace-template 280 0 2 \; 72.3407 76.842 \; \;;
-#X scalar trace-template 280 0 4 \; 86.4352 72.906 \; \;;
-#X scalar trace-template 280 0 12 \; 84.4587 68.7666 \; \;;
-#X scalar trace-template 280 0 22 \; 87.3927 65.4395 \; 87.4933 69.3678
-\; 87.3374 71.4398 \; 87.2281 69.9882 \; 87.0983 65.4227 \; 86.9752
-66.5857 \; 87.2238 66.4384 \; 87.3403 69.5367 \; 87.3364 69.1862 \;
-87.573 61.644 \; 87.7796 64.4955 \; \;;
-#X scalar trace-template 280 0 24 \; 91.2876 59.9734 \; 91.3807 59.6788
-\; 91.451 61.0052 \; 91.3952 59.5706 \; 91.3477 56.0827 \; 91.3871
-54.9769 \; \;;
-#X scalar trace-template 285 0 2 \; 84.1132 69.2742 \; 83.7949 71.1896
-\; 83.741 71.7189 \; 83.9708 67.5223 \; \;;
-#X scalar trace-template 285 0 4 \; 90.4505 62.1378 \; \;;
-#X scalar trace-template 285 0 8 \; 106.116 55.1795 \; 106.079 60.0972
-\; 106.083 55.1332 \; 106.06 54.8266 \; \;;
-#X scalar trace-template 285 0 11 \; 105.698 59.6684 \; 105.711 55.3819
-\; \;;
-#X scalar trace-template 285 0 12 \; 105.975 60.0982 \; 105.931 56.3563
-\; 105.87 54.5686 \; \;;
-#X scalar trace-template 290 0 4 \; 85.9838 67.4354 \; 86.0954 63.7488
-\; 86.4256 66.1859 \; 86.3199 67.4379 \; 86.1002 64.8715 \; \;;
-#X scalar trace-template 290 0 5 \; 85.646 72.4317 \; 85.6128 73.0186
-\; 85.7499 67.3665 \; 85.6874 64.143 \; 85.5044 70.0089 \; 85.5389
-73.1947 \; 85.5332 72.2809 \; 85.3309 68.7508 \; 85.1765 62.8604 \;
-\;;
-#X scalar trace-template 290 0 9 \; 80.2939 58.6706 \; \;;
-#X scalar trace-template 290 0 14 \; 105.563 58.6258 \; 105.545 55.9086
-\; 105.508 55.8106 \; \;;
-#X scalar trace-template 290 0 17 \; 92.6661 58.8559 \; 92.6005 55.8888
-\; \;;
-#X scalar trace-template 290 0 21 \; 93.8067 56.7854 \; \;;
-#X scalar trace-template 295 0 9 \; 74.643 68.193 \; \;;
-#X scalar trace-template 295 0 11 \; 77.8146 67.2281 \; 77.8315 70.5002
-\; 77.7824 77.0494 \; 78.2746 78.0049 \; 78.5198 79.177 \; 78.4953
-78.3465 \; 78.1017 76.4747 \; 78.5025 67.9036 \; 79.0676 67.0585 \;
-\;;
-#X scalar trace-template 295 0 18 \; 82.7586 57.6481 \; 82.776 68.5881
-\; 82.5275 70.57 \; \;;
-#X scalar trace-template 295 0 21 \; 87.8288 54.7669 \; 88.1147 60.3502
-\; 87.9758 60.0941 \; \;;
-#X scalar trace-template 300 0 9 \; 83.2926 68.0278 \; 83.1492 70.1776
-\; 83.2333 72.9146 \; 83.4398 73.7301 \; 83.42 72.5027 \; 83.267 70.4536
-\; 83.3528 64.4197 \; 83.6425 61.4444 \; 83.884 52.8312 \; 83.5122
-42.0604 \; \;;
-#X scalar trace-template 300 0 12 \; 85.2783 67.1105 \; 85.1193 68.9657
-\; 84.8442 66.5232 \; 85.0036 56.9935 \; 84.8872 62.6059 \; 84.7007
-67.5506 \; 84.7055 68.8174 \; 84.5233 64.4014 \; 84.6818 56.0597 \;
-84.7593 44.5969 \; \;;
-#X scalar trace-template 300 0 17 \; 89.5634 55.0015 \; 89.5044 55.4601
-\; \;;
-#X scalar trace-template 300 0 23 \; 88.9755 55.1891 \; 88.9778 54.1275
-\; 88.9778 59.5792 \; 89.0019 64.0404 \; 88.8786 63.9426 \; 88.6571
-64.7298 \; 88.6237 62.788 \; 88.8031 56.8166 \; \;;
-#X scalar trace-template 305 0 2 \; 80.0179 69.9682 \; \;;
-#X scalar trace-template 305 0 8 \; 80.8241 68.5095 \; 80.9117 70.2604
-\; 81.222 72.2413 \; 81.0717 72.3586 \; 81.0845 66.0535 \; 81.2416
-62.7177 \; 81.5531 62.3134 \; \;;
-#X scalar trace-template 305 0 13 \; 87.4727 59.4454 \; \;;
-#X scalar trace-template 305 0 14 \; 105.817 56.1494 \; 105.833 60.6558
-\; 105.87 62.9625 \; 105.878 63.5852 \; 105.828 60.7864 \; 105.73 59.3848
-\; 105.675 54.251 \; \;;
-#X scalar trace-template 305 0 15 \; 106.387 54.491 \; 106.426 58.0307
-\; 106.464 60.194 \; 106.472 60.4796 \; \;;
-#X scalar trace-template 310 0 2 \; 86.7028 64.7523 \; 86.9115 57.9052
-\; 86.7603 64.4256 \; 86.5063 66.7744 \; 86.5963 68.2344 \; 86.3281
-64.5333 \; 86.3183 53.9856 \; \;;
-#X scalar trace-template 310 0 10 \; 105.224 59.0693 \; 105.261 61.5415
-\; 105.273 62.1986 \; 105.221 59.9921 \; 105.154 58.7847 \; 105.105
-54.3413 \; 105.045 42.7311 \; \;;
-#X scalar trace-template 310 0 13 \; 90.5756 59.7267 \; 90.5454 60.2136
-\; 90.5263 57.802 \; \;;
-#X scalar trace-template 310 0 17 \; 104.592 56.5635 \; 104.627 59.1332
-\; 104.644 59.4718 \; \;;
-#X scalar trace-template 310 0 18 \; 100.237 55.8602 \; 100.222 59.5315
-\; 100.339 59.1349 \; \;;
-#X scalar trace-template 310 0 19 \; 103.95 55.7824 \; 103.97 58.7454
-\; 104.008 59.6749 \; 103.998 57.7309 \; \;;
-#X scalar trace-template 310 0 20 \; 103.269 54.9448 \; 103.287 57.6945
-\; 103.334 58.2133 \; \;;
-#X scalar trace-template 310 0 21 \; 101.068 54.6702 \; \;;
-#X scalar trace-template 310 0 24 \; 90.7356 56.6379 \; \;;
-#X scalar trace-template 315 0 4 \; 82.8591 61.1336 \; \;;
-#X scalar trace-template 315 0 21 \; 91.9623 58.3485 \; 91.928 56.0813
-\; \;;
-#X scalar trace-template 315 0 24 \; 96.6513 56.8722 \; \;;
-#X scalar trace-template 320 0 4 \; 89.9368 56.2471 \; 90.1035 58.9852
-\; 90.07 57.9748 \; 90.2112 54.0475 \; \;;
-#X scalar trace-template 320 0 6 \; 99.5367 56.3944 \; \;;
-#X scalar trace-template 320 0 24 \; 102.633 56.1407 \; \;;
-#X scalar trace-template 325 0 6 \; 80.5761 72.1063 \; 80.2165 72.0208
-\; 79.9316 68.876 \; 79.5233 62.0462 \; 79.5789 53.953 \; \;;
-#X scalar trace-template 325 0 13 \; 87.0528 69.2754 \; 87.0426 66.0437
-\; 87.3775 62.4298 \; 87.6385 57.9551 \; \;;
-#X scalar trace-template 325 0 15 \; 82.6044 67.4846 \; 82.6778 69.262
-\; 82.6647 62.5294 \; \;;
-#X scalar trace-template 325 0 17 \; 85.7432 65.5253 \; 85.9924 62.769
-\; 85.6997 60.4339 \; \;;
-#X scalar trace-template 325 0 18 \; 88.2 65.6829 \; 88.2464 65.756
-\; 88.0358 64.1864 \; \;;
-#X scalar trace-template 325 0 20 \; 83.7216 62.3216 \; \;;
-#X scalar trace-template 325 0 21 \; 89.669 60.3204 \; 89.6764 55.3495
-\; \;;
-#X scalar trace-template 325 0 24 \; 89.1766 55.5771 \; 89.4102 58.9538
-\; 89.4509 58.0707 \; 89.5703 49.4026 \; 89.8847 38.0367 \; 89.9639
-44.1111 \; 90.0483 49.3299 \; 90.1814 46.0072 \; 90.3714 37.4929 \;
-90.4441 25.6514 \; \;;
-#X scalar trace-template 330 0 19 \; 77.593 75.1091 \; 77.2742 72.1158
-\; 77.0455 63.9008 \; 77.2983 49.3089 \; \;;
-#X scalar trace-template 330 0 20 \; 97.0107 56.0683 \; 97.3363 54.4821
-\; 97.3009 49.7133 \; \;;
-#X scalar trace-template 335 0 5 \; 74.0272 69.1504 \; 73.4653 61.6327
-\; 72.3234 49.0497 \; \;;
-#X scalar trace-template 335 0 21 \; 82.2421 64.5733 \; 82.032 56.394
-\; 82.5563 44.784 \; \;;
-#X scalar trace-template 335 0 22 \; 90.8108 54.9334 \; 90.9077 48.7975
-\; \;;
-#X scalar trace-template 340 0 4 \; 35.7851 59.4932 \; 31.7536 63.2974
-\; 31.1215 65.4935 \; 28.6878 63.3003 \; 30.2833 60.9601 \; 19.2749
-52.2256 \; 25.5508 55.2836 \; 29.8523 60.0216 \; 24.1448 56.15 \; 19.5336
-53.3874 \; \;;
-#X scalar trace-template 340 0 8 \; 87.8377 59.3892 \; 88.3514 47.2605
-\; \;;
-#X scalar trace-template 340 0 11 \; 97.4188 42.032 \; 97.4011 41.6583
-\; \;;
-#X scalar trace-template 340 0 14 \; 110.493 46.6254 \; \;;
-#X scalar trace-template 340 0 15 \; 92.201 46.7388 \; \;;
-#X scalar trace-template 340 0 17 \; 91.2228 48.5465 \; 91.3755 42.6278
-\; 91.2474 47.5923 \; 91.1825 51.1318 \; 91.1734 49.1408 \; 91.2814
-40.2833 \; \;;
-#X scalar trace-template 340 0 18 \; 96.6013 46.0482 \; \;;
-#X scalar trace-template 340 0 23 \; 95.5346 45.4835 \; \;;
-#X scalar trace-template 345 0 2 \; 76.2159 28.6086 \; \;;
-#X scalar trace-template 345 0 10 \; 78.7345 52.5548 \; \;;
-#X scalar trace-template 345 0 13 \; 79.2708 54.4825 \; \;;
-#X scalar trace-template 345 0 14 \; 118.621 50.2389 \; 118.623 56.7354
-\; 118.623 56.3214 \; 118.623 52.6933 \; 118.596 42.2541 \; \;;
-#X scalar trace-template 345 0 15 \; 118.653 49.5421 \; 118.647 55.2675
-\; \;;
-#X scalar trace-template 345 0 18 \; 118.812 41.8952 \; 118.812 53.1685
-\; 118.81 51.6327 \; \;;
-#X scalar trace-template 345 0 20 \; 81.0433 41.0146 \; \;;
-#X scalar trace-template 345 0 22 \; 88.6085 43.4369 \; \;;
-#X scalar trace-template 345 0 23 \; 97.1709 41.8519 \; 97.259 45.6074
-\; \;;
-#X scalar trace-template 350 0 2 \; 47.6625 72.717 \; 47.0243 65.6857
-\; 46.0688 63.188 \; 46.3916 65.948 \; \;;
-#X scalar trace-template 350 0 3 \; 118.839 51.9363 \; 118.858 45.9018
-\; \;;
-#X scalar trace-template 350 0 5 \; 58.8163 43.6609 \; 58.536 49.0447
-\; 58.9719 58.2416 \; \;;
-#X scalar trace-template 350 0 6 \; 118.217 51.0194 \; 118.214 46.8435
-\; 118.203 48.852 \; 118.157 37.2743 \; \;;
-#X scalar trace-template 350 0 8 \; 117.195 50.1835 \; 117.188 50.3007
-\; 117.186 47.2144 \; 117.182 38.4363 \; \;;
-#X scalar trace-template 350 0 9 \; 118.449 46.5845 \; 118.456 50.4383
-\; 118.455 46.6179 \; \;;
-#X scalar trace-template 350 0 10 \; 118.189 51.7369 \; 118.183 50.3789
-\; \;;
-#X scalar trace-template 350 0 11 \; 117.229 47.7081 \; \;;
-#X scalar trace-template 350 0 12 \; 116.9 45.3111 \; 116.922 48.6047
-\; 116.927 46.1897 \; \;;
-#X scalar trace-template 350 0 13 \; 116.437 45.4545 \; \;;
-#X scalar trace-template 350 0 19 \; 103.569 44.4258 \; 103.578 48.4687
-\; 103.579 47.877 \; 103.578 41.9992 \; 103.477 32.5325 \; 103.623
-14.9483 \; \;;
-#X scalar trace-template 350 0 20 \; 62.1651 47.0133 \; 61.2075 47.0941
-\; 61.2289 56.8588 \; \;;
-#X scalar trace-template 350 0 21 \; 74.0679 43.4681 \; \;;
-#X scalar trace-template 350 0 22 \; 89.4222 43.9958 \; 89.4563 48.8437
-\; 89.6958 46.5906 \; \;;
-#X scalar trace-template 355 0 0 \; 118.871 51.1148 \; 118.879 46.6302
-\; \;;
-#X scalar trace-template 355 0 11 \; 65.7114 53.2559 \; \;;
-#X scalar trace-template 355 0 13 \; 113.465 48.4965 \; 113.493 47.0391
-\; 113.495 36.6357 \; \;;
-#X scalar trace-template 355 0 15 \; 92.1996 47.137 \; 92.2036 47.7415
-\; 92.2006 43.4245 \; 92.1676 37.3339 \; \;;
-#X scalar trace-template 355 0 21 \; 66.759 48.4602 \; \;;
-#X scalar trace-template 355 0 23 \; 97.7557 46.6582 \; 97.8155 48.7064
-\; 97.893 44.4245 \; 97.9237 36.1269 \; \;;
-#X scalar trace-template 360 0 3 \; 48.7035 62.6193 \; \;;
-#X scalar trace-template 360 0 7 \; 73.4931 47.4781 \; 73.6675 42.6621
-\; 73.8262 32.2809 \; 74.2415 24.5126 \; 74.1419 35.5704 \; \;;
-#X scalar trace-template 360 0 10 \; 115.796 47.2363 \; 115.797 42.2171
-\; \;;
-#X scalar trace-template 360 0 11 \; 115.194 46.379 \; \;;
-#X scalar trace-template 360 0 18 \; 95.328 47.0185 \; 95.3837 43.3352
-\; 95.4206 31.8743 \; \;;
-#X scalar trace-template 360 0 21 \; 116.052 46.4809 \; \;;
-#X scalar trace-template 365 0 0 \; 38.311 64.1199 \; 38.9048 64.7289
-\; 40.4917 57.7438 \; 38.4538 40.7919 \; 35.1935 46.8531 \; 33.1353
-60.3554 \; \;;
-#X scalar trace-template 365 0 1 \; 97.6632 42.787 \; \;;
-#X scalar trace-template 365 0 3 \; 72.8944 43.6083 \; 72.9651 33.3548
-\; 73.0981 22.4101 \; 73.2833 32.6724 \; \;;
-#X scalar trace-template 365 0 5 \; 95.6004 43.1966 \; 95.5311 35.313
-\; \;;
-#X scalar trace-template 365 0 9 \; 77.2834 41.0876 \; 77.0907 31.1442
-\; \;;
-#X scalar trace-template 365 0 11 \; 115.744 39.5832 \; \;;
-#X scalar trace-template 365 0 12 \; 111.245 39.2466 \; \;;
-#X scalar trace-template 365 0 20 \; 102.806 40.9117 \; 102.852 28.5293
-\; 102.907 14.7374 \; \;;
-#X scalar trace-template 365 0 21 \; 117.45 38.6995 \; \;;
-#X scalar trace-template 365 0 22 \; 105.997 37.223 \; \;;
-#X scalar trace-template 370 0 1 \; 66.3783 40.9443 \; 65.2771 33.124
-\; 65.8151 28.9944 \; 65.2453 48.7031 \; 65.743 55.9395 \; 65.3801
-60.6759 \; \;;
-#X scalar trace-template 370 0 2 \; 69.0853 30.3027 \; 68.467 28.8096
-\; \;;
-#X scalar trace-template 370 0 6 \; 97.8164 35.9603 \; 97.7443 17.8372
-\; \;;
-#X scalar trace-template 370 0 8 \; 91.9387 36.7315 \; \;;
-#X scalar trace-template 370 0 10 \; 103.396 30.4241 \; 103.204 13.1761
-\; \;;
-#X scalar trace-template 370 0 11 \; 75.4043 27.6907 \; \;;
-#X scalar trace-template 370 0 12 \; 77.8151 31.1187 \; \;;
-#X scalar trace-template 370 0 13 \; 84.3879 27.0474 \; \;;
-#X scalar trace-template 370 0 14 \; 94.3428 29.7513 \; \;;
-#X scalar trace-template 370 0 17 \; 94.4968 30.2066 \; \;;
-#X scalar trace-template 370 0 21 \; 79.6101 27.8398 \; 79.7246 21.2916
-\; 80.1815 24.1713 \; \;;
-#X scalar trace-template 370 0 22 \; 86.293 24.6651 \; 86.4283 19.1085
-\; \;;
-#X scalar trace-template 375 0 5 \; 61.2854 32.7182 \; 61.0562 33.7467
-\; \;;
-#X scalar trace-template 375 0 8 \; 62.6765 29.4744 \; 63.6027 29.9359
-\; \;;
-#X scalar trace-template 375 0 9 \; 98.2278 20.236 \; \;;
-#X scalar trace-template 375 0 11 \; 97.3737 20.3509 \; \;;
-#X scalar trace-template 375 0 12 \; 96.9678 18.7081 \; \;;
-#X scalar trace-template 375 0 13 \; 71.0483 16.0877 \; \;;
-#X scalar trace-template 375 0 14 \; 98.9662 16.3931 \; \;;
-#X scalar trace-template 375 0 15 \; 99.6663 16.5622 \; 99.7906 25.8623
-\; \;;
-#X scalar trace-template 375 0 17 \; 81.7021 15.6174 \; 81.4952 25.2012
-\; \;;
-#X scalar trace-template 375 0 18 \; 105.412 13.9223 \; \;;
-#X scalar trace-template 375 0 23 \; 87.2154 16.6325 \; \;;
-#X scalar trace-template 375 0 24 \; 110.634 14.7738 \; 110.654 22.5544
-\; \;;
-#X scalar trace-template 380 0 2 \; 67.1 33.6903 \; \;;
-#X scalar trace-template 380 0 6 \; 115.313 27.4945 \; \;;
-#X scalar trace-template 380 0 9 \; 107.303 26.0861 \; \;;
-#X scalar trace-template 380 0 10 \; 118.328 24.793 \; \;;
-#X scalar trace-template 380 0 11 \; 106.179 27.049 \; 106.278 46.4892
-\; 106.282 52.7796 \; \;;
-#X scalar trace-template 380 0 12 \; 112.148 26.0024 \; \;;
-#X scalar trace-template 380 0 13 \; 118.136 23.8267 \; \;;
-#X scalar trace-template 380 0 14 \; 101.611 25.2761 \; \;;
-#X scalar trace-template 380 0 18 \; 101.785 25.2998 \; \;;
-#X scalar trace-template 380 0 19 \; 113.559 25.3039 \; 113.562 43.2953
-\; \;;
-#X scalar trace-template 380 0 20 \; 100.005 22.0165 \; 100.238 51.3831
-\; 100.226 56.3502 \; 100.311 54.9957 \; 100.322 50.8734 \; \;;
-#X scalar trace-template 380 0 22 \; 118.467 20.5896 \; \;;
-#X scalar trace-template 380 0 23 \; 113.591 26.4585 \; \;;
-#X scalar trace-template 385 0 2 \; 93.3693 50.0846 \; 93.3891 60.2179
-\; 93.4491 59.7553 \; 93.42 60.9067 \; \;;
-#X scalar trace-template 385 0 3 \; 100.315 51.6171 \; \;;
-#X scalar trace-template 385 0 5 \; 111.721 44.8345 \; 111.722 52.0983
-\; 111.724 51.5637 \; \;;
-#X scalar trace-template 385 0 6 \; 99.4296 43.7268 \; \;;
-#X scalar trace-template 385 0 7 \; 104.739 43.5809 \; 104.791 52.1069
-\; 104.789 53.0115 \; \;;
-#X scalar trace-template 385 0 8 \; 106.823 44.7833 \; \;;
-#X scalar trace-template 385 0 9 \; 57.4734 43.0368 \; 54.999 52.9434
-\; 56.9433 58.4677 \; 56.2558 71.4473 \; 58.058 71.4507 \; 57.9736
-71.8686 \; 57.559 69.1831 \; 57.0099 70.1424 \; 56.9352 72.225 \; 56.7565
-74.1905 \; 57.023 73.7814 \; 57.0353 73.3945 \; 56.9876 73.5521 \;
-56.8695 73.9286 \; 56.7749 74.289 \; 56.685 74.145 \; 56.6709 73.5798
-\; 56.4462 73.1142 \; 56.2825 72.4107 \; 56.5862 70.4527 \; 56.9145
-68.9277 \; 56.7531 68.766 \; 56.9633 68.5499 \; 57.0206 68.0578 \;
-56.3817 68.9635 \; 56.4395 69.6412 \; 57.1259 69.5199 \; 57.6043 69.5414
-\; 58.0134 69.5198 \; 58.2535 69.3355 \; 58.7792 69.01 \; 59.0711 69.0329
-\; 59.2884 69.1174 \; 59.4277 69.0332 \; 59.4741 68.7841 \; 59.334
-68.1373 \; 59.1709 66.5248 \; 58.9582 64.315 \; \;;
-#X scalar trace-template 385 0 10 \; 103.964 49.2138 \; 103.959 53.7585
-\; 103.916 57.878 \; 103.899 55.5874 \; \;;
-#X scalar trace-template 385 0 12 \; 98.4925 43.4366 \; 98.4979 54.6725
-\; 98.494 57.3374 \; 98.5186 59.4699 \; 98.5202 58.342 \; 98.4551 53.2158
-\; \;;
-#X scalar trace-template 385 0 13 \; 98.3805 42.2791 \; 98.4031 56.4782
-\; \;;
-#X scalar trace-template 385 0 14 \; 104.016 47.8447 \; \;;
-#X scalar trace-template 385 0 15 \; 113.88 41.6872 \; \;;
-#X scalar trace-template 385 0 16 \; 114.954 41.3719 \; \;;
-#X scalar trace-template 385 0 17 \; 105.136 40.6514 \; \;;
-#X scalar trace-template 385 0 18 \; 103.236 45.0143 \; \;;
-#X scalar trace-template 385 0 21 \; 114.13 40.4122 \; \;;
-#X scalar trace-template 385 0 22 \; 117.03 39.607 \; \;;
-#X scalar trace-template 385 0 23 \; 103.163 46.7184 \; \;;
-#X scalar trace-template 385 0 24 \; 117.262 36.2618 \; \;;
-#X scalar trace-template 390 0 3 \; 37.0668 61.6493 \; 41.8484 64.578
-\; 43.3946 73.6508 \; 42.7265 79.3467 \; 40.9228 81.5687 \; 39.4832
-81.1123 \; 38.5234 80.2506 \; 38.202 79.9754 \; 38.1028 79.4859 \;
-38.0069 79.3498 \; 38.0873 79.5262 \; 38.0258 79.4099 \; 37.9914 78.9947
-\; 37.7747 78.3497 \; 37.5757 77.7038 \; 37.3938 77.3844 \; 37.2709
-77.2654 \; 37.0865 77.0259 \; 37.0065 76.7741 \; 37.3956 76.5332 \;
-37.8763 76.1895 \; 37.7784 75.3773 \; 38.0883 74.7868 \; 37.8282 73.7482
-\; 37.0406 73.2887 \; 37.7628 74.3709 \; 38.2268 75.9839 \; 38.7929
-77.519 \; 39.2504 78.7284 \; 39.6836 79.6803 \; 40.0322 80.609 \; 40.2782
-81.2653 \; 40.4134 81.6036 \; 40.4804 81.8192 \; 40.535 81.9699 \;
-40.5344 82.036 \; 40.7909 81.6955 \; 40.8477 79.4066 \; 40.5724 74.2557
-\; 39.4263 67.0187 \; 40.3201 61.4596 \; 41.2455 53.3823 \; \;;
-#X scalar trace-template 390 0 4 \; 93.5805 56.7892 \; \;;
-#X scalar trace-template 390 0 6 \; 63.2391 54.9406 \; 63.2873 62.0863
-\; 64.0134 75.9389 \; 64.1655 77.5121 \; 63.9044 74.665 \; 62.7931
-67.7733 \; 62.2322 66.4088 \; 61.9579 66.3871 \; 61.984 66.4297 \;
-61.9671 66.1687 \; 62.0955 66.3099 \; 61.8897 66.0538 \; 61.9792 65.8605
-\; 61.9292 64.5702 \; 61.8976 63.3387 \; 61.2528 61.7569 \; 60.9979
-61.441 \; 61.0368 60.49 \; 61.5053 59.7703 \; 61.8281 60.7318 \; 61.8117
-61.9132 \; 62.8703 66.1534 \; \;;
-#X scalar trace-template 390 0 8 \; 59.7929 53.5529 \; 60.7909 58.8953
-\; \;;
-#X scalar trace-template 390 0 14 \; 100.153 57.0463 \; 100.071 55.5317
-\; 100.006 54.2763 \; \;;
-#X scalar trace-template 390 0 15 \; 72.8203 53.806 \; 72.5635 55.0585
-\; 72.8066 55.3802 \; 73.1468 58.2625 \; 72.9071 59.73 \; \;;
-#X scalar trace-template 390 0 16 \; 106.345 50.0086 \; 106.33 52.2791
-\; \;;
-#X scalar trace-template 390 0 17 \; 104.357 50.8812 \; 104.297 55.3325
-\; 104.193 55.4977 \; \;;
-#X scalar trace-template 390 0 18 \; 109.702 52.6993 \; \;;
-#X scalar trace-template 390 0 19 \; 71.1141 50.9943 \; 71.4208 51.9311
-\; 71.4241 55.3353 \; 71.4039 59.7705 \; 71.4815 59.9607 \; 72.1706
-60.9339 \; 71.9803 57.3388 \; 71.7828 55.2045 \; 71.738 54.5132 \;
-71.7847 53.5202 \; 71.6964 52.1305 \; 71.6303 50.4562 \; 71.4254 56.7772
-\; 71.0655 64.1456 \; 71.3079 70.1473 \; 71.1559 74.4095 \; 71.0092
-76.7439 \; 71.0113 75.5618 \; 71.2194 73.0289 \; 71.095 72.5964 \;
-70.9446 73.3419 \; 71.4077 65.2273 \; 71.0926 67.4764 \; \;;
-#X scalar trace-template 390 0 21 \; 118.331 51.7243 \; \;;
-#X scalar trace-template 390 0 22 \; 115.768 51.4252 \; \;;
-#X scalar trace-template 390 0 23 \; 112.423 51.0074 \; \;;
-#X scalar trace-template 390 0 24 \; 74.373 51.534 \; \;;
-#X scalar trace-template 395 0 0 \; 51.8779 60.2172 \; \;;
-#X scalar trace-template 395 0 4 \; 93.0794 56.7877 \; 93.0585 60.6526
-\; 93.0661 64.8537 \; 93.0586 64.316 \; 93.0829 57.8017 \; 92.9957
-50.2935 \; \;;
-#X scalar trace-template 395 0 11 \; 68.5645 55.8434 \; 68.1628 64.0191
-\; 68.0025 70.957 \; 67.8113 74.1461 \; 67.7327 72.1856 \; 67.6405
-66.935 \; 68.2277 57.7435 \; 69.0114 56.4171 \; 69.1769 55.4684 \;
-69.1022 55.6504 \; 69.0435 55.5131 \; 69.0288 58.1368 \; 68.8294 67.4502
-\; 69.0139 73.4645 \; 68.7206 73.2902 \; 68.377 69.2132 \; 67.8704
-63.5782 \; 67.01 58.7076 \; \;;
-#X scalar trace-template 395 0 13 \; 98.1451 55.7274 \; 98.115 57.0479
-\; 98.0521 56.1766 \; \;;
-#X scalar trace-template 395 0 18 \; 93.7856 54.7965 \; 93.9083 58.7549
-\; 93.9607 62.5023 \; 94.0649 59.4979 \; 94.1159 56.3706 \; 94.1572
-52.5386 \; 94.1933 53.5889 \; 94.3063 55.4104 \; 94.3906 54.0401 \;
-94.4298 51.4517 \; 94.3554 48.3642 \; \;;
-#X scalar trace-template 395 0 21 \; 99.2915 52.4865 \; 99.2783 53.6627
-\; 99.1982 52.6905 \; \;;
-#X scalar trace-template 395 0 22 \; 99.6001 51.6552 \; 99.5883 51.8291
-\; \;;
-#X scalar trace-template 395 0 23 \; 97.7982 50.7793 \; 97.7447 54.8176
-\; 97.7469 57.1902 \; 97.8385 54.886 \; \;;
-#X scalar trace-template 395 0 24 \; 92.318 48.4004 \; 92.3201 53.9851
-\; 92.3011 60.3238 \; 92.2804 61.4122 \; 91.9803 58.2215 \; 91.9808
-48.9789 \; 92.0683 45.4198 \; 92.2134 47.11 \; 92.2924 49.5927 \; 92.3131
-51.7382 \; 92.2196 51.6828 \; 92.3936 54.5223 \; 92.3862 55.7333 \;
-92.3399 61.1094 \; \;;
-#X scalar trace-template 400 0 0 \; 64.6747 74.3115 \; \;;
-#X scalar trace-template 400 0 1 \; 31.706 69.0071 \; \;;
-#X scalar trace-template 400 0 5 \; 54.6345 70.6083 \; 52.9808 74.4669
-\; 51.6154 80.0792 \; 50.9218 82.0608 \; 50.3467 83.0251 \; 50.2382
-83.8349 \; 50.1338 84.1139 \; 50.0007 84 \; 50.0633 83.897 \; 50.0111
-83.6855 \; 49.8889 83.3392 \; 49.6842 82.881 \; 49.5634 82.2208 \;
-49.4359 81.4713 \; 49.2318 80.8375 \; 49.0282 80.1351 \; 49.1767 79.328
-\; 49.5796 78.3662 \; 49.792 77.7087 \; 49.9036 76.9973 \; 50.0958
-76.7103 \; 49.6123 76.2172 \; 49.3632 76.4464 \; 49.9352 77.0797 \;
-50.3958 77.867 \; 50.8846 78.6451 \; 51.2521 79.4906 \; 51.6328 80.088
-\; 52.003 80.5506 \; 52.3018 80.8978 \; 52.4284 81.0977 \; 52.4885
-81.2607 \; 52.5104 81.3666 \; 52.4499 81.1428 \; 52.3949 79.7438 \;
-53.209 73.7855 \; 53.5057 65.1719 \; 54.7375 52.014 \; 54.2386 47.2216
-\; \;;
-#X scalar trace-template 400 0 7 \; 94.7709 53.2042 \; 94.6756 58.4947
-\; 94.7693 57.7545 \; 94.8286 56.0705 \; 94.8183 53.9364 \; 94.8701
-52.2989 \; 95.0344 49.8333 \; 95.0838 48.2613 \; 95.0477 46.3652 \;
-95.0083 43.1454 \; \;;
-#X scalar trace-template 400 0 8 \; 91.582 51.3465 \; 91.6108 56.8425
-\; 91.6434 58.5355 \; \;;
-#X scalar trace-template 400 0 16 \; 97.1211 51.3276 \; 97.1747 52.692
-\; \;;
-#X scalar trace-template 405 0 0 \; 70.2302 59.6623 \; \;;
-#X scalar trace-template 405 0 1 \; 95.3188 55.4147 \; 95.3418 56.1851
-\; 95.5114 53.2473 \; 95.5304 46.8457 \; \;;
-#X scalar trace-template 405 0 2 \; 75.7073 53.7733 \; 75.6781 54.6239
-\; 75.5982 50.493 \; 75.393 44.5731 \; \;;
-#X scalar trace-template 405 0 10 \; 95.9519 53.9215 \; 95.9693 53.7395
-\; 96.161 49.8455 \; \;;
-#X scalar trace-template 405 0 14 \; 90.715 52.9653 \; \;;
-#X scalar trace-template 405 0 17 \; 96.5703 52.2934 \; 96.4942 51.287
-\; \;;
-#X scalar trace-template 405 0 20 \; 78.0186 52.8112 \; 78.3004 51.5168
-\; 78.5826 51.6835 \; 78.7019 45.1359 \; \;;
-#X scalar trace-template 405 0 22 \; 103.144 51.9664 \; 103.101 52.6842
-\; 103.032 47.8254 \; \;;
-#X scalar trace-template 410 0 0 \; 65.1942 72.6254 \; 65.4817 72.9527
-\; 66.0561 70.7274 \; 65.7887 68.6363 \; 65.8253 69.1864 \; 65.8876
-68.9626 \; 65.8775 68.727 \; 65.765 68.3261 \; 65.8165 68.2814 \; 66.0022
-68.8013 \; 65.8593 68.8224 \; 65.1658 68.0576 \; 64.8563 67.7534 \;
-64.8865 66.5277 \; 65.3462 64.4466 \; 65.484 65.7133 \; 65.8589 69.2515
-\; 66.4075 73.8187 \; 65.5859 70.3598 \; 65.1163 71.0524 \; 65.3866
-69.8158 \; 66.1851 69.4536 \; 66.7235 68.1516 \; 66.9742 68.1973 \;
-67.2794 68.0042 \; 67.6901 67.547 \; 68.076 67.9899 \; 68.2552 68.076
-\; 68.3061 68.1516 \; 68.3209 68.0936 \; 68.2315 67.6663 \; 67.8039
-65.0708 \; 67.3466 61.5109 \; \;;
-#X scalar trace-template 410 0 13 \; 30.2537 66.5926 \; 28.7656 62.4366
-\; 23.8669 58.4795 \; 28.9677 53.4282 \; \;;
-#X scalar trace-template 410 0 14 \; 93.7894 59.6069 \; 93.8556 53.863
-\; \;;
-#X scalar trace-template 410 0 16 \; 102.632 50.9021 \; \;;
-#X scalar trace-template 410 0 21 \; 77.1115 50.4848 \; 76.7415 49.5282
-\; \;;
-#X scalar trace-template 415 0 8 \; 92.8438 57.3295 \; 92.84 52.2746
-\; 92.8621 49.9578 \; 92.9702 53.9605 \; 93.0411 56.2904 \; 93.0246
-56.6538 \; 92.93 55.4646 \; 92.9515 53.109 \; 93.0813 54.637 \; 93.019
-62.4155 \; \;;
-#X scalar trace-template 415 0 12 \; 81.6327 50.8855 \; 81.3443 49.0619
-\; 81.0317 50.0767 \; 80.9332 50.9648 \; 81.0601 49.5628 \; 81.0262
-47.3837 \; 80.9232 45.7369 \; 80.6749 49.6062 \; 80.4723 53.464 \;
-80.3874 54.9019 \; \;;
-#X scalar trace-template 415 0 15 \; 91.1656 49.0433 \; 91.4823 42.143
-\; 91.4663 44.9214 \; 91.4886 48.0358 \; 91.5338 48.4514 \; 91.5073
-47.8788 \; 91.4127 47.7073 \; 91.1587 47.1028 \; 90.8319 50.7381 \;
-90.8681 55.0399 \; \;;
-#X scalar trace-template 415 0 16 \; 90.2623 48.9218 \; \;;
-#X scalar trace-template 415 0 17 \; 74.6777 48.8598 \; \;;
-#X scalar trace-template 415 0 23 \; 89.4117 46.8769 \; \;;
-#X scalar trace-template 420 0 10 \; 68.9823 57.9746 \; \;;
-#X scalar trace-template 420 0 14 \; 93.4734 51.9908 \; 93.4967 51.3335
-\; 93.6351 51.2657 \; 93.6948 52.082 \; 93.689 52.5698 \; 93.6238 52.5727
-\; 93.7039 47.8707 \; 93.8386 46.9087 \; \;;
-#X scalar trace-template 420 0 16 \; 73.7681 49.4856 \; 73.8699 46.3965
-\; 74.0214 44.1387 \; 74.2299 43.1116 \; 74.0042 41.3954 \; 74.0215
-41.5129 \; 73.4355 48.1739 \; 73.5441 56.5877 \; 73.4131 62.8873 \;
-72.8941 65.8422 \; 72.9414 68.4247 \; 73.1376 70.0577 \; 73.4732 68.2907
-\; 73.7834 65.4445 \; 74.0083 61.6385 \; 73.9691 61.0821 \; \;;
-#X scalar trace-template 420 0 17 \; 84.3214 48.0136 \; 84.5921 47.2994
-\; \;;
-#X scalar trace-template 420 0 21 \; 82.858 47.8268 \; 82.5141 46.2724
-\; 82.3785 46.3624 \; 82.416 44.9319 \; 82.3566 44.0036 \; 82.3332
-43.0712 \; 82.0267 48.3045 \; 81.8764 56.8812 \; 81.7218 59.0443 \;
-81.5329 56.1969 \; 81.3016 55.8829 \; 81.1999 55.5795 \; 81.1217 57.307
-\; 80.6739 53.7685 \; \;;
-#X scalar trace-template 420 0 22 \; 80.1919 45.6398 \; \;;
-#X scalar trace-template 420 0 23 \; 78.3105 48.0387 \; 78.0644 44.8867
-\; 77.9689 46.5818 \; 77.8672 49.4984 \; 77.7538 51.4465 \; 77.6162
-52.4088 \; 77.4481 53.8951 \; 77.2252 56.3992 \; 77.1069 58.7346 \;
-76.931 60.4912 \; 76.7384 62.5741 \; 76.5581 62.9937 \; 76.2622 64.5483
-\; 75.935 63.7163 \; 75.6269 59.1356 \; 75.3923 56.4981 \; 74.9826
-58.9193 \; 74.3291 66.0533 \; \;;
-#X scalar trace-template 425 0 1 \; 89.6982 48.3306 \; 89.8304 49.5892
-\; 89.8508 48.3749 \; 89.8545 46.2613 \; 89.783 45.7989 \; \;;
-#X scalar trace-template 425 0 2 \; 90.5152 46.4056 \; 90.6456 48.1742
-\; 90.721 49.2104 \; 90.7124 49.0332 \; 90.643 48.7764 \; 90.3896 46.7112
-\; 90.0931 49.9058 \; 90.0371 56.28 \; 89.674 60.4066 \; 89.636 62.2296
-\; 89.6582 60.8852 \; 89.7031 56.5344 \; 89.7206 47.3358 \; \;;
-#X scalar trace-template 425 0 4 \; 88.8817 49.8209 \; 88.9276 49.7833
-\; 89.0176 50.717 \; 88.9951 50.2055 \; 88.868 49.5564 \; 88.6117 48.1454
-\; 88.355 50.0224 \; 88.3899 56.5105 \; \;;
-#X scalar trace-template 425 0 10 \; 85.0674 44.0682 \; 84.8409 49.0018
-\; 84.9078 47.4838 \; 84.9122 45.6971 \; 84.7996 44.9723 \; 84.3861
-53.6424 \; 84.3118 57.9956 \; 84.3249 60.1426 \; 84.0978 55.8659 \;
-83.7601 56.1963 \; 83.6617 55.9256 \; 83.6511 56.5404 \; 83.7677 55.8827
-\; \;;
-#X scalar trace-template 425 0 20 \; 83.8084 44.4051 \; 83.6517 46.9925
-\; 83.7594 47.9626 \; 83.6919 48.4217 \; 83.5918 48.8133 \; 83.3189
-51.3186 \; 83.2008 57.7621 \; 83.0812 59.261 \; 82.9302 54.8452 \;
-\;;
-#X scalar trace-template 425 0 22 \; 89.0005 46.2853 \; \;;
-#X scalar trace-template 430 0 13 \; 79.3151 47.7248 \; 79.4472 49.908
-\; 79.4711 49.6875 \; 79.4425 47.8128 \; 79.2476 47.7887 \; 79.0668
-51.4491 \; 78.8211 54.1663 \; \;;
-#X scalar trace-template 430 0 17 \; 96.2643 42.6303 \; \;;
-#X scalar trace-template 430 0 22 \; 76.1611 41.8618 \; 76.2097 42.8969
-\; 76.1801 45.8418 \; 75.9318 47.9776 \; 75.4468 50.0057 \; 75.2811
-54.1875 \; 75.2103 57.0576 \; 75.0486 60.0142 \; 75.353 56.649 \; 75.099
-61.5299 \; \;;
-#X scalar trace-template 435 0 17 \; 32.6287 39.6597 \; \;;
-#X scalar trace-template 440 0 17 \; 85.9842 41.3737 \; 85.9207 40.9137
-\; \;;
-#X scalar trace-template 450 0 1 \; 92.595 54.1639 \; \;;
-#X scalar trace-template 450 0 7 \; 93.3867 50.8815 \; \;;
-#X scalar trace-template 450 0 17 \; 84.0752 53.5514 \; \;;
-#X scalar trace-template 450 0 18 \; 71.9754 51.2307 \; \;;
-#X scalar trace-template 455 0 1 \; 89.182 51.8269 \; 89.096 58.0196
-\; 88.8953 65.3887 \; \;;
-#X scalar trace-template 455 0 7 \; 91.6268 50.5045 \; 91.5268 58.0543
-\; 91.2813 59.3876 \; \;;
-#X scalar trace-template 455 0 17 \; 87.4291 48.4764 \; 87.5024 56.7953
-\; 87.7977 59.788 \; 87.9595 61.2738 \; \;;
-#X scalar trace-template 455 0 18 \; 86.5481 47.8126 \; 86.4709 54.5901
-\; 86.9088 57.0885 \; 86.9194 60.3525 \; 86.842 60.2673 \; 86.777 58.6492
-\; 86.7582 53.1978 \; \;;
-#X scalar trace-template 460 0 14 \; 92.9317 63.453 \; 92.8243 64.6915
-\; 92.9027 59.8356 \; 92.7493 61.4731 \; 92.7019 47.4134 \; \;;
-#X scalar trace-template 465 0 4 \; 88.764 66.7744 \; 88.7466 66.6001
-\; 88.6348 64.583 \; 88.5086 57.8875 \; 88.7181 48.9359 \; \;;
-#X scalar trace-template 465 0 8 \; 91.1604 61.7312 \; 91.1638 61.7693
-\; 91.148 57.9649 \; 91.1924 53.185 \; \;;
-#X scalar trace-template 465 0 12 \; 90.4341 58.1933 \; 90.3152 58.4281
-\; \;;
-#X scalar trace-template 465 0 13 \; 84.6287 57.0493 \; \;;
-#X scalar trace-template 465 0 15 \; 93.3465 58.0651 \; 93.4106 59.3711
-\; 93.4773 56.7961 \; 93.5072 48.188 \; \;;
-#X scalar trace-template 465 0 24 \; 83.3645 55.7677 \; \;;
-#X scalar trace-template 470 0 1 \; 92.622 63.9064 \; 92.567 60.6642
-\; \;;
-#X scalar trace-template 470 0 7 \; 74.4892 62.5964 \; \;;
-#X scalar trace-template 470 0 13 \; 91.9828 57.9155 \; 91.9947 47.7828
-\; \;;
-#X scalar trace-template 470 0 20 \; 90.6412 52.9618 \; \;;
-#X scalar trace-template 470 0 24 \; 85.8917 54.3305 \; 85.8293 54.1508
-\; 85.7975 52.4587 \; 85.8241 46.3817 \; \;;
-#X scalar trace-template 475 0 7 \; 78.2175 55.2453 \; 77.9909 59.7677
-\; \;;
-#X scalar trace-template 475 0 12 \; 84.8631 53.4972 \; 84.8041 54.4078
-\; 84.4768 55.6402 \; 84.4981 50.6119 \; \;;
-#X scalar trace-template 475 0 17 \; 79.7102 53.3586 \; 79.8567 51.0561
-\; 80.2251 54.1447 \; 80.2232 55.6554 \; 80.0226 55.8852 \; 79.9023
-55.5927 \; 80.1666 58.2372 \; 80.2217 66.7559 \; 80.2008 65.549 \;
-80.3682 67.0433 \; 80.7067 64.8925 \; 80.5826 64.563 \; 80.4109 62.6492
-\; 80.1467 67.5259 \; 80.2303 66.7688 \; 80.2977 65.2865 \; 80.2999
-63.2846 \; 80.2312 59.8739 \; 80.1209 53.7781 \; 79.8288 46.6824 \;
-79.7407 26.4826 \; 80.1904 33.9665 \; 79.5131 40.8717 \; \;;
-#X scalar trace-template 475 0 20 \; 93.9657 52.1516 \; \;;
-#X scalar trace-template 480 0 1 \; 77.7725 62.5141 \; 77.5856 61.401
-\; 77.73 58.1138 \; 78.0508 61.773 \; \;;
-#X scalar trace-template 480 0 13 \; 81.9939 52.2885 \; 82.0761 57.8583
-\; 82.3145 57.3985 \; 82.4493 53.5878 \; 82.4877 48.1427 \; 82.4708
-55.0644 \; 82.0261 72.2768 \; 81.8789 74.7732 \; 81.9439 73.9254 \;
-82.1614 69.6702 \; 82.1807 67.0401 \; 81.8554 66.4255 \; 81.8015 67.0175
-\; 81.9041 66.1829 \; 81.9827 64.871 \; 82.0056 63.5091 \; 81.9382
-60.5464 \; 81.8945 54.4222 \; 81.8665 44.1251 \; 81.9834 33.9454 \;
-81.5731 33.2956 \; 81.4971 42.0351 \; \;;
-#X scalar trace-template 480 0 20 \; 91.0006 50.2484 \; \;;
-#X scalar trace-template 480 0 22 \; 102 47.4016 \; \;;
-#X scalar trace-template 485 0 7 \; 70.0239 65.2117 \; 70.3504 70.5871
-\; 69.9455 71.3615 \; 70.6126 71.8945 \; 70.405 69.7798 \; 70.329 69.16
-\; \;;
-#X scalar trace-template 485 0 8 \; 87.6995 46.7176 \; \;;
-#X scalar trace-template 485 0 11 \; 105.88 48.1684 \; 105.892 48.6287
-\; 105.918 46.7889 \; 106.009 46.8082 \; 106.023 49.7847 \; 105.932
-50.4925 \; 105.91 52.8565 \; 105.824 54.8523 \; \;;
-#X scalar trace-template 485 0 14 \; 88.916 49.7698 \; \;;
-#X scalar trace-template 485 0 15 \; 99.7817 47.3329 \; \;;
-#X scalar trace-template 485 0 20 \; 105.271 47.3223 \; 105.215 46.8185
-\; 105.183 46.3735 \; 105.097 47.0445 \; \;;
-#X scalar trace-template 485 0 22 \; 100.136 46.7691 \; \;;
-#X scalar trace-template 490 0 2 \; 70.6678 63.5153 \; \;;
-#X scalar trace-template 490 0 4 \; 67.1862 65.7134 \; 67.1142 69.1866
-\; 67.3455 72.7057 \; 67.67 72.787 \; \;;
-#X scalar trace-template 490 0 8 \; 76.9609 58.7886 \; 76.9402 59.3096
-\; 76.966 64.0213 \; 77.4012 66.4317 \; 77.4283 67.9767 \; 76.9703
-69.6261 \; 77.1465 73.8677 \; 77.3718 76.2361 \; 77.5852 77.0536 \;
-78.015 76.0112 \; 78.2914 76.4487 \; 78.3738 75.6721 \; 78.422 73.6719
-\; 78.4871 70.6498 \; 78.5075 66.277 \; 78.3841 60.0376 \; 78.1288
-50.984 \; 77.9376 37.6528 \; 78.5377 35.2224 \; 78.5455 42.6073 \;
-\;;
-#X scalar trace-template 490 0 10 \; 72.6653 60.6826 \; 72.8663 63.4311
-\; 72.8637 65.9985 \; 72.4164 67.6138 \; 72.4751 74.5938 \; 72.558
-77.9604 \; 72.6588 76.9986 \; 72.7722 74.4262 \; 73.0808 72.2931 \;
-73.4913 70.7694 \; 73.942 71.7161 \; 74.0454 71.7542 \; 74.0733 72.207
-\; 74.0496 72.5273 \; 73.8649 71.6368 \; 73.7692 67.607 \; 73.517 59.0843
-\; 74.064 46.3988 \; 73.6822 41.8651 \; 73.5244 46.3181 \; \;;
-#X scalar trace-template 490 0 14 \; 81.6159 56.9224 \; 81.4866 54.084
-\; 81.4843 52.8892 \; 81.335 56.2603 \; \;;
-#X scalar trace-template 490 0 15 \; 78.6031 55.8516 \; 78.4894 59.0283
-\; 78.3349 63.6968 \; 78.2628 68.351 \; 78.3544 71.8827 \; 78.3657
-73.2444 \; 78.729 71.531 \; 79.1016 71.5445 \; 79.0154 69.6051 \; 79.7467
-66.7767 \; \;;
-#X scalar trace-template 490 0 18 \; 84.1286 53.6739 \; \;;
-#X scalar trace-template 490 0 21 \; 83.1522 52.2185 \; 82.9014 46.6945
-\; \;;
-#X scalar trace-template 490 0 22 \; 106.211 46.1173 \; 106.225 48.2936
-\; 106.136 46.731 \; \;;
-#X scalar trace-template 490 0 24 \; 105.378 44.6412 \; 105.425 47.1615
-\; 105.435 49.5732 \; 105.415 47.7841 \; \;;
-#X scalar trace-template 495 0 2 \; 63.3088 62.274 \; 63.6483 65.0583
-\; \;;
-#X scalar trace-template 495 0 12 \; 105.563 45.3989 \; 105.671 48.7325
-\; 105.68 48.9501 \; \;;
-#X scalar trace-template 495 0 18 \; 104.694 46.5209 \; 104.72 48.263
-\; 104.736 47.1111 \; \;;
-#X scalar trace-template 500 0 1 \; 69.0971 69.2117 \; 69.0115 69.4547
-\; 68.9236 71.9118 \; 69.5557 70.9135 \; 69.764 67.4427 \; 70.2561
-68.0534 \; 70.4189 68.0555 \; 70.9783 68.6213 \; 71.2455 70.4278 \;
-71.4002 71.2079 \; 71.4417 71.6407 \; 71.3923 72.0649 \; 71.3169 72.126
-\; 71.0492 70.0548 \; 70.7152 64.0474 \; 70.8217 51.4643 \; 70.6168
-42.3312 \; 70.042 46.7001 \; \;;
-#X scalar trace-template 500 0 6 \; 61.8726 62.6533 \; 61.2582 65.0196
-\; 61.514 65.1684 \; 62.1565 64.7884 \; 62.8631 65.3668 \; 63.1208
-65.7356 \; 63.4585 65.8762 \; 63.8163 66.4072 \; 64.2257 67.3276 \;
-64.405 67.8232 \; 64.4083 68.1037 \; 64.434 68.2996 \; 64.3093 67.9724
-\; 64.1054 66.6662 \; 64.1368 62.693 \; 64.8006 55.6456 \; 64.8434
-41.2511 \; \;;
-#X scalar trace-template 500 0 16 \; 106.335 49.0608 \; 106.346 48.9659
-\; 106.289 49.04 \; 106.259 50.9816 \; \;;
-#X scalar trace-template 500 0 21 \; 106.654 45.5947 \; 106.645 48.4533
-\; 106.631 49.7704 \; 106.605 51.1537 \; \;;
-#X scalar trace-template 505 0 2 \; 73.7712 68.4809 \; 73.8504 74.5992
-\; 74.4874 77.3407 \; 75.0526 79.2297 \; 75.3196 79.3612 \; 75.5409
-77.2001 \; 75.8663 75.2055 \; 76.2175 75.5544 \; 76.296 75.122 \; 76.3493
-74.6568 \; 76.3091 73.4835 \; 76.2362 70.9012 \; 76.133 65.5664 \;
-75.914 56.8858 \; 76.5107 41.4361 \; 76.4929 31.4413 \; \;;
-#X scalar trace-template 505 0 19 \; 76.3235 62.2527 \; 75.5133 63.5007
-\; \;;
-#X scalar trace-template 505 0 20 \; 83.6409 43.9421 \; \;;
-#X scalar trace-template 505 0 22 \; 85.8906 45.3991 \; 85.6534 52.8512
-\; 85.3986 62.4321 \; 85.254 69.9902 \; 84.9991 73.3262 \; 85.0051
-68.3535 \; 84.8347 64.5104 \; 84.663 65.2854 \; 84.7752 64.0055 \;
-84.8571 61.4019 \; \;;
-#X scalar trace-template 510 0 4 \; 81.6857 71.7868 \; \;;
-#X scalar trace-template 510 0 12 \; 84.5009 54.3053 \; 84.4516 68.0483
-\; 84.6717 72.4921 \; \;;
-#X scalar trace-template 510 0 14 \; 86.8069 47.5858 \; 86.2448 54.8238
-\; 86.3258 62.9919 \; 86.4295 68.9578 \; 86.2748 68.7487 \; 86.0892
-66.3964 \; 85.9702 64.484 \; 86.0875 61.9055 \; \;;
-#X scalar trace-template 510 0 18 \; 100.425 47.8601 \; 100.548 56.1214
-\; \;;
-#X scalar trace-template 510 0 20 \; 106.959 47.5784 \; \;;
-#X scalar trace-template 510 0 23 \; 105.203 48.1733 \; \;;
-#X scalar trace-template 510 0 24 \; 100.026 46.3859 \; 100.073 54.1896
-\; 100.098 57.916 \; 100.055 57.3471 \; 100.012 56.8406 \; \;;
-#X scalar trace-template 515 0 4 \; 83.4279 70.2744 \; 83.6114 73.3595
-\; 83.7101 72.0643 \; 83.5791 68.0924 \; 83.4472 66.034 \; 83.2873
-67.6479 \; 83.4004 66.1698 \; 83.4702 64.081 \; 83.4822 62.1829 \;
-83.454 59.4481 \; 83.4136 53.7326 \; 83.4217 43.5176 \; \;;
-#X scalar trace-template 515 0 7 \; 76.7085 71.4206 \; \;;
-#X scalar trace-template 515 0 19 \; 79.9912 69.2915 \; 79.6259 67.4034
-\; \;;
-#X scalar trace-template 515 0 20 \; 100.637 53.8453 \; 100.622 57.7114
-\; 100.562 54.8402 \; \;;
-#X scalar trace-template 515 0 23 \; 101.023 52.4817 \; 101.106 53.3229
-\; \;;
-#X scalar trace-template 520 0 7 \; 77.7221 70.6852 \; \;;
-#X scalar trace-template 520 0 16 \; 86.9404 58.5173 \; \;;
-#X scalar trace-template 520 0 18 \; 87.9751 56.2674 \; 87.7132 64.8833
-\; \;;
-#X scalar trace-template 520 0 21 \; 89.0441 52.8794 \; 89.3 57.54
-\; 89.3158 62.9757 \; 89.3845 67.2661 \; 89.4406 69.1805 \; 89.534
-68.1255 \; 89.5595 64.5337 \; 89.5485 60.586 \; \;;
-#X scalar trace-template 525 0 7 \; 87.5248 66.5733 \; 87.4391 66.3192
-\; 87.3596 66.4014 \; 87.2017 66.861 \; 87.2958 63.8083 \; 87.3607
-60.8036 \; \;;
-#X scalar trace-template 525 0 11 \; 88.3988 60.5541 \; 88.3612 66.9592
-\; 88.3383 70.575 \; 88.3552 70.4503 \; 88.4339 67.6466 \; 88.4838
-63.9846 \; 88.5 61.0477 \; \;;
-#X scalar trace-template 525 0 12 \; 90.2287 56.1977 \; 90.2469 60.7629
-\; 90.2873 65.0799 \; 90.4446 68.1948 \; 90.5644 70.4341 \; 90.6157
-69.652 \; 90.6017 65.9494 \; 90.5647 60.3782 \; 90.5664 52.5491 \;
-90.8006 44.2207 \; \;;
-#X scalar trace-template 525 0 16 \; 100.274 55.0555 \; 100.271 56.4482
-\; \;;
-#X scalar trace-template 525 0 19 \; 91.1267 55.5667 \; 91.135 58.7424
-\; 91.1908 61.3757 \; 91.2722 65.0242 \; 91.4573 66.9404 \; 91.5944
-69.2178 \; 91.6211 68.708 \; 91.59 63.8532 \; 91.5047 55.8168 \; 91.7448
-44.9222 \; \;;
-#X scalar trace-template 525 0 23 \; 100.766 54.8894 \; \;;
-#X scalar trace-template 530 0 18 \; 86.72 67.1108 \; 86.7705 65.6732
-\; \;;
-#X scalar trace-template 530 0 20 \; 105.641 57.2293 \; \;;
-#X scalar trace-template 530 0 23 \; 92.8369 55.7683 \; \;;
-#X scalar trace-template 535 0 16 \; 82.834 63.5176 \; \;;
-#X scalar trace-template 535 0 20 \; 84.1493 61.0962 \; \;;
-#X scalar trace-template 535 0 23 \; 85.3574 61.1557 \; \;;
-#X scalar trace-template 535 0 24 \; 92.0731 58.0152 \; 92.1806 60.8348
-\; 92.2726 64.0431 \; 92.4273 65.878 \; 92.494 67.6394 \; 92.5046 65.8391
-\; 92.5522 59.0208 \; 92.752 50.2557 \; 92.6976 35.2008 \; \;;
-#X scalar trace-template 540 0 15 \; 99.7234 60.4762 \; \;;
-#X scalar trace-template 540 0 16 \; 100.227 59.4884 \; 100.354 58.6136
-\; \;;
-#X scalar trace-template 540 0 18 \; 93.0233 58.7117 \; 93.0881 61.0373
-\; 93.2213 62.7032 \; 93.247 65.2042 \; 93.2621 65.5166 \; 93.288 61.0725
-\; 93.5621 52.8634 \; 93.4301 35.4121 \; 93.37 33.0415 \; 93.2809 42.0326
-\; \;;
-#X scalar trace-template 540 0 20 \; 99.869 55.791 \; 99.7981 61.3428
-\; 99.9133 59.9587 \; \;;
-#X scalar trace-template 540 0 23 \; 93.8378 56.6863 \; 93.8993 59.1934
-\; 94.0057 60.61 \; 94.0263 62.0724 \; 93.9857 63.5183 \; 93.98 61.3231
-\; 94.0599 52.991 \; 94.3197 35.5436 \; \;;
-#X scalar trace-template 545 0 15 \; 95.4198 57.4325 \; 95.5111 59.1349
-\; 95.5037 60.787 \; 95.4865 60.7385 \; 95.4284 57.6801 \; 95.3903
-50.4586 \; 95.2761 32.5969 \; \;;
-#X scalar trace-template 550 0 14 \; 99.3355 59.7816 \; 99.3368 60.9503
-\; 99.2987 59.1855 \; \;;
-#X scalar trace-template 550 0 16 \; 97.5377 59.4125 \; 97.5268 60.5553
-\; 97.4973 60.6902 \; 97.4799 58.8329 \; 97.4765 54.4491 \; 97.4924
-45.9699 \; 97.5386 35.3714 \; \;;
-#X scalar trace-template 555 0 7 \; 94.7577 60.4812 \; 94.7537 60.6104
-\; 94.7588 56.8823 \; 94.8588 46.6893 \; \;;
-#X scalar trace-template 555 0 20 \; 96.8956 60.7695 \; 96.8514 60.6364
-\; 96.8366 58.4197 \; 96.8556 53.2549 \; 96.9277 44.9862 \; \;;
-#X scalar trace-template 555 0 22 \; 98.1532 59.7576 \; 98.1186 59.4233
-\; 98.0625 56.5017 \; 98.0627 49.8139 \; 98.1016 40.2011 \; \;;
-#X scalar trace-template 560 0 11 \; 96.1627 58.7818 \; 96.172 55.9452
-\; 96.2063 49.9503 \; 96.2916 39.4985 \; \;;
-#X scalar trace-template 560 0 21 \; 98.6835 58.4552 \; 98.6755 52.936
-\; \;;
-#X scalar trace-template 565 0 14 \; 92.301 57.3752 \; \;;
-#X scalar trace-template 570 0 14 \; 58.0222 61.3926 \; 57.1827 58.9038
-\; \;;
-#X scalar trace-template 570 0 21 \; 95.5221 52.3246 \; \;;
-#X scalar trace-template 575 0 0 \; 50.4538 73.0014 \; \;;
-#X scalar trace-template 575 0 4 \; 97.92 41.5941 \; \;;
-#X scalar trace-template 575 0 7 \; 106.413 38.2315 \; \;;
-#X scalar trace-template 575 0 9 \; 79.4123 36.2735 \; \;;
-#X scalar trace-template 575 0 12 \; 108.009 32.949 \; \;;
-#X scalar trace-template 575 0 19 \; 92.4956 34.9042 \; 92.4449 30.47
-\; 92.3075 44.6241 \; 92.4119 48.2365 \; \;;
-#X scalar trace-template 575 0 21 \; 117.242 31.1934 \; \;;
-#X scalar trace-template 580 0 0 \; 67.646 43.7599 \; \;;
-#X scalar trace-template 580 0 4 \; 61.1709 40.7605 \; 61.2844 44.5903
-\; \;;
-#X scalar trace-template 580 0 7 \; 66.8047 38.1124 \; 67.0533 48.2899
-\; 67.2596 49.0547 \; \;;
-#X scalar trace-template 580 0 9 \; 72.1421 37.1332 \; 72.291 42.0397
-\; \;;
-#X scalar trace-template 580 0 11 \; 90.7344 39.9425 \; \;;
-#X scalar trace-template 580 0 12 \; 91.5543 33.8808 \; 91.2736 45.7669
-\; 91.1485 49.6021 \; \;;
-#X scalar trace-template 580 0 14 \; 90.5538 39.1953 \; 90.2007 45.3504
-\; 90.3093 49.2628 \; \;;
-#X scalar trace-template 580 0 15 \; 89.3163 35.1765 \; 89.4363 44.5219
-\; \;;
-#X scalar trace-template 580 0 20 \; 91.7633 33.8919 \; \;;
-#X scalar trace-template 580 0 21 \; 88.4827 31.8753 \; 88.2437 43.4446
-\; \;;
-#X scalar trace-template 580 0 22 \; 89.1318 30.8594 \; \;;
-#X scalar trace-template 580 0 23 \; 93.0049 30.9813 \; 93.0337 42.8019
-\; \;;
-#X scalar trace-template 580 0 24 \; 84.8347 31.2284 \; \;;
-#X scalar trace-template 585 0 0 \; 23.7851 51.7882 \; 30.0712 54.8452
-\; 26.7177 56.4246 \; \;;
-#X scalar trace-template 585 0 2 \; 56.2827 53.3406 \; \;;
-#X scalar trace-template 585 0 6 \; 48.219 46.4309 \; \;;
-#X scalar trace-template 585 0 11 \; 58.8878 42.2779 \; 57.7022 47.2662
-\; \;;
-#X scalar trace-template 585 0 16 \; 66.1304 46.2247 \; \;;
-#X scalar trace-template 585 0 20 \; 63.1434 44.0477 \; \;;
-#X scalar trace-template 585 0 22 \; 74.8963 41.6702 \; \;;
-#X scalar trace-template 585 0 24 \; 82.8369 41.3798 \; \;;
-#X scalar trace-template 590 0 1 \; 113.718 53.2705 \; 113.766 59.6186
-\; 113.791 62.8436 \; 113.823 65.4335 \; 113.818 64.8404 \; 113.807
-63.4175 \; 113.816 62.3084 \; 113.88 60.3213 \; 113.879 52.0058 \;
-\;;
-#X scalar trace-template 590 0 2 \; 111.791 51.0206 \; 111.729 57.9487
-\; 111.719 59.6317 \; \;;
-#X scalar trace-template 590 0 4 \; 114 56.3057 \; 113.942 58.8198
-\; 113.94 62.0429 \; \;;
-#X scalar trace-template 590 0 6 \; 114.039 55.5829 \; \;;
-#X scalar trace-template 590 0 8 \; 43.2138 53.0163 \; \;;
-#X scalar trace-template 590 0 9 \; 114.334 60.7709 \; \;;
-#X scalar trace-template 590 0 10 \; 118.755 53.7915 \; 118.772 60.3108
-\; 118.773 58.4647 \; 118.768 57.2781 \; \;;
-#X scalar trace-template 590 0 13 \; 114.326 58.6188 \; 114.326 60.9907
-\; \;;
-#X scalar trace-template 590 0 15 \; 118.971 47.703 \; 118.985 59.3883
-\; \;;
-#X scalar trace-template 590 0 16 \; 114.299 54.0219 \; 114.299 63.924
-\; 114.285 65.2448 \; 114.277 68.3667 \; 114.274 66.6902 \; 114.246
-63.1626 \; 114.247 59.1021 \; 114.276 58.6894 \; 114.29 55.3998 \;
-\;;
-#X scalar trace-template 590 0 17 \; 118.727 52.7678 \; \;;
-#X scalar trace-template 590 0 18 \; 114.84 47.1255 \; 114.845 57.2432
-\; 114.831 61.3123 \; 114.783 60.8446 \; 114.738 59.7495 \; 114.715
-58.8673 \; 114.685 61.7935 \; 114.715 58.5927 \; 114.684 50.6263 \;
-\;;
-#X scalar trace-template 590 0 20 \; 112.48 46.1863 \; 112.43 54.7496
-\; 112.409 56.497 \; 112.362 57.9034 \; 112.327 60.2147 \; \;;
-#X scalar trace-template 590 0 21 \; 111.542 47.7409 \; 111.506 54.3546
-\; 111.514 58.7659 \; 111.539 59.9999 \; \;;
-#X scalar trace-template 590 0 22 \; 91.5021 45.8306 \; \;;
-#X scalar trace-template 590 0 23 \; 110.761 45.0076 \; \;;
-#X scalar trace-template 590 0 24 \; 117.806 45.8392 \; \;;
-#X scalar trace-template 595 0 5 \; 115.25 64.117 \; 115.229 66.3067
-\; 115.192 64.1362 \; 115.154 64.6548 \; 115.136 63.1913 \; 115.103
-57.1327 \; \;;
-#X scalar trace-template 595 0 6 \; 115.36 61.6598 \; 115.387 62.7049
-\; 115.404 61.4628 \; 115.399 57.5387 \; 115.502 56.921 \; 115.499
-56.2516 \; 115.509 54.9687 \; \;;
-#X scalar trace-template 595 0 7 \; 115.066 58.0553 \; 115.094 52.7694
-\; \;;
-#X scalar trace-template 595 0 8 \; 113.641 56.7066 \; 113.582 60.5143
-\; \;;
-#X scalar trace-template 595 0 9 \; 118.524 55.9165 \; 118.548 58.2441
-\; \;;
-#X scalar trace-template 595 0 11 \; 118.793 56.1446 \; \;;
-#X scalar trace-template 595 0 12 \; 118.404 54.9832 \; 118.373 57.6831
-\; 118.344 59.4771 \; 118.358 59.3103 \; 118.375 59.9651 \; 118.361
-59.8269 \; 118.358 59.0866 \; 118.404 56.5229 \; \;;
-#X scalar trace-template 595 0 14 \; 119.014 55.8091 \; 119.004 59.3385
-\; 119.008 59.1503 \; \;;
-#X scalar trace-template 595 0 17 \; 35.3883 53.9764 \; 31.9036 56.2244
-\; \;;
-#X scalar trace-template 595 0 19 \; 111.893 55.4258 \; \;;
-#X scalar trace-template 595 0 22 \; 116.022 53.9379 \; 116.047 56.9
-\; \;;
-#X scalar trace-template 595 0 23 \; 113.451 53.0101 \; \;;
-#X scalar trace-template 595 0 24 \; 112.594 53.4201 \; 112.63 58.2363
-\; 112.635 60.6503 \; 112.586 59.6184 \; 112.596 59.9405 \; 112.661
-62.1033 \; 112.652 58.9526 \; 112.657 52.3765 \; \;;
-#X scalar trace-template 600 0 0 \; 114.105 59.574 \; 114.124 64.9554
-\; 114.097 65.2225 \; 114.063 60.676 \; \;;
-#X scalar trace-template 600 0 3 \; 114.596 58.9467 \; 114.587 63.53
-\; 114.586 64.4699 \; 114.616 62.7023 \; \;;
-#X scalar trace-template 600 0 11 \; 112.961 58.7863 \; 112.895 59.6331
-\; 112.902 58.9485 \; \;;
-#X scalar trace-template 600 0 13 \; 115.036 58.2567 \; 115.002 59.9302
-\; 114.997 59.4012 \; 114.964 59.5241 \; 114.988 57.2328 \; 115.038
-56.8664 \; \;;
-#X scalar trace-template 600 0 15 \; 113.546 61.0847 \; 113.531 63.0184
-\; 113.501 64.2579 \; 113.468 62.134 \; 113.458 55.8551 \; \;;
-#X scalar trace-template 600 0 19 \; 118.662 56.4865 \; \;;
-#X scalar trace-template 600 0 23 \; 111.282 56.1602 \; 111.284 58.2454
-\; 111.286 58.4216 \; \;;
-#X scalar trace-template 605 0 2 \; 115.279 58.4135 \; 115.264 57.2103
-\; \;;
-#X scalar trace-template 605 0 4 \; 112.165 59.3813 \; 112.195 60.7489
-\; 112.251 60.4649 \; \;;
-#X scalar trace-template 605 0 7 \; 113.032 59.9266 \; 113.048 62.0863
-\; 113.03 63.4869 \; 113 62.7615 \; 113.026 57.283 \; 113.09 53.9905
-\; \;;
-#X scalar trace-template 605 0 8 \; 117.161 58.8926 \; 117.185 61.7071
-\; 117.189 59.588 \; 117.208 55.5277 \; \;;
-#X scalar trace-template 605 0 9 \; 111.1 58.5477 \; \;;
-#X scalar trace-template 605 0 17 \; 116.354 58.3927 \; 116.351 58.9609
-\; \;;
-#X scalar trace-template 605 0 19 \; 113.205 57.8933 \; 113.197 59.672
-\; 113.159 60.8365 \; 113.166 59.8285 \; 113.168 58.3424 \; 113.169
-53.1693 \; \;;
-#X scalar trace-template 605 0 22 \; 113.374 56.893 \; \;;
-#X scalar trace-template 610 0 9 \; 114.348 54.5214 \; 114.34 62.6583
-\; 114.374 60.6628 \; 114.372 55.6316 \; \;;
-#X scalar trace-template 610 0 10 \; 112.075 60.4804 \; 112.044 59.0623
-\; 111.963 55.4253 \; \;;
-#X scalar trace-template 610 0 14 \; 112.737 59.5669 \; 112.735 61.7468
-\; \;;
-#X scalar trace-template 610 0 21 \; 116.94 57.7011 \; 116.945 59.9821
-\; 116.969 60.0125 \; 116.977 55.963 \; \;;
-#X scalar trace-template 610 0 22 \; 115.658 59.1929 \; \;;
-#X scalar trace-template 615 0 2 \; 114.137 61.5322 \; \;;
-#X scalar trace-template 615 0 11 \; 118.595 60.542 \; 118.616 60.2602
-\; 118.62 57.0168 \; \;;
-#X scalar trace-template 615 0 17 \; 115.909 59.4103 \; 115.888 57.3518
-\; 115.97 51.8603 \; \;;
-#X scalar trace-template 615 0 20 \; 118.717 57.736 \; \;;
-#X scalar trace-template 615 0 22 \; 118.957 56.3953 \; 119.001 58.3801
-\; 119.001 55.3419 \; \;;
-#X scalar trace-template 615 0 23 \; 111.472 56.0261 \; 111.507 57.9964
-\; \;;
-#X scalar trace-template 620 0 0 \; 115.177 57.3522 \; \;;
-#X scalar trace-template 620 0 2 \; 117.935 58.697 \; 117.935 57.5603
-\; 117.933 50.4738 \; \;;
-#X scalar trace-template 620 0 3 \; 111.57 53.7604 \; 111.54 57.7347
-\; 111.545 51.1921 \; \;;
-#X scalar trace-template 620 0 4 \; 118.455 54.1507 \; 118.475 57.8249
-\; \;;
-#X scalar trace-template 620 0 14 \; 115.337 56.8999 \; \;;
-#X scalar trace-template 620 0 20 \; 111.891 57.3586 \; 111.904 59.3167
-\; 111.899 56.0872 \; \;;
-#X scalar trace-template 625 0 0 \; 112.934 56.1129 \; \;;
-#X scalar trace-template 625 0 5 \; 42.4607 53.9816 \; 44.6587 65.9304
-\; 44.7895 77.695 \; 42.4643 81.9832 \; 40.836 83.2193 \; 39.8599 82.6942
-\; 39.5713 82.3959 \; 39.5654 82.2658 \; 39.6933 81.6769 \; \;;
-#X scalar trace-template 625 0 8 \; 111.166 55.1646 \; 111.132 56.4644
-\; 111.061 52.1002 \; \;;
-#X scalar trace-template 625 0 10 \; 118.087 54.7511 \; \;;
-#X scalar trace-template 625 0 14 \; 110.951 54.7755 \; 110.989 56.5427
-\; \;;
-#X scalar trace-template 625 0 15 \; 118.706 52.3002 \; \;;
-#X scalar trace-template 625 0 23 \; 54.7707 51.2495 \; 57.4861 71.4524
-\; \;;
-#X scalar trace-template 630 0 0 \; 58.4266 71.0592 \; 59.0486 70.6632
-\; 59.0168 73.4254 \; 58.9273 73.1853 \; 58.1736 74.0071 \; 58.3129
-72.2042 \; 58.3643 70.189 \; 56.9261 66.5358 \; \;;
-#X scalar trace-template 630 0 4 \; 65.9162 68.9938 \; \;;
-#X scalar trace-template 630 0 6 \; 65.3277 69.1431 \; 64.7843 70.5406
-\; 64.2028 71.6783 \; 63.733 71.4284 \; 63.2432 70.7821 \; 63.1979
-70.0653 \; 63.1048 69.7311 \; 63.0327 66.3733 \; \;;
-#X scalar trace-template 630 0 9 \; 35.7725 59.4376 \; \;;
-#X scalar trace-template 630 0 10 \; 69.9342 59.7387 \; 69.0097 71.5218
-\; \;;
-#X scalar trace-template 630 0 11 \; 92.9541 57.5759 \; 92.8946 58.4034
-\; 92.6925 54.4934 \; 92.7018 51.7524 \; 92.8118 51.2981 \; 92.7069
-48.3812 \; 92.6705 43.2537 \; \;;
-#X scalar trace-template 630 0 13 \; 113.956 54.78 \; \;;
-#X scalar trace-template 630 0 15 \; 74.133 52.6457 \; 74.1908 59.5778
-\; 73.893 61.4234 \; \;;
-#X scalar trace-template 630 0 17 \; 114.758 51.7935 \; \;;
-#X scalar trace-template 630 0 21 \; 118.307 52.9318 \; \;;
-#X scalar trace-template 630 0 22 \; 92.3117 52.1461 \; 92.3343 53.7606
-\; 92.3124 53.0089 \; \;;
-#X scalar trace-template 635 0 1 \; 55.1139 72.7167 \; 53.4769 82.0777
-\; \;;
-#X scalar trace-template 635 0 2 \; 68.5482 72.5398 \; 67.8286 72.7588
-\; 67.6787 73.4941 \; 67.161 72.6799 \; 67.0163 69.9039 \; 66.7503
-66.0932 \; 66.3716 62.0886 \; \;;
-#X scalar trace-template 635 0 3 \; 93.3157 64.5774 \; 93.2577 61.7797
-\; 93.2324 57.1403 \; 93.1224 48.6124 \; \;;
-#X scalar trace-template 635 0 4 \; 70.9727 61.9286 \; 71.0953 61.8597
-\; \;;
-#X scalar trace-template 635 0 7 \; 96.3922 59.4868 \; 96.4194 64.3998
-\; 96.5028 64.7287 \; 96.6644 62.8341 \; 96.6311 56.6521 \; 96.5995
-48.3874 \; \;;
-#X scalar trace-template 635 0 9 \; 93.4478 62.0942 \; 93.4638 55.7609
-\; 93.4917 60.749 \; 93.5761 52.7505 \; 93.4639 48.124 \; 93.6571 45.0203
-\; 93.7326 37.8548 \; \;;
-#X scalar trace-template 635 0 12 \; 97.0131 58.7974 \; 97.0936 63.091
-\; 97.0854 61.4434 \; 97.0195 57.5923 \; 96.8883 60.8413 \; 96.9412
-59.1049 \; 96.9206 54.9872 \; \;;
-#X scalar trace-template 635 0 13 \; 95.7121 58.1855 \; 95.7866 62.1503
-\; 95.802 60.6281 \; 95.7851 55.4228 \; 95.6031 52.903 \; 95.7044 50.4609
-\; 95.6995 45.5615 \; \;;
-#X scalar trace-template 635 0 14 \; 94.2517 62.278 \; 94.1561 59.1415
-\; 93.9766 57.232 \; 93.8438 54.297 \; \;;
-#X scalar trace-template 635 0 16 \; 94.3441 59.5835 \; 94.4502 57.4434
-\; 94.3668 58.1533 \; 94.3768 51.2544 \; 94.1946 47.8939 \; 94.328
-44.6819 \; 94.3675 37.5612 \; \;;
-#X scalar trace-template 635 0 17 \; 95.0593 58.0663 \; 95.0532 60.0025
-\; 95.1226 58.5712 \; 95.0483 50.1275 \; 94.9303 48.1923 \; \;;
-#X scalar trace-template 635 0 18 \; 97.7604 55.4184 \; 97.7452 59.611
-\; 97.753 59.373 \; 97.8523 54.6532 \; 97.843 49.4806 \; \;;
-#X scalar trace-template 635 0 19 \; 94.9616 59.297 \; \;;
-#X scalar trace-template 635 0 20 \; 91.6198 52.5509 \; \;;
-#X scalar trace-template 635 0 21 \; 76.7735 51.5719 \; 76.928 52.9243
-\; 77.1241 51.2043 \; 77.3901 51.3419 \; 77.3609 50.3932 \; 77.3166
-48.0167 \; 77.0858 43.0034 \; \;;
-#X scalar trace-template 635 0 23 \; 118.519 49.7004 \; \;;
-#X scalar trace-template 635 0 24 \; 79.0453 50.9434 \; \;;
-#X scalar trace-template 640 0 8 \; 52.0038 84.0201 \; 51.9024 85.0374
-\; 51.8134 85.7674 \; 51.547 85.8245 \; 51.477 85.583 \; 51.4291 84.5581
-\; \;;
-#X scalar trace-template 640 0 10 \; 65.4662 65.6075 \; \;;
-#X scalar trace-template 640 0 19 \; 93.532 61.6672 \; \;;
-#X scalar trace-template 640 0 20 \; 72.4406 60.6394 \; 73.1711 63.8493
-\; 73.1219 63.4485 \; 73.005 60.9634 \; 72.9752 58.2399 \; 73.1187
-54.2194 \; \;;
-#X scalar trace-template 640 0 23 \; 98.3726 54.6578 \; 98.4334 56.3528
-\; 98.4641 55.9416 \; 98.4242 52.0511 \; \;;
-#X scalar trace-template 640 0 24 \; 23.7851 54.8485 \; \;;
-#X scalar trace-template 645 0 1 \; 97.3061 58.5622 \; 97.2776 59.1141
-\; 97.492 54.2353 \; 97.5989 51.8676 \; 97.6619 47.3976 \; \;;
-#X scalar trace-template 645 0 4 \; 95.4167 56.8196 \; 95.3126 55.3792
-\; 95.3283 46.7388 \; 95.1306 46.7253 \; 95.147 41.728 \; \;;
-#X scalar trace-template 645 0 10 \; 75.0422 52.9199 \; \;;
-#X scalar trace-template 645 0 15 \; 89.5699 53.2536 \; \;;
-#X scalar trace-template 645 0 19 \; 88.6175 52.5698 \; \;;
-#X scalar trace-template 645 0 22 \; 79.2767 52.119 \; 79.3102 49.5639
-\; \;;
-#X scalar trace-template 645 0 24 \; 98.8685 51.0232 \; \;;
-#X scalar trace-template 650 0 10 \; 70.258 62.8691 \; 70.374 60.7793
-\; 70.0017 59.3661 \; 69.5226 57.7477 \; \;;
-#X scalar trace-template 650 0 15 \; 95.9891 57.3853 \; 96.2532 55.7833
-\; 96.3873 55.2429 \; 96.4037 52.212 \; \;;
-#X scalar trace-template 650 0 19 \; 94.5866 52.8031 \; \;;
-#X scalar trace-template 650 0 24 \; 98.1845 50.7136 \; 98.0865 53.434
-\; 98.1691 51.3942 \; 98.141 44.0651 \; \;;
-#X scalar trace-template 655 0 3 \; 98.6655 52.1347 \; 98.7443 47.6732
-\; 98.701 40.7718 \; \;;
-#X scalar trace-template 655 0 14 \; 89.1909 46.575 \; \;;
-#X scalar trace-template 655 0 19 \; 91.9512 47.5126 \; 92.0268 44.2326
-\; \;;
-#X scalar trace-template 655 0 22 \; 74.884 44.8679 \; \;;
-#X scalar trace-template 660 0 14 \; 83.71 44.657 \; 83.6094 41.5368
-\; \;;
-#X scalar trace-template 660 0 17 \; 85.0166 43.8889 \; 84.8868 38.345
-\; \;;
-#X scalar trace-template 660 0 18 \; 91.8357 44.1274 \; \;;
-#X scalar trace-template 660 0 22 \; 92.8821 43.3524 \; 92.8403 35.8802
-\; \;;
-#X scalar trace-template 660 0 23 \; 80.9979 42.8421 \; 80.2868 38.7355
-\; \;;
-#X scalar trace-template 665 0 7 \; 74.5494 42.9236 \; \;;
-#X scalar trace-template 665 0 11 \; 79.3738 37.7132 \; \;;
-#X scalar trace-template 665 0 18 \; 117.855 37.7543 \; \;;
-#X scalar trace-template 665 0 19 \; 89.2631 35.1317 \; \;;
+#N canvas 383 155 600 386 peak-list 0;
+#X restore 308 457 pd peak-list;
+#N canvas 74 242 745 526 trace-list 0;
 #X coords 0 131.5 1 131.25 0 0 0;
-#X restore 298 436 pd trace-list;
+#X restore 308 436 pd trace-list;
 #N canvas 375 90 563 188 trace-template 0;
 #X text 121 93 This template describes a pitch/amplitude trace. The
 array "bazoo" holds the actual points. In this template \, y is always
@@ -1918,11 +52,11 @@ bazoo point-template;
 as a plot (yet).;
 #X obj 212 14 struct point-template float y float amp;
 #X restore 417 567 pd point-template;
-#X msg 746 506 bang;
-#X obj 8 425 pack 0 100;
-#X obj 8 449 line~;
-#X obj 8 404 dbtorms;
-#X floatatom 545 73 0 0 110 0 - - -;
+#X msg 604 456 bang;
+#X obj 8 415 pack 0 100;
+#X obj 8 439 line~;
+#X obj 8 394 dbtorms;
+#X floatatom 545 93 0 0 110 0 - - -;
 #N canvas 194 37 730 722 output 0;
 #X obj 295 76 t b f;
 #X obj 286 100 +;
@@ -1982,14 +116,14 @@ as a plot (yet).;
 #X connect 22 1 3 0;
 #X connect 23 0 3 1;
 #X connect 23 0 0 0;
-#X restore 820 69 pd output;
+#X restore 820 89 pd output;
 #N canvas 516 98 663 559 (subpatch) 0;
 #X obj 103 108 outlet;
 #X msg 101 80 set \$1;
 #X obj 103 57 r loop-amp;
 #X connect 1 0 0 0;
 #X connect 2 0 1 0;
-#X restore 545 50 pd;
+#X restore 545 70 pd;
 #N canvas 0 262 838 506 fft 0;
 #X floatatom 305 194 0 0 0 0 - - -;
 #X obj 454 160 r sample-rate;
@@ -2046,17 +180,17 @@ as a plot (yet).;
 #X connect 24 0 20 1;
 #X connect 25 0 26 0;
 #X connect 26 0 24 0;
-#X restore 22 470 pd fft;
-#X obj 8 493 *~;
-#X obj 9 544 hip~ 5;
-#X obj 9 571 dac~;
-#X obj 754 529 adc~;
-#X obj 545 94 s loop-amp;
-#X msg 820 48 mute;
-#X text 33 110 click here first;
-#X text 741 489 live sample;
-#X text 677 25 AMPLITUDES;
-#N canvas 66 42 1152 664 make-trace 0;
+#X restore 22 460 pd fft;
+#X obj 8 483 *~;
+#X obj 9 534 hip~ 5;
+#X obj 9 561 dac~;
+#X obj 612 479 adc~;
+#X obj 545 114 s loop-amp;
+#X msg 820 68 mute;
+#X text 31 110 click here first;
+#X text 599 439 live sample;
+#X text 677 45 AMPLITUDES;
+#N canvas 0 42 1028 664 make-trace 0;
 #X obj 781 133 pointer;
 #X obj 744 602 setsize trace-template bazoo;
 #X obj 744 489 random 200;
@@ -2195,20 +329,20 @@ as a plot (yet).;
 #X connect 42 0 4 0;
 #X connect 44 0 36 0;
 #X restore 417 503 pd make-trace;
-#X floatatom 74 236 0 0 0 0 location location-set location;
-#X obj 106 417 r loop-amp;
-#X obj 737 288 f;
-#X obj 777 288 +;
-#X msg 695 330 0;
-#X msg 694 247 1;
-#X msg 737 337 \; location \$1 \; snapshot bang;
-#X msg 655 170 bang \; location 0 \; clear-all bang;
-#X floatatom 655 305 0 0 0 0 - - -;
-#X obj 655 225 t b b;
-#X obj 838 270 r incr;
-#X obj 8 383 r grain-amp;
-#X obj 121 467 r osc-amp;
-#X obj 143 553 catch~ osc-sum;
+#X floatatom 74 256 0 0 0 0 location location-set location;
+#X obj 106 407 r loop-amp;
+#X obj 737 308 f;
+#X obj 777 308 +;
+#X msg 695 350 0;
+#X msg 694 267 1;
+#X msg 737 357 \; location \$1 \; snapshot bang;
+#X msg 655 190 bang \; location 0 \; clear-all bang;
+#X floatatom 655 325 0 0 0 0 - - -;
+#X obj 655 245 t b b;
+#X obj 838 290 r incr;
+#X obj 8 373 r grain-amp;
+#X obj 121 457 r osc-amp;
+#X obj 143 543 catch~ osc-sum;
 #N canvas 0 0 887 632 osc-bank 0;
 #X msg 203 132 0;
 #X obj 508 403 pointer;
@@ -2416,7 +550,7 @@ as a plot (yet).;
 #X connect 37 0 42 0;
 #X connect 42 0 28 0;
 #X restore 417 458 pd osc-bank;
-#X obj 647 98 s grain-amp;
+#X obj 647 118 s grain-amp;
 #N canvas 207 28 820 345 save-list 0;
 #X floatatom 759 255 0 0 0 0 - - -;
 #X floatatom 677 254 0 0 0 0 - - -;
@@ -2465,14 +599,14 @@ as a plot (yet).;
 #X connect 20 0 5 0;
 #X connect 21 0 4 0;
 #X restore 417 481 pd save-list;
-#X msg 139 349 \; start-resynth bang;
-#X msg 301 350 \; step-resynth bang;
-#X msg 461 352 \; osc-stop bang;
-#X text 780 116 resynth;
-#X text 643 115 analyzed grains;
-#X text 545 113 original;
-#X text 622 146 ... and here third to analyze;
-#X text 310 107 read a sample;
+#X msg 139 369 \; start-resynth bang;
+#X msg 301 370 \; step-resynth bang;
+#X msg 461 372 \; osc-stop bang;
+#X text 780 136 resynth;
+#X text 643 135 analyzed grains;
+#X text 545 133 original;
+#X text 622 166 ... and here third to analyze;
+#X text 250 110 read a sample;
 #N canvas 190 43 500 453 test-signal 0;
 #X obj 174 293 tabread4~ sample;
 #X obj 174 268 line~;
@@ -2519,7 +653,7 @@ as a plot (yet).;
 #X connect 20 0 16 0;
 #X connect 20 1 11 0;
 #X connect 20 1 2 1;
-#X restore 106 440 pd test-signal;
+#X restore 106 430 pd test-signal;
 #N canvas 132 255 634 331 insample 0;
 #N canvas 0 0 450 300 (subpatch) 0;
 #X array sample 62079 float 0;
@@ -2538,14 +672,13 @@ as a plot (yet).;
 #X connect 2 1 3 0;
 #X connect 4 0 6 0;
 #X connect 5 0 4 0;
-#X restore 296 509 pd insample;
-#X obj 744 553 tabwrite~ sample;
-#X text 152 0 SINUSOID TRACKING;
-#X obj 752 268 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X restore 308 509 pd insample;
+#X obj 604 503 tabwrite~ sample;
+#X obj 752 288 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
-#X obj 301 306 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+#X obj 301 326 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
 1;
-#X msg 207 130 \; read-sample ../doc/sound/bell.aiff 44100;
+#X msg 187 127 \; read-sample ../doc/sound/bell.aiff 44100;
 #N canvas 12 201 728 480 sigmund 0;
 #X obj 2 227 spigot;
 #X obj 165 94 f;
@@ -2580,7 +713,7 @@ as a plot (yet).;
 #X obj 1 253 print p;
 #X obj 165 186 sigmund~ -t -npts 1024 -npeak 40 -maxfreq 8000 peaks
 tracks;
-#X floatatom 507 135 5 1 50 0 - - -;
+#X floatatom 507 135 5 1 50 0 - - -, f 5;
 #X msg 507 155 npeak \$1;
 #X obj 506 109 r nvoice;
 #X connect 0 0 27 0;
@@ -2618,16 +751,16 @@ tracks;
 #X connect 30 0 28 0;
 #X connect 31 0 29 0;
 #X restore 417 436 pd sigmund;
-#X msg 206 167 \; read-sample ../doc/sound/voice.wav 44100;
-#X msg 206 206 \; read-sample ../doc/sound/voice2.wav 44100;
-#X obj 737 311 moses 1350;
-#X text 142 246 to resynthesize \, "start" once and "step" ad lib.
+#X msg 187 162 \; read-sample ../doc/sound/voice.wav 44100;
+#X msg 187 197 \; read-sample ../doc/sound/voice2.wav 44100;
+#X obj 737 331 moses 1350;
+#X text 142 266 to resynthesize \, "start" once and "step" ad lib.
 To stop \, stop stepping and hit osc-stop. Note resynth amplitude control
 above.;
-#X msg 24 127 \; pd dsp 1 \; window-size 2048 \; sample-rate 44100
+#X msg 22 127 \; pd dsp 1 \; window-size 2048 \; sample-rate 44100
 \; incr 10;
-#X obj 737 245 metro 50;
-#X obj 301 326 metro 10;
+#X obj 737 265 metro 50;
+#X obj 301 346 metro 10;
 #N canvas 0 0 1028 393 misc 0;
 #X floatatom 56 120 0 0 0 0 - - -;
 #X obj 56 141 s loud;
@@ -2684,25 +817,49 @@ above.;
 #X connect 24 0 26 0;
 #X connect 25 0 24 0;
 #X connect 27 0 28 0;
-#X restore 296 488 pd misc;
-#X floatatom 412 296 0 0 0 0 osc-speed osc-speed-set osc-speed;
-#X floatatom 75 261 0 1 50 0 nvoice nvoice-set nvoice;
-#X obj 366 326 r osc-speed;
-#X text 24 293 analysis;
-#X text 26 308 parameters;
-#X text 13 24 This patch derives sinusoidal "tracks" from a sampled
+#X restore 308 488 pd misc;
+#X floatatom 412 316 0 0 0 0 osc-speed osc-speed-set osc-speed;
+#X floatatom 75 281 0 1 50 0 nvoice nvoice-set nvoice;
+#X obj 366 346 r osc-speed;
+#X text 24 313 analysis;
+#X text 26 328 parameters;
+#X text 19 37 This patch derives sinusoidal "tracks" from a sampled
 sound using sigmund~ and the data structure facilities. The number
 of tracks may range from 1 to 50 You can edit the tracks (but note
 that the resynthezier is limited to 50-voice polyphony.);
+#X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header sinusoid_tracking
+20 10 1 18 -261139 -33289 0;
+#X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
+;
+#X obj 1 605 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -233017 -33289 0;
+#N canvas 44 246 494 284 META 0;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 85 LIBRARY PDDP;
+#X text 12 5 GENRE tutorial;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 145 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 25 KEYWORDS data_structure GUI;
+#X text 12 65 DESCRIPTION sinusoid tracking;
+#X restore 392 607 pd META;
+#N canvas 13 202 428 190 References 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -261139 -33289 0;
+#X text 7 2 sinusoid tracking- Related Help Documents;
+#X text 19 37 Links:;
+#X restore 103 607 pd References;
+#X obj 6 607 pddp/pddplink ../5.reference/pddp/help.pd -text help;
 #X connect 0 0 2 0;
 #X connect 1 0 0 0;
 #X connect 3 0 4 0;
 #X connect 4 0 6 0;
 #X connect 5 0 3 0;
 #X connect 6 0 27 0;
-#X connect 7 0 74 1;
+#X connect 7 0 73 1;
 #X connect 8 0 38 1;
-#X connect 9 0 74 0;
+#X connect 9 0 73 0;
 #X connect 10 0 39 1;
 #X connect 11 0 51 0;
 #X connect 12 0 11 0;
@@ -2721,7 +878,7 @@ that the resynthezier is limited to 50-voice polyphony.);
 #X connect 37 0 61 0;
 #X connect 38 0 39 0;
 #X connect 38 0 44 0;
-#X connect 38 0 71 0;
+#X connect 38 0 70 0;
 #X connect 39 0 38 1;
 #X connect 40 0 9 0;
 #X connect 41 0 9 0;
@@ -2733,10 +890,10 @@ that the resynthezier is limited to 50-voice polyphony.);
 #X connect 48 0 5 0;
 #X connect 49 0 6 1;
 #X connect 61 0 27 0;
-#X connect 65 0 38 0;
-#X connect 66 0 75 0;
-#X connect 71 0 42 0;
-#X connect 71 1 40 0;
-#X connect 74 0 38 0;
-#X connect 75 0 54 0;
-#X connect 79 0 75 1;
+#X connect 64 0 38 0;
+#X connect 65 0 74 0;
+#X connect 70 0 42 0;
+#X connect 70 1 40 0;
+#X connect 73 0 38 0;
+#X connect 74 0 54 0;
+#X connect 78 0 74 1;
diff --git a/pd/doc/4.data.structures/add-trace.pd b/pd/doc/4.data.structures/add-trace.pd
index ae403c192..437085dcb 100644
--- a/pd/doc/4.data.structures/add-trace.pd
+++ b/pd/doc/4.data.structures/add-trace.pd
@@ -41,7 +41,7 @@
 #X obj 114 430 t p p;
 #X obj 337 150 r add-trace-clear;
 #X obj 334 252 spigot;
-#X obj 373 209 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+#X obj 373 209 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
 1;
 #X msg 337 177 0;
 #X msg 373 181 1;
diff --git a/pd/doc/4.data.structures/beat-maker.pd b/pd/doc/4.data.structures/beat-maker.pd
index 014ae0acf..aebca0d70 100644
--- a/pd/doc/4.data.structures/beat-maker.pd
+++ b/pd/doc/4.data.structures/beat-maker.pd
@@ -1,4 +1,4 @@
-#N canvas 432 246 737 444 10;
+#N canvas 235 45 737 444 10;
 #X obj 114 109 until;
 #X obj 116 84 t b b;
 #X obj 116 147 f;
@@ -17,7 +17,7 @@
 #X obj 295 67 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
 -1;
 #X obj 179 164 sel;
-#X floatatom 295 117 5 0 0 0 - - -;
+#X floatatom 295 117 5 0 0 0 - - -, f 5;
 #X obj 296 89 expr \$1 * \$2 + 1;
 #X obj 117 259 expr 40 + 100 * $f1/$f2;
 #X connect 0 0 2 0;
diff --git a/pd/doc/4.data.structures/data-array.pd b/pd/doc/4.data.structures/data-array.pd
index 25cb1ec88..07473fb6b 100644
--- a/pd/doc/4.data.structures/data-array.pd
+++ b/pd/doc/4.data.structures/data-array.pd
@@ -1,5 +1,5 @@
 #N canvas 230 71 587 465 12;
-#X floatatom 179 207 0 0 0;
+#X floatatom 179 207 0 0 0 0 - - -;
 #X obj 53 199 f;
 #X obj 89 194 + 1;
 #X obj 53 232 sel;
@@ -25,8 +25,13 @@
 #X obj 372 326 0;
 #X obj 238 130 t b b p b;
 #X text 229 93 pointer in;
-#X text 20 12 This is an abstraction used in the sequencer example. Here we take a pointer and sequence an array belonging to it \, either the amplitude or the frequency \, depending on the value of argument 2 The template of the scalar is given by argument 1 and that of the array elements by argument 3;
-#X text 90 431 Outlets: new y value \, new w value \, time to ramp to new values.;
+#X text 20 12 This is an abstraction used in the sequencer example.
+Here we take a pointer and sequence an array belonging to it \, either
+the amplitude or the frequency \, depending on the value of argument
+2 The template of the scalar is given by argument 1 and that of the
+array elements by argument 3;
+#X text 90 431 Outlets: new y value \, new w value \, time to ramp
+to new values.;
 #X connect 1 0 2 0;
 #X connect 1 0 3 0;
 #X connect 2 0 1 1;
diff --git a/pd/doc/4.data.structures/data-start.pd b/pd/doc/4.data.structures/data-start.pd
index b0522fbf9..b7f9646c3 100644
--- a/pd/doc/4.data.structures/data-start.pd
+++ b/pd/doc/4.data.structures/data-start.pd
@@ -1,4 +1,4 @@
-#N canvas 404 0 597 385 12;
+#N canvas 384 155 597 385 12;
 #X obj 248 142 inlet;
 #X obj 295 250 *;
 #X obj 165 262 del;
diff --git a/pd/src/pd.tk b/pd/src/pd.tk
index 6de900368..082c61d69 100644
--- a/pd/src/pd.tk
+++ b/pd/src/pd.tk
@@ -342,6 +342,9 @@ font create console_font -family $defaultFontFamily -size 9 -weight normal
 font create text_font -family $defaultFontFamily -size 9 -weight normal
 # for text in Properties Panels and other panes
 font create highlight_font -family $defaultFontFamily -size 9 -weight bold
+if { $pd_nt == 0 } {
+	font create menufont -family $defaultFontFamily -size 9 -weight normal
+}
 
 # end Pd-extended font hacks -----------------------------
 
@@ -1546,7 +1549,7 @@ proc menu_addstd {mbar} {
         -command {menu_doc_open doc/1.manual index.htm} 
     $mbar.help add command -label {Browser} \
         -accelerator [accel_munge "Ctrl+b"] \
-        -command {::helpbrowser::open_helpbrowser}
+        -command {::dialog_search::open_helpbrowser .search}
     match_linux_wm [list $mbar.help add separator]
     #$mbar.help add command -label {puredata.info} \
     #    -command {menu_openhtml http://puredata.info} 
@@ -4613,7 +4616,7 @@ proc pdtk_canvas_ctrlkey {name key shift} {
 			#if {$key == "Down"} {popup_action $name 4}
 			if {$key == "Down"} {pdtk_canvas_edit_menu_actions $topname "Send To Back"}
         	if {$key == "p" || $key == "P"} {menu_print $topname}
-			if {$key == "b" || $key == "B"} {::helpbrowser::open_helpbrowser}
+			if {$key == "b" || $key == "B"} {dialog_search::open_helpbrowser .search}
 		}
 		if {$key == "y" || $key == "Y"} {pdtk_canvas_edit_menu_actions $topname "Tidy Up"}
         if {$key == "q" || $key == "Q"} {menu_quit}
@@ -6841,7 +6844,7 @@ proc pdtk_pd_ctrlkey {name key shift} {
         if {$key == "q" || $key == "Q"} {menu_really_quit}
         if {$key == "r" || $key == "R"} {menu_toggle_console}
     } else {
-        if {$key == "b" || $key == "B"} {::helpbrowser::open_helpbrowser}
+        if {$key == "b" || $key == "B"} {::dialog_search::open_helpbrowser .search}
         if {$key == "n" || $key == "N"} {menu_new}
         if {$key == "o" || $key == "O"} {menu_open}
         if {$key == "q" || $key == "Q"} {menu_quit}
@@ -9008,4 +9011,6 @@ proc pdtk_check_unique {unique filenames} {
 	}
 	tk appname $appname
 	#puts stderr "this is unique instance [tk appname]"
-}
\ No newline at end of file
+}
+
+source [file join [file dirname [info script]] search-plugin.tcl]
diff --git a/pd/src/search-plugin.tcl b/pd/src/search-plugin.tcl
new file mode 100644
index 000000000..8397360c9
--- /dev/null
+++ b/pd/src/search-plugin.tcl
@@ -0,0 +1,1600 @@
+# browse docs or search all the documentation using a regexp
+# check the Help menu for the Browser item to use it
+
+# done: field descriptors, including xlet details
+# done: parse extant pdfs, htmls
+# done: Gem help patch descriptions
+
+# todo: logic for where to store the index
+# todo: make libdir listing check for duplicates
+# todo: hook into the dialog_bindings
+# TODO remove the doc_ prefix on procs where it's not needed
+# TODO enter and up/down/left/right arrow key bindings for nav
+
+# redesign:
+# [ ---- search entry ---- ] Help
+#     [search] [filter]
+#
+
+package require Tk 8.5
+# package require pd_bindings
+# package require pd_menucommands
+package require xapian 1.0.0
+
+namespace eval ::dialog_search:: {
+
+    variable doctypes "*.{pd,pat,mxb,mxt,help,txt,htm,html,pdf}"
+
+    variable searchfont [list {DejaVu Sans}]
+    variable searchtext {}
+    variable search_history {}
+    # search direction for the Firefox style "find"
+    variable fff_direction forwards
+    variable fff_viskey 0 # hack
+    variable count {}
+    # $i controls the build_index recursive loop
+    variable i
+    variable filelist {}
+    variable progress {}
+    variable navbar {}
+    variable genres
+    variable cancelled
+    variable database {}
+    # the dbpath needs to be made more general for OSX and Windows
+    variable dbpath [file join [file nativename ~] pd-l2ork-externals doc_index]
+    variable metakeys { alias XA license XL description XD \
+                        release_date XR author A help_patch_author XHA \
+                        keywords K \
+			inlet_0 XIA inlet_1 XIB inlet_2 XIC \
+			inlet_3 XID inlet_4 XIE inlet_5 XIF \
+			inlet_6 XIG inlet_7 XIH inlet_8 XII \
+			inlet_n XIN inlet_r XIR \
+			outlet_0 XOA outlet_1 XOB outlet_2 XOC \
+			outlet_3 XOD outlet_4 XOE outlet_5 XOF \
+			outlet_6 XOG outlet_7 XOH outlet_8 XOI \
+			outlet_n XON outlet_r XOR \
+                      }
+}
+
+################## help browser and support functions #########################
+proc ::dialog_search::open_helpbrowser {mytoplevel} {
+    if {[winfo exists $mytoplevel]} {
+        wm deiconify $mytoplevel
+        raise $mytoplevel
+    } else {
+        create_dialog $mytoplevel
+    }
+}
+
+# insert rows or columns into a grid
+#  grid:  the geometry master
+#  what:  row or column
+#  index: where to insert
+#  count: how many rows/cols to insert
+proc ::dialog_search::grid_insert {grid what index {count 1}} {
+    foreach slave [grid slaves $grid] {
+	array set info [grid info $slave]
+	if {$info(-$what) >= $index} {
+	    incr info(-$what) $count
+	    eval {grid $slave} [array get info]
+	} elseif {$info(-$what)+$info(-${what}span) > $index} {
+	    incr info(-${what}span) $count
+	    eval {grid $slave} [array get info]
+	}
+    }
+}
+
+# Used by fff_bar to highlight and navigate to words/text
+# within the results (Like firefox's "Find" window bar
+proc ::dialog_search::resultstext_search {w key} {
+    # filter out unwanted keys
+    if {[lsearch -exact $key {37}] ne -1} {return}
+    # filter out KeyRelease from shortcut that
+    # makes the fff row visible. The above filter
+    # should catch a <ctrl> code, so we should just
+    # be left with 'f' (41)
+    if {$::dialog_search::fff_viskey} {
+        set ::dialog_search::fff_viskey 0
+        return
+    }
+    if {[lsearch -exact [grid slaves [winfo toplevel $w]] [winfo parent $w]] \
+        eq "-1" || [$w get] eq ""} {
+        return
+    }
+    set resultstext .search.resultstext
+    $resultstext tag remove sel 1.0 end
+    pdtk_post "key is $key\n"
+    pdtk_post "[$w get]\n"
+    set fff_string [$w get]
+    set offset 1
+    if {$::dialog_search::fff_direction eq "backwards"} {
+        set offset -1
+    }
+    if {$key == "36" || $key == "104"} {
+        $resultstext mark set insert \
+        "[$resultstext index insert] + $offset display chars"
+    }
+    set insert [$resultstext index insert]
+    pdtk_post "insert is [$resultstext index insert]\n"
+    set count ""
+    set match ""
+    set match [$resultstext search -$::dialog_search::fff_direction \
+        -nocase -count count -- $fff_string $insert]
+    pdtk_post "coutn is $count\n"
+    if {$match ne ""} {
+        $resultstext see $match
+        $resultstext tag add sel $match "$match + $count display chars"
+        $resultstext mark set insert $match
+    }
+}
+
+proc ::dialog_search::toggle_fff_bar {mytoplevel} {
+    # todo: standardize fff bar padding
+    # widgets for the fff bar
+    set f $mytoplevel.fff
+    set e $f.e
+    pdtk_post "grid slaves is [grid slaves $mytoplevel]\n"
+    if {[lsearch -exact [grid slaves $mytoplevel] $f] ne -1} {
+        grid forget $f
+        focus .search.f.searchtextentry
+    } else {
+        if {![winfo exists $f]} {
+            ttk::frame $f
+            ttk::label $f.l -text "Find: "
+            ttk::entry $f.e
+            ttk::style configure Fff.TButton -padding {0 0}
+            ttk::button $f.p -text "Previous" -style Fff.TButton \
+                -command "::dialog_search::fff_navigate $e backwards"
+            bind $f.p <Key-Return> "$f.p invoke"
+            bind $f.p <Key-KP_Enter> "$f.p invoke"
+            ttk::button $f.n -text "Next" -style Fff.TButton \
+                -command "::dialog_search::fff_navigate $e forwards"
+            bind $f.n <Key-Return> "$f.n invoke"
+            bind $f.n <Key-KP_Enter> "$f.n invoke"
+            grid $f.l $f.e $f.p $f.n
+            bind $e <KeyRelease> "::dialog_search::resultstext_search %W %k"
+        }
+        grid_insert $mytoplevel row 4 1
+        grid $f -row 4 -columnspan 3 -sticky w -padx 4 -pady 4
+        # we have to set a flag to let the other fff proc
+        # filter this 'f' KeyRelease (from <ctrl-f> shortcut)
+        # which makes the fff row visible
+        set ::dialog_search::fff_viskey 1
+        focus $e
+    }
+}
+
+proc ::dialog_search::fff_navigate {w dir} {
+    set ::dialog_search::fff_direction $dir
+    resultstext_search $w 36
+}
+
+proc ::dialog_search::create_dialog {mytoplevel} {
+    global pd_nt
+    variable searchfont
+    variable selected_file
+    variable genres [list [_ "All documents"] \
+                        [_ "Object Help Patches"] \
+                        [_ "All About Pd"] \
+                        [_ "Tutorials"] \
+                        [_ "Manual"] \
+                        [_ "Uncategorized"] \
+    ]
+    variable count
+    foreach genre $genres {
+	lappend count 0
+    }
+    toplevel $mytoplevel -class [winfo class .]
+    wm title $mytoplevel [_ "Search and Browse Documentation"]
+    wm geometry $mytoplevel 600x550+0+30
+    wm minsize $mytoplevel 230 360
+    # tweak: get rid of arrow so the combobox looks like a simple entry widget
+    ttk::style configure Entry.TCombobox -arrowsize 0 -highlightcolor $linux_wm_hlcolor
+    ttk::style configure Genre.TCombobox
+    ttk::style configure Search.TButton
+    ttk::style configure Search.TCheckbutton
+    # widgets
+    # for some reason ttk widgets didn't inherit menufont, and this causes tiny
+    # fonts on Windows-- so let's hack!
+    if {$pd_nt == 1} {
+        foreach widget {f.genrebox advancedlabel } {
+            option add *[string trim "$mytoplevel.$widget" .]*font menufont
+        }
+        foreach combobox {searchtextentry f.genrebox} {
+    	   option add *[string trim "$mytoplevel.$combobox" .]*Listbox.font menufont
+        }
+    }
+    ttk::frame $mytoplevel.f -padding 3
+    ttk::combobox $mytoplevel.f.searchtextentry \
+        -textvar ::dialog_search::searchtext \
+	-font "$searchfont -12" -style "Entry.TCombobox" -cursor "xterm"
+    ttk::button $mytoplevel.f.searchbutton -text [_ "Search"] -takefocus 0 \
+	-command ::dialog_search::search -style Search.TButton
+    ttk::combobox $mytoplevel.f.genrebox -values $genres -state readonly \
+	-style "Genre.TCombobox"
+    $mytoplevel.f.genrebox current 0
+    ttk::label $mytoplevel.f.advancedlabel -text [_ "Help"] -foreground "#0000ff" \
+	-anchor center -style Foo.TLabel
+    text $mytoplevel.navtext -font "$searchfont -12" -height 1 -bd 0 -highlightthickness 0\
+	-padx 8 -pady 3 -bg white -fg black
+    text $mytoplevel.resultstext -yscrollcommand "$mytoplevel.yscrollbar set" \
+        -bg white -highlightcolor blue -height 30 -wrap word -state disabled \
+	-padx 8 -pady 3 -spacing3 2 -bd 0 -highlightthickness 0 -fg black
+    ttk::scrollbar $mytoplevel.yscrollbar -command "$mytoplevel.resultstext yview" \
+        -takefocus 0
+    ttk::label $mytoplevel.statusbar -text [_ "Pd-L2Ork Search"] -justify left \
+        -padding {4 4 4 4}
+
+    grid $mytoplevel.f.searchtextentry -column 0 -columnspan 3 -row 0 -padx 3 \
+        -pady 2 -sticky ew
+    grid $mytoplevel.f.searchbutton -column 3 -columnspan 2 -row 0 -padx 3 \
+        -sticky ew
+    grid $mytoplevel.f.genrebox -column 0 -columnspan 3 -row 1 -padx 3 -sticky w
+    grid $mytoplevel.f.advancedlabel -column 3 -columnspan 2 -row 1 -sticky ew
+    grid $mytoplevel.f -column 0 -columnspan 5 -row 0 -sticky ew
+    grid $mytoplevel.navtext -column 0 -columnspan 5 -row 2 -sticky nsew
+    grid $mytoplevel.resultstext -column 0 -columnspan 4 -row 3 -sticky nsew -ipady 0 -pady 0
+    grid $mytoplevel.yscrollbar -column 4 -row 3 -sticky nsew
+    grid $mytoplevel.statusbar -column 0 -columnspan 4 -row 4 -sticky nsew
+    grid columnconfigure $mytoplevel.f 0 -weight 0
+    grid columnconfigure $mytoplevel.f 1 -weight 0
+    grid columnconfigure $mytoplevel.f 2 -weight 1
+    grid columnconfigure $mytoplevel.f 3 -weight 0
+    grid columnconfigure $mytoplevel 0 -weight 1
+    grid columnconfigure $mytoplevel 4 -weight 0
+    grid rowconfigure    $mytoplevel 2 -weight 0
+    grid rowconfigure    $mytoplevel 3 -weight 1
+    # tags
+    $mytoplevel.resultstext tag configure hide -elide on
+    $mytoplevel.navtext tag configure is_libdir -elide on
+    $mytoplevel.resultstext tag configure is_libdir -elide on
+    $mytoplevel.resultstext tag configure title -foreground "#0000ff" -underline on \
+	-font "$searchfont -12" -spacing1 15
+    $mytoplevel.resultstext tag configure dir_title -font "$searchfont -12" \
+	-underline on -spacing1 15
+    $mytoplevel.resultstext tag configure filename -elide on
+    $mytoplevel.navtext tag configure filename -elide on
+    $mytoplevel.resultstext tag configure metakey -font "$searchfont -10"
+    $mytoplevel.resultstext tag configure metavalue_h -elide on
+    $mytoplevel.resultstext tag configure basedir -elide on
+    $mytoplevel.navtext tag configure basedir -elide on
+    $mytoplevel.resultstext tag configure description -font "$searchfont -12"
+    $mytoplevel.resultstext tag configure dt -tabs {5c}
+    $mytoplevel.resultstext tag configure spacing -spacing3 4
+    $mytoplevel.resultstext tag configure dd -font "$searchfont -12" \
+        -lmargin2 5c
+    $mytoplevel.resultstext tag configure homepage_title -font "$searchfont -12" \
+	-underline on -spacing1 10 -spacing3 5
+    $mytoplevel.navtext tag configure homepage_title -underline on
+    $mytoplevel.resultstext tag configure homepage_description -font "$searchfont -12" \
+	-spacing3 7
+    $mytoplevel.resultstext tag configure intro_libdirs -font "$searchfont -12"
+    # make tags for both the results and the nav text widgets
+    foreach textwidget [list "$mytoplevel.resultstext" "$mytoplevel.navtext"] {
+        $textwidget tag configure link -foreground "#0000ff"
+        $textwidget tag bind link <Enter> "$textwidget configure \
+            -cursor hand2"
+        $textwidget tag bind link <Leave> "$textwidget configure \
+            -cursor xterm; $mytoplevel.statusbar configure -text \"\""
+        $textwidget tag bind intro <Button-1> "::dialog_search::intro \
+	    $mytoplevel.resultstext"
+        $textwidget tag bind intro <Enter> "$mytoplevel.statusbar \
+	    configure -text \"Go back to the main help page\""
+        $textwidget tag bind intro <Leave> "$mytoplevel.statusbar \
+	    configure -text \"\""
+        $textwidget tag bind libdirs <Button-1> "::dialog_search::build_libdirs \
+	    $mytoplevel.resultstext"
+        $textwidget tag bind libdirs <Enter> "$mytoplevel.statusbar configure \
+	    -text \"Browse all external libraries that have the libdir format\""
+        $textwidget tag bind libdirs <Leave> "$mytoplevel.statusbar configure \
+	    -text \"\""
+    }
+    # hack to force new <Enter> events for tags and links next to each other
+    for {set i 0} {$i<30} {incr i} {
+	$mytoplevel.resultstext tag bind "metavalue$i" <Button-1> \
+	    "::dialog_search::grab_metavalue %x %y $mytoplevel 1"
+        $mytoplevel.resultstext tag bind "metavalue$i" <Enter> \
+	    "::dialog_search::grab_metavalue %x %y $mytoplevel 0"
+	$mytoplevel.resultstext tag bind "intro_link$i" <Enter> \
+	    "::dialog_search::open_file %x %y $mytoplevel resultstext dir 0"
+	$mytoplevel.resultstext tag bind "intro_link$i" <Leave> \
+	    "$mytoplevel.statusbar configure -text \"\""
+	$mytoplevel.resultstext tag configure "metavalue$i" -font \
+	    "$searchfont -12"
+	$mytoplevel.resultstext tag configure "intro_link$i" -font \
+	    "$searchfont -12"
+	$mytoplevel.resultstext tag bind "dir_title$i" <Enter> \
+	    "::dialog_search::open_file %x %y $mytoplevel resultstext dir 0"
+	$mytoplevel.resultstext tag bind "dir_title$i" <Leave> \
+	    "$mytoplevel.resultstext configure -cursor xterm; \
+	    $mytoplevel.statusbar configure -text \"\""
+        $mytoplevel.resultstext tag configure "dir_title$i" \
+	    -font "$searchfont -12" -underline on -spacing1 15
+    }
+    # this next tag configure comes after the metavalue stuff above so
+    # that it has a higher priority (these are the keywords in the search
+    # results)
+    $mytoplevel.resultstext tag configure keywords -font "$searchfont -10"
+    $mytoplevel.resultstext tag configure homepage_file -font "$searchfont -12"
+    $mytoplevel.resultstext tag bind homepage_file <Button-1> "::dialog_search::open_file \
+	%x %y $mytoplevel resultstext file 1"
+    $mytoplevel.resultstext tag bind homepage_file <Enter> "::dialog_search::open_file \
+	%x %y $mytoplevel resultstext file 0"
+    $mytoplevel.resultstext tag bind homepage_file <Leave> "$mytoplevel.statusbar configure \
+	-text \"\""
+    $mytoplevel.resultstext tag bind title <Button-1> "::dialog_search::open_file %x %y \
+	$mytoplevel resultstext file 1"
+    $mytoplevel.resultstext tag bind title <Enter> "::dialog_search::open_file %x %y \
+        $mytoplevel resultstext file 0"
+    $mytoplevel.resultstext tag bind dir_title <Enter> "::dialog_search::open_file %x %y \
+	$mytoplevel resultstext dir 0"
+    $mytoplevel.resultstext tag bind dir_title <Leave> "$mytoplevel.resultstext configure \
+	-cursor xterm; $mytoplevel.statusbar configure -text \"\""
+    $mytoplevel.resultstext tag bind help_icon <Button-1> "::dialog_search::get_info %x %y \
+	$mytoplevel"
+    $mytoplevel.resultstext tag bind help_icon <Enter> "$mytoplevel.resultstext configure \
+	-cursor hand2; $mytoplevel.statusbar configure -text \"Get info on this object's\
+	libdir\""
+    $mytoplevel.resultstext tag bind help_icon <Leave> "$mytoplevel.resultstext configure \
+	-cursor xterm; $mytoplevel.statusbar configure -text \"\""
+    $mytoplevel.resultstext tag bind folder_icon <Button-1> "::dialog_search::open_file %x %y \
+	$mytoplevel resultstext dir_in_fm 1"
+    $mytoplevel.resultstext tag bind folder_icon <Enter> "::dialog_search::open_file %x %y \
+	$mytoplevel resultstext dir_in_fm 0"
+    $mytoplevel.resultstext tag bind folder_icon <Leave> "$mytoplevel.resultstext configure \
+	-cursor xterm; $mytoplevel.statusbar configure -text \"\""
+    foreach textwidget [list "$mytoplevel.resultstext" "$mytoplevel.navtext"] {
+        $textwidget tag bind clickable_dir <Button-1> "::dialog_search::click_dir \
+	    $textwidget %x %y"
+    }
+    # another workaround: we can't just do a mouseover statusbar update with clickable_dir 
+    # since it wouldn't register an <Enter> event when moving the mouse from one dir to an 
+    # adjacent dir. So we have the intro_link$i hack above PLUS a separate binding for navbar 
+    # links (which are not adjacent)
+    $mytoplevel.navtext tag bind navbar_dir <Enter> "::dialog_search::open_file %x %y \
+	$mytoplevel navtext dir 0"
+    $mytoplevel.navtext tag bind navbar_dir <Leave> "$mytoplevel.statusbar configure \
+	-text \"\""
+
+    # search window widget bindings
+    bind $mytoplevel <$::modifier-equal> "::dialog_search::font_size $mytoplevel.resultstext 1"
+    bind $mytoplevel <$::modifier-plus> "::dialog_search::font_size $mytoplevel.resultstext 1"
+    bind $mytoplevel <$::modifier-minus> "::dialog_search::font_size $mytoplevel.resultstext 0"
+    bind $mytoplevel.f.searchtextentry <Return> "$mytoplevel.f.searchbutton invoke"
+    bind $mytoplevel.f.searchtextentry <Key-KP_Enter> "$mytoplevel.f.searchbutton invoke"
+    bind $mytoplevel.f.searchtextentry <$::modifier-Key-BackSpace> \
+	"::dialog_search::ctrl_bksp $mytoplevel.f.searchtextentry"
+    bind $mytoplevel.f.searchtextentry <$::modifier-Key-a> \
+        "$mytoplevel.f.searchtextentry selection range 0 end; break"
+    bind $mytoplevel.f.genrebox <<ComboboxSelected>> "::dialog_search::filter_results \
+	$mytoplevel.f.genrebox $mytoplevel.resultstext"
+    set advancedlabeltext [_ "Advanced search options"]
+    bind $mytoplevel.f.advancedlabel <Enter> "$mytoplevel.f.advancedlabel configure \
+	-cursor hand2; $mytoplevel.statusbar configure -text \"$advancedlabeltext\""
+    bind $mytoplevel.f.advancedlabel <Leave> "$mytoplevel.f.advancedlabel configure \
+	-cursor xterm; $mytoplevel.statusbar configure -text \"\""
+    bind $mytoplevel.f.advancedlabel <Button-1> \
+	{menu_doc_open doc/5.reference all_about_finding_objects.pd}
+#   Right now we're suppressing dialog bindings because helpbrowser namespace
+#   doesn't work unless all procs are prefixed with dialog_
+#    ::pd_bindings::dialog_bindings $mytoplevel "search"
+#    bind $mytoplevel <KeyPress-Escape> "search::cancel $mytoplevel"
+#    bind $mytoplevel <KeyPress-Return> "search::ok $mytoplevel"
+#    bind $mytoplevel <$::modifier-Key-w> "search::cancel $mytoplevel"
+    # these aren't supported in the dialog, so alert the user, then break so
+    # that no other key bindings are run
+    bind $mytoplevel <$::modifier-Key-s>       {bell; break}
+    bind $mytoplevel <$::modifier-Shift-Key-S> {bell; break}
+    bind $mytoplevel <$::modifier-Key-p>       {bell; break}
+
+    # and redefine "Find" to point to a
+    # Firefox style "Find" window bar
+    bind $mytoplevel <$::modifier-Key-f> \
+        "::dialog_search::toggle_fff_bar $mytoplevel; break"
+
+    # Add state and set focus
+    $mytoplevel.f.searchtextentry insert 0 [_ "Enter search terms"]
+    $mytoplevel.f.searchtextentry selection range 0 end
+    # go ahead and set tags for the default genre
+    filter_results $mytoplevel.f.genrebox $mytoplevel.resultstext
+    focus $mytoplevel.f.searchtextentry
+    ::dialog_search::intro $mytoplevel.resultstext
+
+    # add default key bindings
+    global ctrl_key
+    bind $mytoplevel <$ctrl_key-Key-w> [list destroy $mytoplevel]
+    bind $mytoplevel <KeyPress-Escape> [list destroy $mytoplevel]
+}
+
+# find_doc_files
+# basedir - the directory to start looking in
+proc ::dialog_search::find_doc_files { basedir } {
+    # This is only used for displaying the files in a doc
+    # directory
+
+    # Fix the directory name, this ensures the directory name is in the
+    # native format for the platform and contains a final directory seperator
+    set basedir [string trimright [file join $basedir { }]]
+    set fileList {}
+
+    # Look in the current directory for matching files, -type {f r}
+    # means only readable normal files are looked at, -nocomplain stops
+    # an error being thrown if the returned list is empty
+    foreach fileName [glob -nocomplain -type {f r} -path $basedir $helpbrowser::doctypes] {
+        lappend fileList $fileName
+    }
+    return $fileList
+}
+
+proc ::dialog_search::open_file { xpos ypos mytoplevel text type clicked } {
+    set textwidget [join [list $mytoplevel $text] .]
+    set i [$textwidget index @$xpos,$ypos]
+    set range [$textwidget tag nextrange filename $i]
+    set filename [eval $textwidget get $range]
+    set range [$textwidget tag nextrange basedir $i]
+    set basedir [file normalize [eval $textwidget get $range]]
+    if {$clicked eq "1"} {
+	if {$type eq "file"} {
+            menu_doc_open $basedir $filename
+	} else {
+	    menu_doc_open [file dirname [file join $basedir $filename]] {}
+	}
+    } else {
+	$mytoplevel.resultstext configure -cursor hand2
+	if {$type eq "file"} {
+            $mytoplevel.statusbar configure -text \
+	        [format [_ "Open %s"] [file join $basedir $filename]]
+	} else {
+	    set msg ""
+	    if {$type eq "dir_in_fm"} {set msg {in external file browser: }}
+	    $mytoplevel.statusbar configure -text [format [_ "Browse %s%s"] \
+		$msg [file dirname [file join $basedir $filename]]]
+	}
+    }
+}
+
+# only does keywords for now-- maybe expand this to handle any meta tags
+proc ::dialog_search::grab_metavalue { xpos ypos mytoplevel clicked } {
+    set textwidget "$mytoplevel.resultstext"
+    set i [$textwidget index @$xpos,$ypos]
+    set range [$textwidget tag nextrange metavalue_h $i]
+    set value [eval $textwidget get $range]
+    set range [$textwidget tag prevrange metakey $i]
+    set key [eval $textwidget get $range]
+    regsub ":.*" $key {} key
+    set key [string tolower $key]
+    set value [string tolower $value]
+    append text $key ":" $value
+    if {$clicked eq "1"} {
+        ::dialog_search::searchfor $text
+    } else {
+        $mytoplevel.statusbar configure \
+            -text [format [_ "Search for pattern: %s"] $text]
+    }
+}
+
+proc ::dialog_search::searchfor {text} {
+    set ::dialog_search::searchtext ""
+    set ::dialog_search::searchtext $text
+    ::dialog_search::search
+}
+
+
+# show/hide results based on genre
+proc ::dialog_search::filter_results { combobox text } {
+    variable genres
+    # hack to add the navbar text widget
+    foreach text [list "$text" .search.navtext] {
+    set elide {}
+    if { [$combobox current] eq "0" } {
+    	foreach genre $genres {
+    	    $text tag configure [join $genre "_"] -elide off
+    	    set tag [join $genre "_"]
+    	    append tag "_count"
+    	    $text tag configure $tag -elide on
+	}
+	set tag [join [lindex $genres 0] "_"]
+	append tag "_count"
+	$text tag configure $tag -elide off
+    } else {
+    	foreach genre $genres {
+    	    if { [$combobox get] ne $genre } {
+    		$text tag configure [join $genre "_"] -elide on
+    		set tag [join $genre "_"]
+    		append tag "_count"
+    		$text tag configure $tag -elide on
+    	    } else {
+    		$text tag configure [join $genre "_"] -elide off
+    		set tag [join $genre "_"]
+    		append tag "_count"
+    		$text tag configure $tag -elide off
+    	    }
+    	}
+    }
+    }
+    $combobox selection clear
+    focus $text
+}
+
+proc ::dialog_search::readfile {filename} {
+    set fp [open $filename]
+    set file_contents [read $fp]
+    close $fp
+    return $file_contents
+}
+
+proc ::dialog_search::search {} {
+# todo: move progressbar stuff to build_index
+    variable filelist {}
+    variable count {}
+    variable genres
+    variable doctypes
+    variable searchtext
+    variable search_history
+    variable progress
+    variable navbar
+    variable i 0
+    variable cancelled 0
+    variable dbpath
+
+    foreach genre $genres {
+        lappend count 0
+    }
+    if {$searchtext eq ""} return
+    if { [lsearch $search_history $searchtext] eq "-1" } {
+    	lappend search_history $searchtext
+    	.search.f.searchtextentry configure -values $search_history
+    }
+    .search.f.searchtextentry selection clear
+    .search.f.searchtextentry configure \
+        -foreground gray -background gray90
+    .search.resultstext configure -state normal
+    .search.navtext configure -state normal
+    .search.resultstext delete 0.0 end
+    .search.navtext delete 0.0 end
+    set widget .search.navtext
+    set navbar {}
+#    print_navbar $widget
+
+
+    # this is a little tricky-- to keep the gui alive
+    # while indexing there is a recursive loop that
+    # relies on [after] to allow intermittent gui updates.
+    # This means anything following build_index in this
+    # function would get called _before_ build_index
+    # finishes.  So we have to call the search function
+    # from within build_index
+    if {![file exists $dbpath]} {
+
+    set basedirs $::sys_libdir
+    set filelist [build_filelist $basedirs $doctypes]
+
+    # set up the progressbar
+    $widget configure -state normal
+    ttk::progressbar $widget.pbar -variable ::dialog_search::progress \
+        -mode determinate
+    ttk::button $widget.bcancel -text "Cancel" -padding {0 0 0 0} \
+        -command "set ::dialog_search::cancelled 1" -cursor left_ptr
+#    $widget insert 1.end "    "
+    $widget window create 1.end -window $widget.pbar
+    $widget insert 1.end "  Building index for subsequent searches...  "
+    $widget window create 1.end -window $widget.bcancel
+    $widget configure -state disabled
+
+        if {[catch {
+            xapian::WritableDatabase database $dbpath $xapian::DB_CREATE_OR_OPEN
+            xapian::TermGenerator indexer
+            xapian::Stem stemmer "english"
+            xapian::Stem nostemmer "none"
+            indexer set_stemmer stemmer
+            ::dialog_search::build_index
+        } exception]} {
+            db_error $exception"
+        }
+    } else {
+        do_query
+    }
+
+    # todo: re-read http://wiki.tcl.tk/1526
+}
+
+
+
+
+
+# findFiles
+# basedirs - the directories to start looking in
+# pattern - A pattern, as defined by the glob command, that the files must match
+proc ::dialog_search::build_filelist {basedirs pattern} {
+
+    # Fix the directory name, this ensures the directory name is in the
+    # native format for the platform and contains a final directory seperator
+    set tmp {}
+    foreach directory $basedirs {
+        set directory \
+            [string trimright [file join [file normalize $directory] { }]]
+    lappend tmp $directory
+    }
+    set basedirs $tmp
+
+    # Starting with the passed in directory, do a breadth first search for
+    # subdirectories. Avoid cycles by normalizing all file paths and checking
+    # for duplicates at each level.
+
+    set directories [list]
+    set parents $basedirs
+    while {[llength $parents] > 0} {
+
+        # Find all the children at the current level
+        set children [list]
+        foreach parent $parents {
+            set children [concat $children [glob -nocomplain -type {d r} -path $parent *]]
+        }
+
+        # Normalize the children
+        set length [llength $children]
+        for {set i 0} {$i < $length} {incr i} {
+            lset children $i [string trimright [file join [file normalize [lindex $children $i]] { }]]
+        }
+
+        # Make the list of children unique
+        set children [lsort -unique $children]
+
+        # Find the children that are not duplicates, use them for the next level
+        set parents [list]
+        foreach child $children {
+            if {[lsearch -sorted $directories $child] == -1} {
+                lappend parents $child
+            }
+        }
+
+        # Append the next level directories to the complete list
+        set directories [lsort -unique [concat $directories $parents]]
+    }
+
+    # Get all the files in the passed in directory and all its subdirectories
+    set result [list]
+    foreach directory $directories {
+        set result [concat $result \
+            [glob -nocomplain -type {f r} -path $directory -- $pattern]]
+    }
+
+    # Normalize the filenames
+    set length [llength $result]
+    for {set i 0} {$i < $length} {incr i} {
+        lset result $i [file normalize [lindex $result $i]]
+    }
+
+    # Return only unique filenames
+    return [lsort -unique $result]
+}
+
+proc ::dialog_search::destroy_progressbar {widget} {
+    if {[lsearch [$widget window names] .search.navtext.pbar] != -1} {
+        $widget delete .search.navtext.pbar end
+    }
+}
+
+proc ::dialog_search::results_epilog {widget doccount} { 
+# todo: move $widget delete to index building
+    variable genres
+    variable count
+    variable filelist
+    .search.f.searchtextentry configure -foreground black -background white
+    $widget configure -state normal
+    destroy_progressbar $widget
+    print_navbar $widget
+# todo: clean up setting of widget state
+    set window [winfo parent $widget]
+    $widget tag configure navbar -tabs [list \
+        [expr {[winfo width $window]/2.0}] center]
+    $widget configure -state normal
+    # hack with whitespace to simulate centered text.
+    $widget insert 1.end [_ "\tFound "] "navbar"
+    set i 0
+    foreach genre $genres {
+                set tag [join $genre "_"]
+                append tag "_count"
+                $widget insert 1.end [lindex $count $i] "$tag navbar"
+                incr i
+    }
+    $widget insert 1.end " " "navbar"
+    $widget insert 1.end \
+        [format [_ "out of %s docs"] $doccount] "navbar"
+    $widget configure -state disabled
+    .search.resultstext configure -state disabled
+}
+
+proc ::dialog_search::db_error {exception} {
+    ::pdwindow::error "Search error: $exception\n"
+}
+
+proc ::dialog_search::get_pdfinfo {docfile} {
+    set data ""
+    switch -exact [file tail $docfile] {
+        rradicalpd.pdf {
+            append data "description collection of patches that make Pd \
+                easier and faster to use for people who are more used to \
+                software like Reason or Reaktor;\n"
+            append data "author Frank Barknecht;\n"
+            }
+        GemPrimer.pdf {
+            append data "description introduction to Gem, a pdf manual for \
+                the Graphics Environment for Multimedia;\n"
+            append data "author Johannes Zmoelnig;\n"
+            }
+        pattHiro.pdf {
+            append data "description just a single-page pdf \
+                document with the word \"Hiro\" printed in a rectangle;\n"
+            append data "author Patt Hiro;\n"
+            }
+        pmpd.pdf {
+            append data "description pdf manual for the physical modelling \
+                library for pd;\n"
+            append data "author Cyrille Henry;\n"
+            }
+        Dokumentation_German.pdf {
+            append data "description Funktionsbeschreibung der Pd-Objekte \
+                von iemlib1, iemlib2 und iemabs (pdf);\n"
+            }
+        vst~.pdf {
+            append data "description pdf manual for Pd external that acts as a \
+                VST2.0 host;\n"
+            append data "author Marius Schebella;\n"
+            }
+        readme.pdf {
+            append data "description brief pdf manual for an abstraction \
+                cloning external;\n"
+            append data "author Olaf Matthes;\n"
+            }
+        adapt_filt_lib.pdf {
+            append data "description pdf manual for Pd external library \
+                containing several algorithms for least mean square (LMS) \
+                adaptive filtering;\n"
+            append data "author Markus Noisternig and Thomas Musil;\n"
+            }
+        }
+        return $data
+}
+
+proc ::dialog_search::parse_meta_subpatch {file_contents gemhelp} {
+    set data ""
+    if {$gemhelp} {
+        # description(:) comment somewhere within the patch...
+        append data "description [get_metadata description $file_contents];\n"
+#        set desc [get_metadata description $file_contents]
+#        if {$desc ne ""} {append data "description $desc;\n"}
+    } else {
+        set meta_subpatch ""
+        regexp -nocase {#N canvas [0-9]+ [0-9]+ [0-9]+ [0-9]+ meta [0-9];\n(.*?)#X restore [0-9]+ [0-9]+ pd meta;} $file_contents - meta_subpatch
+        if {$meta_subpatch ne ""} {
+            foreach {key prefix} $::dialog_search::metakeys {
+                append data "$key [get_metadata $key $meta_subpatch];\n"
+#                set values [get_metadata $key $meta_subpatch]
+#                if {$values ne ""} {append data "$key $values;\n"}
+            }
+        }
+    }
+    return $data
+}
+
+proc ::dialog_search::parse_gemhelp {file_contents} {
+    # floating description(:) comment in a patch...
+    set desc ""
+    regexp -nocase {#X text [0-9]+ [0-9]+ description:? ([^;]*?);\n} $file_contents - desc
+    if {$desc ne ""} {
+        regsub {\n} $desc {} desc
+        regsub { \\,} $desc {,} desc
+        return "description $desc;\n"} else {return ""}
+}
+
+# Recursive loop to index all files and keep the gui
+# alive every 64 iterations.  This was tested searching
+# a little over 9,000 docs and seems to work alright
+proc ::dialog_search::build_index {} {
+    variable database
+    variable dbpath
+    variable filelist
+    variable progress
+    variable i
+    variable cancelled
+    set obj {}
+    set file_contents {}
+    if { $i < [llength $filelist]} {
+	# get index of docfile docname and basedir
+        set docfile [lindex $filelist $i]
+	append data "path $docfile;\n"
+        
+        # Since there are only eight pdf manuals in pd svn,
+        # it's a waste of time to build or hook into a pdf
+        # parser. Instead there's just some hardcoded metadata
+        # so people can find what already exists. Going forward
+        # it's better to use pd files or, if necessary, html.
+        if {[file extension $docfile] eq ".pdf"} {
+            set file_contents [get_pdfinfo $docfile]
+            append data $file_contents
+        } else {
+            # for everything else we need to read the actual file
+            set file_contents [readfile $docfile]
+        }
+        if {[file extension $docfile] eq ".pd"} {
+            append data [parse_meta_subpatch $file_contents \
+                [regexp -nocase -- {gem(?:.*?)-help} $docfile]]
+            set temp ""
+            foreach line [split $file_contents "\n"] {
+                if {[regexp {#X connect} $line]} {
+                } elseif {[regexp {#X obj [0-9]+ [0-9]+ (.*)} $line - line]} {
+                    append temp "obj $line"
+                    lappend obj [regsub {^([^[:space:];]+).*;?} $line {\1}]
+                } elseif {[regexp {#X (\m\S+\M) [0-9]+ [0-9]+ (.*)} \
+                         $line - sel line]} {
+                    append temp "$sel $line"
+                } elseif {![regexp {^(?:#\S )} $line]} {
+                    append temp $line
+                }
+            }
+            set file_contents $temp
+        } elseif {[file extension $docfile] eq ".htm" ||
+                  [file extension $docfile] eq ".html"} {
+            set description ""
+            # title should exist if the doc is worth a damn...
+            regexp {<title>(.*)</title>} $file_contents - description
+            if {$description ne ""} {
+                append data "description $description;\n"
+            }
+	}
+        
+        if {[catch {
+            # todo: break this out and clean up
+
+            xapian::Document doc
+            doc set_data $data
+            indexer set_document doc
+            indexer set_stemmer stemmer
+            indexer index_text $file_contents
+            indexer set_stemmer nostemmer
+            foreach {key prefix} $::dialog_search::metakeys {
+                set values ""
+                regexp "$key \(.*?);" $data - values
+                if {$values ne ""} {indexer index_text $values 1 $prefix}
+            }
+            # add all object instances, both prefixed and unprefixed.
+            # add_term doesn't include positional info-- could use the
+            # x,y coords for that...
+            if {$obj ne ""} {
+                foreach word $obj {
+                    doc add_term [string tolower $word]
+                    doc add_term [format XO%s [string tolower $word]]
+                }
+            }
+            # file name and extension
+            indexer index_text $docfile 100
+            doc add_term [format XF%s [string tolower [file tail $docfile]]]
+            indexer index_text $docfile 100
+            doc add_term [format E%s [string tolower [file extension $docfile]]]
+
+            database add_document doc
+            } exception]} {
+                db_error $exception
+        }
+        incr i
+        # I changed '64' below to [llength $filelist]/8 in order
+	# to keep the updates to 8 total regardless of the number
+      	# of files and tcl complained there were too many nested
+	# loops. Hm...
+        if { $i%64==0 } {
+	    # if the user closed the window then quit searching. I'm
+	    # using a global variable here in case we want to veer from
+	    # the standard dialog behavior and stop a search with ESC
+	    # without actually withdrawing the window 
+	    if { $cancelled == 0 } {
+                # update the progressbar variable and refresh gui
+                set progress [expr $i*100.0/[llength $filelist]]
+	        after idle ::dialog_search::build_index
+	    } else {
+                if {[catch { database -delete } exception]} {
+                    db_error $exception
+                }
+                file delete -force $dbpath
+                .search.navtext configure -state normal
+                destroy_progressbar ".search.navtext"
+                print_navbar .search.navtext
+                # todo: manage widget state better
+                .search.navtext configure -state normal
+                .search.navtext insert end \
+                    "                    Cancelled building the index."
+                .search.f.searchtextentry configure -state normal
+                .search.f.searchtextentry configure -foreground black \
+                    -background white
+                .search.navtext configure -state disabled
+                .search.resultstext configure -state disabled
+	        return
+	    }
+        } else { ::dialog_search::build_index }
+    } else {
+	# we've gone throught the whole filelist so end the recursion
+	set progress 100
+#	::dialog_search::results_epilog ".search.navtext"
+        database -delete
+        do_query
+	return
+    }
+}
+
+proc ::dialog_search::do_query {} {
+    variable database
+    variable dbpath
+    variable searchtext
+    set doccount 0
+
+    if {[catch {
+        xapian::Database database $dbpath
+        set doccount [database get_doccount]
+
+        # Start an enquire session.
+        xapian::Enquire enquire database
+
+        xapian::QueryParser qp
+        xapian::Stem stemmer "english"
+        foreach {key prefix} $::dialog_search::metakeys {
+            qp add_boolean_prefix $key $prefix
+        }
+        qp add_boolean_prefix object XO
+        qp add_boolean_prefix filename XF
+        qp add_boolean_prefix extension E
+        qp set_stemmer stemmer
+        qp set_database database
+        qp set_stemming_strategy $xapian::QueryParser_STEM_SOME
+        set query [qp parse_query $searchtext]
+    } exception]} {
+        db_error $exception
+        results_epilog .search.navtext 0
+        return
+    }
+    if {[catch {
+        pdtk_post "Parsed query is: [$query get_description]\n"
+
+        # Find the top 1337 results for the query.
+        enquire set_query $query
+        set matches [enquire get_mset 0 1337]
+
+        # Display the results.
+        # pdtk_post "[$matches get_matches_estimated] results found:"
+    } exception]} {
+        db_error $exception
+    }
+    for {set i [$matches begin]} {![$i equals [$matches end]]} {$i next} {
+        if {[catch {
+            xapian::Document document [$i get_document]
+            set data [document get_data]
+        } exception]} {
+            db_error $exception
+            break
+        }
+#        set rank [expr [$i get_rank] + 1]
+#        pdtk_post "[format {%s: %s%% docid=%s} \
+#            $rank [$i get_percent] [$i get_docid]]\n"
+#        pdtk_post "[document get_data]\n\n\n"
+        regexp {path (.*?);\n} $data - path
+        set filename [file tail $path]
+        set basedir [file dirname $path]
+        printresult $filename $basedir $data .search.resultstext 1
+    }
+    results_epilog .search.navtext $doccount
+}
+
+# put license.txt and readme.txt at the bottom of a directory listing
+proc ::dialog_search::directory_sort { list } {
+    if {$list eq ""} {return}
+    foreach name $list {
+        regsub -nocase {(license\.txt|readme\.txt)} $name {~~~\1} key
+        lappend list2 [list $key $name]
+    }
+    foreach pair [lsort -index 0 -dictionary $list2] {
+        lappend list3 [lindex $pair 1]
+    }
+    return $list3
+}
+
+# path of least resistance to give Pd manual a description
+proc ::pdmanual_description {filename} {
+    set desc {}
+    switch -exact $filename {
+        1.introduction.txt {set desc {This opens when you click the \
+            "Help" menu and choose "About Pd"}}
+        index.htm {set desc "Pd Documentation: Table of Contents" }
+        x1.htm { set desc "Pd Documentation Chapter 1: Introduction"}
+        x2.htm { set desc "Pd Documentation Chapter 2: Theory of Operation" }
+        x3.htm { set desc "Pd Documentation Chapter 3: Getting Pd to Run" }
+        x4.htm { set desc "Pd Documentation Chapter 4: Writing Pd Objects in C" }
+        x5.htm { set desc "Pd Documentation Chapter 5: Current Status of the Software" }
+    }
+    return $desc
+}
+
+proc ::dialog_search::libdirize {filename basedir} {
+    # if a pd *-help.pd file isn't in a directory that
+    # has a *-meta.pd patch, we don't list it as a libdir doc
+    if {[glob -nocomplain [file join $basedir *-meta.pd]] eq ""} {
+        return [list $basedir $filename]
+    }
+    set libdir [file tail $basedir]
+    set outfile [file join $libdir $filename]
+    # the following command uses tcl's argument expansion (the
+    # cryptic {*} thingy). That it is one of the ugliest parts
+    # of the language I've encountered in tcl is saying a lot :)
+    set outdir [file join {*}[lrange [file split $basedir] 0 end-1]]
+    return [list $outdir $outfile]
+}
+
+proc ::dialog_search::printresult {filename basedir metadata widget mixed_dirs} {
+    variable count
+    variable genres
+    set description ""
+    set keywords ""
+    set genre ""
+    set title ""
+    if {[regexp -nocase -- ".*-help\.pd" $filename]} {
+    	# object help
+        # show libdir prefix in the search results
+        if {$mixed_dirs} {
+            set tmplist [libdirize $filename $basedir] 
+            set basedir [lindex $tmplist 0]
+            set filename [lindex $tmplist 1]
+        }
+    	set genre 1
+    	regsub -nocase -- "(?:^|(?:5.reference/))(.*)-help.pd" $filename {\1} title
+    } elseif {[regexp -nocase -- "all_about_.*\.pd" $filename]} {
+	regsub -nocase -- {(?:.*[/\\])?(.*)\.pd} $filename {\1} title
+	regsub -all -- "_" $title " " title
+	# all about pd
+	set genre 2
+    } elseif {[file extension $filename] eq ".html" ||
+              [file extension $filename] eq ".htm" ||
+              [file extension $filename] eq ".pdf"} {
+    	set title $filename
+    	# Pd Manual (or some html page in the docs)
+        if {[file tail $basedir] eq "1.manual"} {
+            set description [pdmanual_description $filename]
+        }
+    	set genre 4
+    } else {
+    	set title $filename
+        if {[file tail $basedir] eq "1.manual"} {
+            set description [pdmanual_description $filename]
+        }
+    }
+	if {[regexp -nocase {license\.txt} $filename]} {
+	    set description [concat [_ "text of the license for"] \
+                [file tail $basedir]]
+	} elseif {[regexp -nocase {readme\.txt} $filename]} {
+	    set description [concat [_ "general information from the author of"] [file tail $basedir]]
+	} else {
+    	    regexp -nocase -- {description (.*?);\n} $metadata -> description
+	}
+    	regexp -nocase -- {keywords (.*?);\n} $metadata -> keywords
+    	if {[regexp -nocase -- {genre tutorial;\n} $metadata]} {
+    	    set genre 3
+    	}
+    	if { $genre eq "" } {
+    	    set genre 5
+    	}
+    	lset count $genre [expr [lindex $count $genre] + 1]
+    	set genre_name [join [lindex $genres $genre] "_"]
+    	lset count 0 [expr [lindex $count 0] + 1]    		
+    	# print out an entry for the file
+    	$widget insert end "$title" "title link $genre_name"
+	if {$mixed_dirs} {
+	    if { $genre == 1 } {
+	        $widget insert end " "
+	        $widget image create end -image ::dialog_search::help
+	    }
+	    $widget insert end " "
+	    $widget image create end -image ::dialog_search::folder
+	    if { $genre == 1 } {
+	        $widget tag add help_icon "end -4indices" "end -3indices"
+	        $widget tag add $genre_name "end -5indices" end
+	    } else {
+	        $widget tag add $genre_name "end -3indices" end
+	    }
+	    $widget tag add folder_icon "end -2indices" "end -1indices"
+	}
+	$widget insert end "$basedir" basedir
+	$widget insert end "$filename" filename
+    	if { $description eq "" } {
+    	    set description [_ "No DESCRIPTION tag."]
+    	}
+    	$widget insert end "\n$description\n" "description $genre_name"
+    	if { $keywords ne "" } {
+    	    $widget insert end [_ "Keywords:"] "metakey $genre_name"
+	    set i 0
+    	    foreach value $keywords {
+		set metavalue "metavalue$i"
+		set i [expr {($i+1)%30}]
+    		$widget insert end " " "link $genre_name"
+    		$widget insert end $value "$metavalue keywords link $genre_name"
+                # have to make an elided copy for use with "nextrange"
+                # since I can't just get the tag's index underneath
+                # the damn cursor!!!
+                $widget insert end $value metavalue_h
+    	    }
+    	$widget insert end "\n" $genre_name
+    	}
+}
+
+proc ::dialog_search::get_metadata {field file_contents} {
+    # todo: make regexp match only unescaped semicolon
+            set data ""
+    	    regexp -nocase -- "#X text \[0-9\]+ \[0-9\]+ $field\[:\]? (\[^;\]*?);.*" $file_contents -> data
+    	    regsub -all {[{}\\]} $data {} data
+            regsub -all {\n} $data { } data
+            regsub -all { ,} $data {,} data
+            return $data
+}
+
+proc ::dialog_search::ok {mytoplevel} {
+    # this is a placeholder for the standard dialog bindings
+}
+
+proc ::dialog_search::cancel {mytoplevel} {
+    variable cancelled 1
+    wm withdraw .search
+}
+
+
+# hack to select all because tk's default bindings apparently
+# assume the user is going to want emacs shortcuts
+proc ::dialog_search::sa { widget } {
+    $widget selection range 0 end
+    break
+}
+
+proc ::dialog_search::intro { t } {
+    variable navbar {}
+    .search.navtext configure -state normal
+    .search.navtext delete 0.0 end
+    .search.navtext insert end [_ "Search"] "navbar homepage_title"
+    .search.navtext configure -state disabled
+    $t configure -state normal
+    $t delete 0.0 end
+    $t insert end \
+        [_ "Enter terms above. Use the dropdown menu to filter by category."] \
+        homepage_description
+    $t insert end "\n"
+
+
+    $t insert end [_ "Introductory Topics"] homepage_title
+    $t insert end "\n"
+
+
+    set intro_docs [list \
+        [_ "Pd Manual"] 1.manual [_ "HTML manual for Pure Data"] \
+        [_ "Control Structure"] 2.control.examples \
+            [_ "tutorials for control objects"] \
+        [_ "Audio Signals"] 3.audio.examples [_ "tutorials for audio signals"] \
+    ]
+    set i 1
+    foreach {title dir desc} $intro_docs {
+        $t insert end "$title" "link clickable_dir intro_link$i spacing"
+        $t insert end [file join $::sys_libdir doc $dir] basedir
+        $t insert end "0" is_libdir
+        $t insert end "dummy" filename
+	$t insert end " $desc\n" description
+	set i [expr {($i+1)%30}]
+    }
+    $t insert end [_ "All About Pd"] "link homepage_file spacing"
+    $t insert end [file join $::sys_libdir doc 5.reference] basedir
+    $t insert end all_about.pd filename
+    $t insert end " " description
+    $t insert end \
+        [_ "reference patches for key concepts and settings in Pd"] \
+        description
+    $t insert end "\n"
+
+    $t insert end [_ "Advanced Topics"] homepage_title
+    $t insert end "\n"
+    set advanced_docs [list \
+	[_ "Networking"] [file join manuals 3.Networking] \
+            [_ "sending data over networks with Pd"] \
+        [_ "Writing Externals"] 6.externs \
+            [_ "how to code control and signal objects in C"] \
+        [_ "Data Structures"] 4.data.structures \
+            [_ "creating graphical objects in Pure Data"] \
+	[_ "Dynamic Patching"] [file join manuals pd-msg] \
+            [_ "programmatically create/destroy Pd objects"] \
+	[_ "Implementation Details"] [file join manuals Pd] \
+            [_ "file format specification, license text, etc."]
+    ]
+    set i 0
+    foreach {title dir desc} $advanced_docs {
+	$t insert end "$title" "link clickable_dir intro_link$i spacing"
+	$t insert end [file join $::sys_libdir doc $dir] basedir
+	$t insert end "0" is_libdir
+	$t insert end "dummy" filename
+	$t insert end " $desc\n" description
+	set i [expr {($i+1)%30}]
+    }
+
+    $t insert end [_ "Browse the Documentation"] homepage_title
+    $t insert end "\n"
+    $t insert end [_ "The \"doc\" directory"] \
+        "link clickable_dir intro_link0 spacing"
+    $t insert end [file join $::sys_libdir doc] basedir
+    $t insert end "0" is_libdir
+    $t insert end "\n"
+    $t insert end [_ "External Pd libraries"] \
+        "link libdirs intro_libdirs spacing"
+    $t insert end "\n"
+    $t insert end [_ "Pure Data Glossary"] "link homepage_file spacing"
+    $t insert end [file join $::sys_libdir doc 5.reference] basedir
+    $t insert end glossary.pd filename
+    $t insert end "\n"
+
+    $t insert end [_ "Object Categories"] homepage_title
+    $t insert end "\n"
+    $t insert end \
+        [_ "Many documents are categorized using a keyword field. Click\
+	    a link below to find all documents marked with that keyword."] \
+	    homepage_description
+    $t insert end "\n"
+
+    set keywords [list \
+        abstraction [_ "abstraction"] \
+            [_ "object itself is written in Pure Data"] \
+        abstraction_op [_ "abstraction_op"] \
+	    [_ "object's behavior only makes sense inside an abstraction"] \
+        analysis [_ "analysis"] [_ "analyze the incoming signal or value"] \
+        anything_op [_ "anything_op"] \
+            [_ "store or manipulate any type of data"] \
+        array [_ "array"] [_ "create or manipulate an array"] \
+        bandlimited [_ "bandlimited"] \
+            [_ "object describes itself as being bandlimited"] \
+        block_oriented [_ "block_oriented"] \
+            [_ "signal object that performs block-wide operations (as opposed \
+            to repeating the same operation for each sample of the block)"] \
+        canvas_op [_ "canvas_op"] \
+            [_ "object's behavior only makes sense in context of a canvas"] \
+        control [_ "control"] [_ "control rate objects"] \
+        conversion [_ "conversion"] \
+            [_ "convert from one set of units to another"] \
+        data_structure [_ "data_structure"] \
+            [_ "create or manage data structures"] \
+        dynamic_patching [_ "dynamic_patching"] \
+            [_ "dynamic instantiation/deletion of objects or patches"] \
+        filesystem [_ "filesystem"] \
+            [_ "object that reads from and/or writes to the file system"] \
+        filter [_ "filter"] [_ "object that filters incoming data"] \
+        GUI [_ "GUI"] [_ "graphical user interface"] \
+        list_op [_ "list_op"] \
+            [_ "object that manipulates, outputs, or stores a list"] \
+        MIDI [_ "MIDI"] \
+            [_ "object that provides MIDI functionality"] \
+        network [_ "network"] \
+            [_ "provides access to or sends/receives data over a network"] \
+        nonlocal [_ "nonlocal"] \
+            [_ "pass messages or data without patch wires"] \
+        orphan [_ "orphan"] [_ "help patches that cannot be accessed by \
+            right-clicking \"help\" for the corresponding object"] \
+        patchfile_op [_ "patchfile_op"] [_ "object whose behavior only \
+            makes sense in terms of a Pure Data patch"] \
+        pd_op [_ "pd_op"] \
+            [_ "object that can report on or manipulate global data\
+	    associated with the running instance of Pd"] \
+        ramp [_ "ramp"] [_ "fills in between a starting and ending value"] \
+        random [_ "random"] \
+            [_ "output a random value, list, signal, or other random data"] \
+        signal [_ "signal"] \
+            [_ "audiorate object (so called \"tilde\" object)"] \
+        soundfile [_ "soundfile"] [_ "object that can play, manipulate, \
+            and/or save a sound file (wav, ogg, flac, mp3, etc.)"] \
+        storage [_ "storage"] [_ "object whose main purpose is to store data"] \
+        symbol_op [_ "symbol_op"] [_ "manipulate or store a symbol"] \
+        time [_ "time"] [_ "measure and/or manipulate time"] \
+        trigonometry [_ "trigonometry"] \
+            [_ "provide trigonometric functionality"] \
+        ]
+
+    set i 0
+    foreach {keyword name desc} $keywords {
+        $t insert end "keywords" "metakey hide spacing"
+        $t insert end $name "metavalue$i link dt"
+        $t insert end $keyword metavalue_h
+        $t insert end "\t$desc\n" dd
+        set i [expr {($i+1)%30}]
+    }
+    $t configure -state disabled
+}
+
+# hack to get <ctrl-backspace> to delete the word to the left of the cursor
+proc ::dialog_search::ctrl_bksp {mytoplevel} {
+    set last [$mytoplevel index insert]
+    set first $last
+    while { $first > 0 } {
+	set char [string index [$mytoplevel get] $first-1]
+	set prev [string index [$mytoplevel get] $first]
+	if { [regexp {[[:punct:][:space:]\|\^\~\`]} $char] &&
+	     $first < $last &&
+	     [regexp {[^[:punct:][:space:]\|\^\~\`]} $prev] ||
+	     [$mytoplevel selection present] } { break }
+	incr first -1
+    }
+    incr first
+    $mytoplevel delete $first $last
+}
+
+proc ::dialog_search::font_size {text direction} {
+    variable searchfont
+    set offset {}
+    set min_fontsize 8
+    if {$direction == 1} {
+	set offset 2
+    } else {
+	set offset -2
+    }
+    set update 1
+    foreach tag [$text tag names] {
+	set val [$text tag cget $tag -font]
+	if {[string is digit -strict [lindex $val 1]] &&
+	    [expr {[lindex $val 1]+$offset}] < $min_fontsize} {
+		set update 0
+	    }
+    }
+    if {$update} {
+        foreach tag [$text tag names] {
+	    set val [$text tag cget $tag -font]
+	    if {[string is digit -strict [lindex $val 1]]} {
+	        $text tag configure $tag -font "$searchfont \
+		    [expr -{max([lindex $val 1]+$offset,$min_fontsize)}]"
+	    }
+        }
+    }
+}
+
+proc ::dialog_search::build_libdirs {textwidget} {
+    set libdirs {} 
+    foreach pathdir [file join $::sys_libdir extra] {
+        if { ! [file isdirectory $pathdir]} {continue}
+	# Fix the directory name, this ensures the directory name is in the 
+	# native format for the platform and contains
+        # a final directory separator
+	set dir [string trimright [file join [file normalize $pathdir] { }]]
+	# find the libdirs
+	foreach filename [glob -nocomplain -type d -path $dir "*"] {
+	    # use [file tail $filename] to get the name of libdir
+	    set dirname [file tail $filename]
+	    set norm_filename [string trimright \
+                [file join [file normalize $filename] { }]]
+	    if {[glob -nocomplain -type f -path $norm_filename \
+                "$dirname-meta.pd"] ne ""} {
+		lappend libdirs [list "$norm_filename" "$dirname"]
+	    }
+	}
+    }
+    ::dialog_search::print_libdirs $textwidget $libdirs
+}
+
+proc ::dialog_search::print_libdirs {textwidget libdirs} {
+    variable navbar
+    $textwidget configure -state normal
+    $textwidget delete 0.0 end
+    set navbar [list [list [_ "External libraries"] "link libdirs navbar" {}]]
+    print_navbar $textwidget
+    # now clear out the navbar and then add "externals (flag) to it..."
+    set i 0
+    foreach libdir [lsort $libdirs] {
+	set i [expr {($i+1)%30}]
+	set description {}
+	set author {}
+	$textwidget insert end "[lindex $libdir 1]" \
+            "link clickable_dir dir_title$i"
+	$textwidget insert end " "
+        $textwidget image create end -image ::dialog_search::folder
+	$textwidget tag add folder_icon "end -2indices" "end -1indices"
+	$textwidget insert end "[lindex $libdir 0]" basedir
+	$textwidget insert end "dummy" filename
+	$textwidget insert end "1" is_libdir
+	$textwidget insert end "\n"
+	set file_contents [readfile [format %s%s [join $libdir ""] "-meta.pd"]]
+	regexp -nocase -- "#X text \[0-9\]+ \[0-9\]+ description\[:\]? (.*?);.*" [join $file_contents] -> description
+	if {$description ne {}} {
+	    regsub -all { \\,} $description {,} description
+	    $textwidget insert end "$description\n" description
+	} else {
+	    $textwidget insert end [_ "no DESCRIPTION tag or values."] \
+                description
+            $textwidget insert end "\n"
+	}
+	foreach tag {Author License Version} {
+	    if {[regexp -nocase -- "#X text \[0-9\]+ \[0-9\]+ $tag (.*?);.*" \
+                [join $file_contents] -> values]} {
+	        $textwidget insert end [format "%s: " $tag] metakey
+		if {$values ne {}} {
+	            regsub -all { \\,} $values {,} values 
+	            $textwidget insert end "$values" metakey
+	        } else {
+	            $textwidget insert end \
+                        "no [string toupper $tag] tag or values." metakey
+		}
+	    $textwidget insert end "\n"
+	    }
+        }
+    }
+    $textwidget configure -state disabled
+}
+
+proc ::dialog_search::click_dir {textwidget xpos ypos} {
+    set i [$textwidget index @$xpos,$ypos]
+    set range [$textwidget tag nextrange basedir $i]
+    set dir [eval $textwidget get $range]
+    set range [$textwidget tag nextrange is_libdir $i]
+    set is_libdir [eval $textwidget get $range]
+    build_subdir .search.resultstext $dir $is_libdir
+}
+
+proc ::dialog_search::build_subdir {textwidget dir is_libdir} {
+    variable navbar
+    if {[lsearch -exact [join $navbar] $dir] == -1} {
+    lappend navbar [list "$dir" "link clickable_dir navbar navbar_dir" "subdir"]
+    } else {
+        set newnav {}
+	foreach {entry} $navbar {
+	    lappend newnav $entry
+	    if {[lindex $entry 0] eq $dir} {break}
+	}
+        set navbar $newnav
+    }
+    $textwidget configure -state normal
+    $textwidget delete 0.0 end
+    print_navbar .search.navtext
+    # get any subdirs first
+    set i 0
+    foreach subdir \
+        [lsort -dictionary [glob -nocomplain -type d -directory $dir "*"]] {
+        # get name of subdir
+        set subdirname [file tail $subdir]
+	$textwidget insert end "$subdirname" "link clickable_dir dir_title$i"
+        set norm_subdir \
+            [string trimright [file join [file normalize $subdir] { }]]
+	$textwidget insert end "0" is_libdir
+        $textwidget insert end " "
+        $textwidget image create end -image ::dialog_search::folder
+	$textwidget tag add folder_icon "end -2indices" "end -1indices"
+        $textwidget insert end "$norm_subdir" basedir
+        $textwidget insert end "dummy" filename
+	$textwidget insert end "\n"
+	set i [expr {($i+1)%30}]
+    }
+    foreach docfile [directory_sort [find_doc_files [file normalize $dir]]] {
+        # get name of file
+	# if we're in a libdir, filter out pd patches that don't end in -help.pd
+	if {[regexp {.*-help\.pd$} $docfile] ||
+	    [string replace $docfile 0 [expr [string length $docfile] - 4]] \
+                ne ".pd" ||
+	    !$is_libdir} {
+            set docname [string replace $docfile 0 \
+                [string length [file normalize $dir]]]
+            set file_contents [readfile $docfile]
+            if {[file extension $docfile] eq ".pd"} {
+                set file_contents [parse_meta_subpatch $file_contents \
+                    [regexp -nocase -- {gem(?:.*?)-help} $docfile]]
+            }
+	    ::dialog_search::printresult \
+                $docname $dir $file_contents $textwidget 0
+	    }
+    }
+    $textwidget configure -state disabled
+}
+
+# fix this-- maybe print_navbar shouldn't need an argument
+proc ::dialog_search::print_navbar {foo} {
+    variable navbar
+    set separator /
+    set text .search.navtext
+    $text configure -state normal
+    $text delet 1.0 end
+    $text insert 1.0 [_ "Home"] "link intro navbar"
+    if {[llength $navbar] == 0} {
+	$text configure -state disabled
+	return
+    }
+    for {set i 0} {$i<[expr {[llength $navbar]-1}]} {incr i} {
+        $text insert 1.end " $separator " navbar
+        if {[lindex $navbar $i 2] eq "subdir"} {
+	    $text insert 1.end [file tail [lindex $navbar $i 0]] \
+		[lindex $navbar $i 1]
+	    $text insert 1.end [lindex $navbar $i 0] basedir
+	    $text insert 1.end dummy filename
+	    $text insert 1.end "0" is_libdir
+	} else {
+	    $text insert 1.end [lindex $navbar $i 0] [lindex $navbar $i 1]
+	}
+    }
+    if {[lindex $navbar end 2] eq "subdir"} {
+        $text insert 1.end " $separator " navbar
+	$text insert 1.end [file tail [lindex $navbar end 0]]
+    } else {
+	$text insert 1.end " $separator " navbar
+        $text insert 1.end [lindex $navbar end 0]
+    }
+    $text configure -state disabled
+}
+
+proc ::dialog_search::get_info {xpos ypos mytoplevel} {
+    set textwidget "$mytoplevel.resultstext"
+    set i [$textwidget index @$xpos,$ypos]
+    set range [$textwidget tag nextrange filename $i]
+    set filename [eval $textwidget get $range]
+    set range [$textwidget tag nextrange basedir $i]
+    set basedir [file normalize [eval $textwidget get $range]]
+    set match 0
+    set fulldir [file dirname [file join $basedir $filename]]
+    set meta [format "%s-meta.pd" [file tail $fulldir]]
+    if {[regexp {5.reference} $fulldir]} {
+	tk_messageBox -message {Internal Object} \
+	    -detail [_ "This help patch is for an internal Pd class"] \
+	    -parent $mytoplevel -title [_ "Search"]
+	set match 1
+    } else {
+	# check for a readme file (use libname-meta.pd as a last resort)
+	foreach docname [list Readme.txt README.txt readme.txt README $meta] {
+	    if {[file exists [file join $fulldir $docname]]} {
+		menu_doc_open $fulldir $docname
+		set match 1
+		break
+	    }
+	}
+    }
+    if {!$match} {
+	tk_messageBox -message \
+	    [_ "Sorry, can't find a README file for this object's library."] \
+	    -title [_ "Search"]
+    }    	
+}
+
+# create the menu item on load
+# set mymenu .menubar.help
+ # this can be buggy with translated text
+ #set inserthere [$mymenu index [_ "Report a bug"]]
+#if {$::windowingsystem eq "aqua"} {
+#    set inserthere 3    
+#} else {
+#    set inserthere 4
+#}
+# $mymenu insert $inserthere separator
+# $mymenu insert $inserthere command -label [_ "Search"] \
+#    -command {::dialog_search::open_helpbrowser .search}
+# Note: you can't use <command-h> on OSX because it's a
+# window binding
+# bind all <$::modifier-Key-h> \
+#     {::dialog_search::open_helpbrowser .search}
+
+# Folder icon "folder16"
+# from kde klassic icons (license says GPL/LGPL)
+
+image create photo ::dialog_search::folder -data {
+   R0lGODlhEAAQAIMAAPwCBNSeBJxmBPz+nMzOZPz+zPzSBPz2nPzqnAAAAAAA
+   AAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARFEMhJ6wwYC3uH
+   98FmBURpElkmBUXrvsVgbOxw3F8+A+zt/7ddDwgUFohFWgGB9BmZzcMTASUK
+   DdisNisSeL9gMGdMJvsjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZl
+   cnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyBy
+   ZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=
+}
+
+# Info icon "acthelp16"
+# from kde slick icons (license says GPL/LGPL)
+
+image create photo ::dialog_search::help -data {
+R0lGODlhEAAQAMZoAAAZUgAcVAAnXAAnXQAoZAAraCZPhCBSiiRVjC9dkjhclTtk
+oTxllV9/p2aCsHCMuHWQuHqUvXmYxYCZwIadwoKeyIeewoOfyYWfxYmfw4yhxIik
+zI6jxZCkxoqmzZKmx4+s0pCs0pSv06S3zKK31aO41qS41qW62Km92K/E37PH4LTI
+4bnJ4b3J3bvK4sLQ5snX6cvZ683Z7c7Z7M3a7NHb7c/c7dHd7dLd7dLe7tXe7tXg
+8tbh8dfh79fh8Nji79ji8Nnj8Nrj8Nzl8d/n8+Lp9OPq9Obs9eft9ubt+ejt9ufu
++enu9ujv+uvw9+3x+u7y+O/z+fDz+fH0+fH0+vL1+vH1/fL1/fP2+vX3+/b4/Pb5
+/Pf5/Pf6/fj6/fj6//n6/fn7/fv8/fv8/v39/v3+/v7+/v7+////////////////
+////////////////////////////////////////////////////////////////
+/////////////////yH5BAEKAH8ALAAAAAAQABAAAAergH+Cg4SFhCAiIRseFRUX
+Dw6FEkJolZaVQQuEKZctI2dhYVwfhCqXBQRoWllZHKWWYjw7WFVRUR2EK5VgaAcA
+aE5MTBqEJGZlXWAMAl9KR0YWhCVoXFtjCQNXRURDFNJiXlNc2FZBPT4ThCZjWlVY
+2EtANzkRhCdiWVJUCAFJODY0IBDKQGYKFCRPmvyIQQNGA0IKUOioMUPGCxcsXGAw
+UAiRIkaOIBkaaSgQADs=
+}
-- 
GitLab