diff --git a/include/functions.inc b/include/functions.inc
index 0493dc844d4b0311980e550f2334a67e83d6e539..58492019adea8840f0b103bc1fa2abaf154e5847 100644
--- a/include/functions.inc
+++ b/include/functions.inc
@@ -2579,50 +2579,77 @@ function check_schema($cfg)
   $ldap = new ldapMultiplexer(new LDAP($cfg['admin'], $cfg['password'], $cfg['connection'], FALSE, $cfg['tls']));
   $objectclasses = $ldap->get_objectclasses(TRUE);
   if (count($objectclasses) == 0) {
-    msg_dialog::display(_("LDAP warning"), _("Cannot get schema information from server. No schema check possible!"), WARNING_DIALOG);
+    msg_dialog::display(_('LDAP warning'), _('Cannot get schema information from server. No schema check possible!'), WARNING_DIALOG);
+    return $checks;
   }
 
   /* This is the default block used for each entry.
    *  to avoid unset indexes.
    */
   $def_check = array(
-      "SCHEMA_FILES"     => array(),
-      "CLASSES_REQUIRED" => array(),
-      "STATUS"           => FALSE,
-      "IS_MUST_HAVE"     => FALSE,
-      "MSG"              => "",
-      "INFO"             => ""); // There is currently no information specified for this schema extension.;
-
-  /* FusionDirectory lock entry, used to mark currently edited objects as 'in use' */
-  $checks['gosaLockEntry']['SCHEMA_FILES']     = array('core-fd.schema');
-  $checks['gosaLockEntry']['CLASSES_REQUIRED'] = array('gosaLockEntry');
-  $checks['gosaLockEntry']['IS_MUST_HAVE']     = TRUE;
-  $checks['gosaLockEntry']['INFO']             = _('Used to lock currently edited entries to avoid multiple changes at the same time.');
-
-  /* Some other checks */
-  $checks['posixAccount']['SCHEMA_FILES']     = array('nis.schema');
-  $checks['posixAccount']['CLASSES_REQUIRED'] = array('posixAccount');
-  $checks['posixAccount']['IS_MUST_HAVE']     = FALSE;
+    'SCHEMA_FILE'       => '',
+    'CLASSES_REQUIRED'  => array(),
+    'STATUS'            => FALSE,
+    'IS_MUST_HAVE'      => FALSE,
+    'MSG'               => '',
+    'INFO'              => ''
+  );
+
+  /* FusionDirectory core schemas */
+
+  /* core-fd */
+  $checks['core-fd'] = $def_check;
+  $checks['core-fd']['SCHEMA_FILE']       = 'core-fd.schema';
+  $checks['core-fd']['CLASSES_REQUIRED']  = array('gosaLockEntry');
+  $checks['core-fd']['IS_MUST_HAVE']      = TRUE;
+  $checks['core-fd']['INFO']              = _('Main FusionDirectory schema');
+
+  /* core-fd-conf */
+  $checks['core-fd-conf'] = $def_check;
+  $checks['core-fd-conf']['SCHEMA_FILE']      = 'core-fd-conf.schema';
+  $checks['core-fd-conf']['CLASSES_REQUIRED'] = array('fusionDirectoryConf');
+  $checks['core-fd-conf']['IS_MUST_HAVE']     = TRUE;
+  $checks['core-fd-conf']['INFO']             = _('Schema used to store FusionDirectory configuration');
+
+  /* ldapns */
+  $checks['ldapns'] = $def_check;
+  $checks['ldapns']['SCHEMA_FILE']      = 'ldapns.schema';
+  $checks['ldapns']['CLASSES_REQUIRED'] = array('hostObject');
+  $checks['ldapns']['IS_MUST_HAVE']     = FALSE;
+  $checks['ldapns']['INFO']             = _('Used to store trust mode information in users or groups.');
+
+  /* template-fd */
+  $checks['template-fd'] = $def_check;
+  $checks['template-fd']['SCHEMA_FILE']      = 'template-fd.schema';
+  $checks['template-fd']['CLASSES_REQUIRED'] = array('fdTemplate');
+  $checks['template-fd']['IS_MUST_HAVE']     = FALSE;
+  $checks['template-fd']['INFO']             = _('Used to store templates.');
+
+  /* nis */
+  $checks['nis'] = $def_check;
+  $checks['nis']['SCHEMA_FILE']       = 'nis.schema';
+  $checks['nis']['CLASSES_REQUIRED']  = array('posixAccount');
+  $checks['nis']['IS_MUST_HAVE']      = FALSE;
+  $checks['nis']['INFO']              = _('Used to store POSIX information.');
 
   foreach ($checks as $name => $value) {
     foreach ($value['CLASSES_REQUIRED'] as $class) {
       if (!isset($objectclasses[$name])) {
+        $checks[$name]['STATUS'] = FALSE;
         if ($value['IS_MUST_HAVE']) {
-          $checks[$name]['STATUS'] = FALSE;
-          $checks[$name]['MSG']    = sprintf(_("Missing required object class '%s'!"), $class);
+          $checks[$name]['MSG']    = sprintf(_('Missing required object class "%s"!'), $class);
         } else {
-          $checks[$name]['STATUS'] = TRUE;
-          $checks[$name]['MSG']    = sprintf(_("Missing optional object class '%s'!"), $class);
+          $checks[$name]['MSG']    = sprintf(_('Missing optional object class "%s"!'), $class);
         }
       } else {
         $checks[$name]['STATUS']  = TRUE;
-        $checks[$name]['MSG']     = sprintf(_("Class(es) available"));
+        $checks[$name]['MSG']     = sprintf(_('Class(es) available'));
       }
     }
   }
 
   $checks['posixGroup'] = $def_check;
-  $checks['posixGroup']['SCHEMA_FILES']     = array('nis.schema');
+  $checks['posixGroup']['SCHEMA_FILE']      = 'nis.schema';
   $checks['posixGroup']['CLASSES_REQUIRED'] = array('posixGroup');
   $checks['posixGroup']['STATUS']           = TRUE;
   $checks['posixGroup']['MSG']              = '';
diff --git a/setup/class_setupStep_Ldap.inc b/setup/class_setupStep_Ldap.inc
index 80c366da4de58dc402407fac506a3fcdc5b68ad4..5b27749054b67bc7dd66df21934129dca68a567c 100644
--- a/setup/class_setupStep_Ldap.inc
+++ b/setup/class_setupStep_Ldap.inc
@@ -192,7 +192,11 @@ class Step_Ldap extends setupStep
       $error    = array();
       foreach ($checked as $check) {
         if (!$check['STATUS']) {
-          $error[] = $check['MSG'];
+          if ($check['IS_MUST_HAVE']) {
+            $error[] = $check['MSG'];
+          } else {
+            msg_dialog::display(_('Warning'), sprintf(_("%s\nSchema \"%s\": %s"), $check['MSG'], $check['SCHEMA_FILE'], $check['INFO']), WARNING_DIALOG);
+          }
         }
       }
       if (!empty($error)) {