Index: category-template.php
===================================================================
--- category-template.php	(revision 17497)
+++ category-template.php	(working copy)
@@ -309,7 +309,7 @@
 		'name' => 'cat', 'id' => '',
 		'class' => 'postform', 'depth' => 0,
 		'tab_index' => 0, 'taxonomy' => 'category',
-		'hide_if_empty' => false
+		'hide_if_empty' => false, 'multiple' => false
 	);
 
 	$defaults['selected'] = ( is_category() ) ? get_query_var( 'cat' ) : 0;
@@ -335,11 +335,19 @@
 
 	$categories = get_terms( $taxonomy, $r );
 	$name = esc_attr( $name );
-	$class = esc_attr( $class );
 	$id = $id ? esc_attr( $id ) : $name;
 
-	if ( ! $r['hide_if_empty'] || ! empty($categories) )
-		$output = "<select name='$name' id='$id' class='$class' $tab_index_attribute>\n";
+	if ( ! $r['hide_if_empty'] || ! empty($categories) ) {
+                if ( $r['multiple'] ) {
+                     $multiple = "multiple='true'";
+                     $class = 'postform multiple';
+                } else {
+                     $multiple = '';
+                     $class = esc_attr( $class );
+                }
+
+		$output = "<select name='$name' id='$id' class='$class' $tab_index_attribute $multiple>\n";
+        }
 	else
 		$output = '';
 
@@ -948,7 +956,7 @@
 
 		$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 ( in_array($category->term_id, (array) $args['selected'] ) )
 			$output .= ' selected="selected"';
 		$output .= '>';
 		$output .= $pad.$cat_name;
