--- wp-includes/post.php	2009-07-23 11:06:39.000000000 +0300
+++ wp-includes/post.php	2009-09-23 01:20:55.000000000 +0300
@@ -2147,15 +2147,30 @@
  * @param array $pages List of pages' objects.
  * @return array
  */
-function &get_page_children($page_id, $pages) {
+function &get_page_children($page_id, &$pages) {
 	$page_list = array();
-	foreach ( (array) $pages as $page ) {
+	if(is_object($pages))$p=(array)$pages;
+	else $p=&$pages;
+	$pc=count($p);
+	$pp=array();
+	foreach ($p as $page) {
 		if ( $page->post_parent == $page_id ) {
 			$page_list[] = $page;
-			if ( $children = get_page_children($page->ID, $pages) )
-				$page_list = array_merge($page_list, $children);
+		}else{
+			$pp[]=$page;
 		}
 	}
+	$p=$pp;
+	$plc=count($page_list);
+	$page_list2=array();	
+	if(count($p))for($i=0;$i<$plc;$i++){	
+		if ($children = get_page_children($page_list[$i]->ID, $p) )
+			$page_list2[$i] = $children;
+		if(!count($p))break;
+	}
+	if(count($page_list2))foreach($page_list2 as $i=>$children){
+		array_splice($page_list,$i+1,0,$children);
+	}
 	return $page_list;
 }
 
