diff --git a/app/services/blocks_migration.rb b/app/services/blocks_migration.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d5b0e3cdbe92d9467e6d7e83780d11553fcbb6f5
--- /dev/null
+++ b/app/services/blocks_migration.rb
@@ -0,0 +1,115 @@
+class BlocksMigration
+
+  def self.cleanup
+    clean_cta
+    clean_chapter
+    clean_definitions
+    clean_gallery
+    clean_image
+    clean_posts
+    clean_pages
+  end
+
+  private
+
+  def self.clean_cta
+    Communication::Block.where(template_kind: 'call_to_action').each do |block|
+      data = block['data']
+      if data && data['url'].present?
+        elements = []
+        if data['url'].present?
+          elements << { title: data['button'], url: data['url'], target_blank: data['target_blank']}
+        end
+        if data['url_secondary'].present?
+          elements << { title: data['button_secondary'], url: data['url_secondary'], target_blank: data['target_blank_secondary']}
+        end
+        if data['url_tertiary'].present?
+          elements << { title: data['button_tertiary'], url: data['url_tertiary'], target_blank: data['target_blank_tertiary']}
+        end
+        data['elements'] = elements
+        data['alt'] = data['image_alt']
+        data['credit'] = data['image_credit']
+        block['data'] = data
+
+        block.save
+      end
+    end
+  end
+
+  def self.clean_chapter
+    Communication::Block.where(template_kind: 'chapter').each do |block|
+      data = block['data']
+      if data && (data['image_alt'].present? || data['image_credit'].present?)
+        data['alt'] = data['image_alt']
+        data['credit'] = data['image_credit']
+        block['data'] = data
+        block.save
+      end
+    end
+  end
+
+  def self.clean_definitions
+    Communication::Block.where(template_kind: 'definitions').each do |block|
+      data = block['data']
+      if data && data['elements'].any? && data['elements'].first.has_key?('text')
+        elements = []
+        data['elements'].each do |elmt|
+          elements << { title: elmt['title'], description: elmt['text'] }
+        end
+        data['elements'] = elements
+        block['data'] = data
+        block.save
+      end
+    end
+  end
+
+  def self.clean_gallery
+    Communication::Block.where(template_kind: 'gallery').each do |block|
+      data = block['data']
+      if data && data['elements'].any? && data['elements'].first.has_key?('file')
+        elements = []
+        data['elements'].each do |elmt|
+          elements << { alt: elmt['alt'], text: elmt['text'], credit: elmt['credit'], image: elmt['file'] }
+        end
+        data['elements'] = elements
+        block['data'] = data
+        block.save
+      end
+    end
+  end
+
+  def self.clean_image
+    Communication::Block.where(template_kind: 'image').each do |block|
+      data = block['data']
+      if data && (data['image_alt'].present? || data['image_credit'].present?)
+        data['alt'] = data['image_alt']
+        data['credit'] = data['image_credit']
+        block['data'] = data
+        block.save
+      end
+    end
+  end
+
+  def self.clean_posts
+    Communication::Block.where(template_kind: 'posts').each do |block|
+      data = block['data']
+      if data && data['kind'].present?
+        data['mode'] = data['kind']
+        block['data'] = data
+        block.save
+      end
+    end
+  end
+
+  def self.clean_pages
+    Communication::Block.where(template_kind: 'pages').each do |block|
+      data = block['data']
+      if data && data['kind'].present?
+        data['mode'] = data['kind']
+        block['data'] = data
+        block.save
+      end
+    end
+  end
+
+end
diff --git a/config/application.rb b/config/application.rb
index 959a1b37c9dd48f10200d5d67e983c9b720b337b..1759bf440d4f4585af936ac41f8afceb1fc5856d 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -64,7 +64,7 @@ module Osuny
       "decoding", "frameborder", "height", "href", "loading", "mozallowfullscreen",
       "name", "sizes", "src", "srcset", "target", "title", "type",
       "webkitallowfullscreen", "width", "xml:lang",
-      "sgid", "content-type", "url", "filename", "filesize", "previewable"
+      "sgid", "content-type", "url", "filename", "filesize", "previewable", "referrerpolicy"
     ]
 
     config.allowed_special_chars = '#?!,_@$%^&*+:;£µ-'
diff --git a/lib/tasks/app.rake b/lib/tasks/app.rake
index d8cb814a9e5b3bece58a93182314ad199923f683..1dda42bfe2c89d2f48f95021f1d2a84d22c1e7b3 100644
--- a/lib/tasks/app.rake
+++ b/lib/tasks/app.rake
@@ -17,6 +17,8 @@ namespace :app do
       clean_header_text = ActionController::Base.helpers.strip_tags(page.header_text)
       page.update(header_text: clean_header_text)
     }
+
+    BlocksMigration.cleanup
   end
 
   namespace :websites do