diff --git a/include/asterisk/lock.h b/include/asterisk/lock.h
index e355dcb7439d4f318faf70f0160845476b21ee41..03bbea325116b093a8be0124a855435d959746b6 100644
--- a/include/asterisk/lock.h
+++ b/include/asterisk/lock.h
@@ -206,15 +206,19 @@ static inline int __ast_pthread_mutex_init_attr(int track, const char *filename,
 						const char *mutex_name, ast_mutex_t *t,
 						pthread_mutexattr_t *attr) 
 {
+
 #ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
-	int canlog = strcmp(filename, "logger.c");
+	int canlog = strcmp(filename, "logger.c") && track;
 
 	if ((t->mutex) != ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
 		if ((t->mutex) != (empty_mutex)) {
 			__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is already initialized.\n",
 					   filename, lineno, func, mutex_name);
-			__ast_mutex_logger("%s line %d (%s): Error: previously initialization of mutex '%s'.\n",
+			/* Don't print track info about nontracked mutex */
+			if (track) {
+				__ast_mutex_logger("%s line %d (%s): Error: previously initialization of mutex '%s'.\n",
 					   t->file[0], t->lineno[0], t->func[0], mutex_name);
+			}
 			DO_THREAD_CRASH;
 			return 0;
 		}
@@ -248,9 +252,11 @@ static inline int __ast_pthread_mutex_destroy(const char *filename, int lineno,
 	int canlog = strcmp(filename, "logger.c");
 
 #ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
+	canlog &= t->track;
 	if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
 		__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n",
 				   filename, lineno, func, mutex_name);
+		return 0; /* mutex is uninitialized */
 	}
 #endif
 
@@ -302,10 +308,13 @@ static inline int __ast_pthread_mutex_lock(const char *filename, int lineno, con
 		ast_store_lock_info(AST_MUTEX, filename, lineno, func, mutex_name, &t->mutex);
 
 #if defined(AST_MUTEX_INIT_W_CONSTRUCTORS)
+	canlog &= t->track;
+
 	if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
 		__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n",
 				 filename, lineno, func, mutex_name);
-		ast_mutex_init(t);
+		__ast_pthread_mutex_init(t->track, filename, lineno, func, mutex_name, t);
+			
 	}
 #endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
 
@@ -379,10 +388,12 @@ static inline int __ast_pthread_mutex_trylock(const char *filename, int lineno,
 	int canlog = strcmp(filename, "logger.c");
 
 #if defined(AST_MUTEX_INIT_W_CONSTRUCTORS)
+	canlog &= t->track;
+	
 	if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
 		__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n",
 				   filename, lineno, func, mutex_name);
-		ast_mutex_init(t);
+		__ast_pthread_mutex_init(t->track, filename, lineno, func, mutex_name, t);
 	}
 #endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
 
@@ -418,6 +429,8 @@ static inline int __ast_pthread_mutex_unlock(const char *filename, int lineno, c
 	int canlog = strcmp(filename, "logger.c");
 
 #ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
+	canlog &= t->track;
+	
 	if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
 		__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n",
 				   filename, lineno, func, mutex_name);
@@ -491,6 +504,7 @@ static inline int __ast_cond_wait(const char *filename, int lineno, const char *
 	int canlog = strcmp(filename, "logger.c");
 
 #ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
+	canlog &= t->track;
 	if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
 		__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n",
 				   filename, lineno, func, mutex_name);
@@ -556,6 +570,7 @@ static inline int __ast_cond_timedwait(const char *filename, int lineno, const c
 	int canlog = strcmp(filename, "logger.c");
 
 #ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
+	canlog &= t->track;
 	if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
 		__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n",
 				   filename, lineno, func, mutex_name);