diff --git a/htdocs/adherents/stats/index.php b/htdocs/adherents/stats/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..2f03f6a6436db9af5a51c0fe6971f2785ba03d2f
--- /dev/null
+++ b/htdocs/adherents/stats/index.php
@@ -0,0 +1,225 @@
+<?php
+/* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
+ * Copyright (c) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/**
+ *	    \file       htdocs/adherents/stats/bycountry.php
+ *      \ingroup    member
+ *		\brief      Page des stats
+ *		\version    $Id$
+*/
+
+require("../../main.inc.php");
+require_once(DOL_DOCUMENT_ROOT."/commande/class/commande.class.php");
+require_once(DOL_DOCUMENT_ROOT."/commande/class/commandestats.class.php");
+require_once(DOL_DOCUMENT_ROOT."/core/class/dolgraph.class.php");
+
+$graphwidth = 700;
+$mapratio = 0.5;
+$graphheight = round($graphwidth * $mapratio);
+
+$mode=GETPOST('mode')?GETPOST('mode'):'';
+
+
+// Security check
+if ($user->societe_id > 0)
+{
+  $action = '';
+  $socid = $user->societe_id;
+}
+if (! $user->rights->adherent->cotisation->lire)
+accessforbidden();
+
+$year = strftime("%Y", time());
+$startyear=$year-2;
+$endyear=$year;
+
+
+
+/*
+ * View
+ */
+
+
+llxHeader('','','','',0,0,array('http://www.google.com/jsapi'));
+
+$title=$langs->trans("Statistics");
+if ($mode == 'memberbycountry') $title=$langs->trans("MembersStatisticsByCountries");
+if ($mode == 'memberbystate') $title=$langs->trans("MembersStatisticsByState");
+
+print_fiche_titre($title, $mesg);
+
+create_exdir($dir);
+
+if ($mode)
+{
+	// Define sql
+	if ($mode == 'memberbycountry')
+	{
+		$label=$langs->trans("Country");
+
+		$data = array();
+		$sql.="SELECT COUNT(d.rowid) as nb, MAX(d.datevalid) as lastdate, c.code, c.libelle as label";
+		$sql.=" FROM ".MAIN_DB_PREFIX."adherent as d LEFT JOIN ".MAIN_DB_PREFIX."c_pays as c on d.pays = c.rowid";
+		$sql.=" WHERE statut = 1";
+		$sql.=" GROUP BY c.libelle, c.code";
+		//print $sql;
+	}
+	if ($mode == 'memberbystate')
+	{
+		$label=$langs->trans("State");
+
+		$data = array();
+		$sql.="SELECT COUNT(d.rowid) as nb, MAX(d.datevalid) as lastdate, c.nom as label";
+		$sql.=" FROM ".MAIN_DB_PREFIX."adherent as d LEFT JOIN ".MAIN_DB_PREFIX."c_departements as c on d.fk_departement = c.rowid";
+		$sql.=" WHERE statut = 1";
+		$sql.=" GROUP BY c.nom";
+		//print $sql;
+	}
+
+	// Define $data array
+	dol_syslog("Count member sql=".$sql);
+	$resql=$db->query($sql);
+	if ($resql)
+	{
+		$num=$db->num_rows($resql);
+		$i=0;
+		while ($i < $num)
+		{
+			$obj=$db->fetch_object($resql);
+			if ($mode == 'memberbycountry')
+			{
+				$data[]=array('label'=>($langs->trans("Country".$obj->code)!="Country".$obj->code?$langs->trans("Country".$obj->code):($obj->label?$obj->label:$langs->trans("Unknown"))),
+							'code'=>$obj->code,
+							'nb'=>$obj->nb,
+							'lastdate'=>$obj->lastdate
+				);
+			}
+			if ($mode == 'memberbystate')
+			{
+				$data[]=array('label'=>($obj->label?$obj->label:$langs->trans("Unknown")),
+							'nb'=>$obj->nb,
+							'lastdate'=>$obj->lastdate
+				);
+			}
+
+			$i++;
+		}
+		$db->free($resql);
+	}
+	else
+	{
+		dol_print_error($db);
+	}
+}
+
+// Print title
+if ($mode && ! sizeof($data))
+{
+	print $langs->trans("NoValidatedMemberYet").'<br>';
+	print '<br>';
+}
+else
+{
+	if ($mode == 'memberbycountry') print $langs->trans("MembersByCountryDesc").'<br>';
+	else if ($mode == 'memberbystate') print $langs->trans("MembersByStateDesc").'<br>';
+	else
+	{
+		print $langs->trans("MembersStatisticsDesc").'<br>';
+		print '<br>';
+		print '<a href="'.$_SERVER["PHP_SELF"].'?mode=memberbycountry">'.$langs->trans("MembersStatisticsByCountries").'</a><br>';
+		print '<br>';
+		print '<a href="'.$_SERVER["PHP_SELF"].'?mode=memberbystate">'.$langs->trans("MembersStatisticsByState").'</a><br>';
+	}
+	print '<br>';
+}
+
+
+// Show graphics
+if ($mode == 'memberbycountry')
+{
+	// Assume we've already included the proper headers so just call our script inline
+	print "\n<script type='text/javascript'>\n";
+	print "google.load('visualization', '1', {'packages': ['geomap']});\n";
+	print "google.setOnLoadCallback(drawMap);\n";
+	print "function drawMap() {\n\tvar data = new google.visualization.DataTable();\n";
+
+	// Get the total number of rows
+	print "\tdata.addRows(".sizeof($data).");\n";
+	print "\tdata.addColumn('string', 'Country');\n";
+	print "\tdata.addColumn('number', 'Number');\n";
+
+	// loop and dump
+	$i=0;
+	foreach($data as $val)
+	{
+		// fix case of uk
+	    if ($val['label'] == 'Great Britain') { $val['label'] = 'United Kingdom'; }
+	    print "\tdata.setValue(".$i.", 0, \"".ucfirst($val['label'])."\");\n";
+	    print "\tdata.setValue(".$i.", 1, ".$val['nb'].");\n";
+	    // Google's Geomap only supports up to 400 entries
+	    if ($i >= 400){ break; }
+		$i++;
+	}
+
+	print "\tvar options = {};\n";
+	print "\toptions['dataMode'] = 'regions';\n";
+	print "\toptions['width'] = ".$graphwidth.";\n";
+	print "\toptions['height'] = ".$graphheight.";\n";
+	print "\tvar container = document.getElementById('".$mode."');\n";
+	print "\tvar geomap = new google.visualization.GeoMap(container);\n";
+	print "\tgeomap.draw(data, options);\n";
+	print "};\n";
+	print "</script>\n";
+
+	// print the div tag that will contain the map
+	print '<div align="center" id="'.$mode.'"></div>'."\n";
+	print '<br>';
+}
+
+if ($mode)
+{
+	// Print array
+	print '<table class="border" width="100%">';
+	print '<tr class="liste_titre">';
+	print '<td align="center">'.$label.'</td>';
+	print '<td align="center">'.$langs->trans("NbOfMembers").'</td>';
+	print '<td align="center">'.$langs->trans("LastMemberDate").'</td>';
+	print '</tr>';
+
+	$oldyear=0;
+	$var=true;
+	foreach ($data as $val)
+	{
+		$year = $val['year'];
+		$var=!$var;
+		print '<tr '.$bc[$var].'>';
+	    print '<td align="center">'.$val['label'].'</td>';
+		print '<td align="right">'.$val['nb'].'</td>';
+		print '<td align="right">'.dol_print_date($val['lastdate'],'dayhour').'</td>';
+		print '</tr>';
+		$oldyear=$year;
+	}
+
+	print '</table>';
+}
+
+$db->close();
+
+llxFooter('$Date$ - $Revision$');
+?>
diff --git a/htdocs/includes/menus/init_menu_auguria.sql b/htdocs/includes/menus/init_menu_auguria.sql
index e2012ab941db6f435f7c067bfbee98c5e17e6312..8a05ce6b5567a31aad58108c8c531de2f5dcdf4e 100644
--- a/htdocs/includes/menus/init_menu_auguria.sql
+++ b/htdocs/includes/menus/init_menu_auguria.sql
@@ -270,13 +270,15 @@ insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk
 insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->import->enabled', __HANDLER__, 'left', 4131__+MAX_llx_menu__, 'tools', '', 4130__+MAX_llx_menu__, '/imports/import.php?leftmenu=import', 'NewImport', 1, 'exports', '$user->rights->import->run', '', 2, 0, __ENTITY__);
 -- Members
 insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4200__+MAX_llx_menu__, 'members', '', 13__+MAX_llx_menu__, '/adherents/index.php?leftmenu=members&amp;mainmenu=members', 'Members', 0, 'members', '$user->rights->adherent->lire', '', 2, 0, __ENTITY__);
-insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4201__+MAX_llx_menu__, 'members', '', 4200__+MAX_llx_menu__, '/adherents/fiche.php?action=create', 'NewMember', 1, 'members', '$user->rights->adherent->creer', '', 2, 0, __ENTITY__);
+insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4201__+MAX_llx_menu__, 'members', '', 4200__+MAX_llx_menu__, '/adherents/fiche.php?leftmenu=members&amp;action=create', 'NewMember', 1, 'members', '$user->rights->adherent->creer', '', 2, 0, __ENTITY__);
 insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4202__+MAX_llx_menu__, 'members', '', 4200__+MAX_llx_menu__, '/adherents/liste.php', 'List', 1, 'members', '$user->rights->adherent->lire', '', 2, 1, __ENTITY__);
-insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4203__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/liste.php?statut=-1', 'MenuMembersToValidate', 2, 'members', '$user->rights->adherent->lire', '', 2, 2, __ENTITY__);
-insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4204__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/liste.php?statut=1', 'MenuMembersValidated', 2, 'members', '$user->rights->adherent->lire', '', 2, 3, __ENTITY__);
-insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4205__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/liste.php?statut=1&amp;filter=outofdate', 'MenuMembersNotUpToDate', 2, 'members', '$user->rights->adherent->lire', '', 2, 4, __ENTITY__);
-insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4206__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/liste.php?statut=1&amp;filter=uptodate', 'MenuMembersUpToDate', 2, 'members', '$user->rights->adherent->lire', '', 2, 5, __ENTITY__);
-insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4207__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/liste.php?statut=0', 'MenuMembersResiliated', 2, 'members', '$user->rights->adherent->lire', '', 2, 6, __ENTITY__);
+insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4203__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/liste.php?leftmenu=members&amp;statut=-1', 'MenuMembersToValidate', 2, 'members', '$user->rights->adherent->lire', '', 2, 2, __ENTITY__);
+insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4204__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/liste.php?leftmenu=members&amp;statut=1', 'MenuMembersValidated', 2, 'members', '$user->rights->adherent->lire', '', 2, 3, __ENTITY__);
+insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4205__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/liste.php?leftmenu=members&amp;statut=1&amp;filter=outofdate', 'MenuMembersNotUpToDate', 2, 'members', '$user->rights->adherent->lire', '', 2, 4, __ENTITY__);
+insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4206__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/liste.php?leftmenu=members&amp;statut=1&amp;filter=uptodate', 'MenuMembersUpToDate', 2, 'members', '$user->rights->adherent->lire', '', 2, 5, __ENTITY__);
+insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4207__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/liste.php?leftmenu=members&amp;statut=0', 'MenuMembersResiliated', 2, 'members', '$user->rights->adherent->lire', '', 2, 6, __ENTITY__);
+insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4207__+MAX_llx_menu__, 'members', '', 4202__+MAX_llx_menu__, '/adherents/stats/index.php?leftmenu=members&amp;statut=0', 'MenuMembersResiliated', 2, 'members', '$user->rights->adherent->lire', '', 2, 6, __ENTITY__);
+-- Members - Subscriptions
 insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4300__+MAX_llx_menu__, 'members', '', 13__+MAX_llx_menu__, '/adherents/index.php?leftmenu=accountancy&amp;mainmenu=members', 'Subscriptions', 0, 'compta', '$user->rights->adherent->cotisation->lire', '', 2, 1, __ENTITY__);
 insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4301__+MAX_llx_menu__, 'members', '', 4300__+MAX_llx_menu__, '/adherents/liste.php?statut=-1&amp;leftmenu=accountancy&amp;mainmenu=members', 'NewSubscription', 1, 'compta', '$user->rights->adherent->cotisation->creer', '', 2, 0, __ENTITY__);
 insert into llx_menu (enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('$conf->adherent->enabled', __HANDLER__, 'left', 4302__+MAX_llx_menu__, 'members', '', 4300__+MAX_llx_menu__, '/adherents/cotisations.php?leftmenu=accountancy', 'List', 1, 'compta', '$user->rights->adherent->cotisation->lire', '', 2, 1, __ENTITY__);
diff --git a/htdocs/includes/menus/standard/eldy.lib.php b/htdocs/includes/menus/standard/eldy.lib.php
index 459e8cb2249ce5c9b6b8d1c3576ef9b1768f669e..863bee70a20d266be674b13cdc7c069360c38f60 100644
--- a/htdocs/includes/menus/standard/eldy.lib.php
+++ b/htdocs/includes/menus/standard/eldy.lib.php
@@ -1296,6 +1296,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after)
                 $newmenu->add("/adherents/liste.php?leftmenu=members&amp;statut=1&amp;filter=uptodate",$langs->trans("MenuMembersUpToDate"),2,$user->rights->adherent->lire);
                 $newmenu->add("/adherents/liste.php?leftmenu=members&amp;statut=1&amp;filter=outofdate",$langs->trans("MenuMembersNotUpToDate"),2,$user->rights->adherent->lire);
                 $newmenu->add("/adherents/liste.php?leftmenu=members&amp;statut=0",$langs->trans("MenuMembersResiliated"),2,$user->rights->adherent->lire);
+                $newmenu->add("/adherents/stats/index.php?leftmenu=members",$langs->trans("MenuMembersStats"),1,$user->rights->adherent->lire);
 
                 $newmenu->add("/adherents/index.php?leftmenu=members&amp;mainmenu=members",$langs->trans("Subscriptions"),0,$user->rights->adherent->cotisation->lire);
                 $newmenu->add("/adherents/liste.php?leftmenu=members&amp;statut=-1,1&amp;mainmenu=members",$langs->trans("NewSubscription"),1,$user->rights->adherent->cotisation->creer);
diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang
index cd8f69e2d344fea9fb5325694bed926669461868..980f81ecbc9f19ccf6a06903a7d87b62e5a7e197 100644
--- a/htdocs/langs/en_US/members.lang
+++ b/htdocs/langs/en_US/members.lang
@@ -167,6 +167,11 @@ SubscriptionPayment=Subscription payment
 LastSubscriptionDate=Last subscription date
 LastSubscriptionAmount=Last subscription amount
 MembersStatisticsByCountries=Members statistics by country
+MembersStatisticsByState=Members statistics by state/province
 NbOfMembers=Number of members
 NoValidatedMemberYet=No validated members found
 MembersByCountryDesc=This screen show you statistics on members by countries. Graphic depends however on Google online graph service and is available only if an internet connection is is working.
+MembersByStateDesc=This screen show you statistics on members by state/provinces/canton.
+MembersStatisticsDesc=Choose statistics you want to read...
+MenuMembersStats=Statistics
+LastMemberDate=Last member date
\ No newline at end of file
diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang
index 6701a370d88aff2367656a10ab17e3a889d27aae..af359e2598db6a78cc6afa84711bf6c7edf0cc4f 100644
--- a/htdocs/langs/fr_FR/members.lang
+++ b/htdocs/langs/fr_FR/members.lang
@@ -168,6 +168,11 @@ SubscriptionPayment=Paiement cotisation
 LastSubscriptionDate=Date de la dernière cotisation
 LastSubscriptionAmount=Montant de la dernière cotisation
 MembersStatisticsByCountries=Statistiques des membres par pays
+MembersStatisticsByState=Statistiques des membres par département/province/canton
 NbOfMembers=Nombre de membres
 NoValidatedMemberYet=Aucun membre validé trouvé
 MembersByCountryDesc=Cet écran vous présente une vue statistique du nombre d'adhérent par pays. Le graphique utilise toutefois le service en ligne de graphique de Google et n'est opérationnel uniquement si une connexion internet est disponible.
+MembersByStateDesc=Cet écran vous présente une vue statistique du nombre d'adhérent par département/province/canton.
+MembersStatisticsDesc=Choisissez les statistiques que vous désirez consulter...
+MenuMembersStats=Statistiques
+LastMemberDate=Date dernier adhérent