Index: wp-includes/default-widgets.php
===================================================================
--- wp-includes/default-widgets.php	(revision 21220)
+++ wp-includes/default-widgets.php	(working copy)
@@ -440,13 +440,13 @@
 class WP_Widget_Categories extends WP_Widget {
 
 	function __construct() {
-		$widget_ops = array( 'classname' => 'widget_categories', 'description' => __( "A list or dropdown of categories" ) );
+		$widget_ops = array( 'classname' => 'widget_categories', 'description' => __( "A list or dropdown of categories or custom taxonomies" ) );
 		parent::__construct('categories', __('Categories'), $widget_ops);
 	}
 
 	function widget( $args, $instance ) {
 		extract( $args );
-
+		$current_taxonomy = $this->_get_current_taxonomy( $instance );
 		$title = apply_filters('widget_title', empty( $instance['title'] ) ? __( 'Categories' ) : $instance['title'], $instance, $this->id_base);
 		$c = ! empty( $instance['count'] ) ? '1' : '0';
 		$h = ! empty( $instance['hierarchical'] ) ? '1' : '0';
@@ -456,10 +456,10 @@
 		if ( $title )
 			echo $before_title . $title . $after_title;
 
-		$cat_args = array('orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h);
+		$cat_args = array('orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h, 'taxonomy' => $current_taxonomy);
 
 		if ( $d ) {
-			$cat_args['show_option_none'] = __('Select Category');
+			$cat_args['show_option_none'] = get_taxonomy( $current_taxonomy )->labels->select_name;
 			wp_dropdown_categories(apply_filters('widget_categories_dropdown_args', $cat_args));
 ?>
 
@@ -496,6 +496,7 @@
 		$instance['count'] = !empty($new_instance['count']) ? 1 : 0;
 		$instance['hierarchical'] = !empty($new_instance['hierarchical']) ? 1 : 0;
 		$instance['dropdown'] = !empty($new_instance['dropdown']) ? 1 : 0;
+		$instance['taxonomy'] = stripslashes( $new_instance['taxonomy'] );
 
 		return $instance;
 	}
@@ -507,10 +508,22 @@
 		$count = isset($instance['count']) ? (bool) $instance['count'] :false;
 		$hierarchical = isset( $instance['hierarchical'] ) ? (bool) $instance['hierarchical'] : false;
 		$dropdown = isset( $instance['dropdown'] ) ? (bool) $instance['dropdown'] : false;
+		$current_taxonomy = $this->_get_current_taxonomy( $instance );
 ?>
 		<p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e( 'Title:' ); ?></label>
 		<input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" /></p>
 
+		<p><label for="<?php echo $this->get_field_id( 'taxonomy' ); ?>"><?php _e( 'Taxonomy:' ) ?></label>
+		<select class="widefat" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>">
+		<?php foreach ( get_taxonomies() as $taxonomy ) :
+					$tax = get_taxonomy( $taxonomy );
+					if ( ! $tax->hierarchical || empty( $tax->labels->name ) )
+						continue;
+		?>
+		<option value="<?php echo esc_attr( $taxonomy ) ?>" <?php selected( $taxonomy, $current_taxonomy ) ?>><?php echo $tax->labels->name; ?></option>
+	<?php endforeach; ?>
+	</select></p>
+
 		<p><input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id('dropdown'); ?>" name="<?php echo $this->get_field_name('dropdown'); ?>"<?php checked( $dropdown ); ?> />
 		<label for="<?php echo $this->get_field_id('dropdown'); ?>"><?php _e( 'Display as dropdown' ); ?></label><br />
 
@@ -522,6 +535,14 @@
 <?php
 	}
 
+	function _get_current_taxonomy($instance) {
+		if ( ! empty( $instance['taxonomy'] ) && taxonomy_exists( $instance['taxonomy'] ) )
+			return $instance['taxonomy'];
+
+		return 'category';
+	}
+
+
 }
 
 /**
Index: wp-includes/taxonomy.php
===================================================================
--- wp-includes/taxonomy.php	(revision 21220)
+++ wp-includes/taxonomy.php	(working copy)
@@ -43,6 +43,9 @@
 
 	register_taxonomy( 'category', 'post', array(
 		'hierarchical' => true,
+		'labels' => array(
+			'select_name' => __( 'Select Category' )
+		),
 		'query_var' => 'category_name',
 		'rewrite' => $rewrite['category'],
 		'public' => true,
@@ -385,6 +388,7 @@
  * Accepted keys of the label array in the taxonomy object:
  * - name - general name for the taxonomy, usually plural. The same as and overridden by $tax->label. Default is Tags/Categories
  * - singular_name - name for one object of this taxonomy. Default is Tag/Category
+ * - select_name - prompt to select a taxonomy when using a dropdown list in the Categories widget. Default is 'Select Taxonomy'.
  * - search_items - Default is Search Tags/Search Categories
  * - popular_items - This string isn't used on hierarchical taxonomies. Default is Popular Tags
  * - all_items - Default is All Tags/All Categories
@@ -413,6 +417,7 @@
 	$nohier_vs_hier_defaults = array(
 		'name' => array( _x( 'Tags', 'taxonomy general name' ), _x( 'Categories', 'taxonomy general name' ) ),
 		'singular_name' => array( _x( 'Tag', 'taxonomy singular name' ), _x( 'Category', 'taxonomy singular name' ) ),
+		'select_name' => array( null, __( 'Select Taxonomy' ) ),
 		'search_items' => array( __( 'Search Tags' ), __( 'Search Categories' ) ),
 		'popular_items' => array( __( 'Popular Tags' ), null ),
 		'all_items' => array( __( 'All Tags' ), __( 'All Categories' ) ),
