diff --git a/lib/modules/Tools.pmod/Standalone.pmod/test_pike.pike b/lib/modules/Tools.pmod/Standalone.pmod/test_pike.pike
index faa05d64125f1ae64efe899355b7ac1cea92a234..d22afb82a5675970a4f99eac991584992d22d286 100755
--- a/lib/modules/Tools.pmod/Standalone.pmod/test_pike.pike
+++ b/lib/modules/Tools.pmod/Standalone.pmod/test_pike.pike
@@ -5,6 +5,7 @@ constant description = "Executes tests according to testsuite files.";
 
 constant log_msg = Tools.Testsuite.log_msg;
 constant log_msg_cont = Tools.Testsuite.log_msg_cont;
+constant log_msg_result = Tools.Testsuite.log_msg_result;
 constant log_status = Tools.Testsuite.log_status;
 
 protected enum exit_codes {
@@ -1153,7 +1154,7 @@ int main(int argc, array(string) argv)
 	      watchdog_show_last_test();
 	      log_msg(fname + " failed.\n");
 	      print_code(test);
-	      log_msg("o->a(): %O\n",a);
+	      log_msg_result("o->a(): %O\n",a);
 	      errors++;
 	    }
 	    else {
@@ -1167,7 +1168,7 @@ int main(int argc, array(string) argv)
 	      watchdog_show_last_test();
 	      log_msg(fname + " failed.\n");
 	      print_code(test);
-	      log_msg("o->a(): %O\n",a);
+	      log_msg_result("o->a(): %O\n",a);
 	      errors++;
 	    }
 	    else {
@@ -1180,7 +1181,7 @@ int main(int argc, array(string) argv)
 	      watchdog_show_last_test();
 	      log_msg(fname + " failed.\n");
 	      print_code(test);
-	      log_msg("o->a(): %O\n", a);
+	      log_msg_result("o->a(): %O\n", a);
 	    } else {
 	      pushed_warnings[a]++;
 	    }
@@ -1191,7 +1192,7 @@ int main(int argc, array(string) argv)
 	      watchdog_show_last_test();
 	      log_msg(fname + " failed.\n");
 	      print_code(test);
-	      log_msg("o->a(): %O\n", a);
+	      log_msg_result("o->a(): %O\n", a);
 	    } else if (pushed_warnings[a]) {
 	      if (!--pushed_warnings[a]) {
 		m_delete(pushed_warnings, a);
@@ -1200,7 +1201,7 @@ int main(int argc, array(string) argv)
 	      watchdog_show_last_test();
 	      log_msg(fname + " failed.\n");
 	      print_code(test);
-	      log_msg("o->a(): %O not pushed!\n", a);
+	      log_msg_result("o->a(): %O not pushed!\n", a);
 	    }
 	    break;
 		
@@ -1216,7 +1217,7 @@ int main(int argc, array(string) argv)
 	      watchdog_show_last_test();
 	      log_msg(fname + " failed to return proper results.\n");
 	      print_code(test);
-	      log_msg("o->a(): %O\n",a);
+	      log_msg_result("o->a(): %O\n",a);
 	      errors++;
 	    }
 	    else {
@@ -1240,8 +1241,8 @@ int main(int argc, array(string) argv)
 	      watchdog_show_last_test();
 	      log_msg(fname + " failed.\n");
 	      print_code(test);
-	      log_msg("o->a(): %O\n"
-		      "o->b(): %O\n", a, b);
+	      log_msg_result("o->a(): %O\n"
+                             "o->b(): %O\n", a, b);
 	      errors++;
 	      if (stringp(a) && stringp(b) && (sizeof(a) == sizeof(b)) &&
 		  (sizeof(a) > 20)) {
@@ -1268,8 +1269,8 @@ int main(int argc, array(string) argv)
 	      watchdog_show_last_test();
 	      log_msg(fname + " failed.\n");
 	      print_code(test);
-	      log_msg("o->a(): %O\n"
-		      "o->b(): %O\n", a, b);
+	      log_msg_result("o->a(): %O\n"
+                             "o->b(): %O\n", a, b);
 	      errors++;
 	      if (stringp(a) && stringp(b) && (sizeof(a) == sizeof(b)) &&
 		  (sizeof(a) > 20)) {
diff --git a/lib/modules/Tools.pmod/Testsuite.pmod b/lib/modules/Tools.pmod/Testsuite.pmod
index 19ab089f1dc8b9b46a219d671ff5aec0e286b1fb..535f2edbd1f65e85075f00a5cb3489182f532ba1 100644
--- a/lib/modules/Tools.pmod/Testsuite.pmod
+++ b/lib/modules/Tools.pmod/Testsuite.pmod
@@ -85,6 +85,24 @@ protected void unlocked_log_msg_cont (string msg)
   }
 }
 
+// Cut strings to below 4K
+void log_msg_result (string msg, mixed ... args)
+{
+  array a = msg/"%";
+  foreach(a; int pos; string part)
+  {
+    if(pos==0) continue;
+    if(has_prefix(part, "O") && pos-1<=sizeof(args) &&
+       stringp(args[pos-1]) && sizeof(args[pos-1])>4000)
+    {
+      part[0] = 's';
+      a[pos] = part;
+      args[pos-1] = sprintf("%O...", args[pos-1][..4000-1]);
+    }
+  }
+  log_msg(a*"%", @args);
+}
+
 void log_msg (string msg, mixed... args)
 //! Logs a testsuite message to stderr. The message is shown
 //! regardless of the verbosity level. If the previous message was