diff --git a/wp-admin/css/list-tables.css b/wp-admin/css/list-tables.css
index 67ef22e..b4139e8 100644
--- a/wp-admin/css/list-tables.css
+++ b/wp-admin/css/list-tables.css
@@ -549,10 +549,15 @@ th.asc a:focus span.sorting-indicator:before {
 	content: "\f142";
 }
 
+tr .locked-indicator {
+	display: none;
+}
+
 tr.wp-locked .locked-indicator {
 	margin-left: 6px;
 	height: 20px;
 	width: 16px;
+	display: block;
 }
 
 tr.wp-locked .locked-indicator:before {
diff --git a/wp-admin/edit.php b/wp-admin/edit.php
index 120140a..4e03a4d 100644
--- a/wp-admin/edit.php
+++ b/wp-admin/edit.php
@@ -173,7 +173,7 @@ if ( $doaction ) {
 			 *
 			 * @param string $sendback The redirect URL.
 			 * @param string $doaction The action being taken.
-			 * @param array  $post_ids The post IDs to take the action on. 
+			 * @param array  $post_ids The post IDs to take the action on.
 			 */
 			$sendback = apply_filters( 'handle_bulk_actions-' . get_current_screen()->id, $sendback, $doaction, $post_ids );
 			break;
@@ -192,6 +192,12 @@ $wp_list_table->prepare_items();
 
 wp_enqueue_script('inline-edit-post');
 wp_enqueue_script('heartbeat');
+wp_localize_script( 'inline-edit-post', '_wpInlineEditPostStrings', array(
+	'was_unlocked'	=> sprintf( __( 'One %s is not being edited anymore' ), mb_strtolower( $post_type_object->labels->singular_name ) ),
+	'were_unlocked'	=> sprintf( __( '%s are not being edited anymore' ), mb_strtolower( $post_type_object->labels->name ) ),
+	'was_locked'	=> sprintf( __( 'One %s is being edited' ), mb_strtolower( $post_type_object->labels->singular_name ) ),
+	'were_locked'	=> sprintf( __( '%s are being edited' ), mb_strtolower( $post_type_object->labels->name ) ),
+) );
 
 $title = $post_type_object->labels->name;
 
diff --git a/wp-admin/includes/class-wp-posts-list-table.php b/wp-admin/includes/class-wp-posts-list-table.php
index 506dded..f614f70 100644
--- a/wp-admin/includes/class-wp-posts-list-table.php
+++ b/wp-admin/includes/class-wp-posts-list-table.php
@@ -829,7 +829,11 @@ class WP_Posts_List_Table extends WP_List_Table {
 				printf( __( 'Select %s' ), _draft_or_post_title() );
 			?></label>
 			<input id="cb-select-<?php the_ID(); ?>" type="checkbox" name="post[]" value="<?php the_ID(); ?>" />
-			<div class="locked-indicator"></div>
+			<div class="locked-indicator">
+				<span class="screen-reader-text"><?php
+					printf( __( '%s is currently being edited' ), _draft_or_post_title() );
+				?></span>
+			</div>
 		<?php endif;
 	}
 
diff --git a/wp-admin/js/inline-edit-post.js b/wp-admin/js/inline-edit-post.js
index 3a65805..7c0ca6f 100644
--- a/wp-admin/js/inline-edit-post.js
+++ b/wp-admin/js/inline-edit-post.js
@@ -330,7 +330,7 @@ $( document ).ready( function(){ inlineEditPost.init(); } );
 
 // Show/hide locks on posts
 $( document ).on( 'heartbeat-tick.wp-check-locked-posts', function( e, data ) {
-	var locked = data['wp-check-locked-posts'] || {};
+	var locked = data['wp-check-locked-posts'] || {}, unlocked_announcements = 0, locked_announcements = 0;
 
 	$('#the-list tr').each( function(i, el) {
 		var key = el.id, row = $(el), lock_data, avatar;
@@ -346,12 +346,27 @@ $( document ).on( 'heartbeat-tick.wp-check-locked-posts', function( e, data ) {
 					row.find('.column-title .locked-avatar').empty().append( avatar );
 				}
 				row.addClass('wp-locked');
+				locked_announcements++;
 			}
 		} else if ( row.hasClass('wp-locked') ) {
 			// Make room for the CSS animation
 			row.removeClass('wp-locked').delay(1000).find('.locked-info span').empty();
+			unlocked_announcements++;
 		}
 	});
+
+	// Make announcements
+	if ( locked_announcements > 1 ) {
+		wp.a11y.speak( locked_announcements + " " + _wpInlineEditPostStrings.were_locked );
+	} else if ( locked_announcements == 1 ) {
+		wp.a11y.speak( _wpInlineEditPostStrings.was_locked );
+	}
+
+	if ( unlocked_announcements > 1 ) {
+		wp.a11y.speak( unlocked_announcements + " " + _wpInlineEditPostStrings.were_unlocked );
+	} else if ( unlocked_announcements == 1 ) {
+		wp.a11y.speak( _wpInlineEditPostStrings.was_unlocked );
+	}
 }).on( 'heartbeat-send.wp-check-locked-posts', function( e, data ) {
 	var check = [];
 
