Index: post-template.php
===================================================================
--- post-template.php	(revision 20109)
+++ post-template.php	(working copy)
@@ -761,6 +761,36 @@
 //
 
 /**
+ * Retrieve or display list of pages as a checklist.
+ *
+ * @since 
+ *
+ * @param array|string $args Optional. Override default arguments.
+ * @return string HTML content, if not displaying.
+ */
+function wp_pages_checklist($args = '') {
+	$defaults = array('depth' => 0, 'checked' => 0, 'echo' => 1, 'post_type' => 'page');
+
+	$r = wp_parse_args( $args, $defaults );
+	extract( $r, EXTR_SKIP );
+
+	$pages = get_posts($r);
+	
+	// Back-compat with old system where both id and name were based on $name argument
+	if ( empty($id) )
+		$id = $name;
+
+	if ( ! empty($pages) ) {
+		$output = walk_page_checklist_tree($pages, $depth, $r);
+	}
+
+	if ( $echo )
+		echo $output;
+
+	return $output;
+}
+
+/**
  * Retrieve or display list of pages as a dropdown (select list).
  *
  * @since 2.1.0
@@ -969,6 +999,22 @@
 }
 
 /**
+ * Retrieve HTML checklist of pages for page list.
+ *
+ * @uses Walker_Page_Checklist to create  checklist of pages.
+ * @since 
+ */
+function walk_page_checklist_tree() {
+	$args = func_get_args();
+	if ( empty($args[2]['walker']) ) // the user's options are the third parameter
+		$walker = new Walker_Page_Checklist;
+	else
+		$walker = $args[2]['walker'];
+
+	return call_user_func_array(array(&$walker, 'walk'), $args);
+}
+
+/**
  * Create HTML list of pages.
  *
  * @package WordPress
@@ -1119,6 +1165,42 @@
 	}
 }
 
+/**
+ * Creates a checklist of pages.
+ *
+ * @package WordPress
+ * @since 
+ * @uses Walker
+ */
+class Walker_Page_Checklist extends Walker {
+
+	var $tree_type = 'page';
+
+	var $db_fields = array ('parent' => 'post_parent', 'id' => 'ID');
+
+	function start_lvl( &$output, $depth = 0, $args = array() ) {
+		$indent = str_repeat("\t", $depth);
+		$output .= "$indent<ul class='children'>\n";
+	}
+	function end_lvl( &$output, $depth = 0, $args = array() ) {
+		$indent = str_repeat("\t", $depth);
+		$output .= "$indent</ul>\n";
+	}	
+
+	function start_el(&$output, $page, $depth, $args, $id = 0) {
+
+		$output .= "\t<li class=\"level-$depth\"><label class=\"selectit\"><input type=\"checkbox\" value=\"$page->ID\"";
+		if ( $page->ID == $args['checked'] )
+			$output .= ' checked="checked"';
+		$output .= '>';
+		$title = apply_filters( 'list_pages', $page->post_title, $page );
+		$output .= esc_html( $title );
+	}
+	function end_el( &$output, $category, $depth = 0, $args = array() ) {
+		$output .= "</label></li>\n";
+	}
+}
+
 //
 // Attachments
 //
