- make sure to include dmalloc.h at the very end of busybox.h or libbb.h.
diff --git a/include/libbb.h b/include/libbb.h
index b979477..c380ed7 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -34,15 +34,11 @@
 
 #include <netdb.h>
 
-#ifdef DMALLOC
-#include <dmalloc.h>
-#endif
-
 #include <features.h>
 
 #include "bb_config.h"
 #ifdef CONFIG_SELINUX
-#include <selinux/selinux.h>  
+#include <selinux/selinux.h>
 #endif
 
 #include "pwd_.h"
@@ -178,12 +174,12 @@
 extern struct BB_applet *find_applet_by_name(const char *name);
 void run_applet_by_name(const char *name, int argc, char **argv);
 
-//#warning is this needed anymore?
-#ifndef DMALLOC
-extern void *xmalloc (size_t size);
+/* dmalloc will redefine these to it's own implementation. It is safe
+ * to have the prototypes here unconditionally.  */
+extern void *xmalloc(size_t size);
 extern void *xrealloc(void *old, size_t size);
 extern void *xcalloc(size_t nmemb, size_t size);
-#endif
+
 extern char *bb_xstrdup (const char *s);
 extern char *bb_xstrndup (const char *s, int n);
 extern char *safe_strncpy(char *dst, const char *src, size_t size);
@@ -420,7 +416,7 @@
 #ifdef CONFIG_SELINUX
 extern void renew_current_security_context(void);
 extern void set_current_security_context(security_context_t sid);
-#endif 
+#endif
 extern int run_parts(char **args, const unsigned char test_mode, char **env);
 extern int restricted_shell ( const char *shell );
 extern void setup_environment ( const char *shell, int loginshell, int changeenv, const struct passwd *pw );
@@ -475,4 +471,9 @@
 #define HASH_MD5	2
 extern int hash_fd(int fd, const size_t size, const uint8_t hash_algo, uint8_t *hashval);
 
+/* busybox.h will include dmalloc later for us, else include it here.  */
+#if !defined _BB_INTERNAL_H_ && defined DMALLOC
+#include <dmalloc.h>
+#endif
+
 #endif /* __LIBCONFIG_H__ */