diff --git a/jemalloc/src/jemalloc.c b/jemalloc/src/jemalloc.c
index 31bb00e..01eb284 100644
--- a/jemalloc/src/jemalloc.c
+++ b/jemalloc/src/jemalloc.c
@@ -1,4 +1,32 @@
 /*-
+ * Copyright (C) 2009 Facebook, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * * Neither the name of Facebook, Inc. nor the names of its contributors may
+ *   be used to endorse or promote products derived from this software without
+ *   specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ *******************************************************************************
+ *
  * Copyright (C) 2006-2008 Jason Evans <jasone@FreeBSD.org>.
  * All rights reserved.
  *
@@ -721,7 +749,7 @@
 	/*
 	 * bins is used to store rings of free regions of the following sizes,
 	 * assuming a 16-byte quantum, 4kB page size, and default
-	 * MALLOC_OPTIONS.
+	 * JEMALLOC_OPTIONS.
 	 *
 	 *   bins[i] | size |
 	 *   --------+------+
@@ -1037,7 +1065,7 @@
 /*
  * Runtime configuration options.
  */
-const char	*_malloc_options;
+const char	*jemalloc_options;
 
 #ifndef MALLOC_PRODUCTION
 static bool	opt_abort = true;
@@ -1185,8 +1213,8 @@
 static bool	size2bin_init_hard(void);
 static unsigned	malloc_ncpus(void);
 static bool	malloc_init_hard(void);
-void		_malloc_prefork(void);
-void		_malloc_postfork(void);
+void		jemalloc_prefork(void);
+void		jemalloc_postfork(void);
 
 /*
  * End function prototypes.
@@ -1203,8 +1231,7 @@
 	write(STDERR_FILENO, p4, strlen(p4));
 }
 
-#define	_malloc_message malloc_message
-void	(*_malloc_message)(const char *p1, const char *p2, const char *p3,
+void	(*jemalloc_message)(const char *p1, const char *p2, const char *p3,
 	    const char *p4) = wrtmessage;
 
 /*
@@ -1238,9 +1265,9 @@
 #  define assert(e) do {						\
 	if (!(e)) {							\
 		char line_buf[UMAX2S_BUFSIZE];				\
-		_malloc_message(__FILE__, ":", umax2s(__LINE__,		\
+		jemalloc_message(__FILE__, ":", umax2s(__LINE__,	\
 		    line_buf), ": Failed assertion: ");			\
-		_malloc_message("\"", #e, "\"\n", "");			\
+		jemalloc_message("\"", #e, "\"\n", "");			\
 		abort();						\
 	}								\
 } while (0)
@@ -1271,13 +1298,6 @@
 }
 #endif
 
-static inline const char *
-_getprogname(void)
-{
-
-	return ("<jemalloc>");
-}
-
 #ifdef MALLOC_STATS
 /*
  * Print to stderr in such a way as to (hopefully) avoid memory allocation.
@@ -1291,7 +1311,7 @@
 	va_start(ap, format);
 	vsnprintf(buf, sizeof(buf), format, ap);
 	va_end(ap);
-	_malloc_message(buf, "", "", "");
+	jemalloc_message(buf, "", "", "");
 }
 #endif
 
@@ -1822,8 +1842,8 @@
 			char buf[STRERROR_BUF];
 
 			strerror_r(errno, buf, sizeof(buf));
-			_malloc_message(_getprogname(),
-			    ": (malloc) Error in munmap(): ", buf, "\n");
+			jemalloc_message("<jemalloc>",
+			    ": Error in munmap(): ", buf, "\n");
 			if (opt_abort)
 				abort();
 		}
@@ -1843,8 +1863,8 @@
 		char buf[STRERROR_BUF];
 
 		strerror_r(errno, buf, sizeof(buf));
-		_malloc_message(_getprogname(),
-		    ": (malloc) Error in munmap(): ", buf, "\n");
+		jemalloc_message("<jemalloc>",
+		    ": Error in munmap(): ", buf, "\n");
 		if (opt_abort)
 			abort();
 	}
@@ -4221,8 +4241,8 @@
 	 * by using arenas[0].  In practice, this is an extremely unlikely
 	 * failure.
 	 */
-	_malloc_message(_getprogname(),
-	    ": (malloc) Error initializing arena\n", "", "");
+	jemalloc_message("<jemalloc>",
+	    ": Error initializing arena\n", "", "");
 	if (opt_abort)
 		abort();
 
@@ -4525,66 +4545,67 @@
 
 	if (opt_print_stats) {
 		char s[UMAX2S_BUFSIZE];
-		_malloc_message("___ Begin malloc statistics ___\n", "", "",
+		jemalloc_message("___ Begin jemalloc statistics ___\n", "", "",
 		    "");
-		_malloc_message("Assertions ",
+		jemalloc_message("Assertions ",
 #ifdef NDEBUG
 		    "disabled",
 #else
 		    "enabled",
 #endif
 		    "\n", "");
-		_malloc_message("Boolean MALLOC_OPTIONS: ",
+		jemalloc_message("Boolean JEMALLOC_OPTIONS: ",
 		    opt_abort ? "A" : "a", "", "");
 #ifdef MALLOC_DSS
-		_malloc_message(opt_dss ? "D" : "d", "", "", "");
+		jemalloc_message(opt_dss ? "D" : "d", "", "", "");
 #endif
 #ifdef MALLOC_MAG
-		_malloc_message(opt_mag ? "G" : "g", "", "", "");
+		jemalloc_message(opt_mag ? "G" : "g", "", "", "");
 #endif
-		_malloc_message(opt_junk ? "J" : "j", "", "", "");
+		jemalloc_message(opt_junk ? "J" : "j", "", "", "");
 #ifdef MALLOC_DSS
-		_malloc_message(opt_mmap ? "M" : "m", "", "", "");
+		jemalloc_message(opt_mmap ? "M" : "m", "", "", "");
 #endif
-		_malloc_message(opt_utrace ? "PU" : "Pu",
+		jemalloc_message(opt_utrace ? "PU" : "Pu",
 		    opt_sysv ? "V" : "v",
 		    opt_xmalloc ? "X" : "x",
 		    opt_zero ? "Z\n" : "z\n");
 
-		_malloc_message("CPUs: ", umax2s(ncpus, s), "\n", "");
-		_malloc_message("Max arenas: ", umax2s(narenas, s), "\n", "");
+		jemalloc_message("CPUs: ", umax2s(ncpus, s), "\n", "");
+		jemalloc_message("Max arenas: ", umax2s(narenas, s), "\n", "");
 #ifdef MALLOC_BALANCE
-		_malloc_message("Arena balance threshold: ",
+		jemalloc_message("Arena balance threshold: ",
 		    umax2s(opt_balance_threshold, s), "\n", "");
 #endif
-		_malloc_message("Pointer size: ", umax2s(sizeof(void *), s),
+		jemalloc_message("Pointer size: ", umax2s(sizeof(void *), s),
 		    "\n", "");
-		_malloc_message("Quantum size: ", umax2s(QUANTUM, s), "\n", "");
-		_malloc_message("Cacheline size (assumed): ", umax2s(CACHELINE,
-		    s), "\n", "");
+		jemalloc_message("Quantum size: ", umax2s(QUANTUM, s), "\n",
+		    "");
+		jemalloc_message("Cacheline size (assumed): ",
+		    umax2s(CACHELINE, s), "\n", "");
 #ifdef MALLOC_TINY
-		_malloc_message("Tiny 2^n-spaced sizes: [", umax2s((1U <<
+		jemalloc_message("Tiny 2^n-spaced sizes: [", umax2s((1U <<
 		    TINY_MIN_2POW), s), "..", "");
-		_malloc_message(umax2s((qspace_min >> 1), s), "]\n", "", "");
+		jemalloc_message(umax2s((qspace_min >> 1), s), "]\n", "", "");
 #endif
-		_malloc_message("Quantum-spaced sizes: [", umax2s(qspace_min,
+		jemalloc_message("Quantum-spaced sizes: [", umax2s(qspace_min,
 		    s), "..", "");
-		_malloc_message(umax2s(qspace_max, s), "]\n", "", "");
-		_malloc_message("Cacheline-spaced sizes: [", umax2s(cspace_min,
+		jemalloc_message(umax2s(qspace_max, s), "]\n", "", "");
+		jemalloc_message("Cacheline-spaced sizes: [",
+		    umax2s(cspace_min, s), "..", "");
+		jemalloc_message(umax2s(cspace_max, s), "]\n", "", "");
+		jemalloc_message("Subpage-spaced sizes: [", umax2s(sspace_min,
 		    s), "..", "");
-		_malloc_message(umax2s(cspace_max, s), "]\n", "", "");
-		_malloc_message("Subpage-spaced sizes: [", umax2s(sspace_min,
-		    s), "..", "");
-		_malloc_message(umax2s(sspace_max, s), "]\n", "", "");
+		jemalloc_message(umax2s(sspace_max, s), "]\n", "", "");
 #ifdef MALLOC_MAG
-		_malloc_message("Rounds per magazine: ", umax2s(max_rounds, s),
-		    "\n", "");
+		jemalloc_message("Rounds per magazine: ", umax2s(max_rounds,
+		    s), "\n", "");
 #endif
-		_malloc_message("Max dirty pages per arena: ",
+		jemalloc_message("Max dirty pages per arena: ",
 		    umax2s(opt_dirty_max, s), "\n", "");
 
-		_malloc_message("Chunk size: ", umax2s(chunksize, s), "", "");
-		_malloc_message(" (2^", umax2s(opt_chunk_2pow, s), ")\n", "");
+		jemalloc_message("Chunk size: ", umax2s(chunksize, s), "", "");
+		jemalloc_message(" (2^", umax2s(opt_chunk_2pow, s), ")\n", "");
 
 #ifdef MALLOC_STATS
 		{
@@ -4665,7 +4686,8 @@
 			}
 		}
 #endif /* #ifdef MALLOC_STATS */
-		_malloc_message("--- End malloc statistics ---\n", "", "", "");
+		jemalloc_message("--- End jemalloc statistics ---\n", "", "",
+		    "");
 	}
 }
 
@@ -4884,10 +4906,10 @@
 		/* Get runtime configuration. */
 		switch (i) {
 		case 0:
-			if ((linklen = readlink("/etc/malloc.conf", buf,
+			if ((linklen = readlink("/etc/jemalloc.conf", buf,
 						sizeof(buf) - 1)) != -1) {
 				/*
-				 * Use the contents of the "/etc/malloc.conf"
+				 * Use the contents of the "/etc/jemalloc.conf"
 				 * symbolic link's name.
 				 */
 				buf[linklen] = '\0';
@@ -4900,11 +4922,11 @@
 			break;
 		case 1:
 			if (issetugid() == 0 && (opts =
-			    getenv("MALLOC_OPTIONS")) != NULL) {
+			    getenv("JEMALLOC_OPTIONS")) != NULL) {
 				/*
 				 * Do nothing; opts is already initialized to
-				 * the value of the MALLOC_OPTIONS environment
-				 * variable.
+				 * the value of the JEMALLOC_OPTIONS
+				 * environment variable.
 				 */
 			} else {
 				/* No configuration specified. */
@@ -4913,12 +4935,12 @@
 			}
 			break;
 		case 2:
-			if (_malloc_options != NULL) {
+			if (jemalloc_options != NULL) {
 				/*
 				 * Use options that were compiled into the
 				 * program.
 				 */
-				opts = _malloc_options;
+				opts = jemalloc_options;
 			} else {
 				/* No configuration specified. */
 				buf[0] = '\0';
@@ -5108,8 +5130,8 @@
 
 					cbuf[0] = opts[j];
 					cbuf[1] = '\0';
-					_malloc_message(_getprogname(),
-					    ": (malloc) Unsupported character "
+					jemalloc_message("<jemalloc>",
+					    ": Unsupported character "
 					    "in malloc options: '", cbuf,
 					    "'\n");
 				}
@@ -5131,7 +5153,7 @@
 	}
 
 	/* Register fork handlers. */
-	pthread_atfork(_malloc_prefork, _malloc_postfork, _malloc_postfork);
+	pthread_atfork(jemalloc_prefork, jemalloc_postfork, jemalloc_postfork);
 
 #ifdef MALLOC_MAG
 	/*
@@ -5380,8 +5402,8 @@
 RETURN:
 	if (ret == NULL) {
 		if (opt_xmalloc) {
-			_malloc_message(_getprogname(),
-			    ": (malloc) Error in malloc(): out of memory\n", "",
+			jemalloc_message("<jemalloc>",
+			    ": Error in malloc(): out of memory\n", "",
 			    "");
 			abort();
 		}
@@ -5405,8 +5427,8 @@
 		if (((alignment - 1) & alignment) != 0
 		    || alignment < sizeof(void *)) {
 			if (opt_xmalloc) {
-				_malloc_message(_getprogname(),
-				    ": (malloc) Error in posix_memalign(): "
+				jemalloc_message("<jemalloc>",
+				    ": Error in posix_memalign(): "
 				    "invalid alignment\n", "", "");
 				abort();
 			}
@@ -5420,8 +5442,8 @@
 
 	if (result == NULL) {
 		if (opt_xmalloc) {
-			_malloc_message(_getprogname(),
-			": (malloc) Error in posix_memalign(): out of memory\n",
+			jemalloc_message("<jemalloc>",
+			": Error in posix_memalign(): out of memory\n",
 			"", "");
 			abort();
 		}
@@ -5474,8 +5496,8 @@
 RETURN:
 	if (ret == NULL) {
 		if (opt_xmalloc) {
-			_malloc_message(_getprogname(),
-			    ": (malloc) Error in calloc(): out of memory\n", "",
+			jemalloc_message("<jemalloc>",
+			    ": Error in calloc(): out of memory\n", "",
 			    "");
 			abort();
 		}
@@ -5509,8 +5531,8 @@
 
 		if (ret == NULL) {
 			if (opt_xmalloc) {
-				_malloc_message(_getprogname(),
-				    ": (malloc) Error in realloc(): out of "
+				jemalloc_message("<jemalloc>",
+				    ": Error in realloc(): out of "
 				    "memory\n", "", "");
 				abort();
 			}
@@ -5524,8 +5546,8 @@
 
 		if (ret == NULL) {
 			if (opt_xmalloc) {
-				_malloc_message(_getprogname(),
-				    ": (malloc) Error in realloc(): out of "
+				jemalloc_message("<jemalloc>",
+				    ": Error in realloc(): out of "
 				    "memory\n", "", "");
 				abort();
 			}
@@ -5586,7 +5608,7 @@
  * thread caches.
  */
 void
-_malloc_thread_cleanup(void)
+jemalloc_thread_cleanup(void)
 {
 
 #ifdef MALLOC_MAG
@@ -5608,7 +5630,7 @@
  */
 
 void
-_malloc_prefork(void)
+jemalloc_prefork(void)
 {
 	bool again;
 	unsigned i, j;
@@ -5656,7 +5678,7 @@
 }
 
 void
-_malloc_postfork(void)
+jemalloc_postfork(void)
 {
 	unsigned i;
 	arena_t *larenas[narenas];
