diff --git a/doc/pddp/block~-help.pd b/doc/pddp/block~-help.pd
index 843d48397136d92d1c7838dfb683450e36b4d5ec..5858a5531854653fa5a72e605418e136d8fe8842 100644
--- a/doc/pddp/block~-help.pd
+++ b/doc/pddp/block~-help.pd
@@ -1,9 +1,9 @@
-#N canvas 427 32 555 619 10;
+#N canvas 242 31 555 619 10;
 #X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
 14 -228856 -66577 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header block~ 3 12 0 18
 -204280 -1 0;
-#X obj 0 271 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+#X obj 0 251 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
 -228856 -1 0;
 #N canvas 479 284 494 344 META 0;
 #X text 12 105 LIBRARY internal;
@@ -33,12 +33,12 @@ for DSP;
 14 -204280 -1 0;
 #X text 8 1 [block~] Related Objects;
 #X restore 102 597 pd Related_objects;
-#X obj 78 280 cnv 17 3 40 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+#X obj 78 260 cnv 17 3 70 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
 -162280 0;
-#X text 98 280 set;
+#X text 98 260 set;
 #X text 98 341 (none);
-#X floatatom 78 247 0 0 0 0 - - -;
-#X text 155 248 <- measured time (msec) between blocks;
+#X floatatom 78 223 0 0 0 0 - - -;
+#X text 165 224 <- measured time (msec) between blocks;
 #X text 161 49 block size 4096 \, no overlap \, no resampling;
 #X text 162 71 bigger block size;
 #X text 160 92 double overlap;
@@ -59,7 +59,7 @@ than your superpatch. This is useful for writing FFT based patches
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
 14 -204280 -1 0;
 #X text 7 1 [block~] A Simple Example;
-#X restore 282 556 pd a-simple-block-example;
+#X restore 242 555 pd a-simple-block-example;
 #N canvas 56 284 428 261 block-interactions 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
 14 -204280 -1 0;
@@ -76,7 +76,7 @@ in other \, running patches will cycle old input (and sound like garbage).
 to intercommunicate must have the same blocking -- and if their parents
 are blocked bigger than they are \, there might be weirdness.;
 #X restore 102 555 pd block-interactions;
-#X text 257 224 <- toggle display;
+#X text 257 200 <- toggle display;
 #X text 11 23 block \, overlap \, and resampling control for DSP;
 #N canvas 22 87 428 396 visualize 0;
 #X obj 49 219 f;
@@ -92,15 +92,15 @@ are blocked bigger than they are \, there might be weirdness.;
 -1 -1 0 1;
 #X obj 49 187 spigot;
 #X obj 110 124 r \$0-tgl;
-#X obj 49 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0 10
+#X obj 49 319 bng 10 50 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0 10
 -262144 -1 -1;
-#X obj 64 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0 10
+#X obj 64 319 bng 10 50 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0 10
 -262144 -1 -1;
-#X obj 79 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0 10
+#X obj 79 319 bng 10 50 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0 10
 -262144 -1 -1;
-#X obj 94 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0 10
+#X obj 94 319 bng 10 50 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0 10
 -262144 -1 -1;
-#X obj 109 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
+#X obj 109 319 bng 10 50 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
 10 -262144 -1 -1;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
 14 -204280 -1 0;
@@ -113,15 +113,15 @@ to display how different "set" messages change the block size.;
 #X obj 49 89 t b b;
 #X obj 49 115 timer;
 #X obj 49 273 sel 0 1 2 3 4 5 6 7 8 9;
-#X obj 124 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
+#X obj 124 319 bng 10 50 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
 10 -262144 -1 -1;
-#X obj 139 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
+#X obj 139 319 bng 10 50 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
 10 -262144 -1 -1;
-#X obj 154 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
+#X obj 154 319 bng 10 50 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
 10 -262144 -1 -1;
-#X obj 169 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
+#X obj 169 319 bng 10 50 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
 10 -262144 -1 -1;
-#X obj 184 319 bng 10 92 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
+#X obj 184 319 bng 10 50 50 0 \$0-nowhere \$0-bng-rcv empty 17 7 0
 10 -262144 -1 -1;
 #X obj 49 246 mod 10;
 #X connect 0 0 1 0;
@@ -153,20 +153,13 @@ to display how different "set" messages change the block size.;
 #X connect 25 9 30 0;
 #X connect 31 0 25 0;
 #X coords 0 -1 1 1 175 35 1 45 300;
-#X restore 78 209 pd visualize;
-#X obj 422 12 block~;
-#X text 90 161 IMPORTANT NOTE: Since you may have at most one block~/switch~
-object in any window \, [block~] has been put in a subpatch (below)
-for this example:;
+#X restore 78 185 pd visualize;
 #X text 170 384 - blocksize.;
 #X text 170 398 - (optional) overlap.;
 #X text 170 411 - (optional) resampling factor (relative to super-patch).
 ;
 #X text 80 398 2) float;
 #X text 80 411 3) float;
-#X text 168 280 - [block] has a single inlet that accepts a "set" message--
-"set" followed by one to three floats-- that determines the block size
-\, overlap \, and resampling for the window (see example above).;
 #X text 80 384 1) float;
 #X text 99 439 Pd's default block size is 64 samples. The [inlet~]
 and [outlet~] objects reblock signals to adjust for differences between
@@ -180,8 +173,36 @@ any other block size. This is intended for later use in video processing.
 #X obj 455 51 pddp/dsp;
 #X obj 102 576 pddp/pddplink ../3.audio.examples/J07.oversampling.pd
 -text doc/3.audio.examples/J07.oversampling.pd;
-#X text 469 12 or;
-#X obj 494 12 switch~;
+#X text 574 554 <-- weird 'bang' feature lets you single-step DSP;
+#X text 385 10 [block~] or [switch~];
+#X text 90 161 Note: [block~] is in the subpatch (below) for this example:
+;
+#X text 168 260 - "set" followed by one to three floats determines
+the block size \, overlap \, and resampling for the window (see example
+above).;
+#X text 98 310 bang;
+#X text 168 310 - calculate a single block inside a subpatch (see below)
+;
+#N canvas 0 22 581 315 bang_message 0;
+#X text 32 11 You can use the switch~ object to single-step dsp in
+a subpatch. This might be useful for block operations that don't want
+to be synced to the sample clock: loading a wondiw function in a table
+\, or copying one table to another:;
+#X obj 136 193 noise~;
+#X obj 136 225 tabwrite~ zzzz;
+#X obj 33 154 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X array zzzz 256 float 2 black black;
+#X coords 0 1 256 -1 256 140 1;
+#X restore 300 116 graph;
+#X obj 33 228 switch~ 256;
+#X text 25 111 turn DSP on and click to;
+#X text 26 127 randomize the table at right:;
+#X connect 1 0 2 0;
+#X connect 3 0 2 0;
+#X connect 3 0 5 0;
+#X restore 420 554 pd bang_message;
 #X connect 18 0 27 0;
 #X connect 19 0 27 0;
 #X connect 20 0 27 0;