diff --git a/application/modules/opac/controllers/RechercheController.php b/application/modules/opac/controllers/RechercheController.php
index edcd06c27e5c72432686419ce5c6f839c7a78a93..e63b885766f10b6273db86cb662ab5142e72a92d 100644
--- a/application/modules/opac/controllers/RechercheController.php
+++ b/application/modules/opac/controllers/RechercheController.php
@@ -317,6 +317,11 @@ class RechercheController extends ZendAfi_Controller_Action {
       return $this->_redirect('opac/recherche/simple');
     }
 
+    $template = Class_Template::current();
+
+    if ($template->handleRecordView())
+      return $this->view->notice = $notice;
+
     Class_ScriptLoader::getInstance()->addRecordMeta($notice);
 
     $this->_addInspectorGadget($notice);
diff --git a/application/modules/opac/views/scripts/recherche/viewnotice.phtml b/application/modules/opac/views/scripts/recherche/viewnotice.phtml
index ec7dad9994666c29c1a1130b22e05010f4089aa4..18b5a6c82dfee18169a3c8d1e749fed46ae50812 100644
--- a/application/modules/opac/views/scripts/recherche/viewnotice.phtml
+++ b/application/modules/opac/views/scripts/recherche/viewnotice.phtml
@@ -1,120 +1,2 @@
 <?php
-$this->openBoite($this->title);
-
-$script_loader = Class_ScriptLoader::getInstance()
-		 ->addAdminScript('multi_inputs/multi_inputs.js')
-
-	   ->addSkinstylesheet('recherche')
-	   ->addOpacScripts(['subModal',
-										   'recherche',
-										   'liste_notices_mur']);
-?>
-
-<div class="navigation">
-  <?php
-  echo $this->tagAnchor(
-    $this->url($this->criteres_recherche->getUrlRetourListe(), null, true).'#'.$this->notice->getId(),
-    $this->_('Retour à la liste'),
-    ['title' => $this->_('Retourner au résultat de recherche'),
-     'class' => 'retour']);
-
-  echo Class_ModeleFusion::canPrintRecordInProfile(Class_Profil::getCurrentProfil())
-    ? $this->tagAnchor(['controller' => 'recherche',
-                        'action' => 'print'],
-                       $this->_('Imprimer'),
-                       ['title' => $this->_('Imprimer "%s"', $this->notice->getTitrePrincipal()),
-                        'target' => '_blank'])
-    : '';
-
-	echo $this->tagAnchor($this->url_panier,
-												$this->_('Ajouter au panier'),
-												['class'=>'panier'.
-			 ($this->notice->isInPanier()
-																 ? ' dans_panier'
-																 : ''),
-												 'data-popup' => 'true',
-												 'title' => $this->_('Ajouter "%s" dans un panier', $this->notice->getTitrePrincipal())]);
-
-
-	echo $this->Notice_LienReserver($this->notice);
-
-	if ($this->notice_navigation)
-		echo $this->Notice_Navigation($this->notice_navigation);
-	?>
-	<div class="clear"></div>
-</div>
-
-
-<div class="notice_vignette">
-	<?php
-	echo $this->notice_Vignette($this->notice,
-                              [],
-                              ZendAfi_View_Helper_Notice_Vignette::MODE_VIEW);
-
-  if ($this->display_modifier_vignette_link)
-    echo $this->Admin_Button((new Class_Entity())
-                        ->setUrl($this->url(['module' => 'admin',
-                                             'controller' => 'records',
-                                             'action' => 'thumbnail']))
-                        ->setText($this->_('Modifier'))
-                        ->setAttribs(['title' => $this->_('Modifier la vignette de la notice "%s"',
-                                                          $this->notice->getTitrePrincipal()),
-                                      'data-popup' => 'true']));
-
-  if ($this->show_reset_thumbnail_link)
-    echo $this->Admin_Button((new Class_Entity())
-                             ->setUrl($this->url(['module' => 'admin',
-                                                  'controller' => 'records',
-                                                  'action' => 'reset-thumbnail']))
-                             ->setText($this->_('Générer'))
-                             ->setAttribs(['title' => $this->_('Supprimer et re-générer la vignette de la notice "%s"',
-                                                               $this->notice->getTitrePrincipal())]));
-  ?>
-
-  <div id="reseaux-sociaux"><?php echo $this->reseauxSociaux($this->notice); ?></div>
-</div>
-
-
-<div class="view_notice type_doc_<?php echo $this->notice->getTypeDoc(); ?>">
-  <div>
-    <div class="image">
-      <?php echo $this->iconeSupport($this->notice->getTypeDoc()) ?>
-      <?php if($this->picto_genre) echo BR.BR.'<img src="'.URL_IMG.'genres/'.$this->picto_genre.'" alt="Genre" />'?>
-    </div>
-    <div style="margin-left: 30px">
-      <div>
-        <h1>
-          <?php
-          echo "<span>".$this->notice->getTitreEtSousTitre()."</span>";
-          echo $this->readSpeaker('recherche',
-                                  'readnotice',
-                                  ["id" => $this->notice->getId()]);
-          ?>
-          <br>
-          <?php
-          echo (Class_AdminVar::isModuleEnabled('AUTHOR_PAGE'))
-            ? $this->notice->getChampNotice(Class_CodifAuteur::CODE_FACETTE)[0]->renderOn($this)
-            : $this->tag('span', $this->notice->getAuteurPrincipal());
-          ?>
-        </h1>
-      </div>
-    </div>
-  </div>
-</div>
-<?php
-
-echo $this->premierChapitre_Lien($this->notice,['targetLink'=>'ancre']);
-
-echo sprintf('<div class="entete_notice">%s</div>'.
-		 '<div class="flags_notice">%s</div>'.
-		 '<div class="blocs_notice">%s</div>'.
-		 '<div>%s</div>',
-						 $this->notice_Entete($this->notice, $this->preferences),
-						 $this->notice_Flags($this->notice, $this->preferences),
-						 $this->notice_Blocs($this->notice, $this->preferences)."<div class='clear'></div>",
-						 $this->notice_Onglets($this->notice, $this->preferences));
-
-
-echo $this->premierChapitre_Frame($this->notice);
-$this->closeBoite();
-?>
+echo $this->renderRecord($this->notice);
diff --git a/library/Class/Template.php b/library/Class/Template.php
index 992f4927116e3ed34db39889145ccbc618e6de77..46dbe5a954e4d1e9916c87fd1fc5aaa3abeb6319 100644
--- a/library/Class/Template.php
+++ b/library/Class/Template.php
@@ -178,6 +178,11 @@ class Class_Template {
   }
 
 
+  public function handleRecordView() {
+    return false;
+  }
+
+
   public function getWidgets() {
     return [];
   }
diff --git a/library/ZendAfi/View/Helper/RenderRecord.php b/library/ZendAfi/View/Helper/RenderRecord.php
new file mode 100644
index 0000000000000000000000000000000000000000..07f054cddf9eca10b4764a94d2bd11c10cadc2d1
--- /dev/null
+++ b/library/ZendAfi/View/Helper/RenderRecord.php
@@ -0,0 +1,182 @@
+<?php
+/**
+ * Copyright (c) 2012-2018, 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 ZendAfi_View_Helper_RenderRecord extends ZendAfi_View_Helper_BaseHelper {
+
+  protected $notice;
+
+  public function renderRecord($record) {
+    $this->notice = $record;
+
+    $script_loader = Class_ScriptLoader::getInstance()
+      ->addAdminScript('multi_inputs/multi_inputs.js')
+
+      ->addSkinstylesheet('recherche')
+      ->addOpacScripts(['subModal',
+                        'recherche',
+                        'liste_notices_mur']);
+
+    $html = [$this->view->openBoite($this->view->title),
+
+             $this->_renderNavigation(),
+
+             $this->_renderThumbnail(),
+
+             $this->_renderHead(),
+
+             $this->view->premierChapitre_Lien($this->notice, ['targetLink'=>'ancre']),
+
+             $this->_tag('div',
+                         $this->view->notice_Entete($this->notice, $this->view->preferences),
+                         ['class' => 'entete_notice']),
+
+             $this->_tag('div',
+                         $this->view->notice_Flags($this->notice, $this->view->preferences),
+                         ['class' => 'flags_notice']),
+
+             $this->_tag('div',
+                         $this->view->notice_Blocs($this->notice, $this->view->preferences)
+                         . $this->_tag('div',
+                                       '',
+                                       ['class' => 'clear']),
+                         ['class' => 'blocs_notice']),
+
+             $this->_tag('div',
+                         $this->view->notice_Onglets($this->notice, $this->view->preferences)),
+
+             $this->view->premierChapitre_Frame($this->notice),
+
+             $this->view->closeBoite()
+    ];
+
+    return implode($html);
+  }
+
+
+  protected function _renderNavigation() {
+    $html = [$this->view->tagAnchor(
+                                    $this->view->url($this->view->criteres_recherche->getUrlRetourListe(), null, true)
+                                    . '#'
+                                    . $this->notice->getId(),
+                                    $this->_('Retour à la liste'),
+                                    ['title' => $this->_('Retourner au résultat de recherche'),
+                                     'class' => 'retour']),
+             (Class_ModeleFusion::canPrintRecordInProfile(Class_Profil::getCurrentProfil())
+              ? $this->view->tagAnchor(['controller' => 'recherche',
+                                        'action' => 'print'],
+                                       $this->_('Imprimer'),
+                                       ['title' => $this->_('Imprimer "%s"', $this->notice->getTitrePrincipal()),
+                                        'target' => '_blank'])
+              : ''),
+
+             $this->view->tagAnchor($this->view->url_panier,
+                                    $this->_('Ajouter au panier'),
+                                    ['class'=>'panier'.
+                                     ($this->notice->isInPanier()
+                                      ? ' dans_panier'
+                                      : ''),
+                                     'data-popup' => 'true',
+                                     'title' => $this->_('Ajouter "%s" dans un panier', $this->notice->getTitrePrincipal())]),
+
+             $this->view->Notice_LienReserver($this->notice),
+
+             ($this->view->notice_navigation
+              ? $this->view->Notice_Navigation($this->view->notice_navigation)
+              : ''),
+
+             $this->_tag('div',
+                         '',
+                         ['class' => 'clear'])];
+
+    return $this->_tag('div',
+                       implode($html),
+                       ['class' => 'navigation']);
+  }
+
+
+  protected function _renderThumbnail() {
+    $html = [$this->view->notice_Vignette($this->notice,
+                                          [],
+                                          ZendAfi_View_Helper_Notice_Vignette::MODE_VIEW),
+
+             ($this->view->display_modifier_vignette_link
+              ? $this->view->Admin_Button((new Class_Entity())
+                                          ->setUrl($this->view->url(['module' => 'admin',
+                                                                     'controller' => 'records',
+                                                                     'action' => 'thumbnail']))
+                                          ->setText($this->_('Modifier'))
+                                          ->setAttribs(['title' => $this->_('Modifier la vignette de la notice "%s"',
+                                                                            $this->notice->getTitrePrincipal()),
+                                                        'data-popup' => 'true']))
+              : ''),
+
+             ($this->view->show_reset_thumbnail_link
+              ? $this->view->Admin_Button((new Class_Entity())
+                                          ->setUrl($this->view->url(['module' => 'admin',
+                                                                     'controller' => 'records',
+                                                                     'action' => 'reset-thumbnail']))
+                                          ->setText($this->_('Générer'))
+                                          ->setAttribs(['title' => $this->_('Supprimer et re-générer la vignette de la notice "%s"',
+                                                                            $this->notice->getTitrePrincipal())]))
+              : ''),
+
+             $this->_tag('div',
+                         $this->view->reseauxSociaux($this->notice),
+                         ['id' => 'reseaux-sociaux'])
+    ];
+
+    return $this->_tag('div',
+                       implode($html),
+                       ['class' => 'notice_vignette']);
+  }
+
+
+  protected function _renderHead() {
+    $html = [$this->_tag('div',
+                         $this->view->iconeSupport($this->notice->getTypeDoc())
+                         . ($this->view->picto_genre
+                            ? BR . BR . $this->view->tagImg(URL_IMG . 'genres/' . $this->view->picto_genre,
+                                                            ['alt' => 'Genre'])
+                            : ''),
+                         ['class' => 'image']),
+
+             $this->_tag('div',
+                         $this->_tag('div',
+                                     $this->_tag('h1',
+                                                 $this->_tag('span',
+                                                             $this->notice->getTitreEtSousTitre())
+                                                 . $this->view->readSpeaker('recherche',
+                                                                            'readnotice',
+                                                                            ["id" => $this->notice->getId()]))
+                                     . BR
+                                     . (Class_AdminVar::isModuleEnabled('AUTHOR_PAGE')
+                                        ? $this->notice->getChampNotice(Class_CodifAuteur::CODE_FACETTE)[0]->renderOn($this->view)
+                                        : $this->_tag('span', $this->notice->getAuteurPrincipal()))),
+                         ['style' => 'margin-left: 30px'])
+];
+
+    return $this->_tag('div',
+                       $this->_tag('div',
+                                   implode($html)),
+                       ['class' => 'view_notice type_doc_' . $this->notice->getTypeDoc()]);
+  }
+}
\ No newline at end of file
diff --git a/library/templates/Intonation/Template.php b/library/templates/Intonation/Template.php
index 150627c18daffc3ab562e7dc6985b384a55fe292..f897f6896888e3b5ba84bfcaf9679b4795de8ad4 100644
--- a/library/templates/Intonation/Template.php
+++ b/library/templates/Intonation/Template.php
@@ -69,6 +69,11 @@ class Intonation_Template extends Class_Template {
   }
 
 
+  public function handleRecordView() {
+    return true;
+  }
+
+
   public function hydrate($attribs, $name) {
     $cache_key = $name . json_encode($attribs);
 
diff --git a/library/templates/Intonation/View/RenderRecord.php b/library/templates/Intonation/View/RenderRecord.php
new file mode 100644
index 0000000000000000000000000000000000000000..2ba73ab00d3d09f937f3e7a8f00c917a8e5fecfe
--- /dev/null
+++ b/library/templates/Intonation/View/RenderRecord.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Copyright (c) 2012-2018, 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 Intonation_View_RenderRecord extends ZendAfi_View_Helper_BaseHelper {
+
+  protected $_record,
+    $_wrapped;
+
+
+  public function renderRecord($record) {
+    $this->_record = $record;
+
+    $this->_wrapped = (new Intonation_Library_View_Wrapper_Record)
+      ->setView($this->view)
+      ->setModel($this->_record);
+
+    $this->view->titre = $this->_wrapped->getTitle();
+
+    $html = [$this->_renderHead(),
+    ];
+
+    return implode($html);
+  }
+
+
+  protected function _renderHead() {
+    return $this->_tag('div',
+                       $this->_tag('div',
+                                   $this->_tag('h1',
+                                               $this->view->titre,
+                                               ['class' => 'display-4'])
+                                   . $this->view->tagAnchor($this->_wrapped->getAuthorLink(),
+                                                            $this->_('Voir l\'auteur'),
+                                                            ['title' => $this->_wrapped->getAuthorLinkTitle(),
+                                                             'class' => 'card-link']),
+                                   ['class' => 'container']),
+                       ['class' => 'col-12 jumbotron jumbotron-fluid']);
+  }
+}
\ No newline at end of file
diff --git a/tests/scenarios/Templates/TemplatesTest.php b/tests/scenarios/Templates/TemplatesTest.php
index f1faf095c9f5199c6385b6608d44329cd5a69c69..2a63f2ddb1e3734564386f2fbaf89f734bb27260 100644
--- a/tests/scenarios/Templates/TemplatesTest.php
+++ b/tests/scenarios/Templates/TemplatesTest.php
@@ -1711,4 +1711,20 @@ class TemplatesCmsArticleViewTest extends TemplatesIntonationTestCase {
     $this->dispatch('/opac/cms/articleview/id/7/id_profil/72', true);
     $this->assertXPathContentContains('//main//div', 'Parlez-vous français ?');
   }
+}
+
+
+
+class TemplatesViewRecordTest extends TemplatesIntonationTestCase {
+
+  /** @test */
+  public function dispatchViewRecordShouldDisplayPsycho() {
+    $this->fixture('Class_Notice',
+                   ['id' => 456,
+                    'titre_principal' => 'Psycho']);
+
+    $this->dispatch('/opac/recherche/viewnotice/id/456/id_profil/72');
+    $this->assertXPathContentContains('//h1',
+                                      'Psycho');
+  }
 }
\ No newline at end of file