diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 36e7b4b32edecaf9bb385eb032523b24ad18052b..7290edaf3ddd2ab495c9bbe2e2c0249c68d8881b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -76,6 +76,7 @@ create_phpstan_rapport:
     - git clone --depth 1 https://gitlab.fusiondirectory.org/fusiondirectory/dev-tools.git ../dev-tools
     - composer global require phpstan/phpstan=0.12.94
     - cp ../dev-tools/phpstan/fusiondirectory/1.4-dev/*.neon .
+    - composer global require phpstan/phpstan=0.12.94
     - /root/.composer/vendor/bin/phpstan analyse -c phpstan.neon
 
 # fusiondirectory-update-locale
@@ -131,3 +132,4 @@ trigger-plugins:
   trigger:
     project: fusiondirectory/fd-plugins
     branch: $CI_COMMIT_REF_NAME
+
diff --git a/contrib/openldap/core-fd.schema b/contrib/openldap/core-fd.schema
index 792d5c80ecca3dce8648eb97f8211db41a26632a..5fbdc63bf3ca70c808784cc568e657028e0b1335 100644
--- a/contrib/openldap/core-fd.schema
+++ b/contrib/openldap/core-fd.schema
@@ -92,8 +92,243 @@ attributetype ( 1.3.6.1.4.1.38414.62.11.4 NAME 'fdSubscriptionContractId'
 attributetype ( 1.3.6.1.4.1.38414.62.11.5 NAME 'fdSubscriptionName'
   DESC 'FusionDirectory - Subscription client name'
   SUP name )
+  
+#Macro Attributes
 
-# Classes
+attributetype ( 1.3.6.1.4.1.38414.90.1.1 NAME 'fdMacroRDN'
+  DESC 'FusionDirectory - Macro RDN'
+  EQUALITY caseExactIA5Match
+  SUBSTR caseExactIA5SubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+  SINGLE-VALUE)
+
+attributetype ( 1.3.6.1.4.1.38414.90.1.2 NAME 'fdMacroMail'
+  DESC 'FusionDirectory - Macro RDN'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+  SINGLE-VALUE)
+
+attributetype ( 1.3.6.1.4.1.38414.90.1.3 NAME 'fdMacroInvitations'
+  DESC 'FusionDirectory - template mail field'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+
+attributetype ( 1.3.6.1.4.1.38414.90.1.4 NAME 'fdMacroUserRecovery'
+  DESC 'FusionDirectory - template mail field'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+
+attributetype ( 1.3.6.1.4.1.38414.90.1.5 NAME 'fdMacroUserReminder'
+  DESC 'FusionDirectory - template mail field'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+
+### Mail Template Related Attributes ###
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.1 NAME 'fdMailTemplateBody'
+  DESC 'FusionDirectory - template mail field'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.2 NAME 'fdMailTemplateRDN'
+  DESC 'FusionDirectory - template Mail RDN'
+  EQUALITY caseExactIA5Match
+  SUBSTR caseExactIA5SubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+  SINGLE-VALUE)
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.3 NAME 'fdMTPasswordRecoveryMailSubject'
+  DESC 'FusionDirectory - template mail field'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+  
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.4 NAME 'fdMTPasswordRecoveryMailBody'
+  DESC 'FusionDirectory - template mail field'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.5 NAME 'fdMTPasswordRecoveryMail2Subject'
+  DESC 'FusionDirectory - template mail field'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.6 NAME 'fdMTPasswordRecoveryMail2Body'
+  DESC 'FusionDirectory - template mail field'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.8 NAME 'fdMailTemplateSignature'
+  DESC 'FusionDirectory - template mail field'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.9 NAME 'fdMailTemplateAttachment'
+  DESC 'FusionDirectory - template mail field'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.10 NAME 'fdMailTemplateReadReceipt'
+  DESC 'FusionDirectory - template mail field'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.11 NAME 'fdMailTemplateSubject'
+  DESC 'FusionDirectory - template mail field'
+  EQUALITY octetStringMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
+
+# Attributes for mail template user reminder
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.12 NAME 'fdMTUserReminderForwardAlert'
+  DESC 'FusionDirectory - Forward alerts to manager'
+  EQUALITY booleanMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.13 NAME 'fdMTUserReminderForwardConfirmation'
+  DESC 'FusionDirectory - Forward postpone confirmations to manager'
+  EQUALITY booleanMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.14 NAME 'fdMTUserReminderAlertSubject'
+  DESC 'Fusion Directory - User reminder alert email subject'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.15 NAME 'fdMTUserReminderAlertBody'
+  DESC 'Fusion Directory - User reminder alert email body'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.16 NAME 'fdMTUserReminderConfirmationSubject'
+  DESC 'Fusion Directory - User reminder confirmation email subject'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.17 NAME 'fdMTUserReminderConfirmationBody'
+  DESC 'Fusion Directory - User reminder confirmation email body'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.18 NAME 'fdMTUserReminderForwardPpolicyAlert'
+  DESC 'FusionDirectory - Forward ppolicy alerts to manager'
+  EQUALITY booleanMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.19 NAME 'fdMTUserReminderPpolicyAlertSubject'
+  DESC 'Fusion Directory - User reminder ppolicy alert email subject'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.20 NAME 'fdMTUserReminderPpolicyAlertBody'
+  DESC 'Fusion Directory - User reminder ppolicy alert email body'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.21 NAME 'fdMTUserReminderExpirationSubject'
+  DESC 'Fusion Directory - User reminder expired email subject'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.22 NAME 'fdMTUserReminderExpirationBody'
+  DESC 'Fusion Directory - User reminder expired email body'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.23 NAME 'fdMTUserReminderForwardExpiration'
+  DESC 'FusionDirectory - User reminder, forward expiration emails to manager'
+  EQUALITY booleanMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+  SINGLE-VALUE )
+
+# Attributes for mail template invitations
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.24 NAME 'fdMTInvitationEmailSubject'
+  DESC 'FusionDirectory - Email Subject - Invitations'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.25 NAME 'fdMTInvitationEmailContent'
+  DESC 'FusionDirectory - Email Content - Invitation'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.88.1.26 NAME 'fdMTInvitationReplyTo'
+  DESC 'FusionDirectory - Email Address - Whom to Reply to invitations'
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
+##### Tasks Attributes #####
+
+attributetype ( 1.3.6.1.4.1.38414.89.1.1 NAME 'fdTasksMailObject'
+  DESC 'Fusion Directory - Tasks for mail template objects'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.38414.89.1.2 NAME 'fdTasksScheduleDate'
+	DESC 'Scheduling of the Task - required processed date'
+  EQUALITY caseExactIA5Match
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
+
+attributetype ( 1.3.6.1.4.1.38414.89.1.3 NAME 'fdTasksMailUsers'
+  DESC 'Fusion Directory - Tasks Mail Users Recipient'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
+
+attributetype ( 1.3.6.1.4.1.38414.89.1.4 NAME 'fdTasksStatus'
+  DESC 'Fusion Directory - Task Status'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
+
+attributetype ( 1.3.6.1.4.1.38414.89.1.5 NAME 'fdTasksEndDate'
+  DESC 'Fusion Directory - Task End Date'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
+
+attributetype ( 1.3.6.1.4.1.38414.89.1.6 NAME 'fdTasksCreationDate'
+  DESC 'Fusion Directory - Task Start Date'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
+
+attributetype ( 1.3.6.1.4.1.38414.89.1.7 NAME 'fdTasksEmailsFromDN'
+  DESC 'Fusion Directory - Emails derived from DN' 
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
+
+attributetype ( 1.3.6.1.4.1.38414.89.1.8 NAME 'fdTasksEmailSender'
+  DESC 'Fusion Directory - Emails derived from DN' 
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
+
+##### Classes #####
 
 objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.4 NAME 'gosaDepartment' SUP top AUXILIARY
   DESC 'GOsa - Class to mark Departments for GOsa'
@@ -130,3 +365,60 @@ objectclass ( 1.3.6.1.4.1.38414.62.2.2 NAME 'fdSubscriptionInformation' SUP top
   DESC 'FusionDirectory - Information about current subscription'
   MUST ( cn )
   MAY ( uid $ fdSubscriptionStartDate $ fdSubscriptionEndDate $ fdSubscriptionType $ fdSubscriptionContractId $ fdSubscriptionName ))
+  
+# Classes Macros Related
+
+objectclass ( 1.3.6.1.4.1.38414.90.2.1 NAME 'fdMacroConf'
+  DESC 'FusionDirectory Macro Configuration'
+  SUP top AUXILIARY
+  MUST ( cn )
+  MAY ( fdMacroRDN $ fdMacroMail $ fdMacroInvitations $ fdMacroUserRecovery $ fdMacroUserReminder ) )
+
+### Mail Template Related Object Class ###
+
+objectclass (1.3.6.1.4.1.38414.88.2.1 NAME 'fdMailTemplate'
+  DESC 'FusionDirectory - template mail object'
+  MUST ( cn $ fdMailTemplateBody $ fdMailTemplateSubject )
+  MAY ( fdMailTemplateSignature $ fdMailTemplateReadReceipt $ fdMailTemplateAttachment  ) )
+
+objectclass (1.3.6.1.4.1.38414.88.2.2 NAME 'fdMailTemplateUserRecovery'
+  DESC 'FusionDirectory - template mail object Recovery'
+  SUP top AUXILIARY
+  MUST ( cn )
+  MAY ( fdMTPasswordRecoveryMailSubject $ fdMTPasswordRecoveryMailBody $ fdMTPasswordRecoveryMail2Subject $ fdMTPasswordRecoveryMail2Body) )
+
+objectclass ( 1.3.6.1.4.1.38414.88.2.3 NAME 'fdMailTemplateConf'
+  DESC 'FusionDirectory Mail Template Configuration'
+  SUP top AUXILIARY
+  MUST ( cn )
+  MAY ( fdMailTemplateRDN ) )
+
+objectclass ( 1.3.6.1.4.1.38414.88.2.4 NAME 'fdMailTemplateUserReminder'
+  DESC 'FusionDirectory mail template user-reminder'
+  SUP top AUXILIARY
+  MUST ( cn $ fdMTUserReminderForwardConfirmation $ fdMTUserReminderForwardAlert)
+  MAY (
+  fdMTUserReminderConfirmationSubject $ fdMTUserReminderConfirmationBody $
+  fdMTUserReminderAlertSubject        $ fdMTUserReminderAlertBody $
+  fdMTUserReminderPpolicyAlertSubject $ fdMTUserReminderPpolicyAlertBody $
+  fdMTUserReminderForwardPpolicyAlert $ fdMTUserReminderExpirationSubject $ 
+  fdMTUserReminderExpirationBody $ fdMTUserReminderForwardExpiration) )
+
+objectclass ( 1.3.6.1.4.1.38414.88.2.5 NAME 'fdMailTemplateInvitations'
+  DESC 'FusionDirectory mail template Invitations'
+  SUP top AUXILIARY
+  MUST ( cn $ fdMTInvitationEmailSubject $ fdMTInvitationEmailContent)
+  MAY ( fdMTInvitationReplyTo ) )
+
+### Tasks Related Object Class ###
+
+objectclass (1.3.6.1.4.1.38414.89.2.1 NAME 'fdTasks'
+  DESC 'FusionDirectory - Tasks objects'
+  MUST ( cn $ fdTasksStatus $ fdTasksCreationDate )
+  MAY ( fdTasksScheduleDate $ fdTasksEndDate) )
+
+objectclass (1.3.6.1.4.1.38414.89.2.2 NAME 'fdTasksMail'
+  DESC 'FusionDirectory - Tasks objects Mail'
+  SUP top AUXILIARY
+  MUST ( fdTasksMailObject $ fdTasksEmailSender ) 
+  MAY ( fdTasksMailUsers $ fdTasksEmailsFromDN ) )
diff --git a/plugins/addons/mailtemplate/class_mailTemplate.inc b/plugins/addons/mailtemplate/class_mailTemplate.inc
new file mode 100644
index 0000000000000000000000000000000000000000..7010fddf40c6c70d4e67da8b3ba1aaddde4fed1e
--- /dev/null
+++ b/plugins/addons/mailtemplate/class_mailTemplate.inc
@@ -0,0 +1,88 @@
+<?php
+/*
+  This code is part of FusionDirectory (http://www.fusiondirectory.org/)
+
+  Copyright (C) 2012-2022 FusionDirectory
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+class mailTemplate extends simplePlugin
+{
+  var $displayHeader = FALSE;
+
+  public static function plInfo (): array
+  {
+    return [
+      'plShortName'   => _('Mail Template'),
+      'plDescription' => _('Mail Tempmlate'),
+      'plObjectClass' => ['fdMailTemplate'],
+      'plFilter'      => '(objectClass=fdMailTemplate)',
+      'plObjectType'  => ['mailTemplate' => [
+        'name'        => _('Mail Template'),
+        'ou'          => get_ou('mailTemplateRDN'),
+        'icon'        => 'geticon.php?context=applications&icon=dsa&size=16',
+      ]],
+      'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo())
+    ];
+  }
+
+  static function getAttributesInfo (): array
+  {
+    global $config;
+    return [
+      // Attributes are grouped by section
+      'mailTemplate' => [
+        'name'  => _('Mail Object'),
+        'attrs' => [
+        new StringAttribute(
+          _('Mail Template Name'), _('Mail Template Name'),
+          'cn', TRUE
+        ),
+        new StringAttribute(
+          _('Mail Subject'), _('Mail Subject'),
+          'fdMailTemplateSubject', TRUE
+        ),
+        new TextAreaAttribute(
+          _('Mail Template Body'), _('Text to be sent to recipient'),
+          'fdMailTemplateBody', TRUE
+        ),
+        new TextAreaAttribute(
+          _('Mail Signature'), _('Mail Signature'),
+          'fdMailTemplateSignature', FALSE
+        ),
+        new FileDownloadAttribute(
+          _('Attachment'), _('Import a file for this e-mail'),
+          'fdMailTemplateAttachment', FALSE, '', TRUE
+        ),
+        new BooleanAttribute(
+          _('Read Receipt'),
+          _('Read Receipt'),
+          'fdMailTemplateReadReceipt', FALSE
+        ),
+        ]
+      ],
+    ];
+  }
+
+
+  function __construct ($dn = NULL, $object = NULL, $parent = NULL, $mainTab = FALSE)
+  {
+    global $config;
+    parent::__construct($dn, $object, $parent, $mainTab);
+
+  }
+
+}
diff --git a/plugins/addons/mailtemplate/class_mailTemplateInvitations.inc b/plugins/addons/mailtemplate/class_mailTemplateInvitations.inc
new file mode 100644
index 0000000000000000000000000000000000000000..f33c3fac7f2398d5c25a08288152ce771f32b39e
--- /dev/null
+++ b/plugins/addons/mailtemplate/class_mailTemplateInvitations.inc
@@ -0,0 +1,72 @@
+<?php
+/*
+  This code is part of FusionDirectory (http://www.fusiondirectory.org)
+
+  Copyright (C) 2018-2022 FusionDirectory
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+*/
+
+class mailTemplateInvitations extends simplePlugin
+{
+  protected $displayHeader = TRUE;
+
+  static function plInfo (): array
+  {
+    return [
+      'plShortName'   => _('Mail Template Invitations'),
+      'plDescription' => _('Mail Template Invitations'),
+      'plIcon'        => 'geticon.php?context=applications&icon=supann&size=48',
+      'plSmallIcon'   => 'geticon.php?context=applications&icon=supann-status&size=16',
+      'plPriority'    => 33,
+      'plObjectClass' => ['fdMailTemplateInvitations'],
+      'plFilter'      => '(objectClass=fdMailTemplateInvitations)',
+      'plObjectType'  => ['mailTemplate'],
+      'plConflicts'   => ['mailTemplateUserReminder', 'mailTemplateUserRecovery'],
+      'plProvidedAcls'  => parent::generatePlProvidedAcls(static::getAttributesInfo())
+    ];
+  }
+
+  static function getAttributesInfo (): array
+  {
+    return  [
+      'main' => [
+        'name'  => _('Invitation'),
+        'attrs' => [
+          new StringAttribute(
+            _('Email subject'), _('Subject of the email sent for this invitation'),
+            'fdMTInvitationEmailSubject', TRUE
+          ),
+          new TextAreaAttribute(
+            _('Email content'), _('Content of the email sent for this invitation'),
+            'fdMTInvitationEmailContent', TRUE,
+            'A default Email here - was previously fetched by default configuration - %token%'
+          ),
+         new StringAttribute(
+            _('Reply to'), _('Email address set as "Reply to" in the sent emails'),
+            'fdMTInvitationReplyTo', FALSE
+          ),
+        ]
+      ],
+    ];
+  }
+
+  function __construct ($dn = NULL, $object = NULL, $parent = NULL, $mainTab = FALSE)
+  {
+    global $config;
+    parent::__construct($dn, $object, $parent, $mainTab);
+  }
+
+}
diff --git a/plugins/addons/mailtemplate/class_mailTemplateUserRecovery.inc b/plugins/addons/mailtemplate/class_mailTemplateUserRecovery.inc
new file mode 100644
index 0000000000000000000000000000000000000000..efa76ec0f88ea23495bbdf15afb7c288da427c59
--- /dev/null
+++ b/plugins/addons/mailtemplate/class_mailTemplateUserRecovery.inc
@@ -0,0 +1,111 @@
+<?php
+/*
+  This code is part of FusionDirectory (http://www.fusiondirectory.org)
+
+  Copyright (C) 2018-2022 FusionDirectory
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+*/
+
+class mailTemplateUserRecovery extends simplePlugin
+{
+  protected $displayHeader = TRUE;
+
+  static function plInfo (): array
+  {
+    return [
+      'plShortName'   => _('Mail Template User Recovery'),
+      'plDescription' => _('Mail Template User Recovery'),
+      'plIcon'        => 'geticon.php?context=applications&icon=supann&size=48',
+      'plSmallIcon'   => 'geticon.php?context=applications&icon=supann-status&size=16',
+      'plPriority'    => 31,
+      'plObjectClass' => ['fdMailTemplateUserRecovery'],
+      'plFilter'      => '(objectClass=fdMailTemplateUserRecovery)',
+      'plObjectType'  => ['mailTemplate'],
+      'plConflicts'   => ['mailTemplateUserReminder', 'mailTemplateInvitations'],
+      'plProvidedAcls'  => parent::generatePlProvidedAcls(static::getAttributesInfo())
+    ];
+  }
+
+  static function getAttributesInfo (): array
+  {
+    return  [
+      'first_email' => [
+        'name' => _('First email'),
+        'attrs' => [
+          new StringAttribute(
+            _('Subject'),
+            _('Subject of the first email'),
+            'fdMTPasswordRecoveryMailSubject',
+            TRUE,
+            _("[FusionDirectory] Password recovery link")
+          ),
+          new TextAreaAttribute(
+            _('Body'),
+            _('Body of the first email, sent when the user ask for a new password. Use %login% for the login and %link% for the recovery link.'),
+            'fdMTPasswordRecoveryMailBody',
+            TRUE,
+            _("Hello,\n\nHere is your information: \n - Login : %login%\n - Link : %link%\n\nThis link is only valid for 10 minutes.")
+          )
+        ]
+      ],
+      'second_email' => [
+        'name' => _('Second email'),
+        'attrs' => [
+          new StringAttribute(
+            _('Subject'),
+            _('Subject of the second email'),
+            'fdMTPasswordRecoveryMail2Subject',
+            TRUE,
+            _("[FusionDirectory] Password recovery successful")
+          ),
+          new TextAreaAttribute(
+            _('Body'),
+            _('Body of the second email, sent to confirm the password has been changed. Use %login% for the user login.'),
+            'fdMTPasswordRecoveryMail2Body',
+            TRUE,
+           _("Hello,\n\nYour password has been changed.\nYour login is still %login%.")
+          )
+        ]
+      ]
+    ];
+  }
+
+  function __construct ($dn = NULL, $object = NULL, $parent = NULL, $mainTab = FALSE)
+  {
+    global $config;
+    parent::__construct($dn, $object, $parent, $mainTab);
+  }
+
+  protected function shouldSave (): bool
+  {
+    global $config;
+
+    $ldap = $config->get_ldap_link();
+    $ldap->cd($config->current['BASE']);
+    $ldap->search('(&(objectClass=fdMailTemplateUserRecovery))', ['cn','fdMTPasswordRecoveryMailSubject']);
+    while ($attrs = $ldap->fetch()) {
+      if (isset($this->attrs['fdMTPasswordRecoveryMailSubject'])) {
+        $error = new FusionDirectoryError(htmlescape(sprintf(_('User Recovery Mail Template Is Already Existing!'))));
+        $error->display();
+
+        return FALSE;
+      }
+    }
+
+    return TRUE;
+  }
+
+}
diff --git a/plugins/addons/mailtemplate/class_mailTemplateUserReminder.inc b/plugins/addons/mailtemplate/class_mailTemplateUserReminder.inc
new file mode 100644
index 0000000000000000000000000000000000000000..455d9bc7bf3b6f77a5e475f1d2ae1aae05f31874
--- /dev/null
+++ b/plugins/addons/mailtemplate/class_mailTemplateUserReminder.inc
@@ -0,0 +1,173 @@
+<?php
+
+/*
+  This code is part of FusionDirectory (http://www.fusiondirectory.org)
+
+  Copyright (C) 2018-2022 FusionDirectory
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+*/
+
+class mailTemplateUserReminder extends simplePlugin
+{
+  protected $displayHeader = TRUE;
+
+  static function plInfo (): array
+  {
+    return [
+      'plShortName'   => _('Mail Template User Reminder'),
+      'plDescription' => _('Mail Template User Reminder'),
+      'plIcon'        => 'geticon.php?context=applications&icon=supann&size=48',
+      'plSmallIcon'   => 'geticon.php?context=applications&icon=supann-status&size=16',
+      'plPriority'    => 32,
+      'plObjectClass' => ['fdMailTemplateUserReminder'],
+      'plFilter'      => '(objectClass=fdMailTemplateUserReminder)',
+      'plObjectType'  => ['mailTemplate'],
+      'plConflicts'   => ['mailTemplateUserRecovery', 'mailTemplateInvitations'],
+      'plProvidedAcls'  => parent::generatePlProvidedAcls(static::getAttributesInfo())
+    ];
+  }
+
+  static function getAttributesInfo (): array
+  {
+    return [
+      'emailppolicy' => [
+        'name'  => _('Ppolicy email settings'),
+        'attrs' => [
+          new BooleanAttribute(
+            _('Forward alerts to the manager'), _('Forward ppolicy alerts to the manager'),
+            'fdMTUserReminderForwardPpolicyAlert', FALSE,
+            TRUE
+          ),
+          new StringAttribute(
+            _('Subject'), _('Subject of the ppolicy alert email'),
+            'fdMTUserReminderPpolicyAlertSubject', FALSE,
+            _('[FusionDirectory] Your password is about to expire')
+          ),
+          new TextAreaAttribute(
+            _('Body (%s are cn and login)'),
+            _('Body of the ppolicy alert email, sent when the user password is about to expire.'),
+            'fdMTUserReminderPpolicyAlertBody', FALSE,
+            _('Dear %sn%,'."\n".
+              'your password for account %login% is about to expire, please change your password: '."\n".
+              'https://'.$_SERVER['SERVER_NAME'].
+              (($_SERVER['SERVER_PORT'] != '80') ? ':'.$_SERVER['SERVER_PORT'] : '').
+              (empty($_SERVER['REQUEST_URI']) ? $_SERVER['PATH_INFO'] : $_SERVER['REQUEST_URI']).
+              "\n")
+          )
+        ]
+      ],
+      'alert_mail_reminder' => [
+        'name'  => _('Alert email settings'),
+        'attrs' => [
+          new BooleanAttribute(
+            _('Forward alerts to the manager'), _('Forward alerts to the manager'),
+            'fdMTUserReminderForwardAlert', TRUE,
+            TRUE
+          ),
+          new StringAttribute(
+            _('Subject'), _('Subject of the alert email'),
+            'fdMTUserReminderAlertSubject', FALSE,
+            _('[FusionDirectory] Your account is about to expire')
+          ),
+          new TextAreaAttribute(
+            _('Body'),
+            _('Body of the alert email, sent when the user is about to expire.'),
+            'fdMTUserReminderAlertBody', FALSE,
+            _('Dear %sn%,'."\n".
+              'your account %login% is about to expire, please use this link to avoid this: '."\n".
+              'https://'.$_SERVER['SERVER_NAME'].
+              (($_SERVER['SERVER_PORT'] != '80') ? ':'.$_SERVER['SERVER_PORT'] : '').
+              (empty($_SERVER['REQUEST_URI']) ? $_SERVER['PATH_INFO'] : $_SERVER['REQUEST_URI']).
+              '/expired_postpone.php?uid=%login%&token=%token%'."\n")
+          )
+        ]
+      ],
+      'alert_mail_confirmation' => [
+        'name'  => _('Confirmation email settings'),
+        'attrs' => [
+          new BooleanAttribute(
+            _('Forward confirmation to the manager'), _('Forward account extension confirmation to the manager'),
+            'fdMTUserReminderForwardConfirmation', TRUE,
+            TRUE
+          ),
+          new StringAttribute(
+            _('Subject'), _('Subject of the confirmation email'),
+            'fdMTUserReminderConfirmationSubject', FALSE,
+            _('[FusionDirectory] Your account expiration has been postponed')
+          ),
+          new TextAreaAttribute(
+            _('Body'),
+            _('Body of the confirmation email, sent when the user has postponed expiration.'),
+            'fdMTUserReminderConfirmationBody', FALSE,
+            _('Dear %sn%,'."\n".' your account %login% expiration has been successfully postponed.'."\n")
+          ),
+        ]
+      ],
+      'alert_mail_expiration' => [
+        'name'  => _('Expiration email settings'),
+        'attrs' => [
+          new BooleanAttribute(
+            _('Forward to the manager'), _('Forward account expiration to the manager'),
+            'fdMTUserReminderForwardExpiration', TRUE,
+            TRUE
+          ),
+          new StringAttribute(
+            _('Subject'), _('Subject of the expiration email'),
+            'fdMTUserReminderExpirationSubject', FALSE,
+            _('[FusionDirectory] Your account has expired')
+          ),
+          new TextAreaAttribute(
+            _('Body (%s are cn and login)'),
+            _('Body of the expiration email, sent when the user has expired.'),
+            'fdMTUserReminderExpirationBody', FALSE,
+            _('Dear %sn%,'."\n".' your account %login% has expired.'."\n")
+          ),
+        ]
+      ],
+    ];
+  }
+
+  function __construct (string $dn = NULL, $object = NULL, $parent = NULL, bool $mainTab = FALSE, array $attributesInfo = NULL)
+  {
+    parent::__construct($dn, $object, $parent, $mainTab, $attributesInfo);
+
+    if (!class_available('ppolicy')) {
+      $this->attributesAccess['fdMTUserReminderForwardPpolicyAlert']->setDisabled(TRUE);
+      $this->attributesAccess['fdMTUserReminderPpolicyAlertSubject']->setDisabled(TRUE);
+      $this->attributesAccess['fdMTUserReminderPpolicyAlertBody']->setDisabled(TRUE);
+    }
+  }
+
+  protected function shouldSave (): bool
+  {
+    global $config;
+
+    $ldap = $config->get_ldap_link();
+    $ldap->cd($config->current['BASE']);
+    $ldap->search('(&(objectClass=fdMailTemplateUserReminder))', ['cn','fdMTUserReminderAlertSubject']);
+    while ($attrs = $ldap->fetch()) {
+      if (isset($this->attrs['fdMTUserReminderAlertSubject'])) {
+        $error = new FusionDirectoryError(htmlescape(sprintf(_('User Reminder Mail Template Is Already Existing!'))));
+        $error->display();
+
+        return FALSE;
+      }
+    }
+
+    return TRUE;
+  }
+}
+
diff --git a/plugins/addons/tasks/class_tasks.inc b/plugins/addons/tasks/class_tasks.inc
new file mode 100644
index 0000000000000000000000000000000000000000..4c3d4849e0af0509388db7ecc4a875843fc75964
--- /dev/null
+++ b/plugins/addons/tasks/class_tasks.inc
@@ -0,0 +1,73 @@
+<?php
+/*
+  This code is part of FusionDirectory (http://www.fusiondirectory.org/)
+
+  Copyright (C) 2012-2022 FusionDirectory
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+class tasks extends simplePlugin
+{
+  protected $displayHeader = FALSE;
+
+  static function plInfo (): array
+  {
+    return [
+      'plShortName'   => _('Tasks'),
+      'plDescription' => _('Tasks'),
+      'plObjectClass' => ['fdTasks'],
+      'plFilter'      => '(objectClass=fdTasks)',
+      'plPriority'    => 41,
+      'plObjectType'  => ['tasks' => [
+        'name'        => _('Tasks'),
+        'ou'          => get_ou('tasksRDN'),
+        'icon'        => 'geticon.php?context=applications&icon=dsa&size=16',
+      ]],
+      'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo())
+    ];
+  }
+
+  static function getAttributesInfo (): array
+  {
+    return [
+      // Attributes are grouped by section
+      'tasks' => [
+        'name'  => _('Tasks Generic'),
+        'attrs' => [
+        new StringAttribute(
+          _('Task Name'), _('Name for this task'),
+          'cn', TRUE
+        ),
+         new DateTimeAttribute(
+           _('Schedule'), '',
+           'fdTasksScheduleDate', FALSE
+           ),
+        new HiddenAttribute('fdTasksStatus', TRUE, '1', '', 'Status', 'Status of the task'),
+        new HiddenAttribute('fdTasksCreationDate', TRUE, date("Y-m-d h:i:sa"), '', 'StartDate', 'Start Date And Time Of A Task'),
+        ]
+      ],
+    ];
+  }
+
+
+  function __construct ($dn = NULL, $object = NULL, $parent = NULL, $mainTab = FALSE)
+  {
+    global $config;
+    parent::__construct($dn, $object, $parent, $mainTab);
+
+  }
+
+}
diff --git a/plugins/addons/tasks/class_tasksMail.inc b/plugins/addons/tasks/class_tasksMail.inc
new file mode 100644
index 0000000000000000000000000000000000000000..8c05d032ed6d94e2eb2084824afc28291af37c8e
--- /dev/null
+++ b/plugins/addons/tasks/class_tasksMail.inc
@@ -0,0 +1,144 @@
+<?php
+/*
+  This code is part of FusionDirectory (http://www.fusiondirectory.org)
+
+  Copyright (C) 2018-2022 FusionDirectory
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+*/
+
+class tasksMail extends simplePlugin
+{
+  protected $displayHeader = TRUE;
+
+  static function plInfo (): array
+  {
+    return [
+      'plShortName'   => _('Tasks Mail'),
+      'plDescription' => _('Tasks Mail Object'),
+      'plIcon'        => 'geticon.php?context=applications&icon=supann&size=48',
+      'plSmallIcon'   => 'geticon.php?context=applications&icon=supann-status&size=16',
+      'plPriority'    => 42,
+      'plObjectClass' => ['fdTasksMail'],
+      'plFilter'      => '(objectClass=fdTasksMail)',
+      'plObjectType'  => ['tasks'],
+      'plConflicts'   => [''],
+      'plProvidedAcls'  => parent::generatePlProvidedAcls(static::getAttributesInfo()),
+      'plForeignKeys'  => [
+        'fdTasksMailUsers' => [
+          ['user','dn','fdTasksMailUsers=%oldvalue%','*']
+        ]
+      ],
+    ];
+  }
+
+  static function getAttributesInfo (): array
+  {
+    return [
+      // Attributes are grouped by section
+      'taskMail' => [
+        'name'  => _('Task Mail Object'),
+        'attrs' => [
+          new SelectAttribute(
+            _('Mail Template'), _('Mail Template Object Selection'),
+            'fdTasksMailObject', FALSE
+          ),
+          new HiddenArrayAttribute('fdTasksEmailsFromDN', FALSE, ''),
+          ]
+      ],
+      'From Component' => [
+        'name'  => _('Sender Address'),
+        'attrs' => [
+           new MailAttribute(
+             _('Sender email address'),
+             _('Email address from which mails will be sent'), 'fdTasksEmailSender', TRUE, 'to.be@chang.ed'),
+        ]
+      ],
+      'UserGroupSelection' => [
+        'name'  => _('Recipients Users and/or Groups'),
+        'attrs' => [
+          new UsersGroupsRolesAttribute(
+            _('Members'), _('Users or groups to assign to this task.'),
+            'fdTasksMailUsers', TRUE
+          ),
+        ],
+      ]
+    ];
+  }
+
+  function __construct ($dn = NULL, $object = NULL, $parent = NULL, $mainTab = FALSE)
+  {
+    global $config;
+    parent::__construct($dn, $object, $parent, $mainTab);
+
+    //Search within LDAP and retrieve all mail objects for current base.
+    $ldap = $config->get_ldap_link();
+    $ldap->cd($config->current['BASE']);
+    $ldap->search('(&(objectClass=fdMailTemplate))', ['cn']);
+    $tmpSearch = [];
+    while ($attrs = $ldap->fetch()) {
+      $tmpSearch[$attrs['cn'][0]] = $attrs['cn'][0];
+    }
+    asort($tmpSearch);
+    $this->attributesAccess['fdTasksMailObject']->setChoices(array_keys($tmpSearch), array_values($tmpSearch));
+
+  }
+
+  /*
+   * Must return bool to be compliant with the interface
+   * Allows attributes values based on others to be updated before save.
+   */
+  public function update (): bool
+  {
+    parent::update();
+    $this->setEmailsFromSelectedDN();
+
+    return TRUE;
+  }
+
+   /*
+   * Populate the fdTasksEmailsFromDN attribute with related mails addresses.
+   */
+  public function setEmailsFromSelectedDN () : void
+  {
+    global $config;
+
+    $ldap = $config->get_ldap_link();
+    $attributeValue = $this->attributesAccess['fdTasksMailUsers']->getValue();
+
+    if ($attributeValue && !empty($attributeValue)) {
+
+      $mailList = [];
+
+      foreach ($this->attributesAccess['fdTasksMailUsers']->getValue() as $dn) {
+
+        $ldap->cd($dn);
+        $filter = "(objectClass=gosaMailAccount)";
+        $attrs = ["mail"];
+
+        $ldap->search($filter, $attrs);
+        $info = $ldap->fetch();
+
+        // To be developped properly to take Supann and other Mail attributes into consideration.
+        if (!empty($info["mail"][0]) && isset($info["mail"][0])) {
+          $mailList[] = $info["mail"][0];
+        }
+      }
+      $this->attributesAccess['fdTasksEmailsFromDN']->setValue(array_values($mailList));
+      print_r($mailList);
+    }
+  }
+
+}
diff --git a/plugins/admin/mailtemplate/class_mailTemplateManagement.inc b/plugins/admin/mailtemplate/class_mailTemplateManagement.inc
new file mode 100644
index 0000000000000000000000000000000000000000..f211ee33e68752f8e80ee13fe67b105787ee904d
--- /dev/null
+++ b/plugins/admin/mailtemplate/class_mailTemplateManagement.inc
@@ -0,0 +1,159 @@
+<?php
+
+/*
+  This code is part of FusionDirectory (http://www.fusiondirectory.org/)
+  Copyright (C) 2011-2022  FusionDirectory
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+class mailTemplateManagement extends management
+{
+
+  public static $columns = [
+    ['ObjectTypeColumn', []],
+    ['LinkColumn',       ['attributes' => 'cn', 'label' => 'Template Name']],
+    ['ActionsColumn',    ['label' => 'Actions']],
+  ];
+
+  static function plInfo (): array
+  {
+    return [
+      'plShortName'   => _('Mail Template'),
+      'plTitle'       => _('Mail Template'),
+      'plDescription' => _('Manages mails templates'),
+      'plIcon'        => 'geticon.php?context=types&icon=user&size=48',
+      'plManages'     => ['mailTemplate'],
+      'plSection'     => 'conf',
+      'plPriority'    => 30,
+      'plProvidedAcls' => [],
+    ];
+  }
+
+  protected function configureActions ()
+  {
+    global $config;
+
+    $createMenu = [];
+
+    foreach ($this->objectTypes as $type) {
+      $infos  = objects::infos($type);
+      $img    = 'geticon.php?context=actions&icon=document-new&size=16';
+      if (isset($infos['icon'])) {
+        $img = $infos['icon'];
+      }
+      $createMenu[] = new Action(
+        'new_'.$type, $infos['name'], $img,
+        '0', 'newEntry',
+        [$infos['aclCategory'].'/'.$infos['mainTab'].'/c']
+      );
+    }
+
+    $this->registerAction(
+     new SubMenuAction(
+       'new', _('Create'), 'geticon.php?context=actions&icon=document-new&size=16',
+       $createMenu
+     )
+    );
+
+    // Add export actions
+    $exportMenu = [];
+    foreach ($this->exporters as $action => $exporter) {
+      $exportMenu[] = new Action(
+        $action, $exporter['label'], $exporter['image'],
+        '0', 'export'
+      );
+    }
+    $this->registerAction(
+     new SubMenuAction(
+       'export', _('Export list'), 'geticon.php?context=actions&icon=document-export&size=16',
+       $exportMenu
+     )
+    );
+
+    $this->registerAction(
+     new Action(
+       'edit', _('Edit'), 'geticon.php?context=actions&icon=document-edit&size=16',
+       '+', 'editEntry'
+     )
+    );
+    $this->actions['edit']->setSeparator(TRUE);
+
+    if (!$this->skipCpHandler) {
+      $this->registerAction(
+        new Action(
+          'cut', _('Cut'), 'geticon.php?context=actions&icon=edit-cut&size=16',
+          '+', 'copyPasteHandler',
+          ['dr']
+        )
+      );
+      $this->registerAction(
+        new Action(
+          'copy', _('Copy'), 'geticon.php?context=actions&icon=edit-copy&size=16',
+          '+', 'copyPasteHandler',
+          ['r']
+        )
+      );
+      $this->registerAction(
+        new Action(
+          'paste', _('Paste'), 'geticon.php?context=actions&icon=edit-paste&size=16',
+          '0', 'copyPasteHandler',
+          ['w']
+        )
+      );
+      $this->actions['paste']->setEnableFunction([$this, 'enablePaste']);
+    }
+
+    $this->registerAction(
+     new Action(
+       'remove', _('Remove'), 'geticon.php?context=actions&icon=edit-delete&size=16',
+       '+', 'removeRequested',
+       ['d']
+     )
+    );
+
+    if (!static::$skipSnapshots && ($config->get_cfg_value('enableSnapshots') == 'TRUE')) {
+      $this->registerAction(
+        new Action(
+          'snapshot', _('Create snapshot'), 'geticon.php?context=actions&icon=snapshot&size=16',
+          '1', 'createSnapshotDialog',
+          ['/SnapshotHandler/c']
+        )
+      );
+      $this->registerAction(
+        new Action(
+          'restore', _('Restore snapshot'), 'geticon.php?context=actions&icon=document-restore&size=16',
+          '*', 'restoreSnapshotDialog',
+          ['w', '/SnapshotHandler/r']
+        )
+      );
+      $this->actions['snapshot']->setSeparator(TRUE);
+      $this->actions['restore']->setEnableFunction([$this, 'enableSnapshotRestore']);
+    }
+
+
+    /* Actions from footer are not in any menus and do not need a label */
+    $this->registerAction(new HiddenAction('apply',           'applyChanges'));
+    $this->registerAction(new HiddenAction('save',            'saveChanges'));
+    $this->registerAction(new HiddenAction('cancel',          'cancelEdit'));
+    $this->registerAction(new HiddenAction('cancelDelete',    'cancelEdit'));
+    $this->registerAction(new HiddenAction('removeConfirmed', 'removeConfirmed'));
+    if (!$this->skipConfiguration) {
+      $this->registerAction(new HiddenAction('configure', 'configureDialog'));
+    }
+  }
+
+
+}
diff --git a/plugins/admin/tasks/class_tasksColumn.inc b/plugins/admin/tasks/class_tasksColumn.inc
new file mode 100644
index 0000000000000000000000000000000000000000..d3009a144a3699c9a87d03fe6ef5f03da1335f41
--- /dev/null
+++ b/plugins/admin/tasks/class_tasksColumn.inc
@@ -0,0 +1,68 @@
+<?php
+/*
+  This code is part of FusionDirectory (http://www.fusiondirectory.org/)
+
+  Copyright (C) 2011-2022  FusionDirectory
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+/*!
+ * \brief Column rendering Tasks columns
+ */
+class TasksColumn extends Column
+{
+  // Keep in mind this method is being called for each value.
+  protected function renderSingleValue (ListingEntry $entry, string $value): string
+  {
+    if ($value == '') {
+      return '&nbsp;';
+    } else {
+      switch ($this->attributes[0]) {
+        case 'fdTasksStatus':
+          return static::filterStatus(intval($value));
+
+        case 'fdTasksMailObject':
+          return "Mail Object";
+
+        case 'fdTasksScheduleDate':
+          // Z is added to value to match ldap generaliseztime
+          $datetime = (new LdapGeneralizedTime)->fromString($value.'Z');
+          $result = $datetime->format('Y-m-d H:i:s');
+          return $result;
+
+        default:
+          return parent::renderSingleValue($entry, $value);
+      }
+    }
+  }
+
+  static function filterStatus (int $status = NULL): string
+  {
+    // A call towards a status map would be interesting here.
+    switch ($status) {
+      case 1 :
+        return "Created";
+
+      case 2 :
+        return "Processed";
+
+      default :
+        return "Error Encountered";
+
+    }
+  }
+
+}
diff --git a/plugins/admin/tasks/class_tasksManagement.inc b/plugins/admin/tasks/class_tasksManagement.inc
new file mode 100644
index 0000000000000000000000000000000000000000..b59b90fcfa9917b90d7655baa218a8144dacfff4
--- /dev/null
+++ b/plugins/admin/tasks/class_tasksManagement.inc
@@ -0,0 +1,60 @@
+<?php
+/*
+  This code is part of FusionDirectory (http://www.fusiondirectory.org/)
+  Copyright (C) 2011-2022  FusionDirectory
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+class tasksManagement extends management
+{
+
+  /*
+  *  LinkColumn exists by class collumn
+  *  TasksColumn is a new class for Tasks bassed on argonaut column definition
+  */
+  public static $columns = [
+    ['LinkColumn',  ['attributes' => 'cn', 'label' => 'Tasks']],
+    //below fdTasksMailObject must be change to have a type defined within task creation (new ldap attributes ?hidden)
+    ['TasksColumn', ['attributes' => 'fdTasksMailObject', 'label' => 'Types']],
+    ['TasksColumn', ['attributes' => 'fdTasksScheduleDate', 'label' => 'Schedule']],
+    //below fdTasksStatus attribute needs to be calculated based on the type of the task.
+    ['TasksColumn', ['attributes' => 'fdTasksStatus', 'label' => 'Status']],
+    ['Column', ['attributes' => 'fdTasksCreationDate', 'label' => 'Creation Date']],
+    ['ActionsColumn', ['label' => 'Actions']],
+  ];
+
+  static function plInfo ()
+  {
+    return [
+      'plShortName'   => _('Tasks'),
+      'plDescription' => _('Provide a mechanism to create and manage tasks'),
+      'plTitle'       => _('Tasks'),
+      'plIcon'        => 'geticon.php?context=applications&icon=argonaut&size=48',
+      'plSection'     => 'conf',
+      'plPriority'    => 40,
+      'plManages'     => ['tasks'],
+      'plProvidedAcls' => [],
+    ];
+  }
+
+  protected function setUpListing ()
+  {
+    /* Set baseMode to FALSE */
+    $this->listing  = new managementListing($this, FALSE);
+
+  }
+
+}
diff --git a/plugins/config/class_macroConfig.inc b/plugins/config/class_macroConfig.inc
new file mode 100644
index 0000000000000000000000000000000000000000..656647444907a250027c2388b5c3c28793eced80
--- /dev/null
+++ b/plugins/config/class_macroConfig.inc
@@ -0,0 +1,100 @@
+<?php
+/*
+  This code is part of FusionDirectory (http://www.fusiondirectory.org/)
+  Copyright (C) 2012-2022 FusionDirectory
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+class macrosConfig extends simplePlugin
+{
+  static function plInfo (): array
+  {
+    return [
+      'plShortName'     => _('Macro'),
+      'plDescription'   => _('FusionDirectory macro configuration tool'),
+      'plObjectClass'   => ['fdMacroConf'],
+      'plObjectType'    => ['configuration'],
+
+      'plProvidedAcls'  => parent::generatePlProvidedAcls(static::getAttributesInfo())
+    ];
+  }
+
+  static function getAttributesInfo (): array
+  {
+    return [
+      'macrosConf' => [
+        'name'  => _('Macros'),
+        'attrs' => [
+          new StringAttribute(
+            _('Macros RDN'), _('Branch in which Directory Base, Macro will be stored'),
+            'fdMacroRDN', TRUE,
+            'ou=macroConfig'
+          ),
+        ]
+      ],
+      'Macro' => [
+        'name'  => _('Mail Object'),
+        'attrs' => [
+         new SetAttribute(
+            new CompositeAttribute(
+              _('Macro definitions'),
+              'fdMacroMail',
+              [
+                new SelectAttribute(
+                  '', _('Macro type'),
+                  'fdMacroTypes', TRUE
+                ),
+               new StringAttribute(
+                  _('Macros User Definition'), _('Macro that will be used'),
+                  'fdMacroOption', TRUE, ''
+                ),
+              ],
+              '/^{(.+)}(.*)$/',
+              '{%s}%s',
+              '',
+              _('Macro settings (wrap the macro with % sign)')
+            )
+          ),
+        ]
+      ],
+    ];
+  }
+
+  function __construct ($dn = NULL, $object = NULL, $parent = NULL, $mainTab = FALSE)
+  {
+    global $config;
+
+    parent::__construct($dn, $object, $parent, $mainTab);
+
+    /* supannTelephonePrive */
+    $MacroTypes = [
+      'LOGIN'    => _('Login'),
+      'UID'   => _('UID'),
+      'TOKEN'     => _('Token'),
+    ];
+    foreach ($config->get_cfg_value('MacroTypes', []) as $line) {
+      list($type,$label) = explode(':', $line, 2);
+      $MacroTypes[$type] = $label;
+    }
+    $this->attributesAccess['fdMacroMail']->attribute->attributes[0]->setChoices(
+      array_keys($MacroTypes),
+      array_values($MacroTypes)
+    );
+
+  }
+
+}
+
diff --git a/plugins/config/mailtemplate/class_mailTemplateConfig.inc b/plugins/config/mailtemplate/class_mailTemplateConfig.inc
new file mode 100644
index 0000000000000000000000000000000000000000..a1a2e8957ed6635ba889de9367e8a2fa09ef0f8f
--- /dev/null
+++ b/plugins/config/mailtemplate/class_mailTemplateConfig.inc
@@ -0,0 +1,52 @@
+<?php
+/*
+  This code is part of FusionDirectory (http://www.fusiondirectory.org/)
+  Copyright (C) 2012-2022 FusionDirectory
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+class mailTemplateConfig extends multiPluginSection
+{
+  static function plInfo (): array
+  {
+    return [
+      'plShortName'     => _('mail template configuration'),
+      'plDescription'   => _('FusionDirectory mail template plugin configuration'),
+      'plObjectClass'   => ['fdMailTemplateConf'],
+      'plCategory'      => ['configuration'],
+      'plObjectType'    => ['smallConfig'],
+
+      'plProvidedAcls'  => parent::generatePlProvidedAcls(static::getAttributesInfo())
+    ];
+  }
+
+  static function getAttributesInfo (): array
+  {
+    return [
+      'mailTemplateConf' => [
+        'name'  => _('Mail Template'),
+        'attrs' => [
+          new StringAttribute(
+            _('Mail Template RDN'), _('Branch in which Directory Base, mails templates will be stored'),
+            'fdMailTemplateRDN', TRUE,
+            'ou=mailTemplate'
+          ),
+        ]
+      ],
+    ];
+  }
+}
+