--- Form.pm	2006-10-25 08:16:05.000000000 +0800
+++ Form.pm.new	2007-02-16 17:21:46.000000000 +0800
@@ -468,12 +468,14 @@
                                 -name => $name,
                                 -default => "\n".$value );
 
-    } elsif( $type eq 'select' ) {
+    } elsif( $type =~ /^select/ ) {
+        my @multi = ($type =~ /\+multi/ ? (multiple => 'multiple') : ());
+        my %is_selected = map { $_ => 1 } split(/\s*,\s*/, $value);
         $options = $fieldDef->{value};
         ASSERT( ref( $options )) if DEBUG;
         my $choices = '';
         foreach $item ( @$options ) {
-            $selected = ( $item eq $value );
+            $selected = $is_selected{$item};
             $item =~ s/<nop/&lt\;nop/go;
             if( $selected ) {
                 $choices .= CGI::option({ selected=>'selected' }, $item );
@@ -481,7 +483,7 @@
                 $choices .= CGI::option( $item );
             }
         }
-        $value = CGI::Select( { name=>$name, size=>$size }, $choices );
+        $value = CGI::Select( { name=>$name, size=>$size, @multi }, $choices );
 
     } elsif( $type =~ /^checkbox/ ) {
         $options = $fieldDef->{value};
