Index: wp-admin/includes/ms.php
===================================================================
--- wp-admin/includes/ms.php	(revision 19021)
+++ wp-admin/includes/ms.php	(working copy)
@@ -53,16 +53,17 @@
  * @return void
  */
 function wpmu_delete_blog( $blog_id, $drop = false ) {
-	global $wpdb;
+	global $wpdb, $current_site;
 
 	$switch = false;
 	if ( $blog_id != $wpdb->blogid ) {
 		$switch = true;
 		switch_to_blog( $blog_id );
+		$blog = get_blog_details( $blog_id );
+	} else {
+		$blog = $GLOBALS['current_blog'];
 	}
 
-	$blog_prefix = $wpdb->get_blog_prefix( $blog_id );
-
 	do_action( 'delete_blog', $blog_id, $drop );
 
 	$users = get_users( array( 'blog_id' => $blog_id, 'fields' => 'ids' ) );
@@ -70,23 +71,24 @@
 	// Remove users from this blog.
 	if ( ! empty( $users ) ) {
 		foreach ( $users as $user_id ) {
-			remove_user_from_blog( $user_id, $blog_id) ;
+			remove_user_from_blog( $user_id, $blog_id );
 		}
 	}
 
 	update_blog_status( $blog_id, 'deleted', 1 );
 
+	// Don't destroy the initial, main, or root blog.
+	if ( $drop && ( 1 == $blog_id || is_main_site( $blog_id ) || ( $blog->path == $current_site->path && $blog->domain == $current_site->domain ) ) )
+		$drop = false;
+
 	if ( $drop ) {
-		if ( substr( $blog_prefix, -1 ) == '_' )
-			$blog_prefix =  substr( $blog_prefix, 0, -1 ) . '\_';
 
-		$drop_tables = $wpdb->get_results( "SHOW TABLES LIKE '{$blog_prefix}%'", ARRAY_A );
-		$drop_tables = apply_filters( 'wpmu_drop_tables', $drop_tables );
+		$drop_tables = apply_filters( 'wpmu_drop_tables', $wpdb->tables( 'blog' ) );
 
-		reset( $drop_tables );
-		foreach ( (array) $drop_tables as $drop_table) {
-			$wpdb->query( "DROP TABLE IF EXISTS ". current( $drop_table ) ."" );
+		foreach ( (array) $drop_tables as $table ) {
+			$wpdb->query( "DROP TABLE IF EXISTS `$table`" );
 		}
+
 		$wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->blogs WHERE blog_id = %d", $blog_id ) );
 		$dir = apply_filters( 'wpmu_delete_blog_upload_dir', WP_CONTENT_DIR . "/blogs.dir/{$blog_id}/files/", $blog_id );
 		$dir = rtrim( $dir, DIRECTORY_SEPARATOR );
@@ -120,16 +122,6 @@
 		}
 	}
 
-	$wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE meta_key = '{$blog_prefix}autosave_draft_ids'" );
-	$blogs = get_site_option( 'blog_list' );
-	if ( is_array( $blogs ) ) {
-		foreach ( $blogs as $n => $blog ) {
-			if ( $blog['blog_id'] == $blog_id )
-				unset( $blogs[$n] );
-		}
-		update_site_option( 'blog_list', $blogs );
-	}
-
 	if ( $switch === true )
 		restore_current_blog();
 }
