Index: wp-includes/default-widgets.php
===================================================================
--- wp-includes/default-widgets.php	(revision 17555)
+++ wp-includes/default-widgets.php	(working copy)
@@ -993,6 +993,10 @@
 	function widget( $args, $instance ) {
 		extract($args);
 		$current_taxonomy = $this->_get_current_taxonomy($instance);
+
+		if ( !taxonomy_exists( $current_taxonomy ) )
+			return;
+
 		if ( !empty($instance['title']) ) {
 			$title = $instance['title'];
 		} else {
@@ -1021,27 +1025,57 @@
 	}
 
 	function form( $instance ) {
-		$current_taxonomy = $this->_get_current_taxonomy($instance);
-?>
-	<p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:') ?></label>
-	<input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php if (isset ( $instance['title'])) {echo esc_attr( $instance['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_object_taxonomies('post') as $taxonomy ) :
-				$tax = get_taxonomy($taxonomy);
-				if ( !$tax->show_tagcloud || 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><?php
+		?>
+
+		<p>
+			<label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:') ?></label>
+			<input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php if (isset ( $instance['title'])) {echo esc_attr( $instance['title'] );} ?>" />
+		</p>
+
+		<?php
+
+		$current_taxonomy = $this->_get_current_taxonomy( $instance );
+		$taxonomies       = get_taxonomies( array( 'show_tagcloud' => true ), 'object' );
+
+		switch ( count( $taxonomies ) ) :
+
+			case 0 : ?>
+
+				<p><?php _e( 'Sorry, but there are no taxonomies for which a tag cloud could be made and therefore, no tag cloud would be displayed!' ); ?></p>
+				<input type="hidden" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>" value="" />
+
+				<?php break;
+
+			case 1 :
+
+				$taxonomy = array_pop( array_keys( $taxonomies ) ); ?>
+
+				<input type="hidden" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>" value="<?php echo esc_attr( $taxonomy ); ?>" />
+
+				<?php break;
+
+			default : ?>
+
+				<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 ( $taxonomies as $taxonomy => $tax ) : ?>
+							<option value="<?php echo esc_attr($taxonomy) ?>" <?php selected($taxonomy, $current_taxonomy) ?>><?php echo $tax->labels->name; ?></option>
+						<?php endforeach; ?>
+					</select>
+				</p>
+
+		<?php endswitch;
+
 	}
 
 	function _get_current_taxonomy($instance) {
 		if ( !empty($instance['taxonomy']) && taxonomy_exists($instance['taxonomy']) )
 			return $instance['taxonomy'];
 
-		return 'post_tag';
+		// Although we say no tag cloud would be displayed in the admin section, we can still do a last check on 'post_tag' taxonomy
+		// This shouldn't happen anyway
+		return taxonomy_exists( 'post_tag' ) ? 'post_tag' : '';
 	}
 }
 
