Index: wp-includes/query.php
===================================================================
--- wp-includes/query.php	(revision 17243)
+++ wp-includes/query.php	(working copy)
@@ -1692,7 +1692,7 @@
 		}
 
 		if ( !empty($q['category__in']) ) {
-			$q['category__in'] = array_unique( $q['category__in'] );
+			$q['category__in'] = array_map('absint', array_unique( $q['category__in'] ) );
 			$tax_query[] = array(
 				'taxonomy' => 'category',
 				'terms' => $q['category__in'],
@@ -1701,7 +1701,7 @@
 		}
 
 		if ( !empty($q['category__not_in']) ) {
-			$q['category__not_in'] = array_unique( $q['category__not_in'] );
+			$q['category__not_in'] = array_map('absint', array_unique( $q['category__not_in'] ) );
 			$tax_query[] = array(
 				'taxonomy' => 'category',
 				'terms' => $q['category__not_in'],
@@ -1711,6 +1711,7 @@
 
 		// Tag stuff
 		if ( !empty($q['tag_id']) ) {
+			$q['tag_id'] = absint( $q['tag_id'] );
 			$tax_query[] = array(
 				'taxonomy' => 'post_tag',
 				'terms' => $q['tag_id'],
@@ -1718,6 +1719,7 @@
 		}
 
 		if ( !empty($q['tag__in']) ) {
+			$q['tag__in'] = array_map('absint', array_unique( $q['tag__in'] ) );
 			$tax_query[] = array(
 				'taxonomy' => 'post_tag',
 				'terms' => $q['tag__in'],
@@ -1725,6 +1727,7 @@
 		}
 
 		if ( !empty($q['tag__not_in']) ) {
+			$q['tag__not_in'] = array_map('absint', array_unique( $q['tag__not_in'] ) );
 			$tax_query[] = array(
 				'taxonomy' => 'post_tag',
 				'terms' => $q['tag__not_in'],
@@ -1732,6 +1735,15 @@
 			);
 		}
 
+		if ( !empty($q['tag_slug__in']) ) {
+			$q['tag_slug__in'] = array_map('sanitize_title', $q['tag_slug__in']);
+			$tax_query[] = array(
+				'taxonomy' => 'post_tag',
+				'terms' => $q['tag_slug__in'],
+				'field' => 'slug',
+			);
+		}
+
 		$this->tax_query = new WP_Tax_Query( $tax_query );
 	}
 
