diff --git a/application/modules/admin/controllers/AlbumController.php b/application/modules/admin/controllers/AlbumController.php
index 75f614cd67d06f908b173ea9aa7a87821ad97b9a..4d972393113e1900243bee4479d5374bddb21a40 100644
--- a/application/modules/admin/controllers/AlbumController.php
+++ b/application/modules/admin/controllers/AlbumController.php
@@ -98,9 +98,12 @@ class Admin_AlbumController extends ZendAfi_Controller_Action {
 
 
   public function dilicomExportCsvAction() {
+    $items = array_map(function($item) { return new Class_TableDescription_PNBItemsRenderer($item); },
+                      Class_Album_Item::findAll());
+
     $this->_helper->csv('dilicom_csv.csv',
                         $this->view->renderCsv(new Class_TableDescription_PNBItemsExport('pnb'),
-                                               Class_Album_Item::findAll()));
+                                               $items));
   }
 
 
diff --git a/application/modules/admin/controllers/RegistrationController.php b/application/modules/admin/controllers/RegistrationController.php
index 23b4f40a1cb66e29281838517cd1bbe418a19443..99c384cae90915eee03ba73dada28c3da664a524 100644
--- a/application/modules/admin/controllers/RegistrationController.php
+++ b/application/modules/admin/controllers/RegistrationController.php
@@ -44,16 +44,16 @@ class Admin_RegistrationController extends ZendAfi_Controller_Action {
   }
 
 
-  public function deleteAction() {
+  public function archiveAction() {
     $this->_redirectToIndex();
 
     if ((!$id = $this->_getParam('id', null))
         || (!$registration = Class_UsersNonValid::find($id))) {
-      return $this->_helper->notify($this->_('Aucune demande d\'inscription supprimée'));
+      return $this->_helper->notify($this->_('Aucune demande d\'inscription archivée'));
     }
 
     $registration->delete();
-    $this->_helper->notify($this->_('Demande d\'inscription de "%s" supprimée', $registration->getLogin()));
+    $this->_helper->notify($this->_('Demande d\'inscription de "%s" archivée', $registration->getLogin()));
   }
 
 
@@ -62,11 +62,11 @@ class Admin_RegistrationController extends ZendAfi_Controller_Action {
 
     if ((!$id = $this->_getParam('id', null))
         || (!$registration = Class_UsersNonValid::find($id)))
-      return $this->_helper->notify($this->_('Aucune inscription validée'));
+      return $this->_helper->notify($this->_('Aucune demande d\'inscription validée'));
 
     $message = $registration->activate()
       ? $this->_('Inscription de "%s" validée', $registration->getLogin())
-      : $this->_('Impossible de valider l\'inscription de "%s"', $registration->getLogin());
+      : $this->_('Impossible de valider la demande d\'inscription de "%s"', $registration->getLogin());
 
     $this->_helper->notify($message);
   }
diff --git a/application/modules/admin/views/scripts/album/dilicom.phtml b/application/modules/admin/views/scripts/album/dilicom.phtml
index 67f786fb33ed29cc55c79754c791864a6441bbbe..5f036500ed8cc9b9ae5c6f3cfe0a654ef2d6d082 100644
--- a/application/modules/admin/views/scripts/album/dilicom.phtml
+++ b/application/modules/admin/views/scripts/album/dilicom.phtml
@@ -19,8 +19,11 @@ echo $this->Button((new Class_Entity())
                    ->setImage($this->tagImg($skin->getIconUrl('actions', 'test'),
                                             ['style' => 'filter: invert();'])));
 
+$items = array_map(function($item) { return new Class_TableDescription_PNBItemsRenderer($item);},
+                   $this->dilicom_items);
+
 echo $this->renderTable((new Class_TableDescription_PNBItems('pnb_dilicom'))->setPager(true),
-                        $this->dilicom_items);
+                        $items);
 
 echo $this->tag('h2', $this->_('Import des offres Dilicom/PNB'));
 
diff --git a/application/modules/admin/views/scripts/registration/index.phtml b/application/modules/admin/views/scripts/registration/index.phtml
index 9050944759cc23420d256b4361cb90e19d85daae..1c5feda7d50872bcabbf2245a0dc93c17305e066 100644
--- a/application/modules/admin/views/scripts/registration/index.phtml
+++ b/application/modules/admin/views/scripts/registration/index.phtml
@@ -43,11 +43,11 @@ $description = (new Class_TableDescription('registration'))
                                                       'label' => $this->_('Visualiser les informations du compte "%s"', $model->getLogin())],
 
 
-                                                     ['url' => ['action' => 'delete',
+                                                     ['url' => ['action' => 'archive',
                                                                 'id' => $model->getId()],
                                                       'icon' => 'validate',
                                                       'condition' => 'hasUser',
-                                                      'label' => $this->_('Confirmer l\'inscription  de "%s"', $model->getLogin())],
+                                                      'label' => $this->_('Archiver la demande d\'inscription  de "%s"', $model->getLogin())],
                                                     ]);
                  });
 
diff --git a/library/Class/TableDescription.php b/library/Class/TableDescription.php
index 1c859776500906d0e0e4862abe32595dee01cd33..421def794cdc3faa9a863bfd1d0e8696d237de79 100644
--- a/library/Class/TableDescription.php
+++ b/library/Class/TableDescription.php
@@ -120,9 +120,6 @@ class Class_TableDescription {
 
 
   public function addColumn($label, $description) {
-//    if (is_callable($description))
-//      $description = ['callback' => $description];
-
     if ($description instanceof Closure)
       $description = ['callback' => $description];
 
diff --git a/library/Class/TableDescription/PNBItems.php b/library/Class/TableDescription/PNBItems.php
index 32f2f99968bfb233f6fe3f1968fd34957955b57e..467f07f0419ee49c2a72928ecb9e3ccfe27e6e6f 100644
--- a/library/Class/TableDescription/PNBItems.php
+++ b/library/Class/TableDescription/PNBItems.php
@@ -19,94 +19,25 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
+
 class Class_TableDescription_PNBItems extends Class_TableDescription {
   use Trait_Translator;
 
   public function init() {
     $this
       ->addColumn($this->_('Titre'), 'title')
-      ->addColumn($this->_('Nombre de prêts'), 'getQuantityOnTotal')
-      ->addColumn($this->_('Nombre de prêts simultanés'),  'getLiveQuantity')
-      ->addColumn($this->_('Durée de prêt en jours'),  'getDuration')
-      ->addColumn($this->_('Nombre de jours restant sur la licence'),  'getLicenseExpiration')
-      ->addColumn($this->_('Date de commande'), 'orderDate')
+      ->addColumn($this->_('Nombre de prêts'), 'quantity_on_total')
+      ->addColumn($this->_('Nombre de prêts simultanés'), 'live_quantity')
+      ->addColumn($this->_('Durée de prêt en jours'), 'duration')
+      ->addColumn($this->_('Nombre de jours restant sur la licence'), 'license_expiration')
+      ->addColumn($this->_('Date de commande'), 'order_date')
       ->addRowAction(['url' => ['module' => 'admin',
                                 'controller' => 'album',
                                 'action' => 'edit_album',
                                 'id' => '%s'],
-                      'id' => 'getAlbumId',
+                      'id' => function($model) { return $model->getAlbumId(); },
                       'anchorOptions' => ['data-popup' => 'true'],
                       'label' => $this->_('Voir l\'album'),
                       'icon' => 'view']);
   }
-
-
-  public function orderDate($model) {
-    return ($date = $model->getOrderDate())
-      ? (new DateTime($date))->format('d/m/Y')
-      : '';
-  }
-
-
-  public function getDuration($model, $attrib) {
-    return $this->quantityOrInfinite($model->getDuration());
-  }
-
-
-  public function getAlbumId($model) {
-    return $model->getAlbumId();
-  }
-
-
-  public function quantityOrInfinite($value) {
-    return $this->isInfinite($value)
-      ? '∞'
-      : $value;
-  }
-
-
-  public function getQuantityOnTotal($model) {
-    return $this->loanQuantityOrLocalLoanCount($model)
-      . ' / '
-      . $this->quantityOrInfinite($model->getLoanQuantity());
-  }
-
-
-  public function getLiveQuantity($model) {
-    return $this->loanCountOrLocalOngoing($model)
-      . ' / '
-      . $model->getLoanAllowedNumberOfUsers();
-  }
-
-
-  public function getLicenseExpiration($model) {
-    return ('∞' == $this->quantityOrInfinite($model->getAvailabilityDuration()))
-            ? '∞'
-            : $model->getAvailabilityRemainingDaysBeforeEndDate();
-  }
-
-
-  public function loanQuantityOrLocalLoanCount($model) {
-    return $this->isInfiniteLoan($model)
-      ? $model->getLocalLoanCount()
-      : $model->getQuantity();
-  }
-
-
-  public function loanCountOrLocalOngoing($model) {
-    return $this->isInfiniteLoan($model)
-      ? $model->getLocalOngoingCount()
-      : $model->getLoanCount();
-  }
-
-
-  public function isInfiniteLoan($model) {
-    return $this->isInfinite($model->getLoanQuantity());
-  }
-
-
-  public function isInfinite($value) {
-    return preg_match('/^9{4,}$/', $value);
-  }
 }
-?>
\ No newline at end of file
diff --git a/library/Class/TableDescription/PNBItemsExport.php b/library/Class/TableDescription/PNBItemsExport.php
index cf1d4a535292ee8f2ee48a0355cbf80d7900e3b2..dd5647c45222361628286b2b9b7df9beef51a975 100644
--- a/library/Class/TableDescription/PNBItemsExport.php
+++ b/library/Class/TableDescription/PNBItemsExport.php
@@ -26,13 +26,13 @@ class Class_TableDescription_PNBItemsExport extends Class_TableDescription_PNBIt
   public function init() {
     $this
       ->addColumn($this->_('Titre'), 'title')
-      ->addColumn($this->_('Prêts / Droits'), 'getQuantityOnTotal')
-      ->addColumn($this->_('Nombre de prêts'),  'loanQuantityOrLocalLoanCount')
-      ->addColumn($this->_('Prêts simultanés / Droits'), 'getLiveQuantity')
-      ->addColumn($this->_('Prêts simultanés'),  'loanCountOrLocalOngoing')
-      ->addColumn($this->_('Durée de prêt en jours'),  'getDuration')
-      ->addColumn($this->_('Nombre de jours restant sur la licence'),  'getLicenseExpiration')
-      ->addColumn($this->_('Date de commande'),  'orderDate')
+      ->addColumn($this->_('Prêts / Droits'), 'quantity_on_total')
+      ->addColumn($this->_('Nombre de prêts'),  'loan_quantity_or_local_loan_count')
+      ->addColumn($this->_('Prêts simultanés / Droits'), 'live_quantity')
+      ->addColumn($this->_('Prêts simultanés'), 'loan_count_or_local_ongoing')
+      ->addColumn($this->_('Durée de prêt en jours'), 'duration')
+      ->addColumn($this->_('Nombre de jours restant sur la licence'), 'license_expiration')
+      ->addColumn($this->_('Date de commande'),  'order_date')
       ->addColumn($this->_('Auteur'), 'main_author')
       ->addColumn($this->_('Éditeur'), 'first_editor')
       ->addColumn($this->_('Collection'), 'first_collection')
diff --git a/library/Class/TableDescription/PNBItemsRenderer.php b/library/Class/TableDescription/PNBItemsRenderer.php
new file mode 100644
index 0000000000000000000000000000000000000000..f40234de32f08f3a93b4602894100cdbacbbaf3b
--- /dev/null
+++ b/library/Class/TableDescription/PNBItemsRenderer.php
@@ -0,0 +1,108 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class Class_TableDescription_PNBItemsRenderer {
+  protected $_item;
+
+  public function __construct($item) {
+    $this->_item = $item;
+  }
+
+
+  public function callGetterByAttributeName($attribute) {
+    return call_user_func([$this, 'get' . Storm_Inflector::camelize($attribute)]);
+  }
+
+
+  public function __call($name, $params) {
+    return call_user_func_array([$this->_item, $name], $params);
+  }
+
+
+  public function getOrderDate() {
+    return ($date = $this->_item->getOrderDate())
+      ? (new DateTime($date))->format('d/m/Y')
+      : '';
+  }
+
+
+  public function getDuration() {
+    return $this->quantityOrInfinite($this->_item->getDuration());
+  }
+
+
+  public function getAlbumId() {
+    return $this->_item->getAlbumId();
+  }
+
+
+  public function quantityOrInfinite($value) {
+    return $this->isInfinite($value)
+      ? '∞'
+      : $value;
+  }
+
+
+  public function getQuantityOnTotal() {
+    return $this->getLoanQuantityOrLocalLoanCount()
+      . ' / '
+      . $this->quantityOrInfinite($this->_item->getLoanQuantity());
+  }
+
+
+  public function getLiveQuantity() {
+    return $this->getLoanCountOrLocalOngoing()
+      . ' / '
+      . $this->_item->getLoanAllowedNumberOfUsers();
+  }
+
+
+  public function getLicenseExpiration() {
+    return ('∞' == $this->quantityOrInfinite($this->_item->getAvailabilityDuration()))
+            ? '∞'
+            : $this->_item->getAvailabilityRemainingDaysBeforeEndDate();
+  }
+
+
+  public function getLoanQuantityOrLocalLoanCount() {
+    return $this->isInfiniteLoan()
+      ? $this->_item->getLocalLoanCount()
+      : $this->_item->getQuantity();
+  }
+
+
+  public function getLoanCountOrLocalOngoing() {
+    return $this->isInfiniteLoan()
+      ? $this->_item->getLocalOngoingCount()
+      : $this->_item->getLoanCount();
+  }
+
+
+  public function isInfiniteLoan() {
+    return $this->isInfinite($this->_item->getLoanQuantity());
+  }
+
+
+  public function isInfinite($value) {
+    return preg_match('/^9{4,}$/', $value);
+  }
+}
diff --git a/library/Class/TableDescription/PNBLoans.php b/library/Class/TableDescription/PNBLoans.php
index 73fe00b6e1b4ab96edcc45a82af881d84d1e0c65..9081be9c188408fa3c914fd4c55d94c203a5716f 100644
--- a/library/Class/TableDescription/PNBLoans.php
+++ b/library/Class/TableDescription/PNBLoans.php
@@ -25,9 +25,11 @@ class Class_TableDescription_PNBLoans extends Class_TableDescription {
 
   public function init() {
     $this
-      ->addColumn($this->_('Date'),  'loanDate')
+      ->addColumn($this->_('Date'),
+                  function($model) { return $this->loanDate($model); })
       ->addColumn($this->_('Titre'), 'title')
-      ->addColumn($this->_('Date de commande'),  'orderDate')
+      ->addColumn($this->_('Date de commande'),
+                  function($model) { return $this->orderDate($model); })
       ->addColumn($this->_('Auteur'), 'main_author')
       ->addColumn($this->_('Éditeur'), 'first_editor')
       ->addColumn($this->_('Collection'), 'first_collection')
diff --git a/library/ZendAfi/View/Helper/RenderModelAction.php b/library/ZendAfi/View/Helper/RenderModelAction.php
index aca1f8af44f9666715b601329227d4bcfd7590fb..c57e4b6bb93bd2da75ad0fd19a6af94a04bec513 100644
--- a/library/ZendAfi/View/Helper/RenderModelAction.php
+++ b/library/ZendAfi/View/Helper/RenderModelAction.php
@@ -44,7 +44,7 @@ class ZendAfi_View_Helper_RenderModelAction extends ZendAfi_View_Helper_BaseHelp
    *                    'controller' => 'blog',
    *                    'action' => 'viewauteur',
    *                    'id' => '%s'],
-   *          'id' => [$this, 'renderModelId']
+   *          'id' => function($model) { return $this->renderModelId($model); },
    *          'icon' => 'star',
    *          'label' => $this->_('avi(s)'),
    *          'caption' => $this->_('click here'),
diff --git a/tests/application/modules/admin/controllers/RegistrationControllerTest.php b/tests/application/modules/admin/controllers/RegistrationControllerTest.php
index 756408339a242e5a9b4cefad689403189b937a58..59edbc693f987a73f6c92b2ead11fac5d2028abe 100644
--- a/tests/application/modules/admin/controllers/RegistrationControllerTest.php
+++ b/tests/application/modules/admin/controllers/RegistrationControllerTest.php
@@ -115,13 +115,13 @@ class RegistrationControllerIndexTest extends RegistrationControllerTestCase {
 
 
   /** @test */
-  public function pageShouldNotContainsDeleteRegistrationLinkForPwd() {
-    $this->assertNotXPath('//a[contains(@href, "admin/registration/delete/id/1")]');
+  public function pageShouldNotContainsArchiveRegistrationLinkForPwd() {
+    $this->assertNotXPath('//a[contains(@href, "admin/registration/archive/id/1")]');
   }
 
 
   public function pageShouldContainsDeleteRegistrationLinkForChewee() {
-    $this->assertXPath('//a[contains(@href, "admin/registration/delete/id/2")]');
+    $this->assertXPath('//a[contains(@href, "admin/registration/archive/id/2")]');
   }
 
 
@@ -224,7 +224,7 @@ class RegistrationControllerRejectPwdTest extends RegistrationControllerTestCase
 class RegistrationControllerDeleteTest extends RegistrationControllerTestCase {
   public function setUp() {
     parent::setUp();
-    $this->dispatch('/admin/registration/delete/id/2');
+    $this->dispatch('/admin/registration/archive/id/2');
   }