Index: wp-includes/query.php
===================================================================
--- wp-includes/query.php	(revision 15267)
+++ wp-includes/query.php	(working copy)
@@ -1226,7 +1226,7 @@
 		}
 
 		$array_keys = array('category__in', 'category__not_in', 'category__and', 'post__in', 'post__not_in',
-			'tag__in', 'tag__not_in', 'tag__and', 'tag_slug__in', 'tag_slug__and');
+			'tag__in', 'tag__not_in', 'tag__and', 'tag_slug__in', 'tag_slug__and', 'post_parent__in', 'post_parent__not_in');
 
 		foreach ( $array_keys as $key ) {
 			if ( !isset($array[$key]))
@@ -1827,8 +1827,15 @@
 			$where .= " AND {$wpdb->posts}.ID NOT IN ($post__not_in)";
 		}
 
-		if ( is_numeric($q['post_parent']) )
+		if ( is_numeric( $q['post_parent'] ) ) {
 			$where .= $wpdb->prepare( " AND $wpdb->posts.post_parent = %d ", $q['post_parent'] );
+		} elseif ( $q['post_parent__in'] ) {
+			$post_parent__in = implode(',', array_map( 'absint', $q['post_parent__in'] ) );
+			$where .= " AND $wpdb->posts.post_parent IN ($post_parent__in)";
+		} elseif ( $q['post_parent__not_in'] ) {
+			$post_parent__not_in = implode(',',  array_map( 'absint', $q['post_parent__not_in'] ) );
+			$where .= " AND $wpdb->posts.post_parent NOT IN ($post_parent__not_in)";
+		}
 
 		if ( $q['page_id'] ) {
 			if  ( ('page' != get_option('show_on_front') ) || ( $q['page_id'] != get_option('page_for_posts') ) ) {
