Index: /branches/2.0/ws.php
===================================================================
--- /branches/2.0/ws.php	(revision 3192)
+++ /branches/2.0/ws.php	(revision 3453)
@@ -271,4 +271,16 @@
 <br/><b>categories</b> is a string list "category_id[,rank];category_id[,rank]" The rank is optional and is equivalent to "auto" if not given.'
     );
+  
+  $service->addMethod(
+    'pwg.categories.setInfo',
+    'ws_categories_setInfo',
+    array(
+      'category_id' => array(),
+      
+      'name' => array('default' => null),
+      'comment' => array('default' => null),
+      ),
+    'POST method only.'
+    );
 }
 
Index: /branches/2.0/tools/piwigo_remote.pl
===================================================================
--- /branches/2.0/tools/piwigo_remote.pl	(revision 3239)
+++ /branches/2.0/tools/piwigo_remote.pl	(revision 3453)
@@ -25,5 +25,17 @@
 GetOptions(
     \%opt,
-    qw/action=s file=s thumbnail=s high=s original=s categories=s chunk_size=i define=s%/
+    qw/
+          action=s
+          file=s
+          thumbnail=s
+          high=s
+          original=s
+          categories=s
+          chunk_size=i
+          base_url=s
+          username=s
+          password=s
+          define=s%
+      /
 );
 
@@ -32,10 +44,16 @@
 
 my %conf;
-$conf{base_url} = 'http://localhost/piwigo/2.0';
 $conf{response_format} = 'json';
-$conf{username} = 'plg';
-$conf{password} = 'plg';
 $conf{limit} = 10;
-$conf{chunk_size} = defined $opt{chunk_size} ? $opt{chunk_size} : 500_000;
+
+my %conf_default = (
+    base_url => 'http://localhost/piwigo/2.0',
+    username => 'plg',
+    password => 'plg',
+    chunk_size => 500_000,
+);
+foreach my $conf_key (keys %conf_default) {
+    $conf{$conf_key} = defined $opt{$conf_key} ? $opt{$conf_key} : $conf_default{$conf_key}
+}
 
 my $result = undef;
@@ -217,5 +235,5 @@
 }
 
-if ($opt{action} eq 'pwg.images.setInfo') {
+if ($opt{action} eq 'pwg.images.setInfo' or $opt{action} eq 'pwg.categories.setInfo') {
     $form = {
         method => $opt{action},
Index: /branches/2.0/include/ws_functions.inc.php
===================================================================
--- /branches/2.0/include/ws_functions.inc.php	(revision 3239)
+++ /branches/2.0/include/ws_functions.inc.php	(revision 3453)
@@ -1734,4 +1734,57 @@
 }
 
+function ws_categories_setInfo($params, &$service)
+{
+  global $conf;
+  if (!is_admin() || is_adviser() )
+  {
+    return new PwgError(401, 'Access denied');
+  }
+
+  // category_id
+  // name
+  // comment
+
+  $params['category_id'] = (int)$params['category_id'];
+  if ($params['category_id'] <= 0)
+  {
+    return new PwgError(WS_ERR_INVALID_PARAM, "Invalid category_id");
+  }
+
+  // database registration
+  $update = array(
+    'id' => $params['category_id'],
+    );
+
+  $info_columns = array(
+    'name',
+    'comment',
+    );
+
+  $perform_update = false;
+  foreach ($info_columns as $key)
+  {
+    if (isset($params[$key]))
+    {
+      $perform_update = true;
+      $update[$key] = $params[$key];
+    }
+  }
+
+  if ($perform_update)
+  {
+    include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
+    mass_updates(
+      CATEGORIES_TABLE,
+      array(
+        'primary' => array('id'),
+        'update'  => array_diff(array_keys($update), array('id'))
+        ),
+      array($update)
+      );
+  }
+  
+}
+
 function ws_logfile($string)
 {
