diff --git a/SQL/001_table.sql b/SQL/001_table.sql
new file mode 100755
index 0000000000000000000000000000000000000000..91c6d4a304c9d3024800e706e2a10b1725777f3f
--- /dev/null
+++ b/SQL/001_table.sql
@@ -0,0 +1,43 @@
+-- TABLE DES MACROS
+
+create table unicaen_renderer_macro
+(
+	id serial not null constraint unicaen_renderer_macro_pk primary key,
+	code varchar(256) not null,
+	description text,
+	variable_name varchar(256) not null,
+	methode_name varchar(256) not null,
+	histo_creation timestamp not null,
+	histo_createur_id integer not null constraint unicaen_renderer_macro_user_id_fk references "user",
+	histo_modification timestamp not null,
+	histo_modificateur_id integer not null constraint unicaen_renderer_macro_user_id_fk_2 references "user",
+	histo_destruction timestamp,
+	histo_destructeur_id integer constraint unicaen_renderer_macro_user_id_fk_3 references "user"
+);
+
+create unique index unicaen_renderer_macro_id_uindex on unicaen_renderer_macro (id);
+create unique index unicaen_renderer_macro_code_uindex on unicaen_renderer_macro (code);
+
+-- TABLE DES CONTENUS
+
+create table unicaen_renderer_content
+(
+	id serial not null constraint unicaen_content_content_pk primary key,
+	code varchar(256) not null,
+	description text,
+	renderer_type varchar(256) not null,
+	renderer_complement text not null,
+	renderer_content text not null,
+	histo_creation timestamp not null,
+	histo_createur_id integer not null constraint unicaen_content_content_user_id_fk references "user",
+	histo_modification timestamp not null,
+	histo_modificateur_id integer not null constraint unicaen_content_content_user_id_fk_2 references "user",
+	histo_destruction timestamp,
+	histo_destructeur_id integer constraint unicaen_content_content_user_id_fk_3 references "user"
+);
+
+create unique index unicaen_content_content_id_uindex on unicaen_renderer_content (id);
+create unique index unicaen_content_content_code_uindex on unicaen_renderer_content (code);
+
+
+
diff --git a/SQL/002_privileges.sql b/SQL/002_privileges.sql
new file mode 100644
index 0000000000000000000000000000000000000000..62e483729f8cbf28ff46fbc6075b8759b967b16d
--- /dev/null
+++ b/SQL/002_privileges.sql
@@ -0,0 +1,2 @@
+INSERT INTO public.unicaen_privilege_categorie (code, libelle, ordre, namespace)
+     VALUES ('documentcontent', 'UnicaenDocument - Gestion des contenus', 11020, 'UnicaenRenderer\\Provider\\Privilege');
\ No newline at end of file
diff --git a/config/merged/contenu.config.php b/config/merged/template.config.php
similarity index 71%
rename from config/merged/contenu.config.php
rename to config/merged/template.config.php
index b0eb9d65b82aac9c32f9f3127ad89b06ec9810df..091b90d1e0774eab01729b0e8a8772382ae6ea29 100755
--- a/config/merged/contenu.config.php
+++ b/config/merged/template.config.php
@@ -1,14 +1,14 @@
 <?php
 
-use UnicaenRenderer\Controller\ContenuController;
-use UnicaenRenderer\Controller\ContenuControllerFactory;
-use UnicaenRenderer\Form\Contenu\ContenuForm;
-use UnicaenRenderer\Form\Contenu\ContenuFormFactory;
-use UnicaenRenderer\Form\Contenu\ContenuHydrator;
-use UnicaenRenderer\Form\Contenu\ContenuHydratorFactory;
+use UnicaenRenderer\Controller\TemplateController;
+use UnicaenRenderer\Controller\TemplateControllerFactory;
+use UnicaenRenderer\Form\Template\TemplateForm;
+use UnicaenRenderer\Form\Template\TemplateFormFactory;
+use UnicaenRenderer\Form\Template\TemplateHydrator;
+use UnicaenRenderer\Form\Template\TemplateHydratorFactory;
 use UnicaenRenderer\Provider\Privilege\DocumentcontentPrivileges;
-use UnicaenRenderer\Service\Contenu\ContenuService;
-use UnicaenRenderer\Service\Contenu\ContenuServiceFactory;
+use UnicaenRenderer\Service\Template\TemplateService;
+use UnicaenRenderer\Service\Template\TemplateServiceFactory;
 use UnicaenPrivilege\Guard\PrivilegeController;
 use Zend\Router\Http\Literal;
 use Zend\Router\Http\Segment;
@@ -18,7 +18,7 @@ return [
         'guards' => [
             PrivilegeController::class => [
                 [
-                    'controller' => ContenuController::class,
+                    'controller' => TemplateController::class,
                     'action' => [
                         'index',
                         'afficher',
@@ -28,7 +28,7 @@ return [
                     ],
                 ],
                 [
-                    'controller' => ContenuController::class,
+                    'controller' => TemplateController::class,
                     'action' => [
                         'ajouter',
                     ],
@@ -37,7 +37,7 @@ return [
                     ],
                 ],
                 [
-                    'controller' => ContenuController::class,
+                    'controller' => TemplateController::class,
                     'action' => [
                         'modifier',
                     ],
@@ -46,7 +46,7 @@ return [
                     ],
                 ],
                 [
-                    'controller' => ContenuController::class,
+                    'controller' => TemplateController::class,
                     'action' => [
                         'historiser',
                         'restaurer',
@@ -56,7 +56,7 @@ return [
                     ],
                 ],
                 [
-                    'controller' => ContenuController::class,
+                    'controller' => TemplateController::class,
                     'action' => [
                         'detruire',
                     ],
@@ -77,9 +77,9 @@ return [
                             'contenu' => [
                                 'pages' => [
                                     'contenu' => [
-                                        'label' => 'Contenu',
-                                        'route' => 'contenu/contenu',
-                                        'resource' => PrivilegeController::getResourceId(ContenuController::class, 'index'),
+                                        'label' => 'Template',
+                                        'route' => 'contenu/template',
+                                        'resource' => PrivilegeController::getResourceId(TemplateController::class, 'index'),
                                         'order'    => 10001,
                                     ],
                                 ],
@@ -98,9 +98,9 @@ return [
                     'contenu' => [
                         'type' => Literal::class,
                         'options' => [
-                            'route' => '/contenu',
+                            'route' => '/template',
                             'defaults' => [
-                                'controller' => ContenuController::class,
+                                'controller' => TemplateController::class,
                                 'action' => 'index',
                             ],
                         ],
@@ -109,9 +109,9 @@ return [
                             'afficher' => [
                                 'type' => Segment::class,
                                 'options' => [
-                                    'route' => '/afficher/:contenu',
+                                    'route' => '/afficher/:template',
                                     'defaults' => [
-                                        'controller' => ContenuController::class,
+                                        'controller' => TemplateController::class,
                                         'action' => 'afficher',
                                     ],
                                 ],
@@ -121,7 +121,7 @@ return [
                                 'options' => [
                                     'route' => '/ajouter',
                                     'defaults' => [
-                                        'controller' => ContenuController::class,
+                                        'controller' => TemplateController::class,
                                         'action' => 'ajouter',
                                     ],
                                 ],
@@ -129,9 +129,9 @@ return [
                             'modifier' => [
                                 'type' => Segment::class,
                                 'options' => [
-                                    'route' => '/modifier/:contenu',
+                                    'route' => '/modifier/:template',
                                     'defaults' => [
-                                        'controller' => ContenuController::class,
+                                        'controller' => TemplateController::class,
                                         'action' => 'modifier',
                                     ],
                                 ],
@@ -139,9 +139,9 @@ return [
                             'restaurer' => [
                                 'type' => Segment::class,
                                 'options' => [
-                                    'route' => '/restaurer/:contenu',
+                                    'route' => '/restaurer/:template',
                                     'defaults' => [
-                                        'controller' => ContenuController::class,
+                                        'controller' => TemplateController::class,
                                         'action' => 'restaurer',
                                     ],
                                 ],
@@ -149,9 +149,9 @@ return [
                             'historiser' => [
                                 'type' => Segment::class,
                                 'options' => [
-                                    'route' => '/historiser/:contenu',
+                                    'route' => '/historiser/:template',
                                     'defaults' => [
-                                        'controller' => ContenuController::class,
+                                        'controller' => TemplateController::class,
                                         'action' => 'historiser',
                                     ],
                                 ],
@@ -159,9 +159,9 @@ return [
                             'detruire' => [
                                 'type' => Segment::class,
                                 'options' => [
-                                    'route' => '/detruire/:contenu',
+                                    'route' => '/detruire/:template',
                                     'defaults' => [
-                                        'controller' => ContenuController::class,
+                                        'controller' => TemplateController::class,
                                         'action' => 'detruire',
                                     ],
                                 ],
@@ -175,22 +175,22 @@ return [
 
     'service_manager' => [
         'factories' => [
-            ContenuService::class => ContenuServiceFactory::class,
+            TemplateService::class => TemplateServiceFactory::class,
         ],
     ],
     'form_elements' => [
         'factories' => [
-            ContenuForm::class => ContenuFormFactory::class,
+            TemplateForm::class => TemplateFormFactory::class,
         ],
     ],
     'hydrators' => [
         'factories' => [
-            ContenuHydrator::class => ContenuHydratorFactory::class,
+            TemplateHydrator::class => TemplateHydratorFactory::class,
         ],
     ],
     'controllers'     => [
         'factories' => [
-            ContenuController::class => ContenuControllerFactory::class,
+            TemplateController::class => TemplateControllerFactory::class,
         ]
     ],
 ];
diff --git a/src/UnicaenRenderer/Controller/ContenuController.php b/src/UnicaenRenderer/Controller/ContenuController.php
deleted file mode 100755
index eec204ae530c5c964572b5692ac757f9967200fa..0000000000000000000000000000000000000000
--- a/src/UnicaenRenderer/Controller/ContenuController.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-namespace UnicaenRenderer\Controller;
-
-use UnicaenRenderer\Entity\Db\Content;
-use UnicaenRenderer\Form\Contenu\ContenuFormAwareTrait;
-use UnicaenRenderer\Service\Contenu\ContenuServiceAwareTrait;
-use UnicaenRenderer\Service\Macro\MacroServiceAwareTrait;
-use Zend\Http\Request;
-use Zend\Mvc\Controller\AbstractActionController;
-use Zend\View\Model\ViewModel;
-
-class ContenuController extends AbstractActionController {
-    use ContenuServiceAwareTrait;
-    use MacroServiceAwareTrait;
-    use ContenuFormAwareTrait;
-
-    public function indexAction()
-    {
-        $contenus = $this->getContenuService()->getContenus();
-
-        return new ViewModel([
-            'contenus' => $contenus,
-        ]);
-    }
-
-    public function afficherAction()
-    {
-        $contenu = $this->getContenuService()->getRequestedContenu($this);
-
-        return new ViewModel([
-            'title' => "Affichage du contenu",
-            'contenu' => $contenu,
-        ]);
-    }
-
-    public function ajouterAction()
-    {
-        $contenu = new Content();
-
-        $form = $this->getContenuForm();
-        $form->setAttribute('action', $this->url()->fromRoute('contenu/contenu/ajouter', [], [], true));
-        $form->bind($contenu);
-
-        $request = $this->getRequest();
-        if ($request->isPost()) {
-            $data = $request->getPost();
-            $form->setData($data);
-            if ($form->isValid()) {
-                $this->getContenuService()->create($contenu);
-            }
-        }
-
-        $vm = new ViewModel();
-        $vm->setTemplate('unicaen-renderer/contenu/modifier');
-        $vm->setVariables([
-            'title' => "Création d'un contenu",
-            'form' => $form,
-        ]);
-        return $vm;
-    }
-
-    public function modifierAction()
-    {
-        $contenu = $this->getContenuService()->getRequestedContenu($this);
-
-        $form = $this->getContenuForm();
-        $form->setAttribute('action', $this->url()->fromRoute('contenu/contenu/modifier', ['contenu' => $contenu->getId()], [], true));
-        $form->bind($contenu);
-
-        $request = $this->getRequest();
-        if ($request->isPost()) {
-            $data = $request->getPost();
-            $form->setData($data);
-            if ($form->isValid()) {
-                $this->getContenuService()->update($contenu);
-            }
-        }
-
-        return new ViewModel([
-            'title' => "Modification d'un contenu",
-            'form' => $form,
-        ]);
-    }
-
-    public function historiserAction()
-    {
-        $contenu = $this->getContenuService()->getRequestedContenu($this);
-        $this->getContenuService()->historise($contenu);
-
-        return $this->redirect()->toRoute('contenu/contenu', [], [], true);
-    }
-
-    public function restaurerAction()
-    {
-        $contenu = $this->getContenuService()->getRequestedContenu($this);
-        $this->getContenuService()->restore($contenu);
-
-        return $this->redirect()->toRoute('contenu/contenu', [], [], true);
-    }
-
-    public function detruireAction()
-    {
-        $contenu = $this->getContenuService()->getRequestedContenu($this);
-
-        /** @var Request $request */
-        $request = $this->getRequest();
-        if ($request->isPost()) {
-            $data = $request->getPost();
-            if ($data["reponse"] === "oui") {
-                $this->getContenuService()->delete($contenu);
-            }
-            exit();
-        }
-
-        $vm = new ViewModel();
-        if ($contenu !== null) {
-            $vm->setTemplate('unicaen-renderer/default/confirmation');
-            $vm->setVariables([
-                'title' => "Suppression du contenu [" . $contenu->getCode() . "]",
-                'text' => "La suppression est définitive êtes-vous sûr&middot;e de vouloir continuer ?",
-                'action' => $this->url()->fromRoute('contenu/contenu/detruire', ["contenu" => $contenu->getId()], [], true),
-            ]);
-        }
-        return $vm;
-    }
-}
\ No newline at end of file
diff --git a/src/UnicaenRenderer/Controller/ContenuControllerFactory.php b/src/UnicaenRenderer/Controller/ContenuControllerFactory.php
deleted file mode 100755
index e9508989fbb29c852d554e63ac707eb8aa2169a1..0000000000000000000000000000000000000000
--- a/src/UnicaenRenderer/Controller/ContenuControllerFactory.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-namespace UnicaenRenderer\Controller;
-
-use Interop\Container\ContainerInterface;
-use UnicaenRenderer\Form\Contenu\ContenuForm;
-use UnicaenRenderer\Service\Contenu\ContenuService;
-
-class ContenuControllerFactory {
-
-    /**
-     * @param ContainerInterface $container
-     * @return ContenuController
-     */
-    public function __invoke(ContainerInterface $container)
-    {
-        /**
-         * @var ContenuService $contenuService
-         */
-        $contenuService = $container->get(ContenuService::class);
-
-        /**
-         * @var ContenuForm $contentForm
-         */
-        $contentForm = $container->get('FormElementManager')->get(ContenuForm::class);
-
-        $controller = new ContenuController();
-        $controller->setContenuService($contenuService);
-        $controller->setContenuForm($contentForm);
-        return $controller;
-    }
-}
\ No newline at end of file
diff --git a/src/UnicaenRenderer/Controller/TemplateController.php b/src/UnicaenRenderer/Controller/TemplateController.php
new file mode 100755
index 0000000000000000000000000000000000000000..a7e79d3b6929fae208d4446da0c7e98c5ddd6f57
--- /dev/null
+++ b/src/UnicaenRenderer/Controller/TemplateController.php
@@ -0,0 +1,127 @@
+<?php
+
+namespace UnicaenRenderer\Controller;
+
+use UnicaenRenderer\Entity\Db\Template;
+use UnicaenRenderer\Form\Template\TemplateFormAwareTrait;
+use UnicaenRenderer\Service\Template\TemplateServiceAwareTrait;
+use UnicaenRenderer\Service\Macro\MacroServiceAwareTrait;
+use Zend\Http\Request;
+use Zend\Mvc\Controller\AbstractActionController;
+use Zend\View\Model\ViewModel;
+
+class TemplateController extends AbstractActionController {
+    use TemplateServiceAwareTrait;
+    use MacroServiceAwareTrait;
+    use TemplateFormAwareTrait;
+
+    public function indexAction()
+    {
+        $templates = $this->getTemplateService()->getTemplates();
+
+        return new ViewModel([
+            'templates' => $templates,
+        ]);
+    }
+
+    public function afficherAction()
+    {
+        $template = $this->getTemplateService()->getRequestedTemplate($this);
+
+        return new ViewModel([
+            'title' => "Affichage du template",
+            'contenu' => $template,
+        ]);
+    }
+
+    public function ajouterAction()
+    {
+        $template = new Template();
+
+        $form = $this->getTemplateForm();
+        $form->setAttribute('action', $this->url()->fromRoute('contenu/template/ajouter', [], [], true));
+        $form->bind($template);
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+            $form->setData($data);
+            if ($form->isValid()) {
+                $this->getTemplateService()->create($template);
+            }
+        }
+
+        $vm = new ViewModel();
+        $vm->setTemplate('unicaen-renderer/template/modifier');
+        $vm->setVariables([
+            'title' => "Création d'un template",
+            'form' => $form,
+        ]);
+        return $vm;
+    }
+
+    public function modifierAction()
+    {
+        $template = $this->getTemplateService()->getRequestedTemplate($this);
+
+        $form = $this->getTemplateForm();
+        $form->setAttribute('action', $this->url()->fromRoute('contenu/template/modifier', ['template' => $template->getId()], [], true));
+        $form->bind($template);
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+            $form->setData($data);
+            if ($form->isValid()) {
+                $this->getTemplateService()->update($template);
+            }
+        }
+
+        return new ViewModel([
+            'title' => "Modification d'un template",
+            'form' => $form,
+        ]);
+    }
+
+    public function historiserAction()
+    {
+        $template = $this->getTemplateService()->getRequestedTemplate($this);
+        $this->getTemplateService()->historise($template);
+
+        return $this->redirect()->toRoute('contenu/template', [], [], true);
+    }
+
+    public function restaurerAction()
+    {
+        $template = $this->getTemplateService()->getRequestedTemplate($this);
+        $this->getTemplateService()->restore($template);
+
+        return $this->redirect()->toRoute('contenu/template', [], [], true);
+    }
+
+    public function detruireAction()
+    {
+        $template = $this->getTemplateService()->getRequestedTemplate($this);
+
+        /** @var Request $request */
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+            if ($data["reponse"] === "oui") {
+                $this->getTemplateService()->delete($template);
+            }
+            exit();
+        }
+
+        $vm = new ViewModel();
+        if ($template !== null) {
+            $vm->setTemplate('unicaen-renderer/default/confirmation');
+            $vm->setVariables([
+                'title' => "Suppression du template [" . $template->getCode() . "]",
+                'text' => "La suppression est définitive êtes-vous sûr&middot;e de vouloir continuer ?",
+                'action' => $this->url()->fromRoute('contenu/template/detruire', ["template" => $template->getId()], [], true),
+            ]);
+        }
+        return $vm;
+    }
+}
\ No newline at end of file
diff --git a/src/UnicaenRenderer/Controller/TemplateControllerFactory.php b/src/UnicaenRenderer/Controller/TemplateControllerFactory.php
new file mode 100755
index 0000000000000000000000000000000000000000..6835813ad60a6a877ea3857e65d5ed18089a757c
--- /dev/null
+++ b/src/UnicaenRenderer/Controller/TemplateControllerFactory.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace UnicaenRenderer\Controller;
+
+use Interop\Container\ContainerInterface;
+use UnicaenRenderer\Form\Template\TemplateForm;
+use UnicaenRenderer\Service\Template\TemplateService;
+
+class TemplateControllerFactory {
+
+    /**
+     * @param ContainerInterface $container
+     * @return TemplateController
+     */
+    public function __invoke(ContainerInterface $container)
+    {
+        /**
+         * @var TemplateService $templateService
+         */
+        $templateService = $container->get(TemplateService::class);
+
+        /**
+         * @var TemplateForm $contentForm
+         */
+        $contentForm = $container->get('FormElementManager')->get(TemplateForm::class);
+
+        $controller = new TemplateController();
+        $controller->setTemplateService($templateService);
+        $controller->setTemplateForm($contentForm);
+        return $controller;
+    }
+}
\ No newline at end of file
diff --git a/src/UnicaenRenderer/Entity/Db/Mapping/UnicaenRenderer.Entity.Db.Content.dcm.xml b/src/UnicaenRenderer/Entity/Db/Mapping/UnicaenRenderer.Entity.Db.Template.dcm.xml
similarity index 96%
rename from src/UnicaenRenderer/Entity/Db/Mapping/UnicaenRenderer.Entity.Db.Content.dcm.xml
rename to src/UnicaenRenderer/Entity/Db/Mapping/UnicaenRenderer.Entity.Db.Template.dcm.xml
index 227b17aa696e11427d8b5fe5bb5213aca4d939b0..98ec9c75495b893b8de3c7888a55f32dbf4ffbb7 100755
--- a/src/UnicaenRenderer/Entity/Db/Mapping/UnicaenRenderer.Entity.Db.Content.dcm.xml
+++ b/src/UnicaenRenderer/Entity/Db/Mapping/UnicaenRenderer.Entity.Db.Template.dcm.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" ?>
 <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
-    <entity name="UnicaenRenderer\Entity\Db\Content" table="unicaen_renderer_content">
+    <entity name="UnicaenRenderer\Entity\Db\Template" table="unicaen_renderer_template">
 
         <id name="id"                   column="id"                 type="integer">
             <generator strategy="IDENTITY"/>
diff --git a/src/UnicaenRenderer/Entity/Db/Content.php b/src/UnicaenRenderer/Entity/Db/Template.php
similarity index 76%
rename from src/UnicaenRenderer/Entity/Db/Content.php
rename to src/UnicaenRenderer/Entity/Db/Template.php
index 7f4445e18ae847cf9cca9d77df12f9b05c136605..bd02c4a0b1eac58e23c738cfef8f493242063662 100755
--- a/src/UnicaenRenderer/Entity/Db/Content.php
+++ b/src/UnicaenRenderer/Entity/Db/Template.php
@@ -5,7 +5,7 @@ namespace UnicaenRenderer\Entity\Db;
 use UnicaenUtilisateur\Entity\HistoriqueAwareInterface;
 use UnicaenUtilisateur\Entity\HistoriqueAwareTrait;
 
-class Content implements HistoriqueAwareInterface {
+class Template implements HistoriqueAwareInterface {
     use HistoriqueAwareTrait;
 
     const TYPE_TXT  = 'texte';
@@ -37,9 +37,9 @@ class Content implements HistoriqueAwareInterface {
 
     /**
      * @param int $id
-     * @return Content
+     * @return Template
      */
-    public function setId(int $id) : Content
+    public function setId(int $id) : Template
     {
         $this->id = $id;
         return $this;
@@ -55,9 +55,9 @@ class Content implements HistoriqueAwareInterface {
 
     /**
      * @param string|null $code
-     * @return Content
+     * @return Template
      */
-    public function setCode(?string $code) : Content
+    public function setCode(?string $code) : Template
     {
         $this->code = $code;
         return $this;
@@ -73,9 +73,9 @@ class Content implements HistoriqueAwareInterface {
 
     /**
      * @param string|null $description
-     * @return Content
+     * @return Template
      */
-    public function setDescription(?string $description) : Content
+    public function setDescription(?string $description) : Template
     {
         $this->description = $description;
         return $this;
@@ -91,9 +91,9 @@ class Content implements HistoriqueAwareInterface {
 
     /**
      * @param string|null $type
-     * @return Content
+     * @return Template
      */
-    public function setType(?string $type) : Content
+    public function setType(?string $type) : Template
     {
         $this->type = $type;
         return $this;
@@ -109,9 +109,9 @@ class Content implements HistoriqueAwareInterface {
 
     /**
      * @param string|null $complement
-     * @return Content
+     * @return Template
      */
-    public function setComplement(?string $complement) : Content
+    public function setComplement(?string $complement) : Template
     {
         $this->complement = $complement;
         return $this;
@@ -120,16 +120,16 @@ class Content implements HistoriqueAwareInterface {
     /**
      * @return string
      */
-    public function getContent() : ?string
+    public function getTemplate() : ?string
     {
         return $this->content;
     }
 
     /**
      * @param string|null $content
-     * @return Content
+     * @return Template
      */
-    public function setContent(?string $content) : Content
+    public function setTemplate(?string $content) : Template
     {
         $this->content = $content;
         return $this;
@@ -145,9 +145,9 @@ class Content implements HistoriqueAwareInterface {
 
     /**
      * @param string|null $css
-     * @return Content
+     * @return Template
      */
-    public function setCss(?string $css): Content
+    public function setCss(?string $css): Template
     {
         $this->css = $css;
         return $this;
diff --git a/src/UnicaenRenderer/Form/Contenu/ContenuFormAwareTrait.php b/src/UnicaenRenderer/Form/Contenu/ContenuFormAwareTrait.php
deleted file mode 100755
index a42dcacc901baabefd2aee9421cc89b3cae1863a..0000000000000000000000000000000000000000
--- a/src/UnicaenRenderer/Form/Contenu/ContenuFormAwareTrait.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-namespace UnicaenRenderer\Form\Contenu;
-
-trait ContenuFormAwareTrait {
-
-    /** @var ContenuForm */
-    private $contenuForm;
-
-    /**
-     * @return ContenuForm
-     */
-    public function getContenuForm(): ContenuForm
-    {
-        return $this->contenuForm;
-    }
-
-    /**
-     * @param ContenuForm $contenuForm
-     * @return ContenuForm
-     */
-    public function setContenuForm(ContenuForm $contenuForm)
-    {
-        $this->contenuForm = $contenuForm;
-        return $this->contenuForm;
-    }
-
-}
\ No newline at end of file
diff --git a/src/UnicaenRenderer/Form/Contenu/ContenuHydratorFactory.php b/src/UnicaenRenderer/Form/Contenu/ContenuHydratorFactory.php
deleted file mode 100755
index 40a9e4d102bc8517953c55904355097f97ad644f..0000000000000000000000000000000000000000
--- a/src/UnicaenRenderer/Form/Contenu/ContenuHydratorFactory.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-namespace UnicaenRenderer\Form\Contenu;
-
-use Interop\Container\ContainerInterface;
-
-class ContenuHydratorFactory {
-
-    /**
-     * @param ContainerInterface $container
-     * @return ContenuHydrator
-     */
-    public function __invoke(ContainerInterface $container)
-    {
-        $hydrator = new ContenuHydrator();
-        return $hydrator;
-    }
-
-}
\ No newline at end of file
diff --git a/src/UnicaenRenderer/Form/Contenu/ContenuForm.php b/src/UnicaenRenderer/Form/Template/TemplateForm.php
similarity index 90%
rename from src/UnicaenRenderer/Form/Contenu/ContenuForm.php
rename to src/UnicaenRenderer/Form/Template/TemplateForm.php
index d359df857a53a1f02fdaa1a0db2768873780b413..96f3afc520c4b2a6130e708095eee770177a48e6 100755
--- a/src/UnicaenRenderer/Form/Contenu/ContenuForm.php
+++ b/src/UnicaenRenderer/Form/Template/TemplateForm.php
@@ -1,9 +1,9 @@
 <?php
 
-namespace UnicaenRenderer\Form\Contenu;
+namespace UnicaenRenderer\Form\Template;
 
 use UnicaenApp\Service\EntityManagerAwareTrait;
-use UnicaenRenderer\Entity\Db\Content;
+use UnicaenRenderer\Entity\Db\Template;
 use UnicaenRenderer\Entity\Db\Macro;
 use UnicaenRenderer\Service\Macro\MacroServiceAwareTrait;
 use Zend\Form\Element\Button;
@@ -14,7 +14,7 @@ use Zend\Form\Form;
 use Zend\InputFilter\Factory;
 use Zend\Validator\Callback;
 
-class ContenuForm extends Form {
+class TemplateForm extends Form {
     use EntityManagerAwareTrait;
     use MacroServiceAwareTrait;
 
@@ -51,9 +51,9 @@ class ContenuForm extends Form {
                 'label' => 'Type * : ',
                 'empty_option' => "Sélectionner un type de contenu",
                 'value_options' => [
-                    Content::TYPE_PDF => "Fichier PDF",
-                    Content::TYPE_TXT => "Contenu textuel",
-                    Content::TYPE_MAIL => "Courrier électronique",
+                    Template::TYPE_PDF => "Fichier PDF",
+                    Template::TYPE_TXT => "Template textuel",
+                    Template::TYPE_MAIL => "Courrier électronique",
                 ],
             ],
         ]);
@@ -87,18 +87,18 @@ class ContenuForm extends Form {
                 'class' => 'form-control complement',
             ]
         ]);
-        //contenu
+        //template
         $this->add([
-            'name' => 'contenu',
+            'name' => 'template',
             'type' => 'textarea',
             'options' => [
-                'label' => 'Contenu * : ',
+                'label' => 'Template * : ',
                 'label_attributes' => [
                     'class' => 'control-label',
                 ],
             ],
             'attributes' => [
-                'id' => 'contenu',
+                'id' => 'template',
                 'class' => 'form-control contenu',
             ]
         ]);
@@ -144,7 +144,7 @@ class ContenuForm extends Form {
                         ],
                         'callback' => function ($value, $context = []) {
                             if($value == $context['old-code']) return true;
-                            return ($this->getEntityManager()->getRepository(Macro::class)->findOneBy(['code'=>$value],[]) == null);
+                            return ($this->getEntityManager()->getRepository(Template::class)->findOneBy(['code'=>$value],[]) == null);
                         },
                         //'break_chain_on_failure' => true,
                     ],
diff --git a/src/UnicaenRenderer/Form/Template/TemplateFormAwareTrait.php b/src/UnicaenRenderer/Form/Template/TemplateFormAwareTrait.php
new file mode 100755
index 0000000000000000000000000000000000000000..dc7ee5371cbc0769268fd2c85ccd703955a2bb99
--- /dev/null
+++ b/src/UnicaenRenderer/Form/Template/TemplateFormAwareTrait.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace UnicaenRenderer\Form\Template;
+
+trait TemplateFormAwareTrait {
+
+    /** @var TemplateForm */
+    private $templateForm;
+
+    /**
+     * @return TemplateForm
+     */
+    public function getTemplateForm(): TemplateForm
+    {
+        return $this->templateForm;
+    }
+
+    /**
+     * @param TemplateForm $templateForm
+     * @return TemplateForm
+     */
+    public function setTemplateForm(TemplateForm $templateForm)
+    {
+        $this->templateForm = $templateForm;
+        return $this->templateForm;
+    }
+
+}
\ No newline at end of file
diff --git a/src/UnicaenRenderer/Form/Contenu/ContenuFormFactory.php b/src/UnicaenRenderer/Form/Template/TemplateFormFactory.php
similarity index 71%
rename from src/UnicaenRenderer/Form/Contenu/ContenuFormFactory.php
rename to src/UnicaenRenderer/Form/Template/TemplateFormFactory.php
index 3be9f1e66e9efc7a131df4efc15da5db00ba0e17..f811ad02179180380ccd0cdc79f476957638ac5c 100755
--- a/src/UnicaenRenderer/Form/Contenu/ContenuFormFactory.php
+++ b/src/UnicaenRenderer/Form/Template/TemplateFormFactory.php
@@ -1,16 +1,16 @@
 <?php
 
-namespace UnicaenRenderer\Form\Contenu;
+namespace UnicaenRenderer\Form\Template;
 
 use Doctrine\ORM\EntityManager;
 use Interop\Container\ContainerInterface;
 use UnicaenRenderer\Service\Macro\MacroService;
 
-class ContenuFormFactory {
+class TemplateFormFactory {
 
     /**
      * @param ContainerInterface $container
-     * @return ContenuForm
+     * @return TemplateForm
      */
     public function __invoke(ContainerInterface $container)
     {
@@ -21,10 +21,10 @@ class ContenuFormFactory {
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
         $macroService = $container->get(MacroService::class);
 
-        /** @var ContenuHydrator $hydrator */
-        $hydrator = $container->get('HydratorManager')->get(ContenuHydrator::class);
+        /** @var TemplateHydrator $hydrator */
+        $hydrator = $container->get('HydratorManager')->get(TemplateHydrator::class);
 
-        $form = new ContenuForm();
+        $form = new TemplateForm();
         $form->setEntityManager($entityManager);
         $form->setMacroService($macroService);
         $form->setHydrator($hydrator);
diff --git a/src/UnicaenRenderer/Form/Contenu/ContenuHydrator.php b/src/UnicaenRenderer/Form/Template/TemplateHydrator.php
similarity index 75%
rename from src/UnicaenRenderer/Form/Contenu/ContenuHydrator.php
rename to src/UnicaenRenderer/Form/Template/TemplateHydrator.php
index 37aacd30e9690f98d9b4fa76ea2cbab6164a8bb2..17522a4b5fdbcce938dd6b6d457e28de967558d6 100755
--- a/src/UnicaenRenderer/Form/Contenu/ContenuHydrator.php
+++ b/src/UnicaenRenderer/Form/Template/TemplateHydrator.php
@@ -1,14 +1,14 @@
 <?php
 
-namespace UnicaenRenderer\Form\Contenu;
+namespace UnicaenRenderer\Form\Template;
 
-use UnicaenRenderer\Entity\Db\Content;
+use UnicaenRenderer\Entity\Db\Template;
 use Zend\Hydrator\HydratorInterface;
 
-class ContenuHydrator implements HydratorInterface {
+class TemplateHydrator implements HydratorInterface {
 
     /**
-     * @param Content $object
+     * @param Template $object
      * @return array
      */
     public function extract($object)
@@ -18,7 +18,7 @@ class ContenuHydrator implements HydratorInterface {
             'type' => ($object)?$object->getType():null,
             'description' => ($object)?$object->getDescription():null,
             'complement' => ($object)?$object->getComplement():null,
-            'contenu' => ($object)?$object->getContent():null,
+            'template' => ($object)?$object->getTemplate():null,
             'css' => ($object)?$object->getCss():null,
         ];
 
@@ -26,9 +26,9 @@ class ContenuHydrator implements HydratorInterface {
     }
 
     /**
-     * @param Content $object
+     * @param Template $object
      * @param array $data
-     * @return Content
+     * @return Template
      */
     public function hydrate(array $data, $object)
     {
@@ -36,14 +36,14 @@ class ContenuHydrator implements HydratorInterface {
         $type = (isset($data['type']) AND trim($data['type']) !== "")?trim($data['type']):null;
         $description = (isset($data['description']) AND trim($data['description']) !== "")?trim($data['description']):null;
         $complement = (isset($data['complement']) AND trim($data['complement']) !== "")?strip_tags(trim($data['complement'])):null;
-        $contenu = (isset($data['contenu']) AND trim($data['contenu']) !== "")?trim($data['contenu']):null;
+        $template = (isset($data['template']) AND trim($data['template']) !== "")?trim($data['template']):null;
         $css = (isset($data['css']) AND trim($data['css']) !== "")?strip_tags(trim($data['css'])):null;
 
         $object->setCode($code);
         $object->setType($type);
         $object->setDescription($description);
         $object->setComplement($complement);
-        $object->setContent($contenu);
+        $object->setTemplate($contenu);
         $object->setCss($css);
 
         return $object;
diff --git a/src/UnicaenRenderer/Form/Template/TemplateHydratorFactory.php b/src/UnicaenRenderer/Form/Template/TemplateHydratorFactory.php
new file mode 100755
index 0000000000000000000000000000000000000000..2044d117f6eb2d9e92f6c1c17a561793f43195ab
--- /dev/null
+++ b/src/UnicaenRenderer/Form/Template/TemplateHydratorFactory.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace UnicaenRenderer\Form\Template;
+
+use Interop\Container\ContainerInterface;
+
+class TemplateHydratorFactory {
+
+    /**
+     * @param ContainerInterface $container
+     * @return TemplateHydrator
+     */
+    public function __invoke(ContainerInterface $container) : TemplateHydrator
+    {
+        $hydrator = new TemplateHydrator();
+        return $hydrator;
+    }
+
+}
\ No newline at end of file
diff --git a/src/UnicaenRenderer/Provider/Privilege/DocumentcontentPrivileges.php b/src/UnicaenRenderer/Provider/Privilege/DocumentcontentPrivileges.php
index 1dc262d32d23679a72ce320edde3e976d316e9b7..545b32a41bb0af58a82d64be6e25d1d45ca2cb62 100755
--- a/src/UnicaenRenderer/Provider/Privilege/DocumentcontentPrivileges.php
+++ b/src/UnicaenRenderer/Provider/Privilege/DocumentcontentPrivileges.php
@@ -2,10 +2,19 @@
 
 namespace UnicaenRenderer\Provider\Privilege;
 
+use UnicaenPrivilege\Entity\Db\Privilege;
 use UnicaenPrivilege\Provider\Privilege\Privileges;
 
 class DocumentcontentPrivileges extends Privileges
 {
+    public static function getResourceId( $privilege )
+    {
+        if ($privilege instanceof Privilege){
+            $privilege = $privilege->getFullCode();
+        }
+        return 'privilege/'.$privilege;
+    }
+
     const DOCUMENTCONTENU_INDEX = 'documentcontent-documentcontenu_index';
     const DOCUMENTCONTENU_AJOUTER = 'documentcontent-documentcontenu_ajouter';
     const DOCUMENTCONTENU_MODIFIER = 'documentcontent-documentcontenu_modifier';
diff --git a/src/UnicaenRenderer/Service/Contenu/ContenuServiceAwareTrait.php b/src/UnicaenRenderer/Service/Contenu/ContenuServiceAwareTrait.php
deleted file mode 100755
index daef379018a24268d728e487505bd72747839805..0000000000000000000000000000000000000000
--- a/src/UnicaenRenderer/Service/Contenu/ContenuServiceAwareTrait.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-namespace UnicaenRenderer\Service\Contenu;
-
-trait ContenuServiceAwareTrait {
-
-    /** @var ContenuService */
-    private $contenuService;
-
-    /**
-     * @return ContenuService
-     */
-    public function getContenuService() : ContenuService
-    {
-        return $this->contenuService;
-    }
-
-    /**
-     * @param ContenuService $contenuService
-     * @return ContenuService
-     */
-    public function setContenuService(ContenuService $contenuService) : ContenuService
-    {
-        $this->contenuService = $contenuService;
-        return $this->contenuService;
-    }
-
-}
\ No newline at end of file
diff --git a/src/UnicaenRenderer/Service/Macro/MacroService.php b/src/UnicaenRenderer/Service/Macro/MacroService.php
index dac741b8527a84b4e2254ebf755141586ea20954..6d48141fe9cfd35734622db2da00d9b0f4064c7d 100755
--- a/src/UnicaenRenderer/Service/Macro/MacroService.php
+++ b/src/UnicaenRenderer/Service/Macro/MacroService.php
@@ -186,7 +186,7 @@ class MacroService {
             if (isset($variables[$macro->getVariable()]) === true) {
                 if (method_exists($variables[$macro->getVariable()], $macro->getMethode()) === true) {
                     $texte = $variables[$macro->getVariable()]->{$macro->getMethode()}();
-                    return $texte;
+                    return ($texte)?:"";
                 }
                 return "<span style='color:darkred;'> Méthode [".$macro->getMethode()."] non trouvée </span>";
             }
diff --git a/src/UnicaenRenderer/Service/Contenu/ContenuService.php b/src/UnicaenRenderer/Service/Template/TemplateService.php
similarity index 53%
rename from src/UnicaenRenderer/Service/Contenu/ContenuService.php
rename to src/UnicaenRenderer/Service/Template/TemplateService.php
index 3a8e18cc3b2fb034554059d1186aab2b1c032214..7457560f9913242a2e537bc02aef7a11c78427eb 100755
--- a/src/UnicaenRenderer/Service/Contenu/ContenuService.php
+++ b/src/UnicaenRenderer/Service/Template/TemplateService.php
@@ -1,95 +1,95 @@
 <?php
 
-namespace UnicaenRenderer\Service\Contenu;
+namespace UnicaenRenderer\Service\Template;
 
 use Doctrine\ORM\NonUniqueResultException;
 use Doctrine\ORM\ORMException;
 use Doctrine\ORM\QueryBuilder;
 use UnicaenApp\Exception\RuntimeException;
 use UnicaenApp\Service\EntityManagerAwareTrait;
-use UnicaenRenderer\Entity\Db\Content;
+use UnicaenRenderer\Entity\Db\Template;
 use UnicaenRenderer\Service\Macro\MacroServiceAwareTrait;
 use Zend\Mvc\Controller\AbstractActionController;
 
-class ContenuService {
+class TemplateService {
     use EntityManagerAwareTrait;
     use MacroServiceAwareTrait;
 
     /** GESTION DES ENTITES *******************************************************************************************/
 
     /**
-     * @param Content $content
-     * @return Content
+     * @param Template $template
+     * @return Template
      */
-    public function create(Content $content) : Content
+    public function create(Template $template) : Template
     {
         try {
-            $this->getEntityManager()->persist($content);
-            $this->getEntityManager()->flush($content);
+            $this->getEntityManager()->persist($template);
+            $this->getEntityManager()->flush($template);
         } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
+            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD du Template.", $e);
         }
-        return $content;
+        return $template;
     }
 
     /**
-     * @param Content $content
-     * @return Content
+     * @param Template $template
+     * @return Template
      */
-    public function update(Content $content) : Content
+    public function update(Template $template) : Template
     {
         try {
-            $this->getEntityManager()->flush($content);
+            $this->getEntityManager()->flush($template);
         } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
+            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD du Template.", $e);
         }
-        return $content;
+        return $template;
     }
 
     /**
-     * @param Content $content
-     * @return Content
+     * @param Template $template
+     * @return Template
      */
-    public function historise(Content $content) : Content
+    public function historise(Template $template) : Template
     {
         try {
-            $content->historiser();
-            $this->getEntityManager()->flush($content);
+            $template->historiser();
+            $this->getEntityManager()->flush($template);
         } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
+            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD du Template.", $e);
         }
-        return $content;
+        return $template;
     }
 
     /**
-     * @param Content $content
-     * @return Content
+     * @param Template $template
+     * @return Template
      */
-    public function restore(Content $content) : Content
+    public function restore(Template $template) : Template
     {
         try {
-            $content->dehistoriser();
-            $this->getEntityManager()->flush($content);
+            $template->dehistoriser();
+            $this->getEntityManager()->flush($template);
         } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
+            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD du Template.", $e);
         }
-        return $content;
+        return $template;
     }
 
     /**
-     * @param Content $content
-     * @return Content
+     * @param Template $template
+     * @return Template
      */
-    public function delete(Content $content) : Content
+    public function delete(Template $template) : Template
     {
         try
         {
-            $this->getEntityManager()->remove($content);
-            $this->getEntityManager()->flush($content);
+            $this->getEntityManager()->remove($template);
+            $this->getEntityManager()->flush($template);
         } catch (ORMException $e) {
-            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
+            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD du Template.", $e);
         }
-        return $content;
+        return $template;
     }
 
     /** REQUETAGE *****************************************************************************************************/
@@ -99,7 +99,7 @@ class ContenuService {
      */
     public function createQueryBuilder() : QueryBuilder
     {
-        $qb = $this->getEntityManager()->getRepository(Content::class)->createQueryBuilder('contenu')
+        $qb = $this->getEntityManager()->getRepository(Template::class)->createQueryBuilder('template')
         ;
 
         return $qb;
@@ -108,12 +108,12 @@ class ContenuService {
     /**
      * @param string $champ
      * @param string $ordre
-     * @return Content[]
+     * @return Template[]
      */
-    public function getContenus(string $champ = 'code', string $ordre = 'ASC') : array
+    public function getTemplates(string $champ = 'code', string $ordre = 'ASC') : array
     {
         $qb = $this->createQueryBuilder()
-            ->orderBy('contenu.' . $champ, $ordre)
+            ->orderBy('template.' . $champ, $ordre)
         ;
 
         $result = $qb->getQuery()->getResult();
@@ -122,38 +122,41 @@ class ContenuService {
 
     /**
      * @param int|null $id
-     * @return Content|null
+     * @return Template|null
      */
-    public function getContenu(?int $id) : ?Content
+    public function getTemplate(?int $id) : ?Template
     {
         $qb = $this->createQueryBuilder()
-            ->andWhere('contenu.id = :id')
+            ->andWhere('tempalte.id = :id')
             ->setParameter('id', $id)
         ;
 
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs Content partagent le même id [".$id."]");
+            throw new RuntimeException("Plusieurs Template partagent le même id [".$id."]");
         }
         return $result;
     }
 
     /**
      * @param string $code
-     * @return Content|null
+     * @return Template|null
      */
-    public function getContenuByCode(string $code) : ?Content
+    public function getTemplateByCode(string $code) : ?Template
     {
         $qb = $this->createQueryBuilder()
-            ->andWhere('contenu.code = :code')
+            ->andWhere('template.code = :code')
             ->setParameter('code', $code)
         ;
 
         try {
             $result = $qb->getQuery()->getOneOrNullResult();
         } catch (NonUniqueResultException $e) {
-            throw new RuntimeException("Plusieurs Content partagent le même code [".$code."]");
+            throw new RuntimeException("Plusieurs Template partagent le même code [".$code."]");
+        }
+        if ($result === null) {
+            throw new RuntimeException("Aucun Template pour le code [".$code."]");
         }
         return $result;
     }
@@ -161,12 +164,12 @@ class ContenuService {
     /**
      * @param AbstractActionController $controller
      * @param string $param
-     * @return Content|null
+     * @return Template|null
      */
-    public function getRequestedContenu(AbstractActionController $controller, string $param='contenu') : ?Content
+    public function getRequestedTemplate(AbstractActionController $controller, string $param='template') : ?Template
     {
         $id = $controller->params()->fromRoute($param);
-        $result = $this->getContenu($id);
+        $result = $this->getTemplate($id);
 
         return $result;
     }
@@ -194,37 +197,37 @@ class ContenuService {
     }
 
     /**
-     * @param Content $contenu
+     * @param Template $template
      * @param array $variables
      * @return string
      */
-    public function generateComplement(Content $contenu, array $variables) : string
+    public function generateComplement(Template $template, array $variables) : string
     {
-        return $this->replaceMacros($contenu->getComplement(), $variables);
+        return $this->replaceMacros($template->getComplement(), $variables);
     }
 
     /**
-     * @param Content $contenu
+     * @param Template $template
      * @param array $variables
      * @return string
      */
-    public function generateContenu(Content $contenu, array $variables) : string
+    public function generateContenu(Template $template, array $variables) : string
     {
         $texte = "<style>";
-        $texte .= $contenu->getCss();
+        $texte .= $template->getCss();
         $texte .= "</style>";
-        $texte .= $this->replaceMacros($contenu->getContent(), $variables);
+        $texte .= $this->replaceMacros($template->getContent(), $variables);
         return $texte;
     }
 
     /**
-     * @param Content $contenu
+     * @param Template $template
      * @param array $variables
      * @return string
      */
-    public function generateTitre(Content $contenu, array $variables) : string
+    public function generateTitre(Template $template, array $variables) : string
     {
-        return $this->replaceMacros($contenu->getComplement(), $variables);
+        return $this->replaceMacros($template->getComplement(), $variables);
     }
 
 }
\ No newline at end of file
diff --git a/src/UnicaenRenderer/Service/Template/TemplateServiceAwareTrait.php b/src/UnicaenRenderer/Service/Template/TemplateServiceAwareTrait.php
new file mode 100755
index 0000000000000000000000000000000000000000..d9fbcaae9125f7b192722edce41be579acd9a2c1
--- /dev/null
+++ b/src/UnicaenRenderer/Service/Template/TemplateServiceAwareTrait.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace UnicaenRenderer\Service\Template;
+
+trait TemplateServiceAwareTrait {
+
+    /** @var TemplateService */
+    private $templateService;
+
+    /**
+     * @return TemplateService
+     */
+    public function getTemplateService() : TemplateService
+    {
+        return $this->templateService;
+    }
+
+    /**
+     * @param TemplateService $templateService
+     * @return TemplateService
+     */
+    public function setTemplateService(TemplateService $templateService) : TemplateService
+    {
+        $this->templateService = $templateService;
+        return $this->templateService;
+    }
+
+}
\ No newline at end of file
diff --git a/src/UnicaenRenderer/Service/Contenu/ContenuServiceFactory.php b/src/UnicaenRenderer/Service/Template/TemplateServiceFactory.php
similarity index 72%
rename from src/UnicaenRenderer/Service/Contenu/ContenuServiceFactory.php
rename to src/UnicaenRenderer/Service/Template/TemplateServiceFactory.php
index ebf8e40a9e8c2d67357f494226241528b84e782f..e8cafb60dd489324169fc8b4882f09ddb99f8d1c 100755
--- a/src/UnicaenRenderer/Service/Contenu/ContenuServiceFactory.php
+++ b/src/UnicaenRenderer/Service/Template/TemplateServiceFactory.php
@@ -1,18 +1,18 @@
 <?php
 
-namespace UnicaenRenderer\Service\Contenu;
+namespace UnicaenRenderer\Service\Template;
 
 use Doctrine\ORM\EntityManager;
 use Interop\Container\ContainerInterface;
 use UnicaenRenderer\Service\Macro\MacroService;
 
-class ContenuServiceFactory {
+class TemplateServiceFactory {
 
     /**
      * @param ContainerInterface $container
-     * @return ContenuService
+     * @return TemplateService
      */
-    public function __invoke(ContainerInterface $container) : ContenuService
+    public function __invoke(ContainerInterface $container) : TemplateService
     {
         /**
          * @var EntityManager $entityManager
@@ -21,7 +21,7 @@ class ContenuServiceFactory {
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
         $macroService = $container->get(MacroService::class);
 
-        $service = new ContenuService();
+        $service = new TemplateService();
         $service->setEntityManager($entityManager);
         $service->setMacroService($macroService);
         return $service;
diff --git a/view/unicaen-renderer/contenu/index.phtml b/view/unicaen-renderer/contenu/index.phtml
index ded30d8c3ab4ad7d95675084880c437594ca677a..f5829bdae036efc04c1387a8e65e622f500a64fd 100755
--- a/view/unicaen-renderer/contenu/index.phtml
+++ b/view/unicaen-renderer/contenu/index.phtml
@@ -13,6 +13,7 @@ $canAfficher   = $this->isAllowed(DocumentcontentPrivileges::getResourceId(Docum
 $canModifier   = $this->isAllowed(DocumentcontentPrivileges::getResourceId(DocumentcontentPrivileges::DOCUMENTCONTENU_MODIFIER));
 $canHistoriser = $this->isAllowed(DocumentcontentPrivileges::getResourceId(DocumentcontentPrivileges::DOCUMENTCONTENU_HISTORISER));
 $canDetruire   = $this->isAllowed(DocumentcontentPrivileges::getResourceId(DocumentcontentPrivileges::DOCUMENTCONTENU_SUPPRIMER));
+$this->isAllowed(null, DocumentcontentPrivileges::DOCUMENTCONTENU_AJOUTER);
 
 $this->headTitle("Index des contenus");
 ?>
diff --git a/view/unicaen-renderer/contenu/modifier.phtml b/view/unicaen-renderer/contenu/modifier.phtml
index 67bf9f707de619949f8f06cd70d002be21191d99..444434d13bdf1d3ad10ff2e88e22f3487359818b 100755
--- a/view/unicaen-renderer/contenu/modifier.phtml
+++ b/view/unicaen-renderer/contenu/modifier.phtml
@@ -29,10 +29,10 @@ use UnicaenRenderer\Form\Contenu\ContenuForm;
         tinymce.remove();
         tinymce.init({
             selector: '.description',
-            toolbar: 'newdocument undo redo | bold italic | bullist',
+            plugins: 'lists template',
+            toolbar: 'newdocument undo redo | bold italic | bullist ',
             resize: true,
             language: 'fr_FR',
-            plugins: 'lists template',
             templates: macros,
             statusbar: true,
             browser_spellcheck: true,
@@ -65,11 +65,12 @@ use UnicaenRenderer\Form\Contenu\ContenuForm;
         });
         tinymce.init({
             selector: '.contenu',
-            toolbar: 'newdocument undo redo | bold italic | bullist | alignjustify alignleft alignright aligncenter | formatselect template',
+            menubar: 'table',
+            toolbar: 'newdocument undo redo | bold italic | bullist table | alignjustify alignleft alignright aligncenter | formatselect template',
             block_formats: 'Normal=p;Titre 1=h1;Titre 2=h2;Titre 3=h3',
             resize: true,
             language: 'fr_FR',
-            plugins: 'lists template',
+            plugins: 'lists template table',
             templates: macros,
             statusbar: true,
             browser_spellcheck: true,