diff --git a/drd/drd_bitmap.c b/drd/drd_bitmap.c
index 9e5d1ba..928f221 100644
--- a/drd/drd_bitmap.c
+++ b/drd/drd_bitmap.c
@@ -858,7 +858,7 @@
           | ((bm1r->bm0_r[k] & bm0_mask(b)) ? RHS_R : 0)
           | ((bm1r->bm0_w[k] & bm0_mask(b)) ? RHS_W : 0);
         Addr const a = MAKE_ADDRESS(bm2l->addr, k * BITS_PER_UWORD | b);
-        if (HAS_RACE(access_mask) && ! drd_is_suppressed(a, a + 1))
+        if (HAS_RACE(access_mask) && ! DRD_(is_suppressed)(a, a + 1))
         {
           return 1;
         }
diff --git a/drd/drd_clientobj.c b/drd/drd_clientobj.c
index 768079a..074bc16 100644
--- a/drd/drd_clientobj.c
+++ b/drd/drd_clientobj.c
@@ -134,7 +134,7 @@
   p->any.first_observed_at = VG_(record_ExeContext)(VG_(get_running_tid)(), 0);
   VG_(OSetGen_Insert)(s_clientobj, p);
   tl_assert(VG_(OSetGen_Lookup)(s_clientobj, &a1) == p);
-  drd_start_suppression(a1, a1 + 1, "clientobj");
+  DRD_(start_suppression)(a1, a1 + 1, "clientobj");
   return p;
 }
 
@@ -173,7 +173,7 @@
 
   tl_assert(s_clientobj);
 
-  if (! drd_is_any_suppressed(a1, a2))
+  if (! DRD_(is_any_suppressed)(a1, a2))
     return;
 
   VG_(OSetGen_ResetIter)(s_clientobj);
diff --git a/drd/drd_clientreq.c b/drd/drd_clientreq.c
index 44c662e..fef90c1 100644
--- a/drd/drd_clientreq.c
+++ b/drd/drd_clientreq.c
@@ -115,11 +115,11 @@
     break;
 
   case VG_USERREQ__DRD_START_SUPPRESSION:
-    drd_start_suppression(arg[1], arg[1] + arg[2], "client");
+    DRD_(start_suppression)(arg[1], arg[1] + arg[2], "client");
     break;
 
   case VG_USERREQ__DRD_FINISH_SUPPRESSION:
-    drd_finish_suppression(arg[1], arg[1] + arg[2]);
+    DRD_(finish_suppression)(arg[1], arg[1] + arg[2]);
     break;
 
   case VG_USERREQ__DRD_SUPPRESS_CURRENT_STACK:
@@ -143,8 +143,8 @@
     }
 #endif
     thread_set_stack_startup(drd_tid, VG_(get_SP)(vg_tid));
-    drd_start_suppression(topmost_sp, VG_(thread_get_stack_max)(vg_tid),
-                          "stack top");
+    DRD_(start_suppression)(topmost_sp, VG_(thread_get_stack_max)(vg_tid),
+                            "stack top");
     break;
   }
 
@@ -153,11 +153,11 @@
     break;
 
   case VG_USERREQ__DRD_START_TRACE_ADDR:
-    drd_start_tracing_address_range(arg[1], arg[1] + arg[2]);
+    DRD_(start_tracing_address_range)(arg[1], arg[1] + arg[2]);
     break;
 
   case VG_USERREQ__DRD_STOP_TRACE_ADDR:
-    drd_stop_tracing_address_range(arg[1], arg[1] + arg[2]);
+    DRD_(stop_tracing_address_range)(arg[1], arg[1] + arg[2]);
     break;
 
   case VG_USERREQ__DRD_STOP_RECORDING:
diff --git a/drd/drd_clientreq.h b/drd/drd_clientreq.h
index e43d845..29cc75e 100644
--- a/drd/drd_clientreq.h
+++ b/drd/drd_clientreq.h
@@ -22,6 +22,7 @@
   The GNU General Public License is contained in the file COPYING.
 */
 
+
 /*
  * This header file contains the tool-internal interface for the code that
  * processes client requests.
diff --git a/drd/drd_error.c b/drd/drd_error.c
index c3eb745..c06dea9 100644
--- a/drd/drd_error.c
+++ b/drd/drd_error.c
@@ -413,7 +413,7 @@
   }
 }
 
-void drd_register_error_handlers(void)
+void DRD_(register_error_handlers)(void)
 {
   // Tool error reporting.
   VG_(needs_tool_errors)(drd_tool_error_eq,
diff --git a/drd/drd_error.h b/drd/drd_error.h
index b72b82e..4035122 100644
--- a/drd/drd_error.h
+++ b/drd/drd_error.h
@@ -148,7 +148,7 @@
 
 
 void set_show_conflicting_segments(const Bool scs);
-void drd_register_error_handlers(void);
+void DRD_(register_error_handlers)(void);
 
 
 #endif /* __DRD_ERROR_H */
diff --git a/drd/drd_load_store.c b/drd/drd_load_store.c
index 160b356..d53bde6 100644
--- a/drd/drd_load_store.c
+++ b/drd/drd_load_store.c
@@ -67,10 +67,10 @@
   s_drd_check_stack_accesses = c;
 }
 
-void drd_trace_mem_access(const Addr addr, const SizeT size,
+void DRD_(trace_mem_access)(const Addr addr, const SizeT size,
                           const BmAccessTypeT access_type)
 {
-  if (drd_is_any_traced(addr, addr + size))
+  if (DRD_(is_any_traced)(addr, addr + size))
   {
     char vc[80];
     vc_snprint(vc, sizeof(vc), thread_get_vc(thread_get_running_tid()));
@@ -99,12 +99,12 @@
 
 static VG_REGPARM(2) void drd_trace_mem_load(const Addr addr, const SizeT size)
 {
-  return drd_trace_mem_access(addr, size, eLoad);
+  return DRD_(trace_mem_access)(addr, size, eLoad);
 }
 
 static VG_REGPARM(2) void drd_trace_mem_store(const Addr addr,const SizeT size)
 {
-  return drd_trace_mem_access(addr, size, eStore);
+  return DRD_(trace_mem_access)(addr, size, eStore);
 }
 
 static void drd_report_race(const Addr addr, const SizeT size,
@@ -134,7 +134,7 @@
   if (running_thread_is_recording()
       && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
       && bm_access_load_triggers_conflict(addr, addr + size)
-      && ! drd_is_suppressed(addr, addr + size))
+      && ! DRD_(is_suppressed)(addr, addr + size))
   {
     drd_report_race(addr, size, eLoad);
   }
@@ -145,7 +145,7 @@
   if (running_thread_is_recording()
       && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
       && bm_access_load_1_triggers_conflict(addr)
-      && ! drd_is_suppressed(addr, addr + 1))
+      && ! DRD_(is_suppressed)(addr, addr + 1))
   {
     drd_report_race(addr, 1, eLoad);
   }
@@ -156,7 +156,7 @@
   if (running_thread_is_recording()
       && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
       && bm_access_load_2_triggers_conflict(addr)
-      && ! drd_is_suppressed(addr, addr + 2))
+      && ! DRD_(is_suppressed)(addr, addr + 2))
   {
     drd_report_race(addr, 2, eLoad);
   }
@@ -167,7 +167,7 @@
   if (running_thread_is_recording()
       && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
       && bm_access_load_4_triggers_conflict(addr)
-      && ! drd_is_suppressed(addr, addr + 4))
+      && ! DRD_(is_suppressed)(addr, addr + 4))
   {
     drd_report_race(addr, 4, eLoad);
   }
@@ -178,7 +178,7 @@
   if (running_thread_is_recording()
       && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
       && bm_access_load_8_triggers_conflict(addr)
-      && ! drd_is_suppressed(addr, addr + 8))
+      && ! DRD_(is_suppressed)(addr, addr + 8))
   {
     drd_report_race(addr, 8, eLoad);
   }
@@ -195,7 +195,7 @@
   if (running_thread_is_recording()
       && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
       && bm_access_store_triggers_conflict(addr, addr + size)
-      && ! drd_is_suppressed(addr, addr + size))
+      && ! DRD_(is_suppressed)(addr, addr + size))
   {
     drd_report_race(addr, size, eStore);
   }
@@ -206,7 +206,7 @@
   if (running_thread_is_recording()
       && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
       && bm_access_store_1_triggers_conflict(addr)
-      && ! drd_is_suppressed(addr, addr + 1))
+      && ! DRD_(is_suppressed)(addr, addr + 1))
   {
     drd_report_race(addr, 1, eStore);
   }
@@ -217,7 +217,7 @@
   if (running_thread_is_recording()
       && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
       && bm_access_store_2_triggers_conflict(addr)
-      && ! drd_is_suppressed(addr, addr + 2))
+      && ! DRD_(is_suppressed)(addr, addr + 2))
   {
     drd_report_race(addr, 2, eStore);
   }
@@ -228,7 +228,7 @@
   if (running_thread_is_recording()
       && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
       && bm_access_store_4_triggers_conflict(addr)
-      && ! drd_is_suppressed(addr, addr + 4))
+      && ! DRD_(is_suppressed)(addr, addr + 4))
   {
     drd_report_race(addr, 4, eStore);
   }
@@ -239,7 +239,7 @@
   if (running_thread_is_recording()
       && (s_drd_check_stack_accesses || ! thread_address_on_stack(addr))
       && bm_access_store_8_triggers_conflict(addr)
-      && ! drd_is_suppressed(addr, addr + 8))
+      && ! DRD_(is_suppressed)(addr, addr + 8))
   {
     drd_report_race(addr, 8, eStore);
   }
@@ -285,7 +285,7 @@
   IRExpr** argv;
   IRDirty* di;
 
-  if (UNLIKELY(drd_any_address_is_traced()))
+  if (UNLIKELY(DRD_(any_address_is_traced)()))
   {
     addStmtToIRSB(bb,
 		  IRStmt_Dirty(
@@ -350,7 +350,7 @@
   IRExpr** argv;
   IRDirty* di;
 
-  if (UNLIKELY(drd_any_address_is_traced()))
+  if (UNLIKELY(DRD_(any_address_is_traced)()))
   {
     addStmtToIRSB(bb,
 		  IRStmt_Dirty(
@@ -407,7 +407,7 @@
   addStmtToIRSB(bb, IRStmt_Dirty(di));
 }
 
-IRSB* drd_instrument(VgCallbackClosure* const closure,
+IRSB* DRD_(instrument)(VgCallbackClosure* const closure,
                      IRSB* const bb_in,
                      VexGuestLayout* const layout,
                      VexGuestExtents* const vge, 
diff --git a/drd/drd_load_store.h b/drd/drd_load_store.h
index f820555..9d74147 100644
--- a/drd/drd_load_store.h
+++ b/drd/drd_load_store.h
@@ -37,14 +37,14 @@
 
 Bool DRD_(get_check_stack_accesses)(void);
 void DRD_(set_check_stack_accesses)(const Bool c);
-IRSB* drd_instrument(VgCallbackClosure* const closure,
-                     IRSB* const bb_in,
-                     VexGuestLayout* const layout,
-                     VexGuestExtents* const vge, 
-                     IRType const gWordTy,
-                     IRType const hWordTy);
-void drd_trace_mem_access(const Addr addr, const SizeT size,
-                          const BmAccessTypeT access_type);
+IRSB* DRD_(instrument)(VgCallbackClosure* const closure,
+                       IRSB* const bb_in,
+                       VexGuestLayout* const layout,
+                       VexGuestExtents* const vge, 
+                       IRType const gWordTy,
+                       IRType const hWordTy);
+void DRD_(trace_mem_access)(const Addr addr, const SizeT size,
+                            const BmAccessTypeT access_type);
 VG_REGPARM(2) void drd_trace_load(Addr addr, SizeT size);
 VG_REGPARM(2) void drd_trace_store(Addr addr, SizeT size);
 
diff --git a/drd/drd_main.c b/drd/drd_main.c
index a051711..50b1d03 100644
--- a/drd/drd_main.c
+++ b/drd/drd_main.c
@@ -53,23 +53,17 @@
 #include "pub_tool_tooliface.h"
 
 
-// Function declarations.
+/* Local variables. */
 
-static void drd_start_client_code(const ThreadId tid, const ULong bbs_done);
+static Bool DRD_(s_print_stats)      = False;
+static Bool DRD_(s_var_info)         = False;
+static Bool DRD_(s_show_stack_usage) = False;
 
 
-// Local variables.
-
-static Bool s_drd_print_stats          = False;
-static Bool s_drd_var_info             = False;
-static Bool s_show_stack_usage         = False;
-
-
-//
-// Implement the needs_command_line_options for drd.
-//
-
-static Bool drd_process_cmd_line_option(Char* arg)
+/**
+ * Implement the needs_command_line_options for drd.
+ */
+static Bool DRD_(process_cmd_line_option)(Char* arg)
 {
   int check_stack_accesses   = -1;
   int exclusive_threshold_ms = -1;
@@ -90,11 +84,11 @@
   Char* trace_address        = 0;
 
   VG_BOOL_CLO     (arg, "--check-stack-var",     check_stack_accesses)
-  else VG_BOOL_CLO(arg, "--drd-stats",           s_drd_print_stats)
+  else VG_BOOL_CLO(arg, "--drd-stats",           DRD_(s_print_stats))
   else VG_BOOL_CLO(arg,"--report-signal-unlocked",s_drd_report_signal_unlocked)
   else VG_BOOL_CLO(arg, "--segment-merging",     segment_merging)
   else VG_BOOL_CLO(arg, "--show-confl-seg",      show_confl_seg)
-  else VG_BOOL_CLO(arg, "--show-stack-usage",    s_show_stack_usage)
+  else VG_BOOL_CLO(arg, "--show-stack-usage",    DRD_(s_show_stack_usage))
   else VG_BOOL_CLO(arg, "--trace-barrier",       trace_barrier)
   else VG_BOOL_CLO(arg, "--trace-clientobj",     trace_clientobj)
   else VG_BOOL_CLO(arg, "--trace-cond",          trace_cond)
@@ -106,7 +100,7 @@
   else VG_BOOL_CLO(arg, "--trace-segment",       trace_segment)
   else VG_BOOL_CLO(arg, "--trace-semaphore",     trace_semaphore)
   else VG_BOOL_CLO(arg, "--trace-suppr",         trace_suppression)
-  else VG_BOOL_CLO(arg, "--var-info",            s_drd_var_info)
+  else VG_BOOL_CLO(arg, "--var-info",            DRD_(s_var_info))
   else VG_NUM_CLO (arg, "--exclusive-threshold", exclusive_threshold_ms)
   else VG_NUM_CLO (arg, "--shared-threshold",    shared_threshold_ms)
   else VG_STR_CLO (arg, "--trace-addr",          trace_address)
@@ -131,7 +125,7 @@
   if (trace_address)
   {
     const Addr addr = VG_(strtoll16)(trace_address, 0);
-    drd_start_tracing_address_range(addr, addr + 1);
+    DRD_(start_tracing_address_range)(addr, addr + 1);
   }
   if (trace_barrier != -1)
     barrier_set_trace(trace_barrier);
@@ -154,12 +148,12 @@
   if (trace_semaphore != -1)
     semaphore_set_trace(trace_semaphore);
   if (trace_suppression != -1)
-    suppression_set_trace(trace_suppression);
+    DRD_(suppression_set_trace)(trace_suppression);
 
   return True;
 }
 
-static void drd_print_usage(void)
+static void DRD_(print_usage)(void)
 {
   VG_(printf)(
 "    --check-stack-var=yes|no  Whether or not to report data races on\n"
@@ -198,7 +192,7 @@
    VG_(replacement_malloc_print_usage)();
 }
 
-static void drd_print_debug_usage(void)
+static void DRD_(print_debug_usage)(void)
 {  
   VG_(printf)(
 "    --drd-stats=yes|no        Print statistics about DRD activity [no].\n"
@@ -268,9 +262,9 @@
 {
   tl_assert(a1 < a1 + len);
 
-  if (UNLIKELY(drd_any_address_is_traced()))
+  if (UNLIKELY(DRD_(any_address_is_traced)()))
   {
-    drd_trace_mem_access(a1, len, eStart);
+    DRD_(trace_mem_access)(a1, len, eStart);
   }
 }
 
@@ -296,15 +290,15 @@
 
   tl_assert(a1 < a2);
 
-  if (UNLIKELY(drd_any_address_is_traced()))
+  if (UNLIKELY(DRD_(any_address_is_traced)()))
   {
-    drd_trace_mem_access(a1, len, eEnd);
+    DRD_(trace_mem_access)(a1, len, eEnd);
   }
   if (! is_stack_mem || DRD_(get_check_stack_accesses)())
   {
     thread_stop_using_mem(a1, a2);
     clientobj_stop_using_mem(a1, a2);
-    drd_suppression_stop_using_mem(a1, a2);
+    DRD_(suppression_stop_using_mem)(a1, a2);
   }
 }
 
@@ -314,16 +308,17 @@
   drd_stop_using_mem(a1, len, False);
 }
 
-/** Suppress data race reports on all addresses contained in .plt and
- *  .got.plt sections inside the address range [ a, a + len [. The data in
- *  these sections is modified by _dl_relocate_object() every time a function
- *  in a shared library is called for the first time. Since the first call
- *  to a function in a shared library can happen from a multithreaded context,
- *  such calls can cause conflicting accesses. See also Ulrich Drepper's
- *  paper "How to Write Shared Libraries" for more information about relocation
- *  (http://people.redhat.com/drepper/dsohowto.pdf).
+/**
+ * Suppress data race reports on all addresses contained in .plt and
+ * .got.plt sections inside the address range [ a, a + len [. The data in
+ * these sections is modified by _dl_relocate_object() every time a function
+ * in a shared library is called for the first time. Since the first call
+ * to a function in a shared library can happen from a multithreaded context,
+ * such calls can cause conflicting accesses. See also Ulrich Drepper's
+ * paper "How to Write Shared Libraries" for more information about relocation
+ * (http://people.redhat.com/drepper/dsohowto.pdf).
  */
-static void suppress_relocation_conflicts(const Addr a, const SizeT len)
+static void DRD_(suppress_relocation_conflicts)(const Addr a, const SizeT len)
 {
   const DebugInfo* di;
 
@@ -345,7 +340,7 @@
       VG_(printf)("Suppressing .plt @ 0x%lx size %ld\n", avma, size);
 #endif
       tl_assert(VG_(seginfo_sect_kind)(NULL, 0, avma) == Vg_SectPLT);
-      drd_start_suppression(avma, avma + size, ".plt");
+      DRD_(start_suppression)(avma, avma + size, ".plt");
     }
 
     avma = VG_(seginfo_get_gotplt_avma)(di);
@@ -357,7 +352,7 @@
       VG_(printf)("Suppressing .got.plt @ 0x%lx size %ld\n", avma, size);
 #endif
       tl_assert(VG_(seginfo_sect_kind)(NULL, 0, avma) == Vg_SectGOTPLT);
-      drd_start_suppression(avma, avma + size, ".gotplt");
+      DRD_(start_suppression)(avma, avma + size, ".gotplt");
     }
   }
 }
@@ -371,7 +366,7 @@
 
   drd_start_using_mem(a, len);
 
-  suppress_relocation_conflicts(a, len);
+  DRD_(suppress_relocation_conflicts)(a, len);
 }
 
 /* Called by the core when the stack of a thread grows, to indicate that */
@@ -447,10 +442,10 @@
   }
   if (! DRD_(get_check_stack_accesses)())
   {
-    drd_start_suppression(thread_get_stack_max(drd_created)
-                          - thread_get_stack_size(drd_created),
-                          thread_get_stack_max(drd_created),
-                          "stack");
+    DRD_(start_suppression)(thread_get_stack_max(drd_created)
+                            - thread_get_stack_size(drd_created),
+                            thread_get_stack_max(drd_created),
+                            "stack");
   }
 }
 
@@ -472,7 +467,7 @@
                  ? ""
                  : " (which is a detached thread)");
   }
-  if (s_show_stack_usage)
+  if (DRD_(s_show_stack_usage))
   {
     const SizeT stack_size = thread_get_stack_size(drd_tid);
     const SizeT used_stack
@@ -502,8 +497,7 @@
 // Implementation of the tool interface.
 //
 
-static
-void drd_post_clo_init(void)
+static void DRD_(post_clo_init)(void)
 {
 #  if defined(VGP_x86_linux) || defined(VGP_amd64_linux) \
       || defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
@@ -512,7 +506,7 @@
   VG_(printf)("\nWARNING: DRD has only been tested on Linux.\n\n");
 #  endif
 
-  if (s_drd_var_info)
+  if (DRD_(s_var_info))
   {
     VG_(needs_var_info)();
   }
@@ -524,11 +518,10 @@
   thread_set_vg_running_tid(tid);
 }
 
-static
-void drd_fini(Int exitcode)
+static void DRD_(fini)(Int exitcode)
 {
   // thread_print_all();
-  if (VG_(clo_verbosity) > 1 || s_drd_print_stats)
+  if (VG_(clo_verbosity) > 1 || DRD_(s_print_stats))
   {
     ULong update_conflict_set_count;
     ULong dsnsc;
@@ -585,17 +578,17 @@
                                 " by Bart Van Assche.");
   VG_(details_bug_reports_to)  (VG_BUGS_TO);
 
-  VG_(basic_tool_funcs)        (drd_post_clo_init,
-                                drd_instrument,
-                                drd_fini);
+  VG_(basic_tool_funcs)        (DRD_(post_clo_init),
+                                DRD_(instrument),
+                                DRD_(fini));
 
   // Command line stuff.
-  VG_(needs_command_line_options)(drd_process_cmd_line_option,
-                                  drd_print_usage,
-                                  drd_print_debug_usage);
+  VG_(needs_command_line_options)(DRD_(process_cmd_line_option),
+                                  DRD_(print_usage),
+                                  DRD_(print_debug_usage));
 
   // Error handling.
-  drd_register_error_handlers();
+  DRD_(register_error_handlers)();
 
   // Core event tracking.
   VG_(track_pre_mem_read)         (drd_pre_mem_read);
@@ -621,7 +614,7 @@
 
   DRD_(clientreq_init)();
 
-  drd_suppression_init();
+  DRD_(suppression_init)();
 
   clientobj_init();
 }
diff --git a/drd/drd_suppression.c b/drd/drd_suppression.c
index a66eca0..6e7cc08 100644
--- a/drd/drd_suppression.c
+++ b/drd/drd_suppression.c
@@ -31,31 +31,35 @@
 #include "pub_tool_libcprint.h"   // Vg_DebugMsg
 
 
-// Local variables.
+/* Global variables. */
 
-static struct bitmap* s_suppressed;
-static Bool s_trace_suppression;
-Bool g_any_address_traced = False;
+Bool DRD_(g_any_address_traced) = False;
 
 
-// Function definitions.
+/* Local variables. */
 
-void suppression_set_trace(const Bool trace_suppression)
+static struct bitmap* DRD_(s_suppressed);
+static Bool DRD_(s_trace_suppression);
+
+
+/* Function definitions. */
+
+void DRD_(suppression_set_trace)(const Bool trace_suppression)
 {
-   s_trace_suppression = trace_suppression;
+   DRD_(s_trace_suppression) = trace_suppression;
 }
 
-void drd_suppression_init(void)
+void DRD_(suppression_init)(void)
 {
-  tl_assert(s_suppressed == 0);
-  s_suppressed = bm_new();
-  tl_assert(s_suppressed);
+  tl_assert(DRD_(s_suppressed) == 0);
+  DRD_(s_suppressed) = bm_new();
+  tl_assert(DRD_(s_suppressed));
 }
 
-void drd_start_suppression(const Addr a1, const Addr a2,
-                           const char* const reason)
+void DRD_(start_suppression)(const Addr a1, const Addr a2,
+                             const char* const reason)
 {
-  if (s_trace_suppression)
+  if (DRD_(s_trace_suppression))
   {
     VG_(message)(Vg_DebugMsg, "start suppression of 0x%lx sz %ld (%s)",
                  a1, a2 - a1, reason);
@@ -63,12 +67,12 @@
 
   tl_assert(a1 < a2);
   // tl_assert(! drd_is_any_suppressed(a1, a2));
-  bm_access_range_store(s_suppressed, a1, a2);
+  bm_access_range_store(DRD_(s_suppressed), a1, a2);
 }
 
-void drd_finish_suppression(const Addr a1, const Addr a2)
+void DRD_(finish_suppression)(const Addr a1, const Addr a2)
 {
-  if (s_trace_suppression)
+  if (DRD_(s_trace_suppression))
   {
     VG_(message)(Vg_DebugMsg, "finish suppression of 0x%lx sz %ld",
                  a1, a2 - a1);
@@ -76,13 +80,13 @@
   }
 
   tl_assert(a1 < a2);
-  if (! drd_is_suppressed(a1, a2))
+  if (! DRD_(is_suppressed)(a1, a2))
   {
      VG_(message)(Vg_DebugMsg, "?? [0x%lx,0x%lx[ not suppressed ??", a1, a2);
      VG_(get_and_pp_StackTrace)(VG_(get_running_tid)(), 12);
      tl_assert(False);
   }
-  bm_clear_store(s_suppressed, a1, a2);
+  bm_clear_store(DRD_(s_suppressed), a1, a2);
 }
 
 /**
@@ -90,9 +94,9 @@
  * bytes in the range a1 .. a2 - 1 inclusive. Return false in case the range
  * is only partially suppressed or not suppressed at all.
  */
-Bool drd_is_suppressed(const Addr a1, const Addr a2)
+Bool DRD_(is_suppressed)(const Addr a1, const Addr a2)
 {
-  return bm_has(s_suppressed, a1, a2, eStore);
+  return bm_has(DRD_(s_suppressed), a1, a2, eStore);
 }
 
 /**
@@ -100,46 +104,47 @@
  * of the bytes in the range a1 .. a2 - 1 inclusive. Return false in case none
  * of the bytes in the specified range is suppressed.
  */
-Bool drd_is_any_suppressed(const Addr a1, const Addr a2)
+Bool DRD_(is_any_suppressed)(const Addr a1, const Addr a2)
 {
-  return bm_has_any_store(s_suppressed, a1, a2);
+  return bm_has_any_store(DRD_(s_suppressed), a1, a2);
 }
 
-void drd_start_tracing_address_range(const Addr a1, const Addr a2)
+void DRD_(start_tracing_address_range)(const Addr a1, const Addr a2)
 {
   tl_assert(a1 < a2);
 
-  bm_access_range_load(s_suppressed, a1, a2);
-  if (! g_any_address_traced)
+  bm_access_range_load(DRD_(s_suppressed), a1, a2);
+  if (! DRD_(g_any_address_traced))
   {
-    g_any_address_traced = True;
+    DRD_(g_any_address_traced) = True;
   }
 }
 
-void drd_stop_tracing_address_range(const Addr a1, const Addr a2)
+void DRD_(stop_tracing_address_range)(const Addr a1, const Addr a2)
 {
   tl_assert(a1 < a2);
 
-  bm_clear_load(s_suppressed, a1, a2);
-  if (g_any_address_traced)
+  bm_clear_load(DRD_(s_suppressed), a1, a2);
+  if (DRD_(g_any_address_traced))
   {
-    g_any_address_traced = bm_has_any_load(s_suppressed, 0, ~(Addr)0);
+    DRD_(g_any_address_traced)
+      = bm_has_any_load(DRD_(s_suppressed), 0, ~(Addr)0);
   }
 }
 
-Bool drd_is_any_traced(const Addr a1, const Addr a2)
+Bool DRD_(is_any_traced)(const Addr a1, const Addr a2)
 {
-  return bm_has_any_load(s_suppressed, a1, a2);
+  return bm_has_any_load(DRD_(s_suppressed), a1, a2);
 }
 
-void drd_suppression_stop_using_mem(const Addr a1, const Addr a2)
+void DRD_(suppression_stop_using_mem)(const Addr a1, const Addr a2)
 {
-  if (s_trace_suppression)
+  if (DRD_(s_trace_suppression))
   {
     Addr b;
     for (b = a1; b < a2; b++)
     {
-      if (bm_has_1(s_suppressed, b, eStore))
+      if (bm_has_1(DRD_(s_suppressed), b, eStore))
       {
         VG_(message)(Vg_DebugMsg,
                      "stop_using_mem(0x%lx, %ld) finish suppression of 0x%lx",
@@ -149,5 +154,5 @@
   }
   tl_assert(a1);
   tl_assert(a1 < a2);
-  bm_clear(s_suppressed, a1, a2);
+  bm_clear(DRD_(s_suppressed), a1, a2);
 }
diff --git a/drd/drd_suppression.h b/drd/drd_suppression.h
index cfe4a01..9484822 100644
--- a/drd/drd_suppression.h
+++ b/drd/drd_suppression.h
@@ -2,28 +2,29 @@
 #define __PUB_CORE_DRD_H
 
 
+#include "drd_basics.h"
 #include "pub_tool_basics.h"
 
 
-extern Bool g_any_address_traced;
+extern Bool DRD_(g_any_address_traced);
 
 
-void suppression_set_trace(const Bool trace_suppression);
-void drd_suppression_init(void);
-void drd_start_suppression(const Addr a1, const Addr a2,
+void DRD_(suppression_set_trace)(const Bool trace_suppression);
+void DRD_(suppression_init)(void);
+void DRD_(start_suppression)(const Addr a1, const Addr a2,
                            const char* const reason);
-void drd_finish_suppression(const Addr a1, const Addr a2);
-Bool drd_is_suppressed(const Addr a1, const Addr a2);
-Bool drd_is_any_suppressed(const Addr a1, const Addr a2);
-void drd_start_tracing_address_range(const Addr a1, const Addr a2);
-void drd_stop_tracing_address_range(const Addr a1, const Addr a2);
-Bool drd_is_any_traced(const Addr a1, const Addr a2);
-void drd_suppression_stop_using_mem(const Addr a1, const Addr a2);
+void DRD_(finish_suppression)(const Addr a1, const Addr a2);
+Bool DRD_(is_suppressed)(const Addr a1, const Addr a2);
+Bool DRD_(is_any_suppressed)(const Addr a1, const Addr a2);
+void DRD_(start_tracing_address_range)(const Addr a1, const Addr a2);
+void DRD_(stop_tracing_address_range)(const Addr a1, const Addr a2);
+Bool DRD_(is_any_traced)(const Addr a1, const Addr a2);
+void DRD_(suppression_stop_using_mem)(const Addr a1, const Addr a2);
 
 
-static __inline__ Bool drd_any_address_is_traced(void)
+static __inline__ Bool DRD_(any_address_is_traced)(void)
 {
-  return g_any_address_traced;
+  return DRD_(g_any_address_traced);
 }
 
 
diff --git a/drd/drd_thread.c b/drd/drd_thread.c
index 8ca0547..42f2144 100644
--- a/drd/drd_thread.c
+++ b/drd/drd_thread.c
@@ -266,9 +266,9 @@
 
   if (!  DRD_(get_check_stack_accesses)())
   {
-    drd_finish_suppression(thread_get_stack_max(drd_joinee)
-                           - thread_get_stack_size(drd_joinee),
-                           thread_get_stack_max(drd_joinee));
+    DRD_(finish_suppression)(thread_get_stack_max(drd_joinee)
+                             - thread_get_stack_size(drd_joinee),
+                             thread_get_stack_max(drd_joinee));
   }
   thread_delete(drd_joinee);
   mutex_thread_delete(drd_joinee);
diff --git a/drd/tests/drd_bitmap_test.c b/drd/tests/drd_bitmap_test.c
index f653f42..ea12300 100644
--- a/drd/tests/drd_bitmap_test.c
+++ b/drd/tests/drd_bitmap_test.c
@@ -39,7 +39,7 @@
 { UInt ret; va_list vargs; va_start(vargs, format); ret = vprintf(format, vargs); va_end(vargs); return ret; }
 UInt VG_(message)(VgMsgKind kind, const HChar* format, ...)
 { UInt ret; va_list vargs; va_start(vargs, format); ret = vprintf(format, vargs); va_end(vargs); printf("\n"); return ret; }
-Bool drd_is_suppressed(const Addr a1, const Addr a2)
+Bool DRD_(is_suppressed)(const Addr a1, const Addr a2)
 { assert(0); }
 
 
