Index: wp-admin/plugins.php
===================================================================
--- wp-admin/plugins.php	(revision 11361)
+++ wp-admin/plugins.php	(working copy)
@@ -11,10 +11,8 @@
 
 if ( isset($_POST['clear-recent-list']) )
 	$action = 'clear-recent-list';
-elseif ( isset($_GET['action']) )
-	$action = $_GET['action'];
-elseif ( isset($_POST['action']) )
-	$action = $_POST['action'];
+elseif ( isset($_REQUEST['action']) )
+	$action = $_REQUEST['action'];
 else
 	$action = false;
 
@@ -31,6 +29,9 @@
 
 $page = isset($_REQUEST['paged']) ? $_REQUEST['paged'] : 1;
 
+//Clean up request URI from temporary args for screen options/paging uri's to work as expected.
+$_SERVER['REQUEST_URI'] = remove_query_arg(array('error', 'deleted', 'activate', 'activate-multi', 'deactivate', 'deactivate-multi', '_error_nonce'), $_SERVER['REQUEST_URI']);
+
 if ( !empty($action) ) {
 	switch ( $action ) {
 		case 'activate':
@@ -163,7 +164,9 @@
 			} //Endif verify-delete
 			$delete_result = delete_plugins($plugins);
 
-			wp_cache_delete('plugins', 'plugins');
+			set_transient('plugins_delete_result', $delete_result); //Store the result in a cache rather than a URL param due to object type & length
+			wp_redirect("plugins.php?deleted=true&plugin_status=$status&paged=$page");
+			exit;
 			break;
 		case 'clear-recent-list':
 			update_option('recently_activated', array());
@@ -198,7 +201,10 @@
 		}
 	?>
 	</div>
-<?php elseif ( 'delete-selected' == $action ) :
+<?php elseif ( isset($_GET['deleted']) ) :
+		$delete_result = get_transient('plugins_delete_result');
+		delete_transient('plugins_delete_result'); //Delete it once we're done.
+
 		if ( is_wp_error($delete_result) ) : ?>
 		<div id="message" class="updated fade"><p><?php printf( __('Plugin could not be deleted due to an error: %s'), $delete_result->get_error_message() ); ?></p></div>
 		<?php else : ?>
@@ -288,6 +294,11 @@
 }
 
 $plugin_array_name = "${status}_plugins";
+if ( empty($$plugin_array_name) && $status != 'all' ) {
+	$status = 'all';
+	$plugin_array_name = "${status}_plugins";
+}
+
 $plugins = &$$plugin_array_name;
 
 //Paging.
@@ -363,6 +374,9 @@
 		if ( current_user_can('edit_plugins') && is_writable(WP_PLUGIN_DIR . '/' . $plugin_file) )
 			$actions[] = '<a href="plugin-editor.php?file=' . $plugin_file . '" title="' . __('Open this file in the Plugin Editor') . '" class="edit">' . __('Edit') . '</a>';
 
+		if ( ! $is_active && current_user_can('delete_plugins') )
+			$actions[] = '<a href="' . wp_nonce_url('plugins.php?action=delete-selected&amp;checked[]=' . $plugin_file . '&amp;plugin_status=' . $context . '&amp;paged=' . $page, 'bulk-manage-plugins') . '" title="' . __('Delete this plugin') . '" class="delete">' . __('Delete') . '</a>';
+
 		$actions = apply_filters( 'plugin_action_links', $actions, $plugin_file, $plugin_data, $context );
 		$actions = apply_filters( "plugin_action_links_$plugin_file", $actions, $plugin_file, $plugin_data, $context );
 		$action_count = count($actions);
