Index: /extensions/pLoader/trunk/locale/fr_FR/pLoader.po
===================================================================
--- /extensions/pLoader/trunk/locale/fr_FR/pLoader.po	(revision 5040)
+++ /extensions/pLoader/trunk/locale/fr_FR/pLoader.po	(revision 5041)
@@ -646,2 +646,8 @@
 msgid "What is the destination album?"
 msgstr "Quel est l'album destination ?"
+
+msgid "Properties of the %s selected photos"
+msgstr "Propriétés des %s photos sélectionnées"
+
+msgid "Tags of the %s selected photos"
+msgstr "Tags des %s photos sélectionnées"
Index: /extensions/pLoader/trunk/src/Uploader/GUI/DlgCommon.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/GUI/DlgCommon.pm	(revision 5040)
+++ /extensions/pLoader/trunk/src/Uploader/GUI/DlgCommon.pm	(revision 5041)
@@ -20,7 +20,8 @@
 package Uploader::GUI::DlgCommon;
 use strict;
+use Wx qw/wxDP_ALLOWNONE wxDefaultPosition wxDefaultSize/;
 use Wx::Calendar;
 use Wx::Locale qw/:default/;
-
+use Data::Dumper;
 use base qw/
                Class::Accessor::Fast
@@ -190,6 +191,9 @@
                                     sprintf("%s/%s/%s", $yyyy, $mm, $dd)
                                   );
+                                  if(-1 eq $value){
+                                      $date->SetToCurrent;
+                                  }
                                   $ctrl->SetValue($date);
-                                },
+                            },
 };
 
Index: /extensions/pLoader/trunk/src/Uploader/GUI/Frame.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/GUI/Frame.pm	(revision 5040)
+++ /extensions/pLoader/trunk/src/Uploader/GUI/Frame.pm	(revision 5041)
@@ -291,4 +291,5 @@
                 $self->imageviewer_item_refresh(0);
             }
+            $self->OnUpdateNotebook;
             $self->OnUpdateToolbar;
             $event->Skip;
@@ -335,15 +336,27 @@
             $main::CAPTION => { label=>gettext("Photo caption")},
             $main::PHOTO_PROPERTIES_CAPTION => { 
-                value => sub { $self->imagelist->current_image->site_name(@_) },
+                value => sub {
+                    $self->multi_selection_mode ?
+                    $self->imagelist->SetImageSelectionName(@_):
+                    $self->imagelist->current_image->site_name(@_) 
+                },
                 frame_callback => sub { $self->imageviewer_item_refresh(1); },
             },
             $main::COMMENT => { label=>gettext("Comment")},
-            $main::PHOTO_PROPERTIES_COMMENT => { 
-                value => sub { $self->imagelist->current_image->site_comment(@_) },
+            $main::PHOTO_PROPERTIES_COMMENT => {
+                value => sub { 
+                    $self->multi_selection_mode ?
+                    $self->imagelist->SetImageSelectionComment(@_):
+                    $self->imagelist->current_image->site_comment(@_) 
+                },
                 frame_callback => sub { $self->imageviewer_item_refresh(1); },
             },
             $main::AUTHOR => { label=>gettext("Author")},
             $main::PHOTO_PROPERTIES_AUTHOR => { 
-                value => sub { $self->imagelist->current_image->site_author(@_) },
+                value => sub { 
+                    $self->multi_selection_mode ?
+                    $self->imagelist->SetImageSelectionAuthor(@_):
+                    $self->imagelist->current_image->site_author(@_) 
+                },
                 frame_callback => sub { $self->imageviewer_item_refresh(1); },
             },
@@ -351,13 +364,30 @@
             $main::CREATE_DATE => { label=>gettext("Create date")},
             $main::PHOTO_PROPERTIES_CREATE_DATE => { 
-                value => sub { $self->imagelist->current_image->create_date(@_) },
+                value => sub { 
+                    $self->multi_selection_mode ?
+                    $self->imagelist->SetImageSelectionCreateDate(@_):
+                    $self->imagelist->current_image->create_date(@_) 
+                },
                 frame_callback => sub { $self->imageviewer_item_refresh(1); },
             },
             $main::PRIVACY_LEVEL => { label=>gettext("Who can see the photo?")},
             $main::PHOTO_PROPERTIES_PRIVACY_LEVEL => {
-                selection => sub { $self->imagelist->current_image->privacy_level(@_)},
+                selection => sub {
+                    $self->multi_selection_mode ? 
+                    $self->imagelist->SetImageSelectionPrivacyLevel(@_):
+                    $self->imagelist->current_image->privacy_level(@_)
+                },
                 choices => wxTheApp->privacy_level_choices,
             },
-            $main::PHOTO_PROPERTIES_NB => { texts => [gettext("Photo properties"), gettext("Tags")] },
+            $main::PHOTO_PROPERTIES_NB => {
+                texts => [
+                    gettext("Photo properties"),
+                    gettext("Tags")
+                ], 
+                multi_texts => [
+                    sub { sprintf(gettext("Properties of the %s selected photos"), $self->imageviewer->GetSelectectItemsCount ) },
+                    sub { sprintf(gettext("Tags of the %s selected photos"), $self->imageviewer->GetSelectectItemsCount) },
+                ],
+            },
             $main::PHOTO_PROPERTIES_UPLOAD => { label=>gettext("Upload to Piwigo") },
         }
@@ -637,7 +667,4 @@
     );   
 
-    #$self->image_tags(
-    #    sub { eval { $self->imagelist->current_image->site_tags(@_) } }
-    #);
     $self->image_tags(
         sub { scalar @{$self->imagelist->image_selection} > 1 ? $self->imagelist->SetImageSelectionTags(@_) : $self->imagelist->current_image->site_tags(@_)||[]  }
@@ -1259,4 +1286,24 @@
 }
 
+sub OnUpdateNotebook{
+    my( $self ) = @_;
+
+    # Notebook page caption change according to photo selection
+    # include count when selection is multiple
+    my $texts;
+    if(!$self->multi_selection_mode){
+        $texts = $self->piwigo_photo_properties->{$main::PHOTO_PROPERTIES_NB}->{texts};
+    }
+    else {
+        $texts = [ map { $_->() } @{$self->piwigo_photo_properties->{$main::PHOTO_PROPERTIES_NB}->{multi_texts}} ];
+    }
+
+    $texts||=[];
+    for(my $i=0; $i < scalar @$texts ; $i++){
+        $self->dlg_piwigo_photo_properties->{notebook}->SetPageText($i, $texts->[$i]);
+    }
+
+}
+
 sub OnRemoveImages {
     my( $self, $event ) = @_;
@@ -1542,6 +1589,12 @@
 
     # for batch mode : reset the batch buffer if single selection
-    $self->imagelist->SetImageSelectionTags([]) if(scalar @{$self->imagelist->image_selection} > 1);
-
+    if($self->multi_selection_mode){
+        $self->imagelist->SetImageSelectionTags([]);
+        $self->imagelist->image_selection_privacy_level(-1);
+        $self->imagelist->image_selection_name("");
+        $self->imagelist->image_selection_author("");
+        $self->imagelist->image_selection_comment("");
+        $self->imagelist->image_selection_create_date(-1);
+    }
     # process image_preview in idle time
     # and when current event is processed
@@ -1553,4 +1606,10 @@
     $self->piwigo_photo_properties_tags->Refresh;
 
+}
+
+sub multi_selection_mode {
+    my ( $self ) = @_;
+
+    scalar @{$self->imagelist->image_selection} > 1;
 }
 
Index: /extensions/pLoader/trunk/src/Uploader/GUI/Layout/PhotoProperties.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/GUI/Layout/PhotoProperties.pm	(revision 5040)
+++ /extensions/pLoader/trunk/src/Uploader/GUI/Layout/PhotoProperties.pm	(revision 5041)
@@ -16,5 +16,5 @@
 use Wx qw( wxVERTICAL wxHORIZONTAL wxALL wxLEFT wxRIGHT wxTOP wxBOTTOM wxCENTRE wxGROW );
 use Wx qw( wxALIGN_RIGHT wxALIGN_BOTTOM wxALIGN_CENTER wxALIGN_CENTER_VERTICAL wxALIGN_CENTER_HORIZONTAL );
-use Wx qw( wxTE_MULTILINE wxDP_DROPDOWN );
+use Wx qw( wxTE_MULTILINE wxDP_DROPDOWN wxDP_ALLOWNONE);
 
 # Bitmap functions
@@ -66,5 +66,5 @@
     $item2->AddWindow( $item9, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
 
-    my( $item10 ) = Wx::DatePickerCtrl->new( $parent, $main::PHOTO_PROPERTIES_CREATE_DATE, Wx::DateTime->new(), wxDefaultPosition, [200,-1], wxDP_DROPDOWN );
+    my( $item10 ) = Wx::DatePickerCtrl->new( $parent, $main::PHOTO_PROPERTIES_CREATE_DATE, Wx::DateTime->new(), wxDefaultPosition, [200,-1], wxDP_ALLOWNONE );
     $item2->AddWindow( $item10, 0, wxALIGN_CENTER_VERTICAL, 5 );
 
@@ -77,6 +77,6 @@
 
     my $tags = $_[1];
-$tags->{parentwnd}=$parent;
-my( $item13 ) = Uploader::GUI::wxChoiceFilteredPanel->new($tags);
+    $tags->{parentwnd}=$parent;
+    my( $item13 ) = Uploader::GUI::wxChoiceFilteredPanel->new($tags);
     $item11->AddWindow( $item13, 0, wxALIGN_CENTER_VERTICAL, 5 );
 
Index: /extensions/pLoader/trunk/src/Uploader/GUI/wxApp.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/GUI/wxApp.pm	(revision 5040)
+++ /extensions/pLoader/trunk/src/Uploader/GUI/wxApp.pm	(revision 5041)
@@ -214,5 +214,5 @@
     $self->_init_userdir;
 
-    my $conf = retrieve $self->conf_file if -e $self->conf_file;	
+    my $conf = retrieve $self->conf_file if -e $self->conf_file;
 
     if(defined $conf ){
@@ -407,12 +407,12 @@
     while(++$i<$n){    
         push @$list, join(
-		    ', ', 
-			map{ gettext($_) }
-			@$pl[$i..$n] 
-		);
+            ', ', 
+            map{ gettext($_) }
+            @$pl[$i..$n] 
+        );
     }
     push @$list, gettext($pl->[$n]);
-	
-	$list;
+    
+    $list;
 }
 
@@ -425,12 +425,12 @@
             grep {$_} 
             map{
-			    #  a locale may be unavailable due to system limitations ( ex: chinese, japanese when language pack are not installed )
-			    if(Wx::Locale::IsAvailable($_->[1])){
-		            my $locale = Wx::Locale->new($_->[1]);
-		            $locale->AddCatalogLookupPathPrefix(
+                #  a locale may be unavailable due to system limitations ( ex: chinese, japanese when language pack are not installed )
+                if(Wx::Locale::IsAvailable($_->[1])){
+                    my $locale = Wx::Locale->new($_->[1]);
+                    $locale->AddCatalogLookupPathPrefix(
                         File::Spec->catfile($self->root_dir, $self->locale_dir)
                     );
-		            $_ if $locale->AddCatalog('pLoader');
-				}
+                    $_ if $locale->AddCatalog('pLoader');
+                }
             }
             @{$self->languages}
@@ -483,5 +483,5 @@
         Wx::LogMessage gettext("Cannot find translation catalog files for %s. Use default language"), $locale->GetCanonicalName();
     }
-    $self->locale($locale);	
+    $self->locale($locale);    
 }
 
@@ -531,5 +531,5 @@
 
 sub _init_imagelist {
-    my ( $self ) = @_;	
+    my ( $self ) = @_;    
 
     my $stored_imagelist;
@@ -643,5 +643,5 @@
 
 sub Login {
-    my ( $self ) = @_;	
+    my ( $self ) = @_;    
 
     $self->login_dlg( 
@@ -650,7 +650,7 @@
                 title         => gettext("Piwigo login"),
                 site_url      => sub { $self->site_url(@_) },
-                site_username => sub { $self->site_username(@_) },	
+                site_username => sub { $self->site_username(@_) },    
                 site_password => sub { $self->site_password(@_) },
-                use_offline   => sub { $self->use_offline(@_) },	
+                use_offline   => sub { $self->use_offline(@_) },    
             }
         )
@@ -677,5 +677,5 @@
                 $self->site_url
             )
-        );	
+        );    
     }
 
@@ -729,5 +729,5 @@
             );
             mkdir $userdatadir;
-        }	
+        }    
     }
 
@@ -791,5 +791,5 @@
 
     map {
-    	my $image = $self->imagelist->image_sums->{$_};
+        my $image = $self->imagelist->image_sums->{$_};
 
         $wximagelist->Add(
@@ -864,8 +864,8 @@
         $self->GetWxBitmapType($type),
     )){
-    	Wx::LogMessage(
-    	    gettext("An error has occured. Can not save file %s"),
-    	    $image_file_out,
-    	)
+        Wx::LogMessage(
+            gettext("An error has occured. Can not save file %s"),
+            $image_file_out,
+        )
     };
 }
@@ -882,5 +882,5 @@
                 categories => gettext("albums"),
                 Categories => gettext("Albums"),
-                'Add new category' => gettext("Add new album"),	
+                'Add new category' => gettext("Add new album"),
                 'Category name' => gettext("Album name :"),
                 'New category' => gettext("New album"),
@@ -943,36 +943,36 @@
 
 
-	my $expr_params ;
-	eval { $expr_params = read_file( $file ); } ;
-	
-	my $paramValues = [] ;
-	if($expr_params){
-		my $expr = '$paramValues = ' ;
-		$expr .=  "$expr_params ; " ;
-		eval $expr ;
-	}
-	
-	return unless 'ARRAY' eq ref $paramValues ;
-	
-	if(scalar(@$paramValues )){
-	    my $params = $paramValues->[0] ;
-	    $self->SetKeyValues($params);
-	}
+    my $expr_params ;
+    eval { $expr_params = read_file( $file ); } ;
+    
+    my $paramValues = [] ;
+    if($expr_params){
+        my $expr = '$paramValues = ' ;
+        $expr .=  "$expr_params ; " ;
+        eval $expr ;
+    }
+    
+    return unless 'ARRAY' eq ref $paramValues ;
+    
+    if(scalar(@$paramValues )){
+        my $params = $paramValues->[0] ;
+        $self->SetKeyValues($params);
+    }
 }
 
 sub _read_default_user_properties {
-	my( $self, $file ) = @_ ;
-
-
-	my $expr_params ;
-	eval { $expr_params = read_file( $file ); } ;
-	my $properties;
-	if($expr_params){
-		my $expr = '$properties = ' ;
-		$expr .=  " { $expr_params }; " ;
-		eval $expr ;
-	}
-	$properties = {} unless 'HASH' eq ref $properties;
-	$self->user_defined_properties($properties);
+    my( $self, $file ) = @_ ;
+
+
+    my $expr_params ;
+    eval { $expr_params = read_file( $file ); } ;
+    my $properties;
+    if($expr_params){
+        my $expr = '$properties = ' ;
+        $expr .=  " { $expr_params }; " ;
+        eval $expr ;
+    }
+    $properties = {} unless 'HASH' eq ref $properties;
+    $self->user_defined_properties($properties);
 
 }
@@ -981,5 +981,5 @@
 
 sub SetKeyValues {
-    my ( $self, $params )= @_;	
+    my ( $self, $params )= @_;    
 
     foreach( keys %$params ) {
Index: /extensions/pLoader/trunk/src/Uploader/GUI/wxChoiceFilteredPanel.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/GUI/wxChoiceFilteredPanel.pm	(revision 5040)
+++ /extensions/pLoader/trunk/src/Uploader/GUI/wxChoiceFilteredPanel.pm	(revision 5041)
@@ -383,5 +383,5 @@
     my $choices = $self->choices->()||[];
     [
-       grep { $_->{name} =~ /^$searched/} @$choices
+       grep { $_->{name} =~ /$searched/i} @$choices
     ]
 }
Index: /extensions/pLoader/trunk/src/Uploader/GUI/wxImageListCtrl.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/GUI/wxImageListCtrl.pm	(revision 5040)
+++ /extensions/pLoader/trunk/src/Uploader/GUI/wxImageListCtrl.pm	(revision 5041)
@@ -252,4 +252,9 @@
 }
 
+sub GetSelectectItemsCount {
+    my ( $self ) = @_;    
+
+    scalar @{$self->GetSelectedItems};
+}
 
 sub GetSelectedItems {
@@ -270,5 +275,5 @@
       push @$items, $item
   }
-  
+
   $items;
 }
Index: /extensions/pLoader/trunk/src/Uploader/GUI/wxPhotoProperties.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/GUI/wxPhotoProperties.pm	(revision 5040)
+++ /extensions/pLoader/trunk/src/Uploader/GUI/wxPhotoProperties.pm	(revision 5041)
@@ -95,4 +95,6 @@
     $nb->AddPage( $page2, "Tags" );
 
+    $self->{notebook} = $nb;
+
 }
 
Index: /extensions/pLoader/trunk/src/Uploader/ImageList.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/ImageList.pm	(revision 5040)
+++ /extensions/pLoader/trunk/src/Uploader/ImageList.pm	(revision 5041)
@@ -128,4 +128,9 @@
                 stop_processing
                 image_selection_tags
+                image_selection_privacy_level
+                image_selection_name
+                image_selection_comment
+                image_selection_author
+                image_selection_create_date
      /
 );
@@ -736,4 +741,5 @@
                 display_mode
                 image_selection_tags
+                image_selection_properties
             /
         ] 
@@ -1404,4 +1410,11 @@
 }
 
+sub multi_selection_mode {
+    my ( $self ) = @_;
+
+    scalar @{$self->image_selection} > 1;
+}
+
+
 sub SetImageSelectionTags {
     my ( $self, $tags ) = @_;
@@ -1412,5 +1425,5 @@
     # append to each image
     # if multiple selection
-    if(scalar @{$self->image_selection} > 1){
+    if($self->multi_selection_mode){
         map {
             # need to dedup
@@ -1433,3 +1446,100 @@
 }
 
+
+sub SetImageSelectionPrivacyLevel {
+    my ( $self, $privacy_level ) = @_;
+
+    # append to each image
+    # if multiple selection
+    if($self->multi_selection_mode){
+        if(defined $privacy_level){
+            $self->image_selection_privacy_level($privacy_level);
+            map {
+                $self->GetImage($_)->privacy_level(
+                    $privacy_level
+                ) ;
+            }@{$self->image_selection}
+        };
+    }
+
+    $self->image_selection_privacy_level;
+}
+
+sub SetImageSelectionName {
+    my ( $self, $name ) = @_;
+
+    # append to each image
+    # if multiple selection
+    if($self->multi_selection_mode){
+        if(defined $name){
+            $self->image_selection_name($name);
+            map {
+                $self->GetImage($_)->site_name(
+                    $name
+                ) ;
+            }@{$self->image_selection}
+        };
+    }
+
+    $self->image_selection_name;
+}
+
+sub SetImageSelectionAuthor {
+    my ( $self, $author ) = @_;
+
+    # append to each image
+    # if multiple selection
+    if($self->multi_selection_mode){
+        if(defined $author){
+            $self->image_selection_author($author);
+            map {
+                $self->GetImage($_)->site_author(
+                    $author
+                ) ;
+            }@{$self->image_selection}
+        };
+    }
+
+    $self->image_selection_author;
+}
+
+sub SetImageSelectionComment {
+    my ( $self, $comment ) = @_;
+
+    # append to each image
+    # if multiple selection
+    if($self->multi_selection_mode){
+        if(defined $comment){
+            $self->image_selection_comment($comment);
+            map {
+                $self->GetImage($_)->site_comment(
+                    $comment
+                ) ;
+            }@{$self->image_selection}
+        };
+    }
+
+    $self->image_selection_comment;
+}
+
+
+sub SetImageSelectionCreateDate {
+    my ( $self, $date ) = @_;
+
+    # append to each image
+    # if multiple selection
+    if($self->multi_selection_mode){
+        if(defined $date){
+            $self->image_selection_create_date($date);
+            map {
+                $self->GetImage($_)->create_date(
+                    $date
+                ) ;
+            }@{$self->image_selection}
+        };
+    }
+
+    $self->image_selection_create_date;
+}
+
 1;
