diff --git a/include/class_plugin.inc b/include/class_plugin.inc
index 40df4900cbc52faf1617ece00e48b9829aabfb22..03690f9dea52dff3d09c661932ae7e8a91b2238e 100644
--- a/include/class_plugin.inc
+++ b/include/class_plugin.inc
@@ -773,20 +773,30 @@ class plugin
     return $result;
   }
 
-  static function tpl_depends_of (&$cache, $depends, $key, $forbidden = NULL)
+  static function tpl_depends_of (&$cache, $depends, $key, $forbidden = array())
   {
     if (isset($cache[$key])) {
       return $cache[$key];
     }
-    if ($forbidden === NULL) {
-      $forbidden = $key;
-    } elseif ($forbidden == $key) {
-      die('Error : recursive dependency');
-    }
-    $array        =
+
+    $forbidden[] = $key;
+
+    $array =
       array_map(
         function ($a) use (&$cache, $depends, $forbidden)
         {
+          if (in_array($a, $forbidden)) {
+            msg_dialog::display(
+              _('Error'),
+              sprintf(
+                _('Recursive dependency in the template fields: "%1$s" cannot depend on "%2$s" as "%2$s" already depends on "%1$s"'),
+                $key,
+                $a
+              ),
+              ERROR_DIALOG
+            );
+            return array();
+          }
           $deps = plugin::tpl_depends_of ($cache, $depends, $a, $forbidden);
           if (($askmeKey = array_search('askme', $deps)) !== FALSE) {
             /* Do not flat special askme dependency */