diff --git a/htdocs/includes/modules/mailings/banane.modules.php b/htdocs/includes/modules/mailings/banane.modules.php
new file mode 100644
index 0000000000000000000000000000000000000000..8725a4a0484a7cd5ff2f81c2bdb5045b4cb2ad14
--- /dev/null
+++ b/htdocs/includes/modules/mailings/banane.modules.php
@@ -0,0 +1,196 @@
+<?php
+/* Copyright (C) 2011 François Cerbelle <francois@cerbelle.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.
+ * or see http://www.gnu.org/
+ */
+
+/**
+ *     	\file       htdocs/includes/modules/mailings/banane.modules.php
+ *     	\ingroup    mailing
+ *     	\brief      Provides a list of recipients for mailing module
+ *     	\version    $Revision$
+ */
+
+include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php';
+
+
+/**
+ *     \class      mailing_banane
+ *     \brief      Class to manage a list of personalised recipients for mailing feature
+ */
+class mailing_banane extends MailingTargets
+{
+	var $name='ContactsByCompanyCategory';
+    // This label is used if no translation is found for key MailingModuleDescXXX where XXX=name is found
+    var $desc='Add contacts by company category';
+    var $require_admin=0;
+
+    var $require_module=array();
+    var $picto='contact';
+    var $db;
+
+
+    function mailing_banane($DB)
+    {
+        $this->db=$DB;
+    }
+
+
+    /**
+     *    This is the main function that returns the array of emails
+     *    @param      mailing_id    Id of mailing. No need to use it.
+     *    @param      filterarray   Category
+     *    @return     int           <0 if error, number of emails added if ok
+     */
+    function add_to_target($mailing_id,$filtersarray=array())
+    {
+    	global $conf;
+    	
+    	$target = array();
+    	
+    	$sql = "SELECT sp.rowid, sp.email, sp.name, sp.firstname";
+    	$sql.= " FROM ".MAIN_DB_PREFIX."socpeople as sp";
+    	$sql.= ", ".MAIN_DB_PREFIX."categorie as c";
+    	$sql.= ", ".MAIN_DB_PREFIX."categorie_societe as cs";
+    	$sql.= " WHERE (sp.email IS NOT NULL AND sp.email != '')";
+    	$sql.= " AND sp.entity = ".$conf->entity;
+    	$sql.= " AND cs.fk_categorie = c.rowid";
+    	$sql.= " AND cs.fk_societe = sp.fk_soc";
+    	
+    	if ($filtersarray[0] <> 'all') $sql.= " AND c.label = '".$filtersarray[0]."'";
+    	$sql.= " ORDER BY sp.name, sp.firstname";
+    	
+    	$resql = $this->db->query($sql);
+    	if ($resql)
+    	{
+    		$num = $this->db->num_rows($resql);
+    		$i = 0;
+    		
+    		while ($i < $num)
+    		{
+    			$obj= $this->db->fetch_object($resql);
+    			$target[] = array(
+    						'email' => $obj->email,
+                    		'name' => $obj->name,
+                    		'firstname' => $obj->firstname,
+                    		'other' => $other,
+    						'url' => '<a href="'.DOL_URL_ROOT.'/contact/fiche.php?id='.$obj->rowid.'">'.img_object('',"contact").'</a>'
+    						);
+				$i++;
+			}
+		}
+
+        return parent::add_to_target($mailing_id, $target);
+    }
+
+
+    /**
+	 *		On the main mailing area, there is a box with statistics.
+	 *		If you want to add a line in this report you must provide an
+	 *		array of SQL request that returns two field:
+	 *		One called "label", One called "nb".
+	 *		@return		array
+	 */
+	function getSqlArrayForStats()
+	{
+		global $conf, $langs;
+
+		$statssql=array();
+		for ($i=0; $i<5; $i++) {
+			$statssql[$i] = "SELECT c.label, count(sp.rowid) AS nb";
+			$statssql[$i].= " FROM ".MAIN_DB_PREFIX."categorie as c";
+			$statssql[$i].= ", ".MAIN_DB_PREFIX."categorie_societe as cs";
+			$statssql[$i].= ", ".MAIN_DB_PREFIX."socpeople as sp";
+			$statssql[$i].= " WHERE (sp.email IS NOT NULL AND sp.email != '')";
+			$statssql[$i].= " AND sp.entity = ".$conf->entity;
+			$statssql[$i].= " AND cs.fk_categorie = c.rowid";
+			$statssql[$i].= " AND cs.fk_societe = sp.fk_soc";
+			$statssql[$i].= " GROUP BY c.label";
+			$statssql[$i].= " ORDER BY nb DESC";
+			$statssql[$i].= " LIMIT $i,1";
+		}
+
+		return $statssql;
+	}
+
+
+    /**
+     *		Return here number of distinct emails returned by your selector.
+     *		@return		int
+     */
+    function getNbOfRecipients()
+    {
+    	global $conf;
+    	
+    	$sql = "SELECT count(distinct(sp.email)) AS nb";
+    	$sql.= " FROM ".MAIN_DB_PREFIX."categorie as c";
+    	$sql.= ", ".MAIN_DB_PREFIX."categorie_societe as cs";
+    	$sql.= ", ".MAIN_DB_PREFIX."socpeople as sp";
+    	$sql.= " WHERE (sp.email IS NOT NULL AND sp.email != '')";
+    	$sql.= " AND sp.entity = ".$conf->entity;
+    	$sql.= " AND cs.fk_categorie = c.rowid";
+    	$sql.= " AND cs.fk_societe = sp.fk_soc";
+    	// La requete doit retourner un champ "nb" pour etre comprise
+    	// par parent::getNbOfRecipients
+    	return parent::getNbOfRecipients($sql);
+    }
+
+    /**
+     *      This is to add a form filter to provide variant of selector
+     *		If used, the HTML select must be called "filter"
+     *      @return     string      A html select zone
+     */
+    function formFilter()
+    {
+    	global $conf, $langs;
+    	
+    	$langs->load("companies");
+    	
+        $sql = "SELECT c.label, count(distinct(sp.email)) AS nb";
+        $sql.= " FROM ".MAIN_DB_PREFIX."categorie as c";
+        $sql.= ", ".MAIN_DB_PREFIX."categorie_societe as cs";
+        $sql.= ", ".MAIN_DB_PREFIX."socpeople as sp";
+        $sql.= " WHERE (sp.email IS NOT NULL AND sp.email != '')";
+        $sql.= " AND sp.entity = ".$conf->entity;
+        $sql.= " AND cs.fk_categorie = c.rowid";
+        $sql.= " AND cs.fk_societe = sp.fk_soc";
+        $sql.= " GROUP BY c.label";
+        $sql.= " ORDER BY c.label";
+
+        $resql = $this->db->query($sql);
+        
+        $s='';
+        $s.='<select name="filter" class="flat">';
+        $s.='<option value="all">'.$langs->trans("ContactsAllShort").'</option>';
+        if ($resql)
+        {
+            $num = $this->db->num_rows($resql);
+            $i = 0;
+            while ($i < $num)
+            {
+                $obj = $this->db->fetch_object($resql);
+                $s.='<option value="'.$obj->label.'">'.$obj->label.' ('.$obj->nb.')</option>';
+                $i++;
+            }
+        }
+        $s.='</select>';
+        
+        return $s;
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang
index fa8fb1144950cb99f16f4f84fb06225d644fb04a..c831a5a129bf2a620edb2a14f01df0d1e8650ca0 100644
--- a/htdocs/langs/en_US/mails.lang
+++ b/htdocs/langs/en_US/mails.lang
@@ -77,6 +77,8 @@ MailingModuleDescFundationMembers=Foundation members with emails
 MailingModuleDescEmailsFromFile=EMails from a text file (email;lastname;firstname;other)
 MailingModuleDescContactsCategories=Third parties with emails (by category)
 MailingModuleDescDolibarrContractsLinesExpired=Third parties with expired contract's lines
+MailingModuleDescContactsByCompanyCategory=Contacts with emails by third parties category
+MailingModuleDescMembersCategories=Foundation members with emails (by categories)
 
 LineInFile=Line %s in file
 RecipientSelectionModules=Defined requests for recipient's selection
diff --git a/htdocs/langs/fr_FR/mails.lang b/htdocs/langs/fr_FR/mails.lang
index f195ae6303362b944556efcd44e642cfe7c4494d..27c6182271df2f1795bff35dcbd055220edca843 100644
--- a/htdocs/langs/fr_FR/mails.lang
+++ b/htdocs/langs/fr_FR/mails.lang
@@ -77,6 +77,8 @@ MailingModuleDescFundationMembers=Adhérents avec e-mail
 MailingModuleDescEmailsFromFile=EMails issus d'un fichier texte (email;nom;prenom;autre)
 MailingModuleDescContactsCategories=Tiers avec e-mail (par catégorie)
 MailingModuleDescDolibarrContractsLinesExpired=Tiers avec lignes de contrats de services expirées
+MailingModuleDescContactsByCompanyCategory=Contacts avec e-mail par catégorie de tiers
+MailingModuleDescMembersCategories=Adhérents avec e-mail (par catégorie)
 
 LineInFile=Ligne %s du fichier
 RecipientSelectionModules=Modules de sélection des destinataires