diff --git a/core/attributedef/AttributeHTML.php b/core/attributedef/AttributeHTML.php
new file mode 100644
index 000000000..953e7c9a5
--- /dev/null
+++ b/core/attributedef/AttributeHTML.php
@@ -0,0 +1,51 @@
+ ?), containing HTML code, to an attribute
+ *
+ * @package iTopORM
+ */
+class AttributeHTML extends AttributeLongText
+{
+ /**
+ * Useless constructor, but if not present PHP 7.4.0/7.4.1 is crashing :( (N°2329)
+ *
+ * @see https://www.php.net/manual/fr/language.oop5.decon.php states that child constructor can be ommited
+ * @see https://bugs.php.net/bug.php?id=79010 bug solved in PHP 7.4.9
+ *
+ * @param string $sCode
+ * @param array $aParams
+ *
+ * @throws \Exception
+ * @noinspection SenselessProxyMethodInspection
+ */
+ public function __construct($sCode, $aParams)
+ {
+ parent::__construct($sCode, $aParams);
+ }
+
+ public function GetSQLColumns($bFullSpec = false)
+ {
+ $aColumns = array();
+ $aColumns[$this->Get('sql')] = $this->GetSQLCol();
+ if ($this->GetOptional('format', null) != null) {
+ // Add the extra column only if the property 'format' is specified for the attribute
+ $aColumns[$this->Get('sql') . '_format'] = "ENUM('text','html')";
+ if ($bFullSpec) {
+ $aColumns[$this->Get('sql') . '_format'] .= " DEFAULT 'html'"; // default 'html' is for migrating old records
+ }
+ }
+
+ return $aColumns;
+ }
+
+ /**
+ * The actual formatting of the text: either text (=plain text) or html (= text with HTML markup)
+ *
+ * @return string
+ */
+ public function GetFormat()
+ {
+ return $this->GetOptional('format', 'html'); // Defaults to HTML
+ }
+}
\ No newline at end of file