diff --git a/src/UnicaenZimbra/Entity/Filter/Action/Keep.php b/src/UnicaenZimbra/Entity/Filter/Action/Keep.php
new file mode 100644
index 0000000000000000000000000000000000000000..62e514d64b69138dac07edbaf55d4552f8626752
--- /dev/null
+++ b/src/UnicaenZimbra/Entity/Filter/Action/Keep.php
@@ -0,0 +1,36 @@
+<?php
+namespace UnicaenZimbra\Entity\Filter\Action;
+
+use SimpleXMLElement;
+
+/**
+ * @version    $Id$
+ * 
+ * Action de keep pour filtre Zimbra
+ * 
+ * @author     David Surville <david.surville at unicaen.fr>
+ */
+class Keep extends Action
+{
+
+    /**
+     *
+     * @param SimpleXMLElement $node
+     * @return self
+     */
+    protected function populate( SimpleXMLElement $node )
+    {
+        /* Aucune propriété particulière n'est requise */
+        return $this;
+    }
+
+    /**
+     * Retourne la liste des propriétés de l'objet sous forme de tableau associatif
+     *
+     * @return array
+     */
+    public function getArrayCopy()
+    {
+        return array();
+    }
+}
diff --git a/src/UnicaenZimbra/Processus/BoiteGenerique.php b/src/UnicaenZimbra/Processus/BoiteGenerique.php
index c8c9bd8a1408d11c04c941abd6eb092e6bed6da6..b8aaacaedb4e33812c13b4e8d5dc1ad308e43ce7 100644
--- a/src/UnicaenZimbra/Processus/BoiteGenerique.php
+++ b/src/UnicaenZimbra/Processus/BoiteGenerique.php
@@ -11,10 +11,12 @@ namespace UnicaenZimbra\Processus;
 use UnicaenZimbra\Entity\Account;
 use UnicaenZimbra\Entity\Identity;
 use UnicaenZimbra\Entity\Grant;
+use UnicaenZimbra\Entity\Right;
 use UnicaenZimbra\Entity\Filter\Filter;
 use UnicaenZimbra\Entity\Filter\Test\Address as FilterTestAddress;
 use UnicaenZimbra\Entity\Filter\Test\Header as FilterTestHeader;
 use UnicaenZimbra\Entity\Filter\Action\FileInto as FilterActionFileInto;
+use UnicaenZimbra\Entity\Filter\Action\Keep as FilterActionKeep;
 use UnicaenZimbra\Entity\Filter\Action\Stop as FilterActionStop;
 use UnicaenZimbra\Service\Folder as FolderService;
 
@@ -68,37 +70,43 @@ class BoiteGenerique extends Processus
     {
         $afName = $this->getMailName( $adresseFonctionnelle );
 
-        $accountService = $this->getServiceManager()->get('zimbraServiceAccount');
-        $folderService = $this->getServiceManager()->get('zimbraServiceFolder');
-        $filterService = $this->getServiceManager()->get('zimbraServiceFilter');
+	// récupération des services
+        $accountService	    = $this->getServiceManager()->get('zimbraServiceAccount');
+	$distribListService = $this->getServiceManager()->get('zimbraServiceDistributionList');
+        $folderService	    = $this->getServiceManager()->get('zimbraServiceFolder');
+        $filterService	    = $this->getServiceManager()->get('zimbraServiceFilter');
 
-        /****** Travail sur la boite générique ******/
+        // Travail sur la boite générique
         $bg = $accountService->get( $mail );
         $folderService->setAccount($bg );
         $filterService->setAccount($bg );
 
-        /* Alias */
-        $accountService->addAlias( $bg, $adresseFonctionnelle );
-
-        /* Répertoires */
+        // Liste de distribution
+	$distribList = $distribListService->create($adresseFonctionnelle);
+	$distribListService->addMembers($distribList, $mail);
+	
+        // Répertoires
         $inputFolder = $folderService->create($afName.' | Réception');
         $sentFolder  = $folderService->create($afName.' | Envoi');
 
-        /* Filtre de réception */
+        // Filtre de réception
         $filter = new Filter;
-        $filter->setName($afName.' | Réception');
-        $test = new FilterTestAddress;
-        $test->setHeader('to,cc');
-        $test->setStringComparison('is');
-        $test->setPart('all');
-        $test->setValue($adresseFonctionnelle);
-        $filter->addTest($test);
+        $filter->setName($afName.' | Réception')
+	       ->setCondition($filter::CONDITION_ANYOF);
+        $test1 = new FilterTestAddress;
+        $test1->setHeader('to,cc')->setStringComparison('contains')->setPart('all')
+	      ->setValue($adresseFonctionnelle);
+	$test2 = new FilterTestHeader;
+	$test2->setHeader('X-Zimbra-DL')->setStringComparison('contains')
+	      ->setValue($adresseFonctionnelle);
+        $filter->setTests(array($test1, $test2));
 
         $action = new FilterActionFileInto;
         $action->setFolderPath( $inputFolder->absFolderPath );
         $filter->addAction($action);
-        $filter->addAction( new FilterActionStop );
+        $filter->addAction( new FilterActionKeep );
         $filterService->createInput($filter);
+	
         return $this;
     }
 
@@ -145,56 +153,60 @@ class BoiteGenerique extends Processus
     {
         $afName = $this->getMailName( $adresseFonctionnelle );
 
-        $aliasService = $this->getServiceManager()->get('zimbraServiceAlias');
-        $accountService = $this->getServiceManager()->get('zimbraServiceAccount');
-        $folderService = $this->getServiceManager()->get('zimbraServiceFolder');
-        $filterService = $this->getServiceManager()->get('zimbraServiceFilter');
-        $identityService = $this->getServiceManager()->get('zimbraServiceIdentity');
+	$distribListService = $this->getServiceManager()->get('zimbraServiceDistributionList'); 
+        $accountService	    = $this->getServiceManager()->get('zimbraServiceAccount');
+        $folderService	    = $this->getServiceManager()->get('zimbraServiceFolder');
+        $filterService	    = $this->getServiceManager()->get('zimbraServiceFilter');
+	$rightService	    = $this->getServiceManager()->get('zimbraServiceRight');
+        $identityService    = $this->getServiceManager()->get('zimbraServiceIdentity');
 
-        $alias = $aliasService->get( $adresseFonctionnelle );
-
-        /****** Travail sur la boite générique ******/
-        $bgAccount = $accountService->get($alias->zimbraAliasTargetId, 'id');
+        // Travail sur la boite générique
+	$bgAccount = $distribListService->getMembers($adresseFonctionnelle, 1)[0];
         $userAccount = $accountService->get( $userMail );
         $folderService->setAccount($bgAccount);
 
-        /* Ajout des partages */
-        $grant = new Grant;
-        $grant->setGrantee($userAccount);
-        $grant->perm = Grant::PERM_MANAGE;
-
+        // Partages
         $inputFolder = $folderService->get($afName.' | Réception');
         $sentFolder = $folderService->get($afName.' | Envoi');
+        
+	$grant = new Grant;
+        $grant->setGrantee($userAccount);
+        $grant->perm = Grant::PERM_MANAGE;
 
         $folderService->addGrant( $inputFolder, $grant, FolderService::GRANT_ACTION_NONE )
                       ->createMountPoint($inputFolder, $userAccount, $inputFolder->absFolderPath)
                       ->addGrant( $sentFolder, $grant, FolderService::GRANT_ACTION_NONE )
                       ->createMountPoint($sentFolder, $userAccount, $sentFolder->absFolderPath);
 
-        /****** Travail sur la boite utilisateur ******/
+        // Travail sur la boite utilisateur
         $filterService->setAccount($userAccount);
         $identityService->setAccount($userAccount);
         $folderService->setAccount($userAccount);
 
-        /* Filtres */
+        // Filtre d'envoi
         $filter = new Filter;
         $filter->setName($afName.' | Envoi');
-        $test = new FilterTestHeader;
-        $test->setHeader('Reply-to');
-        $test->setStringComparison('is');
-        $test->setValue($adresseFonctionnelle);
+        $test = new FilterTestAddress;
+	$test->setHeader('from')->setStringComparison('contains')->setPart('all')
+	     ->setValue($adresseFonctionnelle);
         $filter->addTest($test);
 
         $action = new FilterActionFileInto;
         $action->setFolderPath( $afName.' | Envoi' );
         $filter->addAction($action);
-        $filter->addAction( new FilterActionStop );
         $filterService->createOutput($filter);
-
-        /* Avatar */
+	
+	// ACE
+	$ace = new Right;
+	$ace->setTarget($distribListService->get($adresseFonctionnelle))
+	    ->setGrantee($userAccount)
+	    ->setRightByRightName('sendAsDistList');
+	$rightService->grantRight($ace);
+
+        // Avatar
         $identity = new Identity;
         $identity->setName($afName);
-        $identity->zimbraPrefFromAddress = $userMail;
+        $identity->zimbraPrefFromAddress = $adresseFonctionnelle;
         $identity->zimbraPrefFromAddressType = 'sendAs';
         $identity->zimbraPrefFromDisplay = $adresseFonctionnelle;
         $identity->zimbraPrefWhenInFolderIds = $folderService->get($afName.' | Réception')->getId();
@@ -204,6 +216,7 @@ class BoiteGenerique extends Processus
         $identity->zimbraPrefWhenSentToAddresses = $adresseFonctionnelle;
         $identity->zimbraPrefWhenSentToEnabled = true;
         $identityService->create($identity);
+	
         return $this;
     }
 
diff --git a/src/UnicaenZimbra/Service/Alias.php b/src/UnicaenZimbra/Service/Alias.php
index 4ebef999bc4654e575c4b913d1333ed5587b69f1..f1ce6bc5282bbccbf684aab8447d3fda90d85f9c 100644
--- a/src/UnicaenZimbra/Service/Alias.php
+++ b/src/UnicaenZimbra/Service/Alias.php
@@ -10,6 +10,7 @@ namespace UnicaenZimbra\Service;
 
 use UnicaenZimbra\Zimbra;
 use UnicaenZimbra\Entity\Alias as AliasEntity;
+use UnicaenZimbra\Exception;
 
 class Alias extends Service {
 
diff --git a/src/UnicaenZimbra/Service/Folder.php b/src/UnicaenZimbra/Service/Folder.php
index a7a1a1d809ef42f6bca1543d1ddd68127910fb84..1c514038da3c8a1e414d983922aef6788ec8a9d0 100644
--- a/src/UnicaenZimbra/Service/Folder.php
+++ b/src/UnicaenZimbra/Service/Folder.php
@@ -442,11 +442,11 @@ class Folder extends Service {
 
         $currentAccount = $this->account;
         $this->account = $account;
+	
         $destFolderParent = dirname( $absPath);
         if ('.' == $destFolderParent) $destFolderParent = '/';
         $destFolderName = basename( $absPath );
         $destFolderParent = $this->get($destFolderParent);
-        $this->account = $currentAccount;
 
         $attributes = array();
         $params = array(
@@ -460,6 +460,8 @@ class Folder extends Service {
         );
         $this->applyAccountContext();
         $this->getZimbra()->request('CreateMountpointRequest', $attributes, $params, self::URN);
+	
+	$this->account = $currentAccount;
         return $this;
     }