diff --git a/debugger/break.c b/debugger/break.c
index 17e055e..acbfcb3 100644
--- a/debugger/break.c
+++ b/debugger/break.c
@@ -343,7 +343,7 @@
 
     for (ok = ModuleFirst(&entry); ok; ok = ModuleNext(&entry))
     {
-        if (!(pModule = MODULE_GetPtr16( entry.hModule ))) continue;
+        if (!(pModule = NE_GetPtr( entry.hModule ))) continue;
         if (pModule->flags & NE_FFLAGS_LIBMODULE) continue;  /* Library */
 
         if (!(pModule->flags & NE_FFLAGS_WIN32))  /* NE module */
diff --git a/debugger/dbg.y b/debugger/dbg.y
index f7963ef..7a06c40 100644
--- a/debugger/dbg.y
+++ b/debugger/dbg.y
@@ -548,24 +548,16 @@
 }
 
 
-/***********************************************************************
- *           DebugBreak32   (KERNEL32)
- */
-void DebugBreak32( CONTEXT *regs )
-{
-    const char *module = MODULE_GetModuleName( GetCurrentTask() );
-    fprintf( stderr, "%s called DebugBreak\n", module ? module : "???" );
-    DEBUG_context = *regs;
-    DEBUG_Main( SIGTRAP );
-}
 
 /***********************************************************************
- *           DebugBreak16   (KERNEL.203)
+ *           DebugBreak   (KERNEL.203) (KERNEL32.181)
  */
-void DebugBreak16( CONTEXT *regs )
+void DebugBreak( CONTEXT *regs )
 {
-    const char *module = MODULE_GetModuleName( GetCurrentTask() );
-    fprintf( stderr, "%s called DebugBreak\n", module ? module : "???" );
+    char module[10];
+    if (!GetModuleName( GetCurrentTask(), module, sizeof(module) ))
+        strcpy( module, "???" );
+    fprintf( stderr, "%s called DebugBreak\n", module );
     DEBUG_context = *regs;
     DEBUG_Main( SIGTRAP );
 }
diff --git a/debugger/dbgmain.c b/debugger/dbgmain.c
index 2f47132..1785714 100644
--- a/debugger/dbgmain.c
+++ b/debugger/dbgmain.c
@@ -50,11 +50,6 @@
   exit(0);
 }
 
-LPSTR MODULE_GetModuleName( HMODULE16 hModule )
-{
-  exit(0);
-}
-
 int PROFILE_GetWineIniString( const char *section, const char *key_name,
                                      const char *def, char *buffer, int len )
 {
@@ -103,7 +98,7 @@
   exit(0);
 }
 
-NE_MODULE *MODULE_GetPtr16( HMODULE16 hModule )
+NE_MODULE *NE_GetPtr( HMODULE16 hModule )
 {
   exit(0);
 }
diff --git a/debugger/hash.c b/debugger/hash.c
index 492769c..4befa47 100644
--- a/debugger/hash.c
+++ b/debugger/hash.c
@@ -877,7 +877,7 @@
 
     for (ok = ModuleFirst(&entry); ok; ok = ModuleNext(&entry))
     {
-        if (!(pModule = MODULE_GetPtr16( entry.hModule ))) continue;
+        if (!(pModule = NE_GetPtr( entry.hModule ))) continue;
         fprintf( stderr, " %s", entry.szModule );
 
         if (!(pModule->flags & NE_FFLAGS_WIN32))  /* NE module */
diff --git a/debugger/stabs.c b/debugger/stabs.c
index bb670f1..36fbe2c 100644
--- a/debugger/stabs.c
+++ b/debugger/stabs.c
@@ -1144,7 +1144,7 @@
    */
   ehptr = (Elf32_Ehdr *) addr;
 
-  if( load_offset == NULL )
+  if( load_offset == 0 )
     {
       DEBUG_RegisterELFDebugInfo(ehptr->e_entry, statbuf.st_size, filename);
     }
@@ -1271,7 +1271,7 @@
     }
 
   if(    (dynpnt->d_tag != DT_DEBUG)
-      || (dynpnt->d_un.d_ptr == NULL) )
+      || (dynpnt->d_un.d_ptr == 0) )
     {
       goto leave;
     }
@@ -1296,7 +1296,7 @@
        * shared libraries which may be loaded.
        */
       ehdr = (Elf32_Ehdr *) lpnt->l_addr;
-      if( (lpnt->l_addr == NULL) || (ehdr->e_type != ET_DYN) )
+      if( (lpnt->l_addr == 0) || (ehdr->e_type != ET_DYN) )
 	{
 	  continue;
 	}
