Index: wp-includes/post-template.php
===================================================================
--- wp-includes/post-template.php	(revision 30972)
+++ wp-includes/post-template.php	(working copy)
@@ -950,7 +950,8 @@
 		'selected' => 0, 'echo' => 1,
 		'name' => 'page_id', 'id' => '',
 		'show_option_none' => '', 'show_option_no_change' => '',
-		'option_none_value' => ''
+		'option_none_value' => '',
+		'optio_value_field' => 'id'
 	);
 
 	$r = wp_parse_args( $args, $defaults );
@@ -1412,8 +1413,16 @@
 	public function start_el( &$output, $page, $depth = 0, $args = array(), $id = 0 ) {
 		$pad = str_repeat('&nbsp;', $depth * 3);
 
-		$output .= "\t<option class=\"level-$depth\" value=\"$page->ID\"";
-		if ( $page->ID == $args['selected'] )
+		if ( 'slug' == $args['option_value_field'] ) {
+			$value = $page->post_name;
+			$selected = $page->post_name == $args['selected'];
+		} else {
+			$value = $page->ID;
+			$selected = $page->ID == $args['selected'];
+		}
+
+		$output .= "\t<option class=\"level-$depth\" value=\"$value\"";
+		if ( $selected )
 			$output .= ' selected="selected"';
 		$output .= '>';
 
Index: wp-includes/category-template.php
===================================================================
--- wp-includes/category-template.php	(revision 30972)
+++ wp-includes/category-template.php	(working copy)
@@ -291,6 +291,8 @@
  *     'show_option_all' (string) - Text to display for showing all categories.
  *     'show_option_none' (string) - Text to display for showing no categories.
  *     'option_none_value' (mixed) - Value to use when no category is selected.
+ *     'option_value_field' (string) - What column to use for the option value
+ * attribute. Can either be 'slug' or 'id'. Defaults to 'id'.
  *     'orderby' (string) default is 'ID' - What column to use for ordering the
  * categories.
  *     'order' (string) default is 'ASC' - What direction to order categories.
@@ -330,7 +332,8 @@
 		'name' => 'cat', 'id' => '',
 		'class' => 'postform', 'depth' => 0,
 		'tab_index' => 0, 'taxonomy' => 'category',
-		'hide_if_empty' => false, 'option_none_value' => -1
+		'hide_if_empty' => false, 'option_none_value' => -1,
+		'option_value_field' => 'id'
 	);
 
 	$defaults['selected'] = ( is_category() ) ? get_query_var( 'cat' ) : 0;
@@ -1098,8 +1101,16 @@
 		/** This filter is documented in wp-includes/category-template.php */
 		$cat_name = apply_filters( 'list_cats', $category->name, $category );
 
-		$output .= "\t<option class=\"level-$depth\" value=\"".$category->term_id."\"";
-		if ( $category->term_id == $args['selected'] )
+		if ( 'slug' == $args['option_value_field'] ) {
+			$value = $category->slug;
+			$selected = $category->slug == $args['selected'];
+		} else {
+			$value = $category->term_id;
+			$selected = $category->term_id == $args['selected'];
+		}
+
+		$output .= "\t<option class=\"level-$depth\" value=\"$value\"";
+		if ( $selected )
 			$output .= ' selected="selected"';
 		$output .= '>';
 		$output .= $pad.$cat_name;
