diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..1c046bd0a9cbbffe3385b58dfc052ce63f48e5a2
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,23 @@
+CHANGELOG
+=========
+
+3.0.0 (01/10/2020)
+------------------
+
+- Adaptation du code pour le passage à ZF3.
+- Scission des classes liées aux entités ("Generic", "Group", "People", "Root", "Structure" et "System") en deux classes :
+    - classe de base avec un setter pour (presque) chaque attribut Ldap
+    - classe qui hérite de la classe de base avec des fonctions spécifiques à l'entité
+- Gestions des attributs "supannActivite", "ucbnSecteurDisciplinaire" et "supannEmpCorps"
+- Ajout des getters pour les attributs de la classe "People" : "rid", "sambaSID", "uidNumber", "gidNumber", "loginShell" et "homeDirectory"
+- Ajout des setters pour les différents attributs liés aux structures de la classe "People"
+- Ajout des attributs cachés "createTimestamp" et "modifyTimestamp" comme DateTimeAttributes
+- Ajout des setters pour les attributs de la classe "People" : "supannEtablissement", "supannEtuAnneeInscription", "supannEtuCursusAnnee", "supannEtuDiplome" et "supannEtuEtape"
+- Ajout des setters pour les attributs de la classe "People" : "supannEtuInscription", "ucbnSiteLocalisation", "ucbnAnneePostBac", "ucbnCodeEtape", "ucbnEtuComplementInscription", 
+"ucbnPrivateAddress", "ucbnPrivateAddresseBis", "supannEtuElementPedagogique", "supannEtuRegimeInscription", "supannEtuSecteurDisciplinaire" 
+et "supannEtuTypeDiplome"
+- Gestion de la modification de l'attribut "supannRefId" par étiquette
+- Ajout de fonctions de vérification du statut d'une personne dans la classe "People"
+- Fonction de récupération de champs date au format Php DateTime
+- Mise en place d'une entité "Root" pour gérer la racine de l'annuaire Ldap et d'un service associé
+- Ajout des setters pour les attributs de la classe "People" : "supannAutreMail" et "mailForwardingAddress"
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..0e6ea14691837d42ed7dca7ba7b2ca30c9940acd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,42 @@
+# UnicaenLdap
+
+ * [Introduction](#introduction)
+ * [Installation](#installation)
+ * [Configuration](#configuration)
+ 
+## Introduction
+ 
+Ce module permet de se connecter à l'annuaire Ldap de l'université et de consulter/modifier ses données. 
+
+## Pré-requis
+
+L'utilisation de ce module nécessite l'installation de l'extension `ext-ldap` de PHP.
+
+## Installation
+
+```bash 
+$ composer require unicaen/ldap
+```
+
+## Configuration
+
+> Récupérer les fichiers de config du module 
+ 
+```bash
+$ cp -n vendor/unicaen/zimbra/config/unicaen-ldap.local.php.dist config/autoload/unicaen-ldap.local.php
+```
+
+> Adapter le contenu à vos besoins en configurant notamment les paramètres de connexion au serveur Ldap.
+
+```php
+'unicaen-ldap' => [
+    'host'                => 'ldap-test.unicaen.fr',
+    'port'                => 389,
+    'version'             => 3,
+    'baseDn'              => "dc=unicaen,dc=fr", // racine de l'annuaire
+    'bindRequiresDn'      => true,
+    'username'            => "uid=xxxx,ou=system,dc=unicaen,dc=fr",
+    'password'            => "xxxx",
+    'accountFilterFormat' => "(&(objectClass=supannPerson)(supannAliasLogin=%s))",
+]
+```
\ No newline at end of file
diff --git a/src/UnicaenLdap/Entity/People.php b/src/UnicaenLdap/Entity/People.php
index 9ac603e8c6f6b7308fa914ba8b3c52df1f6df448..2028027dc72aa7680954b6fe8b8e8faf738f1cfa 100644
--- a/src/UnicaenLdap/Entity/People.php
+++ b/src/UnicaenLdap/Entity/People.php
@@ -4,6 +4,7 @@ namespace UnicaenLdap\Entity;
 
 use DateTime;
 use UnicaenLdap\Entity\Base\People as BasePeople;
+use UnicaenLdap\Entity\Group as GroupEntity;
 use UnicaenLdap\Entity\Structure as StructureEntity;
 use UnicaenLdap\Entity\System as SystemEntity;
 use UnicaenLdap\Exception;
@@ -392,7 +393,7 @@ class People extends BasePeople
     /**
      * Retourne les structures auxquelles appartient la personne
      *
-     * @return StructureEntity[]|null
+     * @return StructureEntity|StructureEntity[]|null
      */
     public function getStructure()
     {
@@ -425,7 +426,7 @@ class People extends BasePeople
     /**
      * Retourne les structures recherche auxquelles appartient la personne
      *
-     * @return StructureEntity[]|null
+     * @return StructureEntity|StructureEntity[]|null
      */
     public function getStructureRecherche()
     {
@@ -689,6 +690,21 @@ class People extends BasePeople
         return 1 == count($value) ? array_shift($value) : $value;
     }
 
+    /**
+     * Retourne la liste des groupes dont l'utilisateur fait partie
+     * Si le groupe n'est plus valide à la date d'observation, alors il n'est pas retourné dans la liste
+     *
+     * @param DateTime $dateObservation
+     * @param string   $orderBy Champ de tri (au besoin)
+     * @return GroupEntity[]|null
+     */
+    public function getGroups(DateTime $dateObservation = null, $orderBy = null)
+    {
+        $groupService = $this->service->getLdapGroupService();
+
+        return $groupService->filterValids($groupService->getAllBy($this->get('memberOf'), 'dn', $orderBy), $dateObservation);
+    }
+
     /**
      * Modifie l'ensemble des attributs liés au mot de passe
      *