Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 11119)
+++ wp-includes/post.php	(working copy)
@@ -2201,7 +2201,7 @@
 
 	$exclusions = '';
 	if ( !empty($exclude) ) {
-		$expages = preg_split('/[\s,]+/',$exclude);
+		$expages = array_map('intval', explode(',', $exclude));
 		if ( count($expages) ) {
 			foreach ( $expages as $expage ) {
 				if (empty($exclusions))
@@ -2210,9 +2210,9 @@
 					$exclusions .= $wpdb->prepare(' AND ID <> %d ', $expage);
 			}
 		}
+		if (!empty($exclusions))
+			$exclusions .= ')';		
 	}
-	if (!empty($exclusions))
-		$exclusions .= ')';
 
 	$author_query = '';
 	if (!empty($authors)) {
@@ -2276,17 +2276,13 @@
 		$pages = & get_page_children($child_of, $pages);
 
 	if ( !empty($exclude_tree) ) {
-		$exclude = array();
-
-		$exclude = (int) $exclude_tree;
-		$children = get_page_children($exclude, $pages);
-		$excludes = array();
-		foreach ( $children as $child )
-			$excludes[] = $child->ID;
-		$excludes[] = $exclude;
+		$excludes = array_map('intval', explode(',', $exclude_tree));
+		
+		// exclude tree will work as describben - self and direct childs only (!)		
 		$total = count($pages);
 		for ( $i = 0; $i < $total; $i++ ) {
-			if ( in_array($pages[$i]->ID, $excludes) )
+			if ( in_array($pages[$i]->ID, $excludes) || 
+			     in_array($pages[$i]->post_parent, $excludes))			     
 				unset($pages[$i]);
 		}
 	}
