From 42539643c396f9d8865dcf9a51b13dc869709d16 Mon Sep 17 00:00:00 2001
From: Marius Cramer <m.cramer@pixcept.de>
Date: Wed, 13 Aug 2014 07:16:50 -0400
Subject: [PATCH] Merge remote-tracking branch 'ispc/stable-3.0.5' into stable-3.0.5

---
 interface/web/help/lib/lang/se_support_message.lng                |    1 
 interface/web/dns/lib/lang/se_dns_template_list.lng               |    1 
 interface/web/admin/lib/lang/se_language_edit.lng                 |    1 
 interface/web/sites/lib/lang/se_ftp_user.lng                      |    3 
 interface/web/sites/lib/lang/se_web_backup_list.lng               |    1 
 interface/web/admin/lib/lang/es_server_config.lng                 |   52 
 interface/web/sites/lib/lang/fr_shell_user.lng                    |    3 
 interface/web/sites/lib/lang/se_web_domain.lng                    |    1 
 interface/web/mail/lib/lang/se_mail_user_filter.lng               |    1 
 interface/web/mailuser/lib/lang/se_mail_user_cc.lng               |    1 
 interface/web/admin/lib/lang/de_server_config.lng                 |   52 
 interface/web/admin/lib/lang/nl_server_config.lng                 |   52 
 interface/web/designer/lib/lang/se_form_show.lng                  |    1 
 interface/web/sites/lib/lang/en_web_folder_user_list.lng          |    1 
 interface/web/sites/lib/lang/se_web_sites_stats_list.lng          |    1 
 interface/web/admin/lib/lang/se_software_package_list.lng         |    1 
 interface/web/sites/lib/lang/nl_web_folder_list.lng               |    1 
 interface/web/sites/lib/lang/se_database_list.lng                 |    1 
 interface/web/admin/lib/lang/se_remote_user_list.lng              |    1 
 interface/web/admin/lib/lang/se_groups.lng                        |    1 
 interface/web/help/lib/lang/se.lng                                |    1 
 interface/web/admin/lib/lang/se_language_list.lng                 |    1 
 interface/web/designer/lib/lang/se.lng                            |    1 
 interface/web/client/lib/lang/fr_client.lng                       |    2 
 interface/web/sites/lib/lang/fr_aps.lng                           |   16 
 interface/web/sites/lib/lang/ja_shell_user.lng                    |    3 
 interface/web/dns/lib/lang/en_dns_soa_admin_list.lng              |   11 
 interface/web/sites/lib/lang/hu_ftp_user.lng                      |    2 
 interface/web/mailuser/lib/lang/se_mail_user_autoresponder.lng    |    1 
 interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng              |   11 
 install/tpl/opensuse_postfix.conf.master                          |    6 
 interface/web/admin/templates/server_config_server_edit.htm       |    4 
 interface/web/sites/lib/lang/cz_web_folder_list.lng               |    1 
 interface/web/admin/language_edit.php                             |    2 
 install/tpl/apps_php_fpm_pool.conf.master                         |    2 
 interface/web/admin/lib/lang/ru_server_config.lng                 |   52 
 install/lib/install.lib.php                                       |   21 
 interface/web/mailuser/lib/lang/se_index.lng                      |    1 
 interface/web/admin/lib/lang/se_system_config.lng                 |    3 
 interface/web/sites/lib/lang/ar_web_folder_list.lng               |    1 
 interface/web/sites/lib/lang/id_shell_user.lng                    |    3 
 server/plugins-available/shelluser_jailkit_plugin.inc.php         |   14 
 server/plugins-available/cron_jailkit_plugin.inc.php              |   16 
 docs/autoinstall_samples/autoinstall.ini.sample                   |   50 
 interface/web/admin/lib/lang/en_server_config.lng                 |   52 
 server/scripts/ispconfig_update.php                               |    4 
 interface/web/sites/lib/lang/id_ftp_user.lng                      |    2 
 interface/web/admin/lib/lang/se_server_ip_list.lng                |    1 
 interface/web/dns/lib/lang/es_dns_slave_admin_list.lng            |   10 
 interface/web/mail/lib/lang/se_mail_alias.lng                     |    1 
 interface/web/sites/lib/lang/sk_web_folder_list.lng               |    1 
 interface/web/dns/lib/lang/ro_dns_slave_admin_list.lng            |   10 
 interface/web/dns/lib/lang/se_dns_txt.lng                         |    1 
 interface/web/mail/lib/lang/se_mail_get_list.lng                  |    1 
 interface/web/sites/lib/lang/se_webdav_user.lng                   |    1 
 interface/web/strengthmeter/lib/lang/se_strengthmeter.lng         |    1 
 interface/web/vm/lib/lang/se.lng                                  |    1 
 interface/web/admin/lib/lang/se_software_package.lng              |    1 
 interface/web/sites/lib/lang/cz_web_folder_user_list.lng          |    1 
 interface/web/sites/lib/lang/fr_web_folder_user_list.lng          |    1 
 interface/web/admin/lib/lang/hu_server_config.lng                 |   52 
 interface/web/admin/lib/lang/el_server_config.lng                 |   52 
 server/plugins-available/apache2_plugin.inc.php                   |   35 
 interface/web/tools/lib/lang/se_index.lng                         |    1 
 interface/web/help/lib/lang/se_faq_form.lng                       |    1 
 interface/web/dns/lib/lang/se_dns_import.lng                      |    1 
 interface/web/mail/lib/lang/se_mail_forward.lng                   |    1 
 interface/web/sites/lib/lang/ar_web_folder_user_list.lng          |    1 
 interface/web/sites/web_vhost_subdomain_edit.php                  |    2 
 interface/lib/classes/session.inc.php                             |   21 
 interface/web/sites/lib/lang/se_database_user.lng                 |    1 
 interface/web/sites/lib/lang/sk_web_folder_user_list.lng          |    1 
 interface/web/dns/lib/lang/br_dns_slave_admin_list.lng            |   10 
 interface/web/mail/lib/lang/se_mail_aliasdomain.lng               |    1 
 interface/lib/config.inc.php                                      |    2 
 interface/web/sites/lib/lang/hr_web_folder_user_list.lng          |    1 
 interface/web/sites/lib/lang/hu_shell_user.lng                    |    3 
 interface/web/dns/lib/lang/se_dns_a_list.lng                      |    1 
 interface/web/sites/lib/lang/it_ftp_user.lng                      |    2 
 interface/web/tools/lib/lang/se_interface.lng                     |    1 
 interface/web/mail/lib/lang/se_mail_user_filter_list.lng          |    1 
 interface/web/designer/lib/lang/se_module_nav_item_edit.lng       |    1 
 interface/web/sites/lib/lang/el_ftp_user.lng                      |    2 
 interface/web/help/lib/lang/se_faq_manage_questions_list.lng      |    1 
 interface/web/admin/lib/lang/se.lng                               |    1 
 interface/web/sites/lib/lang/pl_web_folder_list.lng               |    1 
 interface/web/admin/lib/lang/ro_server_config.lng                 |   52 
 interface/web/sites/lib/lang/hu_web_folder_list.lng               |    1 
 install/tpl/opensuse_dovecot-sql.conf.master                      |    4 
 server/plugins-available/nginx_plugin.inc.php                     |   16 
 install/tpl/apache_ispconfig.conf.master                          |    3 
 interface/web/admin/lib/lang/br_server_config.lng                 |   52 
 interface/web/admin/lib/lang/hr_server_config.lng                 |   52 
 interface/web/sites/lib/lang/bg_ftp_user.lng                      |    2 
 interface/web/sites/lib/lang/ja_web_folder_user_list.lng          |    1 
 interface/web/monitor/lib/lang/se_syslog_list.lng                 |    1 
 interface/web/designer/lib/lang/se_form_list.lng                  |    1 
 interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng              |   11 
 interface/web/dns/lib/lang/se_dns_mx.lng                          |    1 
 interface/web/admin/lib/lang/se_remote_user.lng                   |    1 
 server/plugins-available/cron_plugin.inc.php                      |    9 
 install/tpl/gentoo_postfix.conf.master                            |    2 
 interface/web/dns/lib/lang/se_dns_hinfo.lng                       |    1 
 interface/web/admin/lib/lang/se_firewall_list.lng                 |    1 
 server/plugins-available/shelluser_base_plugin.inc.php            |   14 
 interface/web/mailuser/lib/lang/se_mail_user_filter.lng           |    1 
 interface/web/sites/lib/lang/se_aps_update_packagelist.lng        |    1 
 interface/web/sites/lib/lang/bg_shell_user.lng                    |    3 
 interface/lib/classes/validate_password.inc.php                   |    5 
 interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng              |   11 
 interface/web/admin/lib/lang/ja_server_config.lng                 |   52 
 interface/web/mail/lib/lang/se_mail_get.lng                       |    3 
 interface/web/sites/web_aliasdomain_edit.php                      |   10 
 interface/web/dns/lib/lang/hr_dns_slave_admin_list.lng            |   10 
 interface/web/mail/lib/lang/se_spamfilter_blacklist.lng           |    1 
 interface/web/admin/lib/lang/tr_server_config.lng                 |   52 
 interface/lib/classes/validate_domain.inc.php                     |  137 -
 interface/web/monitor/lib/lang/se_datalog_list.lng                |    1 
 interface/web/dns/lib/lang/el_dns_slave_admin_list.lng            |   10 
 server/conf/vhost.conf.master                                     |   40 
 interface/web/sites/lib/lang/se_aps.lng                           |   17 
 interface/web/tools/lib/lang/se.lng                               |    1 
 interface/web/sites/lib/lang/hr_web_folder_list.lng               |    1 
 interface/web/dns/lib/lang/se_dns_slave_list.lng                  |    1 
 interface/web/help/lib/lang/se_support_message_list.lng           |    1 
 interface/web/sites/lib/lang/nl_shell_user.lng                    |    3 
 interface/web/admin/lib/lang/se_server_config.lng                 |   53 
 interface/web/dns/lib/lang/ru_dns_slave_admin_list.lng            |   10 
 interface/web/mail/lib/lang/se_spamfilter_users.lng               |    1 
 interface/web/mail/lib/lang/se_spamfilter_config_list.lng         |    1 
 interface/web/sites/lib/lang/es_shell_user.lng                    |    3 
 interface/web/admin/form/system_config.tform.php                  |    2 
 interface/web/sites/lib/lang/ro_ftp_user.lng                      |    2 
 interface/web/mail/lib/lang/se_mail_relay_recipient.lng           |    1 
 interface/web/sites/lib/lang/el_shell_user.lng                    |    3 
 interface/web/sites/lib/lang/en_web_folder_list.lng               |    1 
 interface/web/dns/lib/lang/it_dns_slave_admin_list.lng            |   10 
 interface/web/sites/lib/lang/de_web_folder_list.lng               |    1 
 interface/web/sites/lib/lang/id_web_folder_user_list.lng          |    1 
 interface/web/admin/lib/lang/fr_system_config.lng                 |    2 
 interface/web/mail/form/mail_whitelist.tform.php                  |    2 
 interface/web/mail/lib/lang/se_spamfilter_whitelist_list.lng      |    1 
 interface/web/client/lib/lang/se_client_template_list.lng         |    1 
 interface/web/sites/lib/lang/fi_shell_user.lng                    |    3 
 interface/web/sites/lib/lang/se_database_user_admin_list.lng      |    1 
 interface/web/sites/lib/lang/tr_ftp_user.lng                      |    2 
 interface/web/admin/lib/lang/se_language_complete.lng             |    1 
 interface/web/sites/lib/lang/el_web_folder_list.lng               |    1 
 interface/web/mail/lib/lang/se_mail_domain.lng                    |    1 
 interface/web/designer/lib/lang/se_form_edit.lng                  |    1 
 install/tpl/fedora_dovecot-sql.conf.master                        |    4 
 interface/web/dns/lib/lang/se_dns_wizard.lng                      |    1 
 interface/web/mail/lib/lang/se_mail_domain_list.lng               |    1 
 install/dist/lib/opensuse.lib.php                                 |   12 
 interface/web/sites/lib/lang/fi_web_folder_list.lng               |    1 
 interface/web/sites/web_domain_edit.php                           |    6 
 interface/web/admin/lib/lang/se_tpl_default_admin.lng             |    1 
 interface/web/admin/lib/lang/cz_server_config.lng                 |   52 
 interface/web/sites/lib/lang/se.lng                               |    3 
 interface/web/mail/lib/lang/se_mail_alias_list.lng                |    1 
 interface/web/vm/lib/lang/se_openvz_template_list.lng             |    1 
 interface/lib/app.inc.php                                         |    6 
 server/plugins-available/firewall_plugin.inc.php                  |   30 
 interface/web/vm/lib/lang/se_openvz_ip_list.lng                   |    1 
 server/lib/classes/ispcmail.inc.php                               |  869 ++++++++++
 interface/web/vm/lib/lang/se_openvz_ostemplate_list.lng           |    1 
 install/dist/lib/fedora.lib.php                                   |   10 
 interface/web/dns/lib/lang/se_dns_a.lng                           |    1 
 interface/web/admin/lib/lang/se_users_list.lng                    |    1 
 interface/web/dns/lib/lang/it_dns_soa_admin_list.lng              |   11 
 interface/web/sites/lib/lang/se_database_user_list.lng            |    1 
 install/lib/installer_base.lib.php                                |   52 
 interface/web/sites/lib/lang/se_web_domain_list.lng               |    1 
 interface/web/mail/lib/lang/se_mail_content_filter.lng            |    1 
 interface/web/sites/form/ftp_user.tform.php                       |   21 
 interface/web/sites/lib/lang/id_web_folder_list.lng               |    1 
 interface/web/client/lib/lang/se_domain_list.lng                  |    1 
 interface/web/sites/lib/lang/se_aps_packages_list.lng             |    1 
 interface/web/dns/lib/lang/id_dns_slave_admin_list.lng            |   10 
 interface/web/mail/lib/lang/se_mail_blacklist_list.lng            |    1 
 interface/web/client/lib/lang/se_domain.lng                       |    1 
 interface/web/dns/lib/lang/se.lng                                 |    1 
 interface/web/admin/lib/lang/se_software_package_install.lng      |    1 
 interface/web/dns/lib/lang/se_dns_srv.lng                         |    1 
 interface/web/mail/lib/lang/se_mail_forward_list.lng              |    1 
 interface/web/admin/lib/lang/se_language_import.lng               |    1 
 interface/web/admin/lib/lang/se_remote_action.lng                 |    1 
 interface/web/mailuser/lib/lang/se_mail_user_filter_list.lng      |    1 
 interface/web/mail/lib/lang/se_mail_aliasdomain_list.lng          |    1 
 interface/web/sites/lib/lang/tr_web_folder_user_list.lng          |    1 
 interface/web/dns/lib/lang/se_dns_aaaa.lng                        |    1 
 interface/web/sites/lib/lang/bg_web_folder_user_list.lng          |    1 
 interface/web/sites/lib/lang/en_ftp_user.lng                      |    2 
 interface/web/admin/lib/lang/se_server.lng                        |    1 
 interface/web/mail/lib/lang/se_mail_transport_list.lng            |    1 
 interface/web/sites/lib/lang/se_database.lng                      |    1 
 interface/web/mail/mail_domain_edit.php                           |   11 
 interface/web/mail/lib/lang/fr_mail_get.lng                       |    2 
 interface/web/admin/lib/lang/se_directive_snippets_list.lng       |    1 
 interface/web/client/lib/lang/se_client_circle.lng                |    1 
 interface/web/admin/lib/lang/it_server_config.lng                 |   52 
 install/tpl/fedora_postfix.conf.master                            |    4 
 interface/web/client/lib/lang/se_client_circle_list.lng           |    1 
 interface/web/monitor/lib/lang/se.lng                             |    1 
 interface/web/sites/lib/lang/ro_web_folder_user_list.lng          |    1 
 interface/web/dns/list/dns_slave.list.php                         |   22 
 interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng              |   11 
 interface/web/client/lib/lang/se_client_message_template.lng      |    1 
 interface/web/mail/mail_user_edit.php                             |    3 
 interface/web/dns/lib/lang/nl_dns_slave_admin_list.lng            |   10 
 interface/web/tools/lib/lang/se_tpl_default.lng                   |    1 
 interface/web/mailuser/lib/lang/se.lng                            |    1 
 interface/web/mailuser/mail_user_password_edit.php                |    3 
 server/plugins-available/mysql_clientdb_plugin.inc.php            |   11 
 interface/web/tools/lib/lang/se_import_ispconfig.lng              |    1 
 interface/web/sites/lib/lang/pt_shell_user.lng                    |    3 
 interface/web/admin/lib/lang/se_software_repo.lng                 |    1 
 interface/web/vm/lib/lang/se_openvz_ostemplate.lng                |    1 
 interface/web/dns/lib/lang/cz_dns_slave_admin_list.lng            |   10 
 interface/web/sites/lib/lang/de_ftp_user.lng                      |    2 
 server/plugins-available/backup_plugin.inc.php                    |    4 
 interface/web/dns/lib/lang/sk_dns_slave_admin_list.lng            |   10 
 interface/web/mail/lib/lang/se_mail_spamfilter_list.lng           |    1 
 interface/web/admin/lib/lang/fi_server_config.lng                 |   52 
 interface/web/themes/default_no_navimg/templates/main.tpl.htm     |    1 
 interface/web/sites/lib/lang/tr_web_folder_list.lng               |    1 
 interface/web/sites/lib/lang/se_webdav_user_list.lng              |    1 
 interface/web/admin/lib/lang/el_system_config.lng                 |    2 
 docs/autoinstall_samples/autoinstall.conf_sample.php              |   52 
 interface/web/client/lib/lang/se_client_message.lng               |    1 
 interface/web/sites/lib/lang/se_ftp_user_list.lng                 |    1 
 interface/web/vm/lib/lang/se_openvz_vm.lng                        |    1 
 interface/web/admin/lib/lang/se_directive_snippets.lng            |    1 
 install/tpl/debian_dovecot-sql.conf.master                        |    4 
 interface/web/admin/lib/lang/se_server_php_list.lng               |    1 
 install/tpl/debian_postfix.conf.master                            |    4 
 interface/web/designer/lib/lang/se_module_show.lng                |    1 
 interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng              |   11 
 interface/web/mail/lib/lang/se_mail_content_filter_list.lng       |    1 
 interface/web/sites/lib/lang/fr.lng                               |    2 
 server/lib/classes/monitor_tools.inc.php                          |   21 
 interface/web/sites/lib/lang/se_aps_instances_list.lng            |    1 
 interface/web/client/lib/lang/se_client_template.lng              |    1 
 interface/web/dns/lib/lang/tr_dns_slave_admin_list.lng            |   10 
 interface/web/designer/lib/lang/se_module_nav_edit.lng            |    1 
 interface/web/dns/lib/lang/se_dns_ns.lng                          |    1 
 interface/web/themes/default-304/templates/main.tpl.htm           |    1 
 interface/web/client/lib/lang/se_client.lng                       |    3 
 interface/web/help/lib/lang/se_faq_sections_form.lng              |    1 
 interface/web/dns/lib/lang/ja_dns_slave_admin_list.lng            |   10 
 interface/web/sites/form/database.tform.php                       |    4 
 interface/web/mail/lib/lang/se_user_quota_stats_list.lng          |    1 
 interface/web/dns/lib/lang/bg_dns_slave_admin_list.lng            |   10 
 interface/web/sites/lib/lang/se_web_folder.lng                    |    1 
 interface/web/sites/lib/lang/ar_ftp_user.lng                      |    2 
 server/lib/classes/system.inc.php                                 |   65 
 interface/web/dns/templates/dns_soa_admin_list.htm                |   86 +
 interface/lib/lang/el.lng                                         |    2 
 interface/web/sites/lib/lang/se_cron.lng                          |    1 
 interface/web/themes/default_combobox/templates/main.tpl.htm      |    1 
 interface/web/sites/lib/lang/fi_ftp_user.lng                      |    2 
 interface/web/dns/lib/lang/fr_dns_slave_admin_list.lng            |   10 
 interface/web/dns/lib/lang/se_dns_soa.lng                         |    1 
 install/install.php                                               |  111 
 interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng              |   11 
 interface/web/sites/lib/lang/se_web_vhost_subdomain_list.lng      |    1 
 interface/web/sites/lib/lang/br_ftp_user.lng                      |    2 
 interface/web/dns/lib/lang/el_dns_soa_admin_list.lng              |   11 
 interface/web/sites/lib/lang/el_web_folder_user_list.lng          |    1 
 interface/web/sites/lib/lang/fr_web_subdomain.lng                 |    2 
 interface/web/dns/lib/lang/de_dns_soa_admin_list.lng              |   11 
 interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng       |    1 
 interface/web/dashboard/lib/lang/se_dashlet_modules.lng           |    1 
 interface/web/sites/lib/lang/se_web_aliasdomain.lng               |    1 
 install/sql/ispconfig3.sql                                        |    8 
 interface/web/admin/lib/lang/pl_server_config.lng                 |   52 
 interface/web/mail/lib/lang/se_mail_domain_catchall_list.lng      |    1 
 interface/web/mail/lib/lang/se_mail_user.lng                      |    1 
 interface/web/sites/lib/lang/ja_ftp_user.lng                      |    2 
 interface/web/client/lib/lang/se_reseller.lng                     |    1 
 interface/web/dns/lib/lang/es_dns_soa_admin_list.lng              |   11 
 interface/web/sites/lib/lang/en_shell_user.lng                    |    3 
 interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng              |   11 
 interface/web/js/scrigo.js.php                                    |    2 
 interface/web/sites/lib/lang/bg_web_folder_list.lng               |    1 
 interface/web/sites/lib/lang/br_shell_user.lng                    |    3 
 interface/web/vm/lib/lang/se_openvz_vm_list.lng                   |    1 
 interface/web/sites/lib/lang/se_database_admin_list.lng           |    1 
 interface/web/dns/lib/lang/fi_dns_slave_admin_list.lng            |   10 
 interface/web/mail/lib/lang/se_mail_domain_catchall.lng           |    1 
 interface/web/sites/lib/lang/ru_web_folder_user_list.lng          |    1 
 interface/web/admin/lib/lang/se_server_list.lng                   |    1 
 interface/web/themes/blue/ispconfig_version                       |    2 
 interface/web/admin/lib/lang/se_server_php.lng                    |    1 
 interface/web/mail/lib/lang/se_mail_mailinglist_list.lng          |    1 
 interface/web/mail/lib/lang/se_mail_transport.lng                 |    1 
 interface/web/admin/lib/lang/sk_server_config.lng                 |   52 
 server/conf/apps_php_fpm_pool.conf.master                         |    2 
 interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng              |   11 
 interface/web/sites/lib/lang/it_web_folder_user_list.lng          |    1 
 interface/web/sites/lib/lang/es_web_folder_list.lng               |    1 
 interface/web/admin/lib/lang/id_server_config.lng                 |   52 
 interface/web/sites/lib/lang/se_web_subdomain_list.lng            |    1 
 interface/web/dns/lib/lang/se_dns_slave.lng                       |    1 
 interface/web/admin/lib/lang/se_software_update_list.lng          |    1 
 interface/web/sites/lib/lang/ja_web_folder_list.lng               |    1 
 interface/web/dns/lib/lang/se_dns_cname.lng                       |    1 
 interface/web/dns/lib/lang/se_dns_soa_admin_list.lng              |   11 
 interface/web/mail/form/mail_user_filter.tform.php                |    2 
 interface/web/admin/form/server_config.tform.php                  |  368 +++-
 interface/web/mail/lib/lang/se_mail_blacklist.lng                 |    1 
 interface/web/sites/lib/lang/se_web_vhost_subdomain.lng           |    1 
 interface/web/dns/lib/lang/de_dns_slave_admin_list.lng            |   10 
 interface/web/sites/shell_user_edit.php                           |    7 
 interface/web/sites/lib/lang/se_cron_list.lng                     |    1 
 interface/web/sites/form/shell_user.tform.php                     |   27 
 interface/web/sites/lib/lang/tr_shell_user.lng                    |    3 
 interface/web/sites/lib/lang/se_web_aliasdomain_list.lng          |    1 
 interface/web/sites/lib/lang/hr_shell_user.lng                    |    3 
 server/cron_daily.php                                             |   12 
 interface/web/admin/lib/lang/fr_server_config.lng                 |   52 
 interface/web/designer/lib/lang/se_module_edit.lng                |    1 
 interface/web/themes/default/templates/main.tpl.htm               |    1 
 interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng              |   11 
 interface/web/sites/lib/lang/cz_shell_user.lng                    |    3 
 interface/web/sites/lib/lang/sk_ftp_user.lng                      |    2 
 interface/web/sites/lib/lang/se_shell_user_list.lng               |    1 
 interface/web/client/lib/lang/fr_reseller.lng                     |    2 
 interface/web/client/lib/lang/se.lng                              |    1 
 interface/web/help/lib/lang/se_help_faq_sections_list.lng         |    1 
 interface/web/vm/lib/lang/se_openvz_template.lng                  |    1 
 interface/web/dns/list/dns_soa.list.php                           |   22 
 interface/web/admin/lib/lang/ar_server_config.lng                 |   52 
 interface/web/dns/lib/lang/pt_dns_slave_admin_list.lng            |   10 
 interface/lib/classes/aps_guicontroller.inc.php                   |    2 
 interface/web/client/lib/lang/se_client_del.lng                   |    1 
 interface/web/sites/lib/lang/es_ftp_user.lng                      |    2 
 interface/web/sites/lib/lang/se_web_folder_user.lng               |    1 
 interface/web/sites/lib/lang/se_user_quota_stats_list.lng         |    1 
 interface/lib/classes/validate_systemuser.inc.php                 |   64 
 interface/web/sites/lib/lang/se_web_subdomain.lng                 |    3 
 interface/web/dns/templates/dns_slave_admin_list.htm              |   83 +
 interface/web/dns/lib/lang/se_dns_alias.lng                       |    1 
 interface/web/mail/lib/lang/se_mail_whitelist.lng                 |    1 
 interface/web/sites/lib/lang/ru_shell_user.lng                    |    3 
 interface/web/admin/lib/lang/se_server_config_list.lng            |    1 
 interface/web/sites/lib/lang/fi_web_folder_user_list.lng          |    1 
 interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng              |   11 
 interface/web/sites/lib/lang/de_web_folder_user_list.lng          |    1 
 interface/web/dashboard/lib/lang/se_dashlet_mailquota.lng         |    1 
 install/tpl/php_fpm_pool.conf.master                              |    2 
 interface/web/dns/lib/lang/br_dns_soa_admin_list.lng              |   11 
 interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng              |   11 
 interface/web/admin/lib/lang/se_package_install.lng               |    1 
 interface/web/admin/lib/lang/se_iptables.lng                      |    1 
 interface/web/sites/lib/lang/br_web_folder_user_list.lng          |    1 
 interface/web/dns/lib/lang/ar_dns_slave_admin_list.lng            |   10 
 install/tpl/debian6_dovecot-sql.conf.master                       |    4 
 interface/web/sites/lib/lang/ro_shell_user.lng                    |    3 
 interface/web/client/lib/lang/se_clients_list.lng                 |    1 
 interface/web/mail/lib/lang/se_spamfilter_whitelist.lng           |    1 
 interface/web/sites/lib/lang/ro_web_folder_list.lng               |    1 
 interface/web/dashboard/lib/lang/se_dashlet_limits.lng            |    1 
 interface/web/dns/lib/lang/se_dns_soa_list.lng                    |    1 
 interface/web/mail/lib/lang/se_mail_mailinglist.lng               |    1 
 interface/web/dashboard/lib/lang/se_dashlet_quota.lng             |    1 
 interface/web/sites/lib/lang/se_web_domain_admin_list.lng         |    1 
 interface/web/mail/lib/lang/se_mail_domain_admin_list.lng         |    1 
 interface/web/admin/lib/lang/se_software_repo_list.lng            |    1 
 interface/web/sites/lib/lang/fr_web_folder_list.lng               |    1 
 interface/web/vm/lib/lang/se_openvz_action.lng                    |    1 
 interface/web/sites/lib/lang/ru_web_folder_list.lng               |    1 
 interface/web/admin/lib/lang/se_language_export.lng               |    1 
 interface/web/mail/lib/lang/se_spamfilter_config.lng              |    1 
 server/plugins-available/mail_plugin.inc.php                      |   14 
 interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng              |   11 
 interface/web/sites/lib/lang/se_web_folder_user_list.lng          |    2 
 interface/web/mail/lib/lang/se_spamfilter_policy_list.lng         |    1 
 interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng              |   11 
 interface/web/dns/lib/lang/hu_dns_slave_admin_list.lng            |   10 
 interface/web/tools/lib/lang/se_usersettings.lng                  |    1 
 interface/web/sites/lib/lang/de_shell_user.lng                    |    3 
 server/conf/apache_ispconfig.conf.master                          |    2 
 interface/web/mail/lib/lang/se_mail_user_stats_list.lng           |    1 
 install/sql/incremental/upd_0078.sql                              |    1 
 interface/lib/classes/tform.inc.php                               |   10 
 interface/web/sites/lib/lang/it_shell_user.lng                    |    3 
 interface/web/dns/lib/lang/se_dns_template.lng                    |    1 
 interface/web/dns/lib/lang/pl_dns_slave_admin_list.lng            |   10 
 interface/web/admin/templates/users_list.htm                      |    2 
 interface/web/sites/lib/lang/se_shell_user.lng                    |    4 
 server/plugins-available/bind_dlz_plugin.inc.php                  |   10 
 interface/web/admin/lib/lang/bg_server_config.lng                 |   52 
 interface/web/sites/lib/lang/cz_ftp_user.lng                      |    2 
 interface/lib/lang/fr.lng                                         |    2 
 install/tpl/config.inc.php.master                                 |    2 
 interface/web/sites/lib/lang/hr_ftp_user.lng                      |    2 
 interface/web/sites/lib/lang/pt_web_folder_user_list.lng          |    1 
 interface/web/vm/lib/lang/se_openvz_ip.lng                        |    1 
 install/update.php                                                |   73 
 interface/web/client/lib/lang/se_resellers_list.lng               |    1 
 interface/web/sites/lib/lang/pl_shell_user.lng                    |    3 
 interface/web/sites/lib/lang/nl_web_folder_user_list.lng          |    1 
 interface/web/dns/lib/lang/en_dns_slave_admin_list.lng            |   10 
 interface/web/sites/lib/lang/br_web_folder_list.lng               |    1 
 interface/web/mail/lib/lang/se_spamfilter_policy.lng              |    1 
 server/plugins-available/network_settings_plugin.inc.php          |   51 
 interface/web/mail/lib/lang/se_spamfilter_blacklist_list.lng      |    1 
 interface/web/themes/default_64_navimg/templates/main.tpl.htm     |    1 
 interface/web/sites/ftp_user_edit.php                             |    7 
 interface/lib/lang/se.lng                                         |    3 
 interface/lib/classes/auth.inc.php                                |    2 
 interface/web/dashboard/lib/lang/se.lng                           |    1 
 interface/web/mailuser/lib/lang/se_mail_user_password.lng         |    1 
 interface/web/sites/web_subdomain_edit.php                        |    9 
 interface/web/client/lib/lang/se_client_message_template_list.lng |    1 
 interface/web/designer/lib/lang/se_module_list.lng                |    1 
 interface/web/dns/lib/lang/se_dns_ptr.lng                         |    1 
 interface/web/sites/lib/lang/ru_ftp_user.lng                      |    2 
 interface/web/admin/lib/lang/se_firewall.lng                      |    1 
 interface/lib/classes/functions.inc.php                           |   28 
 interface/web/dns/lib/lang/id_dns_soa_admin_list.lng              |   11 
 interface/web/mail/lib/lang/se.lng                                |    1 
 interface/web/admin/lib/lang/se_iptables_list.lng                 |    1 
 interface/web/mail/lib/lang/se_spamfilter_users_list.lng          |    1 
 interface/web/dns/lib/lang/se_dns_slave_admin_list.lng            |   10 
 interface/web/sites/lib/lang/ar_shell_user.lng                    |    3 
 interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng              |   11 
 interface/web/client/lib/lang/el_reseller.lng                     |    2 
 install/tpl/server.ini.master                                     |    1 
 interface/web/login/lib/lang/se.lng                               |    1 
 interface/web/admin/lib/lang/se_language_add.lng                  |    1 
 interface/web/sites/lib/lang/fr_ftp_user.lng                      |    2 
 interface/web/admin/lib/lang/se_server_ip.lng                     |    1 
 interface/web/help/lib/lang/se_help_faq_list.lng                  |    1 
 interface/web/sites/lib/lang/sk_shell_user.lng                    |    3 
 interface/web/sites/lib/lang/nl_ftp_user.lng                      |    2 
 interface/web/sites/lib/lang/se_web_folder_list.lng               |    2 
 interface/web/sites/lib/lang/hu_web_folder_user_list.lng          |    1 
 interface/lib/classes/listform.inc.php                            |    6 
 interface/web/mail/lib/lang/se_mail_relay_recipient_list.lng      |    1 
 interface/web/sites/lib/lang/pl_ftp_user.lng                      |    2 
 interface/web/login/lib/lang/se_login_as.lng                      |    7 
 interface/web/dns/lib/lang/se_dns_rp.lng                          |    1 
 install/dist/lib/gentoo.lib.php                                   |   10 
 interface/web/admin/lib/lang/se_groups_list.lng                   |    1 
 interface/web/themes/blue/templates/main.tpl.htm                  |    1 
 interface/web/sites/lib/lang/pt_web_folder_list.lng               |    1 
 interface/web/sites/lib/lang/it_web_folder_list.lng               |    1 
 interface/web/admin/lib/lang/se_users.lng                         |    1 
 /dev/null                                                         |   12 
 interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng              |   11 
 interface/web/sites/lib/lang/pl_web_folder_user_list.lng          |    1 
 interface/web/mail/lib/lang/se_mail_user_list.lng                 |    1 
 install/dist/lib/debian60.lib.php                                 |    1 
 interface/web/sites/lib/lang/es_web_folder_user_list.lng          |    1 
 interface/web/sites/lib/lang/pt_ftp_user.lng                      |    2 
 interface/web/admin/lib/lang/pt_server_config.lng                 |   52 
 interface/web/mail/lib/lang/se_mail_spamfilter.lng                |    1 
 interface/web/mail/lib/lang/se_mail_whitelist_list.lng            |    1 
 460 files changed, 4,088 insertions(+), 719 deletions(-)

diff --git a/docs/autoinstall_samples/autoinstall.conf_sample.php b/docs/autoinstall_samples/autoinstall.conf_sample.php
new file mode 100644
index 0000000..ccd36aa
--- /dev/null
+++ b/docs/autoinstall_samples/autoinstall.conf_sample.php
@@ -0,0 +1,52 @@
+<?php
+$autoinstall['language'] = 'en'; // de, en (default)
+$autoinstall['install_mode'] = 'standard'; // standard (default), expert
+
+$autoinstall['hostname'] = 'server1.example.com'; // default
+$autoinstall['mysql_hostname'] = 'localhost'; // default: localhost
+$autoinstall['mysql_root_user'] = 'root'; // default: root
+$autoinstall['mysql_root_password'] = 'howtoforge';
+$autoinstall['mysql_database'] = 'dbispconfig'; // default: dbispcongig
+$autoinstall['mysql_charset'] = 'utf8'; // default: utf8
+$autoinstall['http_server'] = 'nginx'; // apache (default), nginx
+$autoinstall['ispconfig_port'] = '8080'; // default: 8080
+$autoinstall['ispconfig_use_ssl'] = 'y'; // y (default), n
+
+/* SSL Settings */
+$autoinstall['ssl_cert_country'] = 'AU';
+$autoinstall['ssl_cert_state'] = 'Some-State';
+$autoinstall['ssl_cert_locality'] = 'Chicago';
+$autoinstall['ssl_cert_organisation'] = 'Internet Widgits Pty Ltd';
+$autoinstall['ssl_cert_organisation_unit'] = 'IT department';
+$autoinstall['ssl_cert_common_name'] = $autoinstall['hostname'];
+
+/* optional expert mode settings, needed only for expert mode */
+$autoinstall['mysql_ispconfig_user'] = 'ispconfig'; // default: ispconfig
+$autoinstall['mysql_ispconfig_password'] = md5(uniqid(rand()));
+$autoinstall['join_multiserver_setup'] = 'n'; // y, n (default)
+$autoinstall['mysql_master_hostname'] = 'master.example.com';
+$autoinstall['mysql_master_root_user'] = 'root';
+$autoinstall['mysql_master_root_password'] = 'howtoforge';
+$autoinstall['mysql_master_database'] = 'dbispconfig'; // default: dbispconfig
+$autoinstall['configure_mail'] = 'y'; // y (default), n
+$autoinstall['configure_jailkit'] = 'y'; // y (default), n
+$autoinstall['configure_ftp'] = 'y'; // y (default), n
+$autoinstall['configure_dns'] = 'y'; // y (default), n
+$autoinstall['configure_apache'] = 'y'; // y (default), n
+$autoinstall['configure_nginx'] = 'y'; // y (default), n
+$autoinstall['configure_firewall'] = 'y'; // y (default), n
+$autoinstall['install_ispconfig_web_interface'] = 'y'; // y (default), n
+
+/* optional update settings, needed only for updates */
+$autoupdate['do_backup'] = 'yes'; // yes (default), no
+$autoupdate['mysql_root_password'] = 'howtoforge';
+$autoupdate['mysql_master_hostname'] = 'master.example.com';
+$autoupdate['mysql_master_root_user'] = 'root';
+$autoupdate['mysql_master_root_password'] = 'howtoforge';
+$autoupdate['mysql_master_database'] = 'dbispconfig'; // default: dbispconfig
+$autoupdate['reconfigure_permissions_in_master_database'] = 'no'; // no (default), yes
+$autoupdate['reconfigure_services'] = 'yes'; // yes (default), no
+$autoupdate['ispconfig_port'] = '8080'; // default: 8080
+$autoupdate['create_new_ispconfig_ssl_cert'] = 'no'; // no (default), yes
+$autoupdate['reconfigure_crontab'] = 'yes'; // yes (default), no
+?>
\ No newline at end of file
diff --git a/docs/autoinstall_samples/autoinstall.ini.sample b/docs/autoinstall_samples/autoinstall.ini.sample
new file mode 100644
index 0000000..1f4d9d7
--- /dev/null
+++ b/docs/autoinstall_samples/autoinstall.ini.sample
@@ -0,0 +1,50 @@
+[install]
+language=en
+install_mode=standard
+hostname=server1.example.com
+mysql_hostname=localhost
+mysql_root_user=root
+mysql_root_password=ispconfig
+mysql_database=dbispconfig
+mysql_charset=utf8
+http_server=apache
+ispconfig_port=8080
+ispconfig_use_ssl=y
+
+[ssl_cert]
+ssl_cert_country=AU
+ssl_cert_state=Some-State
+ssl_cert_locality=Chicago
+ssl_cert_organisation=Internet Widgits Pty Ltd
+ssl_cert_organisation_unit=IT department
+ssl_cert_common_name=server1.example.com
+
+[expert]
+mysql_ispconfig_user=ispconfig
+mysql_ispconfig_password=afStEratXBsgatRtsa42CadwhQ
+join_multiserver_setup=n
+mysql_master_hostname=master.example.com
+mysql_master_root_user=root
+mysql_master_root_password=ispconfig
+mysql_master_database=dbispconfig
+configure_mail=y
+configure_jailkit=y
+configure_ftp=y
+configure_dns=y
+configure_apache=y
+configure_nginx=y
+configure_firewall=y
+install_ispconfig_web_interface=y
+
+[update]
+do_backup=yes
+mysql_root_password=ispconfig
+mysql_master_hostname=master.example.com
+mysql_master_root_user=root
+mysql_master_root_password=ispconfig
+mysql_master_database=dbispconfig
+reconfigure_permissions_in_master_database=no
+reconfigure_services=yes
+ispconfig_port=8080
+create_new_ispconfig_ssl_cert=no
+reconfigure_crontab=yes
\ No newline at end of file
diff --git a/install/autoupdate.php b/install/autoupdate.php
deleted file mode 100644
index 8960e13..0000000
--- a/install/autoupdate.php
+++ /dev/null
@@ -1,338 +0,0 @@
-<?php
-/*
-Copyright (c) 2007-2010, Till Brehm, projektfarm Gmbh
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of ISPConfig nor the names of its contributors
-      may be used to endorse or promote products derived from this software without
-      specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
-	ISPConfig 3 updater.
-*/
-
-die("Autoupdate has been removed.\nPlease start the update on the shell with the command ispconfig_update.sh as root user.\n");
-
-error_reporting(E_ALL|E_STRICT);
-
-/*
- * If the auto-updater flag is not on (the file does not exist) then cancel the auto-update!
-*/
-if (!file_exists('autoupdate')) {
-
-	//** The banner on the command line
-	echo "\n\n".str_repeat('-', 80)."\n";
-	echo " _____ ___________   _____              __ _         ____
-|_   _/  ___| ___ \ /  __ \            / _(_)       /__  \
-  | | \ `--.| |_/ / | /  \/ ___  _ __ | |_ _  __ _    _/ /
-  | |  `--. \  __/  | |    / _ \| '_ \|  _| |/ _` |  |_ |
- _| |_/\__/ / |     | \__/\ (_) | | | | | | | (_| | ___\ \
- \___/\____/\_|      \____/\___/|_| |_|_| |_|\__, | \____/
-                                              __/ |
-                                             |___/ ";
-	echo "\n".str_repeat('-', 80)."\n";
-	echo "\n\n>>This script is for internal use only! Please use update.php!  \n\n";
-	exit;
-}
-
-//** Include the library with the basic installer functions
-require_once 'lib/install.lib.php';
-
-//** Include the library with the basic updater functions
-require_once 'lib/update.lib.php';
-
-//** Include the base class of the installer class
-require_once 'lib/installer_base.lib.php';
-
-//** Ensure that current working directory is install directory
-$cur_dir = getcwd();
-if(realpath(dirname(__FILE__)) != $cur_dir) die("Please run installation/update from _inside_ the install directory!\n");
-
-//** Install logfile
-define('ISPC_LOG_FILE', '/var/log/ispconfig_install.log');
-define('ISPC_INSTALL_ROOT', realpath(dirname(__FILE__).'/../'));
-
-//** Get distribution identifier
-$dist = get_distname();
-
-include_once "/usr/local/ispconfig/server/lib/config.inc.php";
-$conf_old = $conf;
-unset($conf);
-
-if($dist['id'] == '') die('Linux distribution or version not recognized.');
-
-//** Include the distribution-specific installer class library and configuration
-if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once 'dist/lib/'.$dist['baseid'].'.lib.php';
-include_once 'dist/lib/'.$dist['id'].'.lib.php';
-include_once 'dist/conf/'.$dist['id'].'.conf.php';
-
-//** Get hostname
-exec('hostname -f', $tmp_out);
-$conf['hostname'] = $tmp_out[0];
-unset($tmp_out);
-
-//** Set the mysql login information
-$conf["mysql"]["host"] = $conf_old["db_host"];
-$conf["mysql"]["database"] = $conf_old["db_database"];
-$conf['mysql']['charset'] = 'utf8';
-$conf["mysql"]["ispconfig_user"] = $conf_old["db_user"];
-$conf["mysql"]["ispconfig_password"] = $conf_old["db_password"];
-$conf['language'] = $conf_old['language'];
-if($conf['language'] == '{language}') $conf['language'] = 'en';
-
-if(isset($conf_old["dbmaster_host"])) $conf["mysql"]["master_host"] = $conf_old["dbmaster_host"];
-if(isset($conf_old["dbmaster_database"])) $conf["mysql"]["master_database"] = $conf_old["dbmaster_database"];
-if(isset($conf_old["dbmaster_user"])) $conf["mysql"]["master_ispconfig_user"] = $conf_old["dbmaster_user"];
-if(isset($conf_old["dbmaster_password"])) $conf["mysql"]["master_ispconfig_password"] = $conf_old["dbmaster_password"];
-
-//* Check if this is a master / slave setup
-$conf['mysql']['master_slave_setup'] = 'n';
-if($conf["mysql"]["master_host"] != '' && $conf["mysql"]["host"] != $conf["mysql"]["master_host"]) {
-	$conf['mysql']['master_slave_setup'] = 'y';
-}
-
-// Resolve the IP address of the mysql hostname.
-if(!$conf['mysql']['ip'] = gethostbyname($conf['mysql']['host'])) die('Unable to resolve hostname'.$conf['mysql']['host']);
-
-$conf['server_id'] = intval($conf_old["server_id"]);
-$conf['ispconfig_log_priority'] = $conf_old["log_priority"];
-
-$inst = new installer();
-$inst->is_update = true;
-
-//** Detect the installed applications
-$inst->find_installed_apps();
-
-//** Initialize the MySQL server connection
-include_once 'lib/mysql.lib.php';
-
-//** Database update is a bit brute force and should be rebuild later ;)
-
-/*
- * Try to read the DB-admin settings
- */
-$clientdb_host   = '';
-$clientdb_user   = '';
-$clientdb_password  = '';
-include_once "/usr/local/ispconfig/server/lib/mysql_clientdb.conf";
-$conf["mysql"]["admin_user"] = $clientdb_user;
-$conf["mysql"]["admin_password"] = $clientdb_password;
-$clientdb_host   = '';
-$clientdb_user   = '';
-$clientdb_password  = '';
-
-//** There is a error if user for mysql admin_password if empty
-if( empty($conf["mysql"]["admin_password"]) ) {
-	die("internal error - MYSQL-Root passord not known");
-}
-
-//** Test mysql root connection
-if(!@mysql_connect($conf["mysql"]["host"], $conf["mysql"]["admin_user"], $conf["mysql"]["admin_password"])) {
-	die("internal error - MYSQL-Root passord wrong");
-}
-
-/*
- *  Check all tables
-*/
-checkDbHealth();
-
-/*
- *  Prepare the dump of the database
-*/
-prepareDBDump();
-
-//* initialize the database
-$inst->db = new db();
-
-/*
- * The next line is a bit tricky!
- * At the automated update we have no connection to the master-db (we don't need it, because
- * there are only TWO points, where this is needed)
- * 1) update the rights --> the autoupdater sets the rights of all clients when the server is
- *    autoupdated)
- * 2) update the server-settings (is web installed, is mail installed) --> the autoupdates
- *    doesn't change any of this settings, so there ist no need to update this.
- * This means, the autoupdater did not need any connection to the master-db (only to the local bd
- * of the master-server). To avoid any problems, we set the master-db to the local one.
- */
-$inst->dbmaster = $inst->db;
-
-/*
- * If it is NOT a master-slave - Setup then we are at the Master-DB. So set all rights
-*/
-if($conf['mysql']['master_slave_setup'] != 'y') {
-	$inst->grant_master_database_rights(true);
-}
-
-/*
- *  dump the new Database and reconfigure the server.ini
- */
-updateDbAndIni();
-
-/*
- * Reconfigure all Services
- */
-if($conf['services']['mail'] == true) {
-	//** Configure postfix
-	swriteln('Configuring Postfix');
-	$inst->configure_postfix('dont-create-certs');
-
-	//** Configure mailman
-	if($conf['mailman']['installed'] == true) {
-		swriteln('Configuring Mailman');
-		$inst->configure_mailman('update');
-	}
-
-	//* Configure Jailkit
-	swriteln('Configuring Jailkit');
-	$inst->configure_jailkit();
-
-	if($conf['dovecot']['installed'] == true) {
-		//* Configure dovecot
-		swriteln('Configuring Dovecot');
-		$inst->configure_dovecot();
-	} else {
-		//** Configure saslauthd
-		swriteln('Configuring SASL');
-		$inst->configure_saslauthd();
-
-		//** Configure PAM
-		swriteln('Configuring PAM');
-		$inst->configure_pam();
-
-		//* Configure courier
-		swriteln('Configuring Courier');
-		$inst->configure_courier();
-	}
-
-	//** Configure Spamasassin
-	swriteln('Configuring Spamassassin');
-	$inst->configure_spamassassin();
-
-	//** Configure Amavis
-	swriteln('Configuring Amavisd');
-	$inst->configure_amavis();
-
-	//** Configure Getmail
-	swriteln('Configuring Getmail');
-	$inst->configure_getmail();
-}
-
-if($conf['services']['web'] == true) {
-	//** Configure Pureftpd
-	swriteln('Configuring Pureftpd');
-	$inst->configure_pureftpd();
-}
-
-if($conf['services']['dns'] == true) {
-	//* Configure DNS
-	if($conf['powerdns']['installed'] == true) {
-		swriteln('Configuring PowerDNS');
-		$inst->configure_powerdns();
-	} elseif($conf['bind']['installed'] == true) {
-		swriteln('Configuring BIND');
-		$inst->configure_bind();
-	} else {
-		swriteln('Configuring MyDNS');
-		$inst->configure_mydns();
-	}
-}
-
-if($conf['services']['web']) {
-	if($conf['webserver']['server_type'] == 'apache'){
-		//** Configure Apache
-		swriteln('Configuring Apache');
-		$inst->configure_apache();
-
-		//** Configure vlogger
-		swriteln('Configuring vlogger');
-		$inst->configure_vlogger();
-	} else {
-		//** Configure nginx
-		swriteln('Configuring nginx');
-		$inst->configure_nginx();
-	}
-
-	//** Configure apps vhost
-	swriteln('Configuring Apps vhost');
-	$inst->configure_apps_vhost();
-}
-
-
-//* Configure DBServer
-swriteln('Configuring Database');
-$inst->configure_dbserver();
-
-
-//if(@is_dir('/etc/Bastille')) {
-//* Configure Firewall
-swriteln('Configuring Firewall');
-$inst->configure_firewall();
-//}
-
-//** Configure ISPConfig
-swriteln('Updating ISPConfig');
-
-
-//** Customise the port ISPConfig runs on
-$conf['apache']['vhost_port'] = get_ispconfig_port_number();
-
-$inst->install_ispconfig();
-
-//** Configure Crontab
-swriteln('Updating Crontab');
-$inst->install_crontab();
-
-//** Restart services:
-swriteln('Restarting services ...');
-if($conf['mysql']['installed'] == true && $conf['mysql']['init_script'] != '') system($inst->getinitcommand($conf['mysql']['init_script'], 'reload'));
-if($conf['services']['mail']) {
-	if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart'));
-	if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart'));
-	if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart'));
-	if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart'));
-	if($conf['courier']['installed'] == true){
-		if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart'));
-		if($conf['courier']['courier-imap'] != '') system($inst->getinitcommand($conf['courier']['courier-imap'], 'restart'));
-		if($conf['courier']['courier-imap-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-imap-ssl'], 'restart'));
-		if($conf['courier']['courier-pop'] != '') system($inst->getinitcommand($conf['courier']['courier-pop'], 'restart'));
-		if($conf['courier']['courier-pop-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-pop-ssl'], 'restart'));
-	}
-	if($conf['dovecot']['installed'] == true && $conf['dovecot']['init_script'] != '') system($inst->getinitcommand($conf['dovecot']['init_script'], 'restart'));
-	if($conf['mailman']['installed'] == true && $conf['mailman']['init_script'] != '') system($inst->getinitcommand($conf['mailman']['init_script'], 'restart'));
-}
-if($conf['services']['web']) {
-	if($conf['webserver']['server_type'] == 'apache' && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
-	//* Reload is enough for nginx
-	if($conf['webserver']['server_type'] == 'nginx' && $conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'reload'));
-	if($conf['pureftpd']['installed'] == true && $conf['pureftpd']['init_script'] != '') system($inst->getinitcommand($conf['pureftpd']['init_script'], 'restart'));
-}
-if($conf['services']['dns']) {
-	if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '') system($inst->getinitcommand($conf['mydns']['init_script'], 'restart').' &> /dev/null');
-	if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '') system($inst->getinitcommand($conf['powerdns']['init_script'], 'restart').' &> /dev/null');
-	if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '') system($inst->getinitcommand($conf['bind']['init_script'], 'restart').' &> /dev/null');
-}
-
-echo "Update finished.\n";
-
-?>
diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php
index 42da878..4932723 100644
--- a/install/dist/lib/debian60.lib.php
+++ b/install/dist/lib/debian60.lib.php
@@ -111,6 +111,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		wf($config_dir.'/'.$configfile, $content);
 
 		chmod($config_dir.'/'.$configfile, 0600);
diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php
index 87fadb0..7a08f93 100644
--- a/install/dist/lib/fedora.lib.php
+++ b/install/dist/lib/fedora.lib.php
@@ -229,8 +229,13 @@
 
 		if(!stristr($options, 'dont-create-certs')) {
 			//* Create the SSL certificate
-			$command = 'cd '.$config_dir.'; '
-				.'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509';
+			if(AUTOINSTALL){
+				$command = 'cd '.$config_dir.'; '
+					."openssl req -new -subj '/C=".$autoinstall['ssl_cert_country']."/ST=".$autoinstall['ssl_cert_state']."/L=".$autoinstall['ssl_cert_locality']."/O=".$autoinstall['ssl_cert_organisation']."/OU=".$autoinstall['ssl_cert_organisation_unit']."/CN=".$autoinstall['ssl_cert_common_name']."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
+			} else {
+				$command = 'cd '.$config_dir.'; '
+					."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
+			}
 			exec($command);
 
 			$command = 'chmod o= '.$config_dir.'/smtpd.key';
@@ -445,6 +450,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		wf("$config_dir/$configfile", $content);
 
 		exec("chmod 600 $config_dir/$configfile");
diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php
index b14cffe..4200a01 100644
--- a/install/dist/lib/gentoo.lib.php
+++ b/install/dist/lib/gentoo.lib.php
@@ -119,9 +119,13 @@
 		//* Create the SSL certificate
 		if (!stristr($options, 'dont-create-certs'))
 		{
-			$command = 'cd '.$config_dir.'; '
-				.'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509';
-			exec($command);
+			if(AUTOINSTALL){
+				$command = 'cd '.$config_dir.'; '
+					."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
+			} else {
+				$command = 'cd '.$config_dir.'; '
+					.'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509';
+			}
 
 			$command = 'chmod o= '.$config_dir.'/smtpd.key';
 			caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php
index 6e6a618..f990e91 100644
--- a/install/dist/lib/opensuse.lib.php
+++ b/install/dist/lib/opensuse.lib.php
@@ -125,6 +125,7 @@
 
 		//* Create aliasaes
 		exec('/usr/lib/mailman/bin/genaliases 2>/dev/null');
+		if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman');
 	}
 
 	function configure_postfix($options = '')
@@ -256,9 +257,13 @@
 
 		if(!stristr($options, 'dont-create-certs')) {
 			//* Create the SSL certificate
-			$command = 'cd '.$config_dir.'; '
-				.'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509';
-			exec($command);
+			if(AUTOINSTALL){
+				$command = 'cd '.$config_dir.'; '
+					."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
+			} else {
+				$command = 'cd '.$config_dir.'; '
+					.'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509';
+			}
 
 			$command = 'chmod o= '.$config_dir.'/smtpd.key';
 			caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
@@ -494,6 +499,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		wf("$config_dir/$configfile", $content);
 
 		exec("chmod 600 $config_dir/$configfile");
diff --git a/install/install.php b/install/install.php
index 796b027..108ed05 100644
--- a/install/install.php
+++ b/install/install.php
@@ -30,6 +30,30 @@
 
 /*
 	ISPConfig 3 installer.
+	
+	-------------------------------------------------------------------------------------
+	- Interactive install
+	-------------------------------------------------------------------------------------
+	run:
+	
+	php install.php
+	
+	-------------------------------------------------------------------------------------
+	- Noninteractive (autoinstall) mode
+	-------------------------------------------------------------------------------------
+	
+	The autoinstall mode can read the installer questions from a .ini style file or from
+	a php config file. Examples for both file types are in the docs folder. 
+	See autoinstall.ini.sample and autoinstall.conf_sample.php.
+	
+	run:
+	
+	php install.php --autoinstall=autoinstall.ini
+	
+	or
+	
+	php install.php --autoinstall=autoinstall.conf.php
+	
 */
 
 error_reporting(E_ALL|E_STRICT);
@@ -78,6 +102,30 @@
 
 if($dist['id'] == '') die('Linux distribution or version not recognized.');
 
+//** Include the autoinstaller configuration (for non-interactive setups)
+error_reporting(E_ALL ^ E_NOTICE);
+
+//** Get commandline options
+$cmd_opt = getopt('', array('autoinstall::'));
+
+//** Load autoinstall file
+if(isset($cmd_opt['autoinstall']) && is_file($cmd_opt['autoinstall'])) {
+	$path_parts = pathinfo($cmd_opt['autoinstall']);
+	if($path_parts['extension'] == 'php') {
+		include_once $cmd_opt['autoinstall'];
+	} elseif($path_parts['extension'] == 'ini') {
+		$tmp = ini_to_array(file_get_contents('autoinstall.ini'));
+		$autoinstall = $tmp['install'] + $tmp['ssl_cert'] + $tmp['expert'] + $tmp['update'];
+		unset($tmp);
+	}
+	unset($path_parts);
+	define('AUTOINSTALL', true);
+} else {
+	$autoinstall = array();
+	define('AUTOINSTALL', false);
+}
+
+
 //** Include the distribution-specific installer class library and configuration
 if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once 'dist/lib/'.$dist['baseid'].'.lib.php';
 include_once 'dist/lib/'.$dist['id'].'.lib.php';
@@ -109,7 +157,7 @@
 $inst->find_installed_apps();
 
 //** Select the language and set default timezone
-$conf['language'] = $inst->simple_query('Select language', array('en', 'de'), 'en');
+$conf['language'] = $inst->simple_query('Select language', array('en', 'de'), 'en','language');
 $conf['timezone'] = get_system_timezone();
 
 //* Set default theme
@@ -117,13 +165,13 @@
 $conf['language_file_import_enabled'] = true;
 
 //** Select installation mode
-$install_mode = $inst->simple_query('Installation mode', array('standard', 'expert'), 'standard');
+$install_mode = $inst->simple_query('Installation mode', array('standard', 'expert'), 'standard','install_mode');
 
 
 //** Get the hostname
 $tmp_out = array();
 exec('hostname -f', $tmp_out);
-$conf['hostname'] = $inst->free_query('Full qualified hostname (FQDN) of the server, eg server1.domain.tld ', @$tmp_out[0]);
+$conf['hostname'] = $inst->free_query('Full qualified hostname (FQDN) of the server, eg server1.domain.tld ', @$tmp_out[0],'hostname');
 unset($tmp_out);
 
 // Check if the mysql functions are loaded in PHP
@@ -132,16 +180,17 @@
 //** Get MySQL root credentials
 $finished = false;
 do {
-	$tmp_mysql_server_host = $inst->free_query('MySQL server hostname', $conf['mysql']['host']);
-	$tmp_mysql_server_admin_user = $inst->free_query('MySQL root username', $conf['mysql']['admin_user']);
-	$tmp_mysql_server_admin_password = $inst->free_query('MySQL root password', $conf['mysql']['admin_password']);
-	$tmp_mysql_server_database = $inst->free_query('MySQL database to create', $conf['mysql']['database']);
-	$tmp_mysql_server_charset = $inst->free_query('MySQL charset', $conf['mysql']['charset']);
-
+	$tmp_mysql_server_host = $inst->free_query('MySQL server hostname', $conf['mysql']['host'],'mysql_hostname');	 
+	$tmp_mysql_server_admin_user = $inst->free_query('MySQL root username', $conf['mysql']['admin_user'],'mysql_root_user');	 
+	$tmp_mysql_server_admin_password = $inst->free_query('MySQL root password', $conf['mysql']['admin_password'],'mysql_root_password');	 
+	$tmp_mysql_server_database = $inst->free_query('MySQL database to create', $conf['mysql']['database'],'mysql_database');	 
+	$tmp_mysql_server_charset = $inst->free_query('MySQL charset', $conf['mysql']['charset'],'mysql_charset');
+	
 	if($install_mode == 'expert') {
 		swriteln("The next two questions are about the internal ISPConfig database user and password.\nIt is recommended to accept the defaults which are 'ispconfig' as username and a random password.\nIf you use a different password, use only numbers and chars for the password.\n");
-		$conf['mysql']['ispconfig_user'] = $inst->free_query('ISPConfig mysql database username', $conf['mysql']['ispconfig_user']);
-		$conf['mysql']['ispconfig_password'] = $inst->free_query('ISPConfig mysql database password', $conf['mysql']['ispconfig_password']);
+		
+		$conf['mysql']['ispconfig_user'] = $inst->free_query('ISPConfig mysql database username', $conf['mysql']['ispconfig_user'],'mysql_ispconfig_user');	 
+		$conf['mysql']['ispconfig_password'] = $inst->free_query('ISPConfig mysql database password', $conf['mysql']['ispconfig_password'],'mysql_ispconfig_password');
 	}
 
 	//* Initialize the MySQL server connection
@@ -176,7 +225,7 @@
 
 	//* Configure Webserver - Apache or nginx
 	if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
-		$http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache');
+		$http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
 		if($http_server_to_use == 'apache'){
 			$conf['nginx']['installed'] = false;
 		} else {
@@ -293,12 +342,12 @@
 	swriteln('Installing ISPConfig');
 
 	//** Customize the port ISPConfig runs on
-	$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080');
+	$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
 	if($conf['apache']['installed'] == true) $conf['apache']['vhost_port']  = $ispconfig_vhost_port;
 	if($conf['nginx']['installed'] == true) $conf['nginx']['vhost_port']  = $ispconfig_vhost_port;
 	unset($ispconfig_vhost_port);
 
-	if(strtolower($inst->simple_query('Do you want a secure (SSL) connection to the ISPConfig web interface', array('y', 'n'), 'y')) == 'y') {
+	if(strtolower($inst->simple_query('Do you want a secure (SSL) connection to the ISPConfig web interface', array('y', 'n'), 'y','ispconfig_use_ssl')) == 'y') {	 
 		$inst->make_ispconfig_ssl_cert();
 	}
 
@@ -354,17 +403,16 @@
 	//** Get Server ID
 	// $conf['server_id'] = $inst->free_query('Unique Numeric ID of the server','1');
 	// Server ID is an autoInc value of the mysql database now
-
-	if(strtolower($inst->simple_query('Shall this server join an existing ISPConfig multiserver setup', array('y', 'n'), 'n')) == 'y') {
+	if(strtolower($inst->simple_query('Shall this server join an existing ISPConfig multiserver setup', array('y', 'n'), 'n','join_multiserver_setup')) == 'y') {
 		$conf['mysql']['master_slave_setup'] = 'y';
 
 		//** Get MySQL root credentials
 		$finished = false;
 		do {
-			$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host']);
-			$tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user']);
-			$tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password']);
-			$tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database']);
+			$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname'); 
+			$tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user');	 
+			$tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password'); 
+			$tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database'],'mysql_master_database');
 
 			//* Initialize the MySQL server connection
 			if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
@@ -397,7 +445,7 @@
 
 	//* Configure Webserver - Apache or nginx
 	if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
-		$http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache');
+		$http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
 		if($http_server_to_use == 'apache'){
 			$conf['nginx']['installed'] = false;
 		} else {
@@ -410,8 +458,7 @@
 	swriteln('');
 	$inst->add_database_server_record();
 
-
-	if(strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y') ) == 'y') {
+	if(strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y','configure_mail') ) == 'y') {
 
 		$conf['services']['mail'] = true;
 
@@ -470,20 +517,20 @@
 	}
 
 	//** Configure Jailkit
-	if(strtolower($inst->simple_query('Configure Jailkit', array('y', 'n'), 'y') ) == 'y') {
+	if(strtolower($inst->simple_query('Configure Jailkit', array('y', 'n'), 'y','configure_jailkit') ) == 'y') {
 		swriteln('Configuring Jailkit');
 		$inst->configure_jailkit();
 	}
 
 	//** Configure Pureftpd
-	if(strtolower($inst->simple_query('Configure FTP Server', array('y', 'n'), 'y') ) == 'y') {
+	if(strtolower($inst->simple_query('Configure FTP Server', array('y', 'n'), 'y','configure_ftp') ) == 'y') {
 		swriteln('Configuring Pureftpd');
 		$inst->configure_pureftpd();
 		if($conf['pureftpd']['installed'] == true && $conf['pureftpd']['init_script'] != '') system($inst->getinitcommand($conf['pureftpd']['init_script'], 'restart'));
 	}
 
 	//** Configure DNS
-	if(strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y')) == 'y') {
+	if(strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') {
 		$conf['services']['dns'] = true;
 		//* Configure DNS
 		if($conf['powerdns']['installed'] == true) {
@@ -522,7 +569,7 @@
 	//** Configure Apache
 	if($conf['apache']['installed'] == true){
 		swriteln("\nHint: If this server shall run the ISPConfig interface, select 'y' in the 'Configure Apache Server' option.\n");
-		if(strtolower($inst->simple_query('Configure Apache Server', array('y', 'n'), 'y')) == 'y') {
+		if(strtolower($inst->simple_query('Configure Apache Server', array('y', 'n'), 'y','configure_apache')) == 'y') {
 			$conf['services']['web'] = true;
 			swriteln('Configuring Apache');
 			$inst->configure_apache();
@@ -540,7 +587,7 @@
 	//** Configure nginx
 	if($conf['nginx']['installed'] == true){
 		swriteln("\nHint: If this server shall run the ISPConfig interface, select 'y' in the 'Configure nginx Server' option.\n");
-		if(strtolower($inst->simple_query('Configure nginx Server', array('y', 'n'), 'y')) == 'y') {
+		if(strtolower($inst->simple_query('Configure nginx Server', array('y', 'n'), 'y','configure_nginx')) == 'y') {
 			$conf['services']['web'] = true;
 			swriteln('Configuring nginx');
 			$inst->configure_nginx();
@@ -556,7 +603,7 @@
 	}
 
 	//** Configure Firewall
-	if(strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y')) == 'y') {
+	if(strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y','configure_firewall')) == 'y') {
 		//if($conf['bastille']['installed'] == true) {
 		//* Configure Bastille Firewall
 		$conf['services']['firewall'] = true;
@@ -579,7 +626,7 @@
 
 	//** Configure ISPConfig :-)
 	$install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] == 'y')?'n':'y';
-	if(strtolower($inst->simple_query('Install ISPConfig Web Interface', array('y', 'n'), $install_ispconfig_interface_default)) == 'y') {
+	if(strtolower($inst->simple_query('Install ISPConfig Web Interface', array('y', 'n'), $install_ispconfig_interface_default,'install_ispconfig_web_interface')) == 'y') {
 		swriteln('Installing ISPConfig');
 
 		//** We want to check if the server is a module or cgi based php enabled server
@@ -597,12 +644,12 @@
 		*/
 
 		//** Customise the port ISPConfig runs on
-		$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080');
+		$ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
 		if($conf['apache']['installed'] == true) $conf['apache']['vhost_port']  = $ispconfig_vhost_port;
 		if($conf['nginx']['installed'] == true) $conf['nginx']['vhost_port']  = $ispconfig_vhost_port;
 		unset($ispconfig_vhost_port);
 
-		if(strtolower($inst->simple_query('Enable SSL for the ISPConfig web interface', array('y', 'n'), 'y')) == 'y') {
+		if(strtolower($inst->simple_query('Enable SSL for the ISPConfig web interface', array('y', 'n'), 'y','ispconfig_use_ssl')) == 'y') {
 			$inst->make_ispconfig_ssl_cert();
 		}
 
diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 379ae78..04205cc 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -86,6 +86,15 @@
 			$mainver = array_filter($mainver);
 			$mainver = current($mainver).'.'.next($mainver);
 			switch ($mainver){
+			case "14.04":
+				$relname = "(Trusty Tahr)";
+				break;
+			case "13.10":
+				$relname = "(Saucy Salamander)";
+				break;
+			case "13.04":
+				$relname = "(Raring Ringtail)";
+				break;
 			case "12.10":
 				$relname = "(Quantal Quetzal)";
 				break;
@@ -246,6 +255,18 @@
 			$distid = 'centos53';
 			$distbaseid = 'fedora';
 			swriteln("Operating System: CentOS 5 or compatible\n");
+		} elseif(stristr($content, 'CentOS Linux release 6')) {
+			$distname = 'CentOS';
+			$distver = 'Unknown';
+			$distid = 'centos53';
+			$distbaseid = 'fedora';
+			swriteln("Operating System: CentOS 6 or compatible\n");
+		} elseif(stristr($content, 'CentOS Linux release 7')) {
+			$distname = 'CentOS';
+			$distver = 'Unknown';
+			$distid = 'centos53';
+			$distbaseid = 'fedora';
+			swriteln("Operating System: CentOS 7 or compatible\n");
 		} else {
 			$distname = 'Redhat';
 			$distver = 'Unknown';
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 7d6348b..548cf93 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -56,12 +56,21 @@
 		echo 'WARNING: '.$msg."\n";
 	}
 
-	public function simple_query($query, $answers, $default) {
+	public function simple_query($query, $answers, $default, $name = '') {
+		global $autoinstall;
 		$finished = false;
 		do {
-			$answers_str = implode(',', $answers);
-			swrite($this->lng($query).' ('.$answers_str.') ['.$default.']: ');
-			$input = sread();
+			if($name != '' && $autoinstall[$name] != '') {
+				if($autoinstall[$name] == 'default') {
+					$input = $default;
+				} else {
+					$input = $autoinstall[$name];
+				}
+			} else {
+				$answers_str = implode(',', $answers);
+				swrite($this->lng($query).' ('.$answers_str.') ['.$default.']: ');
+				$input = sread();
+			}
 
 			//* Stop the installation
 			if($input == 'quit') {
@@ -86,9 +95,18 @@
 		return $answer;
 	}
 
-	public function free_query($query, $default) {
-		swrite($this->lng($query).' ['.$default.']: ');
-		$input = sread();
+	public function free_query($query, $default, $name = '') {
+		global $autoinstall;
+		if($name != '' && $autoinstall[$name] != '') {
+			if($autoinstall[$name] == 'default') {
+				$input = $default;
+			} else {
+				$input = $autoinstall[$name];
+			}
+		} else {
+			swrite($this->lng($query).' ['.$default.']: ');
+			$input = sread();
+		}
 
 		//* Stop the installation
 		if($input == 'quit') {
@@ -638,7 +656,7 @@
 	}
 
 	public function configure_postfix($options = '') {
-		global $conf;
+		global $conf,$autoinstall;
 		$cf = $conf['postfix'];
 		$config_dir = $cf['config_dir'];
 
@@ -750,8 +768,13 @@
 
 		if(!stristr($options, 'dont-create-certs')) {
 			//* Create the SSL certificate
-			$command = 'cd '.$config_dir.'; '
-				.'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509';
+			if(AUTOINSTALL){
+				$command = 'cd '.$config_dir.'; '
+					."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
+			} else {
+				$command = 'cd '.$config_dir.'; '
+					.'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509';
+			}
 			exec($command);
 
 			$command = 'chmod o= '.$config_dir.'/smtpd.key';
@@ -992,6 +1015,7 @@
 		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
 		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
 		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		wf($config_dir.'/'.$configfile, $content);
 
 		chmod($config_dir.'/'.$configfile, 0600);
@@ -1671,7 +1695,7 @@
 	}
 
 	public function make_ispconfig_ssl_cert() {
-		global $conf;
+		global $conf,$autoinstall;
 
 		$install_dir = $conf['ispconfig_install_dir'];
 
@@ -1683,7 +1707,11 @@
 
 		$ssl_pw = substr(md5(mt_rand()), 0, 6);
 		exec("openssl genrsa -des3 -passout pass:$ssl_pw -out $ssl_key_file 4096");
-		exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -out $ssl_csr_file");
+		if(AUTOINSTALL){
+			exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -key $ssl_key_file -out $ssl_csr_file");
+		} else {
+			exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -out $ssl_csr_file");
+		}
 		exec("openssl req -x509 -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -in $ssl_csr_file -out $ssl_crt_file -days 3650");
 		exec("openssl rsa -passin pass:$ssl_pw -in $ssl_key_file -out $ssl_key_file.insecure");
 		rename($ssl_key_file, $ssl_key_file.'.secure');
diff --git a/install/sql/incremental/upd_0078.sql b/install/sql/incremental/upd_0078.sql
new file mode 100644
index 0000000..39b8c1c
--- /dev/null
+++ b/install/sql/incremental/upd_0078.sql
@@ -0,0 +1 @@
+ALTER TABLE  `web_domain` DROP INDEX `serverdomain`, ADD UNIQUE  `serverdomain` (  `server_id` , `ip_address`, `domain` );
\ No newline at end of file
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 21c0644..ab5f795 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -897,8 +897,8 @@
   `login` varchar(255) NOT NULL default '',
   `password` varchar(255) NOT NULL default '',
   `name` varchar(255) NOT NULL default '',
-  `uid` int(11) unsigned NOT NULL default '5000',
-  `gid` int(11) unsigned NOT NULL default '5000',
+  `uid` int(11) NOT NULL default '5000',
+  `gid` int(11) NOT NULL default '5000',
   `maildir` varchar(255) NOT NULL default '',
   `quota` bigint(20) NOT NULL default '-1',
   `cc` varchar(255) NOT NULL default '',
@@ -1879,7 +1879,7 @@
   `added_date` date NOT NULL DEFAULT '0000-00-00',
   `added_by` varchar(255) DEFAULT NULL,
   PRIMARY KEY  (`domain_id`),
-  UNIQUE KEY `serverdomain` (  `server_id` ,  `domain` )
+  UNIQUE KEY `serverdomain` (  `server_id` , `ip_address`,  `domain` )
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
@@ -2292,7 +2292,7 @@
 -- Dumping data for table `sys_config`
 --
 
-INSERT INTO sys_config VALUES ('db','db_version','3.0.5.4p1');
+INSERT INTO sys_config VALUES ('db','db_version','3.0.5.4p2');
 INSERT INTO sys_config VALUES ('interface','session_timeout','0');
 
 SET FOREIGN_KEY_CHECKS = 1;
diff --git a/install/tpl/apache_ispconfig.conf.master b/install/tpl/apache_ispconfig.conf.master
index be6f637..cd9924a 100644
--- a/install/tpl/apache_ispconfig.conf.master
+++ b/install/tpl/apache_ispconfig.conf.master
@@ -3,7 +3,7 @@
 # ISPConfig Logfile configuration for vlogger
 ################################################
 
-LogFormat "%v %h %l %u %t \"%r\" %>s %B \"%{Referer}i\" \"%{User-Agent}i\"" combined_ispconfig
+LogFormat "%v %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined_ispconfig
 CustomLog "| /usr/local/ispconfig/server/scripts/vlogger -s access.log -t \"%Y%m%d-access.log\" /var/log/ispconfig/httpd" combined_ispconfig
 
 <Directory /var/www/clients>
@@ -18,6 +18,7 @@
 
 # Do not allow access to the root file system of the server for security reasons
 <Directory />
+	Options -Indexes
     AllowOverride None
 	<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 	Require all denied
diff --git a/install/tpl/apps_php_fpm_pool.conf.master b/install/tpl/apps_php_fpm_pool.conf.master
index ce6a92f..7997e9b 100644
--- a/install/tpl/apps_php_fpm_pool.conf.master
+++ b/install/tpl/apps_php_fpm_pool.conf.master
@@ -9,7 +9,7 @@
 group = {fpm_group}
 
 pm = dynamic
-pm.max_children = 50
+pm.max_children = 500
 pm.start_servers = 2
 pm.min_spare_servers = 1
 pm.max_spare_servers = 5
diff --git a/install/tpl/config.inc.php.master b/install/tpl/config.inc.php.master
index bae6061..6f40a1c 100644
--- a/install/tpl/config.inc.php.master
+++ b/install/tpl/config.inc.php.master
@@ -56,7 +56,7 @@
 
 //** Application
 define('ISPC_APP_TITLE', 'ISPConfig');
-define('ISPC_APP_VERSION', '3.0.5.4p1');
+define('ISPC_APP_VERSION', '3.0.5.4p2');
 define('DEVSYSTEM', 0);
 
 
diff --git a/install/tpl/debian6_dovecot-sql.conf.master b/install/tpl/debian6_dovecot-sql.conf.master
index 86eb4df..61f86c4 100644
--- a/install/tpl/debian6_dovecot-sql.conf.master
+++ b/install/tpl/debian6_dovecot-sql.conf.master
@@ -13,8 +13,8 @@
 connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
 default_pass_scheme = CRYPT
 
-password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n'
+password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
+user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
 
 # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
 # Do not enable it on Dovecot 1.x servers
diff --git a/install/tpl/debian_dovecot-sql.conf.master b/install/tpl/debian_dovecot-sql.conf.master
index 9c55df3..a4d5bbd 100644
--- a/install/tpl/debian_dovecot-sql.conf.master
+++ b/install/tpl/debian_dovecot-sql.conf.master
@@ -120,8 +120,8 @@
 connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
 default_pass_scheme = CRYPT
 
-password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
+password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
+user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
 
 # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
 # Do not enable it on Dovecot 1.x servers
diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master
index e17880e..4775002 100644
--- a/install/tpl/debian_postfix.conf.master
+++ b/install/tpl/debian_postfix.conf.master
@@ -1,7 +1,7 @@
 alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
 alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
 virtual_alias_domains =
-virtual_alias_maps = proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf, hash:/var/lib/mailman/data/virtual-mailman
+virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
@@ -11,7 +11,7 @@
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
-smtpd_recipient_restrictions = check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/fedora_dovecot-sql.conf.master b/install/tpl/fedora_dovecot-sql.conf.master
index faf3be2..769e0a4 100644
--- a/install/tpl/fedora_dovecot-sql.conf.master
+++ b/install/tpl/fedora_dovecot-sql.conf.master
@@ -133,8 +133,8 @@
 connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
 default_pass_scheme = CRYPT
 
-password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n'
+password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
+user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
 
 # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
 # Do not enable it on Dovecot 1.x servers
diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master
index 0911f2a..330b1f9 100644
--- a/install/tpl/fedora_postfix.conf.master
+++ b/install/tpl/fedora_postfix.conf.master
@@ -1,5 +1,5 @@
 virtual_alias_domains =
-virtual_alias_maps = proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf, hash:/etc/mailman/virtual-mailman
+virtual_alias_maps = hash:/etc/mailman/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
@@ -8,7 +8,7 @@
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
-smtpd_recipient_restrictions = check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index 90ed285..a775c4b 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -8,7 +8,7 @@
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
-smtpd_recipient_restrictions = check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/opensuse_dovecot-sql.conf.master b/install/tpl/opensuse_dovecot-sql.conf.master
index e33603a..57515af 100644
--- a/install/tpl/opensuse_dovecot-sql.conf.master
+++ b/install/tpl/opensuse_dovecot-sql.conf.master
@@ -133,8 +133,8 @@
 connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
 default_pass_scheme = CRYPT
 
-password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
-user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n'
+password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}'
+user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}'
 
 # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
 # Do not enable it on Dovecot 1.x servers
diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master
index 90ed285..7baa703 100644
--- a/install/tpl/opensuse_postfix.conf.master
+++ b/install/tpl/opensuse_postfix.conf.master
@@ -1,5 +1,7 @@
+alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
+alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
 virtual_alias_domains =
-virtual_alias_maps = proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
+virtual_alias_maps = hash:/etc/mailman/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
@@ -8,7 +10,7 @@
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
-smtpd_recipient_restrictions = check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination{rbl_list}
+smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}
 smtpd_use_tls = yes
 smtpd_tls_security_level = may
 smtpd_tls_cert_file = {config_dir}/smtpd.cert
diff --git a/install/tpl/php_fpm_pool.conf.master b/install/tpl/php_fpm_pool.conf.master
index dfa3059..9cde75a 100644
--- a/install/tpl/php_fpm_pool.conf.master
+++ b/install/tpl/php_fpm_pool.conf.master
@@ -9,7 +9,7 @@
 group = {fpm_group}
 
 pm = dynamic
-pm.max_children = 10
+pm.max_children = 500
 pm.start_servers = 2
 pm.min_spare_servers = 1
 pm.max_spare_servers = 5
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index dcac580..8af63c3 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -16,7 +16,6 @@
 admin_notify_events=1
 backup_dir=/var/backup
 backup_dir_is_mount=n
-backup_dir_mount_cmd=
 backup_mode=rootgz
 monit_url=
 monit_user=
diff --git a/install/update.php b/install/update.php
index 6a1b9d1..36eb201 100644
--- a/install/update.php
+++ b/install/update.php
@@ -30,6 +30,30 @@
 
 /*
 	ISPConfig 3 updater.
+	
+	-------------------------------------------------------------------------------------
+	- Interactive update
+	-------------------------------------------------------------------------------------
+	run:
+	
+	php update.php
+	
+	-------------------------------------------------------------------------------------
+	- Noninteractive (autoupdate) mode
+	-------------------------------------------------------------------------------------
+	
+	The autoupdate mode can read the updater questions from a .ini style file or from
+	a php config file. Examples for both file types are in the docs folder. 
+	See autoinstall.ini.sample and autoinstall.conf_sample.php.
+	
+	run:
+	
+	php update.php --autoinstall=autoinstall.ini
+	
+	or
+	
+	php update.php --autoinstall=autoinstall.conf.php
+	
 */
 
 error_reporting(E_ALL|E_STRICT);
@@ -83,6 +107,29 @@
 
 if($dist['id'] == '') die('Linux distribution or version not recognized.');
 
+//** Include the autoinstaller configuration (for non-interactive setups)
+error_reporting(E_ALL ^ E_NOTICE);
+
+//** Get commandline options
+$cmd_opt = getopt('', array('autoinstall::'));
+
+//** Load autoinstall file
+if(isset($cmd_opt['autoinstall']) && is_file($cmd_opt['autoinstall'])) {
+	$path_parts = pathinfo($cmd_opt['autoinstall']);
+	if($path_parts['extension'] == 'php') {
+		include_once $cmd_opt['autoinstall'];
+	} elseif($path_parts['extension'] == 'ini') {
+		$tmp = ini_to_array(file_get_contents('autoinstall.ini'));
+		$autoinstall = $tmp['install'] + $tmp['ssl_cert'] + $tmp['expert'] + $tmp['update'];
+		unset($tmp);
+	}
+	unset($path_parts);
+	define('AUTOINSTALL', true);
+} else {
+	$autoinstall = array();
+	define('AUTOINSTALL', false);
+}
+
 //** Include the distribution-specific installer class library and configuration
 if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once 'dist/lib/'.$dist['baseid'].'.lib.php';
 include_once 'dist/lib/'.$dist['id'].'.lib.php';
@@ -131,7 +178,8 @@
 echo "This application will update ISPConfig 3 on your server.\n\n";
 
 //* Make a backup before we start the update
-$do_backup = $inst->simple_query('Shall the script create a ISPConfig backup in /var/backup/ now?', array('yes', 'no'), 'yes');
+$do_backup = $inst->simple_query('Shall the script create a ISPConfig backup in /var/backup/ now?', array('yes', 'no'), 'yes','do_backup');
+
 if($do_backup == 'yes') {
 
 	//* Create the backup directory
@@ -180,7 +228,7 @@
 		$finished = true;
 	} else {
 		swriteln($inst->lng('Unable to connect to mysql server').' '.mysql_error());
-		$conf["mysql"]["admin_password"] = $inst->free_query('MySQL root password', $conf['mysql']['admin_password']);
+		$conf["mysql"]["admin_password"] = $inst->free_query('MySQL root password', $conf['mysql']['admin_password'],'mysql_root_password');
 	}
 } while ($finished == false);
 unset($finished);
@@ -198,10 +246,10 @@
 	//** Get MySQL root credentials
 	$finished = false;
 	do {
-		$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host']);
-		$tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user']);
-		$tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password']);
-		$tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database']);
+		$tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname');
+		$tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user');	 
+		$tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password');
+		$tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database'],'mysql_master_database');
 
 		//* Initialize the MySQL server connection
 		if(@mysql_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password)) {
@@ -244,7 +292,7 @@
  */
 //if($conf_old['dbmaster_user'] != '' or $conf_old['dbmaster_host'] != '') {
 //** Update master database rights
-$reconfigure_master_database_rights_answer = $inst->simple_query('Reconfigure Permissions in master database?', array('yes', 'no'), 'no');
+$reconfigure_master_database_rights_answer = $inst->simple_query('Reconfigure Permissions in master database?', array('yes', 'no'), 'no','reconfigure_permissions_in_master_database');
 
 if($reconfigure_master_database_rights_answer == 'yes') {
 	$inst->grant_master_database_rights();
@@ -252,7 +300,7 @@
 //}
 
 //** Shall the services be reconfigured during update
-$reconfigure_services_answer = $inst->simple_query('Reconfigure Services?', array('yes', 'no'), 'yes');
+$reconfigure_services_answer = $inst->simple_query('Reconfigure Services?', array('yes', 'no'), 'yes','reconfigure_services');
 
 if($reconfigure_services_answer == 'yes') {
 
@@ -379,15 +427,16 @@
 if ($conf['services']['web'] && $inst->install_ispconfig_interface) {
 	//** Customise the port ISPConfig runs on
 	$ispconfig_port_number = get_ispconfig_port_number();
+	if($autoupdate['ispconfig_port'] == 'default') $autoupdate['ispconfig_port'] = $ispconfig_port_number;
 	if($conf['webserver']['server_type'] == 'nginx'){
-		$conf['nginx']['vhost_port'] = $inst->free_query('ISPConfig Port', $ispconfig_port_number);
+		$conf['nginx']['vhost_port'] = $inst->free_query('ISPConfig Port', $ispconfig_port_number,'ispconfig_port');
 	} else {
-		$conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', $ispconfig_port_number);
+		$conf['apache']['vhost_port'] = $inst->free_query('ISPConfig Port', $ispconfig_port_number,'ispconfig_port');
 	}
 
 
 	// $ispconfig_ssl_default = (is_ispconfig_ssl_enabled() == true)?'y':'n';
-	if(strtolower($inst->simple_query('Create new ISPConfig SSL certificate', array('yes', 'no'), 'no')) == 'yes') {
+	if(strtolower($inst->simple_query('Create new ISPConfig SSL certificate', array('yes', 'no'), 'no','create_new_ispconfig_ssl_cert')) == 'yes') {
 		$inst->make_ispconfig_ssl_cert();
 	}
 }
@@ -395,7 +444,7 @@
 $inst->install_ispconfig();
 
 //** Configure Crontab
-$update_crontab_answer = $inst->simple_query('Reconfigure Crontab?', array('yes', 'no'), 'yes');
+$update_crontab_answer = $inst->simple_query('Reconfigure Crontab?', array('yes', 'no'), 'yes','reconfigure_crontab');
 if($update_crontab_answer == 'yes') {
 	swriteln('Updating Crontab');
 	$inst->install_crontab();
diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index 1d80b8a..8832f45 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -78,16 +78,16 @@
 					$tmp = $this->ini_parser->parse_ini_string(stripslashes($tmp['config']));
 					if(!isset($tmp['misc']['session_allow_endless']) || $tmp['misc']['session_allow_endless'] != 'y') {
 						$this->session->set_timeout($sess_timeout);
-						session_set_cookie_params(($sess_timeout * 60) + 300); // make the cookie live 5 minutes longer
+						session_set_cookie_params(3600 * 24 * 365); // cookie timeout is never updated, so it must not be short
 					} else {
 						// we are doing login here, so we need to set the session data
 						$this->session->set_permanent(true);
 						$this->session->set_timeout(365 * 24 * 3600); // one year
-						session_set_cookie_params(365 * 24 * 3600); // make the cookie live 5 minutes longer
+						session_set_cookie_params(3600 * 24 * 365); // cookie timeout is never updated, so it must not be short
 					}
 				} else {
 					$this->session->set_timeout($sess_timeout);
-					session_set_cookie_params(($sess_timeout * 60) + 300); // make the cookie live 5 minutes longer
+					session_set_cookie_params(3600 * 24 * 365); // cookie timeout is never updated, so it must not be short
 				}
 			} else {
 				session_set_cookie_params(0); // until browser is closed
diff --git a/interface/lib/classes/aps_guicontroller.inc.php b/interface/lib/classes/aps_guicontroller.inc.php
index 7c4208f..f6a0ff4 100644
--- a/interface/lib/classes/aps_guicontroller.inc.php
+++ b/interface/lib/classes/aps_guicontroller.inc.php
@@ -333,7 +333,7 @@
 		}
 
 		//* Insert new package instance
-		$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `customer_id`, `package_id`, `instance_status`) VALUES (".$app->functions->intval($websrv['sys_userid']).", ".$app->functions->intval($websrv['sys_groupid']).", 'riud', '".$app->functions->intval($websrv['sys_perm_group'])."', '', ".$app->db->quote($webserver_id).",".$app->db->quote($customerid).", ".$app->db->quote($packageid).", ".INSTANCE_PENDING.")";
+		$insert_data = "(`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_id`, `customer_id`, `package_id`, `instance_status`) VALUES (".$app->functions->intval($websrv['sys_userid']).", ".$app->functions->intval($websrv['sys_groupid']).", 'riud', '".$app->db->quote($websrv['sys_perm_group'])."', '', ".$app->db->quote($webserver_id).",".$app->db->quote($customerid).", ".$app->db->quote($packageid).", ".INSTANCE_PENDING.")";
 		$InstanceID = $app->db->datalogInsert('aps_instances', $insert_data, 'id');
 
 		//* Insert all package settings
diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php
index 706dd04..070662f 100644
--- a/interface/lib/classes/auth.inc.php
+++ b/interface/lib/classes/auth.inc.php
@@ -50,7 +50,7 @@
 
 		$userid = $app->functions->intval($userid);
 		$client = $app->db->queryOneRecord("SELECT client.limit_client FROM sys_user, client WHERE sys_user.userid = $userid AND sys_user.client_id = client.client_id");
-		if($client['limit_client'] > 0) {
+		if($client['limit_client'] != 0) {
 			return true;
 		} else {
 			return false;
diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php
index 5f62f52..8fed767 100644
--- a/interface/lib/classes/functions.inc.php
+++ b/interface/lib/classes/functions.inc.php
@@ -248,7 +248,7 @@
 		}
 
 		$ips = array();
-		$results = $app->db->queryAllRecords("SELECT ip_address AS ip, server_id FROM server_ip WHERE ip_type = '".$type."'");
+		$results = $app->db->queryAllRecords("SELECT ip_address AS ip, server_id FROM server_ip WHERE ip_type = '".$app->db->quote($type)."'");
 		if(!empty($results) && is_array($results)){
 			foreach($results as $result){
 				if(preg_match($regex, $result['ip'])){
@@ -424,6 +424,32 @@
 		return implode("\n", $domains);
 	}
 
+	public function is_allowed_user($username, $restrict_names = false) {
+		global $app;
+		
+		$name_blacklist = array('root','ispconfig','vmail','getmail');
+		if(in_array($username,$name_blacklist)) return false;
+		
+		if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $username) == false) return false;
+		
+		if($restrict_names == true && preg_match('/^web\d+$/', $username) == false) return false;
+		
+		return true;
+	}
+	
+	public function is_allowed_group($groupname, $restrict_names = false) {
+		global $app;
+		
+		$name_blacklist = array('root','ispconfig','vmail','getmail');
+		if(in_array($groupname,$name_blacklist)) return false;
+		
+		if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $groupname) == false) return false;
+		
+		if($restrict_names == true && preg_match('/^client\d+$/', $groupname) == false) return false;
+		
+		return true;
+	}
+
 }
 
 ?>
diff --git a/interface/lib/classes/listform.inc.php b/interface/lib/classes/listform.inc.php
index 14c1a13..1b613a9 100644
--- a/interface/lib/classes/listform.inc.php
+++ b/interface/lib/classes/listform.inc.php
@@ -97,6 +97,7 @@
 			$querystring = str_replace("{AUTHSQL}", $app->tform->getAuthSQL('r'), $querystring);
 			$querystring = str_replace("{AUTHSQL-A}", $app->tform->getAuthSQL('r', 'a'), $querystring);
 			$querystring = str_replace("{AUTHSQL-B}", $app->tform->getAuthSQL('r', 'b'), $querystring);
+			$querystring = preg_replace_callback('@{AUTHSQL::(.+?)}@', create_function('$matches','global $app; $tmp = $app->tform->getAuthSQL("r", $matches[1]); return $tmp;'), $querystring);
 
 			//* Getting the records
 			$tmp_records = $app->db->queryAllRecords($querystring);
@@ -248,6 +249,8 @@
 	public function getPagingSQL($sql_where = '1')
 	{
 		global $app, $conf;
+		
+		$old_search_limit = intval($_SESSION['search']['limit']);
 
 		//* Add Global Limit from selectbox
 		if(!empty($_POST['search_limit']) and $app->functions->intval($_POST['search_limit']) > 0){
@@ -272,6 +275,9 @@
 
 		//* set PAGE to worth request variable "PAGE" - ? setze page auf wert der request variablen "page"
 		if(isset($_REQUEST["page"])) $_SESSION["search"][$list_name]["page"] = $app->functions->intval($_REQUEST["page"]);
+		
+		//* Set search to changed when search limit has been changed.
+		if(intval($_SESSION['search']['limit']) != $old_search_limit) $this->searchChanged = 1;
 
 		//* PAGE to 0 set, if look for themselves ?  page auf 0 setzen, wenn suche sich ge�ndert hat.
 		if($this->searchChanged == 1) $_SESSION['search'][$list_name]['page'] = 0;
diff --git a/interface/lib/classes/session.inc.php b/interface/lib/classes/session.inc.php
index dcb187b..8b3a7cf 100644
--- a/interface/lib/classes/session.inc.php
+++ b/interface/lib/classes/session.inc.php
@@ -88,25 +88,21 @@
 		// Dont write session_data to DB if session data has not been changed after reading it.
 		if(isset($this->session_array['session_data']) && $this->session_array['session_data'] != '' && $this->session_array['session_data'] == $session_data) {
 			$session_id   = $this->db->quote($session_id);
-			$last_updated = date('Y-m-d H:i:s');
-			$this->db->query("UPDATE sys_session SET last_updated = '$last_updated' WHERE session_id = '$session_id'");
+			$this->db->query("UPDATE sys_session SET last_updated = NOW() WHERE session_id = '$session_id'");
 			return true;
 		}
 
 
 		if (@$this->session_array['session_id'] == '') {
 			$session_id   = $this->db->quote($session_id);
-			$date_created = date('Y-m-d H:i:s');
-			$last_updated = date('Y-m-d H:i:s');
 			$session_data = $this->db->quote($session_data);
-			$sql = "INSERT INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES ('$session_id','$date_created','$last_updated','$session_data','" . ($this->permanent ? 'y' : 'n') . "')";
+			$sql = "REPLACE INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES ('$session_id',NOW(),NOW(),'$session_data','" . ($this->permanent ? 'y' : 'n') . "')";
 			$this->db->query($sql);
 
 		} else {
 			$session_id   = $this->db->quote($session_id);
-			$last_updated = date('Y-m-d H:i:s');
 			$session_data = $this->db->quote($session_data);
-			$sql = "UPDATE sys_session SET last_updated = '$last_updated', session_data = '$session_data'" . ($this->permanent ? ", `permanent` = 'y'" : "") . " WHERE session_id = '$session_id'";
+			$sql = "UPDATE sys_session SET last_updated = NOW(), session_data = '$session_data'" . ($this->permanent ? ", `permanent` = 'y'" : "") . " WHERE session_id = '$session_id'";
 			$this->db->query($sql);
 
 		}
@@ -128,18 +124,11 @@
 		/*if($this->timeout > 0) {
 			$this->db->query("DELETE FROM sys_session WHERE last_updated < DATE_SUB(NOW(), INTERVAL " . intval($this->timeout) . " MINUTE)");
 		} else {*/
-			$real_now = date('Y-m-d H:i:s');
-			$dt1 = strtotime("$real_now -$max_lifetime seconds");
-			$dt2 = date('Y-m-d H:i:s', $dt1);
-
-			$sql = "DELETE FROM sys_session WHERE last_updated < '$dt2' AND `permanent` != 'y'";
+			$sql = "DELETE FROM sys_session WHERE last_updated < DATE_SUB(NOW(), INTERVAL " . intval($max_lifetime) . " SECOND) AND `permanent` != 'y'";
 			$this->db->query($sql);
 			
 			/* delete very old even if they are permanent */
-			$dt1 = strtotime("$real_now -365 days");
-			$dt2 = date('Y-m-d H:i:s', $dt1);
-
-			$sql = "DELETE FROM sys_session WHERE last_updated < '$dt2'";
+			$sql = "DELETE FROM sys_session WHERE last_updated < DATE_SUB(NOW(), INTERVAL 1 YEAR)";
 			$this->db->query($sql);
 		//}
 
diff --git a/interface/lib/classes/tform.inc.php b/interface/lib/classes/tform.inc.php
index 5fc0627..4522304 100644
--- a/interface/lib/classes/tform.inc.php
+++ b/interface/lib/classes/tform.inc.php
@@ -252,7 +252,9 @@
 			unset($tmp_recordid);
 
 			$querystring = str_replace("{AUTHSQL}", $this->getAuthSQL('r'), $querystring);
-			$querystring = preg_replace_callback('@{AUTHSQL::(.+?)}@', "self::table_auth_sql", $querystring);
+			//$querystring = preg_replace_callback('@{AUTHSQL::(.+?)}@', "self::table_auth_sql", $querystring);
+			//*Used the ld form to be compatible with php < 5.3
+			$querystring = preg_replace_callback('@{AUTHSQL::(.+?)}@', create_function('$matches','global $app; $tmp = $app->tform->getAuthSQL("r", $matches[1]); return $tmp;'), $querystring);
 
 			// Getting the records
 			$tmp_records = $app->db->queryAllRecords($querystring);
@@ -293,10 +295,12 @@
 		return $values;
 
 	}
-
+	
+	/*
 	function table_auth_sql($matches){
 		return $this->getAuthSQL('r', $matches[1]);
 	}
+	*/
 
 	//* If the parameter 'valuelimit' is set
 	function applyValueLimit($limit, $values) {
@@ -1509,7 +1513,7 @@
 	 */
 	function _getDateTimeHTML($form_element, $default_value, $display_seconds=false)
 	{
-		$_datetime = strtotime($default_value);
+		$_datetime = ($default_value && $default_value != '0000-00-00 00:00:00' ? strtotime($default_value) : false);
 		$_showdate = ($_datetime === false) ? false : true;
 
 		$dselect = array('day', 'month', 'year', 'hour', 'minute');
diff --git a/interface/lib/classes/validate_domain.inc.php b/interface/lib/classes/validate_domain.inc.php
index 988945d..d92de9b 100644
--- a/interface/lib/classes/validate_domain.inc.php
+++ b/interface/lib/classes/validate_domain.inc.php
@@ -123,156 +123,41 @@
 		}
 
 		// check if domain has alias/subdomains - if we move a web to another IP, make sure alias/subdomains are checked as well
-		$aliassubdomains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$app->functions->intval($primary_id)." AND (type = 'alias' OR type = 'subdomain')");
+		$aliassubdomains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$app->functions->intval($primary_id)." AND (type = 'alias' OR type = 'subdomain' OR type = 'vhostsubdomain')");
 		$additional_sql1 = '';
 		$additional_sql2 = '';
 		if(is_array($aliassubdomains) && !empty($aliassubdomains)){
 			foreach($aliassubdomains as $aliassubdomain){
-				$additional_sql1 .= " OR `domain` = '".$app->db->quote($aliassubdomain['domain'])."'";
-				$additional_sql2 .= " OR CONCAT(`subdomain`, '.', `domain`) = '".$app->db->quote($aliassubdomain['domain'])."'";
+				$additional_sql1 .= " OR d.domain = '".$app->db->quote($aliassubdomain['domain'])."'";
+				$additional_sql2 .= " OR CONCAT(d.subdomain, '.', d.domain) = '".$app->db->quote($aliassubdomain['domain'])."'";
 			}
 		}
-
-		//$check = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_domain` WHERE `domain` = '" . $app->db->quote($domain_name) . "' AND `domain_id` != " . $app->functions->intval($primary_id));
-		//if($check['cnt'] > 0) return false;
-
-		// we can have the same domain on different servers or different IPs, so we have to check for identical domains on the same IP (or wildcard IPs)
-		$checks = $app->db->queryAllRecords("SELECT * FROM `web_domain` WHERE (`domain` = '" . $app->db->quote($domain_name) . "'".$additional_sql1.") AND `server_id` = ".intval($domain['server_id'])." AND `domain_id` != " . $app->functions->intval($primary_id).($additional_sql1 != '' ? " AND `parent_domain_id` != ".$app->functions->intval($primary_id) : ""));
-
+		
+		
+		$qrystr = "SELECT d.domain_id, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ip_address, d.ip_address) as `ip_address`, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ipv6_address, d.ipv6_address) as `ipv6_address` FROM `web_domain` as d LEFT JOIN `web_domain` as p ON (p.domain_id = d.parent_domain_id) WHERE (d.domain = '" . $app->db->quote($domain_name) . "'" . $additional_sql1 . ") AND d.server_id = " . $app->functions->intval($domain['server_id']) . " AND d.domain_id != " . $app->functions->intval($primary_id) . ($primary_id ? " AND d.parent_domain_id != " . $app->functions->intval($primary_id) : "");
+		$checks = $app->db->queryAllRecords($qrystr);
 		if(is_array($checks) && !empty($checks)){
 			foreach($checks as $check){
 				if($domain['ip_address'] == '*') return false;
 				if($check['ip_address'] == '*') return false;
 				if($domain['ip_address'] != '' && $check['ip_address'] == $domain['ip_address']) return false;
 				if($domain['ipv6_address'] != '' && $check['ipv6_address'] == $domain['ipv6_address']) return false;
-				// if alias/subdomain: check IP addresses of parent domain
-				if($check['ip_address'] == '' || $check['ipv6_address'] == ''){
-					if($check['parent_domain_id'] > 0){
-						$check_parent_domain = $app->db->queryOneRecord("SELECT * FROM `web_domain` WHERE `domain_id` = ".$check['parent_domain_id']);
-					}
-				}
-
-				if($domain['ip_address'] == '' && $check['ip_address'] != ''){
-					if(is_array($parent_domain) && !empty($parent_domain)){
-						if($parent_domain['ip_address'] == '*') return false;
-						if($parent_domain['ip_address'] != '' && $check['ip_address'] == $parent_domain['ip_address']) return false;
-					}
-				}
-
-				if($domain['ip_address'] == '' && $check['ip_address'] == ''){
-					if($check['parent_domain_id'] > 0){
-						if(is_array($check_parent_domain) && !empty($check_parent_domain)){
-							if($check_parent_domain['ip_address'] == '*') return false;
-						}
-					}
-					if(is_array($parent_domain) && !empty($parent_domain)){
-						if($parent_domain['ip_address'] == '*') return false;
-						if($parent_domain['ip_address'] != '' && $check_parent_domain['ip_address'] == $parent_domain['ip_address']) return false;
-					}
-				}
-
-				if($check['ip_address'] == '' && $domain['ip_address'] != ''){
-					if($check['parent_domain_id'] > 0){
-						if(is_array($check_parent_domain) && !empty($check_parent_domain)){
-							if($check_parent_domain['ip_address'] == '*') return false;
-							if($check_parent_domain['ip_address'] != '' && $check_parent_domain['ip_address'] == $domain['ip_address']) return false;
-						}
-					}
-				}
-
-				if($domain['ipv6_address'] == '' && $check['ipv6_address'] != ''){
-					if(is_array($parent_domain) && !empty($parent_domain)){
-						if($parent_domain['ipv6_address'] != '' && $check['ipv6_address'] == $parent_domain['ipv6_address']) return false;
-					}
-				}
-
-				if($domain['ipv6_address'] == '' && $check['ipv6_address'] == ''){
-					if(is_array($parent_domain) && !empty($parent_domain)){
-						if($parent_domain['ipv6_address'] != '' && $check_parent_domain['ipv6_address'] == $parent_domain['ipv6_address']) return false;
-					}
-				}
-
-				if($check['ipv6_address'] == '' && $domain['ipv6_address'] != ''){
-					if($check['parent_domain_id'] > 0){
-						if(is_array($check_parent_domain) && !empty($check_parent_domain)){
-							if($check_parent_domain['ipv6_address'] != '' && $check_parent_domain['ipv6_address'] == $domain['ipv6_address']) return false;
-						}
-					}
-				}
 			}
 		}
-
-
+		
 		if($only_domain == false) {
-			//$check = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_domain` WHERE CONCAT(`subdomain`, '.', `domain`) = '" . $app->db->quote($domain_name) . "' AND `domain_id` != " . $app->functions->intval($primary_id));
-			//if($check['cnt'] > 0) return false;
-			// we can have the same domain on different servers or different IPs, so we have to check for identical domains on the same IP (or wildcard IPs)
-			$checks = $app->db->queryAllRecords("SELECT * FROM `web_domain` WHERE (CONCAT(`subdomain`, '.', `domain`) = '" . $app->db->quote($domain_name) . "'".$additional_sql2.") AND `server_id` = ".intval($domain['server_id'])." AND `domain_id` != " . $app->functions->intval($primary_id).($additional_sql2 != '' ? " AND `parent_domain_id` != ".$app->functions->intval($primary_id) : ""));
+			$qrystr = "SELECT d.domain_id, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ip_address, d.ip_address) as `ip_address`, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ipv6_address, d.ipv6_address) as `ipv6_address` FROM `web_domain` as d LEFT JOIN `web_domain` as p ON (p.domain_id = d.parent_domain_id) WHERE (CONCAT(d.subdomain, '.', d.domain)= '" . $app->db->quote($domain_name) . "'" . $additional_sql2 . ") AND d.server_id = " . $app->functions->intval($domain['server_id']) . " AND d.domain_id != " . $app->functions->intval($primary_id) . ($primary_id ? " AND d.parent_domain_id != " . $app->functions->intval($primary_id) : "");
+			$checks = $app->db->queryAllRecords($qrystr);
 			if(is_array($checks) && !empty($checks)){
 				foreach($checks as $check){
 					if($domain['ip_address'] == '*') return false;
 					if($check['ip_address'] == '*') return false;
 					if($domain['ip_address'] != '' && $check['ip_address'] == $domain['ip_address']) return false;
 					if($domain['ipv6_address'] != '' && $check['ipv6_address'] == $domain['ipv6_address']) return false;
-					// if alias/subdomain: check IP addresses of parent domain
-					if($check['ip_address'] == '' || $check['ipv6_address'] == ''){
-						if($check['parent_domain_id'] > 0){
-							$check_parent_domain = $app->db->queryOneRecord("SELECT * FROM `web_domain` WHERE `domain_id` = ".$app->functions->intval($check['parent_domain_id']));
-						}
-					}
-
-					if($domain['ip_address'] == '' && $check['ip_address'] != ''){
-						if(is_array($parent_domain) && !empty($parent_domain)){
-							if($parent_domain['ip_address'] == '*') return false;
-							if($parent_domain['ip_address'] != '' && $check['ip_address'] == $parent_domain['ip_address']) return false;
-						}
-					}
-
-					if($domain['ip_address'] == '' && $check['ip_address'] == ''){
-						if($check['parent_domain_id'] > 0){
-							if(is_array($check_parent_domain) && !empty($check_parent_domain)){
-								if($check_parent_domain['ip_address'] == '*') return false;
-							}
-						}
-						if(is_array($parent_domain) && !empty($parent_domain)){
-							if($parent_domain['ip_address'] == '*') return false;
-							if($parent_domain['ip_address'] != '' && $check_parent_domain['ip_address'] == $parent_domain['ip_address']) return false;
-						}
-					}
-
-					if($check['ip_address'] == '' && $domain['ip_address'] != ''){
-						if($check['parent_domain_id'] > 0){
-							if(is_array($check_parent_domain) && !empty($check_parent_domain)){
-								if($check_parent_domain['ip_address'] == '*') return false;
-								if($check_parent_domain['ip_address'] != '' && $check_parent_domain['ip_address'] == $domain['ip_address']) return false;
-							}
-						}
-					}
-
-					if($domain['ipv6_address'] == '' && $check['ipv6_address'] != ''){
-						if(is_array($parent_domain) && !empty($parent_domain)){
-							if($parent_domain['ipv6_address'] != '' && $check['ipv6_address'] == $parent_domain['ipv6_address']) return false;
-						}
-					}
-
-					if($domain['ipv6_address'] == '' && $check['ipv6_address'] == ''){
-						if(is_array($parent_domain) && !empty($parent_domain)){
-							if($parent_domain['ipv6_address'] != '' && $check_parent_domain['ipv6_address'] == $parent_domain['ipv6_address']) return false;
-						}
-					}
-
-					if($check['ipv6_address'] == '' && $domain['ipv6_address'] != ''){
-						if($check['parent_domain_id'] > 0){
-							if(is_array($check_parent_domain) && !empty($check_parent_domain)){
-								if($check_parent_domain['ipv6_address'] != '' && $check_parent_domain['ipv6_address'] == $domain['ipv6_address']) return false;
-							}
-						}
-					}
 				}
 			}
-
 		}
-
+		
 		return true;
 	}
 
diff --git a/interface/lib/classes/validate_password.inc.php b/interface/lib/classes/validate_password.inc.php
index 998c37c..da044c6 100644
--- a/interface/lib/classes/validate_password.inc.php
+++ b/interface/lib/classes/validate_password.inc.php
@@ -53,10 +53,11 @@
 			$different += 1;
 		}
 
-		if (preg_match('/[`~!@#$%^&*()_+|\\=-[]}{\';:\/?.>,<" ]/', $password)) {
+		if (preg_match('/[`~!@#$%^&*()_+|\\=-\[\]}{\';:\/?.>,<" ]/', $password)) {
 			$points += 1;
 			$different += 1;
 		}
+		
 
 		if ($points == 0 || $different < 3) {
 			if ($length >= 5 && $length <= 6) {
@@ -122,7 +123,7 @@
 			$lng_text = str_replace('{chars}', $min_password_length, $lng_text);
 		}
 		if(!$lng_text) $lng_text = 'weak_password_txt'; // always return a string, even if language is missing - otherwise validator is NOT MATCHING!
-		
+
 		if(strlen($field_value) < $min_password_length) return $lng_text;
 		if($this->_get_password_strength($field_value) < $min_password_strength) return $lng_text;
 		
diff --git a/interface/lib/classes/validate_systemuser.inc.php b/interface/lib/classes/validate_systemuser.inc.php
new file mode 100644
index 0000000..f1bbd2b
--- /dev/null
+++ b/interface/lib/classes/validate_systemuser.inc.php
@@ -0,0 +1,64 @@
+<?php
+
+/*
+Copyright (c) 2014, Till Brehm, projektfarm Gmbh
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class validate_systemuser {
+
+	/*
+		Validator function to check if a given user is ok.
+	*/
+	function check_sysuser($field_name, $field_value, $validator) {
+		global $app;
+		
+		$errmsg = $validator['errmsg'];
+		$check_names = (isset($validator['check_names']) && $validator['check_names'] == true)?true:false;
+
+		if($app->functions->is_allowed_user(trim(strtolower($field_value)),$check_names) == false) {
+			return $app->tform->wordbook[$errmsg]."<br>\r\n";
+		}
+	}
+	
+	/*
+		Validator function to check if a given group is ok.
+	*/
+	function check_sysgroup($field_name, $field_value, $validator) {
+		global $app;
+		
+		$errmsg = $validator['errmsg'];
+		$check_names = (isset($validator['check_names']) && $validator['check_names'] == true)?true:false;
+
+		if($app->functions->is_allowed_group(trim(strtolower($field_value)),$check_names) == false) {
+			return $app->tform->wordbook[$errmsg]."<br>\r\n";
+		}
+	}
+
+
+
+
+}
diff --git a/interface/lib/config.inc.php b/interface/lib/config.inc.php
index 7fcbfe2..179acc9 100644
--- a/interface/lib/config.inc.php
+++ b/interface/lib/config.inc.php
@@ -44,7 +44,7 @@
 
 //** Application
 define('ISPC_APP_TITLE', 'ISPConfig');
-define('ISPC_APP_VERSION', '3.0.5.4p1');
+define('ISPC_APP_VERSION', '3.0.5.4p2');
 define('DEVSYSTEM', 0);
 
 
diff --git a/interface/lib/lang/el.lng b/interface/lib/lang/el.lng
index 5f7cb70..20f26a4 100644
--- a/interface/lib/lang/el.lng
+++ b/interface/lib/lang/el.lng
@@ -145,6 +145,6 @@
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 ?>
diff --git a/interface/lib/lang/fr.lng b/interface/lib/lang/fr.lng
index f344dc3..613f2a3 100644
--- a/interface/lib/lang/fr.lng
+++ b/interface/lib/lang/fr.lng
@@ -145,6 +145,6 @@
 $wb['strength_3'] = 'Good';
 $wb['strength_4'] = 'Strong';
 $wb['strength_5'] = 'Very Strong';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \\"{strength}\\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 ?>
diff --git a/interface/lib/lang/se.lng b/interface/lib/lang/se.lng
index 5f49333..41a972f 100644
--- a/interface/lib/lang/se.lng
+++ b/interface/lib/lang/se.lng
@@ -145,7 +145,6 @@
 $wb['strength_3'] = 'Bra';
 $wb['strength_4'] = 'Starkt';
 $wb['strength_5'] = 'Väldigt starkt';
-$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of "{strength}".';
+$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
 $wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
 ?>
-
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index e115c8b..01ac568 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -126,8 +126,11 @@
 				2 => array( 'event' => 'SAVE',
 					'type' => 'TOLOWER')
 			),
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'hostname_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+												'errmsg' => 'hostname_error_empty'),
+									1 => array ('type' => 'REGEX',
+												'regex' => '/^[\w\.\-]{2,255}\.[a-zA-Z0-9\-]{2,30}$/',
+												'errmsg'=> 'hostname_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -164,8 +167,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '/var/backup',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'backup_dir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'backup_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'backup_dir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -176,14 +182,6 @@
 			'formtype' => 'CHECKBOX',
 			'default' => 'n',
 			'value' => array(0 => 'n', 1 => 'y')
-		),
-		'backup_dir_mount_cmd' => array(
-			'datatype' => 'VARCHAR',
-			'formtype' => 'TEXT',
-			'default' => '',
-			'value' => '',
-			'width' => '40',
-			'maxlength' => '255'
 		),
 		'backup_mode' => array(
 			'datatype' => 'VARCHAR',
@@ -279,8 +277,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '/home/vmail/[domain]/[localpart]/',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'maildir_path_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'maildir_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{5,128}$/',
+										'errmsg'=> 'maildir_path_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -290,8 +291,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '/home/vmail/',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'homedir_path_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'homedir_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'homedir_path_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -313,8 +317,11 @@
 			'datatype' => 'INTEGER',
 			'formtype' => 'TEXT',
 			'default' => '5000',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'mailuser_uid_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'mailuser_uid_error_empty'),
+									1 => array('type' => 'RANGE',
+										'range' => '1999:',
+										'errmsg' => 'mailuser_uid_error_range'),
 			),
 			'value' => '',
 			'width' => '10',
@@ -324,8 +331,11 @@
 			'datatype' => 'INTEGER',
 			'formtype' => 'TEXT',
 			'default' => '5000',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'mailuser_gid_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'mailuser_gid_error_empty'),
+									1 => array('type' => 'RANGE',
+										'range' => '1999:',
+										'errmsg' => 'mailuser_gid_error_range'),
 			),
 			'value' => '',
 			'width' => '10',
@@ -335,8 +345,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => 'vmail',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'mailuser_name_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'mailuser_name_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^(?!ispconfig|root)([a-zA-Z0-9]{1,20})$/',
+										'errmsg'=> 'mailuser_name_error_regex'),
 			),
 			'value' => '',
 			'width' => '10',
@@ -346,8 +359,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => 'vmail',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'mailuser_group_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'mailuser_group_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^(?!ispconfig|root)([a-zA-Z0-9]{1,20})$/',
+										'errmsg'=> 'mailuser_group_name_error_regex'),
 			),
 			'value' => '',
 			'width' => '10',
@@ -455,8 +471,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'getmail_config_dir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'getmail_config_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'getmail_config_dir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -486,8 +505,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'website_basedir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'website_basedir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'website_basedir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -497,8 +519,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'website_path_error_empty'),
+			'validators' => array(	0 => array(	'type' => 'NOTEMPTY',
+										'errmsg' => 'website_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{5,128}$/',
+										'errmsg'=> 'website_path_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -508,8 +533,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'website_symlinks_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'website_symlinks_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]\:]{5,128}$/',
+										'errmsg'=> 'website_symlinks_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -541,8 +569,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'vhost_conf_dir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'vhost_conf_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'vhost_conf_dir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -552,8 +583,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'vhost_conf_enabled_dir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'vhost_conf_enabled_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'vhost_conf_enabled_dir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -563,8 +597,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'nginx_vhost_conf_dir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'nginx_vhost_conf_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'nginx_vhost_conf_dir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -574,8 +611,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'nginx_vhost_conf_enabled_dir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'nginx_vhost_conf_enabled_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'nginx_vhost_conf_enabled_dir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -584,6 +624,10 @@
 		'CA_path' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
+			'validators' => array(	0 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/]{0,128}$/',
+										'errmsg'=> 'ca_path_error_regex'),
+			),
 			'default' => '',
 			'value' => '',
 			'width' => '40',
@@ -683,6 +727,13 @@
 			'default' => '',
 			'validators' => array(0 => array('type' => 'NOTEMPTY',
 					'errmsg' => 'apache_user_error_empty'),
+					1 => array(
+							'type' => 'CUSTOM',
+							'class' => 'validate_systemuser',
+							'function' => 'check_sysuser',
+							'check_names' => false,
+							'errmsg' => 'invalid_apache_user_txt'
+						),
 			),
 			'value' => '',
 			'width' => '40',
@@ -694,6 +745,13 @@
 			'default' => '',
 			'validators' => array(0 => array('type' => 'NOTEMPTY',
 					'errmsg' => 'apache_group_error_empty'),
+					1 => array(
+							'type' => 'CUSTOM',
+							'class' => 'validate_systemuser',
+							'function' => 'check_sysgroup',
+							'check_names' => false,
+							'errmsg' => 'invalid_apache_group_txt'
+						),
 			),
 			'value' => '',
 			'width' => '40',
@@ -720,8 +778,15 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'nginx_user_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'nginx_user_error_empty'),
+									1 => array(
+							'type' => 'CUSTOM',
+							'class' => 'validate_systemuser',
+							'function' => 'check_sysuser',
+							'check_names' => false,
+							'errmsg' => 'invalid_nginx_user_txt'
+						),
 			),
 			'value' => '',
 			'width' => '40',
@@ -731,8 +796,15 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'nginx_group_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'nginx_group_error_empty'),
+									1 => array(
+							'type' => 'CUSTOM',
+							'class' => 'validate_systemuser',
+							'function' => 'check_sysgroup',
+							'check_names' => false,
+							'errmsg' => 'invalid_nginx_group_txt'
+						),
 			),
 			'value' => '',
 			'width' => '40',
@@ -742,8 +814,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'php_ini_path_apache_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_ini_path_apache_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'php_ini_path_apache_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -753,8 +828,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'php_ini_path_cgi_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_ini_path_cgi_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'php_ini_path_cgi_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -764,8 +842,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'php_fpm_init_script_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_fpm_init_script_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_]{1,128}$/',
+										'errmsg'=> 'php_fpm_init_script_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -775,8 +856,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'php_fpm_ini_path_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_fpm_ini_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'php_fpm_ini_path_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -786,8 +870,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'php_fpm_pool_dir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_fpm_pool_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'php_fpm_pool_dir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -797,7 +884,7 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
+			'validators' => array(0 => array('type' => 'ISPOSITIVE',
 					'errmsg' => 'php_fpm_start_port_error_empty'),
 			),
 			'value' => '',
@@ -808,8 +895,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'php_fpm_socket_dir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_fpm_socket_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{5,128}$/',
+										'errmsg'=> 'php_fpm_socket_dir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -819,8 +909,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'php_open_basedir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'php_open_basedir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/\]\[\:]{1,}$/',
+										'errmsg'=> 'php_open_basedir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -830,8 +923,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'nginx_cgi_socket_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'nginx_cgi_socket_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'nginx_cgi_socket_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -841,8 +937,8 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'htaccess_allow_override_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'htaccess_allow_override_error_empty'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -889,6 +985,12 @@
 		'awstats_data_dir' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'awstats_data_dir_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'awstats_data_dir_error_regex'),
+			),
 			'default' => '',
 			'value' => '',
 			'width' => '40',
@@ -897,6 +999,12 @@
 		'awstats_pl' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'awstats_pl_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'awstats_pl_error_regex'),
+			),
 			'default' => '',
 			'value' => '',
 			'width' => '40',
@@ -905,6 +1013,12 @@
 		'awstats_buildstaticpages_pl' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'awstats_buildstaticpages_pl_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'awstats_buildstaticpages_pl_error_regex'),
+			),
 			'default' => '',
 			'value' => '',
 			'width' => '40',
@@ -928,8 +1042,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'bind_user_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'bind_user_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^(?!ispconfig)([a-zA-Z0-9]{1,20})$/',
+										'errmsg'=> 'invalid_bind_user_txt'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -939,8 +1056,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'bind_group_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'bind_group_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^(?!ispconfig)([a-zA-Z0-9]{1,20})$/',
+										'errmsg'=> 'invalid_bind_group_txt'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -950,8 +1070,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'bind_zonefiles_dir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'bind_zonefiles_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'bind_zonefiles_dir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -961,8 +1084,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'named_conf_path_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'named_conf_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'named_conf_path_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -972,8 +1098,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'named_conf_local_path_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'named_conf_local_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'named_conf_local_path_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -997,8 +1126,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'fastcgi_starter_path_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'fastcgi_starter_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
+										'errmsg'=> 'fastcgi_starter_path_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -1008,8 +1140,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'fastcgi_starter_script_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'fastcgi_starter_script_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'fastcgi_starter_script_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -1019,8 +1154,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'fastcgi_alias_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'fastcgi_alias_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'fastcgi_alias_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -1030,8 +1168,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'fastcgi_phpini_path_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'fastcgi_phpini_path_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
+										'errmsg'=> 'fastcgi_phpini_path_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -1041,7 +1182,7 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
+			'validators' => array(0 => array('type' => 'ISPOSITIVE',
 					'errmsg' => 'fastcgi_children_error_empty'),
 			),
 			'value' => '',
@@ -1066,8 +1207,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'fastcgi_bin_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'fastcgi_bin_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
+										'errmsg'=> 'fastcgi_bin_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -1100,8 +1244,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'jailkit_chroot_home_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'jailkit_chroot_home_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/\[\]]{1,128}$/',
+										'errmsg'=> 'jailkit_chroot_home_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -1111,8 +1258,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'jailkit_chroot_app_sections_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'jailkit_chroot_app_sections_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\-\_\ ]{1,128}$/',
+										'errmsg'=> 'jailkit_chroot_app_sections_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -1122,8 +1272,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'jailkit_chroot_app_programs_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'jailkit_chroot_app_programs_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/\ ]{1,}$/',
+										'errmsg'=> 'jailkit_chroot_app_programs_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -1133,8 +1286,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'jailkit_chroot_cron_programs_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'jailkit_chroot_cron_programs_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\.\-\_\/\ ]{1,}$/',
+										'errmsg'=> 'jailkit_chroot_cron_programs_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -1222,8 +1378,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'vlogger_config_dir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'vlogger_config_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'vlogger_config_dir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -1249,8 +1408,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'cron_init_script_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'cron_init_script_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^[a-zA-Z0-9\-\_]{1,30}$/',
+										'errmsg'=> 'cron_init_script_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -1260,8 +1422,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'crontab_dir_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'crontab_dir_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'crontab_dir_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
@@ -1271,8 +1436,11 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'default' => '',
-			'validators' => array(0 => array('type' => 'NOTEMPTY',
-					'errmsg' => 'cron_wget_error_empty'),
+			'validators' => array(	0 => array('type' => 'NOTEMPTY',
+										'errmsg' => 'cron_wget_error_empty'),
+									1 => array ( 	'type' => 'REGEX',
+										'regex' => '/^\/[a-zA-Z0-9\.\-\_\/]{1,128}$/',
+										'errmsg'=> 'cron_wget_error_regex'),
 			),
 			'value' => '',
 			'width' => '40',
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index ce4a0cb..c53d02b 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -449,7 +449,7 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'validators' => array ( 0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
+					'regex' => '/^[a-zA-Z0-9\-\_\[\]]{0,50}$/',
 					'errmsg'=> 'customer_no_template_error_regex'),
 			),
 			'default' => '',
diff --git a/interface/web/admin/language_edit.php b/interface/web/admin/language_edit.php
index fda70a6..8199244 100644
--- a/interface/web/admin/language_edit.php
+++ b/interface/web/admin/language_edit.php
@@ -57,7 +57,7 @@
 	$file_content = "<?php\n";
 	foreach($_POST['records'] as $key => $val) {
 		$val = stripslashes($val);
-		$val = str_replace('"', '\"', $val);
+		$val = preg_replace('/(^|[^\\\\])((\\\\\\\\)*)"/', '$1$2\\"', $val);
 		$val = str_replace('$', '', $val);
 		$file_content .= '$wb['."'$key'".'] = "'.$val.'";'."\n";
 		$msg = 'File saved.';
diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng
index 2a404c6..7f23b7d 100644
--- a/interface/web/admin/lib/lang/ar_server_config.lng
+++ b/interface/web/admin/lib/lang/ar_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng
index ef13ef5..b15c3c6 100644
--- a/interface/web/admin/lib/lang/bg_server_config.lng
+++ b/interface/web/admin/lib/lang/bg_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng
index 66bacf2..2b0dd67 100644
--- a/interface/web/admin/lib/lang/br_server_config.lng
+++ b/interface/web/admin/lib/lang/br_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng
index 41d1bf8..c2db3ba 100644
--- a/interface/web/admin/lib/lang/cz_server_config.lng
+++ b/interface/web/admin/lib/lang/cz_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Zástupný symbol';
 $wb['backup_dir_is_mount_txt'] = 'Připojit adresář pro zálohy ?';
-$wb['backup_dir_mount_cmd_txt'] = 'Příkaz připojení, pokud adresář pro zálohy není připojen .  (např. mount ...)';
 $wb['monitor_system_updates_txt'] = 'Kontrolovat aktualizace Linuxu';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 3711d4a..b040dba 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Ungültige Munin-URL';
 $wb['munin_url_note_txt'] = 'Platzhalter:';
 $wb['backup_dir_is_mount_txt'] = 'Backupverzeichnis ist ein eigener Mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount-Befehl, falls Backupverzeichnis nicht gemountet';
 $wb['monitor_system_updates_txt'] = 'Suche nach Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng
index 38da1e4..6ab52a9 100644
--- a/interface/web/admin/lib/lang/el_server_config.lng
+++ b/interface/web/admin/lib/lang/el_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/el_system_config.lng b/interface/web/admin/lib/lang/el_system_config.lng
index 41dff65..6c4f9a6 100644
--- a/interface/web/admin/lib/lang/el_system_config.lng
+++ b/interface/web/admin/lib/lang/el_system_config.lng
@@ -64,7 +64,7 @@
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 3dc1d0a..cc34e05 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -49,6 +49,7 @@
 $wb["netmask_error_wrong"] = 'Invalid Netmask format.';
 $wb["gateway_error_wrong"] = 'Invalid Gateway format.';
 $wb["hostname_error_empty"] = 'Hostname is empty.';
+$wb["hostname_error_regex"] = 'Invalid Hostname.';
 $wb["nameservers_error_empty"] = 'Nameserver is empty.';
 $wb["config_dir_txt"] = 'Config directory';
 $wb["init_script_txt"] = 'Cron init script name';
@@ -189,6 +190,55 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng
index 1942704..42aeb09 100644
--- a/interface/web/admin/lib/lang/es_server_config.lng
+++ b/interface/web/admin/lib/lang/es_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng
index a1a5c63..13ef9f3 100755
--- a/interface/web/admin/lib/lang/fi_server_config.lng
+++ b/interface/web/admin/lib/lang/fi_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng
index cee1433..d66d977 100644
--- a/interface/web/admin/lib/lang/fr_server_config.lng
+++ b/interface/web/admin/lib/lang/fr_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/fr_system_config.lng b/interface/web/admin/lib/lang/fr_system_config.lng
index 9abcd05..3c07c65 100644
--- a/interface/web/admin/lib/lang/fr_system_config.lng
+++ b/interface/web/admin/lib/lang/fr_system_config.lng
@@ -64,7 +64,7 @@
 $wb['customer_no_start_txt'] = 'Customer No. start value';
 $wb['customer_no_counter_txt'] = 'Customer No. counter';
 $wb['session_timeout_txt'] = 'Session timeout (minutes)';
-$wb['session_allow_endless_txt'] = 'Enable \"stay logged in\"';
+$wb['session_allow_endless_txt'] = 'Enable \\"stay logged in\\"';
 $wb['No'] = 'No';
 $wb['min_password_length_txt'] = 'Minimum password length';
 $wb['min_password_strength_txt'] = 'Minimum password strength';
diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng
index 39bbc2a..1b71f0b 100644
--- a/interface/web/admin/lib/lang/hr_server_config.lng
+++ b/interface/web/admin/lib/lang/hr_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng
index 178a323..4a17525 100644
--- a/interface/web/admin/lib/lang/hu_server_config.lng
+++ b/interface/web/admin/lib/lang/hu_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng
index 4ef6414..ac67571 100644
--- a/interface/web/admin/lib/lang/id_server_config.lng
+++ b/interface/web/admin/lib/lang/id_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng
index d2a6288..fac8b35 100644
--- a/interface/web/admin/lib/lang/it_server_config.lng
+++ b/interface/web/admin/lib/lang/it_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng
index 06e2bb6..110148c 100644
--- a/interface/web/admin/lib/lang/ja_server_config.lng
+++ b/interface/web/admin/lib/lang/ja_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng
index d94b567..fb97a2c 100644
--- a/interface/web/admin/lib/lang/nl_server_config.lng
+++ b/interface/web/admin/lib/lang/nl_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng
index 6d74f7d..ada9888 100644
--- a/interface/web/admin/lib/lang/pl_server_config.lng
+++ b/interface/web/admin/lib/lang/pl_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng
index b31598c..e9fcd37 100644
--- a/interface/web/admin/lib/lang/pt_server_config.lng
+++ b/interface/web/admin/lib/lang/pt_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng
index 06b78eb..078910f 100644
--- a/interface/web/admin/lib/lang/ro_server_config.lng
+++ b/interface/web/admin/lib/lang/ro_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng
index 9c8e58f..9f881ae 100644
--- a/interface/web/admin/lib/lang/ru_server_config.lng
+++ b/interface/web/admin/lib/lang/ru_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/se.lng b/interface/web/admin/lib/lang/se.lng
index 5101192..0df5d1a 100644
--- a/interface/web/admin/lib/lang/se.lng
+++ b/interface/web/admin/lib/lang/se.lng
@@ -48,4 +48,3 @@
 $wb['Do ISPConfig-Update'] = 'Utför ISPConfig-uppdatering';
 $wb['Directive Snippets'] = 'Directive Snippets';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_directive_snippets.lng b/interface/web/admin/lib/lang/se_directive_snippets.lng
index 5366bf1..0f09c12 100644
--- a/interface/web/admin/lib/lang/se_directive_snippets.lng
+++ b/interface/web/admin/lib/lang/se_directive_snippets.lng
@@ -8,4 +8,3 @@
 $wb['directive_snippets_name_error_unique'] = 'There is already a directive snippet with this name.';
 $wb['variables_txt'] = 'Variables';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_directive_snippets_list.lng b/interface/web/admin/lib/lang/se_directive_snippets_list.lng
index 3eac528..4124ea3 100644
--- a/interface/web/admin/lib/lang/se_directive_snippets_list.lng
+++ b/interface/web/admin/lib/lang/se_directive_snippets_list.lng
@@ -5,4 +5,3 @@
 $wb['type_txt'] = 'Type';
 $wb['add_new_record_txt'] = 'Add Directive Snippet';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_firewall.lng b/interface/web/admin/lib/lang/se_firewall.lng
index 4ae1ed6..123a648 100644
--- a/interface/web/admin/lib/lang/se_firewall.lng
+++ b/interface/web/admin/lib/lang/se_firewall.lng
@@ -9,4 +9,3 @@
 $wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, : and ,.';
 $wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, : and ,.';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_firewall_list.lng b/interface/web/admin/lib/lang/se_firewall_list.lng
index eff32d3..6f6f9ce 100644
--- a/interface/web/admin/lib/lang/se_firewall_list.lng
+++ b/interface/web/admin/lib/lang/se_firewall_list.lng
@@ -6,4 +6,3 @@
 $wb['udp_port_txt'] = 'Öppna UDP-portar';
 $wb['add_new_record_txt'] = 'Lägg till brandväggsinlägg';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_groups.lng b/interface/web/admin/lib/lang/se_groups.lng
index 175a422..4bb34b1 100644
--- a/interface/web/admin/lib/lang/se_groups.lng
+++ b/interface/web/admin/lib/lang/se_groups.lng
@@ -3,4 +3,3 @@
 $wb['name_txt'] = 'Grupp';
 $wb['name_err'] = 'Gruppnamnet måste ha minst 1 och max 30 tecken.';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_groups_list.lng b/interface/web/admin/lib/lang/se_groups_list.lng
index b5486da..fe3f4be 100644
--- a/interface/web/admin/lib/lang/se_groups_list.lng
+++ b/interface/web/admin/lib/lang/se_groups_list.lng
@@ -5,4 +5,3 @@
 $wb['add_new_record_txt'] = 'Lägg till ny grupp';
 $wb['warning_txt'] = '<b>VARNING:</b> Ändra inte några användarinställningar här. Use the Client- and Reseller settings in the Client module instead. Modifying or changing Users or groups here may cause data loss!';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_iptables.lng b/interface/web/admin/lib/lang/se_iptables.lng
index 7c7dbfd..b4e6bf8 100644
--- a/interface/web/admin/lib/lang/se_iptables.lng
+++ b/interface/web/admin/lib/lang/se_iptables.lng
@@ -11,4 +11,3 @@
 $wb['active_txt'] = 'Aktiv';
 $wb['iptables_error_unique'] = 'Det finns redan brandväggsinlägg för den här servern';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_iptables_list.lng b/interface/web/admin/lib/lang/se_iptables_list.lng
index 3d400b4..74a06df 100644
--- a/interface/web/admin/lib/lang/se_iptables_list.lng
+++ b/interface/web/admin/lib/lang/se_iptables_list.lng
@@ -13,4 +13,3 @@
 $wb['active_txt'] = 'Aktiv';
 $wb['iptables_error_unique'] = 'Det finns redan ett brandväggsinlägg för den här servern';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_language_add.lng b/interface/web/admin/lib/lang/se_language_add.lng
index a0607f2..59dbeee 100644
--- a/interface/web/admin/lib/lang/se_language_add.lng
+++ b/interface/web/admin/lib/lang/se_language_add.lng
@@ -6,4 +6,3 @@
 $wb['btn_cancel_txt'] = 'Tillbaka';
 $wb['language_new_hint_txt'] = '2 characters ISO 639-1 language-code (See http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_language_complete.lng b/interface/web/admin/lib/lang/se_language_complete.lng
index 9fc8458..539c956 100644
--- a/interface/web/admin/lib/lang/se_language_complete.lng
+++ b/interface/web/admin/lib/lang/se_language_complete.lng
@@ -5,4 +5,3 @@
 $wb['btn_cancel_txt'] = 'Tillbaka';
 $wb['list_desc_txt'] = 'Slå ihop språkfilen med den engelska huvudfilen. <br />Detta lägger till saknade fraser från den engelska språkfilen till den valda språkfilen';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_language_edit.lng b/interface/web/admin/lib/lang/se_language_edit.lng
index e02c9a9..076caaa 100644
--- a/interface/web/admin/lib/lang/se_language_edit.lng
+++ b/interface/web/admin/lib/lang/se_language_edit.lng
@@ -6,4 +6,3 @@
 $wb['btn_save_txt'] = 'Spara';
 $wb['btn_cancel_txt'] = 'Tillbaka';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_language_export.lng b/interface/web/admin/lib/lang/se_language_export.lng
index a4d7147..21ff513 100644
--- a/interface/web/admin/lib/lang/se_language_export.lng
+++ b/interface/web/admin/lib/lang/se_language_export.lng
@@ -4,4 +4,3 @@
 $wb['btn_save_txt'] = 'Exportera de valda språkfilerna';
 $wb['btn_cancel_txt'] = 'Tillbaka';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_language_import.lng b/interface/web/admin/lib/lang/se_language_import.lng
index 8ecca37..59af5bc 100644
--- a/interface/web/admin/lib/lang/se_language_import.lng
+++ b/interface/web/admin/lib/lang/se_language_import.lng
@@ -7,4 +7,3 @@
 $wb['ignore_version_txt'] = 'Hoppa över ISPConfig versionskontroll';
 $wb['list_desc_txt'] = 'VARNING: Importera inte språkfiler från opålitliga källor!';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_language_list.lng b/interface/web/admin/lib/lang/se_language_list.lng
index b23024d..9949044 100644
--- a/interface/web/admin/lib/lang/se_language_list.lng
+++ b/interface/web/admin/lib/lang/se_language_list.lng
@@ -5,4 +5,3 @@
 $wb['lang_file_txt'] = 'Språkfil';
 $wb['lang_file_date_txt'] = 'Senast ändrad';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_login_as.lng b/interface/web/admin/lib/lang/se_login_as.lng
deleted file mode 100644
index 284a75b..0000000
--- a/interface/web/admin/lib/lang/se_login_as.lng
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-$wb['login_1_txt'] = 'Vill du logga in som användare';
-$wb['login_2_txt'] = 'Om du gör det kan du klicka på  "gå tillbaka" genom att först klicka på logga ut.';
-$wb['btn_yes_txt'] = 'Ja, logga in som kund';
-$wb['btn_back_txt'] = 'Nej, tillbaka till listan';
-$wb['udp_port_help_txt'] = 'Kommaseparerade';
-$wb['active_txt'] = 'Aktiv';
-$wb['firewall_error_unique'] = 'Det finns redan ett brandväggsinlägg för den här servern.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, ":" and ",".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, ":" and ",".';
-?>
-
diff --git a/interface/web/admin/lib/lang/se_package_install.lng b/interface/web/admin/lib/lang/se_package_install.lng
index 438f1d8..2fb8330 100644
--- a/interface/web/admin/lib/lang/se_package_install.lng
+++ b/interface/web/admin/lib/lang/se_package_install.lng
@@ -5,4 +5,3 @@
 $wb['repo_password_txt'] = 'Lösenord (Frivilligt)';
 $wb['active_txt'] = 'Aktiv';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_remote_action.lng b/interface/web/admin/lib/lang/se_remote_action.lng
index 99d9e2c..68d2bbd 100644
--- a/interface/web/admin/lib/lang/se_remote_action.lng
+++ b/interface/web/admin/lib/lang/se_remote_action.lng
@@ -10,4 +10,3 @@
 $wb['ispconfig_update_title'] = 'ISPConfig uppdateringsinstruktioner';
 $wb['ispconfig_update_text'] = 'Logga in som root på din server och kör kommandot<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />för att påbörja ISPConfig-uppdateringen.<br /><br /><a href=http://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/ target=_blank>Klicka här för detaljerade instruktioner</a>';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_remote_user.lng b/interface/web/admin/lib/lang/se_remote_user.lng
index 5fedddc..1b3b731 100644
--- a/interface/web/admin/lib/lang/se_remote_user.lng
+++ b/interface/web/admin/lib/lang/se_remote_user.lng
@@ -45,4 +45,3 @@
 $wb['password_mismatch_txt'] = 'Lösenorden matchar inte';
 $wb['password_match_txt'] = 'Lösenorden matchar';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_remote_user_list.lng b/interface/web/admin/lib/lang/se_remote_user_list.lng
index 9f49023..152a75f 100644
--- a/interface/web/admin/lib/lang/se_remote_user_list.lng
+++ b/interface/web/admin/lib/lang/se_remote_user_list.lng
@@ -5,4 +5,3 @@
 $wb['parent_remote_userid_txt'] = 'ID';
 $wb['username_txt'] = 'Username';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_server.lng b/interface/web/admin/lib/lang/se_server.lng
index 29f32a7..54df6f2 100644
--- a/interface/web/admin/lib/lang/se_server.lng
+++ b/interface/web/admin/lib/lang/se_server.lng
@@ -13,4 +13,3 @@
 $wb['proxy_server_txt'] = 'Proxy-server';
 $wb['firewall_server_txt'] = 'Brandväggsserver';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng
index 565659e..fc5b201 100644
--- a/interface/web/admin/lib/lang/se_server_config.lng
+++ b/interface/web/admin/lib/lang/se_server_config.lng
@@ -189,7 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_server_config_list.lng b/interface/web/admin/lib/lang/se_server_config_list.lng
index 9ff7f9b..191b2c8 100644
--- a/interface/web/admin/lib/lang/se_server_config_list.lng
+++ b/interface/web/admin/lib/lang/se_server_config_list.lng
@@ -2,4 +2,3 @@
 $wb['list_head_txt'] = 'Serverkonfiguration';
 $wb['server_name_txt'] = 'Server';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_server_ip.lng b/interface/web/admin/lib/lang/se_server_ip.lng
index ad887bb..c6f92d8 100644
--- a/interface/web/admin/lib/lang/se_server_ip.lng
+++ b/interface/web/admin/lib/lang/se_server_ip.lng
@@ -9,4 +9,3 @@
 $wb['virtualhost_port_txt'] = 'HTTP-portar';
 $wb['error_port_syntax'] = 'Invalid chars in port field, please enter only comma separated numbers. Example: 80,443';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_server_ip_list.lng b/interface/web/admin/lib/lang/se_server_ip_list.lng
index 67884b3..8f20a3b 100644
--- a/interface/web/admin/lib/lang/se_server_ip_list.lng
+++ b/interface/web/admin/lib/lang/se_server_ip_list.lng
@@ -8,4 +8,3 @@
 $wb['virtualhost_port_txt'] = 'HTTP-portar';
 $wb['ip_type_txt'] = 'Typ';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_server_list.lng b/interface/web/admin/lib/lang/se_server_list.lng
index 23d6940..031ac76 100644
--- a/interface/web/admin/lib/lang/se_server_list.lng
+++ b/interface/web/admin/lib/lang/se_server_list.lng
@@ -11,4 +11,3 @@
 $wb['proxy_server_txt'] = 'Proxy';
 $wb['firewall_server_txt'] = 'Brandvägg';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_server_php.lng b/interface/web/admin/lib/lang/se_server_php.lng
index 3b6096e..addbfa4 100644
--- a/interface/web/admin/lib/lang/se_server_php.lng
+++ b/interface/web/admin/lib/lang/se_server_php.lng
@@ -14,4 +14,3 @@
 $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory';
 $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_server_php_list.lng b/interface/web/admin/lib/lang/se_server_php_list.lng
index 353e156..f5762ad 100644
--- a/interface/web/admin/lib/lang/se_server_php_list.lng
+++ b/interface/web/admin/lib/lang/se_server_php_list.lng
@@ -5,4 +5,3 @@
 $wb['client_id_txt'] = 'Kund';
 $wb['name_txt'] = 'PHP-namn';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_software_package.lng b/interface/web/admin/lib/lang/se_software_package.lng
index f06ca05..086902d 100644
--- a/interface/web/admin/lib/lang/se_software_package.lng
+++ b/interface/web/admin/lib/lang/se_software_package.lng
@@ -4,4 +4,3 @@
 $wb['Software Package'] = 'Mjukvarupaket';
 $wb['Modify software package details'] = 'Redigera mjukvarupaketets uppgifter';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_software_package_install.lng b/interface/web/admin/lib/lang/se_software_package_install.lng
index 7b0b28b..434fc4b 100644
--- a/interface/web/admin/lib/lang/se_software_package_install.lng
+++ b/interface/web/admin/lib/lang/se_software_package_install.lng
@@ -4,4 +4,3 @@
 $wb['btn_save_txt'] = 'Påbörja installation';
 $wb['btn_cancel_txt'] = 'Avbryt';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_software_package_list.lng b/interface/web/admin/lib/lang/se_software_package_list.lng
index 7762e62..c0222e1 100644
--- a/interface/web/admin/lib/lang/se_software_package_list.lng
+++ b/interface/web/admin/lib/lang/se_software_package_list.lng
@@ -11,4 +11,3 @@
 $wb['edit_txt'] = 'Redigera';
 $wb['delete_txt'] = 'Radera';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_software_repo.lng b/interface/web/admin/lib/lang/se_software_repo.lng
index db59a1b..a0e0de6 100644
--- a/interface/web/admin/lib/lang/se_software_repo.lng
+++ b/interface/web/admin/lib/lang/se_software_repo.lng
@@ -6,4 +6,3 @@
 $wb['active_txt'] = 'Aktiv';
 $wb['Software Repository which may contain addons or updates'] = 'Pragarmvarubibliotek som kan innehålla uppdateringar eller tillägg';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_software_repo_list.lng b/interface/web/admin/lib/lang/se_software_repo_list.lng
index d997091..b7a219f 100644
--- a/interface/web/admin/lib/lang/se_software_repo_list.lng
+++ b/interface/web/admin/lib/lang/se_software_repo_list.lng
@@ -4,4 +4,3 @@
 $wb['repo_name_txt'] = 'Repository';
 $wb['repo_url_txt'] = 'URL';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_software_update_list.lng b/interface/web/admin/lib/lang/se_software_update_list.lng
index 41728b2..0cf7c0e 100644
--- a/interface/web/admin/lib/lang/se_software_update_list.lng
+++ b/interface/web/admin/lib/lang/se_software_update_list.lng
@@ -7,4 +7,3 @@
 $wb['server_select_txt'] = 'Välj server';
 $wb['no_updates_txt'] = 'Inga tillgängliga uppdateringar';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_system_config.lng b/interface/web/admin/lib/lang/se_system_config.lng
index 25b3593..7e96181 100644
--- a/interface/web/admin/lib/lang/se_system_config.lng
+++ b/interface/web/admin/lib/lang/se_system_config.lng
@@ -64,9 +64,8 @@
 $wb['customer_no_start_txt'] = 'Kundnummer startvärde';
 $wb['customer_no_counter_txt'] = 'Kundnummer räknare';
 $wb['session_timeout_txt'] = 'Session timeout (minuter)';
-$wb['session_allow_endless_txt'] = 'Aktivera "håll mig inloggad"';
+$wb['session_allow_endless_txt'] = 'Aktivera \"håll mig inloggad\"';
 $wb['No'] = 'Nej';
 $wb['min_password_length_txt'] = 'Minsta lösenordslängd';
 $wb['min_password_strength_txt'] = 'Minsta lösenordsstyrka';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_tpl_default_admin.lng b/interface/web/admin/lib/lang/se_tpl_default_admin.lng
index d8989ed..8894558 100644
--- a/interface/web/admin/lib/lang/se_tpl_default_admin.lng
+++ b/interface/web/admin/lib/lang/se_tpl_default_admin.lng
@@ -16,4 +16,3 @@
 $wb['php_fpm_ini_dir_txt'] = 'Path to the php.ini directory';
 $wb['php_fpm_pool_dir_txt'] = 'Path to the PHP-FPM pool directory';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_users.lng b/interface/web/admin/lib/lang/se_users.lng
index 3acec53..9a819be 100644
--- a/interface/web/admin/lib/lang/se_users.lng
+++ b/interface/web/admin/lib/lang/se_users.lng
@@ -32,4 +32,3 @@
 $wb['username_error_collision'] = 'Användarnamnet får inte vara web  eller web och ett nummer';
 $wb['client_not_admin_err'] = 'En användare som tillhör en kund kan inte sättas som admin';
 ?>
-
diff --git a/interface/web/admin/lib/lang/se_users_list.lng b/interface/web/admin/lib/lang/se_users_list.lng
index f9ea803..a6580d3 100644
--- a/interface/web/admin/lib/lang/se_users_list.lng
+++ b/interface/web/admin/lib/lang/se_users_list.lng
@@ -7,4 +7,3 @@
 $wb['warning_txt'] = '<b>VARNING:</b> Ändra inte några användarinställningar här. Use the Client- and Reseller settings in the Client module instead. Modifying or changing Users or groups here may cause data loss!';
 $wb['groups_txt'] = 'Grupper';
 ?>
-
diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng
index de4573d..776357d 100644
--- a/interface/web/admin/lib/lang/sk_server_config.lng
+++ b/interface/web/admin/lib/lang/sk_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng
index 5b2d389..6d6e05d 100644
--- a/interface/web/admin/lib/lang/tr_server_config.lng
+++ b/interface/web/admin/lib/lang/tr_server_config.lng
@@ -189,6 +189,56 @@
 $wb['munin_url_error_regex'] = 'Invalid Munin URL';
 $wb['munin_url_note_txt'] = 'Placeholder:';
 $wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
-$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 $wb['monitor_system_updates_txt'] = 'Check for Linux updates';
+$wb['hostname_error_regex'] = 'Invalid Hostname.';
+$wb['invalid_apache_user_txt'] = 'Invalid apache user.';
+$wb['invalid_apache_group_txt'] = 'Invalid apache group.';
+$wb['backup_dir_error_regex'] = 'Invalid backup directory.';
+$wb['maildir_path_error_regex'] = 'Invalid maildir path.';
+$wb['homedir_path_error_regex'] = 'Invalid homedir path.';
+$wb['mailuser_name_error_regex'] = 'Invalid mailuser name.';
+$wb['mailuser_group_name_error_regex'] = 'Invalid mailuser group name.';
+$wb['mailuser_uid_error_range'] = 'Mailuser uid must be >= 2000';
+$wb['mailuser_gid_error_range'] = 'Mailuser gid must be >= 2000';
+$wb['getmail_config_dir_error_regex'] = 'Invalid getmail config directory.';
+$wb['website_basedir_error_regex'] = 'Invalid website basedir.';
+$wb['website_symlinks_error_regex'] = 'Invalid website symlinks.';
+$wb['vhost_conf_dir_error_regex'] = 'Invalid vhost config directory.';
+$wb['vhost_conf_enabled_dir_error_regex'] = 'Invalid vhost conf enabled directory.';
+$wb['nginx_vhost_conf_dir_error_regex'] = 'Invalid nginx config directory.';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = 'Invalid nginx conf enabled directory.';
+$wb['ca_path_error_regex'] = 'Invalid CA path.';
+$wb['invalid_nginx_user_txt'] = 'Invalid nginx user.';
+$wb['invalid_nginx_group_txt'] = 'Invalid nginx group.';
+$wb['php_ini_path_apache_error_regex'] = 'Invalid apache php.ini path.';
+$wb['php_ini_path_cgi_error_regex'] = 'Invalid cgi php.ini path.';
+$wb['php_fpm_init_script_error_regex'] = 'Invalid php-fpm init script.';
+$wb['php_fpm_ini_path_error_regex'] = 'Invalid php-fpm ini path.';
+$wb['php_fpm_pool_dir_error_regex'] = 'Invalid php-fpm pool directory.';
+$wb['php_fpm_socket_dir_error_regex'] = 'Invalid php-fpm socket directory.';
+$wb['php_open_basedir_error_regex'] = 'Invalid php open_basedir.';
+$wb['awstats_data_dir_empty'] = 'awstats data directory is empty';
+$wb['awstats_data_dir_error_regex'] = 'Invalid awstats data directory.';
+$wb['awstats_pl_empty'] = 'awstats.pl setting is empty.';
+$wb['awstats_pl_error_regex'] = 'Invalid awstats.pl path.';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl is empty';
+$wb['awstats_buildstaticpages_pl_error_regex'] = 'Invalid awstats_buildstaticpages.pl path.';
+$wb['invalid_bind_user_txt'] = 'Invalid BIND user.';
+$wb['invalid_bind_group_txt'] = 'Invalid BIND group.';
+$wb['bind_zonefiles_dir_error_regex'] = 'Invalid BIND zonefiles directory.';
+$wb['named_conf_path_error_regex'] = 'Invalid named.conf path.';
+$wb['named_conf_local_path_error_regex'] = 'Invalid named.conf.local path.';
+$wb['fastcgi_starter_path_error_regex'] = 'Invalid fastcgi starter path.';
+$wb['fastcgi_starter_script_error_regex'] = 'Invalid fastcgi starter script.';
+$wb['fastcgi_alias_error_regex'] = 'Invalid fastcgi alias.';
+$wb['fastcgi_phpini_path_error_regex'] = 'Invalid fastcgi path.';
+$wb['fastcgi_bin_error_regex'] = 'Invalid fastcgi bin.';
+$wb['jailkit_chroot_home_error_regex'] = 'Invalid jaikit chroot home.';
+$wb['jailkit_chroot_app_sections_error_regex'] = 'Invalid jaikit chroot sections.';
+$wb['jailkit_chroot_app_programs_error_regex'] = 'Invalid jaikit chroot app programs.';
+$wb['jailkit_chroot_cron_programs_error_regex'] = 'Invalid jaikit chroot cron programs.';
+$wb['vlogger_config_dir_error_regex'] = 'Invalid vlogger config dir.';
+$wb['cron_init_script_error_regex'] = 'Invalid cron init script.';
+$wb['crontab_dir_error_regex'] = 'Invalid crontab directory.';
+$wb['cron_wget_error_regex'] = 'Invalid cron wget path.';
 ?>
diff --git a/interface/web/admin/templates/server_config_server_edit.htm b/interface/web/admin/templates/server_config_server_edit.htm
index d9b703a..e5034e6 100644
--- a/interface/web/admin/templates/server_config_server_edit.htm
+++ b/interface/web/admin/templates/server_config_server_edit.htm
@@ -65,10 +65,6 @@
                     {tmpl_var name='backup_dir_is_mount'}
                 </div>
             </div>
-			<div class="ctrlHolder">
-                <label for="backup_dir_mount_cmd">{tmpl_var name='backup_dir_mount_cmd_txt'}</label>
-                <input name="backup_dir_mount_cmd" id="backup_dir_mount_cmd" value="{tmpl_var name='backup_dir_mount_cmd'}" size="40" maxlength="255" type="text" class="textInput" />
-            </div>
             <div class="ctrlHolder">
                 <label for="backup_mode">{tmpl_var name='backup_mode_txt'}</label>
                 <select name="backup_mode" id="backup_mode" class="selectInput">
diff --git a/interface/web/admin/templates/users_list.htm b/interface/web/admin/templates/users_list.htm
index dece7f8..cac25f5 100644
--- a/interface/web/admin/templates/users_list.htm
+++ b/interface/web/admin/templates/users_list.htm
@@ -44,7 +44,7 @@
                             <td class="tbl_col_groups">{tmpl_var name="groups"}</td>
                             <td class="tbl_col_buttons">
                                 <tmpl_if name="username" op="!=" value="admin">
-                                    <a class="button icons16 icoLoginAs" href="javascript: loadContent('admin/login_as.php?id={tmpl_var name='id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
+                                    <a class="button icons16 icoLoginAs" href="javascript: loadContent('login/login_as.php?cid={tmpl_var name='client_id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
                                     <a class="button icons16 icoDelete" href="javascript: del_record('admin/users_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
                                 </tmpl_if>
                             </td>
diff --git a/interface/web/client/lib/lang/el_reseller.lng b/interface/web/client/lib/lang/el_reseller.lng
index d336b3b..0c1ca59 100644
--- a/interface/web/client/lib/lang/el_reseller.lng
+++ b/interface/web/client/lib/lang/el_reseller.lng
@@ -157,5 +157,5 @@
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 ?>
diff --git a/interface/web/client/lib/lang/fr_client.lng b/interface/web/client/lib/lang/fr_client.lng
index f37d326..2de8e0a 100644
--- a/interface/web/client/lib/lang/fr_client.lng
+++ b/interface/web/client/lib/lang/fr_client.lng
@@ -139,7 +139,7 @@
 $wb['customer_no_error_unique'] = 'Le numéro client doit être unique (ou vide).';
 $wb['paypal_email_error_isemail'] = 'Saisissez un compte Paypal valide.';
 $wb['paypal_email_txt'] = 'Compte Paypal';
-$wb['err_msg_master_tpl_set'] = 'Les paramètres de limites personnalisés seront ignorés si un modèle maître autre que \"custom\" est sélectionné.';
+$wb['err_msg_master_tpl_set'] = 'Les paramètres de limites personnalisés seront ignorés si un modèle maître autre que \\"custom\\" est sélectionné.';
 $wb['aps_limits_txt'] = 'Nombre max d\'Installeur APS';
 $wb['limit_aps_txt'] = 'Nombre max d\'instances APS';
 $wb['limit_aps_error_notint'] = 'La limite d\'instances APS doit être un nombre';
diff --git a/interface/web/client/lib/lang/fr_reseller.lng b/interface/web/client/lib/lang/fr_reseller.lng
index c71020d..a4b0d62 100644
--- a/interface/web/client/lib/lang/fr_reseller.lng
+++ b/interface/web/client/lib/lang/fr_reseller.lng
@@ -157,5 +157,5 @@
 $wb['limit_domainmodule_error_notint'] = 'Domainmodule limit must be a number.';
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 ?>
diff --git a/interface/web/client/lib/lang/se.lng b/interface/web/client/lib/lang/se.lng
index 271f69d..3f396d6 100644
--- a/interface/web/client/lib/lang/se.lng
+++ b/interface/web/client/lib/lang/se.lng
@@ -24,4 +24,3 @@
 $wb['error_client_can_not_add_domain'] = 'Du kan inte lägga till en ny domän';
 $wb['error_client_group_id_empty'] = 'Du måste välja en kund<br>';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_client.lng b/interface/web/client/lib/lang/se_client.lng
index c8540a6..f633614 100644
--- a/interface/web/client/lib/lang/se_client.lng
+++ b/interface/web/client/lib/lang/se_client.lng
@@ -139,7 +139,7 @@
 $wb['customer_no_error_unique'] = 'The customer no. must be unique (or empty).';
 $wb['paypal_email_error_isemail'] = 'Please enter a valid PayPal email address.';
 $wb['paypal_email_txt'] = 'PayPal epostadress';
-$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than "custom" is selected.';
+$wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \"custom\" is selected.';
 $wb['aps_limits_txt'] = 'APS Installer Limits';
 $wb['limit_aps_txt'] = 'Max. number of APS instances';
 $wb['limit_aps_error_notint'] = 'The APS instances limit must be a number.';
@@ -154,4 +154,3 @@
 $wb['parent_client_id_txt'] = 'Kund till återförsäljare';
 $wb['none_txt'] = 'ingen';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_client_circle.lng b/interface/web/client/lib/lang/se_client_circle.lng
index f30732e..df3c995 100644
--- a/interface/web/client/lib/lang/se_client_circle.lng
+++ b/interface/web/client/lib/lang/se_client_circle.lng
@@ -7,4 +7,3 @@
 $wb['description_txt'] = 'BEskrivning';
 $wb['active_txt'] = 'Aktiv';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_client_circle_list.lng b/interface/web/client/lib/lang/se_client_circle_list.lng
index 21ae4d6..f98f551 100644
--- a/interface/web/client/lib/lang/se_client_circle_list.lng
+++ b/interface/web/client/lib/lang/se_client_circle_list.lng
@@ -8,4 +8,3 @@
 $wb['delete_txt'] = 'Radera';
 $wb['active_txt'] = 'Aktiv';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_client_del.lng b/interface/web/client/lib/lang/se_client_del.lng
index 9cf44fc..99aa9d8 100644
--- a/interface/web/client/lib/lang/se_client_del.lng
+++ b/interface/web/client/lib/lang/se_client_del.lng
@@ -5,4 +5,3 @@
 $wb['btn_cancel_txt'] = 'Avbryt utan att radera kunden';
 $wb['confirm_client_delete_txt'] = 'Är du säker på att du vill radera den här kunden?';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_client_message.lng b/interface/web/client/lib/lang/se_client_message.lng
index 625b0db..e6f9aba 100644
--- a/interface/web/client/lib/lang/se_client_message.lng
+++ b/interface/web/client/lib/lang/se_client_message.lng
@@ -18,4 +18,3 @@
 $wb['gender_m_txt'] = 'Herr';
 $wb['gender_f_txt'] = 'Fru';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_client_message_template.lng b/interface/web/client/lib/lang/se_client_message_template.lng
index 3ff9480..e406d37 100644
--- a/interface/web/client/lib/lang/se_client_message_template.lng
+++ b/interface/web/client/lib/lang/se_client_message_template.lng
@@ -9,4 +9,3 @@
 $wb['variables_description_txt'] = '(Användarnamn- och lösenordsvariablerna är endast tillgängliga i välkomstmail.)';
 $wb['duplicate_welcome_error'] = 'Det kan bara finnas en standardmall för välkomstmail. Vänligen redigera den existerande mallen istället för att lägga till en ny.';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_client_message_template_list.lng b/interface/web/client/lib/lang/se_client_message_template_list.lng
index f94a106..088d269 100644
--- a/interface/web/client/lib/lang/se_client_message_template_list.lng
+++ b/interface/web/client/lib/lang/se_client_message_template_list.lng
@@ -3,4 +3,3 @@
 $wb['template_type_txt'] = 'Meddelande till';
 $wb['template_name_txt'] = 'Mallnamn';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_client_template.lng b/interface/web/client/lib/lang/se_client_template.lng
index 12e4355..353960c 100644
--- a/interface/web/client/lib/lang/se_client_template.lng
+++ b/interface/web/client/lib/lang/se_client_template.lng
@@ -90,4 +90,3 @@
 $wb['limit_domainmodule_txt'] = 'Domainmodule Limit';
 $wb['client_limits_txt'] = 'Client Limits';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_client_template_list.lng b/interface/web/client/lib/lang/se_client_template_list.lng
index cc9d5d5..b594337 100644
--- a/interface/web/client/lib/lang/se_client_template_list.lng
+++ b/interface/web/client/lib/lang/se_client_template_list.lng
@@ -4,4 +4,3 @@
 $wb['template_name_txt'] = 'Mallnamn';
 $wb['template_id_txt'] = 'Mall-ID';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_clients_list.lng b/interface/web/client/lib/lang/se_clients_list.lng
index 89fe0ed..263912f 100644
--- a/interface/web/client/lib/lang/se_clients_list.lng
+++ b/interface/web/client/lib/lang/se_clients_list.lng
@@ -9,4 +9,3 @@
 $wb['username_txt'] = 'Användarnamn';
 $wb['customer_no_txt'] = 'Kundnummer';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_domain.lng b/interface/web/client/lib/lang/se_domain.lng
index 7d648de..df60bbe 100644
--- a/interface/web/client/lib/lang/se_domain.lng
+++ b/interface/web/client/lib/lang/se_domain.lng
@@ -4,4 +4,3 @@
 $wb['domain_error_regex'] = 'Denna domän är ogiltig';
 $wb['Domain'] = 'Domän';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_domain_list.lng b/interface/web/client/lib/lang/se_domain_list.lng
index da7504f..1262367 100644
--- a/interface/web/client/lib/lang/se_domain_list.lng
+++ b/interface/web/client/lib/lang/se_domain_list.lng
@@ -4,4 +4,3 @@
 $wb['domain_txt'] = 'Domän';
 $wb['user_txt'] = 'Kund';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_reseller.lng b/interface/web/client/lib/lang/se_reseller.lng
index de8f504..7fab36d 100644
--- a/interface/web/client/lib/lang/se_reseller.lng
+++ b/interface/web/client/lib/lang/se_reseller.lng
@@ -159,4 +159,3 @@
 $wb['client_limits_txt'] = 'Client Limits';
 $wb['err_msg_master_tpl_set'] = 'All custom limit settings are ignored if any master template other than \\"custom\\" is selected.';
 ?>
-
diff --git a/interface/web/client/lib/lang/se_resellers_list.lng b/interface/web/client/lib/lang/se_resellers_list.lng
index 3448e5c..5e03807 100644
--- a/interface/web/client/lib/lang/se_resellers_list.lng
+++ b/interface/web/client/lib/lang/se_resellers_list.lng
@@ -9,4 +9,3 @@
 $wb['customer_no_txt'] = 'Kundnummer';
 $wb['username_txt'] = 'Användarnamn';
 ?>
-
diff --git a/interface/web/dashboard/lib/lang/se.lng b/interface/web/dashboard/lib/lang/se.lng
index 11700f0..307e9e1 100644
--- a/interface/web/dashboard/lib/lang/se.lng
+++ b/interface/web/dashboard/lib/lang/se.lng
@@ -2,4 +2,3 @@
 $wb['welcome_user_txt'] = 'Välkommen %s';
 $wb['available_modules_txt'] = 'Tillgängliga moduler';
 ?>
-
diff --git a/interface/web/dashboard/lib/lang/se_dashlet_limits.lng b/interface/web/dashboard/lib/lang/se_dashlet_limits.lng
index 49473b7..9fbfe97 100644
--- a/interface/web/dashboard/lib/lang/se_dashlet_limits.lng
+++ b/interface/web/dashboard/lib/lang/se_dashlet_limits.lng
@@ -28,4 +28,3 @@
 $wb['limit_database_txt'] = 'Antal databaser';
 $wb['limit_mailmailinglist_txt'] = 'Antal mailinglistor';
 ?>
-
diff --git a/interface/web/dashboard/lib/lang/se_dashlet_mailquota.lng b/interface/web/dashboard/lib/lang/se_dashlet_mailquota.lng
index 883b2a5..1ed6f3f 100644
--- a/interface/web/dashboard/lib/lang/se_dashlet_mailquota.lng
+++ b/interface/web/dashboard/lib/lang/se_dashlet_mailquota.lng
@@ -6,4 +6,3 @@
 $wb['quota_txt'] = 'Kvot';
 $wb['no_email_accounts_txt'] = 'Inga epostkonton hittades';
 ?>
-
diff --git a/interface/web/dashboard/lib/lang/se_dashlet_modules.lng b/interface/web/dashboard/lib/lang/se_dashlet_modules.lng
index 4dff679..a6f9728 100644
--- a/interface/web/dashboard/lib/lang/se_dashlet_modules.lng
+++ b/interface/web/dashboard/lib/lang/se_dashlet_modules.lng
@@ -1,4 +1,3 @@
 <?php
 $wb['available_modules_txt'] = 'Tillgängliga moduler';
 ?>
-
diff --git a/interface/web/dashboard/lib/lang/se_dashlet_quota.lng b/interface/web/dashboard/lib/lang/se_dashlet_quota.lng
index 325b04d..7a9603b 100644
--- a/interface/web/dashboard/lib/lang/se_dashlet_quota.lng
+++ b/interface/web/dashboard/lib/lang/se_dashlet_quota.lng
@@ -6,4 +6,3 @@
 $wb['soft_txt'] = 'Mjuk gräns';
 $wb['no_sites_txt'] = 'Ingen webbsida hittades.';
 ?>
-
diff --git a/interface/web/designer/lib/lang/se.lng b/interface/web/designer/lib/lang/se.lng
index 29f4a51..acb6c35 100644
--- a/interface/web/designer/lib/lang/se.lng
+++ b/interface/web/designer/lib/lang/se.lng
@@ -1,3 +1,2 @@
 <?php
 ?>
-
diff --git a/interface/web/designer/lib/lang/se_form_edit.lng b/interface/web/designer/lib/lang/se_form_edit.lng
index 72d80e5..1a3a831 100644
--- a/interface/web/designer/lib/lang/se_form_edit.lng
+++ b/interface/web/designer/lib/lang/se_form_edit.lng
@@ -22,4 +22,3 @@
 $wb['auth_preset_perm_group_txt'] = 'Beh. Grupp';
 $wb['auth_preset_perm_other_txt'] = 'Beh. Andra';
 ?>
-
diff --git a/interface/web/designer/lib/lang/se_form_list.lng b/interface/web/designer/lib/lang/se_form_list.lng
index 7951bb7..10f4187 100644
--- a/interface/web/designer/lib/lang/se_form_list.lng
+++ b/interface/web/designer/lib/lang/se_form_list.lng
@@ -5,4 +5,3 @@
 $wb['title_txt'] = 'Titel';
 $wb['description_txt'] = 'Beskrivning';
 ?>
-
diff --git a/interface/web/designer/lib/lang/se_form_show.lng b/interface/web/designer/lib/lang/se_form_show.lng
index 1d5de49..3e21d62 100644
--- a/interface/web/designer/lib/lang/se_form_show.lng
+++ b/interface/web/designer/lib/lang/se_form_show.lng
@@ -16,4 +16,3 @@
 $wb['menu_del_txt'] = 'Ta bort meny och allt menyinnehåll?';
 $wb['item_del_txt'] = 'Ta bort menyinnehåll?';
 ?>
-
diff --git a/interface/web/designer/lib/lang/se_module_edit.lng b/interface/web/designer/lib/lang/se_module_edit.lng
index 992a074..ba828eb 100644
--- a/interface/web/designer/lib/lang/se_module_edit.lng
+++ b/interface/web/designer/lib/lang/se_module_edit.lng
@@ -10,4 +10,3 @@
 $wb['header_txt'] = 'Modulinställningar';
 $wb['description_txt'] = '<b>Description</b><br><br><b>Modulename:</b> Namn på modul mappen. Endast siffror, bokstäver och understreck är tillåtna.<br><b>Moduletitle:</b> Kommer att visas i (övre) huvud navigerigsramen.<br><b>Template file:</b> Mall fil för modulen. Just nu finns: module.tpl.htm och module_tree.tpl.htm. Standard är module.tpl.htm.<br><b>NaviFrame:</b> Om module module_tree.tpl.htm väljs som mall file, skriv här sökvägen till skriptfilen för den vänstra ramen.<br><b>Default page:</b> Dessa sidor kommer att visas när modulen öppnas.<br><b>Tab width:</b> Bredd på Flikarna i huvud navigerings ramen. Detta fält är tomt som standard. Du kan skriva in ett absolutvärde i pixlar (ex. 20) eller relativt värde (ex. 20%).<br><b>Hint:</b> Alla sökvägar är relativa till mappen web.';
 ?>
-
diff --git a/interface/web/designer/lib/lang/se_module_list.lng b/interface/web/designer/lib/lang/se_module_list.lng
index d8408e2..47ff228 100644
--- a/interface/web/designer/lib/lang/se_module_list.lng
+++ b/interface/web/designer/lib/lang/se_module_list.lng
@@ -3,4 +3,3 @@
 $wb['module_txt'] = 'Modul';
 $wb['title_txt'] = 'Titel';
 ?>
-
diff --git a/interface/web/designer/lib/lang/se_module_nav_edit.lng b/interface/web/designer/lib/lang/se_module_nav_edit.lng
index 28bf0ac..468f8d8 100644
--- a/interface/web/designer/lib/lang/se_module_nav_edit.lng
+++ b/interface/web/designer/lib/lang/se_module_nav_edit.lng
@@ -4,4 +4,3 @@
 $wb['save_txt'] = 'Spara';
 $wb['cancel_txt'] = 'Avbryt';
 ?>
-
diff --git a/interface/web/designer/lib/lang/se_module_nav_item_edit.lng b/interface/web/designer/lib/lang/se_module_nav_item_edit.lng
index b9f8639..f5df090 100644
--- a/interface/web/designer/lib/lang/se_module_nav_item_edit.lng
+++ b/interface/web/designer/lib/lang/se_module_nav_item_edit.lng
@@ -6,4 +6,3 @@
 $wb['save_txt'] = 'Spara';
 $wb['cancel_txt'] = 'Avbryt';
 ?>
-
diff --git a/interface/web/designer/lib/lang/se_module_show.lng b/interface/web/designer/lib/lang/se_module_show.lng
index 497a62d..391947c 100644
--- a/interface/web/designer/lib/lang/se_module_show.lng
+++ b/interface/web/designer/lib/lang/se_module_show.lng
@@ -14,4 +14,3 @@
 $wb['menu_del_txt'] = 'Ta bort meny och allt menyinnehåll?';
 $wb['item_del_txt'] = 'Ta bort menyinnehåll?';
 ?>
-
diff --git a/interface/web/dns/lib/lang/ar_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/ar_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/ar_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/bg_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/bg_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/bg_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/br_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/cz_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/cz_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/cz_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/de_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/de_dns_slave_admin_list.lng
new file mode 100644
index 0000000..974e214
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = 'Slave DNS-Zonen';
+$wb['active_txt'] = 'Aktiv';
+$wb['server_id_txt'] = 'Server';
+$wb['origin_txt'] = 'Zone';
+$wb['ns_txt'] = 'NS';
+$wb['add_new_record_txt'] = 'Neue Slave DNS-Zone hinzufügen';
+$wb['eg_domain_tld'] = 'Format: domain.tld.';
+$wb['sys_groupid_txt'] = 'Kunde';
+?>
diff --git a/interface/web/dns/lib/lang/de_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/de_dns_soa_admin_list.lng
new file mode 100644
index 0000000..363369c
--- /dev/null
+++ b/interface/web/dns/lib/lang/de_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb['list_head_txt'] = 'DNS Zonen';
+$wb['active_txt'] = 'Aktiv';
+$wb['server_id_txt'] = 'Server';
+$wb['origin_txt'] = 'Zone';
+$wb['ns_txt'] = 'NS';
+$wb['mbox_txt'] = 'E-Mail';
+$wb['add_new_record_txt'] = 'Neue DNS Zone (SOA) hinzufügen';
+$wb['add_new_record_wizard_txt'] = 'Neue DNS Zone per Assistent hinzufügen';
+$wb['sys_groupid_txt'] = 'Kunde';
+?>
diff --git a/interface/web/dns/lib/lang/el_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/el_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/el_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/el_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/el_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/el_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/en_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/en_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/en_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/es_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/es_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/es_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/es_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/fi_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/fi_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/fi_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/fr_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/fr_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/hr_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/hr_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/hr_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/hr_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/hu_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/hu_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/id_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/id_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/id_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/id_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/id_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/id_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/it_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/it_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/it_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ja_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/ja_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/ja_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/nl_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/nl_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/pl_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/pl_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/pl_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/pt_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/pt_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/pt_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ro_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/ro_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/ro_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ru_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/ru_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/ru_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/se.lng b/interface/web/dns/lib/lang/se.lng
index 80c3918..4f443f0 100644
--- a/interface/web/dns/lib/lang/se.lng
+++ b/interface/web/dns/lib/lang/se.lng
@@ -20,4 +20,3 @@
 $wb['Secondary Zones'] = 'Sekundära zoner';
 $wb['Import Zone File'] = 'Importera  zonfiler';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_a.lng b/interface/web/dns/lib/lang/se_dns_a.lng
index a69314d..7dcfc37 100644
--- a/interface/web/dns/lib/lang/se_dns_a.lng
+++ b/interface/web/dns/lib/lang/se_dns_a.lng
@@ -15,4 +15,3 @@
 $wb['data_error_duplicate'] = 'Duplicate A-Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_a_list.lng b/interface/web/dns/lib/lang/se_dns_a_list.lng
index b92f4c0..3fa1e7f 100644
--- a/interface/web/dns/lib/lang/se_dns_a_list.lng
+++ b/interface/web/dns/lib/lang/se_dns_a_list.lng
@@ -13,4 +13,3 @@
 $wb['page_of_txt'] = 'of';
 $wb['delete_confirmation'] = 'Do you really want to delete this record?';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_aaaa.lng b/interface/web/dns/lib/lang/se_dns_aaaa.lng
index a8cfbf1..b4c5b27 100644
--- a/interface/web/dns/lib/lang/se_dns_aaaa.lng
+++ b/interface/web/dns/lib/lang/se_dns_aaaa.lng
@@ -14,4 +14,3 @@
 $wb['data_error_regex'] = 'IP-Address format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_alias.lng b/interface/web/dns/lib/lang/se_dns_alias.lng
index 05c3f62..bd4be9f 100644
--- a/interface/web/dns/lib/lang/se_dns_alias.lng
+++ b/interface/web/dns/lib/lang/se_dns_alias.lng
@@ -14,4 +14,3 @@
 $wb['data_error_regex'] = 'Target hostname format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_cname.lng b/interface/web/dns/lib/lang/se_dns_cname.lng
index b4e8ae1..b7ceb5d 100644
--- a/interface/web/dns/lib/lang/se_dns_cname.lng
+++ b/interface/web/dns/lib/lang/se_dns_cname.lng
@@ -15,4 +15,3 @@
 $wb['data_error_duplicate'] = 'Duplicate A-Record or CNAME-Record';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_hinfo.lng b/interface/web/dns/lib/lang/se_dns_hinfo.lng
index df19a84..937bd9b 100644
--- a/interface/web/dns/lib/lang/se_dns_hinfo.lng
+++ b/interface/web/dns/lib/lang/se_dns_hinfo.lng
@@ -14,4 +14,3 @@
 $wb['data_error_regex'] = 'Host Information format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_import.lng b/interface/web/dns/lib/lang/se_dns_import.lng
index aea47ba..4d703fa 100644
--- a/interface/web/dns/lib/lang/se_dns_import.lng
+++ b/interface/web/dns/lib/lang/se_dns_import.lng
@@ -12,4 +12,3 @@
 $wb['no_file_uploaded_error'] = 'Ingen zonfil uppladdad';
 $wb['zone_file_import_txt'] = 'Zonfilsimport';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_mx.lng b/interface/web/dns/lib/lang/se_dns_mx.lng
index 0bfc234..58921d3 100644
--- a/interface/web/dns/lib/lang/se_dns_mx.lng
+++ b/interface/web/dns/lib/lang/se_dns_mx.lng
@@ -16,4 +16,3 @@
 $wb['duplicate_mx_record_txt'] = 'Duplicate MX record.';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_ns.lng b/interface/web/dns/lib/lang/se_dns_ns.lng
index 2ce51da..d8d652c 100644
--- a/interface/web/dns/lib/lang/se_dns_ns.lng
+++ b/interface/web/dns/lib/lang/se_dns_ns.lng
@@ -14,4 +14,3 @@
 $wb['data_error_regex'] = 'Namnserverformatet är ogiltigt';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_ptr.lng b/interface/web/dns/lib/lang/se_dns_ptr.lng
index 6c42a8f..254b45c 100644
--- a/interface/web/dns/lib/lang/se_dns_ptr.lng
+++ b/interface/web/dns/lib/lang/se_dns_ptr.lng
@@ -14,4 +14,3 @@
 $wb['data_error_regex'] = 'Canonical hostname format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_rp.lng b/interface/web/dns/lib/lang/se_dns_rp.lng
index e37bc8f..91c4f07 100644
--- a/interface/web/dns/lib/lang/se_dns_rp.lng
+++ b/interface/web/dns/lib/lang/se_dns_rp.lng
@@ -14,4 +14,3 @@
 $wb['data_error_regex'] = 'Responsible person field format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_slave.lng b/interface/web/dns/lib/lang/se_dns_slave.lng
index 254f360..c426df7 100644
--- a/interface/web/dns/lib/lang/se_dns_slave.lng
+++ b/interface/web/dns/lib/lang/se_dns_slave.lng
@@ -15,4 +15,3 @@
 $wb['ipv4_form_txt'] = 'IPv4 form - e.g. 1.2.3.4';
 $wb['secondary_zone_txt'] = 'Secondary DNS Zone';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/se_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/se_dns_slave_list.lng b/interface/web/dns/lib/lang/se_dns_slave_list.lng
index 6e7951d..4ced2dd 100644
--- a/interface/web/dns/lib/lang/se_dns_slave_list.lng
+++ b/interface/web/dns/lib/lang/se_dns_slave_list.lng
@@ -7,4 +7,3 @@
 $wb['add_new_record_txt'] = 'Add new secondary DNS Zone';
 $wb['eg_domain_tld'] = 'e.g. domain.tld.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_soa.lng b/interface/web/dns/lib/lang/se_dns_soa.lng
index 4f2eefa..935211a 100644
--- a/interface/web/dns/lib/lang/se_dns_soa.lng
+++ b/interface/web/dns/lib/lang/se_dns_soa.lng
@@ -36,4 +36,3 @@
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 $wb['xfer_error_regex'] = 'Also notify: Please use an IP address.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/se_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/se_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/se_dns_soa_list.lng b/interface/web/dns/lib/lang/se_dns_soa_list.lng
index b534641..da7b8e2 100644
--- a/interface/web/dns/lib/lang/se_dns_soa_list.lng
+++ b/interface/web/dns/lib/lang/se_dns_soa_list.lng
@@ -8,4 +8,3 @@
 $wb['add_new_record_txt'] = 'Add new DNS Zone (SOA)';
 $wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_srv.lng b/interface/web/dns/lib/lang/se_dns_srv.lng
index fae1b70..866f44d 100644
--- a/interface/web/dns/lib/lang/se_dns_srv.lng
+++ b/interface/web/dns/lib/lang/se_dns_srv.lng
@@ -18,4 +18,3 @@
 $wb['aux_txt'] = 'Priority';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_template.lng b/interface/web/dns/lib/lang/se_dns_template.lng
index 6fd5b5c..516d5c2 100644
--- a/interface/web/dns/lib/lang/se_dns_template.lng
+++ b/interface/web/dns/lib/lang/se_dns_template.lng
@@ -4,4 +4,3 @@
 $wb['template_txt'] = 'Mall';
 $wb['visible_txt'] = 'Synlig';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_template_list.lng b/interface/web/dns/lib/lang/se_dns_template_list.lng
index 120335f..8d9d730 100644
--- a/interface/web/dns/lib/lang/se_dns_template_list.lng
+++ b/interface/web/dns/lib/lang/se_dns_template_list.lng
@@ -4,4 +4,3 @@
 $wb['name_txt'] = 'Name';
 $wb['add_new_record_txt'] = 'Add new record';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_txt.lng b/interface/web/dns/lib/lang/se_dns_txt.lng
index 0fc9b25..31da6eb 100644
--- a/interface/web/dns/lib/lang/se_dns_txt.lng
+++ b/interface/web/dns/lib/lang/se_dns_txt.lng
@@ -14,4 +14,3 @@
 $wb['data_error_regex'] = 'Text format invalid';
 $wb['ttl_range_error'] = 'Min. TTL time is 60 seconds.';
 ?>
-
diff --git a/interface/web/dns/lib/lang/se_dns_wizard.lng b/interface/web/dns/lib/lang/se_dns_wizard.lng
index 3bb0a63..52955fd 100644
--- a/interface/web/dns/lib/lang/se_dns_wizard.lng
+++ b/interface/web/dns/lib/lang/se_dns_wizard.lng
@@ -36,4 +36,3 @@
 $wb['list_head_txt'] = 'DNS Zone Wizard';
 $wb['list_desc_txt'] = 'Create a DNS Zone via a wizard';
 ?>
-
diff --git a/interface/web/dns/lib/lang/sk_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/sk_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/sk_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/tr_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/tr_dns_slave_admin_list.lng
new file mode 100644
index 0000000..43f6778
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb["list_head_txt"] = 'Secondary DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["add_new_record_txt"] = 'Add new Secondary DNS-Zone';
+$wb['eg_domain_tld'] = 'e.g. domain.tld.';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
new file mode 100644
index 0000000..44cec90
--- /dev/null
+++ b/interface/web/dns/lib/lang/tr_dns_soa_admin_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb["list_head_txt"] = 'DNS-Zones';
+$wb["active_txt"] = 'Active';
+$wb["server_id_txt"] = 'Server';
+$wb["origin_txt"] = 'Zone';
+$wb["ns_txt"] = 'NS';
+$wb["mbox_txt"] = 'Email';
+$wb["add_new_record_wizard_txt"] = 'Add new DNS Zone with Wizard';
+$wb["add_new_record_txt"] = 'Add new DNS Zone manually';
+$wb["sys_groupid_txt"] = 'Client';
+?>
diff --git a/interface/web/dns/list/dns_slave.list.php b/interface/web/dns/list/dns_slave.list.php
index 5a242de..5c0be05 100644
--- a/interface/web/dns/list/dns_slave.list.php
+++ b/interface/web/dns/list/dns_slave.list.php
@@ -13,7 +13,11 @@
 
 
 // Name of the list
-$liste["name"]    = "dns_slave";
+if($_SESSION['s']['user']['typ'] == 'admin') {
+	$liste["name"]     = "dns_slave_admin";
+} else {
+	$liste["name"]     = "dns_slave";
+}
 
 // Database table
 $liste["table"]   = "dns_slave";
@@ -70,6 +74,22 @@
 	),
 	'width' => "",
 	'value' => "");
+	
+if($_SESSION['s']['user']['typ'] == 'admin') {
+	$liste["item"][] = array( 'field'  => "sys_groupid",
+		'datatype' => "INTEGER",
+		'formtype' => "SELECT",
+		'op'  => "=",
+		'prefix' => "",
+		'suffix' => "",
+		'datasource' => array (  'type' => 'SQL',
+			'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			'keyfield'=> 'groupid',
+			'valuefield'=> 'name'
+		),
+		'width'  => "",
+		'value'  => "");
+}
 
 $liste["item"][] = array(   'field' => "origin",
 	'datatype' => "VARCHAR",
diff --git a/interface/web/dns/list/dns_soa.list.php b/interface/web/dns/list/dns_soa.list.php
index e3b240a..d6f5641 100644
--- a/interface/web/dns/list/dns_soa.list.php
+++ b/interface/web/dns/list/dns_soa.list.php
@@ -13,7 +13,11 @@
 
 
 // Name of the list
-$liste["name"]     = "dns_soa";
+if($_SESSION['s']['user']['typ'] == 'admin') {
+	$liste["name"]     = "dns_soa_admin";
+} else {
+	$liste["name"]     = "dns_soa";
+}
 
 // Database table
 $liste["table"]    = "dns_soa";
@@ -70,6 +74,22 @@
 	),
 	'width'  => "",
 	'value'  => "");
+	
+if($_SESSION['s']['user']['typ'] == 'admin') {
+	$liste["item"][] = array( 'field'  => "sys_groupid",
+		'datatype' => "INTEGER",
+		'formtype' => "SELECT",
+		'op'  => "=",
+		'prefix' => "",
+		'suffix' => "",
+		'datasource' => array (  'type' => 'SQL',
+			'querystring' => 'SELECT groupid, name FROM sys_group WHERE groupid != 1 ORDER BY name',
+			'keyfield'=> 'groupid',
+			'valuefield'=> 'name'
+		),
+		'width'  => "",
+		'value'  => "");
+}
 
 $liste["item"][] = array( 'field'  => "origin",
 	'datatype' => "VARCHAR",
diff --git a/interface/web/dns/templates/dns_slave_admin_list.htm b/interface/web/dns/templates/dns_slave_admin_list.htm
new file mode 100644
index 0000000..d4f13ce
--- /dev/null
+++ b/interface/web/dns/templates/dns_slave_admin_list.htm
@@ -0,0 +1,83 @@
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_list_dns_slave">
+
+    <div class="pnl_toolsarea">
+        <tmpl_if name='datalog_changes_count' op='>' value='0'>
+        <div>
+            <div class="systemmonitor-state state-info">
+                <div class="status"></div>
+                <div class="statusMsg">
+                    {tmpl_var name="datalog_changes_txt"}
+                    <ul>
+                    <tmpl_loop name="datalog_changes">
+                        <li><strong>{tmpl_var name="text"}:</strong> {tmpl_var name="count"}</li>
+                    </tmpl_loop>
+                    </ul>
+                    {tmpl_var name="datalog_changes_end_txt"}
+                </div>
+            </div><br />
+        </div>
+        </tmpl_if>
+        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
+            <div class="buttons">
+                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_slave_edit.php');">
+                    <span>{tmpl_var name="add_new_record_txt"}</span>
+                </button>
+            </div>
+        </fieldset>
+    </div>
+
+    <div class="pnl_listarea">
+        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
+            <table class="list">
+                <thead>
+                <tr class="caption">
+                    <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
+					<th class="tbl_col_sys_groupid" scope="col"><tmpl_var name="sys_groupid_txt"></th>
+                    <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
+                    <th class="tbl_col_origin" scope="col"><tmpl_var name="origin_txt"></th>
+                    <th class="tbl_col_ns" scope="col"><tmpl_var name="ns_txt"></th>
+                    <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+                </tr>
+                <tr class="filter">
+                    <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
+					<td class="tbl_col_sys_groupid"><select name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
+                    <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                    <td class="tbl_col_origin"><input type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
+                    <td class="tbl_col_ns"><input type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
+                    <td class="tbl_col_buttons">
+                        <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','dns/dns_slave_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    </td>
+                </tr>
+                </thead>
+                <tbody>
+                <tmpl_loop name="records">
+                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+                        <td class="tbl_col_active"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a></td>
+						<td class="tbl_col_sys_groupid"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
+                        <td class="tbl_col_server_id"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
+                        <td class="tbl_col_origin"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="origin"}</a></td>
+                        <td class="tbl_col_ns"><a href="#" onclick="loadContent('dns/dns_slave_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ns"}</a></td>
+                        <td class="tbl_col_buttons">
+                            <a class="button icons16 icoDelete" href="javascript: del_record('dns/dns_slave_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+                        </td>
+                    </tr>
+                </tmpl_loop>
+                <tmpl_unless name="records">
+                    <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+                        <td colspan="6">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                    </tr>
+                </tmpl_unless>
+                </tbody>
+                <tfoot>
+                <tr>
+                    <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
+                </tr>
+                </tfoot>
+            </table>
+        </fieldset>
+    </div>
+
+</div>
diff --git a/interface/web/dns/templates/dns_soa_admin_list.htm b/interface/web/dns/templates/dns_soa_admin_list.htm
new file mode 100644
index 0000000..b77f884
--- /dev/null
+++ b/interface/web/dns/templates/dns_soa_admin_list.htm
@@ -0,0 +1,86 @@
+<h2><tmpl_var name="list_head_txt"></h2>
+<p><tmpl_var name="list_desc_txt"></p>
+
+<div class="panel panel_list_dns_soa">
+
+    <div class="pnl_toolsarea">
+        <tmpl_if name='datalog_changes_count' op='>' value='0'>
+        <div>
+            <div class="systemmonitor-state state-info">
+                <div class="status"></div>
+                <div class="statusMsg">
+                    {tmpl_var name="datalog_changes_txt"}
+                    <ul>
+                    <tmpl_loop name="datalog_changes">
+                        <li><strong>{tmpl_var name="text"}:</strong> {tmpl_var name="count"}</li>
+                    </tmpl_loop>
+                    </ul>
+                    {tmpl_var name="datalog_changes_end_txt"}
+                </div>
+            </div><br />
+        </div>
+        </tmpl_if>
+        <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
+            <div class="buttons">
+                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_wizard.php');"><span>{tmpl_var name="add_new_record_wizard_txt"}</span></button>
+                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_soa_edit.php');"><span>{tmpl_var name="add_new_record_txt"}</span></button>
+                <button class="button iconstxt icoAdd" type="button" onclick="loadContent('dns/dns_import.php');"><span>Import Zone File</span></button>
+            </div>
+        </fieldset>
+    </div>
+
+    <div class="pnl_listarea">
+        <fieldset><legend><tmpl_var name="list_head_txt"></legend>
+            <table class="list">
+            <thead>
+                <tr class="caption">
+                    <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
+					<th class="tbl_col_sys_groupid" scope="col"><tmpl_var name="sys_groupid_txt"></th>
+                    <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
+                    <th class="tbl_col_origin" scope="col"><tmpl_var name="origin_txt"></th>
+                    <th class="tbl_col_ns" scope="col"><tmpl_var name="ns_txt"></th>
+                    <th class="tbl_col_mbox" scope="col"><tmpl_var name="mbox_txt"></th>
+                    <th class="tbl_col_limit" scope="col">{tmpl_var name='search_limit'}</th>
+                </tr>
+                <tr class="filter">
+                    <td class="tbl_col_active"><select name="search_active">{tmpl_var name='search_active'}</select></td>
+					<td class="tbl_col_sys_groupid"><select name="search_sys_groupid">{tmpl_var name='search_sys_groupid'}</select></td>
+                    <td class="tbl_col_server_id"><select name="search_server_id">{tmpl_var name='search_server_id'}</select></td>
+                    <td class="tbl_col_origin"><input type="text" name="search_origin" value="{tmpl_var name='search_origin'}" /></td>
+                    <td class="tbl_col_ns"><input type="text" name="search_ns" value="{tmpl_var name='search_ns'}" /></td>
+                    <td class="tbl_col_mbox"><input type="text" name="search_mbox" value="{tmpl_var name='search_mbox'}" /></td>
+                    <td class="tbl_col_buttons">
+                        <button type="button" class="button icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onclick="submitForm('pageForm','dns/dns_soa_list.php');"><span>{tmpl_var name="filter_txt"}</span></button>
+                    </td>
+                </tr>
+            </thead>
+            <tbody>
+                <tmpl_loop name="records">
+                    <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+                        <td class="tbl_col_active"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</td>
+						<td class="tbl_col_sys_groupid"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="sys_groupid"}</a></td>
+                        <td class="tbl_col_server_id"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
+                        <td class="tbl_col_origin"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="origin"}</a></td>
+                        <td class="tbl_col_ns"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ns"}</a></td>
+                        <td class="tbl_col_mbox"><a href="#" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="mbox"}</a></td>
+                        <td class="tbl_col_buttons">   
+                            <a class="button icons16 icoDelete" href="javascript: del_record('dns/dns_soa_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
+                        </td>
+                    </tr>
+                </tmpl_loop>
+                <tmpl_unless name="records">
+                    <tr class="tbl_row_noresults tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
+                        <td colspan="7">{tmpl_var name='globalsearch_noresults_text_txt'}</td>
+                    </tr>
+                </tmpl_unless>
+            </tbody>
+            <tfoot>
+                <tr>
+                    <td class="tbl_footer tbl_paging" colspan="7"><tmpl_var name="paging"></td>
+                </tr>
+            </tfoot>
+            </table>
+        </fieldset>
+    </div>
+
+</div>
\ No newline at end of file
diff --git a/interface/web/help/lib/lang/se.lng b/interface/web/help/lib/lang/se.lng
index e096257..58fe6a0 100644
--- a/interface/web/help/lib/lang/se.lng
+++ b/interface/web/help/lib/lang/se.lng
@@ -12,4 +12,3 @@
 $wb['Add a Question & Answer Pair'] = 'Lägg till fråga och svar';
 $wb['Manage Questions'] = 'Hantera frågor';
 ?>
-
diff --git a/interface/web/help/lib/lang/se_faq_form.lng b/interface/web/help/lib/lang/se_faq_form.lng
index 743e02d..5a7f384 100644
--- a/interface/web/help/lib/lang/se_faq_form.lng
+++ b/interface/web/help/lib/lang/se_faq_form.lng
@@ -4,4 +4,3 @@
 $wb['faq_answer_txt'] = 'Svar';
 $wb['faq_section_txt'] = 'Kategori';
 ?>
-
diff --git a/interface/web/help/lib/lang/se_faq_manage_questions_list.lng b/interface/web/help/lib/lang/se_faq_manage_questions_list.lng
index c802176..d615cda 100644
--- a/interface/web/help/lib/lang/se_faq_manage_questions_list.lng
+++ b/interface/web/help/lib/lang/se_faq_manage_questions_list.lng
@@ -7,4 +7,3 @@
 $wb['faq_faq_questions_txt'] = 'Vanliga frågor';
 $wb['faq_new_question_txt'] = 'Lägg till ny fråga och svar';
 ?>
-
diff --git a/interface/web/help/lib/lang/se_faq_sections_form.lng b/interface/web/help/lib/lang/se_faq_sections_form.lng
index 9367eeb..5cc812f 100644
--- a/interface/web/help/lib/lang/se_faq_sections_form.lng
+++ b/interface/web/help/lib/lang/se_faq_sections_form.lng
@@ -1,4 +1,3 @@
 <?php
 $wb['faq_section_name_txt'] = 'Kategorinamn';
 ?>
-
diff --git a/interface/web/help/lib/lang/se_help_faq_list.lng b/interface/web/help/lib/lang/se_help_faq_list.lng
index c8aebaf..bc1d421 100644
--- a/interface/web/help/lib/lang/se_help_faq_list.lng
+++ b/interface/web/help/lib/lang/se_help_faq_list.lng
@@ -1,4 +1,3 @@
 <?php
 $wb['edit_txt'] = 'Redigera';
 ?>
-
diff --git a/interface/web/help/lib/lang/se_help_faq_sections_list.lng b/interface/web/help/lib/lang/se_help_faq_sections_list.lng
index 021feb3..5ea1a71 100644
--- a/interface/web/help/lib/lang/se_help_faq_sections_list.lng
+++ b/interface/web/help/lib/lang/se_help_faq_sections_list.lng
@@ -6,4 +6,3 @@
 $wb['faq_faq_sections_txt'] = 'FAQ-kategorier';
 $wb['faq_new_section_txt'] = 'Lägg till ny kategori';
 ?>
-
diff --git a/interface/web/help/lib/lang/se_support_message.lng b/interface/web/help/lib/lang/se_support_message.lng
index 0de8420..b3cefaa 100644
--- a/interface/web/help/lib/lang/se_support_message.lng
+++ b/interface/web/help/lib/lang/se_support_message.lng
@@ -13,4 +13,3 @@
 $wb['support_request_sent_txt'] = 'Your support request has been sent. Please don\'t reply to this email.';
 $wb['recipient_or_sender_email_address_not_valid_txt'] = 'The message could not be sent because the recipient and/or the sender email address is not valid.';
 ?>
-
diff --git a/interface/web/help/lib/lang/se_support_message_list.lng b/interface/web/help/lib/lang/se_support_message_list.lng
index f68bb58..af9663f 100644
--- a/interface/web/help/lib/lang/se_support_message_list.lng
+++ b/interface/web/help/lib/lang/se_support_message_list.lng
@@ -5,4 +5,3 @@
 $wb['add_new_record_txt'] = 'Skapa nyttt supportmeddelande';
 $wb['date_txt'] = 'Datum';
 ?>
-
diff --git a/interface/web/js/scrigo.js.php b/interface/web/js/scrigo.js.php
index 4e51cd5..85a321c 100644
--- a/interface/web/js/scrigo.js.php
+++ b/interface/web/js/scrigo.js.php
@@ -809,7 +809,7 @@
 	oldPWField.remove();
 	var pword = password(<?php echo $min_password_length; ?>, false, 1);
 	jQuery('#'+repeatPasswordFieldID).val(pword);
-	newPWField.attr('id', passwordFieldID).val(pword).trigger('keyup');
+	newPWField.attr('id', passwordFieldID).val(pword).trigger('keyup').select();
 }
 
 var funcDisableClick = function(e) { e.preventDefault(); return false; };
diff --git a/interface/web/login/lib/lang/se.lng b/interface/web/login/lib/lang/se.lng
index e3301e0..aeb58b1 100644
--- a/interface/web/login/lib/lang/se.lng
+++ b/interface/web/login/lib/lang/se.lng
@@ -25,4 +25,3 @@
 $wb['email_error'] = 'Epostadressen innehåller otillåtna tecken eller är felformatterad.';
 $wb['stay_logged_in_txt'] = 'Håll mig inloggad';
 ?>
-
diff --git a/interface/web/login/lib/lang/se_login_as.lng b/interface/web/login/lib/lang/se_login_as.lng
index e831784..fea3abc 100644
--- a/interface/web/login/lib/lang/se_login_as.lng
+++ b/interface/web/login/lib/lang/se_login_as.lng
@@ -1,12 +1,11 @@
 <?php
 $wb['login_1_txt'] = 'Vill du loggga in som användare';
-$wb['login_2_txt'] = 'If you do so, you can "go back" by clicking at logout.';
+$wb['login_2_txt'] = 'If you do so, you can \"go back\" by clicking at logout.';
 $wb['btn_yes_txt'] = 'Ja, logga in som kund';
 $wb['btn_back_txt'] = 'Nej, tillbaka till listan';
 $wb['udp_port_help_txt'] = 'Avdelade med kommatecken';
 $wb['active_txt'] = 'Aktiv';
 $wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
-$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, ":" and ",".';
-$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, ":" and ",".';
+$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \":\" and \",\".';
+$wb['udp_ports_error_regex'] = 'Character not allowed in udp port definition. Allowed characters are numbers, \":\" and \",\".';
 ?>
-
diff --git a/interface/web/mail/form/mail_user_filter.tform.php b/interface/web/mail/form/mail_user_filter.tform.php
index e001f68..d5f6a0a 100644
--- a/interface/web/mail/form/mail_user_filter.tform.php
+++ b/interface/web/mail/form/mail_user_filter.tform.php
@@ -112,7 +112,7 @@
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
 			'validators' => array (  0 => array ( 'type' => 'REGEX',
-					'regex' => '/^[\p{Latin}0-9\.\-\_\ ]{0,100}$/u',
+					'regex' => '/^[\p{Latin}0-9\.\-\_\ \&]{0,100}$/u',
 					'errmsg'=> 'target_error_regex'),
 			),
 			'default' => '',
diff --git a/interface/web/mail/form/mail_whitelist.tform.php b/interface/web/mail/form/mail_whitelist.tform.php
index 3edb132..aebcfe6 100644
--- a/interface/web/mail/form/mail_whitelist.tform.php
+++ b/interface/web/mail/form/mail_whitelist.tform.php
@@ -51,7 +51,7 @@
 $form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
 
 $form["tabs"]['whitelist'] = array (
-	'title'  => "Witelist",
+	'title'  => "Whitelist",
 	'width'  => 100,
 	'template'  => "templates/mail_whitelist_edit.htm",
 	'fields'  => array (
diff --git a/interface/web/mail/lib/lang/fr_mail_get.lng b/interface/web/mail/lib/lang/fr_mail_get.lng
index 6779ce3..934af5e 100644
--- a/interface/web/mail/lib/lang/fr_mail_get.lng
+++ b/interface/web/mail/lib/lang/fr_mail_get.lng
@@ -14,6 +14,6 @@
 $wb['destination_error_isemail'] = 'Pas de destination sélectionnée.';
 $wb['source_server_error_regex'] = 'Le serveur POP3 / IMAP n\'est pas un nom de domaine valide.';
 $wb['source_read_all_txt'] = 'Récupérer tous les emails (incl. les emails lus)';
-$wb['error_delete_read_all_combination'] = 'Combinaison d\'options non autorisée. Vous ne pouvez pas utiliser \"Supprimer les emails après récupération\" = non avec \"Récupérer tous les emails\" = oui';
+$wb['error_delete_read_all_combination'] = 'Combinaison d\'options non autorisée. Vous ne pouvez pas utiliser \\"Supprimer les emails après récupération\\" = non avec \\"Récupérer tous les emails\\" = oui';
 $wb['source_delete_note_txt'] = 'Please check first if email retrieval works, before you activate this option.';
 ?>
diff --git a/interface/web/mail/lib/lang/se.lng b/interface/web/mail/lib/lang/se.lng
index 6542378..3edc203 100644
--- a/interface/web/mail/lib/lang/se.lng
+++ b/interface/web/mail/lib/lang/se.lng
@@ -46,4 +46,3 @@
 $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_alias.lng b/interface/web/mail/lib/lang/se_mail_alias.lng
index 4dc4e25..e0f6135 100644
--- a/interface/web/mail/lib/lang/se_mail_alias.lng
+++ b/interface/web/mail/lib/lang/se_mail_alias.lng
@@ -12,4 +12,3 @@
 $wb['duplicate_email_alias_txt'] = 'Detta epostalias finns redan';
 $wb['source_txt'] = 'Alias';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_alias_list.lng b/interface/web/mail/lib/lang/se_mail_alias_list.lng
index e72d91b..3b63170 100644
--- a/interface/web/mail/lib/lang/se_mail_alias_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_alias_list.lng
@@ -6,4 +6,3 @@
 $wb['source_txt'] = 'Källa';
 $wb['add_new_record_txt'] = 'Lägg till nytt epostalias';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_aliasdomain.lng b/interface/web/mail/lib/lang/se_mail_aliasdomain.lng
index 9a2c5c3..e2105fb 100644
--- a/interface/web/mail/lib/lang/se_mail_aliasdomain.lng
+++ b/interface/web/mail/lib/lang/se_mail_aliasdomain.lng
@@ -9,4 +9,3 @@
 $wb['source_error_unique'] = 'Källdomänen finns redan.';
 $wb['source_error_regex'] = 'Ogiltig källdomän..';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_aliasdomain_list.lng b/interface/web/mail/lib/lang/se_mail_aliasdomain_list.lng
index d04d8cd..e874039 100644
--- a/interface/web/mail/lib/lang/se_mail_aliasdomain_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_aliasdomain_list.lng
@@ -5,4 +5,3 @@
 $wb['destination_txt'] = 'Destination';
 $wb['add_new_record_txt'] = 'Lägg till nytt domänalias';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_blacklist.lng b/interface/web/mail/lib/lang/se_mail_blacklist.lng
index 70b1be5..34b1f76 100644
--- a/interface/web/mail/lib/lang/se_mail_blacklist.lng
+++ b/interface/web/mail/lib/lang/se_mail_blacklist.lng
@@ -7,4 +7,3 @@
 $wb['type_txt'] = 'Typ';
 $wb['limit_mailfilter_txt'] = 'Det maximala antalet epostfilter för ditt konto är uppnått.';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_blacklist_list.lng b/interface/web/mail/lib/lang/se_mail_blacklist_list.lng
index d3da0de..158b989 100644
--- a/interface/web/mail/lib/lang/se_mail_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_blacklist_list.lng
@@ -8,4 +8,3 @@
 $wb['recipient_txt'] = 'Mottagare';
 $wb['access_txt'] = 'åtkomst';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_content_filter.lng b/interface/web/mail/lib/lang/se_mail_content_filter.lng
index c7fb595..2f82e76 100644
--- a/interface/web/mail/lib/lang/se_mail_content_filter.lng
+++ b/interface/web/mail/lib/lang/se_mail_content_filter.lng
@@ -7,4 +7,3 @@
 $wb['active_txt'] = 'Aktiv';
 $wb['pattern_error_empty'] = 'Matchningsfältet är tomt.';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_content_filter_list.lng b/interface/web/mail/lib/lang/se_mail_content_filter_list.lng
index c612f9b..6eac193 100644
--- a/interface/web/mail/lib/lang/se_mail_content_filter_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_content_filter_list.lng
@@ -6,4 +6,3 @@
 $wb['action_txt'] = 'Händelse';
 $wb['add_new_record_txt'] = 'Lägg till nytt innehållsfilter';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_domain.lng b/interface/web/mail/lib/lang/se_mail_domain.lng
index e07dd25..295d10a 100644
--- a/interface/web/mail/lib/lang/se_mail_domain.lng
+++ b/interface/web/mail/lib/lang/se_mail_domain.lng
@@ -11,4 +11,3 @@
 $wb['policy_txt'] = 'Spamfilter';
 $wb['no_policy'] = '- ej aktiverat -';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_domain_admin_list.lng b/interface/web/mail/lib/lang/se_mail_domain_admin_list.lng
index bf8cd12..a4a203d 100644
--- a/interface/web/mail/lib/lang/se_mail_domain_admin_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_domain_admin_list.lng
@@ -6,4 +6,3 @@
 $wb['active_txt'] = 'Aktiv';
 $wb['sys_groupid_txt'] = 'Kund';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_domain_catchall.lng b/interface/web/mail/lib/lang/se_mail_domain_catchall.lng
index 9e03e69..7ef1116 100644
--- a/interface/web/mail/lib/lang/se_mail_domain_catchall.lng
+++ b/interface/web/mail/lib/lang/se_mail_domain_catchall.lng
@@ -9,4 +9,3 @@
 $wb['source_txt'] = 'Källa';
 $wb['destination_error_isemail'] = 'Destinationen när inte en giltig epostadress.';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/se_mail_domain_catchall_list.lng
index 0e6958e..51789ee 100644
--- a/interface/web/mail/lib/lang/se_mail_domain_catchall_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_domain_catchall_list.lng
@@ -7,4 +7,3 @@
 $wb['active_txt'] = 'Aktiv';
 $wb['source_txt'] = 'källa';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_domain_list.lng b/interface/web/mail/lib/lang/se_mail_domain_list.lng
index 96120f5..4f3b548 100644
--- a/interface/web/mail/lib/lang/se_mail_domain_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_domain_list.lng
@@ -5,4 +5,3 @@
 $wb['add_new_record_txt'] = 'Lägg till ny domän';
 $wb['active_txt'] = 'Aktiv';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_forward.lng b/interface/web/mail/lib/lang/se_mail_forward.lng
index 511e0b6..af583f0 100644
--- a/interface/web/mail/lib/lang/se_mail_forward.lng
+++ b/interface/web/mail/lib/lang/se_mail_forward.lng
@@ -7,4 +7,3 @@
 $wb['domain_txt'] = 'Domän';
 $wb['source_txt'] = 'Källadress';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_forward_list.lng b/interface/web/mail/lib/lang/se_mail_forward_list.lng
index f271306..e1d7464 100644
--- a/interface/web/mail/lib/lang/se_mail_forward_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_forward_list.lng
@@ -6,4 +6,3 @@
 $wb['add_new_record_txt'] = 'Lägg till ny vidarebefordran';
 $wb['source_txt'] = 'källa';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_get.lng b/interface/web/mail/lib/lang/se_mail_get.lng
index f15208c..db44402 100644
--- a/interface/web/mail/lib/lang/se_mail_get.lng
+++ b/interface/web/mail/lib/lang/se_mail_get.lng
@@ -14,7 +14,6 @@
 $wb['destination_error_isemail'] = 'Ingen destination vald.';
 $wb['source_server_error_regex'] = 'POP3-/Imapserver är inte ett giltigt domännamn.';
 $wb['source_read_all_txt'] = 'Hämta all epost (även läst epost)';
-$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use "Delete emails after retrieval" = no together with "Retrieve all emails" = yes';
+$wb['error_delete_read_all_combination'] = 'Illegal combination of options. You can not use \"Delete emails after retrieval\" = no together with \"Retrieve all emails\" = yes';
 $wb['source_delete_note_txt'] = 'Vänligen kontrollera först om eposthämtning fungerar innan du aktiverar detta val..';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_get_list.lng b/interface/web/mail/lib/lang/se_mail_get_list.lng
index 0d06cad..9369095 100644
--- a/interface/web/mail/lib/lang/se_mail_get_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_get_list.lng
@@ -7,4 +7,3 @@
 $wb['destination_txt'] = 'Destination';
 $wb['add_new_record_txt'] = 'Lägg till nytt konto';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_mailinglist.lng b/interface/web/mail/lib/lang/se_mail_mailinglist.lng
index 68a7130..e7f927b 100644
--- a/interface/web/mail/lib/lang/se_mail_mailinglist.lng
+++ b/interface/web/mail/lib/lang/se_mail_mailinglist.lng
@@ -20,4 +20,3 @@
 $wb['email_error_isemail'] = 'Epostadressen är ogiltig';
 $wb['mailinglist_txt'] = 'Epostlista';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_mailinglist_list.lng b/interface/web/mail/lib/lang/se_mail_mailinglist_list.lng
index 11a82be..2e9f364 100644
--- a/interface/web/mail/lib/lang/se_mail_mailinglist_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_mailinglist_list.lng
@@ -3,4 +3,3 @@
 $wb['domain_txt'] = 'Domän';
 $wb['listname_txt'] = 'Listnamn';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_relay_recipient.lng b/interface/web/mail/lib/lang/se_mail_relay_recipient.lng
index ffb64ad..7506198 100644
--- a/interface/web/mail/lib/lang/se_mail_relay_recipient.lng
+++ b/interface/web/mail/lib/lang/se_mail_relay_recipient.lng
@@ -7,4 +7,3 @@
 $wb['type_txt'] = 'Typ';
 $wb['limit_mailfilter_txt'] = 'Det maximala antalet epostfilter för ditt konto är uppnått.';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_relay_recipient_list.lng b/interface/web/mail/lib/lang/se_mail_relay_recipient_list.lng
index 4c34ebf..c9176c7 100644
--- a/interface/web/mail/lib/lang/se_mail_relay_recipient_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_relay_recipient_list.lng
@@ -7,4 +7,3 @@
 $wb['add_new_record_txt'] = 'Lägg till ny relämottagare';
 $wb['access_txt'] = 'åtkomst';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_spamfilter.lng b/interface/web/mail/lib/lang/se_mail_spamfilter.lng
index 3080425..c83f09c 100644
--- a/interface/web/mail/lib/lang/se_mail_spamfilter.lng
+++ b/interface/web/mail/lib/lang/se_mail_spamfilter.lng
@@ -15,4 +15,3 @@
 $wb['spam_redirect_maildir_purge_txt'] = 'Töm mappen efter';
 $wb['days_txt'] = 'Dagar';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_spamfilter_list.lng b/interface/web/mail/lib/lang/se_mail_spamfilter_list.lng
index 407d516..2c361e1 100644
--- a/interface/web/mail/lib/lang/se_mail_spamfilter_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_spamfilter_list.lng
@@ -6,4 +6,3 @@
 $wb['email_txt'] = 'Epost';
 $wb['add_new_record_txt'] = 'Lägg till nytt spamfilter';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_transport.lng b/interface/web/mail/lib/lang/se_mail_transport.lng
index 198f807..70e26b7 100644
--- a/interface/web/mail/lib/lang/se_mail_transport.lng
+++ b/interface/web/mail/lib/lang/se_mail_transport.lng
@@ -9,4 +9,3 @@
 $wb['limit_mailrouting_txt'] = 'Det maximala antalet epostrutter för ditt konto är uppnått.';
 $wb['transport_txt'] = 'Transport';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_transport_list.lng b/interface/web/mail/lib/lang/se_mail_transport_list.lng
index 63474a8..2ce6dd8 100644
--- a/interface/web/mail/lib/lang/se_mail_transport_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_transport_list.lng
@@ -7,4 +7,3 @@
 $wb['sort_order_txt'] = 'Sortera på';
 $wb['add_new_record_txt'] = 'Lägg till ny transport';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_user.lng b/interface/web/mail/lib/lang/se_mail_user.lng
index 62be339..d6df113 100644
--- a/interface/web/mail/lib/lang/se_mail_user.lng
+++ b/interface/web/mail/lib/lang/se_mail_user.lng
@@ -51,4 +51,3 @@
 $wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
 $wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_user_filter.lng b/interface/web/mail/lib/lang/se_mail_user_filter.lng
index ed9574f..e6e62de 100644
--- a/interface/web/mail/lib/lang/se_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/se_mail_user_filter.lng
@@ -18,4 +18,3 @@
 $wb['move_to_txt'] = 'Flytta till';
 $wb['delete_txt'] = 'Radera';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_user_filter_list.lng b/interface/web/mail/lib/lang/se_mail_user_filter_list.lng
index 7825393..7d6e0c5 100644
--- a/interface/web/mail/lib/lang/se_mail_user_filter_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_user_filter_list.lng
@@ -5,4 +5,3 @@
 $wb['page_of_txt'] = 'av';
 $wb['delete_confirmation'] = 'Vill du verkligen radera epostfiltret?';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_user_list.lng b/interface/web/mail/lib/lang/se_mail_user_list.lng
index f18bc71..af96af8 100644
--- a/interface/web/mail/lib/lang/se_mail_user_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_user_list.lng
@@ -6,4 +6,3 @@
 $wb['name_txt'] = 'Riktigt namn';
 $wb['login_txt'] = 'Logga in';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_user_stats_list.lng b/interface/web/mail/lib/lang/se_mail_user_stats_list.lng
index 1bec4d4..de6afd7 100644
--- a/interface/web/mail/lib/lang/se_mail_user_stats_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_user_stats_list.lng
@@ -6,4 +6,3 @@
 $wb['this_year_txt'] = 'I år';
 $wb['last_year_txt'] = 'Föregående år';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_whitelist.lng b/interface/web/mail/lib/lang/se_mail_whitelist.lng
index 40eaf86..7ce682f 100644
--- a/interface/web/mail/lib/lang/se_mail_whitelist.lng
+++ b/interface/web/mail/lib/lang/se_mail_whitelist.lng
@@ -7,4 +7,3 @@
 $wb['type_txt'] = 'Typ';
 $wb['limit_mailfilter_txt'] = 'Maximala antalet epostfilter för ditt konto är uppnått.';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_mail_whitelist_list.lng b/interface/web/mail/lib/lang/se_mail_whitelist_list.lng
index a9f52a8..f72e8e2 100644
--- a/interface/web/mail/lib/lang/se_mail_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/se_mail_whitelist_list.lng
@@ -8,4 +8,3 @@
 $wb['recipient_txt'] = 'Mottagare';
 $wb['access_txt'] = 'åtkomst';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_blacklist.lng b/interface/web/mail/lib/lang/se_spamfilter_blacklist.lng
index 2839c6c..873e43d 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_blacklist.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_blacklist.lng
@@ -10,4 +10,3 @@
 $wb['5 - medium'] = '5 - medium';
 $wb['1 - lowest'] = '1 - lägsta';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_blacklist_list.lng b/interface/web/mail/lib/lang/se_spamfilter_blacklist_list.lng
index edf0842..d5cac76 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_blacklist_list.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_blacklist_list.lng
@@ -7,4 +7,3 @@
 $wb['email_txt'] = 'Vitlistad epostadress';
 $wb['add_new_record_txt'] = 'Lägg till svartlistning';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_config.lng b/interface/web/mail/lib/lang/se_spamfilter_config.lng
index ebfedb3..a67fb5b 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_config.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_config.lng
@@ -18,4 +18,3 @@
 $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit';
 $wb['message_size_limit_txt'] = 'Message Size Limit';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_config_list.lng b/interface/web/mail/lib/lang/se_spamfilter_config_list.lng
index 52b398b..9d2ec14 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_config_list.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_config_list.lng
@@ -3,4 +3,3 @@
 $wb['server_name_txt'] = 'Server';
 $wb['server_id_txt'] = 'server_id';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_policy.lng b/interface/web/mail/lib/lang/se_spamfilter_policy.lng
index d5a429b..e876330 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_policy.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_policy.lng
@@ -36,4 +36,3 @@
 $wb['message_size_limit_txt'] = 'Message size limit';
 $wb['banned_rulenames_txt'] = 'Banned rulenames';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_policy_list.lng b/interface/web/mail/lib/lang/se_spamfilter_policy_list.lng
index da678a4..04491ae 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_policy_list.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_policy_list.lng
@@ -7,4 +7,3 @@
 $wb['bad_header_lover_txt'] = 'Bad Header lover';
 $wb['add_new_record_txt'] = 'Add Policy record';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_users.lng b/interface/web/mail/lib/lang/se_spamfilter_users.lng
index babb304..ba3b60e 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_users.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_users.lng
@@ -11,4 +11,3 @@
 $wb['5 - medium'] = '5 - medium';
 $wb['1 - lowest'] = '1 - lägsta';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_users_list.lng b/interface/web/mail/lib/lang/se_spamfilter_users_list.lng
index 830ac39..4ff8784 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_users_list.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_users_list.lng
@@ -8,4 +8,3 @@
 $wb['email_txt'] = 'Epost';
 $wb['add_new_record_txt'] = 'Lägg till spamfilteranvändare';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_whitelist.lng b/interface/web/mail/lib/lang/se_spamfilter_whitelist.lng
index 2839c6c..873e43d 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_whitelist.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_whitelist.lng
@@ -10,4 +10,3 @@
 $wb['5 - medium'] = '5 - medium';
 $wb['1 - lowest'] = '1 - lägsta';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_spamfilter_whitelist_list.lng b/interface/web/mail/lib/lang/se_spamfilter_whitelist_list.lng
index 00185a0..080ec27 100644
--- a/interface/web/mail/lib/lang/se_spamfilter_whitelist_list.lng
+++ b/interface/web/mail/lib/lang/se_spamfilter_whitelist_list.lng
@@ -7,4 +7,3 @@
 $wb['email_txt'] = 'Vitlistad epostadress';
 $wb['add_new_record_txt'] = 'Lägg till vitlistning';
 ?>
-
diff --git a/interface/web/mail/lib/lang/se_user_quota_stats_list.lng b/interface/web/mail/lib/lang/se_user_quota_stats_list.lng
index 380cf5b..dc57c61 100755
--- a/interface/web/mail/lib/lang/se_user_quota_stats_list.lng
+++ b/interface/web/mail/lib/lang/se_user_quota_stats_list.lng
@@ -6,4 +6,3 @@
 $wb['used_txt'] = 'Använt utrymme';
 $wb['percentage_txt'] = 'Använt %';
 ?>
-
diff --git a/interface/web/mail/mail_domain_edit.php b/interface/web/mail/mail_domain_edit.php
index 45a1ade..02dc55b 100644
--- a/interface/web/mail/mail_domain_edit.php
+++ b/interface/web/mail/mail_domain_edit.php
@@ -359,7 +359,16 @@
 
 			//* Update the mailinglist
 			$app->db->query("UPDATE mail_mailinglist SET sys_userid = $client_user_id, sys_groupid = $sys_groupid WHERE domain = '".$app->db->quote($this->oldDataRecord['domain'])."'");
-
+			
+			//* Update fetchmail accounts
+			$fetchmail = $app->db->queryAllRecords("SELECT * FROM mail_get WHERE destination like '%@".$app->db->quote($this->oldDataRecord['domain'])."'");
+			if(is_array($fetchmail)) {
+				foreach($fetchmail as $rec) {
+					$destination = $app->db->quote(str_replace($this->oldDataRecord['domain'], $this->dataRecord['domain'], $rec['destination']));
+					$app->db->datalogUpdate('mail_get', "destination = '$destination', sys_userid = $client_user_id, sys_groupid = '$sys_groupid'", 'mailget_id', $rec['mailget_id']);
+				}
+			}
+			
 			//* Delete the old spamfilter record
 			$tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".$app->db->quote($this->oldDataRecord["domain"])."'");
 			$app->db->datalogDelete('spamfilter_users', 'id', $tmp["id"]);
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index 0c9110b..8166b58 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -166,7 +166,7 @@
 			}
 
 			// Check the quota and adjust
-			if(isset($_POST["quota"]) && $client["limit_mailquota"] >= 0 && $app->functions->intval($this->dataRecord["quota"]) * 1024 * 1024 != $this->oldDataRecord['quota']) {
+			if(isset($_POST["quota"]) && $client["limit_mailquota"] >= 0 && (($app->functions->intval($this->dataRecord["quota"]) * 1024 * 1024 != $this->oldDataRecord['quota']) || ($_POST["quota"] <= 0))) {
 				$tmp = $app->db->queryOneRecord("SELECT sum(quota) as mailquota FROM mail_user WHERE mailuser_id != ".$app->functions->intval($this->id)." AND ".$app->tform->getAuthSQL('u'));
 				$mailquota = $tmp["mailquota"] / 1024 / 1024;
 				$new_mailbox_quota = $app->functions->intval($this->dataRecord["quota"]);
@@ -179,6 +179,7 @@
 				unset($tmp);
 				unset($tmp_quota);
 			}
+			
 		} // end if user is not admin
 
 
diff --git a/interface/web/mailuser/lib/lang/se.lng b/interface/web/mailuser/lib/lang/se.lng
index f9e6f5b..b0d55d4 100644
--- a/interface/web/mailuser/lib/lang/se.lng
+++ b/interface/web/mailuser/lib/lang/se.lng
@@ -7,4 +7,3 @@
 $wb['Spamfilter'] = 'Spamfilter';
 $wb['Email Filters'] = 'Epostfilter';
 ?>
-
diff --git a/interface/web/mailuser/lib/lang/se_index.lng b/interface/web/mailuser/lib/lang/se_index.lng
index a23c6a6..785507b 100644
--- a/interface/web/mailuser/lib/lang/se_index.lng
+++ b/interface/web/mailuser/lib/lang/se_index.lng
@@ -10,4 +10,3 @@
 $wb['mb_txt'] = 'MB';
 $wb['none_txt'] = 'Inget';
 ?>
-
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/se_mail_user_autoresponder.lng
index 9429978..4a9215c 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_autoresponder.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_autoresponder.lng
@@ -11,4 +11,3 @@
 $wb['now_txt'] = 'Nu';
 $wb['autoresponder_subject_txt'] = 'Ämnesrad';
 ?>
-
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_cc.lng b/interface/web/mailuser/lib/lang/se_mail_user_cc.lng
index 203a928..b01ae1b 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_cc.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_cc.lng
@@ -7,4 +7,3 @@
 $wb['name_optional_txt'] = '(Frivilligt)';
 $wb['cc_note_txt'] = '(Separera flera epostadresser med kommatecken)';
 ?>
-
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_filter.lng b/interface/web/mailuser/lib/lang/se_mail_user_filter.lng
index 17da57a..8cf96ce 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_filter.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_filter.lng
@@ -18,4 +18,3 @@
 $wb['move_to_txt'] = 'Flytta till';
 $wb['delete_txt'] = 'Radera';
 ?>
-
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_filter_list.lng b/interface/web/mailuser/lib/lang/se_mail_user_filter_list.lng
index f4f757d..c21eef0 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_filter_list.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_filter_list.lng
@@ -6,4 +6,3 @@
 $wb['page_of_txt'] = 'av';
 $wb['delete_confirmation'] = 'Vill du verkligen radera epostfiltret?';
 ?>
-
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_password.lng b/interface/web/mailuser/lib/lang/se_mail_user_password.lng
index 27ebb37..c784301 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_password.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_password.lng
@@ -8,4 +8,3 @@
 $wb['password_mismatch_txt'] = 'Lösenorden matchar inte';
 $wb['password_match_txt'] = 'Lösenorden matchar';
 ?>
-
diff --git a/interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng
index e457b5a..7ec5f2a 100644
--- a/interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng
+++ b/interface/web/mailuser/lib/lang/se_mail_user_spamfilter.lng
@@ -5,4 +5,3 @@
 $wb['no_policy'] = '- ej aktiverat -';
 $wb['policy_txt'] = 'Policy';
 ?>
-
diff --git a/interface/web/mailuser/mail_user_password_edit.php b/interface/web/mailuser/mail_user_password_edit.php
index f6d6d78..07a1925 100644
--- a/interface/web/mailuser/mail_user_password_edit.php
+++ b/interface/web/mailuser/mail_user_password_edit.php
@@ -51,7 +51,8 @@
 class page_action extends tform_actions {
 
 	function onSubmit() {
-
+		global $app, $conf;
+		
 		$this->id = $app->functions->intval($_SESSION['s']['user']['mailuser_id']);
 
 		parent::onSubmit();
diff --git a/interface/web/monitor/lib/lang/se.lng b/interface/web/monitor/lib/lang/se.lng
index 0df6528..b550f80 100644
--- a/interface/web/monitor/lib/lang/se.lng
+++ b/interface/web/monitor/lib/lang/se.lng
@@ -153,4 +153,3 @@
 $wb['no_munin_url_defined_txt'] = 'Ingen Munin-URL definierad.';
 $wb['no_permissions_to_view_munin_txt'] = 'Du har inte behörighet att visa Munin.';
 ?>
-
diff --git a/interface/web/monitor/lib/lang/se_datalog_list.lng b/interface/web/monitor/lib/lang/se_datalog_list.lng
index 527b149..e3e76ea 100644
--- a/interface/web/monitor/lib/lang/se_datalog_list.lng
+++ b/interface/web/monitor/lib/lang/se_datalog_list.lng
@@ -6,4 +6,3 @@
 $wb['action_txt'] = 'Händelse';
 $wb['status_txt'] = 'Status';
 ?>
-
diff --git a/interface/web/monitor/lib/lang/se_syslog_list.lng b/interface/web/monitor/lib/lang/se_syslog_list.lng
index f3194b6..6c7268c 100644
--- a/interface/web/monitor/lib/lang/se_syslog_list.lng
+++ b/interface/web/monitor/lib/lang/se_syslog_list.lng
@@ -5,4 +5,3 @@
 $wb['loglevel_txt'] = 'Loggnivå';
 $wb['message_txt'] = 'Meddelande';
 ?>
-
diff --git a/interface/web/sites/form/database.tform.php b/interface/web/sites/form/database.tform.php
index a3e8772..fb600fd 100644
--- a/interface/web/sites/form/database.tform.php
+++ b/interface/web/sites/form/database.tform.php
@@ -88,7 +88,7 @@
 		'type' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
-			'default' => 'y',
+			'default' => 'mysql',
 			'value'  => array('mysql' => 'MySQL')
 		),
 		'database_name' => array (
@@ -139,7 +139,7 @@
 		'database_charset' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
-			'default' => 'y',
+			'default' => '',
 			'value'  => array('' => 'DB-Default', 'latin1' => 'Latin 1', 'utf8' => 'UTF-8')
 		),
 		'remote_access' => array (
diff --git a/interface/web/sites/form/ftp_user.tform.php b/interface/web/sites/form/ftp_user.tform.php
index 20e4565..ef11b60 100644
--- a/interface/web/sites/form/ftp_user.tform.php
+++ b/interface/web/sites/form/ftp_user.tform.php
@@ -91,7 +91,7 @@
 			'validators' => array (  0 => array ( 'type' => 'UNIQUE',
 					'errmsg'=> 'username_error_unique'),
 				1 => array ( 'type' => 'REGEX',
-					'regex' => '/^[\w\.\-]{0,64}$/',
+					'regex' => '/^[\w\.\-@\+]{0,64}$/',
 					'errmsg'=> 'username_error_regex'),
 			),
 			'default' => '',
@@ -166,6 +166,13 @@
 				'formtype'  => 'TEXT',
 				'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
 						'errmsg'=> 'uid_error_empty'),
+						1 => array(
+							'type' => 'CUSTOM',
+							'class' => 'validate_systemuser',
+							'function' => 'check_sysuser',
+							'check_names' => true,
+							'errmsg' => 'invalid_system_user_or_group_txt'
+						),
 				),
 				'default'   => '0',
 				'value'     => '',
@@ -177,6 +184,13 @@
 				'formtype'  => 'TEXT',
 				'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
 						'errmsg'=> 'gid_error_empty'),
+						1 => array(
+							'type' => 'CUSTOM',
+							'class' => 'validate_systemuser',
+							'function' => 'check_sysgroup',
+							'check_names' => true,
+							'errmsg' => 'invalid_system_user_or_group_txt'
+						),
 				),
 				'default'   => '0',
 				'value'     => '',
@@ -187,7 +201,10 @@
 				'datatype'  => 'VARCHAR',
 				'formtype'  => 'TEXT',
 				'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
-						'errmsg'=> 'directory_error_empty'),
+															'errmsg'=> 'directory_error_empty'),
+											1 => array ( 	'type' => 'REGEX',
+															'regex' => '/^\/[a-zA-Z0-9\ \.\-\_\/]{10,128}$/',
+															'errmsg'=> 'directory_error_regex'),
 				),
 				'default'   => '',
 				'value'     => '',
diff --git a/interface/web/sites/form/shell_user.tform.php b/interface/web/sites/form/shell_user.tform.php
index ab7cef1..062ed6e 100644
--- a/interface/web/sites/form/shell_user.tform.php
+++ b/interface/web/sites/form/shell_user.tform.php
@@ -177,6 +177,13 @@
 				'formtype' => 'TEXT',
 				'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
 						'errmsg'=> 'uid_error_empty'),
+						1 => array(
+							'type' => 'CUSTOM',
+							'class' => 'validate_systemuser',
+							'function' => 'check_sysuser',
+							'check_names' => true,
+							'errmsg' => 'invalid_system_user_or_group_txt'
+						),
 				),
 				'default' => '0',
 				'value'  => '',
@@ -188,6 +195,13 @@
 				'formtype' => 'TEXT',
 				'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
 						'errmsg'=> 'uid_error_empty'),
+						1 => array(
+							'type' => 'CUSTOM',
+							'class' => 'validate_systemuser',
+							'function' => 'check_sysgroup',
+							'check_names' => true,
+							'errmsg' => 'invalid_system_user_or_group_txt'
+						),
 				),
 				'default' => '0',
 				'value'  => '',
@@ -197,6 +211,12 @@
 			'shell' => array (
 				'datatype' => 'VARCHAR',
 				'formtype' => 'TEXT',
+				'validators' => array ( 0 => array ( 	'type' => 'NOTEMPTY',
+														'errmsg'=> 'shell_error_empty'),
+										1 => array ( 	'type' => 'REGEX',
+															'regex' => '/^\/[a-zA-Z0-9\/]{5,20}$/',
+															'errmsg'=> 'shell_error_regex'),
+				),
 				'default' => '/bin/bash',
 				'value'  => '',
 				'width'  => '30',
@@ -205,8 +225,11 @@
 			'dir' => array (
 				'datatype' => 'VARCHAR',
 				'formtype' => 'TEXT',
-				'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
-						'errmsg'=> 'directory_error_empty'),
+				'validators' => array ( 0 => array ( 	'type' => 'NOTEMPTY',
+														'errmsg'=> 'directory_error_empty'),
+										1 => array ( 	'type' => 'REGEX',
+															'regex' => '/^\/[a-zA-Z0-9\ \.\-\_\/]{10,128}$/',
+															'errmsg'=> 'directory_error_regex'),
 				),
 				'default' => '',
 				'value'  => '',
diff --git a/interface/web/sites/ftp_user_edit.php b/interface/web/sites/ftp_user_edit.php
index 0346201..ba695e0 100644
--- a/interface/web/sites/ftp_user_edit.php
+++ b/interface/web/sites/ftp_user_edit.php
@@ -138,6 +138,11 @@
 		$dir = $app->db->quote($web["document_root"]);
 		$uid = $app->db->quote($web["system_user"]);
 		$gid = $app->db->quote($web["system_group"]);
+		
+		// Check system user and group
+		if($app->functions->is_allowed_user($uid) == false || $app->functions->is_allowed_group($gid) == false) {
+			$app->error('Invalid system user or group');
+		}
 
 		// The FTP user shall be owned by the same group then the website
 		$sys_groupid = $app->functions->intval($web['sys_groupid']);
@@ -148,7 +153,7 @@
 
 	function onBeforeUpdate() {
 		global $app, $conf, $interfaceConf;
-
+		
 		/*
 		 * If the names should be restricted -> do it!
 		 */
diff --git a/interface/web/sites/lib/lang/ar_ftp_user.lng b/interface/web/sites/lib/lang/ar_ftp_user.lng
index 0492731..42b8c4d 100644
--- a/interface/web/sites/lib/lang/ar_ftp_user.lng
+++ b/interface/web/sites/lib/lang/ar_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/ar_shell_user.lng b/interface/web/sites/lib/lang/ar_shell_user.lng
index 8460d4e..8095f4b 100644
--- a/interface/web/sites/lib/lang/ar_shell_user.lng
+++ b/interface/web/sites/lib/lang/ar_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/ar_web_folder_list.lng b/interface/web/sites/lib/lang/ar_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/ar_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/ar_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/ar_web_folder_user_list.lng b/interface/web/sites/lib/lang/ar_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/ar_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/ar_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_ftp_user.lng b/interface/web/sites/lib/lang/bg_ftp_user.lng
index fc15872..4d5cef7 100644
--- a/interface/web/sites/lib/lang/bg_ftp_user.lng
+++ b/interface/web/sites/lib/lang/bg_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_shell_user.lng b/interface/web/sites/lib/lang/bg_shell_user.lng
index 82a44af..1570914 100644
--- a/interface/web/sites/lib/lang/bg_shell_user.lng
+++ b/interface/web/sites/lib/lang/bg_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_web_folder_list.lng b/interface/web/sites/lib/lang/bg_web_folder_list.lng
index 36c9cbc..4e0f4b8 100644
--- a/interface/web/sites/lib/lang/bg_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/bg_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Сървър';
 $wb['parent_domain_id_txt'] = 'Уебсайт';
 $wb['path_txt'] = 'Път';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/bg_web_folder_user_list.lng b/interface/web/sites/lib/lang/bg_web_folder_user_list.lng
index ff89ba0..2824380 100644
--- a/interface/web/sites/lib/lang/bg_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/bg_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Потребителско име';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/br_ftp_user.lng b/interface/web/sites/lib/lang/br_ftp_user.lng
index 4873bfd..f46b94f 100644
--- a/interface/web/sites/lib/lang/br_ftp_user.lng
+++ b/interface/web/sites/lib/lang/br_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/br_shell_user.lng b/interface/web/sites/lib/lang/br_shell_user.lng
index 8a098cb..69e0f6e 100644
--- a/interface/web/sites/lib/lang/br_shell_user.lng
+++ b/interface/web/sites/lib/lang/br_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_folder_list.lng b/interface/web/sites/lib/lang/br_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/br_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/br_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/br_web_folder_user_list.lng b/interface/web/sites/lib/lang/br_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/br_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/br_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_ftp_user.lng b/interface/web/sites/lib/lang/cz_ftp_user.lng
index 2ef0f29..b580e08 100644
--- a/interface/web/sites/lib/lang/cz_ftp_user.lng
+++ b/interface/web/sites/lib/lang/cz_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Opakujte heslo';
 $wb['password_mismatch_txt'] = 'Hesla se neshodují.';
 $wb['password_match_txt'] = 'Hesla se shodují.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_shell_user.lng b/interface/web/sites/lib/lang/cz_shell_user.lng
index 9bc6bdd..fc933da 100644
--- a/interface/web/sites/lib/lang/cz_shell_user.lng
+++ b/interface/web/sites/lib/lang/cz_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'Hesla se shodují.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_web_folder_list.lng b/interface/web/sites/lib/lang/cz_web_folder_list.lng
index b75c0e8..c7fa12c 100644
--- a/interface/web/sites/lib/lang/cz_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/cz_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Webové stránky';
 $wb['path_txt'] = 'Cesta';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/cz_web_folder_user_list.lng b/interface/web/sites/lib/lang/cz_web_folder_user_list.lng
index 99fe620..c0059b2 100644
--- a/interface/web/sites/lib/lang/cz_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/cz_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Aktivní';
 $wb['web_folder_id_txt'] = 'Složka';
 $wb['username_txt'] = 'Uživatelské jméno';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/de_ftp_user.lng b/interface/web/sites/lib/lang/de_ftp_user.lng
index 65e8481..285c6c6 100644
--- a/interface/web/sites/lib/lang/de_ftp_user.lng
+++ b/interface/web/sites/lib/lang/de_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Passwort wiederholen';
 $wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
 $wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/de_shell_user.lng b/interface/web/sites/lib/lang/de_shell_user.lng
index 9de369f..3c4cc2d 100644
--- a/interface/web/sites/lib/lang/de_shell_user.lng
+++ b/interface/web/sites/lib/lang/de_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'Der Benutzername darf 32 Zeichen nicht überschreiten.';
 $wb['username_not_allowed_txt'] = 'Der Benutzername ist nicht erlaubt.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_folder_list.lng b/interface/web/sites/lib/lang/de_web_folder_list.lng
index 5491202..34e8f86 100644
--- a/interface/web/sites/lib/lang/de_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/de_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Webseite';
 $wb['path_txt'] = 'Pfad';
+$wb['add_new_record_txt'] = 'Ordner hinzufügen';
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_folder_user_list.lng b/interface/web/sites/lib/lang/de_web_folder_user_list.lng
index 5357760..c9bcb9c 100644
--- a/interface/web/sites/lib/lang/de_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/de_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Aktiv';
 $wb['web_folder_id_txt'] = 'Ordner';
 $wb['username_txt'] = 'Benutzername';
+$wb['add_new_record_txt'] = 'Ordner Benutzer hinzufügen';
 ?>
diff --git a/interface/web/sites/lib/lang/el_ftp_user.lng b/interface/web/sites/lib/lang/el_ftp_user.lng
index 2f89d27..a77581d 100644
--- a/interface/web/sites/lib/lang/el_ftp_user.lng
+++ b/interface/web/sites/lib/lang/el_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/el_shell_user.lng b/interface/web/sites/lib/lang/el_shell_user.lng
index 3c3ea31..2ced9c2 100644
--- a/interface/web/sites/lib/lang/el_shell_user.lng
+++ b/interface/web/sites/lib/lang/el_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/el_web_folder_list.lng b/interface/web/sites/lib/lang/el_web_folder_list.lng
index 86dc18c..f1e9e33 100644
--- a/interface/web/sites/lib/lang/el_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/el_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Διαδρομή';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/el_web_folder_user_list.lng b/interface/web/sites/lib/lang/el_web_folder_user_list.lng
index 2103bcb..bcbd08c 100644
--- a/interface/web/sites/lib/lang/el_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/el_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Ενεργός';
 $wb['web_folder_id_txt'] = 'Φάκελος';
 $wb['username_txt'] = 'Όνομα Χρήστη';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/en_ftp_user.lng b/interface/web/sites/lib/lang/en_ftp_user.lng
index ed5fe02..2c8e2a9 100644
--- a/interface/web/sites/lib/lang/en_ftp_user.lng
+++ b/interface/web/sites/lib/lang/en_ftp_user.lng
@@ -32,4 +32,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/en_shell_user.lng b/interface/web/sites/lib/lang/en_shell_user.lng
index c15d1b5..2ae9b4e 100644
--- a/interface/web/sites/lib/lang/en_shell_user.lng
+++ b/interface/web/sites/lib/lang/en_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/en_web_folder_list.lng b/interface/web/sites/lib/lang/en_web_folder_list.lng
index 32780ab..5966c03 100644
--- a/interface/web/sites/lib/lang/en_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/en_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb["server_id_txt"] = 'Server';
 $wb["parent_domain_id_txt"] = 'Website';
 $wb["path_txt"] = 'Path';
+$wb["add_new_record_txt"] = 'Add new Folder';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_web_folder_user_list.lng b/interface/web/sites/lib/lang/en_web_folder_user_list.lng
index d0d9e05..d0350c9 100644
--- a/interface/web/sites/lib/lang/en_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/en_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb["active_txt"] = 'Active';
 $wb["web_folder_id_txt"] = 'Folder';
 $wb["username_txt"] = 'Username';
+$wb["add_new_record_txt"] = 'Add new Folder User';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/es_ftp_user.lng b/interface/web/sites/lib/lang/es_ftp_user.lng
index c8b86b0..f8a5e6c 100644
--- a/interface/web/sites/lib/lang/es_ftp_user.lng
+++ b/interface/web/sites/lib/lang/es_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/es_shell_user.lng b/interface/web/sites/lib/lang/es_shell_user.lng
index 45fd930..46c39cc 100644
--- a/interface/web/sites/lib/lang/es_shell_user.lng
+++ b/interface/web/sites/lib/lang/es_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/es_web_folder_list.lng b/interface/web/sites/lib/lang/es_web_folder_list.lng
index 668f626..e760a67 100644
--- a/interface/web/sites/lib/lang/es_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/es_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Servidor';
 $wb['parent_domain_id_txt'] = 'Sitio web';
 $wb['path_txt'] = 'Ruta';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/es_web_folder_user_list.lng b/interface/web/sites/lib/lang/es_web_folder_user_list.lng
index 7779911..9bdb1e9 100644
--- a/interface/web/sites/lib/lang/es_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/es_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Activar';
 $wb['web_folder_id_txt'] = 'Carpeta';
 $wb['username_txt'] = 'Nombre de usuario';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_ftp_user.lng b/interface/web/sites/lib/lang/fi_ftp_user.lng
index ca39439..4cf718c 100755
--- a/interface/web/sites/lib/lang/fi_ftp_user.lng
+++ b/interface/web/sites/lib/lang/fi_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_shell_user.lng b/interface/web/sites/lib/lang/fi_shell_user.lng
index 06fe1bd..116e8c8 100755
--- a/interface/web/sites/lib/lang/fi_shell_user.lng
+++ b/interface/web/sites/lib/lang/fi_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_web_folder_list.lng b/interface/web/sites/lib/lang/fi_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/fi_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/fi_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/fi_web_folder_user_list.lng b/interface/web/sites/lib/lang/fi_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/fi_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/fi_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/fr.lng b/interface/web/sites/lib/lang/fr.lng
index c914ef0..9acee9d 100644
--- a/interface/web/sites/lib/lang/fr.lng
+++ b/interface/web/sites/lib/lang/fr.lng
@@ -31,5 +31,5 @@
 $wb['Installed packages'] = 'Packages installés';
 $wb['Update Packagelist'] = 'Mise à jour de la liste des packages';
 $wb['Subdomain (Vhost)'] = 'Sous-domaine (Vhost)';
-$wb['error_proxy_requires_url'] = 'Type de redirection \"proxy\" nécessite une URL comme chemin de redirection.';
+$wb['error_proxy_requires_url'] = 'Type de redirection \\"proxy\\" nécessite une URL comme chemin de redirection.';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_aps.lng b/interface/web/sites/lib/lang/fr_aps.lng
index eb268b0..5d43e80 100644
--- a/interface/web/sites/lib/lang/fr_aps.lng
+++ b/interface/web/sites/lib/lang/fr_aps.lng
@@ -38,14 +38,14 @@
 $wb['error_license_agreement'] = 'Avant de continuer, vous devez accepter les conditions d\'utilisation (licence).';
 $wb['error_no_database_pw'] = 'Vous n\'avez pas renseigné de mot de passe BDD valide.';
 $wb['error_short_database_pw'] = 'Veuillez saisir un mot de passe BDD plus long.';
-$wb['error_no_value_for'] = 'Le champ \"%s\" ne peut pas être vide.';
-$wb['error_short_value_for'] = 'Le champ \"%s\" nécessite une valeur plus longue.';
-$wb['error_long_value_for'] = 'Le champ \"%s\" nécessite une valeur plus courte.';
-$wb['error_inv_value_for'] = 'Vous avez saisi une valeur invalide pour le champ \"%s\".';
-$wb['error_inv_email_for'] = 'L\'adresse email saisie pour le champ \"%s\" est invalide.';
-$wb['error_inv_domain_for'] = 'Le domaine saisi pour le champ \"%s\" est invalide.';
-$wb['error_inv_integer_for'] = 'Le nombre saisi pour le champ \"%s\" est invalide.';
-$wb['error_inv_float_for'] = 'La décimale saisie pour le champ \"%s\" est invalide.';
+$wb['error_no_value_for'] = 'Le champ \\"%s\\" ne peut pas être vide.';
+$wb['error_short_value_for'] = 'Le champ \\"%s\\" nécessite une valeur plus longue.';
+$wb['error_long_value_for'] = 'Le champ \\"%s\\" nécessite une valeur plus courte.';
+$wb['error_inv_value_for'] = 'Vous avez saisi une valeur invalide pour le champ \\"%s\\".';
+$wb['error_inv_email_for'] = 'L\'adresse email saisie pour le champ \\"%s\\" est invalide.';
+$wb['error_inv_domain_for'] = 'Le domaine saisi pour le champ \\"%s\\" est invalide.';
+$wb['error_inv_integer_for'] = 'Le nombre saisi pour le champ \\"%s\\" est invalide.';
+$wb['error_inv_float_for'] = 'La décimale saisie pour le champ \\"%s\\" est invalide.';
 $wb['error_used_location'] = 'Le chemin de destination contient déjà un package d\'installation.';
 $wb['installation_task_txt'] = 'Installation prévue';
 $wb['installation_error_txt'] = 'Erreur d\'installation';
diff --git a/interface/web/sites/lib/lang/fr_ftp_user.lng b/interface/web/sites/lib/lang/fr_ftp_user.lng
index 5d00f4b..f73a81b 100644
--- a/interface/web/sites/lib/lang/fr_ftp_user.lng
+++ b/interface/web/sites/lib/lang/fr_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Vérification du mot de passe';
 $wb['password_mismatch_txt'] = 'Les mots de passe ne correspondent pas.';
 $wb['password_match_txt'] = 'Les mots de passe correspondent.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_shell_user.lng b/interface/web/sites/lib/lang/fr_shell_user.lng
index 3f967f8..2e518d7 100644
--- a/interface/web/sites/lib/lang/fr_shell_user.lng
+++ b/interface/web/sites/lib/lang/fr_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'Les mots de passe correspondent.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'Le nom d\'utilisateur ne doit pas dépasser 32 caractères.';
 $wb['username_not_allowed_txt'] = 'Le nom d\'utilisateur est interdit.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_web_folder_list.lng b/interface/web/sites/lib/lang/fr_web_folder_list.lng
index f358f8c..0eed4fd 100644
--- a/interface/web/sites/lib/lang/fr_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/fr_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Serveur';
 $wb['parent_domain_id_txt'] = 'Site web';
 $wb['path_txt'] = 'Chemin';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_web_folder_user_list.lng b/interface/web/sites/lib/lang/fr_web_folder_user_list.lng
index e1824e2..663c6d2 100644
--- a/interface/web/sites/lib/lang/fr_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/fr_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Actif';
 $wb['web_folder_id_txt'] = 'Dossier';
 $wb['username_txt'] = 'Nom de l\'utilisateur';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/fr_web_subdomain.lng b/interface/web/sites/lib/lang/fr_web_subdomain.lng
index ebc7250..edc7be0 100644
--- a/interface/web/sites/lib/lang/fr_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/fr_web_subdomain.lng
@@ -42,5 +42,5 @@
 $wb['domain_error_wildcard'] = 'Les sous-domaines joker ne sont pas autorisés.';
 $wb['proxy_directives_txt'] = 'Directives pour les Proxy';
 $wb['available_proxy_directive_snippets_txt'] = 'Directives pour les Proxy Snippets disponibles :';
-$wb['error_proxy_requires_url'] = 'Les redirections de type \"proxy\" nécessitent une URL comme chemin de redirection.';
+$wb['error_proxy_requires_url'] = 'Les redirections de type \\"proxy\\" nécessitent une URL comme chemin de redirection.';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_ftp_user.lng b/interface/web/sites/lib/lang/hr_ftp_user.lng
index 6290c0e..dbefe0b 100644
--- a/interface/web/sites/lib/lang/hr_ftp_user.lng
+++ b/interface/web/sites/lib/lang/hr_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_shell_user.lng b/interface/web/sites/lib/lang/hr_shell_user.lng
index 4173787..d081fd7 100644
--- a/interface/web/sites/lib/lang/hr_shell_user.lng
+++ b/interface/web/sites/lib/lang/hr_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_web_folder_list.lng b/interface/web/sites/lib/lang/hr_web_folder_list.lng
index 5696589..0a900fb 100644
--- a/interface/web/sites/lib/lang/hr_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/hr_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Web stranica';
 $wb['path_txt'] = 'Putanja';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/hr_web_folder_user_list.lng b/interface/web/sites/lib/lang/hr_web_folder_user_list.lng
index af7792f..3beae9f 100644
--- a/interface/web/sites/lib/lang/hr_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/hr_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Aktivno';
 $wb['web_folder_id_txt'] = 'Web direkotrij';
 $wb['username_txt'] = 'Korisničko ime';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_ftp_user.lng b/interface/web/sites/lib/lang/hu_ftp_user.lng
index 132bc49..bbf61d4 100644
--- a/interface/web/sites/lib/lang/hu_ftp_user.lng
+++ b/interface/web/sites/lib/lang/hu_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_shell_user.lng b/interface/web/sites/lib/lang/hu_shell_user.lng
index 849f380..8eaa537 100644
--- a/interface/web/sites/lib/lang/hu_shell_user.lng
+++ b/interface/web/sites/lib/lang/hu_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_web_folder_list.lng b/interface/web/sites/lib/lang/hu_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/hu_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/hu_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/hu_web_folder_user_list.lng b/interface/web/sites/lib/lang/hu_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/hu_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/hu_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/id_ftp_user.lng b/interface/web/sites/lib/lang/id_ftp_user.lng
index 5e1dab2..4898de2 100644
--- a/interface/web/sites/lib/lang/id_ftp_user.lng
+++ b/interface/web/sites/lib/lang/id_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/id_shell_user.lng b/interface/web/sites/lib/lang/id_shell_user.lng
index 0ec09cc..83153c1 100644
--- a/interface/web/sites/lib/lang/id_shell_user.lng
+++ b/interface/web/sites/lib/lang/id_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/id_web_folder_list.lng b/interface/web/sites/lib/lang/id_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/id_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/id_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/id_web_folder_user_list.lng b/interface/web/sites/lib/lang/id_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/id_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/id_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/it_ftp_user.lng b/interface/web/sites/lib/lang/it_ftp_user.lng
index 1964a9f..bdd7818 100644
--- a/interface/web/sites/lib/lang/it_ftp_user.lng
+++ b/interface/web/sites/lib/lang/it_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/it_shell_user.lng b/interface/web/sites/lib/lang/it_shell_user.lng
index 8460d4e..8095f4b 100644
--- a/interface/web/sites/lib/lang/it_shell_user.lng
+++ b/interface/web/sites/lib/lang/it_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_folder_list.lng b/interface/web/sites/lib/lang/it_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/it_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/it_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/it_web_folder_user_list.lng b/interface/web/sites/lib/lang/it_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/it_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/it_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_ftp_user.lng b/interface/web/sites/lib/lang/ja_ftp_user.lng
index fb80ca3..8e92b1b 100644
--- a/interface/web/sites/lib/lang/ja_ftp_user.lng
+++ b/interface/web/sites/lib/lang/ja_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_shell_user.lng b/interface/web/sites/lib/lang/ja_shell_user.lng
index 19f09a5..2ce5ad3 100644
--- a/interface/web/sites/lib/lang/ja_shell_user.lng
+++ b/interface/web/sites/lib/lang/ja_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_web_folder_list.lng b/interface/web/sites/lib/lang/ja_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/ja_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/ja_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/ja_web_folder_user_list.lng b/interface/web/sites/lib/lang/ja_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/ja_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/ja_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_ftp_user.lng b/interface/web/sites/lib/lang/nl_ftp_user.lng
index 7f797de..16e4ae8 100644
--- a/interface/web/sites/lib/lang/nl_ftp_user.lng
+++ b/interface/web/sites/lib/lang/nl_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_shell_user.lng b/interface/web/sites/lib/lang/nl_shell_user.lng
index 53fed20..9a4ae63 100644
--- a/interface/web/sites/lib/lang/nl_shell_user.lng
+++ b/interface/web/sites/lib/lang/nl_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_web_folder_list.lng b/interface/web/sites/lib/lang/nl_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/nl_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/nl_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/nl_web_folder_user_list.lng b/interface/web/sites/lib/lang/nl_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/nl_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/nl_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/pl_ftp_user.lng b/interface/web/sites/lib/lang/pl_ftp_user.lng
index 5c91401..37dd36b 100644
--- a/interface/web/sites/lib/lang/pl_ftp_user.lng
+++ b/interface/web/sites/lib/lang/pl_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Powtórz hasło';
 $wb['password_mismatch_txt'] = 'Hasła nie pasują do siebie';
 $wb['password_match_txt'] = 'Hasła pasują';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/pl_shell_user.lng b/interface/web/sites/lib/lang/pl_shell_user.lng
index e51ef64..19674e3 100644
--- a/interface/web/sites/lib/lang/pl_shell_user.lng
+++ b/interface/web/sites/lib/lang/pl_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'Hasła pasują';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/pl_web_folder_list.lng b/interface/web/sites/lib/lang/pl_web_folder_list.lng
index 87a7690..75a403b 100644
--- a/interface/web/sites/lib/lang/pl_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/pl_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Serwer';
 $wb['parent_domain_id_txt'] = 'Witryna';
 $wb['path_txt'] = 'Ścieżka';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/pl_web_folder_user_list.lng b/interface/web/sites/lib/lang/pl_web_folder_user_list.lng
index 81769bd..728c1f7 100644
--- a/interface/web/sites/lib/lang/pl_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/pl_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Aktywny';
 $wb['web_folder_id_txt'] = 'Katalog';
 $wb['username_txt'] = 'Login';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_ftp_user.lng b/interface/web/sites/lib/lang/pt_ftp_user.lng
index 1770872..9f5ed04 100644
--- a/interface/web/sites/lib/lang/pt_ftp_user.lng
+++ b/interface/web/sites/lib/lang/pt_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_shell_user.lng b/interface/web/sites/lib/lang/pt_shell_user.lng
index 5e34648..4564bbc 100644
--- a/interface/web/sites/lib/lang/pt_shell_user.lng
+++ b/interface/web/sites/lib/lang/pt_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_web_folder_list.lng b/interface/web/sites/lib/lang/pt_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/pt_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/pt_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/pt_web_folder_user_list.lng b/interface/web/sites/lib/lang/pt_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/pt_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/pt_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_ftp_user.lng b/interface/web/sites/lib/lang/ro_ftp_user.lng
index d7415ec..e28b35e 100644
--- a/interface/web/sites/lib/lang/ro_ftp_user.lng
+++ b/interface/web/sites/lib/lang/ro_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_shell_user.lng b/interface/web/sites/lib/lang/ro_shell_user.lng
index d4620af..912b6b2 100644
--- a/interface/web/sites/lib/lang/ro_shell_user.lng
+++ b/interface/web/sites/lib/lang/ro_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_web_folder_list.lng b/interface/web/sites/lib/lang/ro_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/ro_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/ro_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/ro_web_folder_user_list.lng b/interface/web/sites/lib/lang/ro_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/ro_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/ro_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_ftp_user.lng b/interface/web/sites/lib/lang/ru_ftp_user.lng
index 58a2277..f9609ce 100644
--- a/interface/web/sites/lib/lang/ru_ftp_user.lng
+++ b/interface/web/sites/lib/lang/ru_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_shell_user.lng b/interface/web/sites/lib/lang/ru_shell_user.lng
index d87f544..f3b788f 100644
--- a/interface/web/sites/lib/lang/ru_shell_user.lng
+++ b/interface/web/sites/lib/lang/ru_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_web_folder_list.lng b/interface/web/sites/lib/lang/ru_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/ru_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/ru_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/ru_web_folder_user_list.lng b/interface/web/sites/lib/lang/ru_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/ru_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/ru_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/se.lng b/interface/web/sites/lib/lang/se.lng
index 780195f..a636705 100644
--- a/interface/web/sites/lib/lang/se.lng
+++ b/interface/web/sites/lib/lang/se.lng
@@ -31,6 +31,5 @@
 $wb['Installed packages'] = 'Installerade paket';
 $wb['Update Packagelist'] = 'Uppdatera paketlista';
 $wb['Subdomain (Vhost)'] = 'Underdomän (Vhost)';
-$wb['error_proxy_requires_url'] = 'Redirect Type "proxy" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_aps.lng b/interface/web/sites/lib/lang/se_aps.lng
index 315b03c..1fe8617 100644
--- a/interface/web/sites/lib/lang/se_aps.lng
+++ b/interface/web/sites/lib/lang/se_aps.lng
@@ -38,14 +38,14 @@
 $wb['error_license_agreement'] = 'In order to continue you have to accept the license agreement.';
 $wb['error_no_database_pw'] = 'You have provided no valid database password.';
 $wb['error_short_database_pw'] = 'Please choose a longer database password.';
-$wb['error_no_value_for'] = 'The field "%s" must not be empty.';
-$wb['error_short_value_for'] = 'The field "%s" requires a longer input value.';
-$wb['error_long_value_for'] = 'The field "%s" requires a shorter input value.';
-$wb['error_inv_value_for'] = 'You have entered an invalid value for the field "%s".';
-$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field "%s".';
-$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field "%s".';
-$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field "%s".';
-$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field "%s".';
+$wb['error_no_value_for'] = 'The field \"%s\" must not be empty.';
+$wb['error_short_value_for'] = 'The field \"%s\" requires a longer input value.';
+$wb['error_long_value_for'] = 'The field \"%s\" requires a shorter input value.';
+$wb['error_inv_value_for'] = 'You have entered an invalid value for the field \"%s\".';
+$wb['error_inv_email_for'] = 'You have entered an invalid mail address for the field \"%s\".';
+$wb['error_inv_domain_for'] = 'You have entered an invalid domain for the field \"%s\".';
+$wb['error_inv_integer_for'] = 'You have entered an invalid number for the field \"%s\".';
+$wb['error_inv_float_for'] = 'You have entered an invalid floating point number for the field \"%s\".';
 $wb['error_used_location'] = 'The installation path already contains a package installation.';
 $wb['installation_task_txt'] = 'Installation planerad';
 $wb['installation_error_txt'] = 'Installationsfel';
@@ -56,4 +56,3 @@
 $wb['btn_cancel_txt'] = 'Avbryt';
 $wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_aps_instances_list.lng b/interface/web/sites/lib/lang/se_aps_instances_list.lng
index 81cda2a..a9428aa 100644
--- a/interface/web/sites/lib/lang/se_aps_instances_list.lng
+++ b/interface/web/sites/lib/lang/se_aps_instances_list.lng
@@ -11,4 +11,3 @@
 $wb['delete_txt'] = 'Radera';
 $wb['reinstall_txt'] = 'Ominstallera';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_aps_packages_list.lng b/interface/web/sites/lib/lang/se_aps_packages_list.lng
index 1746bfd..8555961 100644
--- a/interface/web/sites/lib/lang/se_aps_packages_list.lng
+++ b/interface/web/sites/lib/lang/se_aps_packages_list.lng
@@ -6,4 +6,3 @@
 $wb['status_txt'] = 'Olåst';
 $wb['filter_txt'] = 'Sök';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_aps_update_packagelist.lng b/interface/web/sites/lib/lang/se_aps_update_packagelist.lng
index 8d84c05..891a951 100644
--- a/interface/web/sites/lib/lang/se_aps_update_packagelist.lng
+++ b/interface/web/sites/lib/lang/se_aps_update_packagelist.lng
@@ -5,4 +5,3 @@
 $wb['btn_cancel_txt'] = 'Avbryt';
 $wb['legend_txt'] = 'Here you can update the list of available packages. Please note that this can take up to five minutes. You can leave this page if you like; the process will continue in the background.';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_cron.lng b/interface/web/sites/lib/lang/se_cron.lng
index bc89db2..83b7d3b 100644
--- a/interface/web/sites/lib/lang/se_cron.lng
+++ b/interface/web/sites/lib/lang/se_cron.lng
@@ -22,4 +22,3 @@
 $wb['limit_cron_url_txt'] = 'URL cron only. Please enter a URL starting with http:// as cron command.';
 $wb['command_error_empty'] = 'Kommandofältet är tomt.';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_cron_list.lng b/interface/web/sites/lib/lang/se_cron_list.lng
index b17951c..0459144 100644
--- a/interface/web/sites/lib/lang/se_cron_list.lng
+++ b/interface/web/sites/lib/lang/se_cron_list.lng
@@ -11,4 +11,3 @@
 $wb['add_new_cron_txt'] = 'Lägg till nytt cron-jobb';
 $wb['parent_domain_id_txt'] = 'Webbsida';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_database.lng b/interface/web/sites/lib/lang/se_database.lng
index 03eac08..c06c3f0 100644
--- a/interface/web/sites/lib/lang/se_database.lng
+++ b/interface/web/sites/lib/lang/se_database.lng
@@ -44,4 +44,3 @@
 $wb['database_client_differs_txt'] = 'The client of the parent web and the database do not match.';
 $wb['database_user_missing_txt'] = 'Vänligen välj en databasanvändare för den här databasen.';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_database_admin_list.lng b/interface/web/sites/lib/lang/se_database_admin_list.lng
index fe415d3..640c07c 100644
--- a/interface/web/sites/lib/lang/se_database_admin_list.lng
+++ b/interface/web/sites/lib/lang/se_database_admin_list.lng
@@ -9,4 +9,3 @@
 $wb['sys_groupid_txt'] = 'Kund';
 $wb['parent_domain_id_txt'] = 'Webbsida';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_database_list.lng b/interface/web/sites/lib/lang/se_database_list.lng
index 3909b37..bfcdaf3 100644
--- a/interface/web/sites/lib/lang/se_database_list.lng
+++ b/interface/web/sites/lib/lang/se_database_list.lng
@@ -8,4 +8,3 @@
 $wb['database_user_txt'] = 'Databasanvändare';
 $wb['parent_domain_id_txt'] = 'Webbsida';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_database_user.lng b/interface/web/sites/lib/lang/se_database_user.lng
index c707175..2cf9a1a 100644
--- a/interface/web/sites/lib/lang/se_database_user.lng
+++ b/interface/web/sites/lib/lang/se_database_user.lng
@@ -21,4 +21,3 @@
 $wb['globalsearch_searchfield_watermark_txt'] = 'Sök';
 $wb['globalsearch_suggestions_text_txt'] = 'Förslag';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_database_user_admin_list.lng b/interface/web/sites/lib/lang/se_database_user_admin_list.lng
index 6eca0b7..a9bb594 100644
--- a/interface/web/sites/lib/lang/se_database_user_admin_list.lng
+++ b/interface/web/sites/lib/lang/se_database_user_admin_list.lng
@@ -4,4 +4,3 @@
 $wb['add_new_record_txt'] = 'Lägg till ny användare';
 $wb['sys_groupid_txt'] = 'Kund';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_database_user_list.lng b/interface/web/sites/lib/lang/se_database_user_list.lng
index cb62444..c0eef9d 100644
--- a/interface/web/sites/lib/lang/se_database_user_list.lng
+++ b/interface/web/sites/lib/lang/se_database_user_list.lng
@@ -3,4 +3,3 @@
 $wb['database_user_txt'] = 'Databasanvändare';
 $wb['add_new_record_txt'] = 'Lägg till ny användare';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_ftp_user.lng b/interface/web/sites/lib/lang/se_ftp_user.lng
index 50d9031..3ba08a2 100644
--- a/interface/web/sites/lib/lang/se_ftp_user.lng
+++ b/interface/web/sites/lib/lang/se_ftp_user.lng
@@ -31,5 +31,6 @@
 $wb['repeat_password_txt'] = 'Upprepa lösenord';
 $wb['password_mismatch_txt'] = 'Lösenorden matchar inte';
 $wb['password_match_txt'] = 'Lösenorden matchar';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_ftp_user_list.lng b/interface/web/sites/lib/lang/se_ftp_user_list.lng
index c833d1a..f0ac760 100644
--- a/interface/web/sites/lib/lang/se_ftp_user_list.lng
+++ b/interface/web/sites/lib/lang/se_ftp_user_list.lng
@@ -6,4 +6,3 @@
 $wb['username_txt'] = 'Användarnamn';
 $wb['add_new_record_txt'] = 'Lägg till ny FTP-användare';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_shell_user.lng b/interface/web/sites/lib/lang/se_shell_user.lng
index b2d0083..8095f4b 100644
--- a/interface/web/sites/lib/lang/se_shell_user.lng
+++ b/interface/web/sites/lib/lang/se_shell_user.lng
@@ -28,5 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_shell_user_list.lng b/interface/web/sites/lib/lang/se_shell_user_list.lng
index 3389173..4a9d7cb 100644
--- a/interface/web/sites/lib/lang/se_shell_user_list.lng
+++ b/interface/web/sites/lib/lang/se_shell_user_list.lng
@@ -6,4 +6,3 @@
 $wb['username_txt'] = 'Username';
 $wb['add_new_record_txt'] = 'Add new Shell-User';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_user_quota_stats_list.lng b/interface/web/sites/lib/lang/se_user_quota_stats_list.lng
index 2084a49..7fe4791 100644
--- a/interface/web/sites/lib/lang/se_user_quota_stats_list.lng
+++ b/interface/web/sites/lib/lang/se_user_quota_stats_list.lng
@@ -7,4 +7,3 @@
 $wb['soft_txt'] = 'Soft limit';
 $wb['files_txt'] = 'Single files';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_aliasdomain.lng b/interface/web/sites/lib/lang/se_web_aliasdomain.lng
index ecbc150..4149c71 100644
--- a/interface/web/sites/lib/lang/se_web_aliasdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_aliasdomain.lng
@@ -113,4 +113,3 @@
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
 $wb['Domain'] = 'Aliasdomain';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_aliasdomain_list.lng b/interface/web/sites/lib/lang/se_web_aliasdomain_list.lng
index 4860654..8ea34c4 100644
--- a/interface/web/sites/lib/lang/se_web_aliasdomain_list.lng
+++ b/interface/web/sites/lib/lang/se_web_aliasdomain_list.lng
@@ -12,4 +12,3 @@
 $wb['no_flag_txt'] = 'No flag';
 $wb['none_txt'] = 'None';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_backup_list.lng b/interface/web/sites/lib/lang/se_web_backup_list.lng
index 261304d..e743953 100644
--- a/interface/web/sites/lib/lang/se_web_backup_list.lng
+++ b/interface/web/sites/lib/lang/se_web_backup_list.lng
@@ -13,4 +13,3 @@
 $wb['backup_type_mysql'] = 'MySQL-databaser';
 $wb['backup_type_web'] = 'Webbsidefiler';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_domain.lng b/interface/web/sites/lib/lang/se_web_domain.lng
index e281579..2b9a056 100644
--- a/interface/web/sites/lib/lang/se_web_domain.lng
+++ b/interface/web/sites/lib/lang/se_web_domain.lng
@@ -128,4 +128,3 @@
 $wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.';
 $wb['invalid_custom_php_ini_settings_txt'] = 'Ogiltiga php.ini-inställningar';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_domain_admin_list.lng b/interface/web/sites/lib/lang/se_web_domain_admin_list.lng
index 0737245..b460e27 100644
--- a/interface/web/sites/lib/lang/se_web_domain_admin_list.lng
+++ b/interface/web/sites/lib/lang/se_web_domain_admin_list.lng
@@ -7,4 +7,3 @@
 $wb['domain_txt'] = 'Domain';
 $wb['add_new_record_txt'] = 'Add new website';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_domain_list.lng b/interface/web/sites/lib/lang/se_web_domain_list.lng
index eabd544..88ec412 100644
--- a/interface/web/sites/lib/lang/se_web_domain_list.lng
+++ b/interface/web/sites/lib/lang/se_web_domain_list.lng
@@ -6,4 +6,3 @@
 $wb['domain_txt'] = 'Domain';
 $wb['add_new_record_txt'] = 'Add new website';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_folder.lng b/interface/web/sites/lib/lang/se_web_folder.lng
index 96553c5..6dbc158 100644
--- a/interface/web/sites/lib/lang/se_web_folder.lng
+++ b/interface/web/sites/lib/lang/se_web_folder.lng
@@ -6,4 +6,3 @@
 $wb['path_error_regex'] = 'Ogiltig katalogsökväg';
 $wb['error_folder_already_protected_txt'] = 'Det finns redan ett inlägg för den här mappen.';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_folder_list.lng b/interface/web/sites/lib/lang/se_web_folder_list.lng
index 194e744..f3ce8b1 100644
--- a/interface/web/sites/lib/lang/se_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/se_web_folder_list.lng
@@ -4,5 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Webbsida';
 $wb['path_txt'] = 'Sökväg';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_folder_user.lng b/interface/web/sites/lib/lang/se_web_folder_user.lng
index 0c52cfa..6db2415 100644
--- a/interface/web/sites/lib/lang/se_web_folder_user.lng
+++ b/interface/web/sites/lib/lang/se_web_folder_user.lng
@@ -12,4 +12,3 @@
 $wb['no_folder_perm'] = 'Du har inga rättigheter för denna katalog';
 $wb['error_user_exists_already_txt'] = 'Det finns redan ett inlägg för denna användare';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_folder_user_list.lng b/interface/web/sites/lib/lang/se_web_folder_user_list.lng
index 3af6f70..67612f5 100644
--- a/interface/web/sites/lib/lang/se_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/se_web_folder_user_list.lng
@@ -3,5 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_sites_stats_list.lng b/interface/web/sites/lib/lang/se_web_sites_stats_list.lng
index 66137dc..95a8256 100644
--- a/interface/web/sites/lib/lang/se_web_sites_stats_list.lng
+++ b/interface/web/sites/lib/lang/se_web_sites_stats_list.lng
@@ -7,4 +7,3 @@
 $wb['last_year_txt'] = 'Förra året';
 $wb['sum_txt'] = 'Total';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_subdomain.lng b/interface/web/sites/lib/lang/se_web_subdomain.lng
index 8955209..856d3c2 100644
--- a/interface/web/sites/lib/lang/se_web_subdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_subdomain.lng
@@ -42,6 +42,5 @@
 $wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
 $wb['proxy_directives_txt'] = 'Proxy Directives';
 $wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
-$wb['error_proxy_requires_url'] = 'Redirect Type "proxy" requires a URL as the redirect path.';
+$wb['error_proxy_requires_url'] = 'Redirect Type \"proxy\" requires a URL as the redirect path.';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_subdomain_list.lng b/interface/web/sites/lib/lang/se_web_subdomain_list.lng
index 58084a6..1c16bcd 100644
--- a/interface/web/sites/lib/lang/se_web_subdomain_list.lng
+++ b/interface/web/sites/lib/lang/se_web_subdomain_list.lng
@@ -6,4 +6,3 @@
 $wb['domain_txt'] = 'Subdomain';
 $wb['add_new_record_txt'] = 'Add new subdomain';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng
index 409c830..c0ca93b 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_subdomain.lng
@@ -125,4 +125,3 @@
 $wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.';
 $wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_web_vhost_subdomain_list.lng b/interface/web/sites/lib/lang/se_web_vhost_subdomain_list.lng
index 9604437..100b03b 100644
--- a/interface/web/sites/lib/lang/se_web_vhost_subdomain_list.lng
+++ b/interface/web/sites/lib/lang/se_web_vhost_subdomain_list.lng
@@ -6,4 +6,3 @@
 $wb['domain_txt'] = 'Underdomän';
 $wb['add_new_record_txt'] = 'Lägg till ny underdomän';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_webdav_user.lng b/interface/web/sites/lib/lang/se_webdav_user.lng
index 4c3fe5e..07dc281 100644
--- a/interface/web/sites/lib/lang/se_webdav_user.lng
+++ b/interface/web/sites/lib/lang/se_webdav_user.lng
@@ -19,4 +19,3 @@
 $wb['password_mismatch_txt'] = 'Lösenorden matchar inte';
 $wb['password_match_txt'] = 'Lösenorden matchar';
 ?>
-
diff --git a/interface/web/sites/lib/lang/se_webdav_user_list.lng b/interface/web/sites/lib/lang/se_webdav_user_list.lng
index 96bd318..a6031a1 100644
--- a/interface/web/sites/lib/lang/se_webdav_user_list.lng
+++ b/interface/web/sites/lib/lang/se_webdav_user_list.lng
@@ -6,4 +6,3 @@
 $wb['username_txt'] = 'Användarnamn';
 $wb['add_new_record_txt'] = 'Lägg till ny WebDAV-användare';
 ?>
-
diff --git a/interface/web/sites/lib/lang/sk_ftp_user.lng b/interface/web/sites/lib/lang/sk_ftp_user.lng
index 1526d40..c57cbfd 100644
--- a/interface/web/sites/lib/lang/sk_ftp_user.lng
+++ b/interface/web/sites/lib/lang/sk_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_shell_user.lng b/interface/web/sites/lib/lang/sk_shell_user.lng
index 79f9eac..8b94d0d 100644
--- a/interface/web/sites/lib/lang/sk_shell_user.lng
+++ b/interface/web/sites/lib/lang/sk_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_web_folder_list.lng b/interface/web/sites/lib/lang/sk_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/sk_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/sk_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/sk_web_folder_user_list.lng b/interface/web/sites/lib/lang/sk_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/sk_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/sk_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_ftp_user.lng b/interface/web/sites/lib/lang/tr_ftp_user.lng
index 4cc2f4d..62401de 100644
--- a/interface/web/sites/lib/lang/tr_ftp_user.lng
+++ b/interface/web/sites/lib/lang/tr_ftp_user.lng
@@ -31,4 +31,6 @@
 $wb['repeat_password_txt'] = 'Repeat Password';
 $wb['password_mismatch_txt'] = 'The passwords do not match.';
 $wb['password_match_txt'] = 'The passwords do match.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_shell_user.lng b/interface/web/sites/lib/lang/tr_shell_user.lng
index ac45063..0c932c1 100644
--- a/interface/web/sites/lib/lang/tr_shell_user.lng
+++ b/interface/web/sites/lib/lang/tr_shell_user.lng
@@ -28,4 +28,7 @@
 $wb['password_match_txt'] = 'The passwords do match.';
 $wb['username_must_not_exceed_32_chars_txt'] = 'The username must not exceed 32 characters.';
 $wb['username_not_allowed_txt'] = 'The username is not allowed.';
+$wb['invalid_system_user_or_group_txt'] = 'Invalid system user or group';
+$wb['directory_error_regex'] = 'Invalid directory';
+$wb['shell_error_regex'] = 'Invalid shell';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_folder_list.lng b/interface/web/sites/lib/lang/tr_web_folder_list.lng
index 76d9702..89f8b65 100644
--- a/interface/web/sites/lib/lang/tr_web_folder_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_folder_list.lng
@@ -4,4 +4,5 @@
 $wb['server_id_txt'] = 'Server';
 $wb['parent_domain_id_txt'] = 'Website';
 $wb['path_txt'] = 'Path';
+$wb['add_new_record_txt'] = 'Add new Folder';
 ?>
diff --git a/interface/web/sites/lib/lang/tr_web_folder_user_list.lng b/interface/web/sites/lib/lang/tr_web_folder_user_list.lng
index 9a7286a..67612f5 100644
--- a/interface/web/sites/lib/lang/tr_web_folder_user_list.lng
+++ b/interface/web/sites/lib/lang/tr_web_folder_user_list.lng
@@ -3,4 +3,5 @@
 $wb['active_txt'] = 'Active';
 $wb['web_folder_id_txt'] = 'Folder';
 $wb['username_txt'] = 'Username';
+$wb['add_new_record_txt'] = 'Add new Folder User';
 ?>
diff --git a/interface/web/sites/shell_user_edit.php b/interface/web/sites/shell_user_edit.php
index 3c72a5f..f301139 100644
--- a/interface/web/sites/shell_user_edit.php
+++ b/interface/web/sites/shell_user_edit.php
@@ -135,6 +135,8 @@
 			}
 		}
 		unset($blacklist);
+		
+		if($app->functions->is_allowed_user(trim(strtolower($this->dataRecord['username']))) == false) $app->tform->errorMessage .= $app->tform->lng('username_not_allowed_txt');
 
 		/*
 		 * If the names should be restricted -> do it!
@@ -163,6 +165,11 @@
 		$dir = $app->db->quote($web["document_root"]);
 		$uid = $app->db->quote($web["system_user"]);
 		$gid = $app->db->quote($web["system_group"]);
+		
+		// Check system user and group
+		if($app->functions->is_allowed_user($uid) == false || $app->functions->is_allowed_group($gid) == false) {
+			$app->error($app->tform->lng('invalid_system_user_or_group_txt'));
+		}
 
 		// The FTP user shall be owned by the same group then the website
 		$sys_groupid = $app->functions->intval($web['sys_groupid']);
diff --git a/interface/web/sites/web_aliasdomain_edit.php b/interface/web/sites/web_aliasdomain_edit.php
index 4131109..008e707 100644
--- a/interface/web/sites/web_aliasdomain_edit.php
+++ b/interface/web/sites/web_aliasdomain_edit.php
@@ -123,9 +123,17 @@
 
 	function onSubmit() {
 		global $app, $conf;
+		
+		// Get the record of the parent domain
+		if(!@$this->dataRecord["parent_domain_id"] && $this->id) {
+			$tmp = $app->db->queryOneRecord("SELECT parent_domain_id FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+			if($tmp) $this->dataRecord["parent_domain_id"] = $tmp['parent_domain_id'];
+			unset($tmp);
+		}
 
 		// Get the record of the parent domain
 		$parent_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
+		
 		if(!$parent_domain || $parent_domain['domain_id'] != @$this->dataRecord['parent_domain_id']) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
 		/* check if the domain module is used - and check if the selected domain can be used! */
 		$app->uses('ini_parser,getconf');
@@ -153,7 +161,7 @@
 
 		//* make sure that the domain is lowercase
 		if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
-
+		
 		parent::onSubmit();
 	}
 
diff --git a/interface/web/sites/web_domain_edit.php b/interface/web/sites/web_domain_edit.php
index 990e8cd..1208e48 100644
--- a/interface/web/sites/web_domain_edit.php
+++ b/interface/web/sites/web_domain_edit.php
@@ -607,9 +607,11 @@
 			// When the record is updated
 			if($this->id > 0) {
 				// restore the server ID if the user is not admin and record is edited
-				$tmp = $app->db->queryOneRecord("SELECT server_id, `cgi`, `ssi`, `perl`, `ruby`, `python`, `suexec`, `errordocs`, `subdomain`, `ssl` FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+				$tmp = $app->db->queryOneRecord("SELECT server_id, `system_user`, `system_group`, `cgi`, `ssi`, `perl`, `ruby`, `python`, `suexec`, `errordocs`, `subdomain`, `ssl` FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
 				$this->dataRecord["server_id"] = $tmp["server_id"];
 
+				$this->dataRecord['system_user'] = $tmp['system_user'];
+				$this->dataRecord['system_group'] = $tmp['system_group'];
 				// set the settings to current if not provided (or cleared due to limits)
 				if($this->dataRecord['cgi'] == 'n') $this->dataRecord['cgi'] = $tmp['cgi'];
 				if($this->dataRecord['ssi'] == 'n') $this->dataRecord['ssi'] = $tmp['ssi'];
@@ -749,7 +751,7 @@
 					// value inside ''
 					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*\'.*\'\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
 					// everything else
-					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*[-a-zA-Z0-9~&=_\@/,.#\s]*\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
+					if(preg_match('@^\s*;*\s*[a-zA-Z0-9._]*\s*=\s*[-a-zA-Z0-9~&=_\@/,.#\s|()]*\s*;*\s*$@', $custom_php_ini_settings_line)) continue;
 					$custom_php_ini_settings_are_valid = false;
 					break;
 				}
diff --git a/interface/web/sites/web_subdomain_edit.php b/interface/web/sites/web_subdomain_edit.php
index 0d485c4..4d079ff 100644
--- a/interface/web/sites/web_subdomain_edit.php
+++ b/interface/web/sites/web_subdomain_edit.php
@@ -130,6 +130,13 @@
 
 	function onSubmit() {
 		global $app, $conf;
+		
+		// Get the record of the parent domain
+		if(!@$this->dataRecord["parent_domain_id"] && $this->id) {
+			$tmp = $app->db->queryOneRecord("SELECT parent_domain_id FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+			if($tmp) $this->dataRecord["parent_domain_id"] = $tmp['parent_domain_id'];
+			unset($tmp);
+		}
 
 		// Get the record of the parent domain
 		$parent_domain = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval(@$this->dataRecord["parent_domain_id"]) . " AND ".$app->tform->getAuthSQL('r'));
@@ -162,7 +169,7 @@
 
 		//* make sure that the domain is lowercase
 		if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
-
+		
 		parent::onSubmit();
 	}
 
diff --git a/interface/web/sites/web_vhost_subdomain_edit.php b/interface/web/sites/web_vhost_subdomain_edit.php
index 37359a2..ef1fc4c 100644
--- a/interface/web/sites/web_vhost_subdomain_edit.php
+++ b/interface/web/sites/web_vhost_subdomain_edit.php
@@ -341,6 +341,8 @@
 		$this->dataRecord["ipv6_address"] = $parent_domain["ipv6_address"];
 		$this->dataRecord["client_group_id"] = $parent_domain["client_group_id"];
 		$this->dataRecord["vhost_type"] = 'name';
+		$this->dataRecord["system_user"] = $parent_domain["system_user"];
+		$this->dataRecord["system_group"] = $parent_domain["system_group"];
 
 		$this->parent_domain_record = $parent_domain;
 
diff --git a/interface/web/strengthmeter/lib/lang/se_strengthmeter.lng b/interface/web/strengthmeter/lib/lang/se_strengthmeter.lng
index 16dcfff..7fb81bf 100644
--- a/interface/web/strengthmeter/lib/lang/se_strengthmeter.lng
+++ b/interface/web/strengthmeter/lib/lang/se_strengthmeter.lng
@@ -6,4 +6,3 @@
 $wb['password_strength_4_txt'] = 'Starkt';
 $wb['password_strength_5_txt'] = 'Mycket starkt';
 ?>
-
diff --git a/interface/web/themes/blue/ispconfig_version b/interface/web/themes/blue/ispconfig_version
index ec33020..0b23ab9 100644
--- a/interface/web/themes/blue/ispconfig_version
+++ b/interface/web/themes/blue/ispconfig_version
@@ -1 +1 @@
-3.0.5.4p1
+3.0.5.4p2
diff --git a/interface/web/themes/blue/templates/main.tpl.htm b/interface/web/themes/blue/templates/main.tpl.htm
index 70c4f26..0007256 100644
--- a/interface/web/themes/blue/templates/main.tpl.htm
+++ b/interface/web/themes/blue/templates/main.tpl.htm
@@ -161,6 +161,7 @@
                 <!-- begin: #content -->
                 <section id="content">
                     <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+						<input type="text" style="display:none" /><input type="password" style="display:none"/>
                         <div id="pageContent"><!-- AJAX CONTENT --></div>
                     </form>
                     <div id="ie_clearing">&nbsp;</div>
diff --git a/interface/web/themes/default-304/templates/main.tpl.htm b/interface/web/themes/default-304/templates/main.tpl.htm
index 862693b..7f227e1 100644
--- a/interface/web/themes/default-304/templates/main.tpl.htm
+++ b/interface/web/themes/default-304/templates/main.tpl.htm
@@ -168,6 +168,7 @@
                             <a id="content" name="content"></a>
                             <!-- skiplink anchor: Content -->
                             <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+								<input type="text" style="display:none" /><input type="password" style="display:none"/>
                                 <div id="pageContent"><!-- AJAX CONTENT --></div>
                             </form>
                         </div>
diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm
index 9146291..3339d9f 100644
--- a/interface/web/themes/default/templates/main.tpl.htm
+++ b/interface/web/themes/default/templates/main.tpl.htm
@@ -164,6 +164,7 @@
                 <!-- begin: #content -->
                 <section id="content">
                     <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+						<input type="text" style="display:none" /><input type="password" style="display:none"/>
                         <div id="pageContent"><!-- AJAX CONTENT --></div>
                     </form>
                     <div id="ie_clearing">&nbsp;</div>
diff --git a/interface/web/themes/default_64_navimg/templates/main.tpl.htm b/interface/web/themes/default_64_navimg/templates/main.tpl.htm
index c0180e1..6d0395b 100644
--- a/interface/web/themes/default_64_navimg/templates/main.tpl.htm
+++ b/interface/web/themes/default_64_navimg/templates/main.tpl.htm
@@ -168,6 +168,7 @@
                         <a id="content" name="content"></a>
                         <!-- skiplink anchor: Content -->
                         <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+						<input type="text" style="display:none" /><input type="password" style="display:none"/>
                         <div id="pageContent"><!-- AJAX CONTENT --></div>
                         </form>
                     </div>
diff --git a/interface/web/themes/default_combobox/templates/main.tpl.htm b/interface/web/themes/default_combobox/templates/main.tpl.htm
index 142794e..1df185f 100644
--- a/interface/web/themes/default_combobox/templates/main.tpl.htm
+++ b/interface/web/themes/default_combobox/templates/main.tpl.htm
@@ -323,6 +323,7 @@
                         <a id="content" name="content"></a>
                         <!-- skiplink anchor: Content -->
                         <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+						<input type="text" style="display:none" /><input type="password" style="display:none"/>
                         <div id="pageContent"><!-- AJAX CONTENT --></div>
                         </form>
                     </div>
diff --git a/interface/web/themes/default_no_navimg/templates/main.tpl.htm b/interface/web/themes/default_no_navimg/templates/main.tpl.htm
index 5f45a0a..adfc656 100644
--- a/interface/web/themes/default_no_navimg/templates/main.tpl.htm
+++ b/interface/web/themes/default_no_navimg/templates/main.tpl.htm
@@ -169,6 +169,7 @@
                         <a id="content" name="content"></a>
                         <!-- skiplink anchor: Content -->
                         <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+						<input type="text" style="display:none" /><input type="password" style="display:none"/>
                         <div id="pageContent"><!-- AJAX CONTENT --></div>
                         </form>
                     </div>
diff --git a/interface/web/tools/lib/lang/se.lng b/interface/web/tools/lib/lang/se.lng
index 5c93f2b..e6da742 100644
--- a/interface/web/tools/lib/lang/se.lng
+++ b/interface/web/tools/lib/lang/se.lng
@@ -11,4 +11,3 @@
 $wb['PDNS Tupa'] = 'PowerDNS Tupa';
 $wb['Interface'] = 'Interface';
 ?>
-
diff --git a/interface/web/tools/lib/lang/se_import_ispconfig.lng b/interface/web/tools/lib/lang/se_import_ispconfig.lng
index 0aad8ad..17ddae9 100644
--- a/interface/web/tools/lib/lang/se_import_ispconfig.lng
+++ b/interface/web/tools/lib/lang/se_import_ispconfig.lng
@@ -21,4 +21,3 @@
 $wb['import_user_filter_txt'] = 'Importera användarfilter';
 $wb['import_spamfilter_txt'] = 'Importera spamfilter';
 ?>
-
diff --git a/interface/web/tools/lib/lang/se_index.lng b/interface/web/tools/lib/lang/se_index.lng
index cf5012f..e395435 100644
--- a/interface/web/tools/lib/lang/se_index.lng
+++ b/interface/web/tools/lib/lang/se_index.lng
@@ -2,4 +2,3 @@
 $wb['page_head_txt'] = 'ISPConfig verktyg';
 $wb['page_desc_txt'] = 'Ändra användarinställningar';
 ?>
-
diff --git a/interface/web/tools/lib/lang/se_interface.lng b/interface/web/tools/lib/lang/se_interface.lng
index 8336796..9a66f59 100644
--- a/interface/web/tools/lib/lang/se_interface.lng
+++ b/interface/web/tools/lib/lang/se_interface.lng
@@ -5,4 +5,3 @@
 $wb['startmodule_txt'] = 'Startmodul';
 $wb['app_theme_txt'] = 'Design';
 ?>
-
diff --git a/interface/web/tools/lib/lang/se_tpl_default.lng b/interface/web/tools/lib/lang/se_tpl_default.lng
index 4c0fd71..013666e 100644
--- a/interface/web/tools/lib/lang/se_tpl_default.lng
+++ b/interface/web/tools/lib/lang/se_tpl_default.lng
@@ -5,4 +5,3 @@
 $wb['btn_start_txt'] = 'Spara';
 $wb['btn_cancel_txt'] = 'Tillbaka';
 ?>
-
diff --git a/interface/web/tools/lib/lang/se_usersettings.lng b/interface/web/tools/lib/lang/se_usersettings.lng
index 85176ac..f7e05e9 100644
--- a/interface/web/tools/lib/lang/se_usersettings.lng
+++ b/interface/web/tools/lib/lang/se_usersettings.lng
@@ -10,4 +10,3 @@
 $wb['password_mismatch_txt'] = 'Lösenorden matchar inte';
 $wb['password_match_txt'] = 'Lösenorden matchar';
 ?>
-
diff --git a/interface/web/vm/lib/lang/se.lng b/interface/web/vm/lib/lang/se.lng
index 5c1ab58..4167e14 100644
--- a/interface/web/vm/lib/lang/se.lng
+++ b/interface/web/vm/lib/lang/se.lng
@@ -5,4 +5,3 @@
 $wb['IP addresses'] = 'IP addresses';
 $wb['OpenVZ'] = 'OpenVZ';
 ?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_action.lng b/interface/web/vm/lib/lang/se_openvz_action.lng
index 71e7263..52f7328 100644
--- a/interface/web/vm/lib/lang/se_openvz_action.lng
+++ b/interface/web/vm/lib/lang/se_openvz_action.lng
@@ -14,4 +14,3 @@
 $wb['ostemplate_name_unique_error'] = 'There is already a OSTemplate with that name.';
 $wb['ostemplate_exec_txt'] = 'The command to create a OSTemplate has been sent to the host server. It will take several minutes until the OSTemplate has been created.';
 ?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_ip.lng b/interface/web/vm/lib/lang/se_openvz_ip.lng
index 67f6885..6016681 100644
--- a/interface/web/vm/lib/lang/se_openvz_ip.lng
+++ b/interface/web/vm/lib/lang/se_openvz_ip.lng
@@ -7,4 +7,3 @@
 $wb['ip_error_unique'] = 'This IP address does already exist.';
 $wb['IP address'] = 'IP address';
 ?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_ip_list.lng b/interface/web/vm/lib/lang/se_openvz_ip_list.lng
index 37c1d62e..e6a3a68 100644
--- a/interface/web/vm/lib/lang/se_openvz_ip_list.lng
+++ b/interface/web/vm/lib/lang/se_openvz_ip_list.lng
@@ -5,4 +5,3 @@
 $wb['reserved_txt'] = 'Reserved';
 $wb['vm_id_txt'] = 'VM';
 ?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_ostemplate.lng b/interface/web/vm/lib/lang/se_openvz_ostemplate.lng
index bfeb299..256750f 100644
--- a/interface/web/vm/lib/lang/se_openvz_ostemplate.lng
+++ b/interface/web/vm/lib/lang/se_openvz_ostemplate.lng
@@ -9,4 +9,3 @@
 $wb['template_file_error_empty'] = 'Template filename is empty.';
 $wb['Template'] = 'Template';
 ?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_ostemplate_list.lng b/interface/web/vm/lib/lang/se_openvz_ostemplate_list.lng
index df01680..6471ec0 100644
--- a/interface/web/vm/lib/lang/se_openvz_ostemplate_list.lng
+++ b/interface/web/vm/lib/lang/se_openvz_ostemplate_list.lng
@@ -6,4 +6,3 @@
 $wb['allservers_txt'] = 'Exists on all servers';
 $wb['ostemplate_id_txt'] = 'ID';
 ?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_template.lng b/interface/web/vm/lib/lang/se_openvz_template.lng
index 0887164..d285512 100644
--- a/interface/web/vm/lib/lang/se_openvz_template.lng
+++ b/interface/web/vm/lib/lang/se_openvz_template.lng
@@ -91,4 +91,3 @@
 $wb['Template'] = 'Template';
 $wb['Advanced'] = 'Advanced';
 ?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_template_list.lng b/interface/web/vm/lib/lang/se_openvz_template_list.lng
index 6e4d911..de4045c 100644
--- a/interface/web/vm/lib/lang/se_openvz_template_list.lng
+++ b/interface/web/vm/lib/lang/se_openvz_template_list.lng
@@ -3,4 +3,3 @@
 $wb['active_txt'] = 'Active';
 $wb['template_name_txt'] = 'Template name';
 ?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_vm.lng b/interface/web/vm/lib/lang/se_openvz_vm.lng
index 4698fe6..f2be022 100644
--- a/interface/web/vm/lib/lang/se_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/se_openvz_vm.lng
@@ -38,4 +38,3 @@
 $wb['Virtual server'] = 'Virtual server';
 $wb['Advanced'] = 'Advanced';
 ?>
-
diff --git a/interface/web/vm/lib/lang/se_openvz_vm_list.lng b/interface/web/vm/lib/lang/se_openvz_vm_list.lng
index a534a65..2238e2b 100644
--- a/interface/web/vm/lib/lang/se_openvz_vm_list.lng
+++ b/interface/web/vm/lib/lang/se_openvz_vm_list.lng
@@ -8,4 +8,3 @@
 $wb['ip_address_txt'] = 'IP address';
 $wb['veid_txt'] = 'VEID';
 ?>
-
diff --git a/server/conf/apache_ispconfig.conf.master b/server/conf/apache_ispconfig.conf.master
index be6f637..6b2accb 100644
--- a/server/conf/apache_ispconfig.conf.master
+++ b/server/conf/apache_ispconfig.conf.master
@@ -3,7 +3,7 @@
 # ISPConfig Logfile configuration for vlogger
 ################################################
 
-LogFormat "%v %h %l %u %t \"%r\" %>s %B \"%{Referer}i\" \"%{User-Agent}i\"" combined_ispconfig
+LogFormat "%v %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined_ispconfig
 CustomLog "| /usr/local/ispconfig/server/scripts/vlogger -s access.log -t \"%Y%m%d-access.log\" /var/log/ispconfig/httpd" combined_ispconfig
 
 <Directory /var/www/clients>
diff --git a/server/conf/apps_php_fpm_pool.conf.master b/server/conf/apps_php_fpm_pool.conf.master
index ce6a92f..7997e9b 100644
--- a/server/conf/apps_php_fpm_pool.conf.master
+++ b/server/conf/apps_php_fpm_pool.conf.master
@@ -9,7 +9,7 @@
 group = {fpm_group}
 
 pm = dynamic
-pm.max_children = 50
+pm.max_children = 500
 pm.start_servers = 2
 pm.min_spare_servers = 1
 pm.max_spare_servers = 5
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 5a110cc..96b3443 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -57,6 +57,10 @@
 		</IfModule>
 
 		<Directory {tmpl_var name='web_document_root_www'}>
+				# Clear PHP settings of this website
+				<FilesMatch ".+\.ph(p[345]?|t|tml)$">
+						SetHandler None
+				</FilesMatch>
 				Options +FollowSymLinks
 				AllowOverride <tmpl_var name='allow_override'>
 				<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
@@ -85,6 +89,10 @@
 </tmpl_if>
 		</Directory>
 		<Directory {tmpl_var name='web_document_root'}>
+				# Clear PHP settings of this website
+				<FilesMatch ".+\.ph(p[345]?|t|tml)$">
+						SetHandler None
+				</FilesMatch>
 				Options +FollowSymLinks
 				AllowOverride <tmpl_var name='allow_override'>
 				<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
@@ -186,10 +194,6 @@
 			SuexecUserGroup <tmpl_var name='system_user'> <tmpl_var name='system_group'>
 		</IfModule>
 </tmpl_if>
-		# Clear PHP settings of this website
-		<FilesMatch ".+\.ph(p[345]?|t|tml)$">
-				SetHandler None
-		</FilesMatch>
 <tmpl_if name='php' op='==' value='mod'>
 		# mod_php enabled
 		AddType application/x-httpd-php .php .php3 .php4 .php5
@@ -221,9 +225,16 @@
 		# php as cgi enabled
 		ScriptAlias /php5-cgi <tmpl_var name='cgi_starter_path'><tmpl_var name='cgi_starter_script'>
 		Action php5-cgi /php5-cgi
-		<FilesMatch "\.php[345]?$">
-			SetHandler php5-cgi
-		</FilesMatch>
+		<Directory {tmpl_var name='web_document_root_www'}>
+			<FilesMatch "\.php[345]?$">
+				SetHandler php5-cgi
+			</FilesMatch>
+		</Directory>
+		<Directory {tmpl_var name='web_document_root'}>
+			<FilesMatch "\.php[345]?$">
+				SetHandler php5-cgi
+			</FilesMatch>
+		</Directory>
 		<Directory {tmpl_var name='cgi_starter_path'}>
 			<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
 			Require all granted
@@ -304,9 +315,16 @@
 					Allow from all
 					</tmpl_if>
 			    </Directory>
-				<FilesMatch "\.php[345]?$">
-					SetHandler php5-fcgi
-				</FilesMatch>
+				<Directory {tmpl_var name='web_document_root_www'}>
+					<FilesMatch "\.php[345]?$">
+						SetHandler php5-fcgi
+					</FilesMatch>
+				</Directory>
+				<Directory {tmpl_var name='web_document_root'}>
+					<FilesMatch "\.php[345]?$">
+						SetHandler php5-fcgi
+					</FilesMatch>
+				</Directory>
                 Action php5-fcgi /php5-fcgi
 				Alias /php5-fcgi {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'}
 <tmpl_if name='use_tcp'>
@@ -336,7 +354,7 @@
 		RewriteCond %{REQUEST_URI} !^<tmpl_var name='rewrite_target'>
 </tmpl_if>
 		
-		RewriteRule   ^/(.*)$ <tmpl_var name='rewrite_target'><tmpl_if name="rewrite_add_path" op="==" value="y">$1</tmpl_if>  <tmpl_if name='rewrite_type' value=''><tmpl_if name="rewrite_is_url" op="==" value="n">[PT]</tmpl_if></tmpl_else><tmpl_var name='rewrite_type'></tmpl_if>
+		RewriteRule   ^/(.*)$ <tmpl_var name='rewrite_target'><tmpl_if name="rewrite_add_path" op="==" value="y">$1</tmpl_if>  <tmpl_var name='rewrite_type'>
 	
 </tmpl_loop>
 </tmpl_if>
diff --git a/server/cron_daily.php b/server/cron_daily.php
index b9b3432..ee54a46 100644
--- a/server/cron_daily.php
+++ b/server/cron_daily.php
@@ -647,7 +647,7 @@
 // function for sending notification emails
 //########
 function send_notification_email($template, $placeholders, $recipients) {
-	global $conf;
+	global $conf, $app;
 
 	if(!is_array($recipients) || count($recipients) < 1) return false;
 	if(!is_array($placeholders)) $placeholders = array();
@@ -1104,10 +1104,14 @@
 	
 	//* mount backup directory, if necessary
 	$run_backups = true;
-	$server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']);
-	if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){
+	$backup_dir_mount_cmd = '/usr/local/ispconfig/server/scripts/backup_dir_mount.sh';
+	if(	$server_config['backup_dir_is_mount'] == 'y' && 
+		is_file($backup_dir_mount_cmd) && 
+		is_executable($backup_dir_mount_cmd) &&
+		fileowner($backup_dir_mount_cmd) === 0
+		){
 		if(!$app->system->is_mounted($backup_dir)){
-			exec(escapeshellcmd($server_config['backup_dir_mount_cmd']));
+			exec($backup_dir_mount_cmd);
 			sleep(1);
 			if(!$app->system->is_mounted($backup_dir)) $run_backups = false;
 		}
diff --git a/server/lib/classes/ispcmail.inc.php b/server/lib/classes/ispcmail.inc.php
new file mode 100644
index 0000000..930aabb
--- /dev/null
+++ b/server/lib/classes/ispcmail.inc.php
@@ -0,0 +1,869 @@
+<?php
+
+/*
+Copyright (c) 2012, Marius Cramer, pixcept KG
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/**
+ * email class
+ *
+ * @package pxFramework
+ *
+ */
+
+
+class ispcmail {
+
+	/**#@+
+     * @access private
+     */
+	private $html_part;
+	private $text_part;
+
+	private $headers;
+
+	private $_logged_in = false;
+	private $_smtp_conn = null;
+
+	private $_crlf = "\n";
+
+	private $attach_type = 'application/octet-stream';
+	private $attachments;
+	private $mime_boundary;
+	private $body = '';
+	private $_mail_sender = '';
+	private $_sent_mails = 0;
+	private $user_agent = 'ISPConfig/3 (Mailer Class)';
+	/**#@-*/
+
+
+
+	/**
+	 * set the mail charset
+	 */
+	private $mail_charset  = 'UTF-8';//'ISO-8859-1';
+
+	/**#@+
+     * Provide smtp credentials for smtp mail sending
+     *
+     * @access public
+     */
+
+	/**
+	 * if set to true smtp is used instead of mail() to send emails
+	 * @see mail
+	 */
+	private $use_smtp = false;
+
+	/**
+	 * the smtp helo string - use the mail server name here!
+	 */
+	private $smtp_helo = '';
+
+	/**
+	 * the smtp server to send mails
+	 */
+	private $smtp_host = '';
+
+	/**
+	 * the smtp port
+	 */
+	private $smtp_port = 25;
+
+	/**
+	 * if the smtp server needs authentication you can set the smtp user here
+	 */
+	private $smtp_user = '';
+
+	/**
+	 * if the smtp server needs authentication you can set the smtp password here
+	 */
+	private $smtp_pass = '';
+
+	/**
+	 * If you want to use tls/ssl specify it here
+	 */
+	private $smtp_crypt = ''; // tls or ssl
+	/**
+	 * How many mails should be sent via one single smtp connection
+	 */
+	private $smtp_max_mails = 20;
+
+	/**
+	 * Should the mail be signed
+	 */
+	private $sign_email = false;
+
+	/**
+	 * The cert and key to use for email signing
+	 */
+	private $sign_key = '';
+	private $sign_key_pass = '';
+	private $sign_cert = '';
+	private $sign_bundle = '';
+	private $_is_signed = false;
+
+	/**
+	 * get disposition notification
+	 */
+	private $notification = false;
+	/**#@-*/
+
+	public function __construct($options = array()) {
+		$rand = md5(microtime());
+		$this->mime_boundary = '==Multipart_Boundary_x' . $rand . 'x';
+
+		$this->headers = array();
+		$this->attachments = array();
+
+		$this->headers['MIME-Version'] = '1.0';
+		$this->headers['User-Agent'] = $this->user_agent;
+		if(is_array($options) && count($options) > 0) $this->setOptions($options);
+	}
+
+	public function __destruct() {
+		$this->finish();
+	}
+
+
+
+	/**
+	 * Set option
+	 *
+	 * @param string $key the option to set
+	 * @param string $value the option value to set
+	 */
+	public function setOption($key, $value) {
+		switch($key) {
+		case 'smtp_helo':
+			$this->smtp_helo = $value;
+			break;
+		case 'smtp_host':
+			$this->smtp_host = $value;
+			break;
+		case 'smtp_server':
+			$this->smtp_host = $value;
+			break;
+		case 'smtp_port':
+			$this->smtp_port = $value;
+			break;
+		case 'smtp_user':
+			$this->smtp_user = $value;
+			break;
+		case 'smtp_pass':
+			$this->smtp_pass = $value;
+			break;
+		case 'smtp_max_mails':
+			$this->smtp_max_mails = intval($value);
+			if($this->smtp_max_mails < 1) $this->smtp_max_mails = 1;
+			break;
+		case 'use_smtp':
+			$this->use_smtp = ($value == true ? true : false);
+			if($value == true) $this->_crlf = "\r\n";
+			break;
+		case 'smtp_crypt':
+			if($value != 'ssl' && $value != 'tls') $value = '';
+			$this->smtp_crypt = $value;
+			break;
+		case 'sign_email':
+			$this->sign_email = ($value == true ? true : false);
+			break;
+		case 'sign_key':
+			$this->sign_key = $value;
+			break;
+		case 'sign_key_pass':
+			$this->sign_key_pass = $value;
+			break;
+		case 'sign_cert':
+			$this->sign_cert = $value;
+			break;
+		case 'sign_bundle':
+			$this->sign_bundle = $value;
+			break;
+		case 'mail_charset':
+			$this->mail_charset = $value;
+			break;
+		case 'notify':
+			$this->notification = ($value == true ? true : false);
+			break;
+		}
+	}
+
+
+
+	/** Detect the helo string if none given
+	 *
+	 */
+	private function detectHelo() {
+		if(isset($_SERVER['HTTP_HOST'])) $this->smtp_helo = (strpos($_SERVER['HTTP_HOST'], ':') !== false ? substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], ':')) : $_SERVER['HTTP_HOST']);
+		elseif(isset($_SERVER['SERVER_NAME'])) $this->smtp_helo = $_SERVER['SERVER_NAME'];
+		else $this->smtp_helo = php_uname('n');
+		if($this->smtp_helo == '') $this->smtp_helo = 'localhost';
+		return $this->smtp_helo;
+	}
+
+
+
+	/**
+	 * Set options
+	 *
+	 * @param array $options the options to set as an associative array key => value
+	 */
+	public function setOptions($options) {
+		foreach($options as $key => $value) $this->setOption($key, $value);
+	}
+
+
+
+	/**
+	 * Read a file's contents
+	 *
+	 * Simply gets the file's content
+	 *
+	 * @access public
+	 * @param string $filename name and path of file to read
+	 * @return string file content (can be binary)
+	 */
+	public function read_File($filename) {
+		$content = '';
+
+		$fp = fopen($filename, 'r');
+		if(!$fp) return false;
+
+		while(!feof($fp)) {
+			$content .= fread($fp, 1024);
+		}
+		fclose($fp);
+
+		return $content;
+	}
+
+
+
+	/**
+	 * set smtp connection encryption
+	 *
+	 * @access public
+	 * @param string $mode encryption mode (tls, ssl or empty string)
+	 */
+	public function setSMTPEncryption($mode = '') {
+		if($mode != 'ssl' && $mode != 'tls') $mode = '';
+		$this->smtp_crypt = $mode;
+	}
+
+	/**
+	 * set a mail header
+	 *
+	 * Sets a single mail header to a given value
+	 *
+	 * @access public
+	 * @param string $header header name to set
+	 * @param string $value value to set in header field
+	 */
+	public function setHeader($header, $value) {
+		if(strtolower($header) == 'bcc') $header = 'Bcc';
+		elseif(strtolower($header) == 'cc') $header = 'Cc';
+		elseif(strtolower($header) == 'from') $header = 'From';
+		$this->headers["$header"] = $value;
+	}
+
+
+
+	/**
+	 * get a mail header value
+	 *
+	 * Returns a value of a single mail header
+	 *
+	 * @access public
+	 * @param string $header header name to get
+	 * @return string header value
+	 */
+	public function getHeader($header) {
+		if(strtolower($header) == 'bcc') $header = 'Bcc';
+		elseif(strtolower($header) == 'cc') $header = 'Cc';
+		elseif(strtolower($header) == 'from') $header = 'From';
+		return isset($this->headers["$header"]) ? $this->headers["$header"] : '';
+	}
+
+
+
+	/**
+	 * Set email sender
+	 *
+	 * Sets the email sender and optionally the sender's name
+	 *
+	 * @access public
+	 * @param string $email sender email address
+	 * @param string $name sender name
+	 */
+	public function setSender($email, $name = '') {
+		if($name) $header = '"' . $name . '" <' . $email . '>';
+		else $header = '<' . $email . '>';
+
+		$this->_mail_sender = $email;
+
+		$this->setHeader('From', $header);
+	}
+
+
+
+	/**
+	 * Set mail subject
+	 *
+	 * @access public
+	 * @param string $subject the mail subject
+	 * @return string where-string for db query
+	 */
+	public function setSubject($subject) {
+		$this->setHeader('Subject', $subject);
+	}
+
+
+
+	/**
+	 * Get current mail subject
+	 *
+	 * @access public
+	 * @return string mail subject
+	 */
+	public function getSubject() {
+		return $this->headers['Subject'];
+	}
+
+
+
+	/**
+	 * Set mail content
+	 *
+	 * Sets the mail html and plain text content
+	 *
+	 * @access public
+	 * @param string $text plain text mail content (can be empty)
+	 * @param string $html html mail content
+	 */
+	public function setMailText($text, $html = '') {
+		$this->text_part = $text;
+		$this->html_part = $html;
+	}
+
+
+
+	/**
+	 * Read and attach a file
+	 *
+	 * Reads a file and attaches it to the current email
+	 *
+	 * @access public
+	 * @param string $filename the file to read and attach
+	 * @param string $display_name the name that will be displayed in the mail
+	 * @see read_File
+	 */
+	public function readAttachFile($filename, $display_name = '') {
+		if($display_name == '') {
+			$path_parts = pathinfo($filename);
+			$display_name = $path_parts["basename"];
+			unset($path_parts);
+		}
+		$this->attachFile($this->read_File($filename), $display_name);
+	}
+
+
+
+	/**
+	 * Attach a file
+	 *
+	 * Attaches a string (can be binary) as a file to the mail
+	 *
+	 * @access public
+	 * @param string $content attachment data string
+	 * @param string $filename name for file attachment
+	 */
+	public function attachFile($content, $filename) {
+		$attachment = array('content' => $content,
+			'filename' => $filename,
+			'type' => 'application/octet-stream',
+			'encoding' => 'base64'
+		);
+		$this->attachments[] = $attachment;
+	}
+
+
+
+	/**
+	 * @access private
+	 */
+	private function create() {
+		$attach = false;
+		$html = false;
+		$text = false;
+
+		if($this->html_part) $html = true;
+		if($this->text_part) $text = true;
+		if(count($this->attachments) > 0) $attach = true;
+
+		$textonly = false;
+		$htmlonly = false;
+		if($text == true && $html == false && $attach == false) {
+			// only text
+			$content_type = 'text/plain; charset="' . strtolower($this->mail_charset) . '"';
+			$textonly = true;
+		} elseif($text == true && $html == false && $attach == true) {
+			// text and attachment
+			$content_type = 'multipart/mixed;';
+			$content_type .= "\n" . ' boundary="' . $this->mime_boundary . '"';
+		} elseif($html == true && $text == true && $attach == false) {
+			// html only (or text too)
+			$content_type = 'multipart/alternative;';
+			$content_type .= "\n" . ' boundary="' . $this->mime_boundary . '"';
+		} elseif($html == true && $text == false && $attach == false) {
+			// html only (or text too)
+			$content_type = 'text/html; charset="' . strtolower($this->mail_charset) . '"';
+			$htmlonly = true;
+		} elseif($html == true && $attach == true) {
+			// html and attachments
+			$content_type = 'multipart/mixed;';
+			$content_type .= "\n" . ' boundary="' . $this->mime_boundary . '"';
+		}
+
+		$this->headers['Content-Type'] = $content_type;
+
+		if($textonly == false && $htmlonly == false) {
+			$this->body = "This is a multi-part message in MIME format.\n\n";
+
+			if($text) {
+				/*$this->body .= "--{$this->mime_boundary}\n" .
+                              "Content-Type:text/plain; charset=\"" . strtolower($this->mail_charset) . "\"\n" .
+                              "Content-Transfer-Encoding: 7bit\n\n" . $this->text_part . "\n\n";*/
+				$this->body .= "--{$this->mime_boundary}\n" .
+					"Content-Type:text/plain; charset=\"UTF-8\"\n" .
+					"Content-Transfer-Encoding: 8bit\n\n" . $this->text_part . "\n\n";
+			}
+
+			if($html) {
+				/*$this->body .= "--{$this->mime_boundary}\n" .
+                               "Content-Type:text/html; charset=\"" . strtolower($this->mail_charset) . "\"\n" .
+                               "Content-Transfer-Encoding: 7bit\n\n" . $this->html_part . "\n\n";*/
+				$this->body .= "--{$this->mime_boundary}\n" .
+					"Content-Type:text/html; charset=\"UTF-8\"\n" .
+					"Content-Transfer-Encoding: 8bit\n\n" . $this->html_part . "\n\n";
+			}
+
+			if($attach) {
+				foreach($this->attachments as $att) {
+					$this->body .= "--{$this->mime_boundary}\n" .
+						"Content-Type: " . $att['type'] . ";\n" .
+						" name=\"" . $att['filename'] . "\"\n" .
+						"Content-Transfer-Encoding: base64\n" .
+						"Content-Disposition: attachment;\n\n" .
+						chunk_split(base64_encode($att['content'])) . "\n\n";
+				}
+			}
+			$this->body .= "--{$this->mime_boundary}--\n";
+		} elseif($htmlonly == true) {
+			$this->body = $this->html_part;
+		} else {
+			$this->body = $this->text_part;
+		}
+
+		if (isset($this->body)) {
+			// Add message ID header
+			$message_id = sprintf('<%s.%s@%s>', base_convert(time(), 10, 36), base_convert(rand(), 10, 36), $this->smtp_helo != '' ? $this->smtp_helo : $this->detectHelo());
+			$this->headers['Message-ID'] = $message_id;
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+
+
+	/**
+	 * Function to sign an email body
+	 */
+	private function sign() {
+		if($this->sign_email == false || $this->sign_key == '' || $this->sign_cert == '') return false;
+		if(function_exists('openssl_pkcs7_sign') == false) return false;
+
+		$tmpin = tempnam(sys_get_temp_dir(), 'sign');
+		$tmpout = tempnam(sys_get_temp_dir(), 'sign');
+		if(!file_exists($tmpin) || !is_writable($tmpin)) return false;
+
+		file_put_contents($tmpin, 'Content-Type: ' . $this->getHeader('Content-Type') . "\n\n" . $this->body);
+		$tmpf_key = tempnam(sys_get_temp_dir(), 'sign');
+		file_put_contents($tmpf_key, $this->sign_key);
+		$tmpf_cert = tempnam(sys_get_temp_dir(), 'sign');
+		file_put_contents($tmpf_cert, $this->sign_cert);
+		if($this->sign_bundle != '')  {
+			$tmpf_bundle = tempnam(sys_get_temp_dir(), 'sign');
+			file_put_contents($tmpf_bundle, $this->sign_bundle);
+			openssl_pkcs7_sign($tmpin, $tmpout, 'file://' . realpath($tmpf_cert), array('file://' . realpath($tmpf_key), $this->sign_key_pass), array(), PKCS7_DETACHED, realpath($tmpf_bundle));
+		} else {
+			openssl_pkcs7_sign($tmpin, $tmpout, 'file://' . realpath($tmpf_cert), array('file://' . realpath($tmpf_key), $this->sign_key_pass), array());
+		}
+		unlink($tmpin);
+		unlink($tmpf_cert);
+		unlink($tmpf_key);
+		if(file_exists($tmpf_bundle)) unlink($tmpf_bundle);
+
+		if(!file_exists($tmpout) || !is_readable($tmpout)) return false;
+		$this->body = file_get_contents($tmpout);
+		unlink($tmpout);
+
+		unset($this->headers['Content-Type']);
+		unset($this->headers['MIME-Version']);
+
+		$this->_is_signed = true;
+	}
+
+	private function _char_to_hex($matches) {
+		return '=' . strtoupper(dechex(ord($matches[1])));
+	}
+
+
+
+	/**
+	 * Function to encode a header if necessary
+	 * according to RFC2047
+	 * @access private
+	 */
+	private function _encodeHeader($input, $charset = 'ISO-8859-1') {
+		preg_match_all('/(\s?\w*[\x80-\xFF]+\w*\s?)/', $input, $matches);
+		foreach ($matches[1] as $value) {
+			$replacement = preg_replace_callback('/([\x20\x80-\xFF])/', array($this, '_char_to_hex'), $value);
+			$input = str_replace($value, '=?' . $charset . '?Q?' . $replacement . '?=', $input);
+		}
+
+		return $input;
+	}
+
+
+
+	/**
+	 * Function to encode the subject if necessary
+	 * according to RFC2047
+	 * @access private
+	 */
+	private function _encodeSubject($input, $charset = 'ISO-8859-1') {
+		/*
+		if($charset == 'UTF-8' && function_exists('imap_8bit')) {
+			$input = "=?utf-8?Q?" . imap_8bit($input) . "?=";
+		} else {
+			preg_match_all('/(\s?\w*[\x80-\xFF]+\w*\s?)/', $input, $matches);
+			foreach ($matches[1] as $value) {
+				$replacement = preg_replace('/([\x20\x80-\xFF])/e', '"=" . strtoupper(dechex(ord("\1")))', $value);
+				$input = str_replace($value, '=?' . $charset . '?Q?' . $replacement . '?=', $input);
+			}
+		}*/
+		$input='=?UTF-8?B?'.base64_encode($input).'?=';
+
+		return $input;
+	}
+
+
+
+	/**
+	 * @access private
+	 */
+	private function _smtp_login() {
+		$this->_smtp_conn = fsockopen(($this->smtp_crypt == 'ssl' ? 'ssl://' : '') . $this->smtp_host, $this->smtp_port, $errno, $errstr, 30);
+		$response = fgets($this->_smtp_conn, 515);
+		if(empty($this->_smtp_conn)) return false;
+
+		//Say Hello to SMTP
+		if($this->smtp_helo == '') $this->detectHelo();
+		fputs($this->_smtp_conn, 'HELO ' . $this->smtp_helo . $this->_crlf);
+		$response = fgets($this->_smtp_conn, 515);
+
+		// ENCRYPTED?
+		if($this->smtp_crypt == 'tls') {
+			fputs($this->_smtp_conn, 'STARTTLS' . $this->_crlf);
+			fgets($this->_smtp_conn, 515);
+			stream_socket_enable_crypto($this->_smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
+		}
+
+		//AUTH LOGIN
+		fputs($this->_smtp_conn, 'AUTH LOGIN' . $this->_crlf);
+		$response = fgets($this->_smtp_conn, 515);
+
+		//Send username
+		fputs($this->_smtp_conn, base64_encode($this->smtp_user) . $this->_crlf);
+		$response = fgets($this->_smtp_conn, 515);
+
+		//Send password
+		fputs($this->_smtp_conn, base64_encode($this->smtp_pass) . $this->_crlf);
+		$response = fgets($this->_smtp_conn, 515);
+
+		$this->_logged_in = true;
+		return true;
+	}
+
+
+
+	/**
+	 * @access private
+	 */
+	private function _smtp_close() {
+		$this->_logged_in = false;
+
+		if(empty($this->_smtp_conn)) {
+			return false;
+		}
+
+		fputs($this->_smtp_conn, 'QUIT' . $this->_crlf);
+		$response = @fgets($this->_smtp_conn, 515);
+		return true;
+	}
+
+	private function _extract_names($data) {
+		$senders = array();
+
+		$data = stripslashes(preg_replace("'(\t|\r|\n)'", '', $data));
+
+		if(trim($data) == '') return $senders;
+
+		$armail = array();
+		$counter = 0;  $inthechar = 0;
+		$chartosplit = ',;'; $protectchar = '"'; $temp = '';
+		$closed = 1;
+
+		for($i = 0; $i < strlen($data); $i++) {
+			$thischar = $data[$i];
+			if($thischar == '<' && $closed) $closed = 0;
+			if($thischar == '>' && !$closed) $closed = 1;
+			if($thischar == $protectchar) $inthechar = ($inthechar) ? 0 : 1;
+			if((strpos($chartosplit, $thischar) !== false) && !$inthechar && $closed) {
+				$armail[] = $temp;
+				$temp = '';
+			} else {
+				$temp .= $thischar;
+			}
+		}
+
+		if(trim($temp) != '') {
+			$armail[] = trim($temp);
+			unset($temp);
+		}
+
+		foreach($armail as $thisPart) {
+			$thisPart = trim(preg_replace('/^"(.*)"$/i', '$1', trim($thisPart)));
+			if($thisPart != '') {
+				$email = '';
+				$name = '';
+				if(preg_match('/(.*)<(.*)>/i', $thisPart, $matches)) {
+					$email = trim($matches[2]);
+					$name = trim($matches[1]);
+				} else {
+					if(preg_match('/([-a-z0-9_$+.]+@[-a-z0-9_.]+[-a-z0-9_]+)((.*))/i', $thisPart, $matches)) {
+						$email = $matches[1];
+						$name = $matches[2];
+					} else {
+						$email = $thisPart;
+					}
+				}
+
+				$email = preg_replace('/<(.*)\\>/', '$1', $email);
+				$name = preg_replace('/"(.*)"/', '$1', trim($name));
+				$name = preg_replace('/\((.*)\)/', '$1', $name);
+
+				if($name == '') $name = $email;
+				if($email == '') $email = $name;
+				$senders[] = array(
+					'name' => $name,
+					'mail' => $email
+				);
+				unset($name);
+				unset($email);
+			}
+		}
+		unset($armail);
+		unset($thisPart);
+
+		return $senders;
+	}
+
+	/**
+	 * Send the mail to one or more recipients
+	 *
+	 * The recipients can be either a string (1 recipient email without name) or an associative array of recipients with names as keys and email addresses as values.
+	 *
+	 * @access public
+	 * @param mixed $recipients one email address or array of recipients with names as keys and email addresses as values
+	 */
+	public function send($recipients) {
+		if(!is_array($recipients)) $recipients = array($recipients);
+
+		if($this->use_smtp == true) $this->_crlf = "\r\n";
+		else $this->_crlf = "\n";
+
+		$this->create();
+		if($this->sign_email == true) $this->sign();
+
+		$subject = '';
+		if (!empty($this->headers['Subject'])) {
+			//$subject = $this->_encodeHeader($this->headers['Subject'], $this->mail_charset);
+			$subject = $this->headers['Subject'];
+
+			//$enc_subject = $this->_encodeHeader($subject, $this->mail_charset);
+			$enc_subject = $this->_encodeSubject($subject, $this->mail_charset);
+			unset($this->headers['Subject']);
+		}
+
+		if($this->notification == true) $this->setHeader('Disposition-Notification-To', $this->getHeader('From'));
+
+		unset($this->headers['To']); // always reset the To header to prevent from sending to multiple users at once
+		$this->headers['Date'] = date('r'); //date('D, d M Y H:i:s O');
+
+		// Get flat representation of headers
+		foreach ($this->headers as $name => $value) {
+			if(strtolower($name) == 'to' || strtolower($name) == 'cc' || strtolower($name) == 'bcc') continue; // never add the To header
+			$headers[] = $name . ': ' . $this->_encodeHeader($value, $this->mail_charset);
+		}
+
+		if($this->use_smtp == true) {
+			if(!$this->_logged_in || !$this->_smtp_conn) {
+				$result = $this->_smtp_login();
+				if(!$result) return false;
+			}
+			$bcc_cc_sent = false;
+			foreach($recipients as $recipname => $recip) {
+				if($this->_sent_mails >= $this->smtp_max_mails) {
+					// close connection to smtp and reconnect
+					$this->_sent_mails = 0;
+					$this->_smtp_close();
+					$result = $this->_smtp_login();
+					if(!$result) return false;
+				}
+				$this->_sent_mails += 1;
+
+				$recipname = trim(str_replace('"', '', $recipname));
+				$recip = $this->_encodeHeader($recip, $this->mail_charset);
+				$recipname = $this->_encodeHeader($recipname, $this->mail_charset);
+
+				//Email From
+				fputs($this->_smtp_conn, 'MAIL FROM: <' . $this->_mail_sender . '>' . $this->_crlf);
+				$response = fgets($this->_smtp_conn, 515);
+
+				//Email To
+				fputs($this->_smtp_conn, 'RCPT TO: <' . $recip . '>' . $this->_crlf);
+				$response = fgets($this->_smtp_conn, 515);
+
+				if($bcc_cc_sent == false) {
+					$add_recips = array();
+					if($this->getHeader('Cc') != '') $add_recips = array_merge($add_recips, $this->_extract_names($this->getHeader('Cc')));
+					if($this->getHeader('Bcc') != '') $add_recips = array_merge($add_recips, $this->_extract_names($this->getHeader('Bcc')));
+					foreach($add_recips as $add_recip) {
+						if(!$add_recip['mail']) continue;
+						fputs($this->_smtp_conn, 'RCPT TO: <' . $this->_encodeHeader($add_recip['mail'], $this->mail_charset) . '>' . $this->_crlf);
+						$response = fgets($this->_smtp_conn, 515);
+					}
+					unset($add_recips);
+					$bcc_cc_sent = true;
+				}
+
+				//The Email
+				fputs($this->_smtp_conn, 'DATA' . $this->_crlf);
+				$response = fgets($this->_smtp_conn, 515);
+
+				//Construct Headers
+				if($recipname && !is_numeric($recipname)) $this->setHeader('To', $recipname . ' <' . $recip . '>');
+				else $this->setHeader('To', $recip);
+
+				$mail_content = 'Subject: ' . $enc_subject . $this->_crlf;
+				$mail_content .= 'To: ' . $this->getHeader('To') . $this->_crlf;
+				if($this->getHeader('Cc') != '') $mail_content .= 'Cc: ' . $this->_encodeHeader($this->getHeader('Cc'), $this->mail_charset) . $this->_crlf;
+				$mail_content .= implode($this->_crlf, $headers) . $this->_crlf . ($this->_is_signed == false ? $this->_crlf : '') . $this->body;
+
+				fputs($this->_smtp_conn, $mail_content . $this->_crlf . '.' . $this->_crlf);
+				$response = fgets($this->_smtp_conn, 515);
+
+				// hopefully message was correctly sent now
+				$result = true;
+			}
+		} else {
+			if($this->getHeader('Bcc') != '') $headers[] = 'Bcc: ' . $this->_encodeHeader($this->getHeader('Bcc'), $this->mail_charset);
+			if($this->getHeader('Cc') != '') $headers[] = 'Cc: ' . $this->_encodeHeader($this->getHeader('Cc'), $this->mail_charset);
+			$rec_string = '';
+			foreach($recipients as $recipname => $recip) {
+				$recipname = trim(str_replace('"', '', $recipname));
+
+				if($rec_string != '') $rec_string .= ', ';
+				if($recipname && !is_numeric($recipname)) $rec_string .= $recipname . '<' . $recip . '>';
+				else $rec_string .= $recip;
+			}
+			$to = $this->_encodeHeader($rec_string, $this->mail_charset);
+			//$result = mail($to, $subject, $this->body, implode($this->_crlf, $headers));
+			$result = mail($to, $enc_subject, $this->body, implode($this->_crlf, $headers));
+		}
+
+		// Reset the subject in case mail is resent
+		if ($subject !== '') {
+			$this->headers['Subject'] = $subject;
+		}
+
+		// Return
+		return $result;
+	}
+
+
+
+	/**
+	 * Close mail connections
+	 *
+	 * This closes an open smtp connection so you should always call this function in your script if you have finished sending all emails
+	 *
+	 * @access public
+	 */
+	public function finish() {
+		if($this->use_smtp == true) $this->_smtp_close();
+
+		$rand = md5(microtime());
+		$this->mime_boundary = '==Multipart_Boundary_x' . $rand . 'x';
+
+		$this->headers = array();
+		$this->attachments = array();
+		$this->text_part = '';
+		$this->html_part = '';
+
+		$this->headers['MIME-Version'] = '1.0';
+		$this->headers['User-Agent'] = $this->user_agent;
+
+		$this->smtp_helo = '';
+		$this->smtp_host = '';
+		$this->smtp_port = '';
+		$this->smtp_user = '';
+		$this->smtp_pass = '';
+		$this->use_smtp = false;
+		$this->smtp_crypt = false;
+		$this->mail_charset = 'UTF-8';
+		$this->_sent_mails = 0;
+
+		return;
+	}
+
+}
+
+?>
diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index 2170b5c..ae1fbd3 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -62,6 +62,15 @@
 				$mainver = array_filter($mainver);
 				$mainver = current($mainver).'.'.next($mainver);
 				switch ($mainver){
+				case "14.04":
+					$relname = "(Trusty Tahr)";
+					break;
+				case "13.10":
+					$relname = "(Saucy Salamander)";
+					break;
+				case "13.04":
+					$relname = "(Raring Ringtail)";
+					break;
 				case "12.10":
 					$relname = "(Quantal Quetzal)";
 					break;
@@ -201,6 +210,18 @@
 				$distver = '5.3';
 				$distid = 'centos53';
 				$distbaseid = 'fedora';
+			} elseif(stristr($content, 'CentOS Linux release 6')) {
+				$distname = 'CentOS';
+				$distver = 'Unknown';
+				$distid = 'centos53';
+				$distbaseid = 'fedora';
+				swriteln("Operating System: CentOS 6 or compatible\n");
+			} elseif(stristr($content, 'CentOS Linux release 7')) {
+				$distname = 'CentOS';
+				$distver = 'Unknown';
+				$distid = 'centos53';
+				$distbaseid = 'fedora';
+				swriteln("Operating System: CentOS 7 or compatible\n");
 			} else {
 				$distname = 'Redhat';
 				$distver = 'Unknown';
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 16e91ae..af42e5e 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -34,7 +34,9 @@
 	var $server_id;
 	var $server_conf;
 	var $data;
-
+	var $min_uid = 500;
+	var $min_gid = 500;
+	
 	/**
 	 * Construct for this class
 	 *
@@ -1785,6 +1787,67 @@
 		
 		return $modules;
 	}
+	
+	//* ISPConfig mail function
+	public function mail($to, $subject, $text, $from, $filepath = '', $filetype = 'application/pdf', $filename = '', $cc = '', $bcc = '', $from_name = '') {
+		global $app, $conf;
+
+		if($conf['demo_mode'] == true) $app->error("Mail sending disabled in demo mode.");
+
+		$app->uses('getconf,ispcmail');
+		$mail_config = $app->getconf->get_global_config('mail');
+		if($mail_config['smtp_enabled'] == 'y') {
+			$mail_config['use_smtp'] = true;
+			$app->ispcmail->setOptions($mail_config);
+		}
+		$app->ispcmail->setSender($from, $from_name);
+		$app->ispcmail->setSubject($subject);
+		$app->ispcmail->setMailText($text);
+
+		if($filepath != '') {
+			if(!file_exists($filepath)) $app->error("Mail attachement does not exist ".$filepath);
+			$app->ispcmail->readAttachFile($filepath);
+		}
+
+		if($cc != '') $app->ispcmail->setHeader('Cc', $cc);
+		if($bcc != '') $app->ispcmail->setHeader('Bcc', $bcc);
+
+		$app->ispcmail->send($to);
+		$app->ispcmail->finish();
+		
+		return true;
+	}
+	
+	public function is_allowed_user($username, $check_id = true, $restrict_names = false) {
+		global $app;
+		
+		$name_blacklist = array('root','ispconfig','vmail','getmail');
+		if(in_array($username,$name_blacklist)) return false;
+		
+		if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $username) == false) return false;
+		
+		if($check_id && intval($this->getuid($username)) < $this->min_uid) return false;
+		
+		if($restrict_names == true && preg_match('/^web\d+$/', $username) == false) return false;
+		
+		return true;
+	}
+	
+	public function is_allowed_group($groupname, $check_id = true, $restrict_names = false) {
+		global $app;
+		
+		$name_blacklist = array('root','ispconfig','vmail','getmail');
+		if(in_array($groupname,$name_blacklist)) return false;
+		
+		if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $groupname) == false) return false;
+		
+		if($check_id && intval($this->getgid($groupname)) < $this->min_gid) return false;
+		
+		if($restrict_names == true && preg_match('/^client\d+$/', $groupname) == false) return false;
+		
+		return true;
+	}
+	
 }
 
 ?>
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 5f81fa6..a533957 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -344,8 +344,9 @@
 			if($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain') $app->log('document_root not set', LOGLEVEL_WARN);
 			return 0;
 		}
-		if($data['new']['system_user'] == 'root' or $data['new']['system_group'] == 'root') {
-			$app->log('Websites cannot be owned by the root user or group.', LOGLEVEL_WARN);
+		if($app->system->is_allowed_user($data['new']['system_user'], $app->system->is_user($data['new']['system_user']), true) == false
+			|| $app->system->is_allowed_group($data['new']['system_group'], $app->system->is_group($data['new']['system_group']), true) == false) {
+			$app->log('Websites cannot be owned by the root user or group. User: '.$data['new']['system_user'].' Group: '.$data['new']['system_group'], LOGLEVEL_WARN);
 			return 0;
 		}
 		if(trim($data['new']['domain']) == '') {
@@ -461,6 +462,9 @@
 					$app->system->rename($data['new']['document_root'], $data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'));
 					$app->log('Renaming existing directory in new docroot location. mv '.$data['new']['document_root'].' '.$data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'), LOGLEVEL_DEBUG);
 				}
+				
+				//* Unmount the old log directory bfore we move the log dir
+				exec('umount '.escapeshellcmd($old_dir.'/log'));
 
 				//* Create new base directory, if it does not exist yet
 				if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir);
@@ -492,6 +496,8 @@
 			$app->system->removeLine('/etc/fstab', $fstab_line);
 			$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nobootwait,_netdev    0 0';
 			$app->system->replaceLine('/etc/fstab', $fstab_line, $fstab_line, 1, 1);
+			
+			exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
 
 		}
 
@@ -710,7 +716,7 @@
 				$app->system->chmod($data['new']['document_root'].'/ssl', 0755);
 
 				// make tmp directory writable for Apache and the website users
-				$app->system->chmod($data['new']['document_root'].'/tmp', 0777);
+				$app->system->chmod($data['new']['document_root'].'/tmp', 0770);
 
 				// Set Log directory to 755 to make the logs accessible by the FTP user
 				if(realpath($data['new']['document_root'].'/'.$log_folder . '/error.log') == '/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log') {
@@ -770,7 +776,7 @@
 				$app->system->chmod($data['new']['document_root'].'/cgi-bin', 0755);
 
 				// make temp directory writable for Apache and the website users
-				$app->system->chmod($data['new']['document_root'].'/tmp', 0777);
+				$app->system->chmod($data['new']['document_root'].'/tmp', 0770);
 
 				// Set Log directory to 755 to make the logs accessible by the FTP user
 				if(realpath($data['new']['document_root'].'/'.$log_folder . '/error.log') == '/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log') {
@@ -1205,18 +1211,15 @@
 
 		} else {
 			//remove the php fastgi starter script if available
+			$fastcgi_starter_script = $fastcgi_config['fastcgi_starter_script'].($data['old']['type'] == 'vhostsubdomain' ? '_web' . $data['old']['domain_id'] : '');
 			if ($data['old']['php'] == 'fast-cgi') {
 				$fastcgi_starter_path = str_replace('[system_user]', $data['old']['system_user'], $fastcgi_config['fastcgi_starter_path']);
 				$fastcgi_starter_path = str_replace('[client_id]', $client_id, $fastcgi_starter_path);
 				if($data['old']['type'] == 'vhost') {
-					if (is_dir($fastcgi_starter_path)) {
-						exec('rm -rf '.$fastcgi_starter_path);
-					}
+					if(is_file($fastcgi_starter_script)) @unlink($fastcgi_starter_script);
+					if (is_dir($fastcgi_starter_path)) @rmdir($fastcgi_starter_path);
 				} else {
-					$fcgi_starter_script = $fastcgi_starter_path.$fastcgi_config['fastcgi_starter_script'].'_web' . $data['old']['domain_id'];
-					if (file_exists($fcgi_starter_script)) {
-						exec('rm -f '.$fcgi_starter_script);
-					}
+					if(is_file($fastcgi_starter_script)) @unlink($fastcgi_starter_script);
 				}
 			}
 		}
@@ -2009,7 +2012,7 @@
 		//* Create empty .htpasswd file, if it does not exist
 		if(!is_file($folder_path.'.htpasswd')) {
 			$app->system->touch($folder_path.'.htpasswd');
-			$app->system->chmod($folder_path.'.htpasswd', 0750);
+			$app->system->chmod($folder_path.'.htpasswd', 0751);
 			$app->system->chown($folder_path.'.htpasswd', $website['system_user']);
 			$app->system->chgrp($folder_path.'.htpasswd', $website['system_group']);
 			$app->log('Created file '.$folder_path.'.htpasswd', LOGLEVEL_DEBUG);
@@ -2063,7 +2066,7 @@
 		unset($old_content);
 
 		$app->system->file_put_contents($folder_path.'.htaccess', $ht_file);
-		$app->system->chmod($folder_path.'.htaccess', 0750);
+		$app->system->chmod($folder_path.'.htaccess', 0751);
 		$app->system->chown($folder_path.'.htaccess', $website['system_user']);
 		$app->system->chgrp($folder_path.'.htaccess', $website['system_group']);
 		$app->log('Created/modified file '.$folder_path.'.htaccess', LOGLEVEL_DEBUG);
@@ -2225,7 +2228,7 @@
 			}
 
 			$app->system->file_put_contents($new_folder_path.'.htaccess', $ht_file);
-			$app->system->chmod($new_folder_path.'.htaccess', 0750);
+			$app->system->chmod($new_folder_path.'.htaccess', 0751);
 			$app->system->chown($new_folder_path.'.htaccess', $website['system_user']);
 			$app->system->chgrp($new_folder_path.'.htaccess', $website['system_group']);
 			$app->log('Created/modified file '.$new_folder_path.'.htaccess', LOGLEVEL_DEBUG);
@@ -2233,7 +2236,7 @@
 			//* Create empty .htpasswd file, if it does not exist
 			if(!is_file($folder_path.'.htpasswd')) {
 				$app->system->touch($new_folder_path.'.htpasswd');
-				$app->system->chmod($new_folder_path.'.htpasswd', 0750);
+				$app->system->chmod($new_folder_path.'.htpasswd', 0751);
 				$app->system->chown($new_folder_path.'.htpasswd', $website['system_user']);
 				$app->system->chgrp($new_folder_path.'.htpasswd', $website['system_group']);
 				$app->log('Created file '.$new_folder_path.'.htpasswd', LOGLEVEL_DEBUG);
@@ -2654,7 +2657,7 @@
 
 		$fpm_socket = $socket_dir.$pool_name.'.sock';
 		$tpl->setVar('fpm_socket', $fpm_socket);
-		$tpl->setVar('fpm_listen_mode', '0600');
+		$tpl->setVar('fpm_listen_mode', '0660');
 
 		$tpl->setVar('fpm_pool', $pool_name);
 		$tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] - 1);
diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php
index 46be0a6..c3ed1ae 100644
--- a/server/plugins-available/backup_plugin.inc.php
+++ b/server/plugins-available/backup_plugin.inc.php
@@ -75,10 +75,10 @@
 			$backup_dir_is_ready = true;
 			$server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']);
 			if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){
-				if(!$app->system->is_mounted($backup_dir)){
+				if(!$app->system->is_mounted($server_config['backup_dir'])){
 					exec(escapeshellcmd($server_config['backup_dir_mount_cmd']));
 					sleep(1);
-					if(!$app->system->is_mounted($backup_dir)) $backup_dir_is_ready = false;
+					if(!$app->system->is_mounted($server_config['backup_dir'])) $backup_dir_is_ready = false;
 				}
 			}
 
diff --git a/server/plugins-available/bind_dlz_plugin.inc.php b/server/plugins-available/bind_dlz_plugin.inc.php
index f6d367f..63abcc4 100644
--- a/server/plugins-available/bind_dlz_plugin.inc.php
+++ b/server/plugins-available/bind_dlz_plugin.inc.php
@@ -188,7 +188,7 @@
 		//$_db = clone $app->db;
 		//$_db->dbName = 'named';
 
-		$app->db->query("DELETE FROM named.records WHERE ispconfig_id = {$data["old"]["id"]}");
+		$app->db->query( "DELETE FROM named.dns_records WHERE zone = '".substr($data['old']['origin'], 0, -1)."'");
 		//unset($_db);
 	}
 
@@ -252,6 +252,9 @@
 		if ($type == 'MX') {
 			$app->db->query("INSERT INTO named.records (zone, ttl, type, host, mx_priority, data, ispconfig_id)".
 				" VALUES ('$origin', $ttl, '$type', '$name', {$data["new"]["aux"]}, '$content', $ispconfig_id)");
+		} elseif ($type == 'SRV') {
+			$app->db->query("INSERT INTO named.records (zone, ttl, type, data, ispconfig_id)".
+				" VALUES ('$origin', $ttl, '$type', '{$data["new"]["aux"]} $content', $ispconfig_id)");
 		} else {
 			$app->db->query("INSERT INTO named.records (zone, ttl, type, host, data, ispconfig_id)".
 				" VALUES ('$origin', $ttl, '$type', '$name', '$content', $ispconfig_id)");
@@ -327,6 +330,9 @@
 				if ($type == 'MX') {
 					$app->db->query("UPDATE named.records SET zone = '$origin', ttl = $ttl, type = '$type', host = '$name', mx_priority = $prio, ".
 						"data = '$content' WHERE ispconfig_id = $ispconfig_id AND type != 'SOA'");
+				} elseif ($type == 'SRV') {
+					$app->db->query("UPDATE named.records SET zone = '$origin', ttl = $ttl, type = '$type', ".
+						"data = '$prio $content' WHERE ispconfig_id = $ispconfig_id AND type != 'SOA'");
 				} else {
 					$app->db->query("UPDATE named.records SET zone = '$origin', ttl = $ttl, type = '$type', host = '$name', ".
 						"data = '$content' WHERE ispconfig_id = $ispconfig_id AND type != 'SOA'");
@@ -345,7 +351,7 @@
 		//$_db = clone $app->db;
 		//$_db->dbName = 'named';
 
-		$app->db->query("DELETE FROM named.records WHERE ispconfig_id = {$data["old"]["id"]} AND type != 'SOA'");
+		$app->db->query( "DELETE FROM named.dns_records WHERE type != 'SOA' AND zone = '".substr($data['old']['origin'], 0, -1)."'");
 		//unset($_db);
 	}
 
diff --git a/server/plugins-available/cron_jailkit_plugin.inc.php b/server/plugins-available/cron_jailkit_plugin.inc.php
index c3bd5b7..4c95b83 100644
--- a/server/plugins-available/cron_jailkit_plugin.inc.php
+++ b/server/plugins-available/cron_jailkit_plugin.inc.php
@@ -80,10 +80,14 @@
 		if(!$parent_domain["domain_id"]) {
 			$app->log("Parent domain not found", LOGLEVEL_WARN);
 			return 0;
-		} elseif($parent_domain["system_user"] == 'root' or $parent_domain["system_group"] == 'root') {
-			$app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN);
-			return 0;
 		}
+
+		if(!$app->system->is_allowed_user($parent_domain['system_user'], true, true)
+			|| !$app->system->is_allowed_group($parent_domain['system_group'], true, true)) {
+			$app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN);
+			return false;
+		}
+
 
 		$this->parent_domain = $parent_domain;
 
@@ -155,9 +159,11 @@
 		if(!$parent_domain["domain_id"]) {
 			$app->log("Parent domain not found", LOGLEVEL_WARN);
 			return 0;
-		} elseif($parent_domain["system_user"] == 'root' or $parent_domain["system_group"] == 'root') {
+		}
+		if(!$app->system->is_allowed_user($parent_domain['system_user'], true, true)
+			|| !$app->system->is_allowed_group($parent_domain['system_group'], true, true)) {
 			$app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN);
-			return 0;
+			return false;
 		}
 
 		$app->uses('system');
diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php
index fe00713..7f8070d 100644
--- a/server/plugins-available/cron_plugin.inc.php
+++ b/server/plugins-available/cron_plugin.inc.php
@@ -96,11 +96,14 @@
 		if(!$parent_domain["domain_id"]) {
 			$app->log("Parent domain not found", LOGLEVEL_WARN);
 			return 0;
-		} elseif($parent_domain["system_user"] == 'root' or $parent_domain["system_group"] == 'root') {
-			$app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN);
-			return 0;
 		}
 
+		if(!$app->system->is_allowed_user($parent_domain['system_user'], true, true)
+			|| !$app->system->is_allowed_group($parent_domain['system_group'], true, true)) {
+			$app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN);
+			return false;
+		}
+		
 		// Get the client ID
 		$client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($data["new"]["sys_groupid"]));
 		$client_id = intval($client["client_id"]);
diff --git a/server/plugins-available/firewall_plugin.inc.php b/server/plugins-available/firewall_plugin.inc.php
index 186e9b9..2cca769 100644
--- a/server/plugins-available/firewall_plugin.inc.php
+++ b/server/plugins-available/firewall_plugin.inc.php
@@ -76,29 +76,31 @@
 		global $app, $conf;
 
 		//* load the server configuration options
-		$app->uses('getconf');
-		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
-		if($server_config['firewall'] == 'ufw') {
-			$this->ufw_update($event_name, $data);
-		} else {
-			$this->bastille_update($event_name, $data);
+		if(!$data['mirrored']) {
+			$app->uses('getconf');
+			$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
+			if($server_config['firewall'] == 'ufw') {
+				$this->ufw_update($event_name, $data);
+			} else {
+				$this->bastille_update($event_name, $data);
+			}
 		}
-
 	}
 
 	public function delete($event_name, $data) {
 		global $app, $conf;
 
 		//* load the server configuration options
-		$app->uses('getconf');
-		$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
+		if(!$data['mirrored']) {
+			$app->uses('getconf');
+			$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 
-		if($server_config['firewall'] == 'ufw') {
-			$this->ufw_delete($event_name, $data);
-		} else {
-			$this->bastille_delete($event_name, $data);
+			if($server_config['firewall'] == 'ufw') {
+				$this->ufw_delete($event_name, $data);
+			} else {
+				$this->bastille_delete($event_name, $data);
+			}
 		}
-
 	}
 
 	private function ufw_update($event_name, $data) {
diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php
index 5bf37d1..6d109c5 100644
--- a/server/plugins-available/mail_plugin.inc.php
+++ b/server/plugins-available/mail_plugin.inc.php
@@ -107,10 +107,11 @@
 			$maildomain_path .= '/Maildir';
 		}
 
-		//* When the mail user dir exists but it is not a valid maildir, remove it
+		//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
 		if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
-			exec("su -c 'rm -rf ".escapeshellcmd($data['new']['maildir'])."' vmail");
-			$app->log('Removed invalid maildir and rebuild it: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
+			if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
+			exec("su -c 'mv -f ".escapeshellcmd($data['new']['maildir'])." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']."' vmail");
+			$app->log('Moved invalid maildir to corrupted Maildirs folder: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
 		}
 
 		//* Create the maildir, if it doesn not exist, set permissions, set quota.
@@ -238,10 +239,11 @@
 			$maildomain_path .= '/Maildir';
 		}
 
-		//* When the mail user dir exists but it is not a valid maildir, remove it
+		//* When the mail user dir exists but it is not a valid maildir, move it to corrupted maildir folder
 		if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
-			exec("su -c 'rm -rf ".escapeshellcmd($data['new']['maildir'])."' vmail");
-			$app->log('Removed invalid maildir and rebuild it: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
+			if(!is_dir($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'])) $app->system->mkdirpath($mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id'], 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']);
+			exec("su -c 'mv -f ".escapeshellcmd($data['new']['maildir'])." ".$mail_config['homedir_path'].'/corrupted/'.$data['new']['mailuser_id']."' vmail");
+			$app->log('Moved invalid maildir to corrupted Maildirs folder: '.escapeshellcmd($data['new']['maildir']), LOGLEVEL_WARN);
 		}
 
 		//* Create the maildir, if it doesn not exist, set permissions, set quota.
diff --git a/server/plugins-available/mysql_clientdb_plugin.inc.php b/server/plugins-available/mysql_clientdb_plugin.inc.php
index cba977c..6145db0 100644
--- a/server/plugins-available/mysql_clientdb_plugin.inc.php
+++ b/server/plugins-available/mysql_clientdb_plugin.inc.php
@@ -83,7 +83,14 @@
 		if(!is_array($host_list)) $host_list = explode(',', $host_list);
 
 		$success = true;
-
+		if(!preg_match('/\*[A-F0-9]{40}$/', $database_password)) {
+				$result = $link->query("SELECT PASSWORD('" . $link->escape_string($database_password) . "') as `crypted`");
+				if($result) {
+						$row = $result->fetch_assoc();
+						$database_password = $row['crypted'];
+						$result->free();
+				}
+		}
 		// loop through hostlist
 		foreach($host_list as $db_host) {
 			$db_host = trim($db_host);
@@ -270,7 +277,7 @@
 			$old_host_list .= 'localhost';
 
 			// Create the database user if database was disabled before
-			if($data['new']['active'] == 'y' && $data['old']['active'] == 'n') {
+			if($data['new']['active'] == 'y') {
 				if($db_user) {
 					if($db_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
 					else $this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $host_list, $link);
diff --git a/server/plugins-available/network_settings_plugin.inc.php b/server/plugins-available/network_settings_plugin.inc.php
index 56e4980..46242d9 100644
--- a/server/plugins-available/network_settings_plugin.inc.php
+++ b/server/plugins-available/network_settings_plugin.inc.php
@@ -243,12 +243,61 @@
 
 		} else {
 			if($data['mirrored'] == true) {
-				$app->log('Skipping network config request. IP addresses from amster are not configured on the mirror.', LOGLEVEL_DEBUG);
+				$app->log('Skipping network config request. IP addresses from master are not configured on the mirror.', LOGLEVEL_DEBUG);
 			}
 			if($server_config['auto_network_configuration'] == 'n') {
 				$app->log('Network configuration disabled in server settings.', LOGLEVEL_DEBUG);
 			}
 		}
+		
+		//* Configure hostname
+		if($event_name == 'server_update' && $data['mirrored'] == false) {
+			
+			//* get old server config
+			$tmp = $app->ini_parser->parse_ini_string(stripslashes($data['old']['config']));
+			$old_server_config = $tmp['server'];
+			unset($tmp);
+			
+			$new_hostname = trim($server_config['hostname']);
+			$old_hostname = trim($old_server_config['hostname']);
+			
+			if($new_hostname != '' && $old_hostname != $new_hostname) {
+				
+				if(is_file('/etc/hostname')) {
+					$app->system->file_put_contents('/etc/hostname',$new_hostname);
+					$app->log('Changed /etc/hostname to '.$new_hostname, LOGLEVEL_DEBUG);
+				}
+				
+				if(is_file('/etc/mailname')) {
+					$app->system->file_put_contents('/etc/mailname',$new_hostname);
+					$app->log('Changed /etc/mailname to '.$new_hostname, LOGLEVEL_DEBUG);
+				}
+				
+				$postconf_commands = array(
+					'myhostname = '.$new_hostname,
+					'mydestination = '.$new_hostname.', localhost, localhost.localdomain'
+				);
+				
+				//* Executing the postconf commands
+				foreach($postconf_commands as $cmd) {
+					$command = "postconf -e '$cmd'";
+					exec($command);
+				}
+				
+				$app->log('Changed changed myhostname and mydestination in postfix main.cf to '.$new_hostname, LOGLEVEL_DEBUG);
+				
+				//* change /etc/hosts
+				$hosts = file_get_contents('/etc/hosts');
+				$hosts = str_replace($old_hostname,$new_hostname,$hosts);
+				$app->system->file_put_contents('/etc/hosts',$hosts);
+				
+				exec($app->system->getinitcommand('postfix', 'restart').' 2>&1');
+				exec($app->system->getinitcommand('networking', 'restart').' 2>&1');
+				
+			}
+			
+		}
+		
 
 	}
 
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index dcfc674..b0e18c7 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -351,10 +351,13 @@
 			if($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain') $app->log('document_root not set', LOGLEVEL_WARN);
 			return 0;
 		}
-		if($data['new']['system_user'] == 'root' or $data['new']['system_group'] == 'root') {
-			$app->log('Websites cannot be owned by the root user or group.', LOGLEVEL_WARN);
+
+		if($app->system->is_allowed_user($data['new']['system_user'], $app->system->is_user($data['new']['system_user']), true) == false
+			|| $app->system->is_allowed_group($data['new']['system_group'], $app->system->is_group($data['new']['system_group']), true) == false) {
+			$app->log('Websites cannot be owned by the root user or group. User: '.$data['new']['system_user'].' Group: '.$data['new']['system_group'], LOGLEVEL_WARN);
 			return 0;
 		}
+
 		if(trim($data['new']['domain']) == '') {
 			$app->log('domain is empty', LOGLEVEL_WARN);
 			return 0;
@@ -465,6 +468,9 @@
 					$app->system->rename($data['new']['document_root'], $data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'));
 					$app->log('Renaming existing directory in new docroot location. mv '.$data['new']['document_root'].' '.$data['new']['document_root'].'_bak_'.date('Y_m_d_H_i_s'), LOGLEVEL_DEBUG);
 				}
+				
+				//* Unmount the old log directory bfore we move the log dir
+				exec('umount '.escapeshellcmd($old_dir.'/log'));
 
 				//* Create new base directory, if it does not exist yet
 				if(!is_dir($new_dir)) $app->system->mkdirpath($new_dir);
@@ -496,6 +502,8 @@
 			$app->system->removeLine('/etc/fstab', $fstab_line);
 			$fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.'    none    bind,nobootwait,_netdev    0 0';
 			$app->system->replaceLine('/etc/fstab', $fstab_line, $fstab_line, 1, 1);
+			
+			exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder));
 
 		}
 
@@ -714,7 +722,7 @@
 				$app->system->chmod($data['new']['document_root'].'/ssl', 0755);
 
 				// make tmp directory writable for nginx and the website users
-				$app->system->chmod($data['new']['document_root'].'/tmp', 0777);
+				$app->system->chmod($data['new']['document_root'].'/tmp', 0770);
 
 				// Set Log directory to 755 to make the logs accessible by the FTP user
 				if(realpath($data['new']['document_root'].'/'.$log_folder . '/error.log') == '/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log') {
@@ -774,7 +782,7 @@
 				$app->system->chmod($data['new']['document_root'].'/cgi-bin', 0755);
 
 				// make temp directory writable for nginx and the website users
-				$app->system->chmod($data['new']['document_root'].'/tmp', 0777);
+				$app->system->chmod($data['new']['document_root'].'/tmp', 0770);
 
 				// Set Log directory to 755 to make the logs accessible by the FTP user
 				if(realpath($data['new']['document_root'].'/'.$log_folder . '/error.log') == '/var/log/ispconfig/httpd/'.$data['new']['domain'].'/error.log') {
diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index 0ceced9..e331624 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -82,6 +82,13 @@
 			$app->log('Directory of the shell user is not valid.',LOGLEVEL_WARN);
 			return false;
 		}
+		
+		if(!$app->system->is_allowed_user($data['new']['username'], false, false)
+			|| !$app->system->is_allowed_user($data['new']['puser'], true, true)
+			|| !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) {
+			$app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN);
+			return false;
+		}
 
 		if($app->system->is_user($data['new']['puser'])) {
 
@@ -151,6 +158,13 @@
 			return false;
 		}
 
+		if(!$app->system->is_allowed_user($data['new']['username'], false, false)
+			|| !$app->system->is_allowed_user($data['new']['puser'], true, true)
+			|| !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) {
+			$app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN);
+			return false;
+		}
+		
 		if($app->system->is_user($data['new']['puser'])) {
 			// Get the UID of the parent user
 			$uid = intval($app->system->getuid($data['new']['puser']));
diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php
index 90ed677..9cf6fc8 100755
--- a/server/plugins-available/shelluser_jailkit_plugin.inc.php
+++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php
@@ -74,6 +74,13 @@
 		$app->uses('system');
 		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$data['new']['parent_domain_id']);
 
+		if(!$app->system->is_allowed_user($data['new']['username'], false, false)
+			|| !$app->system->is_allowed_user($data['new']['puser'], true, true)
+			|| !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) {
+			$app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN);
+			return false;
+		}
+
 		if($app->system->is_user($data['new']['puser'])) {
 			// Get the UID of the parent user
 			$uid = intval($app->system->getuid($data['new']['puser']));
@@ -139,6 +146,13 @@
 		$app->uses('system');
 		$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$data['new']['parent_domain_id']);
 
+		if(!$app->system->is_allowed_user($data['new']['username'], false, false)
+			|| !$app->system->is_allowed_user($data['new']['puser'], true, true)
+			|| !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) {
+			$app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN);
+			return false;
+		}
+
 		if($app->system->is_user($data['new']['puser'])) {
 			// Get the UID of the parent user
 			$uid = intval($app->system->getuid($data['new']['puser']));
diff --git a/server/scripts/ispconfig_update.php b/server/scripts/ispconfig_update.php
index 3512de9..2a5deed 100644
--- a/server/scripts/ispconfig_update.php
+++ b/server/scripts/ispconfig_update.php
@@ -86,9 +86,9 @@
                                              |___/ ";
 echo "\n".str_repeat('-', 80)."\n";
 echo "\n\n>> Update  \n\n";
-echo "Please choose the update method. For production systems select 'stable'. \nThe update from svn is only for development systems and may break your current setup.\nNote: Update all slave server, before you update master server.\n\n";
+echo "Please choose the update method. For production systems select 'stable'. \nWARNING: The update from GIT is only for development systems and may break your current setup. Do not use the GIT version on servers that host any live websites!\nNote: Update all slave server, before you update master server.\n\n";
 
-$method = simple_query('Select update method', array('stable', 'svn'), 'stable');
+$method = simple_query('Select update method', array('stable', 'git'), 'stable');
 
 if($method == 'stable') {
 	$new_version = @file_get_contents('http://www.ispconfig.org/downloads/ispconfig3_version.txt') or die('Unable to retrieve version file.');

--
Gitblit v1.9.1