diff --git a/pd/doc/5.reference/list-help.pd b/pd/doc/5.reference/list-help.pd
index 160df0eb19fcbc61c9a9ac235421801f7efc3cfa..5e74bcbc850359c98eee57be8d8658597e0f672e 100644
--- a/pd/doc/5.reference/list-help.pd
+++ b/pd/doc/5.reference/list-help.pd
@@ -1,4 +1,4 @@
-#N canvas 398 77 555 619 10;
+#N canvas 3 60 555 619 10;
 #X obj 0 635 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 list 3 12 0 18 -204280
@@ -21,9 +21,9 @@ length;
 ;
 #X text 12 150 RELEASE_DATE 2005;
 #X restore 500 638 pd META;
-#X obj 0 237 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+#X obj 0 187 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
 13 -228856 -1 0;
-#X obj 0 288 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+#X obj 0 238 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
 0 13 -228856 -1 0;
 #X obj 0 546 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
 0 13 -228856 -1 0;
@@ -36,7 +36,7 @@ length;
 #X obj 112 42 pack;
 #X obj 152 42 unpack;
 #X restore 102 639 pd Related_objects;
-#X obj 78 246 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+#X obj 78 196 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
 -162280 0;
 #X obj 78 153 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
 -162280 0;
@@ -95,7 +95,7 @@ to the outlet.;
 #X connect 23 0 16 1;
 #X connect 24 0 16 1;
 #X connect 25 0 16 1;
-#X restore 102 365 pd append;
+#X restore 102 315 pd append;
 #N canvas 89 83 428 592 about-lists 0;
 #X obj 22 567 print message;
 #X msg 22 380 list x.wav 44100;
@@ -147,13 +147,13 @@ implied if the first data item is a number.;
 #X connect 12 0 13 0;
 #X restore 101 586 pd about-lists;
 #X text 11 23 building and using variable-length messages;
-#X text 80 307 1);
+#X text 80 257 1);
 #X text 80 514 n);
-#X text 180 365 append - append the second list to the first;
-#X text 180 409 split - split a list in two;
-#X text 180 387 prepend - prepend the second list to the first;
-#X text 180 453 length - output the number of items in a list;
-#X text 180 431 trim - trim the "list" selector off;
+#X text 180 315 append - append the second list to the first;
+#X text 180 359 split - split a list in two;
+#X text 180 337 prepend - prepend the second list to the first;
+#X text 180 403 length - output the number of items in a list;
+#X text 180 381 trim - trim the "list" selector off;
 #X obj 212 98 list;
 #X msg 233 68 rice;
 #X msg 212 46 beans;
@@ -399,7 +399,7 @@ sent to the outlet.;
 #X connect 19 0 24 1;
 #X connect 20 0 24 1;
 #X connect 24 0 25 0;
-#X restore 102 387 pd prepend;
+#X restore 102 337 pd prepend;
 #N canvas 1 82 555 530 split 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header empty 3 12 0 14
 -204280 -1 0;
@@ -465,7 +465,7 @@ it is sent in its entirety to the rightmost outlet.;
 #X connect 19 0 10 0;
 #X connect 20 0 10 0;
 #X connect 21 0 10 0;
-#X restore 102 409 pd split;
+#X restore 102 359 pd split;
 #N canvas 1 82 555 481 trim 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header empty 3 12 0 14
 -204280 -1 0;
@@ -524,7 +524,7 @@ as bang);
 #X connect 15 0 12 0;
 #X connect 16 0 12 0;
 #X connect 26 0 12 0;
-#X restore 102 431 pd trim;
+#X restore 102 381 pd trim;
 #N canvas 2 128 555 490 length 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header empty 3 12 0 14
 -204280 -1 0;
@@ -566,9 +566,9 @@ list.;
 #X connect 14 0 16 0;
 #X connect 15 0 16 0;
 #X connect 16 0 17 0;
-#X restore 102 453 pd length;
-#X text 98 307 symbol atom;
-#X text 98 322 float;
+#X restore 102 403 pd length;
+#X text 98 257 symbol atom;
+#X text 98 272 float;
 #N canvas 51 146 428 419 list_conversion_in_Pd 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
 14 -204280 -1 0;
@@ -602,24 +602,18 @@ atom is treated as a symbol.;
 #X connect 10 0 9 0;
 #X connect 13 0 10 0;
 #X restore 241 586 pd list_conversion_in_Pd;
-#X text 170 307 - (optional) if no creation argument is given \, or
+#X text 170 257 - (optional) if no creation argument is given \, or
 if the first creation argument is a number \, [list] will behave like
 [list append]. Otherwise \, one of the following symbols may be given
 as arguments (see subpatches for more info):;
-#X text 98 245 [list] family objects always output a list. See the
+#X text 98 195 [list] family objects always output a list. See the
 "list_conversion_in_Pd" subpatch below for how lists are interpreted
 by other objects.;
 #X text 98 514 depending on what the first creation argument is \,
 other creation arguments may be specified.;
-#X text 98 154 See subpatches under the heading "arguments" for more
-details. With the exception of the right inlet of [list split] \, All
-[list] objects will convert incoming non-list messages to lists (e.g.
-\, "set 5" will become "list set 5"). A bang message is converted to
-an empty list (i.e. \, "list") \, and "symbol foo" is converted to
-"list foo".;
 #X obj 4 638 pddp/pddplink all_about_help_patches.pd -text Usage Guide
 ;
-#X text 180 475 cat - build a list by accumulating elements;
+#X text 180 425 cat - build a list by accumulating elements;
 #N canvas 1 112 555 488 cat 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header empty 3 12 0 14
 -204280 -1 0;
@@ -669,7 +663,85 @@ list is sent to the outlet.;
 #X connect 15 0 23 0;
 #X connect 21 0 23 1;
 #X connect 23 0 22 0;
-#X restore 102 475 pd cat;
+#X restore 102 425 pd cat;
+#X text 98 154 See subpatches under the heading "arguments";
+#N canvas 3 79 552 344 from/to 0;
+#X symbolatom 64 254 10 0 0 0 - - -, f 10;
+#X obj 64 277 list fromsymbol;
+#X text 83 9 fromsymbol and tosymbol - symbols to and from lists of
+numeric character codes, f 41;
+#X msg 230 232 115 101 118 101 110 116 101 101 110;
+#X obj 229 260 list tosymbol;
+#X obj 64 301 print from-symbol;
+#X symbolatom 229 286 10 0 0 0 - - -, f 10;
+#X msg 64 228 symbol seventeen;
+#X text 43 162 Neither of these objects promote non-list messages to
+lists (that would make little sense in this context).;
+#X text 25 66 These allow you to do string manipulations (such as scanning
+a filename for '/' characters). They convert a list of numbers (which
+might be ASCII or might be unicode if \, for example \, they represent
+a filename on a non-ASCII machine) to or from a symbol., f 63;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 7 0 0 0;
+#X restore 102 474 pd from/to;
+#N canvas 3 60 629 666 store 0;
+#X floatatom 17 137 5 0 0 0 - - -, f 5;
+#X msg 17 112 1 2 3;
+#X msg 17 85 list cis boom bah;
+#X msg 17 162 bang;
+#X msg 176 493 bang;
+#X msg 176 443 list x y z;
+#X msg 175 417 go dog go;
+#X msg 174 467 4 5 6 and 7;
+#X text 182 80 list starting with symbol;
+#X text 181 99 (needs explicit "list" selector);
+#X text 69 135 number is one-element list;
+#X text 72 112 numeric list;
+#X text 277 468 (note: only the first item;
+#X text 282 485 need be a number to make this;
+#X text 284 503 a list.);
+#X text 171 525 <- creation args initialize the list to prepend;
+#X text 20 6 Store - put together or break apart a list to/from sublists
+;
+#X text 270 414 right inlet can take non-list messages;
+#X text 34 45 lists in first inlet outputs the concatenation of incoming
+message with stored list:;
+#X text 46 223 other messages:;
+#X msg 17 280 prepend 1 2 3;
+#X text 133 279 prepend a list to the stored list;
+#X msg 17 253 append 1 2 3;
+#X text 129 255 append a list to the stored list;
+#X obj 17 523 list store 1 2;
+#X obj 17 587 print store-left;
+#X obj 126 562 print store-right;
+#X text 105 309 output a sublist \, starting with item 1 (counting
+from zero) \, of length 3 If there are fewer than 3 items available
+a "bang" is sent to right outlet.;
+#X text 158 588 output of "range" message on success;
+#X text 276 561 bang if "range" message fails;
+#X text 67 164 bang is zero-element list - this output the stored list
+;
+#X msg 17 308 get 1 3;
+#X connect 0 0 24 0;
+#X connect 1 0 24 0;
+#X connect 2 0 24 0;
+#X connect 3 0 24 0;
+#X connect 4 0 24 1;
+#X connect 5 0 24 1;
+#X connect 6 0 24 1;
+#X connect 7 0 24 1;
+#X connect 20 0 24 0;
+#X connect 22 0 24 0;
+#X connect 24 0 25 0;
+#X connect 24 1 26 0;
+#X connect 31 0 24 0;
+#X restore 102 450 pd store;
+#X text 180 450 store - build up or break down a list;
+#X text 180 474 fromsymbol/tosymbol - convert symbols to/from ASCII
+numbers;
 #X connect 21 0 24 0;
 #X connect 22 0 21 1;
 #X connect 23 0 21 0;
diff --git a/pd/src/x_list.c b/pd/src/x_list.c
index e03829441cb2800ad4c5df064d248a3a241a426a..230267430b0c6579f352d96eb577251f67489fad 100644
--- a/pd/src/x_list.c
+++ b/pd/src/x_list.c
@@ -336,15 +336,16 @@ static void list_cat_list(t_list_cat *x, t_symbol *s,
         t_alist y;
         alist_clone(&x->x_alist, &y, 0, n);
         alist_toatoms(&y, outv, 0, n);
+        alist_list(&x->x_alist, s, outc, outv);
         outlet_list(x->x_obj.ob_outlet, &s_list, outc, outv);
         alist_clear(&y);
     }
     else
     {
         alist_toatoms(&x->x_alist, outv, 0, n);
+        alist_list(&x->x_alist, s, outc, outv);
         outlet_list(x->x_obj.ob_outlet, &s_list, outc, outv);
     }
-    alist_list(&x->x_alist, s, outc, outv);
     XL_ATOMS_FREEA(outv, outc);
 }
 
@@ -363,24 +364,23 @@ static void list_cat_anything(t_list_cat *x, t_symbol *s,
         t_alist y;
         alist_clone(&x->x_alist, &y, 0, n);
         alist_toatoms(&y, outv, 0, n);
+        alist_list(&x->x_alist, s, outc, outv);
         outlet_list(x->x_obj.ob_outlet, &s_list, outc, outv);
         alist_clear(&y);
     }
     else
     {
         alist_toatoms(&x->x_alist, outv, 0, n);
+        alist_list(&x->x_alist, s, outc, outv);
         outlet_list(x->x_obj.ob_outlet, &s_list, outc, outv);
     }
-    if (x->x_alist.l_n <= 1)
-        alist_anything(&x->x_alist, s, outc, outv);
-    else
-        alist_list(&x->x_alist, s, outc, outv);
     XL_ATOMS_FREEA(outv, outc);
 }
 
 static void list_cat_clear(t_list_cat *x)
 {
     alist_clear(&x->x_alist);
+    alist_init(&x->x_alist);
 }
 
 static void list_cat_free(t_list_cat *x)
diff --git a/scripts/regression_tests.pd b/scripts/regression_tests.pd
index 5861aa5f22fd17a5c8ba8c1513c0cff4e06c70e7..19f8693ea56aaf9adb6566cc369c00e25168ef44 100644
--- a/scripts/regression_tests.pd
+++ b/scripts/regression_tests.pd
@@ -1,29 +1,14 @@
 #N canvas 3 60 749 617 12;
-#X obj 475 301 r \$0-result;
-#X obj 475 326 route 0;
-#X obj 583 470 print failure;
-#X obj 560 336 tgl 28 0 empty empty Print_All_Results 31 11 0 12 -262144
--1 -1 0 1;
-#X obj 159 149 bng 31 250 50 0 empty empty Run_all 39 13 0 12 -262144
+#X obj 465 281 r \$0-result;
+#X obj 159 179 bng 31 250 50 0 empty empty Run_all 39 13 0 12 -262144
 -1 -1;
 #X obj 56 25 r init;
 #X obj 345 191 route dollarzero;
-#X obj 475 411 t b a;
-#X obj 475 541 s pd;
 #X obj 56 120 trigger bang bang anything;
-#X msg 56 145 gui;
-#X obj 56 170 pdinfo;
-#X obj 56 195 sel 0;
-#X obj 56 245 s pd;
-#X msg 475 516 quit 1;
-#X msg 56 220 quit;
-#X obj 145 191 rtest msg_dollarzero;
-#X obj 145 246 rtest msg_dollarzero_semi;
-#X obj 145 302 rtest msg_click;
+#X obj 145 221 rtest msg_dollarzero;
+#X obj 145 276 rtest msg_dollarzero_semi;
+#X obj 145 332 rtest msg_click;
 #X obj 345 216 rtest binbuf_dollarzero;
-#X msg 475 440 gui;
-#X obj 475 465 pdinfo;
-#X obj 475 490 sel 0;
 #X text 117 25 <- we start Pd with the -send "init etc." flag. This
 will automatically start the tests and allow us to send a comma-separated
 list of messages which will be evaluated by Pd without a target. This
@@ -34,57 +19,46 @@ is handy for some binbuf tests.;
 #X text 536 150 <- we have to escape the arg;
 #X text 556 190 escape it in a comment.;
 #X text 556 170 in bash but we can't;
-#X obj 521 374 spigot;
-#X obj 537 440 route 1;
-#X obj 537 495 print success;
-#X obj 145 358 rtest unpost_sanity;
-#X obj 145 414 rtest unpost_error;
-#X obj 145 465 rtest unpost_print;
-#X obj 145 516 rtest unpost_long_message;
-#X obj 145 569 rtest makefilename_double_percent;
-#X obj 145 620 rtest makefilename_code_coverage;
+#X obj 145 388 rtest unpost_sanity;
+#X obj 145 444 rtest unpost_error;
+#X obj 145 495 rtest unpost_print;
+#X obj 145 546 rtest unpost_long_message;
+#X obj 145 599 rtest makefilename_double_percent;
+#X obj 145 650 rtest makefilename_code_coverage;
 #N canvas 461 242 450 323 (subpatch) 0;
-#X restore 148 1105 pd;
-#X obj 145 671 rtest makefilename_default;
-#X obj 145 722 rtest makefilename_default_bang;
-#X obj 145 773 rtest makefilename_float;
-#X obj 145 824 rtest makefilename_symbol;
-#X obj 145 875 rtest makefilename_bang;
-#X obj 145 926 rtest drawtext-typecheck;
-#X connect 0 0 1 0;
-#X connect 1 0 7 0;
-#X connect 1 1 29 0;
-#X connect 3 0 29 1;
-#X connect 4 0 16 0;
-#X connect 5 0 9 0;
-#X connect 6 0 19 0;
-#X connect 7 0 20 0;
-#X connect 7 1 30 0;
-#X connect 9 0 10 0;
-#X connect 9 1 16 0;
-#X connect 9 2 6 0;
-#X connect 10 0 11 0;
-#X connect 11 0 12 0;
-#X connect 12 0 15 0;
-#X connect 14 0 8 0;
-#X connect 15 0 13 0;
+#X restore 148 1315 pd;
+#X obj 145 701 rtest makefilename_default;
+#X obj 145 752 rtest makefilename_default_bang;
+#X obj 145 803 rtest makefilename_float;
+#X obj 145 854 rtest makefilename_symbol;
+#X obj 145 905 rtest makefilename_bang;
+#X obj 145 956 rtest drawtext-typecheck;
+#X obj 465 308 utils/print-result;
+#X obj 56 151 utils/quit-if-nogui;
+#X obj 145 1011 rtest list_cat_clear;
+#X obj 145 1066 rtest list_cat_anything;
+#X obj 145 1121 rtest list_cat_reentrancy;
+#X connect 0 0 28 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 8 0;
+#X connect 4 0 29 0;
+#X connect 4 1 5 0;
+#X connect 4 2 3 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 15 0;
+#X connect 15 0 16 0;
 #X connect 16 0 17 0;
 #X connect 17 0 18 0;
-#X connect 18 0 32 0;
-#X connect 20 0 21 0;
-#X connect 21 0 22 0;
-#X connect 22 0 14 0;
-#X connect 29 0 7 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 27 0;
+#X connect 27 0 30 0;
 #X connect 30 0 31 0;
-#X connect 30 1 2 0;
-#X connect 32 0 33 0;
-#X connect 33 0 34 0;
-#X connect 34 0 35 0;
-#X connect 35 0 36 0;
-#X connect 36 0 37 0;
-#X connect 37 0 39 0;
-#X connect 39 0 40 0;
-#X connect 40 0 41 0;
-#X connect 41 0 42 0;
-#X connect 42 0 43 0;
-#X connect 43 0 44 0;
+#X connect 31 0 32 0;
diff --git a/scripts/regression_tests/list_cat_anything.pd b/scripts/regression_tests/list_cat_anything.pd
new file mode 100644
index 0000000000000000000000000000000000000000..69297943acf70daed6b4977e3d9419fc7ab56221
--- /dev/null
+++ b/scripts/regression_tests/list_cat_anything.pd
@@ -0,0 +1,32 @@
+#N canvas 3 60 576 493 12;
+#X obj 100 33 inlet;
+#X obj 175 121 list cat;
+#X obj 100 154 list append;
+#X msg 21 34 bang;
+#X msg 248 293 0;
+#X obj 100 367 outlet;
+#X msg 100 288 1;
+#X msg 251 92 clear;
+#X obj 100 62 trigger bang bang bang;
+#X msg 175 92 a \, b;
+#X obj 100 183 list length;
+#X obj 100 212 select 2;
+#X obj 153 241 bang;
+#X obj 100 322 list append sending two consecutive anything messages
+should output a list with two elements;
+#X connect 0 0 8 0;
+#X connect 1 0 2 1;
+#X connect 2 0 10 0;
+#X connect 3 0 8 0;
+#X connect 4 0 13 0;
+#X connect 6 0 13 0;
+#X connect 7 0 1 1;
+#X connect 8 0 2 0;
+#X connect 8 1 9 0;
+#X connect 8 2 7 0;
+#X connect 9 0 1 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 11 1 12 0;
+#X connect 12 0 4 0;
+#X connect 13 0 5 0;
diff --git a/scripts/regression_tests/list_cat_clear.pd b/scripts/regression_tests/list_cat_clear.pd
new file mode 100644
index 0000000000000000000000000000000000000000..6f613db8d9a597df5653d519a71aec7f770f376b
--- /dev/null
+++ b/scripts/regression_tests/list_cat_clear.pd
@@ -0,0 +1,44 @@
+#N canvas 3 60 576 493 12;
+#X obj 100 33 inlet;
+#X msg 175 111 a \, b \, c;
+#X msg 241 111 clear \, clear \, clear;
+#X obj 175 140 list cat;
+#X obj 100 173 list append;
+#X msg 21 34 bang;
+#X obj 100 202 list trim;
+#X obj 100 231 route a;
+#X obj 100 260 route b;
+#X obj 100 289 route c;
+#X obj 248 323 bang;
+#X msg 248 352 0;
+#X obj 100 318 route bang;
+#X obj 100 62 trigger bang bang bang bang;
+#X msg 285 87 d \, e \, f;
+#X obj 100 426 outlet;
+#X msg 100 347 1;
+#X obj 100 381 list append clear message to right inlet should reset
+the list properly;
+#X connect 0 0 13 0;
+#X connect 1 0 3 0;
+#X connect 2 0 3 1;
+#X connect 3 0 4 1;
+#X connect 4 0 6 0;
+#X connect 5 0 13 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 7 1 10 0;
+#X connect 8 0 9 0;
+#X connect 8 1 10 0;
+#X connect 9 0 12 0;
+#X connect 9 1 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 17 0;
+#X connect 12 0 16 0;
+#X connect 12 1 10 0;
+#X connect 13 0 4 0;
+#X connect 13 1 1 0;
+#X connect 13 2 2 0;
+#X connect 13 3 14 0;
+#X connect 14 0 3 0;
+#X connect 16 0 17 0;
+#X connect 17 0 15 0;
diff --git a/scripts/regression_tests/list_cat_reentrancy.pd b/scripts/regression_tests/list_cat_reentrancy.pd
new file mode 100644
index 0000000000000000000000000000000000000000..cecbe52512edbe32983a1dee7b528eac07b207eb
--- /dev/null
+++ b/scripts/regression_tests/list_cat_reentrancy.pd
@@ -0,0 +1,133 @@
+#N canvas 3 60 843 633 12;
+#X msg 126 72 bang;
+#X obj 126 101 t b b;
+#X msg 159 139 0;
+#X msg 221 139 clear;
+#X obj 127 169 f;
+#X obj 187 169 + 1;
+#X obj 127 198 t a a;
+#X obj 30 120 bang;
+#X obj 127 281 list cat;
+#X obj 127 305 t a a;
+#X obj 213 341 list;
+#X obj 213 282 bang;
+#X obj 127 228 moses 4;
+#X msg 406 72 bang;
+#X obj 406 101 t b b;
+#X msg 439 139 0;
+#X msg 501 139 clear;
+#X obj 407 169 f;
+#X obj 467 169 + 1;
+#X obj 407 198 t a a;
+#X obj 310 120 bang;
+#X obj 407 281 list cat;
+#X obj 407 305 t a a;
+#X obj 493 341 list;
+#X obj 493 282 bang;
+#X obj 407 228 moses 4;
+#X obj 213 365 list trim;
+#X obj 213 394 route 0;
+#X obj 213 418 route 1;
+#X obj 213 442 route 2;
+#X obj 213 466 route 3;
+#X obj 126 7 inlet;
+#X obj 126 36 trigger bang bang;
+#X obj 493 365 list trim;
+#X obj 493 394 route a;
+#X obj 493 418 route b;
+#X obj 493 442 route c;
+#X obj 493 466 route d;
+#N canvas 0 0 450 300 anything 0;
+#X obj 92 30 inlet;
+#X obj 92 59 + 97;
+#X obj 92 88 makefilename %c;
+#X msg 92 117 \$1;
+#X obj 92 146 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X restore 407 253 pd anything;
+#X obj 213 490 route bang;
+#X obj 493 490 route bang;
+#X msg 213 519 1;
+#X msg 493 519 1;
+#X obj 346 475 bang;
+#X msg 346 504 0;
+#X obj 612 478 bang;
+#X msg 612 507 0;
+#X obj 23 548 list append recursive list concatenation should produce
+correct element order;
+#X obj 433 548 list append recursive anything concatenation should
+produce correct element order;
+#X obj 23 593 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 4 0;
+#X connect 1 1 2 0;
+#X connect 1 1 3 0;
+#X connect 2 0 4 1;
+#X connect 3 0 8 1;
+#X connect 4 0 6 0;
+#X connect 5 0 4 1;
+#X connect 6 0 12 0;
+#X connect 6 1 5 0;
+#X connect 7 0 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 7 0;
+#X connect 9 1 10 1;
+#X connect 10 0 26 0;
+#X connect 11 0 10 0;
+#X connect 12 0 8 0;
+#X connect 12 1 11 0;
+#X connect 13 0 14 0;
+#X connect 14 0 17 0;
+#X connect 14 1 15 0;
+#X connect 14 1 16 0;
+#X connect 15 0 17 1;
+#X connect 16 0 21 1;
+#X connect 17 0 19 0;
+#X connect 18 0 17 1;
+#X connect 19 0 25 0;
+#X connect 19 1 18 0;
+#X connect 20 0 17 0;
+#X connect 21 0 22 0;
+#X connect 22 0 20 0;
+#X connect 22 1 23 1;
+#X connect 23 0 33 0;
+#X connect 24 0 23 0;
+#X connect 25 0 38 0;
+#X connect 25 1 24 0;
+#X connect 26 0 27 0;
+#X connect 27 0 28 0;
+#X connect 27 1 43 0;
+#X connect 28 0 29 0;
+#X connect 28 1 43 0;
+#X connect 29 0 30 0;
+#X connect 29 1 43 0;
+#X connect 30 0 39 0;
+#X connect 30 1 43 0;
+#X connect 31 0 32 0;
+#X connect 32 0 0 0;
+#X connect 32 1 13 0;
+#X connect 33 0 34 0;
+#X connect 34 0 35 0;
+#X connect 34 1 45 0;
+#X connect 35 0 36 0;
+#X connect 35 1 45 0;
+#X connect 36 0 37 0;
+#X connect 36 1 45 0;
+#X connect 37 0 40 0;
+#X connect 37 1 45 0;
+#X connect 38 0 21 0;
+#X connect 39 0 41 0;
+#X connect 39 1 43 0;
+#X connect 40 0 42 0;
+#X connect 40 1 45 0;
+#X connect 41 0 47 0;
+#X connect 42 0 48 0;
+#X connect 43 0 44 0;
+#X connect 44 0 47 0;
+#X connect 45 0 46 0;
+#X connect 46 0 48 0;
+#X connect 47 0 49 0;
+#X connect 48 0 49 0;
diff --git a/scripts/regression_tests/utils/creation-test.pd b/scripts/utils/creation-test.pd
similarity index 100%
rename from scripts/regression_tests/utils/creation-test.pd
rename to scripts/utils/creation-test.pd
diff --git a/scripts/utils/print-result.pd b/scripts/utils/print-result.pd
new file mode 100644
index 0000000000000000000000000000000000000000..261578f43052bf984b7505d9c590f28672237417
--- /dev/null
+++ b/scripts/utils/print-result.pd
@@ -0,0 +1,21 @@
+#N canvas 387 146 450 300 12;
+#X obj 105 48 route 0;
+#X obj 183 193 print failure;
+#X obj 190 58 tgl 28 0 empty empty Print_All_Results 31 11 0 12 -262144
+-1 -1 0 1;
+#X obj 105 133 t b a;
+#X obj 151 96 spigot;
+#X obj 137 163 route 1;
+#X obj 137 218 print success;
+#X obj 105 11 inlet;
+#X obj 105 252 quit-if-nogui;
+#X connect 0 0 3 0;
+#X connect 0 1 4 0;
+#X connect 2 0 4 1;
+#X connect 3 0 8 0;
+#X connect 3 1 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 5 1 1 0;
+#X connect 7 0 0 0;
+#X coords 0 -1 1 1 162 60 1 186 32;
diff --git a/scripts/utils/quit-if-nogui.pd b/scripts/utils/quit-if-nogui.pd
new file mode 100644
index 0000000000000000000000000000000000000000..a00e808251c986b08b7344878fe8725be925f3e1
--- /dev/null
+++ b/scripts/utils/quit-if-nogui.pd
@@ -0,0 +1,14 @@
+#N canvas 461 242 450 300 12;
+#X obj 119 31 inlet;
+#X obj 119 60 bang;
+#X msg 119 88 gui;
+#X obj 119 113 pdinfo;
+#X obj 119 138 sel 0;
+#X obj 119 188 s pd;
+#X msg 119 163 quit;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 6 0 5 0;