diff --git a/app/models/communication/block/template/definition.rb b/app/models/communication/block/template/definition.rb
index 2b9e596eee07563ac7d0280d3de34813897f45df..24239084f87559c737261117e70d3b3955c7772f 100644
--- a/app/models/communication/block/template/definition.rb
+++ b/app/models/communication/block/template/definition.rb
@@ -1,12 +1,5 @@
 class Communication::Block::Template::Definition < Communication::Block::Template::Base
-  def definitions
-    @definitions ||= elements.map { |element| definition(element) }
-                              .compact
-  end
 
-  protected
+  has_elements Communication::Block::Template::Definition::Definition
 
-  def definition(element)
-    element.to_dot
-  end
 end
diff --git a/app/models/communication/block/template/definition/definition.rb b/app/models/communication/block/template/definition/definition.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c31848d4ab47ecddc4458b752b2e2efe885f1d6a
--- /dev/null
+++ b/app/models/communication/block/template/definition/definition.rb
@@ -0,0 +1,4 @@
+class Communication::Block::Template::Definition::Definition < Communication::Block::Template::Base
+  has_string :title
+  has_text :description
+end
diff --git a/app/views/admin/communication/blocks/templates/definitions/_edit.html.erb b/app/views/admin/communication/blocks/templates/definitions/_edit.html.erb
index 8e3741feaed7a720d61a62d7b2b7ec32e989cf52..753770e0e674a347ba7f087509f7d457484a4693 100644
--- a/app/views/admin/communication/blocks/templates/definitions/_edit.html.erb
+++ b/app/views/admin/communication/blocks/templates/definitions/_edit.html.erb
@@ -1,10 +1,9 @@
-<a  class="<%= button_classes('mb-4') %>"
-    v-on:click="data.elements.push({title: '', text: ''})">
-    <%= t '.add_definition' %>
-</a>
+<% element = @block.template.default_element %>
+
+<%= block_component_add_element t('.add_definition') %>
 
 <draggable :list="data.elements" handle=".dragHandle" class="row">
-  <div v-for="(definition, index) in data.elements" class="col-md-4">
+  <div v-for="(element, index) in data.elements" class="col-md-4">
     <div class="card">
       <div class="card-body">
         <div class="d-flex">
@@ -14,6 +13,26 @@
             </a>
           </div>
           <div class="flex-fill">
+            <%= block_component_edit :title, template: element %>
+            <%= block_component_edit :description, template: element %>
+          </div>
+          <div>
+            <a  class="btn btn-sm btn-danger ms-3"
+                v-on:click="data.elements.splice(data.elements.indexOf(element), 1)"
+                title="<%= t '.remove_definition' %>">
+                <i class="fas fa-times"></i>
+            </a>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</draggable>
+
+
+
+
+            <!-- >
             <label    class="form-label"
                       :for="'definition-' + index + '-title'"><%= t '.title_label' %></label>
             <input class="form-control mb-3"
@@ -29,16 +48,4 @@
                       v-model="definition.text"
                       placeholder="<%= t '.text_placeholder' %>"
                       :id="'definition-' + index + '-text'"></textarea>
-          </div>
-          <div>
-            <a  class="btn btn-sm btn-danger ms-3"
-                v-on:click="data.elements.splice(data.elements.indexOf(definition), 1)"
-                title="<%= t '.remove_definition' %>">
-                <i class="fas fa-times"></i>
-            </a>
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-</draggable>
+            <!-->
diff --git a/app/views/admin/communication/blocks/templates/definitions/_preview.html.erb b/app/views/admin/communication/blocks/templates/definitions/_preview.html.erb
index e9aaa76eba5ab6851fd439547cf9f7a7ef07058c..cf94cd3c9a5b2ceff4c796b4f04e6db827674274 100644
--- a/app/views/admin/communication/blocks/templates/definitions/_preview.html.erb
+++ b/app/views/admin/communication/blocks/templates/definitions/_preview.html.erb
@@ -1,6 +1,8 @@
-<dl>
-  <% @block.template.definitions.each do |definition| %>
-    <dt><%= definition.title %></dt>
-    <dd><%= definition.text %></dd>
-  <% end %>
-</dl>
+<% @block.template.elements.each do |element| %>
+  <p class="lead mb-0">
+    <b>
+      <%= block_component_preview :title, template: element %>
+    </b>
+  </p>
+  <%= block_component_preview :description, template: element %>
+<% end %>
diff --git a/app/views/admin/communication/blocks/templates/definitions/_static.html.erb b/app/views/admin/communication/blocks/templates/definitions/_static.html.erb
index 2dd4e4ddb427ede024ae58123ca8e3dbfeb6fdf9..1cf45d3623de48746d5d3b02db60f3aa0b918e1d 100644
--- a/app/views/admin/communication/blocks/templates/definitions/_static.html.erb
+++ b/app/views/admin/communication/blocks/templates/definitions/_static.html.erb
@@ -1,6 +1,4 @@
-<% block.template.definitions.each do |definition| %>
-      - title: >-
-          <%= prepare_html_for_static definition.title, about.university %>
-        text: >-
-          <%= prepare_html_for_static definition.text, about.university  %>
+<% block.template.elements.each do |element| %>
+<%= block_component_static :title, template: element, depth:4, list: true %>
+<%= block_component_static :description, template: element, depth: 5 %>
 <% end %>
diff --git a/config/locales/communication/en.yml b/config/locales/communication/en.yml
index 793b297590ddb5a2e8de80cb60b4f2a8051197c1..785cd45364ba97c09776d7e1c038ae1b8afa6abc 100644
--- a/config/locales/communication/en.yml
+++ b/config/locales/communication/en.yml
@@ -194,10 +194,13 @@ en:
             edit:
               add_definition: Add definition
               remove_definition: Delete definition
-              title_label: Title
-              title_placeholder: Enter title here
-              text_label: Text
-              text_placeholder: Enter text here
+              element:
+                title:
+                  label: Title
+                  placeholder: Enter title here
+                description:
+                  label: Text
+                  placeholder: Enter text here
           embed:
             description: HTML raw code, so you can integrate maps or iframe components.
             edit:
diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml
index 6bf20ba4e3e27cd12898091862a67d087c84cf2b..42ff75c22e39afd0ddd5ab1b11ee6c17fc554cb8 100644
--- a/config/locales/communication/fr.yml
+++ b/config/locales/communication/fr.yml
@@ -200,10 +200,13 @@ fr:
             edit:
               add_definition: Ajouter une définition
               remove_definition: Supprimer la définition
-              title_label: Titre
-              title_placeholder: Entrer le titre de la définition
-              text_label: Texte
-              text_placeholder: Entrer la description de la définition
+              element:
+                title:
+                  label: Titre
+                  placeholder: Entrer le titre de la définition
+                description:
+                  label: Texte
+                  placeholder: Entrer la description de la définition
           embed:
             description: Du code HTML brut, permettant d'intégrer des cartes ou divers composants en iframe.
             edit: