Index: wp-admin/plugins.php
===================================================================
--- wp-admin/plugins.php	(revision 11001)
+++ wp-admin/plugins.php	(working copy)
@@ -245,18 +245,42 @@
         $upgrade_plugins[ $plugin_file ] = $plugin_data;
 }
 
-$total_plugins = count($all_plugins);
+$total_all_plugins = count($all_plugins);
 $total_inactive_plugins = count($inactive_plugins);
 $total_active_plugins = count($active_plugins);
 $total_recent_plugins = count($recent_plugins);
 $total_upgrade_plugins = count($upgrade_plugins);
 
-$status = ( isset($_GET['plugin_status']) ) ? $_GET['plugin_status'] : 'all';
+$status = isset($_GET['plugin_status']) ? $_GET['plugin_status'] : 'all';
 if ( !in_array($status, array('all', 'active', 'inactive', 'recent', 'upgrade')) )
 	$status = 'all';
 $plugin_array_name = "${status}_plugins";
 $plugins = &$$plugin_array_name;
 
+
+//Paging.
+$page = isset($_GET['paged']) ? $_GET['paged'] : 1;
+$total_this_page = "total_{$status}_plugins";
+$total_this_page = $$total_this_page;
+$plugins_per_page = apply_filters('plugins_per_page', 20, $status);
+
+$start = ($page - 1) * $plugins_per_page;
+
+$page_links = paginate_links( array(
+	'base' => add_query_arg( 'paged', '%#%' ),
+	'format' => '',
+	'prev_text' => __('&laquo;'),
+	'next_text' => __('&raquo;'),
+	'total' => ceil($total_this_page / $plugins_per_page),
+	'current' => $page
+));
+$page_links_text = sprintf( '<span class="displaying-num">' . __( 'Displaying %s&#8211;%s of %s' ) . '</span>%s',
+	number_format_i18n( $start + 1 ),
+	number_format_i18n( min( $page * $plugins_per_page, $total_this_page ) ),
+	'<span class="total-type-count">' . number_format_i18n( $total_this_page ) . '</span>',
+	$page_links
+);
+
 /**
  * @ignore
  *
@@ -369,7 +393,7 @@
 <?php
 $status_links = array();
 $class = ( 'all' == $status ) ? ' class="current"' : '';
-$status_links[] = "<li><a href='plugins.php' $class>" . sprintf( _n( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_plugins ), number_format_i18n( $total_plugins ) ) . '</a>';
+$status_links[] = "<li><a href='plugins.php' $class>" . sprintf( _n( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_all_plugins ), number_format_i18n( $total_all_plugins ) ) . '</a>';
 if ( ! empty($active_plugins) ) {
 	$class = ( 'active' == $status ) ? ' class="current"' : '';
 	$status_links[] = "<li><a href='plugins.php?plugin_status=active' $class>" . sprintf( _n( 'Active <span class="count">(%s)</span>', 'Active <span class="count">(%s)</span>', $total_active_plugins ), number_format_i18n( $total_active_plugins ) ) . '</a>';
@@ -392,10 +416,29 @@
 </ul>
 
 <div class="tablenav">
-<?php print_plugin_actions($status) ?>
+<?php
+if ( $page_links )
+	echo '<div class="tablenav-pages">', $page_links_text, '</div>';
+
+print_plugin_actions($status);
+?>
 </div>
 <div class="clear"></div>
-<?php print_plugins_table($plugins, $status) ?>
+<?php
+	if ( $total_this_page > $plugins_per_page )
+		$plugins = array_slice($plugins, $start, $plugins_per_page);
+	
+	print_plugins_table($plugins, $status);
+?>
+<div class="tablenav">
+<?php
+if ( $page_links )
+	echo "<div class='tablenav-pages'>$page_links_text</div>";
+?>
+<div class="alignleft actions">
+<!-- TODO lower bulk actions. -->
+</div>
+</div>
 </form>
 
 <?php if ( empty($all_plugins) ) : ?>
