diff --git a/CHANGES b/CHANGES
index 5e0cb47f89ff7f788a49c99b3684670a8a391560..0f0402cd25aa28be7706dfb4b159b72921f718c3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -73,6 +73,11 @@ MixMonitor
  * A new function, MIXMONITOR, has been added to allow access to individual
    instances of MixMonitor on a channel.
 
+Debugging
+-------------------------
+ * Core Show Locks output now includes Thread/LWP ID if the platform
+   supports this feature.
+
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 12.0.0 to Asterisk 12.1.0 ------------
 ------------------------------------------------------------------------------
diff --git a/main/utils.c b/main/utils.c
index b1a95425c503a76cd317eb76bb8222c5132ea82c..3d8e4c261ffa4196df7ca98d8c9843aa73555e40 100644
--- a/main/utils.c
+++ b/main/utils.c
@@ -589,11 +589,11 @@ struct thr_lock_info {
 	/*! This is the actual container of info for what locks this thread holds */
 	struct {
 		const char *file;
-		int line_num;
 		const char *func;
 		const char *lock_name;
 		void *lock_addr;
 		int times_locked;
+		int line_num;
 		enum ast_lock_type type;
 		/*! This thread is waiting on this lock */
 		int pending:2;
@@ -607,6 +607,8 @@ struct thr_lock_info {
 	 *  The index (num_locks - 1) has the info on the last one in the
 	 *  locks member */
 	unsigned int num_locks;
+	/*! The LWP id (which GDB prints) */
+	int lwp;
 	/*! Protects the contents of the locks member
 	 * Intentionally not ast_mutex_t */
 	pthread_mutex_t lock;
@@ -1049,8 +1051,13 @@ struct ast_str *ast_dump_locks(void)
 			}
 
 			if (!header_printed) {
-				ast_str_append(&str, 0, "=== Thread ID: 0x%lx (%s)\n", (long) lock_info->thread_id,
-					lock_info->thread_name);
+				if (lock_info->lwp != -1) {
+					ast_str_append(&str, 0, "=== Thread ID: 0x%lx LWP:%d (%s)\n",
+						(long) lock_info->thread_id, lock_info->lwp, lock_info->thread_name);
+				} else {
+					ast_str_append(&str, 0, "=== Thread ID: 0x%lx (%s)\n",
+						(long) lock_info->thread_id, lock_info->thread_name);
+				}
 				header_printed = 1;
 			}
 
@@ -1145,6 +1152,7 @@ static void *dummy_start(void *data)
 		return NULL;
 
 	lock_info->thread_id = pthread_self();
+	lock_info->lwp = ast_get_tid();
 	lock_info->thread_name = strdup(a.name);
 
 	pthread_mutexattr_init(&mutex_attr);