diff --git a/include/class_template.inc b/include/class_template.inc
index cf1bb339f3043379d5b50ccb60bf1cd8c9c97548..f455a5b4a0dbac5556bb792124b7243c888363a1 100644
--- a/include/class_template.inc
+++ b/include/class_template.inc
@@ -81,7 +81,7 @@ class template
     $tempTabObject->setActiveTabs($this->tabObject);
     $this->attributes = [];
     foreach ($this->tabObject->by_object as $class => $tab) {
-      if ($tab->is_account || $tab->ignore_account) {
+      if ($tab->isActive()) {
         $this->attributes[$class] = [];
         $attrs = array_unique(array_merge($tab->getRequiredAttributes(), $this->needed));
         foreach (array_keys($tab->attributesAccess) as $attr) {
@@ -312,7 +312,7 @@ class template
       $this->tabObject = objects::open($targetdn, $this->type);
       unset($this->attrs['objectClass']['count']);
       foreach ($this->tabObject->by_object as $class => $plugin) {
-        if ($plugin->is_account || $plugin->ignore_account) {
+        if ($plugin->isActive()) {
           $this->attrs['objectClass'] = $plugin->mergeObjectClasses($this->attrs['objectClass']);
         }
       }
diff --git a/include/simpleplugin/class_multiPlugin.inc b/include/simpleplugin/class_multiPlugin.inc
index ecd1a2aeda3ac0c3f07ad1198f186035ef749bc8..9e3ba393e44d8427f61f93fc929e2e669c06fa43 100644
--- a/include/simpleplugin/class_multiPlugin.inc
+++ b/include/simpleplugin/class_multiPlugin.inc
@@ -26,9 +26,9 @@
 class multiPlugin extends simplePlugin
 {
   /* attribute list for save action */
-  var $objectclasses  = [];
-  var $ignore_account = TRUE;
-  var $plugin         = [];
+  var $objectclasses        = [];
+  protected $ignore_account = TRUE;
+  var $plugin               = [];
 
   var $tabClass = '';
 
@@ -137,7 +137,7 @@ class multiPlugin extends simplePlugin
     $message = parent::check();
 
     foreach ($this->plugin as &$plug) {
-      if ($plug->is_account || $plug->ignore_account) {
+      if ($plug->isActive()) {
         $tmp      = $plug->check();
         $message  = array_merge($message, $tmp);
       }
@@ -172,7 +172,7 @@ class multiPlugin extends simplePlugin
     /* Save objects */
     foreach ($this->plugin as &$plug) {
       $plug->dn = $this->dn;
-      if ($plug->is_account || $plug->ignore_account) {
+      if ($plug->isActive()) {
         $result = $plug->save();
       } else {
         $result = $plug->remove(FALSE);
diff --git a/include/simpleplugin/class_simplePlugin.inc b/include/simpleplugin/class_simplePlugin.inc
index 333eb8f1becfcdfdde39ff09299f5164c7001a25..ad911b704570d95b7aa2cfad187b5e5bdf75ffaf 100644
--- a/include/simpleplugin/class_simplePlugin.inc
+++ b/include/simpleplugin/class_simplePlugin.inc
@@ -51,7 +51,7 @@ class simplePlugin implements SimpleTab
    */
   public $is_account            = FALSE;
   public $initially_was_account = FALSE;
-  public $ignore_account        = FALSE;
+  protected $ignore_account     = FALSE;
 
   public $acl_category  = '';
 
@@ -780,6 +780,22 @@ class simplePlugin implements SimpleTab
     return $display;
   }
 
+  /*!
+   * \brief Test whether a tab is active
+   */
+  public function isActive (): bool
+  {
+    return ($this->is_account || $this->ignore_account);
+  }
+
+  /*!
+   * \brief Test whether a tab can be deactivated
+   */
+  public function isActivatable (): bool
+  {
+    return $this->displayHeader;
+  }
+
   /*! \brief Check if logged in user have enough right to read this attribute value
    *
    * \param mixed $attr Attribute object or name (in this case it will be fetched from attributesAccess)
diff --git a/include/simpleplugin/class_simpleTabs.inc b/include/simpleplugin/class_simpleTabs.inc
index e23a33d663d9c7b100f321b73bb9747ed4467a31..ba4bfcec44dab503c0e801274b7befb4018b2508 100644
--- a/include/simpleplugin/class_simpleTabs.inc
+++ b/include/simpleplugin/class_simpleTabs.inc
@@ -152,7 +152,7 @@ class simpleTabs
   function setActiveTabs (&$tabObject)
   {
     foreach ($this->by_object as $class => $plugin) {
-      if ($plugin->is_account || $plugin->ignore_account) {
+      if ($plugin->isActive()) {
         $tabObject->by_object[$class]->is_account = $plugin->is_account;
       }
     }
@@ -289,13 +289,13 @@ class simpleTabs
       $cssClasses = $style[$index];
 
       /* Take care about notifications */
-      if ($this->plNotify[$class] && ($obj->is_account || $obj->ignore_account)) {
+      if ($this->plNotify[$class] && $obj->isActive()) {
         $cssClasses .= ' tab-notify';
       }
       if ($disabled) {
         $cssClasses .= ' tab-disabled';
       }
-      if (!$obj->is_account && !$obj->ignore_account) {
+      if (!$obj->isActive()) {
         $cssClasses .= ' tab-inactive';
       }
 
@@ -365,7 +365,7 @@ class simpleTabs
     /* Check all plugins */
     foreach ($this->by_object as $key => $obj) {
       $this->plNotify[$key] = FALSE;
-      if (($obj->is_account || $obj->ignore_account) && (!$obj->is_template)) {
+      if ($obj->isActive() && (!$obj->is_template)) {
         logging::debug(DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, $key, "Checking");
 
         $msg = $obj->check();
@@ -386,8 +386,6 @@ class simpleTabs
 
   /*
    * \brief Save object in the tab
-   *
-   * \param boolean $ignore_account false
    */
   function save ()
   {
@@ -434,7 +432,7 @@ class simpleTabs
 
       $obj->dn = $this->dn;
 
-      if ($obj->is_account || $obj->ignore_account) {
+      if ($obj->isActive()) {
         $result = $obj->save();
       } else {
         $result = $obj->remove(FALSE);
@@ -550,7 +548,7 @@ class simpleTabs
   /* Return tab or service if activated, FALSEƂ otherwise */
   function getTabOrServiceObject ($tab)
   {
-    if (isset($this->by_object[$tab]) && ($this->by_object[$tab]->is_account || $this->by_object[$tab]->ignore_account)) {
+    if (isset($this->by_object[$tab]) && $this->by_object[$tab]->isActive()) {
       return $this->by_object[$tab];
     } elseif (is_subclass_of($tab, 'simpleService') && isset($this->by_object['servicesManagement'])) {
       return $this->by_object['servicesManagement']->getServiceObject($tab);
diff --git a/include/simpleplugin/interface_SimpleTab.inc b/include/simpleplugin/interface_SimpleTab.inc
index f6bf90297588251e5cb17f2c5a84b1cc346d663e..adad541b3b9afde452917f4b7eb7440345db807a 100644
--- a/include/simpleplugin/interface_SimpleTab.inc
+++ b/include/simpleplugin/interface_SimpleTab.inc
@@ -32,7 +32,6 @@ interface SimpleTab
   /*
    * Public vars expected as well by classes implementing this interface:
    * bool $is_account
-   * bool $ignore_account
    * string $dn
    * bool $is_template
    * string $_template_cn (only for main tab of templates)
@@ -152,4 +151,14 @@ interface SimpleTab
    *  Used by simplePlugin::callHook
    */
   public function fillHookAttrs (array &$addAttrs);
+
+  /*!
+   * \brief Test whether a tab is active
+   */
+  public function isActive (): bool;
+
+  /*!
+   * \brief Test whether a tab can be deactivated
+   */
+  public function isActivatable (): bool;
 }
diff --git a/plugins/admin/groups/tabs_ogroups.inc b/plugins/admin/groups/tabs_ogroups.inc
index bc57d6bc322c1c163188ae3b0501ba228c6b6826..e5d97491e14c33a09fd59f3a0f99d16a095d7c28 100644
--- a/plugins/admin/groups/tabs_ogroups.inc
+++ b/plugins/admin/groups/tabs_ogroups.inc
@@ -166,7 +166,7 @@ class ogrouptabs extends simpleTabs_noSpecial
   {
     $tabObject->loadTabs($this->groupObjects);
     foreach ($this->by_object as $class => $plugin) {
-      if ($plugin->is_account || $plugin->ignore_account) {
+      if ($plugin->isActive()) {
         $tabObject->by_object[$class]->is_account = $plugin->is_account;
       }
     }