Index: wp-admin/edit-tags.php
===================================================================
--- wp-admin/edit-tags.php	(revision 19091)
+++ wp-admin/edit-tags.php	(working copy)
@@ -42,7 +42,7 @@
 	$submenu_file = "edit-tags.php?taxonomy=$taxonomy";
 }
 
-add_screen_option( 'per_page', array('label' => $title, 'default' => 20, 'option' => 'edit_' . $tax->name . '_per_page') );
+add_screen_option( 'per_page', array('label' => $title, 'default' => 20, 'option' => _convert_key_to_option( 'edit_' . $tax->name . '_per_page' ) ) );
 
 switch ( $wp_list_table->current_action() ) {
 
Index: wp-admin/includes/class-wp-plugins-list-table.php
===================================================================
--- wp-admin/includes/class-wp-plugins-list-table.php	(revision 19091)
+++ wp-admin/includes/class-wp-plugins-list-table.php	(working copy)
@@ -130,7 +130,7 @@
 			uasort( $this->items, array( &$this, '_order_callback' ) );
 		}
 
-		$plugins_per_page = $this->get_items_per_page( str_replace( '-', '_', $screen->id . '_per_page' ), 999 );
+		$plugins_per_page = $this->get_items_per_page( _convert_key_to_option( $screen->id . '_per_page' ), 999 );
 
 		$start = ( $page - 1 ) * $plugins_per_page;
 
Index: wp-admin/includes/class-wp-posts-list-table.php
===================================================================
--- wp-admin/includes/class-wp-posts-list-table.php	(revision 19091)
+++ wp-admin/includes/class-wp-posts-list-table.php	(working copy)
@@ -94,7 +94,7 @@
 
 		$total_items = $this->hierarchical_display ? $wp_query->post_count : $wp_query->found_posts;
 
-		$per_page = $this->get_items_per_page( 'edit_' . $post_type . '_per_page' );
+		$per_page = $this->get_items_per_page( _convert_key_to_option( 'edit_' . $post_type . '_per_page' ) );
  		$per_page = apply_filters( 'edit_posts_per_page', $per_page, $post_type );
 
 		if ( $this->hierarchical_display )
Index: wp-admin/includes/class-wp-terms-list-table.php
===================================================================
--- wp-admin/includes/class-wp-terms-list-table.php	(revision 19091)
+++ wp-admin/includes/class-wp-terms-list-table.php	(working copy)
@@ -42,7 +42,7 @@
 	function prepare_items() {
 		global $taxonomy;
 
-		$tags_per_page = $this->get_items_per_page( 'edit_' .  $taxonomy . '_per_page' );
+		$tags_per_page = $this->get_items_per_page( _convert_key_to_option( 'edit_' .  $taxonomy . '_per_page' ) );
 
 		if ( 'post_tag' == $taxonomy ) {
 			$tags_per_page = apply_filters( 'edit_tags_per_page', $tags_per_page );
Index: wp-admin/includes/misc.php
===================================================================
--- wp-admin/includes/misc.php	(revision 19091)
+++ wp-admin/includes/misc.php	(working copy)
@@ -313,6 +313,18 @@
 }
 
 /**
+ * Convert a key to an appropriate option name.
+ *
+ * @since 3.3.0
+ *
+ * @param string $key A key to convert, e.g. "edit_{$post_type}_per_page".
+ * @return string Option name.
+ */
+function _convert_key_to_option( $key ) {
+	return str_replace( '-', '_', $key );
+}
+
+/**
  * Saves option for number of rows when listing posts, pages, comments, etc.
  *
  * @since 2.8
@@ -330,14 +342,14 @@
 		if ( !preg_match( '/^[a-z_-]+$/', $option ) )
 			return;
 
-		$option = str_replace('-', '_', $option);
+		$option = _convert_key_to_option( $option );
 
 		$map_option = $option;
 		$type = str_replace('edit_', '', $map_option);
 		$type = str_replace('_per_page', '', $type);
-		if ( in_array($type, get_post_types()) )
+		if ( in_array( $type, array_map( '_convert_key_to_option', get_post_types() ) ) )
 			$map_option = 'edit_per_page';
-		if ( in_array( $type, get_taxonomies()) )
+		if ( in_array( $type, array_map( '_convert_key_to_option', get_taxonomies() ) ) )
 			$map_option = 'edit_tags_per_page';
 
 
Index: wp-admin/includes/post.php
===================================================================
--- wp-admin/includes/post.php	(revision 19091)
+++ wp-admin/includes/post.php	(working copy)
@@ -871,7 +871,7 @@
 	elseif ( isset($q['post_status']) && 'pending' == $q['post_status'] )
 		$order = 'ASC';
 
-	$per_page = 'edit_' . $post_type . '_per_page';
+	$per_page = _convert_key_to_option( 'edit_' . $post_type . '_per_page' );
 	$posts_per_page = (int) get_user_option( $per_page );
 	if ( empty( $posts_per_page ) || $posts_per_page < 1 )
 		$posts_per_page = 20;
Index: wp-admin/includes/screen.php
===================================================================
--- wp-admin/includes/screen.php	(revision 19091)
+++ wp-admin/includes/screen.php	(working copy)
@@ -881,7 +881,7 @@
 
 		$option = $this->get_option( 'per_page', 'option' );
 		if ( ! $option )
-			$option = str_replace( '-', '_', "{$this->id}_per_page" );
+			$option = _convert_key_to_option( "{$this->id}_per_page" );
 
 		$per_page = (int) get_user_option( $option );
 		if ( empty( $per_page ) || $per_page < 1 ) {
