diff --git a/glibc-2.2.supp b/glibc-2.2.supp
index 8dd0269..92f6b28 100644
--- a/glibc-2.2.supp
+++ b/glibc-2.2.supp
@@ -6,46 +6,54 @@
 # Format of this file is:
 # {
 #     name_of_suppression
-#     kind: one of Param Value1 Value2 Value4 Value8
-#                   Free Addr1 Addr2 Addr4 Addr8
-#                   Cond (previously known as Value0)
-#     (if Param: name of system call param, if Free: name of free-ing fn)
+#     skin_name:supp_kind
+#     (optional extra info for some suppression types)
 #     caller0 name, or /name/of/so/file.so
 #     caller1 name, or ditto
 #     (optionally: caller2 name)
 #     (optionally: caller3 name)
-# }
+#  }
+#
+# For memcheck, the supp_kinds are:
+#
+#     Param Value1 Value2 Value4 Value8
+#     Free Addr1 Addr2 Addr4 Addr8
+#     Cond (previously known as Value0)
+#
+# and the optional extra info is:
+#     if Param: name of system call param
+#     if Free: name of free-ing fn)
 
 #-------- SuSE 8.1 stuff (gcc-3.2, glibc-2.2.5 + SuSE's hacks)
 {
    __stpcpy/*
-   Cond
+   memcheck:Cond
    fun:__stpcpy
    fun:*
 }
 {
    strlen/decompose_rpath/_dl_map_object
-   Cond
+   memcheck:Cond
    fun:strlen
    fun:decompose_rpath
    fun:_dl_map_object
 }
 {
    strlen/_dl_sym/dlsym_doit
-   Cond
+   memcheck:Cond
    fun:strlen
    fun:_dl_sym
    fun:dlsym_doit
 }
 {
    trecurse/__gconv_release_shlib(Addr4)
-   Addr4
+   memcheck:Addr4
    fun:trecurse
    fun:__gconv_release_shlib
 }
 {
    do_release_shlib/trecurse(Addr4)
-   Addr4
+   memcheck:Addr4
    fun:do_release_shlib
    fun:trecurse
 }
@@ -53,28 +61,28 @@
 #-------- R H Limbo (glibc-2.2.90) stuff
 {
    elf_dynamic_do_rela.8/_dl_relocate_object_internal
-   Cond
+   memcheck:Cond
    fun:elf_dynamic_do_rela.8
    fun:_dl_relocate_object_internal
 }
 
 {
    __strnlen/_nl_make_l10nflist(Cond)
-   Cond
+   memcheck:Cond
    fun:__strnlen
    fun:_nl_make_l10nflist
 }
 
 {
    __strnlen/*vfprintf*
-   Cond
+   memcheck:Cond
    fun:__strnlen
    fun:*vfprintf*
 }
 
 {
    libXaw.so.7.0(Cond)
-   Cond
+   memcheck:Cond
    obj:*libXaw.so.7.0
 }
 
@@ -83,20 +91,20 @@
 
 {
    __twalk/*(Addr4)
-   Addr4
+   memcheck:Addr4
    fun:__twalk
 }
 
 {
    do_release_shlib/__twalk(Addr4)
-   Addr4
+   memcheck:Addr4
    fun:do_release_shlib
    fun:__twalk
 }
 
 {
    __libc_freeres/free_mem/free(Free)
-   Free
+   memcheck:Free
    fun:free
    fun:free_mem
    fun:__libc_freeres
@@ -105,7 +113,7 @@
 #-------- Data races
 #{
 #   _dl_lookup_symbol/fixup/_dl_runtime_resolve
-#   Eraser
+#   helgrind:Eraser
 #   fun:_dl_lookup_symbol
 #   fun:fixup
 #   fun:_dl_runtime_resolve
@@ -113,7 +121,7 @@
 #
 #{
 #   _dl_lookup_versioned_symbol/fixup/_dl_runtime_resolve
-#   Eraser
+#   helgrind:Eraser
 #   fun:_dl_lookup_versioned_symbol
 #   fun:fixup
 #   fun:_dl_runtime_resolve
@@ -122,7 +130,7 @@
 #-------- Threading bugs?
 {
    pthread_error/__pthread_mutex_destroy/__closedir
-   PThread
+   core:PThread
    fun:pthread_error
    fun:__pthread_mutex_destroy
    fun:__closedir
@@ -130,7 +138,7 @@
 
 {
    pthread_error/__pthread_mutex_destroy/_IO_default_finish
-   PThread
+   core:PThread
    fun:pthread_error
    fun:__pthread_mutex_destroy
    fun:_IO_default_finish*
@@ -138,14 +146,14 @@
 
 {
    __pthread_mutex_unlock/_IO_funlockfile
-   PThread
+   core:PThread
    fun:__pthread_mutex_unlock
    fun:_IO_funlockfile
 }
 
 {
    __pthread_mutex_unlock/__register_frame_info
-   PThread
+   core:PThread
    fun:__pthread_mutex_unlock
    fun:__register_frame_info
 }
@@ -153,14 +161,14 @@
 # even more glibc suppressions ?
 {
    libc-2.2.4.so/libc-2.2.4.so/libc-2.2.4.so(Cond)
-   Cond
+   memcheck:Cond
    obj:*libc-2.2.?.so
    obj:*libc-2.2.?.so
    obj:*libc-2.2.?.so
 }
 {
    libc-2.2.4.so/libc-2.2.4.so/libc-2.2.4.so(Value4)
-   Value4
+   memcheck:Value4
    obj:*libc-2.2.?.so
    obj:*libc-2.2.?.so
    obj:*libc-2.2.?.so
@@ -170,24 +178,24 @@
 ##### suppressions for coolo
 {
    strchr/dl_open_worker(Cond)
-   Cond
+   memcheck:Cond
    fun:strchr
    fun:dl_open_worker
 }
 { 
    __rawmemchr(Cond)
-   Cond 
+   memcheck:Cond 
    fun:__rawmemchr
 } 
 { 
    _IO_vfprintf/__strnlen(Cond)
-   Cond 
+   memcheck:Cond 
    fun:__strnlen
    fun:_IO_vfprintf
 } 
 { 
    __strchrnul/gethostbyname*(Cond)
-   Cond 
+   memcheck:Cond 
    fun:__strchrnul
    fun:gethostbyname*
 } 
@@ -196,28 +204,28 @@
 ##----
 {
    strlen/*dl_map_object*(Cond)
-   Cond
+   memcheck:Cond
    fun:strlen
    fun:*dl_map_object*
 }
 
 {
    strlen/*dl_open_worker*(Cond)
-   Cond
+   memcheck:Cond
    fun:strlen
    fun:*dl_open_worker*
 }
 
 {
    *rawmemchr*/*nss*(Cond)
-   Cond
+   memcheck:Cond
    fun:*rawmemchr*
    fun:*nss*
 }
 
 {
    *strchrnul*/*nss*(Cond)
-   Cond
+   memcheck:Cond
    fun:*strchrnul*
    fun:*nss*
 }
@@ -229,13 +237,13 @@
 # two:
 {
    __mpn_construct_double/*(Addr4)
-   Addr4
+   memcheck:Addr4
    fun:__mpn_construct_double
    fun:*
 }
 {
    __mpn_construct_double/*(Addr8)
-   Addr8
+   memcheck:Addr8
    fun:__mpn_construct_double
    fun:*
 }
@@ -243,13 +251,13 @@
 # More of the same (gcc bug, I'm pretty sure)
 {
    __fabs/*(Addr4)
-   Addr4
+   memcheck:Addr4
    fun:__fabs
    fun:*
 }
 {
    __fabs/*(Addr8)
-   Addr8
+   memcheck:Addr8
    fun:__fabs
    fun:*
 }
@@ -258,7 +266,7 @@
 # Not sure what this is about ... but anyway
 {
    pthread_sighandler/*(Addr4)
-   Addr4
+   memcheck:Addr4
    fun:pthread_sighandler
    fun:*
 }
@@ -268,7 +276,7 @@
 
 {
    __strnlen/__argz_stringify/_nl_make_l10nflist(Cond)
-   Cond
+   memcheck:Cond
    fun:__strnlen
    fun:__argz_stringify
    fun:_nl_make_l10nflist
@@ -277,14 +285,14 @@
 #--------------
 {
    _dl_relocate_object*/dl_open_worker/_dl_catch_error*(Cond)
-   Cond
+   memcheck:Cond
    fun:_dl_relocate_object*
    fun:dl_open_worker
    fun:_dl_catch_error*
 }
 {
    _dl_relocate_object/libc-2.2.4.so/_dl_catch_error(Cond)
-   Cond
+   memcheck:Cond
    fun:_dl_relocate_object
    obj:*libc-2.2.?.so
    fun:_dl_catch_error
@@ -292,7 +300,7 @@
 
 {
    strrchr/_dl_map_object_from_fd/_dl_map_object(Cond)
-   Cond
+   memcheck:Cond
    fun:strrchr
    fun:_dl_map_object_from_fd
    fun:_dl_map_object
@@ -301,14 +309,14 @@
 #-------------------
 {
    socketcall.connect(serv_addr)/__libc_connect/*
-   Param
+   memcheck:Param
    socketcall.connect(serv_addr)
    fun:__libc_connect
    fun:*
 }
 {
    socketcall.connect(serv_addr)/libc-2.2.4.so/libc-2.2.4.so
-   Param
+   memcheck:Param
    socketcall.connect(serv_addr)
    obj:*libc-2.2.?.so
    obj:*libc-2.2.?.so
@@ -317,7 +325,7 @@
 #----------------------
 {
    write(buf)/__libc_write/libX11.so.6.2/libX11.so.6.2(Param)
-   Param
+   memcheck:Param
    write(buf)
    fun:__libc_write
    obj:/usr/X11R6/lib/libX11.so.6.2
@@ -325,7 +333,7 @@
 }
 {
    write(buf)/libc-2.2.4.so/libX11.so.6.2/libX11.so.6.2(Param)
-   Param
+   memcheck:Param
    write(buf)
    obj:*libc-2.2.?.so
    obj:/usr/X11R6/lib/libX11.so.6.2
@@ -342,7 +350,7 @@
 
 {
    writev(vector[...])/__writev/libX11.so.6.2/libX11.so.6.2
-   Param
+   memcheck:Param
    writev(vector[...])
    fun:__writev
    obj:/usr/X11R6/lib/libX11.so.6.2
@@ -352,14 +360,14 @@
 #----------------
 {
    __rawmemchr/libXt.so.6.0/libXt.so.6.0
-   Cond
+   memcheck:Cond
    fun:__rawmemchr
    obj:/usr/X11R6/lib/libXt.so.6.0
    obj:/usr/X11R6/lib/libXt.so.6.0
 }
 {
    libc-2.2.4.so/libXt.so.6.0/libXt.so.6.0
-   Cond
+   memcheck:Cond
    obj:*libc-2.2.?.so
    obj:/usr/X11R6/lib/libXt.so.6.0
    obj:/usr/X11R6/lib/libXt.so.6.0
