diff --git a/Makefile b/Makefile
index a2b20785f95be0351f9bac7587e5b25827ab9b0b..39f965daca4d05104a42892cfa68f364038f4b93 100755
--- a/Makefile
+++ b/Makefile
@@ -49,7 +49,7 @@ TRACE_FRAMES = #-DTRACE_FRAMES
 #   *CLI> show memory allocations [filename]
 #   *CLI> show memory summary [filename]
 #
-MALLOC_DEBUG = #-include $(PWD)/include/asterisk/astmm.h
+MALLOC_DEBUG = -include $(PWD)/include/asterisk/astmm.h
 
 # Where to install asterisk after compiling
 # Default -> leave empty
diff --git a/astmm.c b/astmm.c
index eea3229c35f275ed9b3537bdd6473370e1639cc7..49cb3bbc4c768644b82edb4c5ce75f8bcecb4564 100755
--- a/astmm.c
+++ b/astmm.c
@@ -19,7 +19,10 @@
 #include <stdio.h>
 #include <string.h>
 #include <pthread.h>
+#include <time.h>
 #include <asterisk/cli.h>
+#include <asterisk/logger.h>
+#include <asterisk/options.h>
 
 #define SOME_PRIME 563
 
@@ -37,6 +40,8 @@
 #undef strndup
 #undef free
 
+static FILE *mmlog;
+
 static struct ast_region {
 	struct ast_region *next;
 	char file[40];
@@ -75,6 +80,8 @@ static inline void *__ast_alloc_region(size_t size, int which, const char *file,
 	pthread_mutex_unlock(&reglock);
 	if (!reg) {
 		fprintf(stderr, "Out of memory :(\n");
+		if (mmlog)
+			fprintf(stderr, "%ld - Out of memory\n", time(NULL));
 	}
 	return ptr;
 }
@@ -119,9 +126,13 @@ static void __ast_free_region(void *ptr, const char *file, int lineno, const cha
 	pthread_mutex_unlock(&reglock);
 	if (reg) {
 		free(reg);
-	} else
+	} else {
 		fprintf(stderr, "WARNING: Freeing unused memory at %p, in %s of %s, line %d\n",
 			ptr, func, file, lineno);
+		if (mmlog)
+			fprintf(mmlog, "%ld - WARNING: Freeing unused memory at %p, in %s of %s, line %d\n", time(NULL),
+			ptr, func, file, lineno);
+	}
 }
 
 void *__ast_calloc(size_t nmemb, size_t size, const char *file, int lineno, const char *func) 
@@ -152,6 +163,9 @@ void *__ast_realloc(void *ptr, size_t size, const char *file, int lineno, const
 		if (!len) {
 			fprintf(stderr, "WARNING: Realloc of unalloced memory at %p, in %s of %s, line %d\n",
 				ptr, func, file, lineno);
+			if (mmlog)
+				fprintf(mmlog, "%ld - WARNING: Realloc of unalloced memory at %p, in %s of %s, line %d\n",
+					time(NULL), ptr, func, file, lineno);
 			return NULL;
 		}
 	}
@@ -314,6 +328,11 @@ void __ast_mm_init(void)
 {
 	ast_cli_register(&show_memory_allocations_cli);
 	ast_cli_register(&show_memory_summary_cli);
+	mmlog = fopen("/var/log/asterisk/mmlog", "a+");
+	if (option_verbose)
+		ast_verbose("Asterisk Malloc Debugger Started (see /var/log/mmlog)\n");
+	if (mmlog)
+		fprintf(mmlog, "%ld - New session\n", time(NULL));
 }
 
 #endif