diff --git a/cachegrind/docs/manual.html b/cachegrind/docs/manual.html
index ab638af..c441db1 100644
--- a/cachegrind/docs/manual.html
+++ b/cachegrind/docs/manual.html
@@ -565,9 +565,10 @@
       <p>Enable/disable tracing of thread scheduling events.</li><br>
       <p>
 
-  <li><code>--trace-pthread=no</code> [default]<br>
-      <code>--trace-pthread=yes</code>
-      <p>Enable/disable tracing of pthread-related events.</li><br>
+  <li><code>--trace-pthread=none</code> [default]<br>
+      <code>--trace-pthread=some</code> <br>
+      <code>--trace-pthread=all</code>
+      <p>Specifies amount of trace detail for pthread-related events.</li><br>
       <p>
 
   <li><code>--trace-symtab=no</code> [default]<br>
diff --git a/coregrind/arch/x86-linux/vg_libpthread.c b/coregrind/arch/x86-linux/vg_libpthread.c
index ab39745..11f5200 100644
--- a/coregrind/arch/x86-linux/vg_libpthread.c
+++ b/coregrind/arch/x86-linux/vg_libpthread.c
@@ -27,29 +27,36 @@
 #include <unistd.h>
 #include <string.h>
 
-/* ---------------------------------------------------------------------
-   Mini-configuration.
-   ------------------------------------------------------------------ */
-
-/* Set to 1 to see IGNORED debugging messages. */
-static int show_IGNORED = 1;
-
 
 /* ---------------------------------------------------------------------
    Helpers.  We have to be pretty self-sufficient.
    ------------------------------------------------------------------ */
 
+/* Extract from Valgrind the value of VG_(clo_trace_pthread_level).
+   Returns 0 (none) if not running on Valgrind. */
+static
+int get_pt_trace_level ( void )
+{
+   int res;
+   VALGRIND_MAGIC_SEQUENCE(res, 0 /* default */,
+                           VG_USERREQ__GET_PTHREAD_TRACE_LEVEL,
+                           0, 0, 0, 0);
+   return res;
+}
+
+
+
 static
 void myexit ( int arg )
 {
-  int __res;
+   int __res;
    __asm__ volatile ("movl %%ecx, %%ebx ; int $0x80"
                      : "=a" (__res)
                      : "0" (__NR_exit),
                        "c" (arg) );
-  /* We don't bother to mention the fact that this asm trashes %ebx,
-     since it won't return.  If you ever do let it return ... fix
-     this! */
+   /* We don't bother to mention the fact that this asm trashes %ebx,
+      since it won't return.  If you ever do let it return ... fix
+      this! */
 }
 
 
@@ -95,12 +102,13 @@
 
 static void ignored ( char* msg )
 {
-   char* ig = "vg_libpthread.so: IGNORED call to: ";
-   if (!show_IGNORED) return;
-   write(2, ig, strlen(ig));
-   write(2, msg, strlen(msg));
-   ig = "\n";
-   write(2, ig, strlen(ig));
+   if (get_pt_trace_level() >= 1) {
+      char* ig = "vg_libpthread.so: IGNORED call to: ";
+      write(2, ig, strlen(ig));
+      write(2, msg, strlen(msg));
+      ig = "\n";
+      write(2, ig, strlen(ig));
+   }
 }
 
 
@@ -190,8 +198,6 @@
                        const  pthread_mutexattr_t *mutexattr)
 {
    int res;
-   //  char* str = "pthread_mutex_init\n";
-   //  write(2, str, strlen(str));
    ensure_valgrind("pthread_mutex_init");
    VALGRIND_MAGIC_SEQUENCE(res, 0 /* default */,
                            VG_USERREQ__PTHREAD_MUTEX_INIT,
@@ -214,7 +220,8 @@
 int pthread_mutex_lock(pthread_mutex_t *mutex)
 {
    int res;
-   if (!(RUNNING_ON_VALGRIND)) {
+   static int moans = 5;
+   if (!(RUNNING_ON_VALGRIND) && moans-- > 0) {
       char* str = "pthread_mutex_lock-NOT-INSIDE-VALGRIND\n";
       write(2, str, strlen(str));
       return 0;
@@ -229,7 +236,8 @@
 int pthread_mutex_unlock(pthread_mutex_t *mutex)
 {
    int res;
-   if (!(RUNNING_ON_VALGRIND)) {
+   static int moans = 5;
+   if (!(RUNNING_ON_VALGRIND) && moans-- > 0) {
       char* str = "pthread_mutex_unlock-NOT-INSIDE-VALGRIND\n";
       write(2, str, strlen(str));
       return 0;
@@ -256,7 +264,8 @@
 int pthread_mutex_destroy(pthread_mutex_t *mutex)
 {
    int res;
-   if (!(RUNNING_ON_VALGRIND)) {
+   static int moans = 5;
+   if (!(RUNNING_ON_VALGRIND) && moans-- > 0) {
       char* str = "pthread_mutex_destroy-NOT-INSIDE-VALGRIND\n";
       write(2, str, strlen(str));
       return 0;
@@ -335,9 +344,7 @@
               const struct sigaction *act,  
               struct  sigaction *oldact)
 {
-  //  char* str = "sigaction\n";
-  //  write(2, str, strlen(str));
-  return __libc_sigaction(signum, act, oldact);
+   return __libc_sigaction(signum, act, oldact);
 }
 
 
@@ -349,9 +356,7 @@
              const  struct  sockaddr  *serv_addr, 
              socklen_t addrlen)
 {
-  //  char* str = "connect\n";
-  //  write(2, str, strlen(str));
-  return __libc_connect(sockfd, serv_addr, addrlen);
+   return __libc_connect(sockfd, serv_addr, addrlen);
 }
 
 
@@ -359,9 +364,7 @@
 int __libc_fcntl(int fd, int cmd, long arg);
 int fcntl(int fd, int cmd, long arg)
 {
-  //  char* str = "fcntl\n";
-  //  write(2, str, strlen(str));
-  return __libc_fcntl(fd, cmd, arg);
+   return __libc_fcntl(fd, cmd, arg);
 }
 
 
@@ -369,9 +372,7 @@
 ssize_t __libc_write(int fd, const void *buf, size_t count);
 ssize_t write(int fd, const void *buf, size_t count)
 {
-  //  char* str = "write\n";
-  //  write(2, str, strlen(str));
-  return __libc_write(fd, buf, count);
+   return __libc_write(fd, buf, count);
 }
 
 
@@ -379,9 +380,7 @@
 ssize_t __libc_read(int fd, void *buf, size_t count);
 ssize_t read(int fd, void *buf, size_t count)
 {
-  //  char* str = "read\n";
-  //  write(2, str, strlen(str));
-  return __libc_read(fd, buf, count);
+   return __libc_read(fd, buf, count);
 }
 
 
@@ -389,9 +388,7 @@
 int __libc_open(const char *pathname, int flags);
 int open(const char *pathname, int flags)
 {
-  //  char* str = "open\n";
-  //  write(2, str, strlen(str));
-  return __libc_open(pathname, flags);
+   return __libc_open(pathname, flags);
 }
 
 
@@ -399,9 +396,7 @@
 int __libc_close(int fd);
 int close(int fd)
 {
-  //  char* str = "open\n";
-  //  write(2, str, strlen(str));
-  return __libc_close(fd);
+   return __libc_close(fd);
 }
 
 
@@ -409,9 +404,7 @@
 int __libc_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
 int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
 {
-  //  char* str = "accept\n";
-  //  write(2, str, strlen(str));
-  return __libc_accept(s, addr, addrlen);
+   return __libc_accept(s, addr, addrlen);
 }
 
 
@@ -419,9 +412,7 @@
 pid_t __libc_fork(void);
 pid_t fork(void)
 {
-  //  char* str = "fork\n";
-  //  write(2, str, strlen(str));
-  return __libc_fork();
+   return __libc_fork();
 }
 
 
@@ -429,9 +420,7 @@
 pid_t __libc_waitpid(pid_t pid, int *status, int options);
 pid_t waitpid(pid_t pid, int *status, int options)
 {
-  //  char* str = "waitpid\n";
-  //  write(2, str, strlen(str));
-  return __libc_waitpid(pid, status, options);
+   return __libc_waitpid(pid, status, options);
 }
 
 
@@ -446,14 +435,14 @@
 int __libc_fsync(int fd);
 int fsync(int fd)
 {
-  return __libc_fsync(fd);
+   return __libc_fsync(fd);
 }
 
 extern
 off_t __libc_lseek(int fildes, off_t offset, int whence);
 off_t lseek(int fildes, off_t offset, int whence)
 {
-  return __libc_lseek(fildes, offset, whence);
+   return __libc_lseek(fildes, offset, whence);
 }
 
 extern  
@@ -470,6 +459,7 @@
    return __libc_send(s, msg, len, flags);
 }
 
+
 /*--------------------------------------------------*/
 
 /* I've no idea what these are, but they get called quite a lot.
@@ -666,7 +656,7 @@
       /* fprintf(stderr, "MY_SELECT: nanosleep\n"); */
       /* nanosleep and go round again */
       nanosleep_interval.tv_sec = 0;
-      nanosleep_interval.tv_nsec = 20 * 1000 * 1000; /* 20 milliseconds */
+      nanosleep_interval.tv_nsec = 40 * 1000 * 1000; /* 40 milliseconds */
       /* It's critical here that valgrind's nanosleep implementation
          is nonblocking. */
       (void)my_do_syscall2(__NR_nanosleep, 
diff --git a/coregrind/docs/manual.html b/coregrind/docs/manual.html
index ab638af..c441db1 100644
--- a/coregrind/docs/manual.html
+++ b/coregrind/docs/manual.html
@@ -565,9 +565,10 @@
       <p>Enable/disable tracing of thread scheduling events.</li><br>
       <p>
 
-  <li><code>--trace-pthread=no</code> [default]<br>
-      <code>--trace-pthread=yes</code>
-      <p>Enable/disable tracing of pthread-related events.</li><br>
+  <li><code>--trace-pthread=none</code> [default]<br>
+      <code>--trace-pthread=some</code> <br>
+      <code>--trace-pthread=all</code>
+      <p>Specifies amount of trace detail for pthread-related events.</li><br>
       <p>
 
   <li><code>--trace-symtab=no</code> [default]<br>
diff --git a/coregrind/valgrind.in b/coregrind/valgrind.in
index ea7d757..40bb6c9 100755
--- a/coregrind/valgrind.in
+++ b/coregrind/valgrind.in
@@ -87,8 +87,9 @@
     --trace-malloc=no)      vgopts="$vgopts $arg"; shift;;
     --trace-sched=yes)      vgopts="$vgopts $arg"; shift;;
     --trace-sched=no)       vgopts="$vgopts $arg"; shift;;
-    --trace-pthread=yes)    vgopts="$vgopts $arg"; shift;;
-    --trace-pthread=no)     vgopts="$vgopts $arg"; shift;;
+    --trace-pthread=none)   vgopts="$vgopts $arg"; shift;;
+    --trace-pthread=some)   vgopts="$vgopts $arg"; shift;;
+    --trace-pthread=all)    vgopts="$vgopts $arg"; shift;;
     --stop-after=*)         vgopts="$vgopts $arg"; shift;;
     --dump-error=*)         vgopts="$vgopts $arg"; shift;;
     -*)                     dousage=1; break;;
@@ -148,7 +149,7 @@
    echo "    --trace-symtab=no|yes     show symbol table details? [no]"
    echo "    --trace-malloc=no|yes     show client malloc details? [no]"
    echo "    --trace-sched=no|yes      show thread scheduler details? [no]"
-   echo "    --trace-pthread=no|yes    show pthread event details? [no]"
+   echo "    --trace-pthread=none|some|all  show pthread event details? [no]"
    echo "    --stop-after=<number>     switch to real CPU after executing"
    echo "                              <number> basic blocks [infinity]"
    echo "    --dump-error=<number>     show translation for basic block"
diff --git a/coregrind/vg_include.h b/coregrind/vg_include.h
index 1fef7da..cd831c8 100644
--- a/coregrind/vg_include.h
+++ b/coregrind/vg_include.h
@@ -241,8 +241,9 @@
 extern Bool  VG_(clo_trace_malloc);
 /* DEBUG: print thread scheduling events?  default: NO */
 extern Bool  VG_(clo_trace_sched);
-/* DEBUG: print pthread (mutex etc) events?  default: NO */
-extern Bool  VG_(clo_trace_pthread);
+/* DEBUG: print pthread (mutex etc) events?  default: 0 (none), 1
+   (some), 2 (all) */
+extern Int   VG_(clo_trace_pthread_level);
 /* Stop after this many basic blocks.  default: Infinity. */
 extern ULong VG_(clo_stop_after);
 /* Display gory details for the k'th most popular error.  default:
@@ -405,6 +406,9 @@
 #define VG_USERREQ__PTHREAD_MUTEX_DESTROY   0x3007
 #define VG_USERREQ__PTHREAD_CANCEL          0x3008
 
+/* Cosmetic ... */
+#define VG_USERREQ__GET_PTHREAD_TRACE_LEVEL 0x3101
+
 /* 
 In vg_constants.h:
 #define VG_USERREQ__SIGNAL_RETURNS          0x4001
diff --git a/coregrind/vg_libpthread.c b/coregrind/vg_libpthread.c
index ab39745..11f5200 100644
--- a/coregrind/vg_libpthread.c
+++ b/coregrind/vg_libpthread.c
@@ -27,29 +27,36 @@
 #include <unistd.h>
 #include <string.h>
 
-/* ---------------------------------------------------------------------
-   Mini-configuration.
-   ------------------------------------------------------------------ */
-
-/* Set to 1 to see IGNORED debugging messages. */
-static int show_IGNORED = 1;
-
 
 /* ---------------------------------------------------------------------
    Helpers.  We have to be pretty self-sufficient.
    ------------------------------------------------------------------ */
 
+/* Extract from Valgrind the value of VG_(clo_trace_pthread_level).
+   Returns 0 (none) if not running on Valgrind. */
+static
+int get_pt_trace_level ( void )
+{
+   int res;
+   VALGRIND_MAGIC_SEQUENCE(res, 0 /* default */,
+                           VG_USERREQ__GET_PTHREAD_TRACE_LEVEL,
+                           0, 0, 0, 0);
+   return res;
+}
+
+
+
 static
 void myexit ( int arg )
 {
-  int __res;
+   int __res;
    __asm__ volatile ("movl %%ecx, %%ebx ; int $0x80"
                      : "=a" (__res)
                      : "0" (__NR_exit),
                        "c" (arg) );
-  /* We don't bother to mention the fact that this asm trashes %ebx,
-     since it won't return.  If you ever do let it return ... fix
-     this! */
+   /* We don't bother to mention the fact that this asm trashes %ebx,
+      since it won't return.  If you ever do let it return ... fix
+      this! */
 }
 
 
@@ -95,12 +102,13 @@
 
 static void ignored ( char* msg )
 {
-   char* ig = "vg_libpthread.so: IGNORED call to: ";
-   if (!show_IGNORED) return;
-   write(2, ig, strlen(ig));
-   write(2, msg, strlen(msg));
-   ig = "\n";
-   write(2, ig, strlen(ig));
+   if (get_pt_trace_level() >= 1) {
+      char* ig = "vg_libpthread.so: IGNORED call to: ";
+      write(2, ig, strlen(ig));
+      write(2, msg, strlen(msg));
+      ig = "\n";
+      write(2, ig, strlen(ig));
+   }
 }
 
 
@@ -190,8 +198,6 @@
                        const  pthread_mutexattr_t *mutexattr)
 {
    int res;
-   //  char* str = "pthread_mutex_init\n";
-   //  write(2, str, strlen(str));
    ensure_valgrind("pthread_mutex_init");
    VALGRIND_MAGIC_SEQUENCE(res, 0 /* default */,
                            VG_USERREQ__PTHREAD_MUTEX_INIT,
@@ -214,7 +220,8 @@
 int pthread_mutex_lock(pthread_mutex_t *mutex)
 {
    int res;
-   if (!(RUNNING_ON_VALGRIND)) {
+   static int moans = 5;
+   if (!(RUNNING_ON_VALGRIND) && moans-- > 0) {
       char* str = "pthread_mutex_lock-NOT-INSIDE-VALGRIND\n";
       write(2, str, strlen(str));
       return 0;
@@ -229,7 +236,8 @@
 int pthread_mutex_unlock(pthread_mutex_t *mutex)
 {
    int res;
-   if (!(RUNNING_ON_VALGRIND)) {
+   static int moans = 5;
+   if (!(RUNNING_ON_VALGRIND) && moans-- > 0) {
       char* str = "pthread_mutex_unlock-NOT-INSIDE-VALGRIND\n";
       write(2, str, strlen(str));
       return 0;
@@ -256,7 +264,8 @@
 int pthread_mutex_destroy(pthread_mutex_t *mutex)
 {
    int res;
-   if (!(RUNNING_ON_VALGRIND)) {
+   static int moans = 5;
+   if (!(RUNNING_ON_VALGRIND) && moans-- > 0) {
       char* str = "pthread_mutex_destroy-NOT-INSIDE-VALGRIND\n";
       write(2, str, strlen(str));
       return 0;
@@ -335,9 +344,7 @@
               const struct sigaction *act,  
               struct  sigaction *oldact)
 {
-  //  char* str = "sigaction\n";
-  //  write(2, str, strlen(str));
-  return __libc_sigaction(signum, act, oldact);
+   return __libc_sigaction(signum, act, oldact);
 }
 
 
@@ -349,9 +356,7 @@
              const  struct  sockaddr  *serv_addr, 
              socklen_t addrlen)
 {
-  //  char* str = "connect\n";
-  //  write(2, str, strlen(str));
-  return __libc_connect(sockfd, serv_addr, addrlen);
+   return __libc_connect(sockfd, serv_addr, addrlen);
 }
 
 
@@ -359,9 +364,7 @@
 int __libc_fcntl(int fd, int cmd, long arg);
 int fcntl(int fd, int cmd, long arg)
 {
-  //  char* str = "fcntl\n";
-  //  write(2, str, strlen(str));
-  return __libc_fcntl(fd, cmd, arg);
+   return __libc_fcntl(fd, cmd, arg);
 }
 
 
@@ -369,9 +372,7 @@
 ssize_t __libc_write(int fd, const void *buf, size_t count);
 ssize_t write(int fd, const void *buf, size_t count)
 {
-  //  char* str = "write\n";
-  //  write(2, str, strlen(str));
-  return __libc_write(fd, buf, count);
+   return __libc_write(fd, buf, count);
 }
 
 
@@ -379,9 +380,7 @@
 ssize_t __libc_read(int fd, void *buf, size_t count);
 ssize_t read(int fd, void *buf, size_t count)
 {
-  //  char* str = "read\n";
-  //  write(2, str, strlen(str));
-  return __libc_read(fd, buf, count);
+   return __libc_read(fd, buf, count);
 }
 
 
@@ -389,9 +388,7 @@
 int __libc_open(const char *pathname, int flags);
 int open(const char *pathname, int flags)
 {
-  //  char* str = "open\n";
-  //  write(2, str, strlen(str));
-  return __libc_open(pathname, flags);
+   return __libc_open(pathname, flags);
 }
 
 
@@ -399,9 +396,7 @@
 int __libc_close(int fd);
 int close(int fd)
 {
-  //  char* str = "open\n";
-  //  write(2, str, strlen(str));
-  return __libc_close(fd);
+   return __libc_close(fd);
 }
 
 
@@ -409,9 +404,7 @@
 int __libc_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
 int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
 {
-  //  char* str = "accept\n";
-  //  write(2, str, strlen(str));
-  return __libc_accept(s, addr, addrlen);
+   return __libc_accept(s, addr, addrlen);
 }
 
 
@@ -419,9 +412,7 @@
 pid_t __libc_fork(void);
 pid_t fork(void)
 {
-  //  char* str = "fork\n";
-  //  write(2, str, strlen(str));
-  return __libc_fork();
+   return __libc_fork();
 }
 
 
@@ -429,9 +420,7 @@
 pid_t __libc_waitpid(pid_t pid, int *status, int options);
 pid_t waitpid(pid_t pid, int *status, int options)
 {
-  //  char* str = "waitpid\n";
-  //  write(2, str, strlen(str));
-  return __libc_waitpid(pid, status, options);
+   return __libc_waitpid(pid, status, options);
 }
 
 
@@ -446,14 +435,14 @@
 int __libc_fsync(int fd);
 int fsync(int fd)
 {
-  return __libc_fsync(fd);
+   return __libc_fsync(fd);
 }
 
 extern
 off_t __libc_lseek(int fildes, off_t offset, int whence);
 off_t lseek(int fildes, off_t offset, int whence)
 {
-  return __libc_lseek(fildes, offset, whence);
+   return __libc_lseek(fildes, offset, whence);
 }
 
 extern  
@@ -470,6 +459,7 @@
    return __libc_send(s, msg, len, flags);
 }
 
+
 /*--------------------------------------------------*/
 
 /* I've no idea what these are, but they get called quite a lot.
@@ -666,7 +656,7 @@
       /* fprintf(stderr, "MY_SELECT: nanosleep\n"); */
       /* nanosleep and go round again */
       nanosleep_interval.tv_sec = 0;
-      nanosleep_interval.tv_nsec = 20 * 1000 * 1000; /* 20 milliseconds */
+      nanosleep_interval.tv_nsec = 40 * 1000 * 1000; /* 40 milliseconds */
       /* It's critical here that valgrind's nanosleep implementation
          is nonblocking. */
       (void)my_do_syscall2(__NR_nanosleep, 
diff --git a/coregrind/vg_main.c b/coregrind/vg_main.c
index 7c5ac40..06b2e97 100644
--- a/coregrind/vg_main.c
+++ b/coregrind/vg_main.c
@@ -425,7 +425,7 @@
 Bool   VG_(clo_trace_symtab);
 Bool   VG_(clo_trace_malloc);
 Bool   VG_(clo_trace_sched);
-Bool   VG_(clo_trace_pthread);
+Int    VG_(clo_trace_pthread_level);
 ULong  VG_(clo_stop_after);
 Int    VG_(clo_dump_error);
 Int    VG_(clo_backtrace_size);
@@ -508,7 +508,7 @@
    VG_(clo_trace_symtab)     = False;
    VG_(clo_trace_malloc)     = False;
    VG_(clo_trace_sched)      = False;
-   VG_(clo_trace_pthread)    = False;
+   VG_(clo_trace_pthread_level) = 0;
    VG_(clo_stop_after)       = 1000000000000LL;
    VG_(clo_dump_error)       = 0;
    VG_(clo_backtrace_size)   = 4;
@@ -777,10 +777,12 @@
       else if (STREQ(argv[i], "--trace-sched=no"))
          VG_(clo_trace_sched) = False;
 
-      else if (STREQ(argv[i], "--trace-pthread=yes"))
-         VG_(clo_trace_pthread) = True;
-      else if (STREQ(argv[i], "--trace-pthread=no"))
-         VG_(clo_trace_pthread) = False;
+      else if (STREQ(argv[i], "--trace-pthread=none"))
+         VG_(clo_trace_pthread_level) = 0;
+      else if (STREQ(argv[i], "--trace-pthread=some"))
+         VG_(clo_trace_pthread_level) = 1;
+      else if (STREQ(argv[i], "--trace-pthread=all"))
+         VG_(clo_trace_pthread_level) = 2;
 
       else if (STREQN(13, argv[i], "--stop-after="))
          VG_(clo_stop_after) = VG_(atoll)(&argv[i][13]);
diff --git a/coregrind/vg_scheduler.c b/coregrind/vg_scheduler.c
index 33cb157..770fbd3 100644
--- a/coregrind/vg_scheduler.c
+++ b/coregrind/vg_scheduler.c
@@ -176,7 +176,7 @@
 static
 void print_sched_event ( ThreadId tid, Char* what )
 {
-   VG_(message)(Vg_DebugMsg, "SCHED[%d]: %s", tid, what );
+   VG_(message)(Vg_DebugMsg, "  SCHED[%d]: %s", tid, what );
 }
 
 
@@ -555,6 +555,8 @@
          SIMPLE_RETURN(tid);
       case VG_USERREQ__RUNNING_ON_VALGRIND:
          SIMPLE_RETURN(1);
+      case VG_USERREQ__GET_PTHREAD_TRACE_LEVEL:
+         SIMPLE_RETURN(VG_(clo_trace_pthread_level));
 
       default:
          /* Too hard; wimp out. */
@@ -1477,7 +1479,7 @@
    vg_mutexes[mid].owner = VG_INVALID_THREADID; /* irrelevant */
    mutex->__m_reserved = mid;
    mutex->__m_count = 1; /* initialised */
-   if (VG_(clo_trace_pthread)) {
+   if (VG_(clo_trace_pthread_level) >= 1) {
       VG_(sprintf)(msg_buf, "(initialise mutex) (%p) -> %d", 
                             mutex, mid );
       print_pthread_event(tid, msg_buf);
@@ -1497,7 +1499,7 @@
 
    initialise_mutex(tid, mutex);
 
-   if (VG_(clo_trace_pthread)) {
+   if (VG_(clo_trace_pthread_level) >= 1) {
       VG_(sprintf)(msg_buf, "pthread_mutex_init (%p) -> %d", 
                             mutex, mutex->__m_reserved );
       print_pthread_event(tid, msg_buf);
@@ -1541,7 +1543,7 @@
       return;
    }
 
-   if (VG_(clo_trace_pthread)) {
+   if (VG_(clo_trace_pthread_level) >= 2) {
       VG_(sprintf)(msg_buf, "pthread_mutex_lock   %d (%p)", 
                             mid, mutex );
       print_pthread_event(tid, msg_buf);
@@ -1562,9 +1564,9 @@
       vg_threads[tid].status = VgTs_WaitMX;
       vg_threads[tid].waited_on_mid = mid;
       /* No assignment to %EDX, since we're blocking. */
-      if (VG_(clo_trace_pthread)) {
-         VG_(sprintf)(msg_buf, "pthread_mutex_lock   %d (%p): BLOCK", 
-                               mid, mutex );
+      if (VG_(clo_trace_pthread_level) >= 1) {
+         VG_(sprintf)(msg_buf, "pthread_mutex_lock   %d: BLOCK", 
+                               mid );
          print_pthread_event(tid, msg_buf);
       }
    } else {
@@ -1597,7 +1599,7 @@
       return;
    }
 
-   if (VG_(clo_trace_pthread)) {
+   if (VG_(clo_trace_pthread_level) >= 2) {
       VG_(sprintf)(msg_buf, "pthread_mutex_unlock %d (%p)", 
                             mid, mutex );
       print_pthread_event(tid, msg_buf);
@@ -1633,7 +1635,7 @@
       vg_threads[i].status = VgTs_Runnable;
       vg_threads[i].m_edx = 0; /* pth_lock() success */
 
-      if (VG_(clo_trace_pthread)) {
+      if (VG_(clo_trace_pthread_level) >= 1) {
          VG_(sprintf)(msg_buf, "pthread_mutex_lock   %d: RESUME", 
                                mid );
          print_pthread_event(tid, msg_buf);
@@ -1664,7 +1666,7 @@
       return;
    }
 
-   if (VG_(clo_trace_pthread)) {
+   if (VG_(clo_trace_pthread_level) >= 1) {
       VG_(sprintf)(msg_buf, "pthread_mutex_destroy %d (%p)", 
                             mid, mutex );
       print_pthread_event(tid, msg_buf);
diff --git a/docs/manual.html b/docs/manual.html
index ab638af..c441db1 100644
--- a/docs/manual.html
+++ b/docs/manual.html
@@ -565,9 +565,10 @@
       <p>Enable/disable tracing of thread scheduling events.</li><br>
       <p>
 
-  <li><code>--trace-pthread=no</code> [default]<br>
-      <code>--trace-pthread=yes</code>
-      <p>Enable/disable tracing of pthread-related events.</li><br>
+  <li><code>--trace-pthread=none</code> [default]<br>
+      <code>--trace-pthread=some</code> <br>
+      <code>--trace-pthread=all</code>
+      <p>Specifies amount of trace detail for pthread-related events.</li><br>
       <p>
 
   <li><code>--trace-symtab=no</code> [default]<br>
diff --git a/memcheck/docs/manual.html b/memcheck/docs/manual.html
index ab638af..c441db1 100644
--- a/memcheck/docs/manual.html
+++ b/memcheck/docs/manual.html
@@ -565,9 +565,10 @@
       <p>Enable/disable tracing of thread scheduling events.</li><br>
       <p>
 
-  <li><code>--trace-pthread=no</code> [default]<br>
-      <code>--trace-pthread=yes</code>
-      <p>Enable/disable tracing of pthread-related events.</li><br>
+  <li><code>--trace-pthread=none</code> [default]<br>
+      <code>--trace-pthread=some</code> <br>
+      <code>--trace-pthread=all</code>
+      <p>Specifies amount of trace detail for pthread-related events.</li><br>
       <p>
 
   <li><code>--trace-symtab=no</code> [default]<br>
diff --git a/valgrind.in b/valgrind.in
index ea7d757..40bb6c9 100755
--- a/valgrind.in
+++ b/valgrind.in
@@ -87,8 +87,9 @@
     --trace-malloc=no)      vgopts="$vgopts $arg"; shift;;
     --trace-sched=yes)      vgopts="$vgopts $arg"; shift;;
     --trace-sched=no)       vgopts="$vgopts $arg"; shift;;
-    --trace-pthread=yes)    vgopts="$vgopts $arg"; shift;;
-    --trace-pthread=no)     vgopts="$vgopts $arg"; shift;;
+    --trace-pthread=none)   vgopts="$vgopts $arg"; shift;;
+    --trace-pthread=some)   vgopts="$vgopts $arg"; shift;;
+    --trace-pthread=all)    vgopts="$vgopts $arg"; shift;;
     --stop-after=*)         vgopts="$vgopts $arg"; shift;;
     --dump-error=*)         vgopts="$vgopts $arg"; shift;;
     -*)                     dousage=1; break;;
@@ -148,7 +149,7 @@
    echo "    --trace-symtab=no|yes     show symbol table details? [no]"
    echo "    --trace-malloc=no|yes     show client malloc details? [no]"
    echo "    --trace-sched=no|yes      show thread scheduler details? [no]"
-   echo "    --trace-pthread=no|yes    show pthread event details? [no]"
+   echo "    --trace-pthread=none|some|all  show pthread event details? [no]"
    echo "    --stop-after=<number>     switch to real CPU after executing"
    echo "                              <number> basic blocks [infinity]"
    echo "    --dump-error=<number>     show translation for basic block"
diff --git a/vg_include.h b/vg_include.h
index 1fef7da..cd831c8 100644
--- a/vg_include.h
+++ b/vg_include.h
@@ -241,8 +241,9 @@
 extern Bool  VG_(clo_trace_malloc);
 /* DEBUG: print thread scheduling events?  default: NO */
 extern Bool  VG_(clo_trace_sched);
-/* DEBUG: print pthread (mutex etc) events?  default: NO */
-extern Bool  VG_(clo_trace_pthread);
+/* DEBUG: print pthread (mutex etc) events?  default: 0 (none), 1
+   (some), 2 (all) */
+extern Int   VG_(clo_trace_pthread_level);
 /* Stop after this many basic blocks.  default: Infinity. */
 extern ULong VG_(clo_stop_after);
 /* Display gory details for the k'th most popular error.  default:
@@ -405,6 +406,9 @@
 #define VG_USERREQ__PTHREAD_MUTEX_DESTROY   0x3007
 #define VG_USERREQ__PTHREAD_CANCEL          0x3008
 
+/* Cosmetic ... */
+#define VG_USERREQ__GET_PTHREAD_TRACE_LEVEL 0x3101
+
 /* 
 In vg_constants.h:
 #define VG_USERREQ__SIGNAL_RETURNS          0x4001
diff --git a/vg_libpthread.c b/vg_libpthread.c
index ab39745..11f5200 100644
--- a/vg_libpthread.c
+++ b/vg_libpthread.c
@@ -27,29 +27,36 @@
 #include <unistd.h>
 #include <string.h>
 
-/* ---------------------------------------------------------------------
-   Mini-configuration.
-   ------------------------------------------------------------------ */
-
-/* Set to 1 to see IGNORED debugging messages. */
-static int show_IGNORED = 1;
-
 
 /* ---------------------------------------------------------------------
    Helpers.  We have to be pretty self-sufficient.
    ------------------------------------------------------------------ */
 
+/* Extract from Valgrind the value of VG_(clo_trace_pthread_level).
+   Returns 0 (none) if not running on Valgrind. */
+static
+int get_pt_trace_level ( void )
+{
+   int res;
+   VALGRIND_MAGIC_SEQUENCE(res, 0 /* default */,
+                           VG_USERREQ__GET_PTHREAD_TRACE_LEVEL,
+                           0, 0, 0, 0);
+   return res;
+}
+
+
+
 static
 void myexit ( int arg )
 {
-  int __res;
+   int __res;
    __asm__ volatile ("movl %%ecx, %%ebx ; int $0x80"
                      : "=a" (__res)
                      : "0" (__NR_exit),
                        "c" (arg) );
-  /* We don't bother to mention the fact that this asm trashes %ebx,
-     since it won't return.  If you ever do let it return ... fix
-     this! */
+   /* We don't bother to mention the fact that this asm trashes %ebx,
+      since it won't return.  If you ever do let it return ... fix
+      this! */
 }
 
 
@@ -95,12 +102,13 @@
 
 static void ignored ( char* msg )
 {
-   char* ig = "vg_libpthread.so: IGNORED call to: ";
-   if (!show_IGNORED) return;
-   write(2, ig, strlen(ig));
-   write(2, msg, strlen(msg));
-   ig = "\n";
-   write(2, ig, strlen(ig));
+   if (get_pt_trace_level() >= 1) {
+      char* ig = "vg_libpthread.so: IGNORED call to: ";
+      write(2, ig, strlen(ig));
+      write(2, msg, strlen(msg));
+      ig = "\n";
+      write(2, ig, strlen(ig));
+   }
 }
 
 
@@ -190,8 +198,6 @@
                        const  pthread_mutexattr_t *mutexattr)
 {
    int res;
-   //  char* str = "pthread_mutex_init\n";
-   //  write(2, str, strlen(str));
    ensure_valgrind("pthread_mutex_init");
    VALGRIND_MAGIC_SEQUENCE(res, 0 /* default */,
                            VG_USERREQ__PTHREAD_MUTEX_INIT,
@@ -214,7 +220,8 @@
 int pthread_mutex_lock(pthread_mutex_t *mutex)
 {
    int res;
-   if (!(RUNNING_ON_VALGRIND)) {
+   static int moans = 5;
+   if (!(RUNNING_ON_VALGRIND) && moans-- > 0) {
       char* str = "pthread_mutex_lock-NOT-INSIDE-VALGRIND\n";
       write(2, str, strlen(str));
       return 0;
@@ -229,7 +236,8 @@
 int pthread_mutex_unlock(pthread_mutex_t *mutex)
 {
    int res;
-   if (!(RUNNING_ON_VALGRIND)) {
+   static int moans = 5;
+   if (!(RUNNING_ON_VALGRIND) && moans-- > 0) {
       char* str = "pthread_mutex_unlock-NOT-INSIDE-VALGRIND\n";
       write(2, str, strlen(str));
       return 0;
@@ -256,7 +264,8 @@
 int pthread_mutex_destroy(pthread_mutex_t *mutex)
 {
    int res;
-   if (!(RUNNING_ON_VALGRIND)) {
+   static int moans = 5;
+   if (!(RUNNING_ON_VALGRIND) && moans-- > 0) {
       char* str = "pthread_mutex_destroy-NOT-INSIDE-VALGRIND\n";
       write(2, str, strlen(str));
       return 0;
@@ -335,9 +344,7 @@
               const struct sigaction *act,  
               struct  sigaction *oldact)
 {
-  //  char* str = "sigaction\n";
-  //  write(2, str, strlen(str));
-  return __libc_sigaction(signum, act, oldact);
+   return __libc_sigaction(signum, act, oldact);
 }
 
 
@@ -349,9 +356,7 @@
              const  struct  sockaddr  *serv_addr, 
              socklen_t addrlen)
 {
-  //  char* str = "connect\n";
-  //  write(2, str, strlen(str));
-  return __libc_connect(sockfd, serv_addr, addrlen);
+   return __libc_connect(sockfd, serv_addr, addrlen);
 }
 
 
@@ -359,9 +364,7 @@
 int __libc_fcntl(int fd, int cmd, long arg);
 int fcntl(int fd, int cmd, long arg)
 {
-  //  char* str = "fcntl\n";
-  //  write(2, str, strlen(str));
-  return __libc_fcntl(fd, cmd, arg);
+   return __libc_fcntl(fd, cmd, arg);
 }
 
 
@@ -369,9 +372,7 @@
 ssize_t __libc_write(int fd, const void *buf, size_t count);
 ssize_t write(int fd, const void *buf, size_t count)
 {
-  //  char* str = "write\n";
-  //  write(2, str, strlen(str));
-  return __libc_write(fd, buf, count);
+   return __libc_write(fd, buf, count);
 }
 
 
@@ -379,9 +380,7 @@
 ssize_t __libc_read(int fd, void *buf, size_t count);
 ssize_t read(int fd, void *buf, size_t count)
 {
-  //  char* str = "read\n";
-  //  write(2, str, strlen(str));
-  return __libc_read(fd, buf, count);
+   return __libc_read(fd, buf, count);
 }
 
 
@@ -389,9 +388,7 @@
 int __libc_open(const char *pathname, int flags);
 int open(const char *pathname, int flags)
 {
-  //  char* str = "open\n";
-  //  write(2, str, strlen(str));
-  return __libc_open(pathname, flags);
+   return __libc_open(pathname, flags);
 }
 
 
@@ -399,9 +396,7 @@
 int __libc_close(int fd);
 int close(int fd)
 {
-  //  char* str = "open\n";
-  //  write(2, str, strlen(str));
-  return __libc_close(fd);
+   return __libc_close(fd);
 }
 
 
@@ -409,9 +404,7 @@
 int __libc_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
 int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
 {
-  //  char* str = "accept\n";
-  //  write(2, str, strlen(str));
-  return __libc_accept(s, addr, addrlen);
+   return __libc_accept(s, addr, addrlen);
 }
 
 
@@ -419,9 +412,7 @@
 pid_t __libc_fork(void);
 pid_t fork(void)
 {
-  //  char* str = "fork\n";
-  //  write(2, str, strlen(str));
-  return __libc_fork();
+   return __libc_fork();
 }
 
 
@@ -429,9 +420,7 @@
 pid_t __libc_waitpid(pid_t pid, int *status, int options);
 pid_t waitpid(pid_t pid, int *status, int options)
 {
-  //  char* str = "waitpid\n";
-  //  write(2, str, strlen(str));
-  return __libc_waitpid(pid, status, options);
+   return __libc_waitpid(pid, status, options);
 }
 
 
@@ -446,14 +435,14 @@
 int __libc_fsync(int fd);
 int fsync(int fd)
 {
-  return __libc_fsync(fd);
+   return __libc_fsync(fd);
 }
 
 extern
 off_t __libc_lseek(int fildes, off_t offset, int whence);
 off_t lseek(int fildes, off_t offset, int whence)
 {
-  return __libc_lseek(fildes, offset, whence);
+   return __libc_lseek(fildes, offset, whence);
 }
 
 extern  
@@ -470,6 +459,7 @@
    return __libc_send(s, msg, len, flags);
 }
 
+
 /*--------------------------------------------------*/
 
 /* I've no idea what these are, but they get called quite a lot.
@@ -666,7 +656,7 @@
       /* fprintf(stderr, "MY_SELECT: nanosleep\n"); */
       /* nanosleep and go round again */
       nanosleep_interval.tv_sec = 0;
-      nanosleep_interval.tv_nsec = 20 * 1000 * 1000; /* 20 milliseconds */
+      nanosleep_interval.tv_nsec = 40 * 1000 * 1000; /* 40 milliseconds */
       /* It's critical here that valgrind's nanosleep implementation
          is nonblocking. */
       (void)my_do_syscall2(__NR_nanosleep, 
diff --git a/vg_main.c b/vg_main.c
index 7c5ac40..06b2e97 100644
--- a/vg_main.c
+++ b/vg_main.c
@@ -425,7 +425,7 @@
 Bool   VG_(clo_trace_symtab);
 Bool   VG_(clo_trace_malloc);
 Bool   VG_(clo_trace_sched);
-Bool   VG_(clo_trace_pthread);
+Int    VG_(clo_trace_pthread_level);
 ULong  VG_(clo_stop_after);
 Int    VG_(clo_dump_error);
 Int    VG_(clo_backtrace_size);
@@ -508,7 +508,7 @@
    VG_(clo_trace_symtab)     = False;
    VG_(clo_trace_malloc)     = False;
    VG_(clo_trace_sched)      = False;
-   VG_(clo_trace_pthread)    = False;
+   VG_(clo_trace_pthread_level) = 0;
    VG_(clo_stop_after)       = 1000000000000LL;
    VG_(clo_dump_error)       = 0;
    VG_(clo_backtrace_size)   = 4;
@@ -777,10 +777,12 @@
       else if (STREQ(argv[i], "--trace-sched=no"))
          VG_(clo_trace_sched) = False;
 
-      else if (STREQ(argv[i], "--trace-pthread=yes"))
-         VG_(clo_trace_pthread) = True;
-      else if (STREQ(argv[i], "--trace-pthread=no"))
-         VG_(clo_trace_pthread) = False;
+      else if (STREQ(argv[i], "--trace-pthread=none"))
+         VG_(clo_trace_pthread_level) = 0;
+      else if (STREQ(argv[i], "--trace-pthread=some"))
+         VG_(clo_trace_pthread_level) = 1;
+      else if (STREQ(argv[i], "--trace-pthread=all"))
+         VG_(clo_trace_pthread_level) = 2;
 
       else if (STREQN(13, argv[i], "--stop-after="))
          VG_(clo_stop_after) = VG_(atoll)(&argv[i][13]);
diff --git a/vg_scheduler.c b/vg_scheduler.c
index 33cb157..770fbd3 100644
--- a/vg_scheduler.c
+++ b/vg_scheduler.c
@@ -176,7 +176,7 @@
 static
 void print_sched_event ( ThreadId tid, Char* what )
 {
-   VG_(message)(Vg_DebugMsg, "SCHED[%d]: %s", tid, what );
+   VG_(message)(Vg_DebugMsg, "  SCHED[%d]: %s", tid, what );
 }
 
 
@@ -555,6 +555,8 @@
          SIMPLE_RETURN(tid);
       case VG_USERREQ__RUNNING_ON_VALGRIND:
          SIMPLE_RETURN(1);
+      case VG_USERREQ__GET_PTHREAD_TRACE_LEVEL:
+         SIMPLE_RETURN(VG_(clo_trace_pthread_level));
 
       default:
          /* Too hard; wimp out. */
@@ -1477,7 +1479,7 @@
    vg_mutexes[mid].owner = VG_INVALID_THREADID; /* irrelevant */
    mutex->__m_reserved = mid;
    mutex->__m_count = 1; /* initialised */
-   if (VG_(clo_trace_pthread)) {
+   if (VG_(clo_trace_pthread_level) >= 1) {
       VG_(sprintf)(msg_buf, "(initialise mutex) (%p) -> %d", 
                             mutex, mid );
       print_pthread_event(tid, msg_buf);
@@ -1497,7 +1499,7 @@
 
    initialise_mutex(tid, mutex);
 
-   if (VG_(clo_trace_pthread)) {
+   if (VG_(clo_trace_pthread_level) >= 1) {
       VG_(sprintf)(msg_buf, "pthread_mutex_init (%p) -> %d", 
                             mutex, mutex->__m_reserved );
       print_pthread_event(tid, msg_buf);
@@ -1541,7 +1543,7 @@
       return;
    }
 
-   if (VG_(clo_trace_pthread)) {
+   if (VG_(clo_trace_pthread_level) >= 2) {
       VG_(sprintf)(msg_buf, "pthread_mutex_lock   %d (%p)", 
                             mid, mutex );
       print_pthread_event(tid, msg_buf);
@@ -1562,9 +1564,9 @@
       vg_threads[tid].status = VgTs_WaitMX;
       vg_threads[tid].waited_on_mid = mid;
       /* No assignment to %EDX, since we're blocking. */
-      if (VG_(clo_trace_pthread)) {
-         VG_(sprintf)(msg_buf, "pthread_mutex_lock   %d (%p): BLOCK", 
-                               mid, mutex );
+      if (VG_(clo_trace_pthread_level) >= 1) {
+         VG_(sprintf)(msg_buf, "pthread_mutex_lock   %d: BLOCK", 
+                               mid );
          print_pthread_event(tid, msg_buf);
       }
    } else {
@@ -1597,7 +1599,7 @@
       return;
    }
 
-   if (VG_(clo_trace_pthread)) {
+   if (VG_(clo_trace_pthread_level) >= 2) {
       VG_(sprintf)(msg_buf, "pthread_mutex_unlock %d (%p)", 
                             mid, mutex );
       print_pthread_event(tid, msg_buf);
@@ -1633,7 +1635,7 @@
       vg_threads[i].status = VgTs_Runnable;
       vg_threads[i].m_edx = 0; /* pth_lock() success */
 
-      if (VG_(clo_trace_pthread)) {
+      if (VG_(clo_trace_pthread_level) >= 1) {
          VG_(sprintf)(msg_buf, "pthread_mutex_lock   %d: RESUME", 
                                mid );
          print_pthread_event(tid, msg_buf);
@@ -1664,7 +1666,7 @@
       return;
    }
 
-   if (VG_(clo_trace_pthread)) {
+   if (VG_(clo_trace_pthread_level) >= 1) {
       VG_(sprintf)(msg_buf, "pthread_mutex_destroy %d (%p)", 
                             mid, mutex );
       print_pthread_event(tid, msg_buf);
