diff --git a/app/models/application_record.rb b/app/models/application_record.rb
index fc247cf5201df486db8442e6e3559b16c411b1a1..9919dcb3c935152c8615d00c82ece53357e49dc3 100644
--- a/app/models/application_record.rb
+++ b/app/models/application_record.rb
@@ -4,18 +4,10 @@ class ApplicationRecord < ActiveRecord::Base
   # TODO put that in summernote-rails
 
   # https://github.com/rails/rails/blob/b961af3345fe2f9e492ba1e5424c2ceb75ac6ead/actiontext/lib/action_text/attribute.rb#L4
+  # https://github.com/rails/rails/blob/b961af3345fe2f9e492ba1e5424c2ceb75ac6ead/actiontext/lib/action_text/content.rb#L121
   def self.has_summernote(name)
     class_eval <<-CODE, __FILE__, __LINE__ + 1
-      def #{name}
-        value = attributes['#{name}']
-        actiontext = ActionText::Content.new value
-        actiontext.to_s
-      end
-
-      def #{name}=(value)
-        actiontext = ActionText::Content.new value
-        self.attributes['#{name}'] = actiontext.to_html
-      end
+      serialize :#{name}, ActionText::Content
     CODE
   end
 
@@ -29,7 +21,7 @@ class ApplicationRecord < ActiveRecord::Base
 
   def convert_to_summernote
     @@summernote_fields.each do |field|
-      self["#{field}_new"] = send(field).body.to_html
+      self.attributes["#{field}_new"] = send(field).body.to_html
                                         .gsub('<div>', '<p>')
                                         .gsub('</div>', '</p>')
                                         .gsub('<strong>', '<b>')
diff --git a/app/views/admin/communication/website/posts/show.html.erb b/app/views/admin/communication/website/posts/show.html.erb
index 077d6439358c7960abadcd79136252f531851eba..3c35f16929f368958dcd1a6a8114738ce646b702 100644
--- a/app/views/admin/communication/website/posts/show.html.erb
+++ b/app/views/admin/communication/website/posts/show.html.erb
@@ -14,7 +14,7 @@
           <h3 class="h5 mt-4"><%= Communication::Website::Post.human_attribute_name('text') %></h3>
           <%= @post.text %>
           <hr>
-          <pre><%= @post.text_new %></pre>
+          <pre><%= @post.text_new.to_html %></pre>
         </div>
       </div>
     </div>
diff --git a/docs/communication/wysiwyg.md b/docs/communication/wysiwyg.md
index f2161552b92c157153c674275dc94bfeb6928808..54d2d0bce66f0318c2dec677370dee0c6e66990a 100644
--- a/docs/communication/wysiwyg.md
+++ b/docs/communication/wysiwyg.md
@@ -87,18 +87,18 @@ A l'édition, la balise est "remplie" avant affichage, pour avoir une preview.
 A l'enregistrement, la balise est vidée.
 
 Etapes normales :
-1. A l'import d'une image, ajouter l'action-text-attachement autour
-2. A l'enregistrement, déshydrater les action-text-attachements
-3. A l'édition, réhydrater les action-text-attachements
-4. Après l'enregistrement mettre à jour les blobs attachés à l'objet parent (le post, par exemple)
+-[ ] A l'import d'une image, ajouter l'action-text-attachement autour
+-[x] A l'enregistrement, déshydrater les action-text-attachements
+-[x] A l'édition, réhydrater les action-text-attachements
+-[ ] Après l'enregistrement mettre à jour les blobs attachés à l'objet parent (le post, par exemple)
 
 Etapes de migration :
-1. Sauvegarder tous les objets à migrer (rails app:fix)
-2. A la sauvegarde, transformer le markup Trix en markup Summernote (application_record)
-3. Enlever les scripts de l'application_record
-4. Supprimer les champs ActionText dans les modèles
-5. Supprimer la table d'ActionText
-6. Renommer les champs en enlevant _new
+-[x] A la sauvegarde, transformer le markup Trix en markup Summernote (application_record)
+-[ ] Sauvegarder tous les objets à migrer (rails app:fix)
+-[ ] Enlever les scripts de l'application_record
+-[ ] Supprimer les champs ActionText dans les modèles
+-[ ] Supprimer la table d'ActionText
+-[ ] Renommer les champs en enlevant _new
 
 Si un programme a 5 champs summernote avec 3 images dans chaque champ, cela fait 15 attachments à lier au programme.
 Si on enlève une image d'un champ, il faut mettre à jour la liste pour avoir les 14 bons attachments.