diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update
index 23569485d8..f5c54bb4e1 100644
--- a/libs/sofia-sip/.update
+++ b/libs/sofia-sip/.update
@@ -1 +1 @@
-Thu Feb 12 15:17:34 CST 2009
+Thu Feb 12 15:18:14 CST 2009
diff --git a/libs/sofia-sip/s2check/s2check.h b/libs/sofia-sip/s2check/s2check.h
index 772d09e94c..4197d58420 100644
--- a/libs/sofia-sip/s2check/s2check.h
+++ b/libs/sofia-sip/s2check/s2check.h
@@ -47,6 +47,8 @@ SOFIA_BEGIN_DECLS
 
 void s2_tcase_add_test(TCase *, TFun, char const *name);
 
+void s2_select_tests(char const *pattern);
+
 SOFIA_END_DECLS
 
 #endif /* S2CHECK_H */
diff --git a/libs/sofia-sip/s2check/s2tcase.c b/libs/sofia-sip/s2check/s2tcase.c
index e743019762..285ec0278d 100644
--- a/libs/sofia-sip/s2check/s2tcase.c
+++ b/libs/sofia-sip/s2check/s2tcase.c
@@ -30,6 +30,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
+#include <assert.h>
 
 #include <check.h>
 
@@ -79,7 +80,7 @@ void s2_tcase_add_test(TCase *tc, TFun tf, char const *name)
  */
 void s2_select_tests(char const *pattern)
 {
-  size_t i;
+  size_t i, n;
   char *cases, *s, **patterns;
 
   if (!pattern)
@@ -91,10 +92,22 @@ void s2_select_tests(char const *pattern)
   for (i = 2, s = cases; (s = strchr(s, ',')); s++)
     i++;
 
-  patterns = calloc(i, sizeof *patterns);
+  if (test_patterns != default_patterns) {
+    patterns = (char **)test_patterns;
+    for (n = 0; patterns[n]; n++)
+      ;
+    patterns = realloc(patterns, (n + i) * (sizeof *patterns));
+  }
+  else {
+    n = 0;
+    patterns = malloc(i * (sizeof *patterns));
+  }
+
+  assert(patterns);
+  memset(&patterns[n], 0, i * (sizeof *patterns));
 
   /* Split by commas */
-  for (i = 0, s = cases;; i++) {
+  for (i = n, s = cases;; i++) {
     patterns[i] = s;
     if (s == NULL)
       break;