Index: wp-includes/taxonomy.php
===================================================================
--- wp-includes/taxonomy.php	(revision 17488)
+++ wp-includes/taxonomy.php	(working copy)
@@ -2842,7 +2842,9 @@
 	$t = get_taxonomy($taxonomy);
 
 	if ( empty($termlink) ) {
-		if ( $t->query_var )
+		if( 'category' == $taxonomy )
+			$termlink = '?cat=' . $term->term_id;
+		else if ( $t->query_var )
 			$termlink = "?$t->query_var=$slug";
 		else
 			$termlink = "?taxonomy=$taxonomy&term=$slug";
Index: wp-includes/canonical.php
===================================================================
--- wp-includes/canonical.php	(revision 17488)
+++ wp-includes/canonical.php	(working copy)
@@ -78,6 +78,19 @@
 				$redirect['query'] = remove_query_arg(array('p', 'page_id', 'attachment_id', 'post_type'), $redirect['query']);
 		}
 	}
+	
+	if( is_category() ) {
+		if( isset( $_GET['category_name'] ) ) {
+			$categories = explode( ',', $_GET['category_name'] );
+			$categories = "'" . implode( "','", array_map( 'sanitize_title_for_query', $categories ) ) . "'";
+			$category_ids = $wpdb->get_col( "SELECT term_id FROM $wpdb->term_taxonomy INNER JOIN $wpdb->terms USING(term_id) WHERE taxonomy='category' AND slug IN($categories)" );
+			if( $category_ids ) {
+				$redirect_url = home_url( '/' );
+				$redirect_url = add_query_arg( array( 'cat' => implode( ',', $category_ids ) ), $redirect_url );
+				$redirect['query'] = remove_query_arg( array( 'cat', 'category_name', 'category' ), $redirect['query'] );
+			}
+		}
+	}
 
 	// These tests give us a WP-generated permalink
 	if ( is_404() ) {
